/*
* Copyright 2013 Vadim Girlin <vadimgirlin@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* on the rights to use, copy, modify, merge, publish, distribute, sub
* license, and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Authors:
* Vadim Girlin
*/
// TODO add all formats
// CF
BC_FORMAT_BEGIN_HW(CF_WORD0, R6R7)
BC_FIELD(CF_WORD0, ADDR, ADDR, 31, 0)
BC_FORMAT_END(CF_WORD0)
BC_FORMAT_BEGIN_HW(CF_WORD0, EGCM)
BC_FIELD(CF_WORD0, ADDR, ADDR, 23, 0)
BC_FIELD(CF_WORD0, JUMPTABLE_SEL, JTS, 26, 24)
BC_RSRVD(CF_WORD0, 31, 27)
BC_FORMAT_END(CF_WORD0)
BC_FORMAT_BEGIN_HW(CF_GWS_WORD0, EGCM)
BC_FIELD(CF_GWS_WORD0, VALUE, VAL, 9, 0)
BC_RSRVD(CF_GWS_WORD0, 15, 10)
BC_FIELD(CF_GWS_WORD0, RESOURCE, RSRC, 20, 16)
BC_RSRVD(CF_GWS_WORD0, 24, 21)
BC_FIELD(CF_GWS_WORD0, SIGN, SIGN, 25, 25)
BC_FIELD(CF_GWS_WORD0, VAL_INDEX_MODE, VIM, 27, 26)
BC_FIELD(CF_GWS_WORD0, RSRC_INDEX_MODE, RIM, 29, 28)
BC_FIELD(CF_GWS_WORD0, GWS_OPCODE, GWS_OP, 31, 30)
BC_FORMAT_END(CF_GWS_WORD0)
BC_FORMAT_BEGIN_HW(CF_WORD1, R6R7)
BC_FIELD(CF_WORD1, POP_COUNT, PC, 2, 0)
BC_FIELD(CF_WORD1, CF_CONST, CF_CONST, 7, 3)
BC_FIELD(CF_WORD1, COND, COND, 9, 8)
BC_FIELD(CF_WORD1, COUNT, COUNT, 12, 10)
BC_FIELD(CF_WORD1, CALL_COUNT, CALL_CNT, 18, 13)
BC_FIELD(CF_WORD1, COUNT_3, COUNT_3, 19, 19)
BC_RSRVD(CF_WORD1, 20, 20)
BC_FIELD(CF_WORD1, END_OF_PROGRAM, EOP, 21, 21)
BC_FIELD(CF_WORD1, VALID_PIXEL_MODE, VPM, 22, 22)
BC_FIELD(CF_WORD1, CF_INST, CF_INST, 29, 23)
BC_FIELD(CF_WORD1, WHOLE_QUAD_MODE, WQM, 30, 30)
BC_FIELD(CF_WORD1, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_WORD1)
BC_FORMAT_BEGIN_HW(CF_WORD1, EG)
BC_FIELD(CF_WORD1, POP_COUNT, PC, 2, 0)
BC_FIELD(CF_WORD1, CF_CONST, CF_CONST, 7, 3)
BC_FIELD(CF_WORD1, COND, COND, 9, 8)
BC_FIELD(CF_WORD1, COUNT, COUNT, 15, 10)
BC_RSRVD(CF_WORD1, 19, 16)
BC_FIELD(CF_WORD1, VALID_PIXEL_MODE, VPM, 20, 20)
BC_FIELD(CF_WORD1, END_OF_PROGRAM, EOP, 21, 21)
BC_FIELD(CF_WORD1, CF_INST, CF_INST, 29, 22)
BC_FIELD(CF_WORD1, WHOLE_QUAD_MODE, WQM, 30, 30)
BC_FIELD(CF_WORD1, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_WORD1)
BC_FORMAT_BEGIN_HW(CF_WORD1, CM)
BC_FIELD(CF_WORD1, POP_COUNT, PC, 2, 0)
BC_FIELD(CF_WORD1, CF_CONST, CF_CONST, 7, 3)
BC_FIELD(CF_WORD1, COND, COND, 9, 8)
BC_FIELD(CF_WORD1, COUNT, COUNT, 15, 10)
BC_RSRVD(CF_WORD1, 19, 16)
BC_FIELD(CF_WORD1, VALID_PIXEL_MODE, VPM, 20, 20)
BC_RSRVD(CF_WORD1, 21, 21)
BC_FIELD(CF_WORD1, CF_INST, CF_INST, 29, 22)
BC_RSRVD(CF_WORD1, 30, 30)
BC_FIELD(CF_WORD1, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_WORD1)
BC_FORMAT_BEGIN(CF_ALU_WORD0)
BC_FIELD(CF_ALU_WORD0, ADDR, ADDR, 21, 0)
BC_FIELD(CF_ALU_WORD0, KCACHE_BANK0, KB0, 25, 22)
BC_FIELD(CF_ALU_WORD0, KCACHE_BANK1, KB1, 29, 26)
BC_FIELD(CF_ALU_WORD0, KCACHE_MODE0, KM0, 31, 30)
BC_FORMAT_END(CF_ALU_WORD0)
BC_FORMAT_BEGIN_HW(CF_ALU_WORD1, R6)
BC_FIELD(CF_ALU_WORD1, KCACHE_MODE1, KM1, 1, 0)
BC_FIELD(CF_ALU_WORD1, KCACHE_ADDR0, KA0, 9, 2)
BC_FIELD(CF_ALU_WORD1, KCACHE_ADDR1, KA1, 17, 10)
BC_FIELD(CF_ALU_WORD1, COUNT, COUNT, 24, 18)
BC_FIELD(CF_ALU_WORD1, USES_WATERFALL, UW, 25, 25)
BC_FIELD(CF_ALU_WORD1, CF_INST, CF_INST, 29, 26)
BC_FIELD(CF_ALU_WORD1, WHOLE_QUAD_MODE, WQM, 30, 30)
BC_FIELD(CF_ALU_WORD1, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALU_WORD1)
BC_FORMAT_BEGIN_HW(CF_ALU_WORD1, R7EGCM)
BC_FIELD(CF_ALU_WORD1, KCACHE_MODE1, KM1, 1, 0)
BC_FIELD(CF_ALU_WORD1, KCACHE_ADDR0, KA0, 9, 2)
BC_FIELD(CF_ALU_WORD1, KCACHE_ADDR1, KA1, 17, 10)
BC_FIELD(CF_ALU_WORD1, COUNT, COUNT, 24, 18)
BC_FIELD(CF_ALU_WORD1, ALT_CONST, ALT_C, 25, 25)
BC_FIELD(CF_ALU_WORD1, CF_INST, CF_INST, 29, 26)
BC_FIELD(CF_ALU_WORD1, WHOLE_QUAD_MODE, WQM, 30, 30)
BC_FIELD(CF_ALU_WORD1, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALU_WORD1)
BC_FORMAT_BEGIN_HW(CF_ALU_WORD0_EXT, EGCM)
BC_RSRVD(CF_ALU_WORD0_EXT, 3, 0)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_BANK_INDEX_MODE0, KBIM0, 5, 4)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_BANK_INDEX_MODE1, KBIM1, 7, 6)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_BANK_INDEX_MODE2, KBIM2, 9, 8)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_BANK_INDEX_MODE3, KBIM3, 11, 10)
BC_RSRVD(CF_ALU_WORD0_EXT, 21, 12)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_BANK2, KB2, 25, 22)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_BANK3, KB3, 29, 26)
BC_FIELD(CF_ALU_WORD0_EXT, KCACHE_MODE2, KM2, 31, 30)
BC_FORMAT_END(CF_ALU_WORD0_EXT)
BC_FORMAT_BEGIN_HW(CF_ALU_WORD1_EXT, EGCM)
BC_FIELD(CF_ALU_WORD1_EXT, KCACHE_MODE3, KM3, 1, 0)
BC_FIELD(CF_ALU_WORD1_EXT, KCACHE_ADDR2, KA2, 9, 2)
BC_FIELD(CF_ALU_WORD1_EXT, KCACHE_ADDR3, KA3, 17, 10)
BC_RSRVD(CF_ALU_WORD1_EXT, 25, 18)
BC_FIELD(CF_ALU_WORD1_EXT, CF_INST, CF_INST, 29, 26)
BC_RSRVD(CF_ALU_WORD1_EXT, 30, 30)
BC_FIELD(CF_ALU_WORD1_EXT, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALU_WORD1_EXT)
BC_FORMAT_BEGIN(CF_ALLOC_EXPORT_WORD0)
BC_FIELD(CF_ALLOC_EXPORT_WORD0, ARRAY_BASE, ARR_BS, 12, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD0, TYPE, TYPE, 14, 13)
BC_FIELD(CF_ALLOC_EXPORT_WORD0, RW_GPR, RW_GPR, 21, 15)
BC_FIELD(CF_ALLOC_EXPORT_WORD0, RW_REL, RW_REL, 22, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD0, INDEX_GPR, IND_GPR, 29, 23)
BC_FIELD(CF_ALLOC_EXPORT_WORD0, ELEM_SIZE, ES, 31, 30)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD0)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD0_RAT, EGCM)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, RAT_ID, R_ID, 3, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, RAT_INST, R_INST, 9, 4)
BC_RSRVD(CF_ALLOC_EXPORT_WORD0_RAT, 10, 10)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, RAT_INDEX_MODE, RIM, 12, 11)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, TYPE, TYPE, 14, 13)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, RW_GPR, RW_GPR, 21, 15)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, RW_REL, RW_REL, 22, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, INDEX_GPR, IND_GPR, 29, 23)
BC_FIELD(CF_ALLOC_EXPORT_WORD0_RAT, ELEM_SIZE, ES, 31, 30)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD0_RAT)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD1_BUF, R6R7)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, ARRAY_SIZE, ARR_SZ, 11, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, COMP_MASK, MASK, 15, 12)
BC_RSRVD(CF_ALLOC_EXPORT_WORD1_BUF, 16, 16)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, BURST_COUNT, BURST, 20, 17)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, END_OF_PROGRAM, EOP, 21, 21)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, VALID_PIXEL_MODE, VPM, 22, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, CF_INST, CF_INST, 29, 23)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, WHOLE_QUAD_MODE, WQM, 30, 30)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD1_BUF)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD1_BUF, EG)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, ARRAY_SIZE, ARR_SZ, 11, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, COMP_MASK, MASK, 15, 12)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, BURST_COUNT, BURST, 19, 16)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, VALID_PIXEL_MODE, VPM, 20, 20)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, END_OF_PROGRAM, EOP, 21, 21)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, CF_INST, CF_INST, 29, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, MARK, MARK, 30, 30)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD1_BUF)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD1_BUF, CM)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, ARRAY_SIZE, ARR_SZ, 11, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, COMP_MASK, MASK, 15, 12)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, BURST_COUNT, BURST, 19, 16)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, VALID_PIXEL_MODE, VPM, 20, 20)
BC_RSRVD(CF_ALLOC_EXPORT_WORD1_BUF, 21, 21)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, CF_INST, CF_INST, 29, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, MARK, MARK, 30, 30)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_BUF, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD1_BUF)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD1_SWIZ, R6R7)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_X, SEL_X, 2, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_Y, SEL_Y, 5, 3)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_Z, SEL_Z, 8, 6)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_W, SEL_W, 11, 9)
BC_RSRVD(CF_ALLOC_EXPORT_WORD1_SWIZ, 16, 12)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, BURST_COUNT, BURST, 20, 17)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, END_OF_PROGRAM, EOP, 21, 21)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, VALID_PIXEL_MODE, VPM, 22, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, CF_INST, CF_INST, 29, 23)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, WHOLE_QUAD_MODE, WQM, 30, 30)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD1_SWIZ)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD1_SWIZ, EG)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_X, SEL_X, 2, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_Y, SEL_Y, 5, 3)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_Z, SEL_Z, 8, 6)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_W, SEL_W, 11, 9)
BC_RSRVD(CF_ALLOC_EXPORT_WORD1_SWIZ, 15, 12)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, BURST_COUNT, BURST, 19, 16)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, VALID_PIXEL_MODE, VPM, 20, 20)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, END_OF_PROGRAM, EOP, 21, 21)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, CF_INST, CF_INST, 29, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, MARK, M, 30, 30)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD1_SWIZ)
BC_FORMAT_BEGIN_HW(CF_ALLOC_EXPORT_WORD1_SWIZ, CM)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_X, SEL_X, 2, 0)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_Y, SEL_Y, 5, 3)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_Z, SEL_Z, 8, 6)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, SEL_W, SEL_W, 11, 9)
BC_RSRVD(CF_ALLOC_EXPORT_WORD1_SWIZ, 15, 12)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, BURST_COUNT, BURST, 19, 16)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, VALID_PIXEL_MODE, VPM, 20, 20)
BC_RSRVD(CF_ALLOC_EXPORT_WORD1_SWIZ, 21, 21)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, CF_INST, CF_INST, 29, 22)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, MARK, M, 30, 30)
BC_FIELD(CF_ALLOC_EXPORT_WORD1_SWIZ, BARRIER, B, 31, 31)
BC_FORMAT_END(CF_ALLOC_EXPORT_WORD1_SWIZ)
// ALU
BC_FORMAT_BEGIN(ALU_WORD0)
BC_FIELD(ALU_WORD0, SRC0_SEL, S0S, 8, 0)
BC_FIELD(ALU_WORD0, SRC0_REL, S0R, 9, 9)
BC_FIELD(ALU_WORD0, SRC0_CHAN, S0C, 11, 10)
BC_FIELD(ALU_WORD0, SRC0_NEG, S0N, 12, 12)
BC_FIELD(ALU_WORD0, SRC1_SEL, S1S, 21, 13)
BC_FIELD(ALU_WORD0, SRC1_REL, S1R, 22, 22)
BC_FIELD(ALU_WORD0, SRC1_CHAN, S1C, 24, 23)
BC_FIELD(ALU_WORD0, SRC1_NEG, S1N, 25, 25)
BC_FIELD(ALU_WORD0, INDEX_MODE, IM, 28, 26)
BC_FIELD(ALU_WORD0, PRED_SEL, PS, 30, 29)
BC_FIELD(ALU_WORD0, LAST, L, 31, 31)
BC_FORMAT_END(ALU_WORD0)
BC_FORMAT_BEGIN_HW(ALU_WORD1_OP2, R6)
BC_FIELD(ALU_WORD1_OP2, SRC0_ABS, S0A, 0, 0)
BC_FIELD(ALU_WORD1_OP2, SRC1_ABS, S1A, 1, 1)
BC_FIELD(ALU_WORD1_OP2, UPDATE_EXEC_MASK, UEM, 2, 2)
BC_FIELD(ALU_WORD1_OP2, UPDATE_PRED, UP, 3, 3)
BC_FIELD(ALU_WORD1_OP2, WRITE_MASK, WM, 4, 4)
BC_FIELD(ALU_WORD1_OP2, FOG_MERGE, FM, 5, 5)
BC_FIELD(ALU_WORD1_OP2, OMOD, OMOD, 7, 6)
BC_FIELD(ALU_WORD1_OP2, ALU_INST, INST, 17, 8)
BC_FIELD(ALU_WORD1_OP2, BANK_SWIZZLE, BS, 20, 18)
BC_FIELD(ALU_WORD1_OP2, DST_GPR, DGPR, 27, 21)
BC_FIELD(ALU_WORD1_OP2, DST_REL, DR, 28, 28)
BC_FIELD(ALU_WORD1_OP2, DST_CHAN, DC, 30, 29)
BC_FIELD(ALU_WORD1_OP2, CLAMP, C, 31, 31)
BC_FORMAT_END(ALU_WORD1_OP2)
BC_FORMAT_BEGIN_HW(ALU_WORD1_OP2, R7EGCM)
BC_FIELD(ALU_WORD1_OP2, SRC0_ABS, S0A, 0, 0)
BC_FIELD(ALU_WORD1_OP2, SRC1_ABS, S1A, 1, 1)
BC_FIELD(ALU_WORD1_OP2, UPDATE_EXEC_MASK, UEM, 2, 2)
BC_FIELD(ALU_WORD1_OP2, UPDATE_PRED, UP, 3, 3)
BC_FIELD(ALU_WORD1_OP2, WRITE_MASK, WM, 4, 4)
BC_FIELD(ALU_WORD1_OP2, OMOD, OMOD, 6, 5)
BC_FIELD(ALU_WORD1_OP2, ALU_INST, INST, 17, 7)
BC_FIELD(ALU_WORD1_OP2, BANK_SWIZZLE, BS, 20, 18)
BC_FIELD(ALU_WORD1_OP2, DST_GPR, DGPR, 27, 21)
BC_FIELD(ALU_WORD1_OP2, DST_REL, DR, 28, 28)
BC_FIELD(ALU_WORD1_OP2, DST_CHAN, DC, 30, 29)
BC_FIELD(ALU_WORD1_OP2, CLAMP, C, 31, 31)
BC_FORMAT_END(ALU_WORD1_OP2)
BC_FORMAT_BEGIN_HW(ALU_WORD1_OP2_MOVA, CM)
BC_FIELD(ALU_WORD1_OP2_MOVA, SRC0_ABS, S0A, 0, 0)
BC_FIELD(ALU_WORD1_OP2_MOVA, SRC1_ABS, S1A, 1, 1)
BC_FIELD(ALU_WORD1_OP2_MOVA, UPDATE_EXEC_MASK, UEM, 2, 2)
BC_FIELD(ALU_WORD1_OP2_MOVA, UPDATE_PRED, UP, 3, 3)
BC_FIELD(ALU_WORD1_OP2_MOVA, WRITE_MASK, WM, 4, 4)
BC_FIELD(ALU_WORD1_OP2_MOVA, OMOD, OMOD, 6, 5)
BC_FIELD(ALU_WORD1_OP2_MOVA, ALU_INST, INST, 17, 7)
BC_FIELD(ALU_WORD1_OP2_MOVA, BANK_SWIZZLE, BS, 20, 18)
BC_FIELD(ALU_WORD1_OP2_MOVA, MOVA_DST, MOVA_DST, 27, 21)
BC_FIELD(ALU_WORD1_OP2_MOVA, DST_REL, DR, 28, 28)
BC_FIELD(ALU_WORD1_OP2_MOVA, DST_CHAN, DC, 30, 29)
BC_FIELD(ALU_WORD1_OP2_MOVA, CLAMP, C, 31, 31)
BC_FORMAT_END(ALU_WORD1_OP2_MOVA)
BC_FORMAT_BEGIN_HW(ALU_WORD1_OP2_EXEC_MASK, CM)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, SRC0_ABS, S0A, 0, 0)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, SRC1_ABS, S1A, 1, 1)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, UPDATE_EXEC_MASK, UEM, 2, 2)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, UPDATE_PRED, UP, 3, 3)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, WRITE_MASK, WM, 4, 4)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, EXECUTE_MASK_OP, EMO, 6, 5)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, ALU_INST, INST, 17, 7)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, BANK_SWIZZLE, BS, 20, 18)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, DST_GPR, DGPR, 27, 21)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, DST_REL, DR, 28, 28)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, DST_CHAN, DC, 30, 29)
BC_FIELD(ALU_WORD1_OP2_EXEC_MASK, CLAMP, C, 31, 31)
BC_FORMAT_END(ALU_WORD1_OP2_EXEC_MASK)
BC_FORMAT_BEGIN(ALU_WORD1_OP3)
BC_FIELD(ALU_WORD1_OP3, SRC2_SEL, S2S, 8, 0)
BC_FIELD(ALU_WORD1_OP3, SRC2_REL, S2R, 9, 9)
BC_FIELD(ALU_WORD1_OP3, SRC2_CHAN, S2C, 11, 10)
BC_FIELD(ALU_WORD1_OP3, SRC2_NEG, S2N, 12, 12)
BC_FIELD(ALU_WORD1_OP3, ALU_INST, INST, 17, 13)
BC_FIELD(ALU_WORD1_OP3, BANK_SWIZZLE, BS, 20, 18)
BC_FIELD(ALU_WORD1_OP3, DST_GPR, DGPR, 27, 21)
BC_FIELD(ALU_WORD1_OP3, DST_REL, DR, 28, 28)
BC_FIELD(ALU_WORD1_OP3, DST_CHAN, DC, 30, 29)
BC_FIELD(ALU_WORD1_OP3, CLAMP, C, 31, 31)
BC_FORMAT_END(ALU_WORD1_OP3)
BC_FORMAT_BEGIN_HW(ALU_WORD0_LDS_IDX_OP, EGCM)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, SRC0_SEL, S0S, 8, 0)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, SRC0_REL, S0R, 9, 9)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, SRC0_CHAN, S0C, 11, 10)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, IDX_OFFSET_4, IO4, 12, 12)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, SRC1_SEL, S1S, 21, 13)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, SRC1_REL, S1R, 22, 22)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, SRC1_CHAN, S1C, 24, 23)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, IDX_OFFSET_5, IO5, 25, 25)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, INDEX_MODE, IM, 28, 26)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, PRED_SEL, PS, 30, 29)
BC_FIELD(ALU_WORD0_LDS_IDX_OP, LAST, L, 31, 31)
BC_FORMAT_END(ALU_WORD0_LDS_IDX_OP)
BC_FORMAT_BEGIN_HW(ALU_WORD1_LDS_IDX_OP, EGCM)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, SRC2_SEL, S2S, 8, 0)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, SRC2_REL, S2R, 9, 9)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, SRC2_CHAN, S2C, 11, 10)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, IDX_OFFSET_1, IO1, 12, 12)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, ALU_INST, INST, 17, 13)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, BANK_SWIZZLE, BS, 20, 18)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, LDS_OP, LDS_OP, 26, 21)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, IDX_OFFSET_0, IO0, 27, 27)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, IDX_OFFSET_2, IO2, 28, 28)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, DST_CHAN, DC, 30, 29)
BC_FIELD(ALU_WORD1_LDS_IDX_OP, IDX_OFFSET_3, IO3, 31, 31)
BC_FORMAT_END(ALU_WORD1_LDS_IDX_OP)
BC_FORMAT_BEGIN_HW(ALU_WORD1_LDS_DIRECT_LITERAL_LO, EGCM)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_LO, OFFSET_A, OFS_A, 12, 0)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_LO, STRIDE_A, STR_A, 19, 13)
BC_RSRVD(ALU_WORD1_LDS_DIRECT_LITERAL_LO, 21, 20)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_LO, THREAD_REL_A, THR_A, 22, 22)
BC_RSRVD(ALU_WORD1_LDS_DIRECT_LITERAL_LO, 31, 22)
BC_FORMAT_END(ALU_WORD1_LDS_DIRECT_LITERAL_LO)
BC_FORMAT_BEGIN_HW(ALU_WORD1_LDS_DIRECT_LITERAL_HI, EGCM)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_HI, OFFSET_B, OFS_B, 12, 0)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_HI, STRIDE_B, STR_B, 19, 13)
BC_RSRVD(ALU_WORD1_LDS_DIRECT_LITERAL_HI, 21, 20)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_HI, THREAD_REL_B, THR_B, 22, 22)
BC_RSRVD(ALU_WORD1_LDS_DIRECT_LITERAL_HI, 30, 22)
BC_FIELD(ALU_WORD1_LDS_DIRECT_LITERAL_HI, DIRECT_READ_32, DR32, 31, 31)
BC_FORMAT_END(ALU_WORD1_LDS_DIRECT_LITERAL_HI)
// VTX
BC_FORMAT_BEGIN_HW(VTX_WORD0, R6R7EG)
BC_FIELD(VTX_WORD0, VC_INST, INST, 4, 0)
BC_FIELD(VTX_WORD0, FETCH_TYPE, FT, 6, 5)
BC_FIELD(VTX_WORD0, FETCH_WHOLE_QUAD, FWQ, 7, 7)
BC_FIELD(VTX_WORD0, BUFFER_ID, BUF_ID, 15, 8)
BC_FIELD(VTX_WORD0, SRC_GPR, S_GPR, 22, 16)
BC_FIELD(VTX_WORD0, SRC_REL, SR, 23, 23)
BC_FIELD(VTX_WORD0, SRC_SEL_X, SSX, 25, 24)
BC_FIELD(VTX_WORD0, MEGA_FETCH_COUNT, MFC, 31, 26)
BC_FORMAT_END(VTX_WORD0)
BC_FORMAT_BEGIN_HW(VTX_WORD0, CM)
BC_FIELD(VTX_WORD0, VC_INST, INST, 4, 0)
BC_FIELD(VTX_WORD0, FETCH_TYPE, FT, 6, 5)
BC_FIELD(VTX_WORD0, FETCH_WHOLE_QUAD, FWQ, 7, 7)
BC_FIELD(VTX_WORD0, BUFFER_ID, BUF_ID, 15, 8)
BC_FIELD(VTX_WORD0, SRC_GPR, S_GPR, 22, 16)
BC_FIELD(VTX_WORD0, SRC_REL, SR, 23, 23)
BC_FIELD(VTX_WORD0, SRC_SEL_X, SSX, 25, 24)
BC_FIELD(VTX_WORD0, SRC_SEL_Y, SSY, 27, 26)
BC_FIELD(VTX_WORD0, STRUCTURED_READ, SR, 29, 28)
BC_FIELD(VTX_WORD0, LDS_REQ, LR, 30, 30)
BC_FIELD(VTX_WORD0, COALESCED_READ, CR, 31, 31)
BC_FORMAT_END(VTX_WORD0)
BC_FORMAT_BEGIN(VTX_WORD1_GPR)
BC_FIELD(VTX_WORD1_GPR, DST_GPR, D_GPR, 6, 0)
BC_FIELD(VTX_WORD1_GPR, DST_REL, DR, 7, 7)
BC_RSRVD(VTX_WORD1_GPR, 8, 8)
BC_FIELD(VTX_WORD1_GPR, DST_SEL_X, DSX, 11, 9)
BC_FIELD(VTX_WORD1_GPR, DST_SEL_Y, DSY, 14, 12)
BC_FIELD(VTX_WORD1_GPR, DST_SEL_Z, DSZ, 17, 15)
BC_FIELD(VTX_WORD1_GPR, DST_SEL_W, DSW, 20, 18)
BC_FIELD(VTX_WORD1_GPR, USE_CONST_FIELDS, UCF, 21, 21)
BC_FIELD(VTX_WORD1_GPR, DATA_FORMAT, DFMT, 27, 22)
BC_FIELD(VTX_WORD1_GPR, NUM_FORMAT_ALL, NFA, 29, 28)
BC_FIELD(VTX_WORD1_GPR, FORMAT_COMP_ALL, FCA, 30, 30)
BC_FIELD(VTX_WORD1_GPR, SRF_MODE_ALL, SMA, 31, 31)
BC_FORMAT_END(VTX_WORD1_GPR)
BC_FORMAT_BEGIN(VTX_WORD1_SEM)
BC_FIELD(VTX_WORD1_SEM, SEMANTIC_ID, SID, 7, 0)
BC_RSRVD(VTX_WORD1_SEM, 8, 8)
BC_FIELD(VTX_WORD1_SEM, DST_SEL_X, DSX, 11, 9)
BC_FIELD(VTX_WORD1_SEM, DST_SEL_Y, DSY, 14, 12)
BC_FIELD(VTX_WORD1_SEM, DST_SEL_Z, DSZ, 17, 15)
BC_FIELD(VTX_WORD1_SEM, DST_SEL_W, DSW, 20, 18)
BC_FIELD(VTX_WORD1_SEM, USE_CONST_FIELDS, UCF, 21, 21)
BC_FIELD(VTX_WORD1_SEM, DATA_FORMAT, DFMT, 27, 22)
BC_FIELD(VTX_WORD1_SEM, NUM_FORMAT_ALL, NFA, 29, 28)
BC_FIELD(VTX_WORD1_SEM, FORMAT_COMP_ALL, FCA, 30, 30)
BC_FIELD(VTX_WORD1_SEM, SRF_MODE_ALL, SMA, 31, 31)
BC_FORMAT_END(VTX_WORD1_SEM)
BC_FORMAT_BEGIN_HW(VTX_WORD2, R6)
BC_FIELD(VTX_WORD2, OFFSET, OFS, 15, 0)
BC_FIELD(VTX_WORD2, ENDIAN_SWAP, ES, 17, 16)
BC_FIELD(VTX_WORD2, CONST_BUF_NO_STRIDE, CBNS, 18, 18)
BC_FIELD(VTX_WORD2, MEGA_FETCH, MF, 19, 19)
BC_RSRVD(VTX_WORD2, 31, 20)
BC_FORMAT_END(VTX_WORD2)
BC_FORMAT_BEGIN_HW(VTX_WORD2, R7)
BC_FIELD(VTX_WORD2, OFFSET, OFS, 15, 0)
BC_FIELD(VTX_WORD2, ENDIAN_SWAP, ES, 17, 16)
BC_FIELD(VTX_WORD2, CONST_BUF_NO_STRIDE, CBNS, 18, 18)
BC_FIELD(VTX_WORD2, MEGA_FETCH, MF, 19, 19)
BC_FIELD(VTX_WORD2, ALT_CONST, ALT_C, 20, 20)
BC_RSRVD(VTX_WORD2, 31, 21)
BC_FORMAT_END(VTX_WORD2)
BC_FORMAT_BEGIN_HW(VTX_WORD2, EG)
BC_FIELD(VTX_WORD2, OFFSET, OFS, 15, 0)
BC_FIELD(VTX_WORD2, ENDIAN_SWAP, ES, 17, 16)
BC_FIELD(VTX_WORD2, CONST_BUF_NO_STRIDE, CBNS, 18, 18)
BC_FIELD(VTX_WORD2, MEGA_FETCH, MF, 19, 19)
BC_FIELD(VTX_WORD2, ALT_CONST, ALT_C, 20, 20)
BC_FIELD(VTX_WORD2, BUFFER_INDEX_MODE, BIM, 22, 21)
BC_RSRVD(VTX_WORD2, 31, 23)
BC_FORMAT_END(VTX_WORD2)
BC_FORMAT_BEGIN_HW(VTX_WORD2, CM)
BC_FIELD(VTX_WORD2, OFFSET, OFS, 15, 0)
BC_FIELD(VTX_WORD2, ENDIAN_SWAP, ES, 17, 16)
BC_FIELD(VTX_WORD2, CONST_BUF_NO_STRIDE, CBNS, 18, 18)
BC_RSRVD(VTX_WORD2, 19, 19)
BC_FIELD(VTX_WORD2, ALT_CONST, ALT_C, 20, 20)
BC_FIELD(VTX_WORD2, BUFFER_INDEX_MODE, BIM, 22, 21)
BC_RSRVD(VTX_WORD2, 31, 23)
BC_FORMAT_END(VTX_WORD2)
// TEX
BC_FORMAT_BEGIN_HW(TEX_WORD0, R6)
BC_FIELD(TEX_WORD0, TEX_INST, T_INST, 4, 0)
BC_FIELD(TEX_WORD0, BC_FRAC_MODE, BFM, 5, 5)
BC_RSRVD(TEX_WORD0, 6, 6)
BC_FIELD(TEX_WORD0, FETCH_WHOLE_QUAD, FWQ, 7, 7)
BC_FIELD(TEX_WORD0, RESOURCE_ID, RSRC_ID, 15, 8)
BC_FIELD(TEX_WORD0, SRC_GPR, S_GPR, 22, 16)
BC_FIELD(TEX_WORD0, SRC_REL, SR, 23, 23)
BC_RSRVD(TEX_WORD0, 31, 24)
BC_FORMAT_END(TEX_WORD0)
BC_FORMAT_BEGIN_HW(TEX_WORD0, R7)
BC_FIELD(TEX_WORD0, TEX_INST, T_INST, 4, 0)
BC_FIELD(TEX_WORD0, BC_FRAC_MODE, BFM, 5, 5)
BC_RSRVD(TEX_WORD0, 6, 6)
BC_FIELD(TEX_WORD0, FETCH_WHOLE_QUAD, FWQ, 7, 7)
BC_FIELD(TEX_WORD0, RESOURCE_ID, RSRC_ID, 15, 8)
BC_FIELD(TEX_WORD0, SRC_GPR, S_GPR, 22, 16)
BC_FIELD(TEX_WORD0, SRC_REL, SR, 23, 23)
BC_FIELD(TEX_WORD0, ALT_CONST, ALT_C, 24, 24)
BC_RSRVD(TEX_WORD0, 31, 25)
BC_FORMAT_END(TEX_WORD0)
BC_FORMAT_BEGIN_HW(TEX_WORD0, EGCM)
BC_FIELD(TEX_WORD0, TEX_INST, T_INST, 4, 0)
BC_FIELD(TEX_WORD0, INST_MOD, IMOD, 6, 5)
BC_FIELD(TEX_WORD0, FETCH_WHOLE_QUAD, FWQ, 7, 7)
BC_FIELD(TEX_WORD0, RESOURCE_ID, RSRC_ID, 15, 8)
BC_FIELD(TEX_WORD0, SRC_GPR, S_GPR, 22, 16)
BC_FIELD(TEX_WORD0, SRC_REL, SR, 23, 23)
BC_FIELD(TEX_WORD0, ALT_CONST, ALT_C, 24, 24)
BC_FIELD(TEX_WORD0, RESOURCE_INDEX_MODE, RIM, 26, 25)
BC_FIELD(TEX_WORD0, SAMPLER_INDEX_MODE, SIM, 28, 27)
BC_RSRVD(TEX_WORD0, 31, 29)
BC_FORMAT_END(TEX_WORD0)
BC_FORMAT_BEGIN(TEX_WORD1)
BC_FIELD(TEX_WORD1, DST_GPR, D_GPR, 6, 0)
BC_FIELD(TEX_WORD1, DST_REL, DR, 7, 7)
BC_RSRVD(TEX_WORD1, 8, 8)
BC_FIELD(TEX_WORD1, DST_SEL_X, DSX, 11, 9)
BC_FIELD(TEX_WORD1, DST_SEL_Y, DSY, 14, 12)
BC_FIELD(TEX_WORD1, DST_SEL_Z, DSZ, 17, 15)
BC_FIELD(TEX_WORD1, DST_SEL_W, DSW, 20, 18)
BC_FIELD(TEX_WORD1, LOD_BIAS, LBIAS, 27, 21)
BC_FIELD(TEX_WORD1, COORD_TYPE_X, CTX, 28, 28)
BC_FIELD(TEX_WORD1, COORD_TYPE_Y, CTY, 29, 29)
BC_FIELD(TEX_WORD1, COORD_TYPE_Z, CTZ, 30, 30)
BC_FIELD(TEX_WORD1, COORD_TYPE_W, CTW, 31, 31)
BC_FORMAT_END(TEX_WORD1)
BC_FORMAT_BEGIN(TEX_WORD2)
BC_FIELD(TEX_WORD2, OFFSET_X, OFS_X, 4, 0)
BC_FIELD(TEX_WORD2, OFFSET_Y, OFS_Y, 9, 5)
BC_FIELD(TEX_WORD2, OFFSET_Z, OFS_Z, 14, 10)
BC_FIELD(TEX_WORD2, SAMPLER_ID, SAMP_ID, 19, 15)
BC_FIELD(TEX_WORD2, SRC_SEL_X, SSX, 22, 20)
BC_FIELD(TEX_WORD2, SRC_SEL_Y, SSY, 25, 23)
BC_FIELD(TEX_WORD2, SRC_SEL_Z, SSZ, 28, 26)
BC_FIELD(TEX_WORD2, SRC_SEL_W, SSW, 31, 29)
BC_FORMAT_END(TEX_WORD2)