ARCHITECTURE "Maxwell" PROCESSOR_ID Maxwell; ISSUE_SLOTS 2; WORD_SIZE 64; BRANCH_DELAY 0; ELF_ID 190; ELF_ABI 0x33; ELF_ABI_VERSION 7; ELF_VERSION 101; RELOCATORS { "R_CUDA_NONE", 0, False, False, 0,0, { { 0, 0} } } { "R_CUDA_32", 0xffffffffffffffff, False, False, 0,0, { { 0, 32} } } { "R_CUDA_64", 0xffffffffffffffff, False, False, 0,0, { { 0, 64} } } { "R_CUDA_G32", "R_CUDA_G32", 0xffffffffffffffff, False, False, 0,0, { { 0, 32} } } { "R_CUDA_G64", "R_CUDA_G64", 0xffffffffffffffff, False, False, 0,0, { { 0, 64} } } { "R_CUDA_ABS32_26", 0xffffffffffffffff, False, False, 0,0, { { 26, 32} } } { "R_CUDA_TEX_HEADER_INDEX", 0xffffffffffffffff, False, False, False, 0,0, { { 0, 20} } } { "R_CUDA_SAMP_HEADER_INDEX", 0xffffffffffffffff, False, False, False, 0,0, { { 20, 12} } } { "R_CUDA_SURF_HW_DESC", 4, 0, 32 } { "R_CUDA_SURF_HW_SW_DESC", 5, 0, 32 } { "R_CUDA_ABS32_LO_26", 0x00000000ffffffff, False, False, 0,0, { { 26, 32} } } { "R_CUDA_ABS32_HI_26", 0xffffffff00000000, False, False, 0,0, { { 26, 32} } } { "R_CUDA_ABS32_23", 0xffffffffffffffff, False, False, 0,0, { { 23, 32} } } { "R_CUDA_ABS32_LO_23", 0x00000000ffffffff, False, False, 0,0, { { 23, 32} } } { "R_CUDA_ABS32_HI_23", 0xffffffff00000000, False, False, 0,0, { { 23, 32} } } { "R_CUDA_ABS24_26", 0xffffffffffffffff, False, False, 0,0, { { 26, 24} } } { "R_CUDA_ABS24_23", 0xffffffffffffffff, False, False, 0,0, { { 23, 24} } } { "R_CUDA_ABS16_26", 0xffffffffffffffff, False, False, 0,0, { { 26, 16} } } { "R_CUDA_ABS16_23", 0xffffffffffffffff, False, False, 0,0, { { 23, 16} } } { "R_CUDA_TEX_SLOT", 0xffffffffffffffff, False, False, 0,0, { { 32, 8} } } { "R_CUDA_SAMP_SLOT", 0xffffffffffffffff, False, False, 0,0, { { 40, 5} } } { "R_CUDA_SURF_SLOT", 0xffffffffffffffff, False, False, 0,0, { { 26, 6} } } { "R_CUDA_TEX_BINDLESSOFF13_32", 0xffffffffffffffff, False, False, 0,2, { { 32, 13} } } { "R_CUDA_TEX_BINDLESSOFF13_47", 0xffffffffffffffff, False, False, 0,2, { { 47, 13} } } { "R_CUDA_CONST_FIELD19_28", 0xffffffffffffffff, "ConstBankAddress2", False, False, 0,0, { { 28, 18}, { 26, 1} } } { "R_CUDA_CONST_FIELD19_23", 0xffffffffffffffff, "ConstBankAddress2", False, False, 0,0, { { 23, 19} } } { "R_CUDA_TEX_SLOT9_49", 0xffffffffffffffff, False, False, 0,0, { { 49, 9} } } { "R_CUDA_6_31", 0xffffffffffffffff, False, False, 0,0, { { 31, 6} } } { "R_CUDA_2_47", 0xffffffffffffffff, False, False, 0,0, { { 47, 2} } } { "R_CUDA_TEX_BINDLESSOFF13_41", 0xffffffffffffffff, False, False, 0,2, { { 41, 13} } } { "R_CUDA_TEX_BINDLESSOFF13_45", 0xffffffffffffffff, False, False, 0,2, { { 45, 13} } } { "R_CUDA_FUNC_DESC32_23", 0xffffffffffffffff, False, False, 0,0, { { 23, 32} } } { "R_CUDA_FUNC_DESC32_LO_23", 0x00000000ffffffff, False, False, 0,0, { { 23, 32} } } { "R_CUDA_FUNC_DESC32_HI_23", 0xffffffff00000000, False, False, 0,0, { { 23, 32} } } { "R_CUDA_FUNC_DESC_32", "R_CUDA_FUNC_DESC_32", 0xffffffffffffffff, False, False, 0,0, { { 0, 32} } } { "R_CUDA_FUNC_DESC_64", "R_CUDA_FUNC_DESC_64", 0xffffffffffffffff, False, False, 0,0, { { 0, 64} } } { "R_CUDA_CONST_FIELD21_26", 0xffffffffffffffff, "ConstBankAddress0", False, False, 0,0, { { 26, 21} } } { "R_CUDA_QUERY_DESC21_37", 0xffffffffffffffff, "ConstBankAddress0", False, False, 0,0, { { 37, 21} } } { "R_CUDA_CONST_FIELD19_26", 0xffffffffffffffff, "ConstBankAddress2", False, False, 0,0, { { 26, 19} } } { "R_CUDA_CONST_FIELD21_23", 0xffffffffffffffff, "ConstBankAddress0", False, False, 0,0, { { 23, 21} } } { "R_CUDA_PCREL_IMM24_26", 0xffffffffffffffff, True, False, 0,0, { { 26, 24} } } { "R_CUDA_PCREL_IMM24_23", 0xffffffffffffffff, True, False, 0,0, { { 23, 24} } } { "R_CUDA_ABS32_20", 0xffffffffffffffff, False, False, 0,0, { { 20, 32} } } { "R_CUDA_ABS32_LO_20", 0x00000000ffffffff, False, False, 0,0, { { 20, 32} } } { "R_CUDA_ABS32_HI_20", 0xffffffff00000000, False, False, 0,0, { { 20, 32} } } { "R_CUDA_ABS24_20", 0xffffffffffffffff, False, False, 0,0, { { 20, 24} } } { "R_CUDA_ABS16_20", 0xffffffffffffffff, False, False, 0,0, { { 20, 16} } } { "R_CUDA_FUNC_DESC32_20", 0xffffffffffffffff, False, False, 0,0, { { 20, 32} } } { "R_CUDA_FUNC_DESC32_LO_20", 0x00000000ffffffff, False, False, 0,0, { { 20, 32} } } { "R_CUDA_FUNC_DESC32_HI_20", 0xffffffff00000000, False, False, 0,0, { { 20, 32} } } { "R_CUDA_CONST_FIELD19_20", 0xffffffffffffffff, "ConstBankAddress2", False, False, 0,0, { { 20, 19} } } { "R_CUDA_BINDLESSOFF13_36", 0xffffffffffffffff, False, False, 0,2, { { 36, 13} } } { "R_CUDA_SURF_HEADER_INDEX", 0xffffffffffffffff, False, False, False, 0,0, { { 0, 20} } } { "R_CUDA_INSTRUCTION64", 17, 0, 64 } { "R_CUDA_CONST_FIELD21_20", 0xffffffffffffffff, "ConstBankAddress0", False, False, 0,0, { { 20, 21} } } { "R_CUDA_ABS32_32", 0xffffffffffffffff, False, False, 0,0, { { 32, 32} } } { "R_CUDA_ABS32_LO_32", 0x00000000ffffffff, False, False, 0,0, { { 32, 32} } } { "R_CUDA_ABS32_HI_32", 0xffffffff00000000, False, False, 0,0, { { 32, 32} } } { "R_CUDA_ABS47_34", 0xffffffffffffffff, False, False, 0,2, { { 34, 47} } } { "R_CUDA_ABS16_32", 0xffffffffffffffff, False, False, 0,0, { { 32, 16} } } { "R_CUDA_ABS24_32", 0xffffffffffffffff, False, False, 0,0, { { 32, 24} } } { "R_CUDA_FUNC_DESC32_32", 0xffffffffffffffff, False, False, 0,0, { { 32, 32} } } { "R_CUDA_FUNC_DESC32_LO_32", 0x00000000ffffffff, False, False, 0,0, { { 32, 32} } } { "R_CUDA_FUNC_DESC32_HI_32", 0xffffffff00000000, False, False, 0,0, { { 32, 32} } } { "R_CUDA_CONST_FIELD19_40", 0xffffffffffffffff, "ConstBankAddress2", False, False, 0,0, { { 40, 19} } } { "R_CUDA_BINDLESSOFF14_40", 0xffffffffffffffff, False, False, 0,2, { { 40, 14} } } { "R_CUDA_CONST_FIELD21_38", 0xffffffffffffffff, "ConstBankAddress0", False, False, 0,0, { { 38, 21} } } { "R_CUDA_INSTRUCTION128", 17, 0, 128 } { "R_CUDA_YIELD_OPCODE9_0", 18, 0, 9 } { "R_CUDA_YIELD_CLEAR_PRED4_87", 19, 87, 4 } { "R_CUDA_32_LO", 0x00000000ffffffff, False, False, 0,0, { { 0, 32} } } { "R_CUDA_32_HI", 0xffffffff00000000, False, False, 0,0, { { 0, 32} } } { "R_CUDA_UNUSED_CLEAR32", "R_CUDA_UNUSED_CLEAR32", 0xffffffffffffffff, False, False, 0,0, { { 0, 32} } } { "R_CUDA_UNUSED_CLEAR64", "R_CUDA_UNUSED_CLEAR64", 0xffffffffffffffff, False, False, 0,0, { { 0, 64} } } { "R_CUDA_ABS24_40", 0xffffffffffffffff, False, False, 0,0, { { 40, 24} } } ; OPTIONS NOCHECK_OPCLASS_AMBIGUITY, CASE_INSENSITIVE_SYNTAX, VLIW_BRACE_NOTATION; RELATIVE_ADDRESS_BASE CURRENT_INSTRUCTION + 8; EMPTY_INSTRUCTION = "NOP;"; CONDITION TYPES ILLEGAL_INSTR_ENCODING_ERROR : ERROR OOR_REG_ERROR : ERROR MISALIGNED_REG_ERROR : ERROR INVALID_CONST_ADDR_ERROR : ERROR MISALIGNED_ADDR_ERROR : ERROR UNPREDICTABLE_BEHAVIOR_ERROR : ERROR PC_MISALIGNED_ERROR : ERROR ILLEGAL_INSTR_ENCODING_WARNING : WARNING OOR_REG_WARNING : WARNING MISALIGNED_REG_WARNING : WARNING INVALID_CONST_ADDR_WARNING : WARNING MISALIGNED_ADDR_WARNING : WARNING UNPREDICTABLE_BEHAVIOR_WARNING : WARNING ILLEGAL_INSTR_ENCODING_INFO : INFO OOR_REG_INFO : INFO MISALIGNED_REG_INFO : INFO INVALID_CONST_ADDR_INFO : INFO MISALIGNED_ADDR_INFO : INFO UNPREDICTABLE_BEHAVIOR_INFO : INFO ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR : ERROR INVALID_CONST_ADDR_SASS_ONLY_ERROR : ERROR PARAMETERS MAX_REG_COUNT = 255 SHADER_TYPE = 0 MAX_CONST_BANK = 17 ALLOW_F16_PARTIAL_WRITES = 0 CONSTANTS ITYPE_OTHER = 0 ITYPE_ABC_REG = 1 ITYPE_ABC_BCST = 2 ITYPE_ABC_CCST = 3 ITYPE_ABC_B20I = 4 BRT_CALL = 1 BRT_RETURN = 2 BRT_BRANCH = 3 BRT_BRANCHOUT = 4 VQ_ADU = 0 VQ_FMA64 = 1 VQ_SHM = 2 VQ_TEX = 3 VQ_XU = 4 VQ_GENERICS = 5 VQ_REDIRECTABLE = 6 VQ_UNORDERED = 7 VQ_IPA_PASS = 8 VQ_IPA_MUL = 9 VQ_IPA_SC = 10 VQ_REDIRECTABLE_FP16 = 11 MEMORY_LOAD = 1 MEMORY_STORE = 2 ST_UNKNOWN = 0 ST_PS = 1 ST_TI = 2 ST_TS = 3 ST_GS = 4 ST_CS = 5 ST_VSA = 6 ST_VSB = 7 ISHADER_VS = 0 ISHADER_GS = 1 ISHADER_TI = 2 ISHADER_TS = 3 ISHADER_CS = 4 ISHADER_PS = 5 ISHADER_ALL = 0x3f IERROR_ILLEGAL_INSTR_DECODING = 0 IERROR_MISALIGNED_REG = 1 IERROR_ILLEGAL_SPH_INSTR_COMBINATION = 2 IERROR_ILLEGAL_INSTR_PARAM = 3 IERROR_ILLEGAL_INSTR_PARAM2 = 4 IERROR_INVALID_CONST_ADDR = 5 IERROR_OOR_REG = 6 IERROR_OOR_ADDR = 7 IERROR_MISALIGNED_ADDR = 8 IERROR_INVALID_ADDR_SPACE = 9 IERROR_GEOMETRY_SM_ERROR = 10 IERROR_PC_WRAP = 11 IERROR_PC_OVERFLOW = 12 IERROR_PC_MISALIGNED = 13 IERROR_API_STACK_ERROR = 14 IERROR_PHYSICAL_ATTR_MISMATCH_ERROR = 15 IERROR_ILLEGAL_INSTR_LSU = 16 IERROR_PHYSICAL_STACK_OVERFLOW = 17 IOPERAND_MAP_NON_EXISTENT_OPERAND = 30 IOPERAND_TYPE_INTEGER = 0 IOPERAND_TYPE_SIGNED_INTEGER = 1 IOPERAND_TYPE_UNSIGNED_INTEGER = 2 IOPERAND_TYPE_FLOAT = 3 IOPERAND_TYPE_DOUBLE = 4 IOPERAND_TYPE_GENERIC_ADDRESS = 5 IOPERAND_TYPE_SHARED_ADDRESS = 6 IOPERAND_TYPE_LOCAL_ADDRESS = 7 IOPERAND_TYPE_TRAM_ADDRESS = 8 IOPERAND_TYPE_LOGICAL_ATTR_ADDRESS = 9 IOPERAND_TYPE_PHYSICAL_ATTR_ADDRESS = 10 IOPERAND_TYPE_GENERIC = 11 IOPERAND_TYPE_NON_EXISTENT_OPERAND = 12 IOPERAND_TYPE_CONSTANT_ADDRESS = 13 IOPERAND_TYPE_VILD_INDEX = 14 IOPERAND_TYPE_VOTE_INDEX = 15 IOPERAND_TYPE_STP_INDEX = 16 IOPERAND_TYPE_PIXLD_INDEX = 17 IOPERAND_TYPE_PATCH_OFFSET_ADDRESS = 18 IOPERAND_TYPE_RAW_ISBE_ACCESS = 19 IOPERAND_TYPE_GLOBAL_ADDRESS = 20 IOPERAND_TYPE_TEX = 21 IOPERAND_TYPE_GS_STATE = 22 IOPERAND_TYPE_SURFACE_COORDINATES = 23 IOPERAND_TYPE_FP16SIMD = 24 INST_TYPE_MATH = 0 INST_TYPE_COUPLED_MATH = 0 INST_TYPE_MIO_RD_SCBD = 1 INST_TYPE_DECOUPLED_RD_SCBD = 1 INST_TYPE_MIO_RD_WR_SCBD = 2 INST_TYPE_DECOUPLED_RD_WR_SCBD = 2 INST_TYPE_COUPLED_EMULATABLE = 3 INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD = 4 REGISTERS UnaryInv noINV, INV; UnaryNeg noNEG, NEG; UnaryAbs noABS, ABS; SIDL_NAMES NO_CUSTOM_NAME, VOTE_VTG, TEXS16, TLDS16, TLD4S16, HFMA2_REG, HFMA2_IMM, HFMA2_BCST, HSET2_REG, HSET2_IMM, HSET2_BCST, HADD2_BCST, HADD2_IMM, HADD2_REG, HMUL2_REG, HMUL2_IMM, HMUL2_BCST, HFMA2_REG, HFMA2_IMM, HFMA2_BCST, HSET2_REG, HSET2_IMM, HSET2_BCST, HADD2_BCST, HADD2_IMM, HADD2_REG, HMUL2_REG, HMUL2_IMM, HMUL2_BCST, IDP_REG, IDP_BCST, ATOM, ATOM_CAS, ATOMS, ATOMS_CAS, FADD_Rb, FADD_Imm, FADD_c, FCHK_Rb, FCHK_Imm, FCHK_C, FFMA_Rb_Rc, FFMA_Imm_Rc, FFMA_Rb_Imm, FFMA_c_Rc, FFMA_Rb_c, FMNMX_Rb, FMNMX_Imm, FMNMX_C, FMUL_Rb, FMUL_Imm, FMUL_c, FSEL_Rb, FSEL_Imm, FSEL_C, FSETP_Rb, FSETP_Imm, FSETP_C, FSET_Rb, FSET_Imm, FSET_C, MUFU_Rb, MUFU_Imm, MUFU_c, DADD_Rc, DADD_Imm, DADD_C, DFMA_Rb_Rc, DFMA_Imm_Rc, DFMA_C_Rc, DFMA_Rb_Imm, DFMA_Rb_C, DMUL_Rb, DMUL_Imm, DMUL_C, DSETP_Rc, DSETP_Imm, DSETP_C, BMOV_clear_Rd, BMOV_clear_Bd, BMOV_pquad_R, BMOV_pquad_I, BMOV_pquad_C, BMOV_pquad_B, BMOV_dst64_I, BMOV_dst64_R, BMOV_dst64_C, CALL_ABS_C, CALL_ABS_I, CALL_ABS_R, CALL_REL_I, CALL_REL_R, JMP_I, JMP_C, NANOSLEEP_R, NANOSLEEP_I, NANOSLEEP_C, NANOTRAP_R, NANOTRAP_I, NANOTRAP_C, RPCMOV_dstPc, RPCMOV_dstPc_imm, RPCMOV_dstPc_const, RPCMOV_srcPc, RPCMOV_dstPc64_I, RPCMOV_dstPc64_C, WARPSYNC_Rb, WARPSYNC_Imm, WARPSYNC_C, HADD2_Rb, HADD2_Imm, HADD2_c, HFMA2_Rb_Rc, HFMA2_Imm_Rc, HFMA2_c_Rc, HFMA2_Rb_c, HFMA2_Rb_Imm, HMMA_Rb_Rc, HMUL2_Rb, HMUL2_Imm, HMUL2_c, HSET2_Rb, HSET2_Imm, HSET2_c, HSETP2_Rb, HSETP2_Imm, HSETP2_c, BMSK_Rb, BMSK_Imm, BMSK_C, BREV_Rb, BREV_Imm, BREV_C, FLO_Rb, FLO_Imm, FLO_C, IABS_Rb, IABS_Imm, IABS_C, IADD3_Rb, IADD3_C, IADD3_Imm, IDP_Rb, IDP_C, IMAD_Rb_Rc, IMAD_Imm_Rc, IMAD_C_Rc, IMAD_Rb_Imm, IMAD_Rb_C, IMAD_WIDE_Rb_Rc, IMAD_WIDE_Imm_Rc, IMAD_WIDE_C_Rc, IMAD_WIDE_Rb_C, ISETP_Rb, ISETP_Imm, ISETP_C, LEA_Rb_Rc, LEA_C_Rc, LEA_Imm_Rc, LEA_Rb_Imm, LOP3_Rb, LOP3_Imm, LOP3_C, MOV_Rb, MOV_Imm, MOV_c, P2R_Rb, P2R_Imm, P2R_C, PLOP3_0, PLOP3_1_R, PLOP3_1_C, PLOP3_2_R, PLOP3_2_C, PLOP3_3_R, PLOP3_3_C, POPC_Rb, POPC_Imm, POPC_C, PRMT_Rb_Rc, PRMT_Imm_Rc, PRMT_C_Rc, PRMT_Rb_Imm, PRMT_Rb_C, R2P_Rb, R2P_Imm, R2P_C, SEL_Rb, SEL_Imm, SEL_C, SGXT_Rb, SGXT_Imm, SGXT_C, SHF_Rb_Rc, SHF_Imm_Rc, SHF_Rb_Imm, SHF_C_Rc, SHF_Rb_C, VABSDIFF_Rb_Rc, VABSDIFF_Imm_Rc, VABSDIFF_C_Rc, VABSDIFF_Rb_Imm, VABSDIFF_Rb_C, VABSDIFF4_Rb_Rc, VABSDIFF4_Imm_Rc, VABSDIFF4_C_Rc, VABSDIFF4_Rb_Imm, VABSDIFF4_Rb_C, F2F_R, F2F_C, F2F_Imm, F2F64_R, F2F64_C, F2F64_Imm, F2I_R, F2I_C, F2I_I, F2I64_R, F2I64_C, F2I64_I, FRND_R, FRND_C, FRND_I, FRND64_R, FRND64_C, FRND64_I, I2F_R, I2F_C, I2F_I, I2F64_R, I2F64_C, I2F64_I, IPA_Rb, IPA_Imm, IPA_c, OUT_R, OUT_I, ATOMG, ATOMG_CAS, CCTLT_Rb, CCTLT_C, SHFL_Rb_Rc, SHFL_Imm_Rc, SHFL_Rb_Imm, SHFL_Imm_Imm, BAR_R, BAR_R_Imm, BAR_Imm_R, BAR_Imm_Imm, SUATOM_I, SUATOM_TID, SUATOM_R, SUATOM_I_CAS, SUATOM_TID_CAS, SUATOM_R_CAS, SULD_D_I, SULD_D_TID, SULD_D_R, SULD_P_I, SULD_P_TID, SULD_P_R, SURED_I, SURED_TID, SURED_R, SUST_D_I, SUST_D_TID, SUST_D_R, SUST_P_I, SUST_P_TID, SUST_P_R, TEX, TEX_B_noConst, TEX_B, TLD, TLD_B_noConst, TLD_B, TLD4, TLD4_B_noConst, TLD4_B, TMML, TMML_B_noConst, TMML_B, TXD, TXD_B_noConst, TXD_B, TXQ, TXQ_B_noConst, TXQ_B, BMOV_Rd_Rpc, BMOV_Rpc_Rb, BMOV_Rpc_Imm, BMOV_Rd_CBU, BMOV_CBU_Rb, BMOV_CBU_Ba, BMOV_CBU_Imm, JMP_CONST, DUMMY ; NonZeroRegister R0(0..9), R(0..254)=(0..254); NonZeroRegisterFAU = NonZeroRegister; ZeroRegister RZ=255; RegisterFAU = NonZeroRegisterFAU + ZeroRegister; Register = NonZeroRegister + ZeroRegister; REUSE reuse=1, noreuse=0; GRF = Register; USCHED_INFO YIELD_SB *= 0, W1G = 1, W2G = 2, W3G = 3, W4G = 4, W5G = 5, W6G = 6, W7G = 7, W8G = 8, W9G = 9, W10G = 10, W11G = 11, W12G = 12, W13G = 13, W14G = 14, W15G = 15, W1 = 17, W2 = 18, W3 = 19, W4 = 20, W5 = 21, W6 = 22, W7 = 23, W8 = 24, W9 = 25, W10 = 26, W11 = 27, OFF_DECK_DRAIN = 0, DRAIN = 0, WAIT1_GROUP = 1, WAIT2_GROUP = 2, WAIT3_GROUP = 3, WAIT4_GROUP = 4, WAIT5_GROUP = 5, WAIT6_GROUP = 6, WAIT7_GROUP = 7, WAIT8_GROUP = 8, WAIT9_GROUP = 9, WAIT10_GROUP = 10, WAIT11_GROUP = 11, WAIT12_GROUP = 12, WAIT13_GROUP = 13, WAIT14_GROUP = 14, WAIT15_GROUP = 15, WAIT1_BOOST = 17, WAIT2_BOOST = 18, WAIT3_BOOST = 19, WAIT4_BOOST = 20, WAIT5_BOOST = 21, WAIT6_BOOST = 22, WAIT7_BOOST = 23, WAIT8_BOOST = 24, WAIT9_BOOST = 25, WAIT10_BOOST = 26, WAIT11_BOOST = 27, PIXBAR = 28, YLD = 29, YLD6 = 29, YIELD = 29, YIELD6 = 29, OFF_DECK_YIELD = 29, YLD8 = 30, YIELD8 = 30, W1B = 17, W2B = 18, W3B = 19, W4B = 20, W5B = 21, W6B = 22, W7B = 23, W8B = 24, W9B = 25, W10B = 26, W11B = 27, OFF_DECK_YIELD_SB_ALL = 0, WAIT1_END_GROUP = 1, WAIT2_END_GROUP = 2, WAIT3_END_GROUP = 3, WAIT4_END_GROUP = 4, WAIT5_END_GROUP = 5, WAIT6_END_GROUP = 6, WAIT7_END_GROUP = 7, WAIT8_END_GROUP = 8, WAIT9_END_GROUP = 9, WAIT10_END_GROUP = 10, WAIT11_END_GROUP = 11, WAIT12_END_GROUP = 12, WAIT13_END_GROUP = 13, WAIT14_END_GROUP = 14, WAIT15_END_GROUP = 15, floxy2 = 16, trans1 = 17, trans2 = 18, trans3 = 19, trans4 = 20, trans5 = 21, trans6 = 22, trans7 = 23, trans8 = 24, trans9 = 25, trans10 = 26, trans11 = 27, OFF_DECK_PIXBAR = 28, OFF_DECK_YIELD6 = 29, OFF_DECK_YIELD8 = 30, OFF_DECK = 31; Scoreboard SB(0..5); REQ req*; RD rd*; WR wr*; Predicate P(0..7), PT=7; SpecialRegister SR(0..255)=(0..255), SR_LANEID = 0, SR_CLOCK, SR_VIRTCFG, SR_VIRTID, SR_PM(0..7), SR_ORDERING_TICKET=15, SR_PRIM_TYPE, SR_INVOCATION_ID, SR_Y_DIRECTION, SR_THREAD_KILL, SM_SHADER_TYPE, SR_DIRECTCBEWRITEADDRESSLOW=21, SR_DIRECTCBEWRITEADDRESSHIGH=22, SR_DIRECTCBEWRITEENABLED=23, SR_MACHINE_ID_(0..3)=(24..27), SR_AFFINITY, SR_INVOCATION_INFO, SR_WSCALEFACTOR_XY, SR_WSCALEFACTOR_Z, SR_TID=32, "SR_TID.X", "SR_TID.Y", "SR_TID.Z", SR_CTAPARAM, SR_CTA_PARAM=36, "SR_CTAID.X", "SR_CTAID.Y", "SR_CTAID.Z", SR_NTID, SR_CirQueueIncrMinusOne, SR_NLATC, SR_SM_SPA_VERSION=44, SR_MULTIPASSSHADERINFO=45, SR_LWINHI=46, SR_SWINHI, SR_SWINLO=48, SR_SWINSZ, SR_SMEMSZ, SR_SMEMBANKS, SR_LWINLO, SR_LWINSZ, SR_LMEMLOSZ, SR_LMEMHIOFF, SR_EQMASK, SR_LTMASK, SR_LEMASK, SR_GTMASK, SR_GEMASK, SR_REGALLOC, SR_BARRIERALLOC, SR_GLOBALERRORSTATUS=64, SR_WARPERRORSTATUS=66, SR_WARPERRORSTATUSCLEAR, SR_PM_HI(0..7)=(72..79), SR_CLOCKLO=80, SR_CLOCKHI, SR_GLOBALTIMERLO, SR_GLOBALTIMERHI, SR_HWTASKID=96, SR_CIRCULARQUEUEENTRYINDEX, SR_CIRCULARQUEUEENTRYADDRESSLOW, SR_CIRCULARQUEUEENTRYADDRESSHIGH; Round1 RN, RM, RP, RZ; F2FRound1 PASS=1, PASS, PASS, RN, RM, RP, RZ, PASS=0, ROUND=4, FLOOR, CEIL, TRUNC; F2FRound2 PASS, ROUND=0, FLOOR, CEIL, TRUNC, RN=0, RM, RP, RZ; Round3 ROUND, FLOOR, CEIL, TRUNC; VOP MRG_16H, MRG_16L, MRG_8B0, MRG_8B2, ACC, MIN, MAX, PASS; IPAOp PASS, MUL, CONSTANT, SC; IDXOnly IDX; VRed2 SIMD_MRG, ACC, INVALIDRED2, INVALIDRED3; AtomOp INVALIDATOMOP(0..15), ADD=0,MIN,MAX,INC,DEC,AND,OR,XOR,EXCH,SAFEADD=10; AtomsOp INVALIDATOMSOP(0..15), ADD=0,MIN,MAX,INC,DEC,AND,OR,XOR,EXCH; AtomsSz "32"=0, U32=0, S32=1, "64"=2, U64=2, S64=3; AtomsSPIN noSPIN=0, SPIN=1; RedOp INVALIDREDOP(0..15),ADD=0,MIN,MAX,INC,DEC,AND,OR,XOR; VMadScale PASS,SHR_7,SHR_15,INVALIDVMADSCALE3; INC NOINC,INC; IPAOpN MUL, SC; Bop AND, OR, XOR, INVALIDBOP03,INVALIDBOP13=3,INVALIDBOP3=3; LOP AND, OR, XOR, PASS_B; POP F, T, Z, NZ; PopcFmt "32", "16_V2", "8_V4", "INVALIDPOPCFMT3"; Red POPC,AND,OR,INVALIDBARMODE3; CC CC=1; optCC noCC, CC; CCPR PR=0, CC=1; Float INVALIDFPDEST0, INVALIDFPSRC0=0, F16, F32, F64; FloatNo64 INVALIDFPDEST0, INVALIDFPSRC0=0, F16, F32; Float16 F16=1; Float32 INVALIDFPDEST0, INVALIDFPSRC0=0, F32=2; Float64 F64=3; F32 F32; F2Ffmts1 "INVALIDFPDEST0.INVALIDFPSRC0"=0, "F32.F32"=10; F2Ffmts1_16 "F16.F16"=5; F2Ffmts1_64 "F64.F64"=15; F2Ffmts2 "F16.INVALIDFPSRC0"=1, "F32.INVALIDFPSRC0"=2, "F64.INVALIDFPSRC0"=3, "INVALIDFPDEST0.F32"=8, "F16.F32"=9; F2Ffmts2_64_32 "F64.F32"=11; F2Ffmts2_16 "INVALIDFPDEST0.F16"=4, "F32.F16"=6; F2Ffmts2_64_16 "F64.F16"=7; F2Ffmts2_64 "INVALIDFPDEST0.F64"=12, "F16.F64"=13, "F32.F64"=14; Integer8 U8 = 0, S8 = 1; Invalid8 INVALID0 = 0, INVALID1 = 1; Integer16 U16 = 2, S16 = 3; Invalid16 INVALID2 = 2, INVALID3 = 3; Integer32 U32 = 4, S32 = 5; Invalid32 INVALID4 = 4, INVALID5 = 5; Integer64 U64 = 6, S64 = 7; Invalid64 INVALID6 = 6, INVALID7 = 7; Integer128 U128= 8, S128= 9; UInteger8 U8 = 0; UInteger16 U16 = 2; UInteger32 U32 = 4; UInteger64 U64 = 6; UInteger128 U128= 8; SInteger8 S8 = 1; SInteger16 S16 = 3; SInteger32 S32 = 5; SInteger64 S64 = 7; SInteger128 S128= 9; U8 U8 = 0; U16 U16 = 2; S16 S16 = 3; U32 U32 = 4, INVALIDASEL7=6, INVALIDBSEL7=6, INVALIDSEL7=6; IntegerSPA U32, S32, U24, S24, U16H0, S16H0, U16H1, S16H1; IntegerSPB U16H0, S16H0, U24, S24; IntegerSPC U32, S32, U24, S24, U16H0, S16H0; IMADSP_SD SD=3; VInteger32 U32 = 4, S32 = 5, INVALIDASEL7=7, INVALIDASEL6=6, INVALIDBSEL7=7, INVALIDBSEL6=6, INVALIDSEL7=7, INVALIDSEL6=6; Integer = Integer8 + Integer16 + Integer32 + Integer64; UInteger_old = U8 + U16 + U32; LInteger = Integer8 + Integer16 + Integer32 + Integer64 + Integer128; Integer1632 = Integer16 + Integer32; IntegerNo8 = Invalid8 + Integer16 + Integer32 + Integer64; IntegerInv8No64 = Invalid8 + Integer16 + Integer32; IntegerNo16 = Integer8 + Integer32 + Integer64; IntegerNo64 = Integer8 + Integer16 + Integer32; IntegerNo16Inv64 = Integer8 + Integer32 + Invalid64; IntegerNo16No64 = Integer8 + Integer32; UInteger = UInteger8 + UInteger16 + UInteger32 + UInteger64; ULInteger = UInteger8 + UInteger16 + UInteger32 + UInteger64 + UInteger128; UInteger1632 = UInteger16 + UInteger32; UIntegerNo8 = Invalid8 + UInteger16 + UInteger32 + UInteger64; UIntegerInv8No64 = Invalid8 + UInteger16 + UInteger32; UIntegerNo16 = UInteger8 + UInteger32 + UInteger64; UIntegerNo64 = UInteger8 + UInteger16 + UInteger32; UIntegerNo16Inv64 = UInteger8 + UInteger32 + Invalid64; UIntegerNo16No64 = UInteger8 + UInteger32; UIntegerNo32No64 = UInteger8 + UInteger16; SInteger = SInteger8 + SInteger16 + SInteger32 + SInteger64; SLInteger = SInteger8 + SInteger16 + SInteger32 + SInteger64 + SInteger128; SInteger1632 = SInteger16 + SInteger32; SIntegerNo8 = Invalid8 + SInteger16 + SInteger32 + SInteger64; SIntegerInv8No64 = Invalid8 + SInteger16 + SInteger32; SIntegerNo16 = SInteger8 + SInteger32 + SInteger64; SIntegerNo64 = SInteger8 + SInteger16 + SInteger32; SIntegerNo16Inv64 = SInteger8 + SInteger32 + Invalid64; SIntegerNo16No64 = SInteger8 + SInteger32; SIntegerNo32No64 = SInteger8 + SInteger16; LDInteger "8"=0, "16"=2, U8=0, S8, U16, S16, "32", "64", "128", "U.128"; LDInteger_nU128 "8"=0, "16"=2, U8=0, S8, U16, S16, "32", "64", "128", "INVALIDSIZE7"; LDSInteger "8"=0, "U.8", "16"=4, "U.16", "U8"=0, "U.U8", "S8", "U.S8", "U16", "U.U16", "S16", "U.S16", "32", "U.32", "64", "U.64", "128", "U.128", "INVALIDSIZE7", "U.INVALIDSIZE7"; CInteger SD=0, "8"=0, "16"=2, U8=0, S8, U16, S16, "32", "64", "128", INVALIDSIZE7; CInteger_n64_n128 SD=0, "8"=0, "16"=2, U8=0, S8=1, U16=2, S16=3, "32"=4, INVALIDSIZE6=6, INVALIDSIZE7=7; CInteger_64 "64"=5; Ofmt U32=0, S32=1, U8=2, S8=3; Ofmt_FP16 F16_V2=0, F32=1, MRG_H0=2, MRG_H1=3; AInteger "32", "64", "96", "128"; QInteger "32", "64"; BQInteger "64", "128"; SQInteger U8=7, S8=7, U16=7, S16=7, S128=7, F16=7, F64=7, INVALIDATOMICSIZE13=7, INVALIDATOMICSIZE14=7, INVALIDATOMICSIZE15=7, "32"=0, "64"=2, F32, "F16x2.FTZ.RN", "F16x2.RN"=4, U32=0, S32, U64, "F32.FTZ.RN", S64=5, "F64.RN", INVALIDATOMICSIZE7; AtomicInteger "32"=0, "64"=2, F32, "U32" = 0, "S32", "U64", "F32.FTZ.RN", "F16x2.FTZ.RN", "F16x2.RN"=4, "S64", "SD32", "SD64"; CASInteger U32, U64, S32=0, S64, "32"=0, "64"; ISBERDInteger U8, U16, "32"; maxShift "32"=0, INVALIDMAXSHIFT3, U64, S64; DFormat UD,SD; F16RoundMode RTNE=0, RTZ; Test FALSE=0, ZFF=5, ZF0=5, LEG=7, U=8, ZFT=10, ZF1=10, TRUE=15, NOT_OVERFLOW=16, "0FF"=16, CFF=17, CARRY=17, ABOVE=18, SF0=18, SIGN=19, SF1=21, CFT=22, CF1=22, OF1=23, OVERFLOW=23, NOT_SIGN=28, BELOW_OR_EQUAL=29, NOT_CARRY=30, "1E"=30, "1F"=31, F=0, LT, EQ, LE, GT, NE, GE, NUM, NAN, LTU, EQU, LEU, GTU, NEU, GEU, T, OFF, LO, SFF, LS, HI, SFT, HS, OFT, CSM_TA, CSM_TR, CSM_MX, FCSM_TA, FCSM_TR, FCSM_MX, RLE, RGT; IDP2AMode "2A.LO"=1, "2A.HI"=3; IDP4AOnly "4A"=0; IDP2AFmtA "U16"=0, "S16"=1; Scale NONE, D2, D4, D8, M8, M4, M2, INVALIDSCALE37; ISWZ H1_H0=0, F32, H0_H0, H1_H1; ICmpAll F, LT, EQ, LE, GT, NE, GE, T; ICmpU LO=1, LS=3, HI=4, HS=6; IDEAction EN,DI; IDEActionENOnly EN=0; IDEActionDIOnly DI=1; TPhase noPhase,T,P,INVALIDPHASE3; ITypeI I; ITypeF F; BVal BM, BF; PR PR; H1H0 H0,H1; Partsel "32", H0, H1; B1B0 H0, H1=2, B(0..3)=(0..3); B3B0 B(0..3)=(0..3); I2XH H0=0, INVALIDSIZE1, H1=2, INVALIDSIZE3; HILO LO,HI; LOOnly LO; HIOnly HI; IDXRFOnly IDXRF; RelOpt REL; X noX, X; XMode noX, XLO, XMED, XHI; SHFXMode NONE, HI, X, XHI; XXHI noX, INVALIDSHRXMODE1, X, XHI; SHF_L L; SHF_R R; LDGcop1 CT; LDGcop2 CG, CS; XMADcop C32, CLO, CHI, CSFU, CBCC; XMADcop2 C32, CLO, CHI, CSFU; DIR NS, RS, LS; C C, c=0; V V, v=0; A A, a=0; CWMode C,W; B noB, B; P noP, P; Phys PHYS; CAS CAS; CAST CAST; VTG VTG; E noE, E; LDG_E noE, E=2; U noU, U; S noS, S; DC noDC, DC; MS noMS, MS; noMSOnly noMS; MSOnly MS=1; CL noCL, CL; PO noPO, PO; PSL noPSL, PSL; SH noSH, SH; MRG noMRG, MRG; NDV noNDV, NDV; LMT noLMT, LMT; FTZ noFTZ, FTZ; H_AND noH_AND, H_AND; SAT noSAT, SAT; AVRG noAVRG, AVRG; TOFF1 noTOFF, AOFFI; TOFF2 noTOFF, AOFFI, PTP=2, INVALIDBTOFF03; BREV noBREV, BREV; NODEP noNODEP, NODEP; SKEW noSKEW, SKEW; LUTOnly LUT; BOnly B; DOnly D; POnly P; LEOnly LE; ALLOnly ALL; BA noBA, BA; FMZ noFTZ, FTZ, FMZ, INVALIDFMZ3; LOD noLOD, LZ, LB, LL, INVALIDBLOD(4..5), LBA, LLA; LOD1 LZ,LL; LOD2 noLOD, LZ, LL; LODOnly LOD; LC noLC, LC; PMode IDX, F4E, B4E, RC8, ECL, ECR, RC16, INVALIDPMODE7; VoteOp ALL,ANY,EQ,INVALIDVMODE3; VTGMode R, A, RA, INVALIDVTGMODE3; BPTMode DRAIN_ILLEGAL,CAL,PAUSE,TRAP,INT,DRAIN,PAUSE_QUIET; BPTModeN DRAIN,CAL,PAUSE; BPTModeN2 TRAP=3; KeepRefCount noKEEPREFCOUNT, KEEPREFCOUNT; ChkMode DIVIDE, INVALIDCHKMODE(1..63); AdMode IA, IL, IS, ISL; MN MN,MX; Shflmd IDX=0, UP, DOWN, BFLY; Barmd BAR, RESULT, WARP, INVALID; BarmdBAR BAR = 0, INVALID=3; BarmdRESULT RESULT = 1; BarmdWARP WARP = 2; OutType INVALIDOUTSTYPE0, EMIT, CUT, EMIT_THEN_CUT; PixMode MSCOUNT,COVMASK,COVERED,OFFSET,CENTROID_OFFSET,MY_INDEX,INVALIDPIXMODE(6..7),INVALID(0..1)=(6..7); MSI C=0,INVALIDMSI3=3,CENTER=0,CENTROID,OFFSET,INVALID; MufuOp COS, SIN, EX2, LG2, RCP, RSQ, RCP64H, RSQ64H, SQRT, INVALIDMUFUOPCODE9, INVALIDMUFUOPCODEA, INVALIDMUFUOPCODEB, INVALIDMUFUOPCODEC, INVALIDMUFUOPCODED, INVALIDMUFUOPCODEE, INVALIDMUFUOPCODEF; BarSyncArv SYNC, ARV; BarSync SYNC = 0; BarArv ARV = 1; BarRED RED = 2; BarSCAN SCAN = 3; BarSYNCALL SYNCALL = 4; Arv SYNC,ARV; RTTOp POPCRS, TERMINATE, FALLTHROUGH, PREEMPTED; RROOp SINCOS, EX2; AIO I, O; Trig TRIG = 1; STPMode noWAIT, WAIT; ISBERDIO I, O; OnlyNoDep NODEP; OnlyT T; LoadCacheOp CS=0, CA=0, LU=1, CG=1, CI=2, CV=3; LLoadCacheOp CS=0, CA=0, LU=1, CI=2, CV=3; StoreCacheOp WB, CG, CS, WT; OnlyQry QRY1; CCTLOp PF1=1, PF1.5, PF2, WB, IV, RS=7, RSLB=9, INVALIDCCTLOP(10..15); CCTLTOpIVALL IVALL=0; CCTLTOp IVTH=1, INVALIDCCTLTOP(2..3); CCTLOpRSLB RSLB=9; OnlyIvall IVALL=6; CCTLLOp2 IVALL=6; CCTLLOp3 WBALL=8; RGBA INVALIDRGBAMASK(1..15)=(1..15), R=1, G, RG, B, RB, GB, RGB, A, RA, GA, RGA, BA, RBA, GBA, RGBA; RGBA2 INVALIDRGBA2MASK(1..7)=(1..7), R=1, RG=3, RGBA=7; TEXWmsk2C R=0, G, B, A, RG, RA, GA, BA; TEXWmsk34C RGB=0, RGA, RBA, GBA, RGBA, INVALID5=5, INVALID6=6, INVALID7=7; Dim "1D", "2D", INVALIDSURFACEDIM2, "3D"=2, "E2D"; Dim1 "1D", "1D_BUFFER", "1D_ARRAY", "2D", "2D_ARRAY", "3D", "INVALIDSURFACEDIM6", "INVALIDSURFACEDIM7"; BDim "1D", "MD"; ThreeD "2D", "3D"; Clamp1 IGN,NEAR,TRAP,INVALIDSURFACECLAMP3; TexComp R,G,B,A; TXQMode TEX_HEADER_DIMENSION, TEX_HEADER_TEXTURE_TYPE, TEX_HEADER_SAMPLER_POS, "3", "4", "5", "6", "7", TEX_SAMPLER_FILTER, TEX_SAMPLER_LOD, TEX_SAMPLER_WRAP, TEX_SAMPLER_BORDER_COLOR, "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"; ParamA "_1D" = 0b00_0, "1D" = 0b00_0, RECT = 0b01_0, "_2D" = 0b01_0, "2D" = 0b01_0, "_3D" = 0b10_0, "3D" = 0b10_0, CUBE = 0b11_0, ARRAY_1D = 0b00_1, ARRAY_RECT = 0b01_1, ARRAY_2D = 0b01_1, ARRAY_3D = 0b10_1, CUBEARRAY = 0b11_1, ARRAY_CUBE = 0b11_1; MemBarLevel CTA,GL,SYS,VC; MemBarIvall NOIVALL, IVALLD, IVALLT, IVALLTD; Cache D,U,C,I; Cache3 D,U,C,I,CRS,INVALIDCCTLCACHEOP5=5,INVALIDCCTLCACHEOP6=6,INVALIDCCTLCACHEOP7=7,INVALIDCACHETYPE5=5,INVALIDCACHETYPE6=6,INVALIDCACHETYPE7=7; Cache3NoCI D,U,CRS=4,INVALIDCCTLCACHEOP5=5,INVALIDCCTLCACHEOP6=6,INVALIDCCTLCACHEOP7=7,INVALIDCACHETYPE5=5,INVALIDCACHETYPE6=6,INVALIDCACHETYPE7=7; Cache3CI C=2,I; LCache D,INVALIDLCACHETYPE2=2,INVALIDLCACHETYPE3; CRSOnly CRS=1; LaneMask2 X = 0b01, Y = 0b10, XY = 0b11; LaneMask4 X = 0b0100, Y = 0b1000, Z = 0b0001, W = 0b0010, XW = 0b0110, YW = 0b1010, ZW = 0b0011, XZ = 0b0101, YZ = 0b1001, XY = 0b1100, YZW = 0b1011, XZW = 0b0111, XYW = 0b1110, XYZ = 0b1101, XYZW = 0b1111 ; ASel4 "0000","1111","2222","3333","3210","4321","5432","6543","3201","3012","0213","3120","1230","2310", ASEL4E, ASEL4F, INVALIDASEL4E=14, INVALIDASEL4F; BSel4 "4444","5555","6666","7777","7654","6543","5432","4321","4567","6745","5476",BSEL4B,BSEL4C,BSEL4D, BSEL4E, INVALIDBSEL4B=11, INVALIDBSEL4C, INVALIDBSEL4D, INVALIDBSEL4E; Sel2 "00","01","02","03", "10","11","12","13", "20","21","22","23", "30","31","32","33"; Sel2hi "00","01", "10","11"; PNWord PPPPPPPP,PPPPPPNP,PPPPPPPN,PPPPPPZP,PPPPNPPP,PPPPNPNP,PPPPNPPN,PPPPNPZP, PPPPPNPP,PPPPPNNP,PPPPPNPN,PPPPPNZP,PPPPZPPP,PPPPZPNP,PPPPZPPN,PPPPZPZP, PPNPPPPP,PPNPPPNP,PPNPPPPN,PPNPPPZP,PPNPNPPP,PPNPNPNP,PPNPNPPN,PPNPNPZP, PPNPPNPP,PPNPPNNP,PPNPPNPN,PPNPPNZP,PPNPZPPP,PPNPZPNP,PPNPZPPN,PPNPZPZP, PPPNPPPP,PPPNPPNP,PPPNPPPN,PPPNPPZP,PPPNNPPP,PPPNNPNP,PPPNNPPN,PPPNNPZP, PPPNPNPP,PPPNPNNP,PPPNPNPN,PPPNPNZP,PPPNZPPP,PPPNZPNP,PPPNZPPN,PPPNZPZP, PPZPPPPP,PPZPPPNP,PPZPPPPN,PPZPPPZP,PPZPNPPP,PPZPNPNP,PPZPNPPN,PPZPNPZP, PPZPPNPP,PPZPPNNP,PPZPPNPN,PPZPPNZP,PPZPZPPP,PPZPZPNP,PPZPZPPN,PPZPZPZP, NPPPPPPP,NPPPPPNP,NPPPPPPN,NPPPPPZP,NPPPNPPP,NPPPNPNP,NPPPNPPN,NPPPNPZP, NPPPPNPP,NPPPPNNP,NPPPPNPN,NPPPPNZP,NPPPZPPP,NPPPZPNP,NPPPZPPN,NPPPZPZP, NPNPPPPP,NPNPPPNP,NPNPPPPN,NPNPPPZP,NPNPNPPP,NPNPNPNP,NPNPNPPN,NPNPNPZP, NPNPPNPP,NPNPPNNP,NPNPPNPN,NPNPPNZP,NPNPZPPP,NPNPZPNP,NPNPZPPN,NPNPZPZP, NPPNPPPP,NPPNPPNP,NPPNPPPN,NPPNPPZP,NPPNNPPP,NPPNNPNP,NPPNNPPN,NPPNNPZP, NPPNPNPP,NPPNPNNP,NPPNPNPN,NPPNPNZP,NPPNZPPP,NPPNZPNP,NPPNZPPN,NPPNZPZP, NPZPPPPP,NPZPPPNP,NPZPPPPN,NPZPPPZP,NPZPNPPP,NPZPNPNP,NPZPNPPN,NPZPNPZP, NPZPPNPP,NPZPPNNP,NPZPPNPN,NPZPPNZP,NPZPZPPP,NPZPZPNP,NPZPZPPN,NPZPZPZP, PNPPPPPP,PNPPPPNP,PNPPPPPN,PNPPPPZP,PNPPNPPP,PNPPNPNP,PNPPNPPN,PNPPNPZP, PNPPPNPP,PNPPPNNP,PNPPPNPN,PNPPPNZP,PNPPZPPP,PNPPZPNP,PNPPZPPN,PNPPZPZP, PNNPPPPP,PNNPPPNP,PNNPPPPN,PNNPPPZP,PNNPNPPP,PNNPNPNP,PNNPNPPN,PNNPNPZP, PNNPPNPP,PNNPPNNP,PNNPPNPN,PNNPPNZP,PNNPZPPP,PNNPZPNP,PNNPZPPN,PNNPZPZP, PNPNPPPP,PNPNPPNP,PNPNPPPN,PNPNPPZP,PNPNNPPP,PNPNNPNP,PNPNNPPN,PNPNNPZP, PNPNPNPP,PNPNPNNP,PNPNPNPN,PNPNPNZP,PNPNZPPP,PNPNZPNP,PNPNZPPN,PNPNZPZP, PNZPPPPP,PNZPPPNP,PNZPPPPN,PNZPPPZP,PNZPNPPP,PNZPNPNP,PNZPNPPN,PNZPNPZP, PNZPPNPP,PNZPPNNP,PNZPPNPN,PNZPPNZP,PNZPZPPP,PNZPZPNP,PNZPZPPN,PNZPZPZP, ZPPPPPPP,ZPPPPPNP,ZPPPPPPN,ZPPPPPZP,ZPPPNPPP,ZPPPNPNP,ZPPPNPPN,ZPPPNPZP, ZPPPPNPP,ZPPPPNNP,ZPPPPNPN,ZPPPPNZP,ZPPPZPPP,ZPPPZPNP,ZPPPZPPN,ZPPPZPZP, ZPNPPPPP,ZPNPPPNP,ZPNPPPPN,ZPNPPPZP,ZPNPNPPP,ZPNPNPNP,ZPNPNPPN,ZPNPNPZP, ZPNPPNPP,ZPNPPNNP,ZPNPPNPN,ZPNPPNZP,ZPNPZPPP,ZPNPZPNP,ZPNPZPPN,ZPNPZPZP, ZPPNPPPP,ZPPNPPNP,ZPPNPPPN,ZPPNPPZP,ZPPNNPPP,ZPPNNPNP,ZPPNNPPN,ZPPNNPZP, ZPPNPNPP,ZPPNPNNP,ZPPNPNPN,ZPPNPNZP,ZPPNZPPP,ZPPNZPNP,ZPPNZPPN,ZPPNZPZP, ZPZPPPPP,ZPZPPPNP,ZPZPPPPN,ZPZPPPZP,ZPZPNPPP,ZPZPNPNP,ZPZPNPPN,ZPZPNPZP, ZPZPPNPP,ZPZPPNNP,ZPZPPNPN,ZPZPPNZP,ZPZPZPPP,ZPZPZPNP,ZPZPZPPN,ZPZPZPZP; BASE MAP, PATCH, PRIM, ATTR; hfma2__v2_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hfma2__v2_fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hfma2__v2_sat "nosat"=0 , "SAT"=1; hfma2__v2_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v2_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v2_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hfma2__v2_Rb "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v2_Sb_iswz_Rb_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hfma2__v2_Rc "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v2_Rc_iswz_Rc_reg_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hfma2__v1_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hfma2__v1_fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hfma2__v1_sat "nosat"=0 , "SAT"=1; hfma2__v1_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v1_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v1_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hfma2__v1_Rc "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v1_Rc_iswz_Rc_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hfma2__v0_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hfma2__v0_fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hfma2__v0_sat "nosat"=0 , "SAT"=1; hfma2__v0_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v0_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v0_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hfma2__v0_Rc "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hfma2__v0_Rc_iswz_Rc_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2__v2_bval "BM"=0 , "BF"=1; hset2__v2_cmp "LE"=3 , "GE"=6 , "GEU"=14 , "LTU"=9 , "F"=0 , "EQU"=10 , "NAN"=8 , "NE"=5 , "T"=15 , "LT"=1 , "GT"=4 , "LEU"=11 , "NUM"=7 , "NEU"=13 , "EQ"=2 , "GTU"=12; hset2__v2_ftz "noftz"=0 , "FTZ"=1; hset2__v2_bop "AND"=0 , "XOR"=2 , "OR"=1; hset2__v2_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v2_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v2_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2__v2_Rb "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v2_Sb_iswz_Rb_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2__v1_bval "BM"=0 , "BF"=1; hset2__v1_cmp "LE"=3 , "GE"=6 , "GEU"=14 , "LTU"=9 , "F"=0 , "EQU"=10 , "NAN"=8 , "NE"=5 , "T"=15 , "LT"=1 , "GT"=4 , "LEU"=11 , "NUM"=7 , "NEU"=13 , "EQ"=2 , "GTU"=12; hset2__v1_ftz "noftz"=0 , "FTZ"=1; hset2__v1_bop "AND"=0 , "XOR"=2 , "OR"=1; hset2__v1_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v1_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v1_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2__v0_bval "BM"=0 , "BF"=1; hset2__v0_cmp "LE"=3 , "GE"=6 , "GEU"=14 , "LTU"=9 , "F"=0 , "EQU"=10 , "NAN"=8 , "NE"=5 , "T"=15 , "LT"=1 , "GT"=4 , "LEU"=11 , "NUM"=7 , "NEU"=13 , "EQ"=2 , "GTU"=12; hset2__v0_ftz "noftz"=0 , "FTZ"=1; hset2__v0_bop "AND"=0 , "XOR"=2 , "OR"=1; hset2__v0_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v0_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2__v0_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2_bop__v1_bval "BM"=0 , "BF"=1; hset2_bop__v1_cmp "LE"=3 , "GE"=6 , "GEU"=14 , "LTU"=9 , "F"=0 , "EQU"=10 , "NAN"=8 , "NE"=5 , "T"=15 , "LT"=1 , "GT"=4 , "LEU"=11 , "NUM"=7 , "NEU"=13 , "EQ"=2 , "GTU"=12; hset2_bop__v1_ftz "noftz"=0 , "FTZ"=1; hset2_bop__v1_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v1_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v1_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2_bop__v0_bval "BM"=0 , "BF"=1; hset2_bop__v0_cmp "LE"=3 , "GE"=6 , "GEU"=14 , "LTU"=9 , "F"=0 , "EQU"=10 , "NAN"=8 , "NE"=5 , "T"=15 , "LT"=1 , "GT"=4 , "LEU"=11 , "NUM"=7 , "NEU"=13 , "EQ"=2 , "GTU"=12; hset2_bop__v0_ftz "noftz"=0 , "FTZ"=1; hset2_bop__v0_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v0_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v0_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hmul2_32i__fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hmul2_32i__sat "nosat"=0 , "SAT"=1; hmul2_32i__Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2_32i__Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2_32i__Ra_iswz_Ra_32i_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2_bop__v2_bval "BM"=0 , "BF"=1; hset2_bop__v2_cmp "LE"=3 , "GE"=6 , "GEU"=14 , "LTU"=9 , "F"=0 , "EQU"=10 , "NAN"=8 , "NE"=5 , "T"=15 , "LT"=1 , "GT"=4 , "LEU"=11 , "NUM"=7 , "NEU"=13 , "EQ"=2 , "GTU"=12; hset2_bop__v2_ftz "noftz"=0 , "FTZ"=1; hset2_bop__v2_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v2_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v2_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hset2_bop__v2_Rb "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hset2_bop__v2_Sb_iswz_Rb_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hadd2__v0_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hadd2__v0_ftz "noftz"=0 , "FTZ"=1; hadd2__v0_sat "nosat"=0 , "SAT"=1; hadd2__v0_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v0_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v0_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hadd2__v1_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hadd2__v1_ftz "noftz"=0 , "FTZ"=1; hadd2__v1_sat "nosat"=0 , "SAT"=1; hadd2__v1_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v1_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v1_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hadd2__v2_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hadd2__v2_ftz "noftz"=0 , "FTZ"=1; hadd2__v2_sat "nosat"=0 , "SAT"=1; hadd2__v2_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v2_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v2_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hadd2__v2_Rb "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2__v2_Sb_iswz_Rb_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hmul2__v2_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hmul2__v2_fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hmul2__v2_sat "nosat"=0 , "SAT"=1; hmul2__v2_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v2_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v2_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hmul2__v2_Rb "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v2_Sb_iswz_Rb_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hadd2_32i__ftz "noftz"=0 , "FTZ"=1; hadd2_32i__sat "nosat"=0 , "SAT"=1; hadd2_32i__Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2_32i__Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hadd2_32i__Ra_iswz_Ra_32i_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hmul2__v1_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hmul2__v1_fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hmul2__v1_sat "nosat"=0 , "SAT"=1; hmul2__v1_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v1_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v1_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; hmul2__v0_ofmt "MRG_H1"=3 , "MRG_H0"=2 , "F32"=1 , "F16_V2"=0; hmul2__v0_fmz "nofmz"=0 , "FTZ"=1 , "FMZ"=2 , "INVALID"=3; hmul2__v0_sat "nosat"=0 , "SAT"=1; hmul2__v0_Rd "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v0_Ra "R147"=147 , "R146"=146 , "R145"=145 , "R144"=144 , "R143"=143 , "R142"=142 , "R141"=141 , "R140"=140 , "R254"=254 , "R253"=253 , "R178"=178 , "R149"=149 , "R148"=148 , "R231"=231 , "R179"=179 , "RZ"=255 , "R183"=183 , "R38"=38 , "R39"=39 , "R34"=34 , "R35"=35 , "R36"=36 , "R37"=37 , "R30"=30 , "R31"=31 , "R32"=32 , "R33"=33 , "R4"=4 , "R5"=5 , "R6"=6 , "R7"=7 , "R0"=0 , "R1"=1 , "R2"=2 , "R3"=3 , "R8"=8 , "R9"=9 , "R182"=182 , "R89"=89 , "R88"=88 , "R170"=170 , "R171"=171 , "R176"=176 , "R177"=177 , "R174"=174 , "R175"=175 , "R81"=81 , "R80"=80 , "R83"=83 , "R82"=82 , "R85"=85 , "R84"=84 , "R87"=87 , "R86"=86 , "R205"=205 , "R248"=248 , "R169"=169 , "R168"=168 , "R98"=98 , "R99"=99 , "R96"=96 , "R97"=97 , "R94"=94 , "R95"=95 , "R92"=92 , "R93"=93 , "R90"=90 , "R91"=91 , "R16"=16 , "R17"=17 , "R14"=14 , "R15"=15 , "R12"=12 , "R13"=13 , "R10"=10 , "R11"=11 , "R181"=181 , "R18"=18 , "R19"=19 , "R180"=180 , "R251"=251 , "R187"=187 , "R250"=250 , "R186"=186 , "R200"=200 , "R201"=201 , "R202"=202 , "R203"=203 , "R204"=204 , "R185"=185 , "R206"=206 , "R207"=207 , "R208"=208 , "R209"=209 , "R184"=184 , "R118"=118 , "R119"=119 , "R110"=110 , "R111"=111 , "R112"=112 , "R113"=113 , "R114"=114 , "R115"=115 , "R116"=116 , "R117"=117 , "R63"=63 , "R62"=62 , "R61"=61 , "R60"=60 , "R67"=67 , "R66"=66 , "R65"=65 , "R64"=64 , "R193"=193 , "R69"=69 , "R68"=68 , "R162"=162 , "R249"=249 , "R213"=213 , "R212"=212 , "R211"=211 , "R210"=210 , "R217"=217 , "R216"=216 , "R215"=215 , "R214"=214 , "R219"=219 , "R218"=218 , "R109"=109 , "R108"=108 , "R194"=194 , "R103"=103 , "R102"=102 , "R101"=101 , "R100"=100 , "R107"=107 , "R106"=106 , "R105"=105 , "R104"=104 , "R190"=190 , "R247"=247 , "R220"=220 , "R191"=191 , "R240"=240 , "R252"=252 , "R192"=192 , "R241"=241 , "R70"=70 , "R71"=71 , "R72"=72 , "R73"=73 , "R74"=74 , "R75"=75 , "R76"=76 , "R77"=77 , "R78"=78 , "R79"=79 , "R195"=195 , "R136"=136 , "R137"=137 , "R134"=134 , "R135"=135 , "R132"=132 , "R133"=133 , "R130"=130 , "R131"=131 , "R226"=226 , "R227"=227 , "R224"=224 , "R197"=197 , "R222"=222 , "R223"=223 , "R138"=138 , "R139"=139 , "R238"=238 , "R198"=198 , "R196"=196 , "R199"=199 , "R45"=45 , "R44"=44 , "R47"=47 , "R46"=46 , "R41"=41 , "R40"=40 , "R43"=43 , "R42"=42 , "R189"=189 , "R188"=188 , "R49"=49 , "R48"=48 , "R121"=121 , "R120"=120 , "R123"=123 , "R122"=122 , "R125"=125 , "R124"=124 , "R127"=127 , "R126"=126 , "R129"=129 , "R128"=128 , "R233"=233 , "R232"=232 , "R235"=235 , "R234"=234 , "R237"=237 , "R236"=236 , "R165"=165 , "R164"=164 , "R239"=239 , "R167"=167 , "R166"=166 , "R228"=228 , "R161"=161 , "R229"=229 , "R160"=160 , "R58"=58 , "R59"=59 , "R163"=163 , "R52"=52 , "R53"=53 , "R50"=50 , "R51"=51 , "R56"=56 , "R57"=57 , "R54"=54 , "R55"=55 , "R225"=225 , "R154"=154 , "R155"=155 , "R156"=156 , "R157"=157 , "R150"=150 , "R151"=151 , "R152"=152 , "R153"=153 , "R244"=244 , "R245"=245 , "R246"=246 , "R221"=221 , "R158"=158 , "R159"=159 , "R242"=242 , "R243"=243 , "R172"=172 , "R230"=230 , "R173"=173 , "R29"=29 , "R28"=28 , "R27"=27 , "R26"=26 , "R25"=25 , "R24"=24 , "R23"=23 , "R22"=22 , "R21"=21 , "R20"=20; hmul2__v0_Ra_iswz_Ra_mod "H1_H1"=3 , "H1_H0"=0 , "F32"=1 , "H0_H0"=2; TABLES FixLatDestMap '&' 0 -> 0 '&' 1 -> 1 '&' 2 -> 2 '&' 3 -> 3 '&' 4 -> 4 '&' 5 -> 5 '&' 6 -> 6 '&' 7 -> 6 '&' 8 -> 7 '/' 0 -> 8 '/' 1 -> 9 '/' 2 -> 10 '/' 3 -> 11 '/' 4 -> 12 '/' 5 -> 13 '/' 6 -> 14 '/' 7 -> 14 '/' 8 -> 7 ; VarLatOperandEnc 0 -> 0 1 -> 1 2 -> 2 3 -> 3 4 -> 4 5 -> 5 6 -> 6 7 -> 7 0xffff -> 7 ; DestPred Predicate@P0 -> 7 Predicate@P1 -> 6 Predicate@P2 -> 5 Predicate@P3 -> 4 Predicate@P4 -> 3 Predicate@P5 -> 2 Predicate@P6 -> 1 Predicate@P7 -> 0 Predicate@PT -> 0 ; IntSize Integer@U8 -> 0b0_00 Integer@S8 -> 0b1_00 Integer@U16 -> 0b0_01 Integer@S16 -> 0b1_01 Integer@U32 -> 0b0_10 Integer@S32 -> 0b1_10 Integer@U64 -> 0b0_11 Integer@S64 -> 0b1_11 ; IsSigned16 Integer16@U16 -> 0 Integer16@S16 -> 1 ; IsSigned Integer32@U32 -> 0 Integer32@S32 -> 1 ; IsSPASigned IntegerSPA@U32 -> 0 IntegerSPA@U24 -> 0 IntegerSPA@U16H0 -> 0 IntegerSPA@U16H1 -> 0 IntegerSPA@S32 -> 1 IntegerSPA@S24 -> 1 IntegerSPA@S16H0 -> 1 IntegerSPA@S16H1 -> 1 ; IsSPBSigned IntegerSPB@U24 -> 0 IntegerSPB@U16H0 -> 0 IntegerSPB@S24 -> 1 IntegerSPB@S16H0 -> 1 ; IsSPCSigned IntegerSPC@U32 -> 0 IntegerSPC@U24 -> 0 IntegerSPC@U16H0 -> 0 IntegerSPC@S32 -> 1 IntegerSPC@S24 -> 1 IntegerSPC@S16H0 -> 1 ; GetSPExtract IntegerSPC@U32 IntegerSPA@U32 IntegerSPB@U24 -> 0b00_00_000 IntegerSPC@U32 IntegerSPA@U32 IntegerSPB@U16H0 -> 0b10_00_000 IntegerSPC@U32 IntegerSPA@U24 IntegerSPB@U24 -> 0b00_00_010 IntegerSPC@U32 IntegerSPA@U24 IntegerSPB@U16H0 -> 0b10_00_010 IntegerSPC@U32 IntegerSPA@U16H0 IntegerSPB@U24 -> 0b00_00_100 IntegerSPC@U32 IntegerSPA@U16H0 IntegerSPB@U16H0 -> 0b10_00_100 IntegerSPC@U32 IntegerSPA@U16H1 IntegerSPB@U24 -> 0b00_00_110 IntegerSPC@U32 IntegerSPA@U16H1 IntegerSPB@U16H0 -> 0b10_00_110 IntegerSPC@U24 IntegerSPA@U32 IntegerSPB@U24 -> 0b00_01_000 IntegerSPC@U24 IntegerSPA@U32 IntegerSPB@U16H0 -> 0b10_01_000 IntegerSPC@U24 IntegerSPA@U24 IntegerSPB@U24 -> 0b00_01_010 IntegerSPC@U24 IntegerSPA@U24 IntegerSPB@U16H0 -> 0b10_01_010 IntegerSPC@U24 IntegerSPA@U16H0 IntegerSPB@U24 -> 0b00_01_100 IntegerSPC@U24 IntegerSPA@U16H0 IntegerSPB@U16H0 -> 0b10_01_100 IntegerSPC@U24 IntegerSPA@U16H1 IntegerSPB@U24 -> 0b00_01_110 IntegerSPC@U24 IntegerSPA@U16H1 IntegerSPB@U16H0 -> 0b10_01_110 IntegerSPC@U16H0 IntegerSPA@U32 IntegerSPB@U24 -> 0b00_10_000 IntegerSPC@U16H0 IntegerSPA@U32 IntegerSPB@U16H0 -> 0b10_10_000 IntegerSPC@U16H0 IntegerSPA@U24 IntegerSPB@U24 -> 0b00_10_010 IntegerSPC@U16H0 IntegerSPA@U24 IntegerSPB@U16H0 -> 0b10_10_010 IntegerSPC@U16H0 IntegerSPA@U16H0 IntegerSPB@U24 -> 0b00_10_100 IntegerSPC@U16H0 IntegerSPA@U16H0 IntegerSPB@U16H0 -> 0b10_10_100 IntegerSPC@U16H0 IntegerSPA@U16H1 IntegerSPB@U24 -> 0b00_10_110 IntegerSPC@U16H0 IntegerSPA@U16H1 IntegerSPB@U16H0 -> 0b10_10_110 IntegerSPC@S32 IntegerSPA@U32 IntegerSPB@S24 -> 0b01_00_000 IntegerSPC@S32 IntegerSPA@U32 IntegerSPB@S16H0 -> 0b11_00_000 IntegerSPC@S32 IntegerSPA@U24 IntegerSPB@S24 -> 0b01_00_010 IntegerSPC@S32 IntegerSPA@U24 IntegerSPB@S16H0 -> 0b11_00_010 IntegerSPC@S32 IntegerSPA@U16H0 IntegerSPB@S24 -> 0b01_00_100 IntegerSPC@S32 IntegerSPA@U16H0 IntegerSPB@S16H0 -> 0b11_00_100 IntegerSPC@S32 IntegerSPA@U16H1 IntegerSPB@S24 -> 0b01_00_110 IntegerSPC@S32 IntegerSPA@U16H1 IntegerSPB@S16H0 -> 0b11_00_110 IntegerSPC@S32 IntegerSPA@S32 IntegerSPB@U24 -> 0b00_00_001 IntegerSPC@S32 IntegerSPA@S32 IntegerSPB@U16H0 -> 0b10_00_001 IntegerSPC@S32 IntegerSPA@S24 IntegerSPB@U24 -> 0b00_00_011 IntegerSPC@S32 IntegerSPA@S24 IntegerSPB@U16H0 -> 0b10_00_011 IntegerSPC@S32 IntegerSPA@S16H0 IntegerSPB@U24 -> 0b00_00_101 IntegerSPC@S32 IntegerSPA@S16H0 IntegerSPB@U16H0 -> 0b10_00_101 IntegerSPC@S32 IntegerSPA@S16H1 IntegerSPB@U24 -> 0b00_00_111 IntegerSPC@S32 IntegerSPA@S16H1 IntegerSPB@U16H0 -> 0b10_00_111 IntegerSPC@S32 IntegerSPA@S32 IntegerSPB@S24 -> 0b01_00_001 IntegerSPC@S32 IntegerSPA@S32 IntegerSPB@S16H0 -> 0b11_00_001 IntegerSPC@S32 IntegerSPA@S24 IntegerSPB@S24 -> 0b01_00_011 IntegerSPC@S32 IntegerSPA@S24 IntegerSPB@S16H0 -> 0b11_00_011 IntegerSPC@S32 IntegerSPA@S16H0 IntegerSPB@S24 -> 0b01_00_101 IntegerSPC@S32 IntegerSPA@S16H0 IntegerSPB@S16H0 -> 0b11_00_101 IntegerSPC@S32 IntegerSPA@S16H1 IntegerSPB@S24 -> 0b01_00_111 IntegerSPC@S32 IntegerSPA@S16H1 IntegerSPB@S16H0 -> 0b11_00_111 IntegerSPC@S24 IntegerSPA@U32 IntegerSPB@S24 -> 0b01_01_000 IntegerSPC@S24 IntegerSPA@U32 IntegerSPB@S16H0 -> 0b11_01_000 IntegerSPC@S24 IntegerSPA@U24 IntegerSPB@S24 -> 0b01_01_010 IntegerSPC@S24 IntegerSPA@U24 IntegerSPB@S16H0 -> 0b11_01_010 IntegerSPC@S24 IntegerSPA@U16H0 IntegerSPB@S24 -> 0b01_01_100 IntegerSPC@S24 IntegerSPA@U16H0 IntegerSPB@S16H0 -> 0b11_01_100 IntegerSPC@S24 IntegerSPA@U16H1 IntegerSPB@S24 -> 0b01_01_110 IntegerSPC@S24 IntegerSPA@U16H1 IntegerSPB@S16H0 -> 0b11_01_110 IntegerSPC@S24 IntegerSPA@S32 IntegerSPB@U24 -> 0b00_01_001 IntegerSPC@S24 IntegerSPA@S32 IntegerSPB@U16H0 -> 0b10_01_001 IntegerSPC@S24 IntegerSPA@S24 IntegerSPB@U24 -> 0b00_01_011 IntegerSPC@S24 IntegerSPA@S24 IntegerSPB@U16H0 -> 0b10_01_011 IntegerSPC@S24 IntegerSPA@S16H0 IntegerSPB@U24 -> 0b00_01_101 IntegerSPC@S24 IntegerSPA@S16H0 IntegerSPB@U16H0 -> 0b10_01_101 IntegerSPC@S24 IntegerSPA@S16H1 IntegerSPB@U24 -> 0b00_01_111 IntegerSPC@S24 IntegerSPA@S16H1 IntegerSPB@U16H0 -> 0b10_01_111 IntegerSPC@S24 IntegerSPA@S32 IntegerSPB@S24 -> 0b01_01_001 IntegerSPC@S24 IntegerSPA@S32 IntegerSPB@S16H0 -> 0b11_01_001 IntegerSPC@S24 IntegerSPA@S24 IntegerSPB@S24 -> 0b01_01_011 IntegerSPC@S24 IntegerSPA@S24 IntegerSPB@S16H0 -> 0b11_01_011 IntegerSPC@S24 IntegerSPA@S16H0 IntegerSPB@S24 -> 0b01_01_101 IntegerSPC@S24 IntegerSPA@S16H0 IntegerSPB@S16H0 -> 0b11_01_101 IntegerSPC@S24 IntegerSPA@S16H1 IntegerSPB@S24 -> 0b01_01_111 IntegerSPC@S24 IntegerSPA@S16H1 IntegerSPB@S16H0 -> 0b11_01_111 IntegerSPC@S16H0 IntegerSPA@U32 IntegerSPB@S24 -> 0b01_10_000 IntegerSPC@S16H0 IntegerSPA@U32 IntegerSPB@S16H0 -> 0b11_10_000 IntegerSPC@S16H0 IntegerSPA@U24 IntegerSPB@S24 -> 0b01_10_010 IntegerSPC@S16H0 IntegerSPA@U24 IntegerSPB@S16H0 -> 0b11_10_010 IntegerSPC@S16H0 IntegerSPA@U16H0 IntegerSPB@S24 -> 0b01_10_100 IntegerSPC@S16H0 IntegerSPA@U16H0 IntegerSPB@S16H0 -> 0b11_10_100 IntegerSPC@S16H0 IntegerSPA@U16H1 IntegerSPB@S24 -> 0b01_10_110 IntegerSPC@S16H0 IntegerSPA@U16H1 IntegerSPB@S16H0 -> 0b11_10_110 IntegerSPC@S16H0 IntegerSPA@S32 IntegerSPB@U24 -> 0b00_10_001 IntegerSPC@S16H0 IntegerSPA@S32 IntegerSPB@U16H0 -> 0b10_10_001 IntegerSPC@S16H0 IntegerSPA@S24 IntegerSPB@U24 -> 0b00_10_011 IntegerSPC@S16H0 IntegerSPA@S24 IntegerSPB@U16H0 -> 0b10_10_011 IntegerSPC@S16H0 IntegerSPA@S16H0 IntegerSPB@U24 -> 0b00_10_101 IntegerSPC@S16H0 IntegerSPA@S16H0 IntegerSPB@U16H0 -> 0b10_10_101 IntegerSPC@S16H0 IntegerSPA@S16H1 IntegerSPB@U24 -> 0b00_10_111 IntegerSPC@S16H0 IntegerSPA@S16H1 IntegerSPB@U16H0 -> 0b10_10_111 IntegerSPC@S16H0 IntegerSPA@S32 IntegerSPB@S24 -> 0b01_10_001 IntegerSPC@S16H0 IntegerSPA@S32 IntegerSPB@S16H0 -> 0b11_10_001 IntegerSPC@S16H0 IntegerSPA@S24 IntegerSPB@S24 -> 0b01_10_011 IntegerSPC@S16H0 IntegerSPA@S24 IntegerSPB@S16H0 -> 0b11_10_011 IntegerSPC@S16H0 IntegerSPA@S16H0 IntegerSPB@S24 -> 0b01_10_101 IntegerSPC@S16H0 IntegerSPA@S16H0 IntegerSPB@S16H0 -> 0b11_10_101 IntegerSPC@S16H0 IntegerSPA@S16H1 IntegerSPB@S24 -> 0b01_10_111 IntegerSPC@S16H0 IntegerSPA@S16H1 IntegerSPB@S16H0 -> 0b11_10_111 IntegerSPC@U32 IntegerSPA@U32 IntegerSPB@S24 -> 0b01_00_000 IntegerSPC@U32 IntegerSPA@U32 IntegerSPB@S16H0 -> 0b11_00_000 IntegerSPC@U32 IntegerSPA@U24 IntegerSPB@S24 -> 0b01_00_010 IntegerSPC@U32 IntegerSPA@U24 IntegerSPB@S16H0 -> 0b11_00_010 IntegerSPC@U32 IntegerSPA@U16H0 IntegerSPB@S24 -> 0b01_00_100 IntegerSPC@U32 IntegerSPA@U16H0 IntegerSPB@S16H0 -> 0b11_00_100 IntegerSPC@U32 IntegerSPA@U16H1 IntegerSPB@S24 -> 0b01_00_110 IntegerSPC@U32 IntegerSPA@U16H1 IntegerSPB@S16H0 -> 0b11_00_110 IntegerSPC@U32 IntegerSPA@S32 IntegerSPB@U24 -> 0b00_00_001 IntegerSPC@U32 IntegerSPA@S32 IntegerSPB@U16H0 -> 0b10_00_001 IntegerSPC@U32 IntegerSPA@S24 IntegerSPB@U24 -> 0b00_00_011 IntegerSPC@U32 IntegerSPA@S24 IntegerSPB@U16H0 -> 0b10_00_011 IntegerSPC@U32 IntegerSPA@S16H0 IntegerSPB@U24 -> 0b00_00_101 IntegerSPC@U32 IntegerSPA@S16H0 IntegerSPB@U16H0 -> 0b10_00_101 IntegerSPC@U32 IntegerSPA@S16H1 IntegerSPB@U24 -> 0b00_00_111 IntegerSPC@U32 IntegerSPA@S16H1 IntegerSPB@U16H0 -> 0b10_00_111 IntegerSPC@U32 IntegerSPA@S32 IntegerSPB@S24 -> 0b01_00_001 IntegerSPC@U32 IntegerSPA@S32 IntegerSPB@S16H0 -> 0b11_00_001 IntegerSPC@U32 IntegerSPA@S24 IntegerSPB@S24 -> 0b01_00_011 IntegerSPC@U32 IntegerSPA@S24 IntegerSPB@S16H0 -> 0b11_00_011 IntegerSPC@U32 IntegerSPA@S16H0 IntegerSPB@S24 -> 0b01_00_101 IntegerSPC@U32 IntegerSPA@S16H0 IntegerSPB@S16H0 -> 0b11_00_101 IntegerSPC@U32 IntegerSPA@S16H1 IntegerSPB@S24 -> 0b01_00_111 IntegerSPC@U32 IntegerSPA@S16H1 IntegerSPB@S16H0 -> 0b11_00_111 IntegerSPC@U24 IntegerSPA@U32 IntegerSPB@S24 -> 0b01_01_000 IntegerSPC@U24 IntegerSPA@U32 IntegerSPB@S16H0 -> 0b11_01_000 IntegerSPC@U24 IntegerSPA@U24 IntegerSPB@S24 -> 0b01_01_010 IntegerSPC@U24 IntegerSPA@U24 IntegerSPB@S16H0 -> 0b11_01_010 IntegerSPC@U24 IntegerSPA@U16H0 IntegerSPB@S24 -> 0b01_01_100 IntegerSPC@U24 IntegerSPA@U16H0 IntegerSPB@S16H0 -> 0b11_01_100 IntegerSPC@U24 IntegerSPA@U16H1 IntegerSPB@S24 -> 0b01_01_110 IntegerSPC@U24 IntegerSPA@U16H1 IntegerSPB@S16H0 -> 0b11_01_110 IntegerSPC@U24 IntegerSPA@S32 IntegerSPB@U24 -> 0b00_01_001 IntegerSPC@U24 IntegerSPA@S32 IntegerSPB@U16H0 -> 0b10_01_001 IntegerSPC@U24 IntegerSPA@S24 IntegerSPB@U24 -> 0b00_01_011 IntegerSPC@U24 IntegerSPA@S24 IntegerSPB@U16H0 -> 0b10_01_011 IntegerSPC@U24 IntegerSPA@S16H0 IntegerSPB@U24 -> 0b00_01_101 IntegerSPC@U24 IntegerSPA@S16H0 IntegerSPB@U16H0 -> 0b10_01_101 IntegerSPC@U24 IntegerSPA@S16H1 IntegerSPB@U24 -> 0b00_01_111 IntegerSPC@U24 IntegerSPA@S16H1 IntegerSPB@U16H0 -> 0b10_01_111 IntegerSPC@U24 IntegerSPA@S32 IntegerSPB@S24 -> 0b01_01_001 IntegerSPC@U24 IntegerSPA@S32 IntegerSPB@S16H0 -> 0b11_01_001 IntegerSPC@U24 IntegerSPA@S24 IntegerSPB@S24 -> 0b01_01_011 IntegerSPC@U24 IntegerSPA@S24 IntegerSPB@S16H0 -> 0b11_01_011 IntegerSPC@U24 IntegerSPA@S16H0 IntegerSPB@S24 -> 0b01_01_101 IntegerSPC@U24 IntegerSPA@S16H0 IntegerSPB@S16H0 -> 0b11_01_101 IntegerSPC@U24 IntegerSPA@S16H1 IntegerSPB@S24 -> 0b01_01_111 IntegerSPC@U24 IntegerSPA@S16H1 IntegerSPB@S16H0 -> 0b11_01_111 IntegerSPC@U16H0 IntegerSPA@U32 IntegerSPB@S24 -> 0b01_10_000 IntegerSPC@U16H0 IntegerSPA@U32 IntegerSPB@S16H0 -> 0b11_10_000 IntegerSPC@U16H0 IntegerSPA@U24 IntegerSPB@S24 -> 0b01_10_010 IntegerSPC@U16H0 IntegerSPA@U24 IntegerSPB@S16H0 -> 0b11_10_010 IntegerSPC@U16H0 IntegerSPA@U16H0 IntegerSPB@S24 -> 0b01_10_100 IntegerSPC@U16H0 IntegerSPA@U16H0 IntegerSPB@S16H0 -> 0b11_10_100 IntegerSPC@U16H0 IntegerSPA@U16H1 IntegerSPB@S24 -> 0b01_10_110 IntegerSPC@U16H0 IntegerSPA@U16H1 IntegerSPB@S16H0 -> 0b11_10_110 IntegerSPC@U16H0 IntegerSPA@S32 IntegerSPB@U24 -> 0b00_10_001 IntegerSPC@U16H0 IntegerSPA@S32 IntegerSPB@U16H0 -> 0b10_10_001 IntegerSPC@U16H0 IntegerSPA@S24 IntegerSPB@U24 -> 0b00_10_011 IntegerSPC@U16H0 IntegerSPA@S24 IntegerSPB@U16H0 -> 0b10_10_011 IntegerSPC@U16H0 IntegerSPA@S16H0 IntegerSPB@U24 -> 0b00_10_101 IntegerSPC@U16H0 IntegerSPA@S16H0 IntegerSPB@U16H0 -> 0b10_10_101 IntegerSPC@U16H0 IntegerSPA@S16H1 IntegerSPB@U24 -> 0b00_10_111 IntegerSPC@U16H0 IntegerSPA@S16H1 IntegerSPB@U16H0 -> 0b10_10_111 IntegerSPC@U16H0 IntegerSPA@S32 IntegerSPB@S24 -> 0b01_10_001 IntegerSPC@U16H0 IntegerSPA@S32 IntegerSPB@S16H0 -> 0b11_10_001 IntegerSPC@U16H0 IntegerSPA@S24 IntegerSPB@S24 -> 0b01_10_011 IntegerSPC@U16H0 IntegerSPA@S24 IntegerSPB@S16H0 -> 0b11_10_011 IntegerSPC@U16H0 IntegerSPA@S16H0 IntegerSPB@S24 -> 0b01_10_101 IntegerSPC@U16H0 IntegerSPA@S16H0 IntegerSPB@S16H0 -> 0b11_10_101 IntegerSPC@U16H0 IntegerSPA@S16H1 IntegerSPB@S24 -> 0b01_10_111 IntegerSPC@U16H0 IntegerSPA@S16H1 IntegerSPB@S16H0 -> 0b11_10_111 IntegerSPC@S32 IntegerSPA@U32 IntegerSPB@U24 -> 0b00_00_000 IntegerSPC@S32 IntegerSPA@U32 IntegerSPB@U16H0 -> 0b10_00_000 IntegerSPC@S32 IntegerSPA@U24 IntegerSPB@U24 -> 0b00_00_010 IntegerSPC@S32 IntegerSPA@U24 IntegerSPB@U16H0 -> 0b10_00_010 IntegerSPC@S32 IntegerSPA@U16H0 IntegerSPB@U24 -> 0b00_00_100 IntegerSPC@S32 IntegerSPA@U16H0 IntegerSPB@U16H0 -> 0b10_00_100 IntegerSPC@S32 IntegerSPA@U16H1 IntegerSPB@U24 -> 0b00_00_110 IntegerSPC@S32 IntegerSPA@U16H1 IntegerSPB@U16H0 -> 0b10_00_110 IntegerSPC@S24 IntegerSPA@U32 IntegerSPB@U24 -> 0b00_01_000 IntegerSPC@S24 IntegerSPA@U32 IntegerSPB@U16H0 -> 0b10_01_000 IntegerSPC@S24 IntegerSPA@U24 IntegerSPB@U24 -> 0b00_01_010 IntegerSPC@S24 IntegerSPA@U24 IntegerSPB@U16H0 -> 0b10_01_010 IntegerSPC@S24 IntegerSPA@U16H0 IntegerSPB@U24 -> 0b00_01_100 IntegerSPC@S24 IntegerSPA@U16H0 IntegerSPB@U16H0 -> 0b10_01_100 IntegerSPC@S24 IntegerSPA@U16H1 IntegerSPB@U24 -> 0b00_01_110 IntegerSPC@S24 IntegerSPA@U16H1 IntegerSPB@U16H0 -> 0b10_01_110 IntegerSPC@S16H0 IntegerSPA@U32 IntegerSPB@U24 -> 0b00_10_000 IntegerSPC@S16H0 IntegerSPA@U32 IntegerSPB@U16H0 -> 0b10_10_000 IntegerSPC@S16H0 IntegerSPA@U24 IntegerSPB@U24 -> 0b00_10_010 IntegerSPC@S16H0 IntegerSPA@U24 IntegerSPB@U16H0 -> 0b10_10_010 IntegerSPC@S16H0 IntegerSPA@U16H0 IntegerSPB@U24 -> 0b00_10_100 IntegerSPC@S16H0 IntegerSPA@U16H0 IntegerSPB@U16H0 -> 0b10_10_100 IntegerSPC@S16H0 IntegerSPA@U16H1 IntegerSPB@U24 -> 0b00_10_110 IntegerSPC@S16H0 IntegerSPA@U16H1 IntegerSPB@U16H0 -> 0b10_10_110 ; IsSameSigned Integer32@U32 Integer32@U32 -> 0 Integer32@S32 Integer32@S32 -> 1 Integer32@S32 Integer32@U32 -> 0 Integer32@U32 Integer32@S32 -> 0 ; I2I_N_Sizes Integer1632@U16 Integer1632@U16 -> 0b0000 Integer1632@S16 Integer1632@U16 -> 0b0010 Integer1632@U32 Integer1632@U16 -> 0b0100 Integer1632@S32 Integer1632@U16 -> 0b0110 Integer1632@U16 Integer1632@S16 -> 0b0001 Integer1632@S16 Integer1632@S16 -> 0b0011 Integer1632@U32 Integer1632@S16 -> 0b0101 Integer1632@S32 Integer1632@S16 -> 0b0111 Integer1632@U16 Integer1632@U32 -> 0b1000 Integer1632@S16 Integer1632@U32 -> 0b1010 Integer1632@U32 Integer1632@U32 -> 0b1100 Integer1632@S32 Integer1632@U32 -> 0b1110 Integer1632@U16 Integer1632@S32 -> 0b1001 Integer1632@S16 Integer1632@S32 -> 0b1011 Integer1632@U32 Integer1632@S32 -> 0b1101 Integer1632@S32 Integer1632@S32 -> 0b1111 ; Integer8Signed Integer8@U8 -> 0 Integer8@S8 -> 1 ; Integer16Signed Integer16@U16 -> 0 Integer16@S16 -> 1 ; IntegerSigned Integer@U16 -> 0 Integer@S16 -> 1 Integer@U8 -> 0 Integer@S8 -> 1 Integer@U32 -> 0 Integer@S32 -> 1 Integer@U64 -> 0 Integer@S64 -> 1 ; Integer8x8Signed Integer8@U8 Integer8@U8 -> 0 Integer8@S8 Integer8@S8 -> 1 Integer8@S8 Integer8@U8 -> 0 Integer8@U8 Integer8@S8 -> 0 ; Integer16x16Signed Integer16@U16 Integer16@U16 -> 0 Integer16@S16 Integer16@S16 -> 1 Integer16@S16 Integer16@U16 -> 0 Integer16@U16 Integer16@S16 -> 0 ; PSign PO@noPO 0 0 -> 0b00 PO@noPO 0 1 -> 0b01 PO@noPO 1 0 -> 0b10 PO@noPO 1 1 -> 0b00 PO@PO 0 0 -> 0b11 PO@PO 0 1 -> 0b11 PO@PO 1 0 -> 0b11 PO@PO 1 1 -> 0b11 ; VMode AVRG@noAVRG 0 0 -> 0 AVRG@noAVRG 0 1 -> 1 AVRG@noAVRG 1 0 -> 2 AVRG@noAVRG 1 1 -> 0 AVRG@AVRG 0 0 -> 3 AVRG@AVRG 0 1 -> 3 AVRG@AVRG 1 0 -> 3 AVRG@AVRG 1 1 -> 3 ; PSign32 PO@noPO 0 -> 0b00 PO@noPO 1 -> 0b10 PO@PO 0 -> 0b11 PO@PO 1 -> 0b00 ; PSignFFMA 0 0 -> 0 0 1 -> 1 1 0 -> 1 1 1 -> 0 ; PSignMAD PO@noPO 0 0 0 -> 0b00 PO@noPO 1 1 0 -> 0b00 PO@noPO 0 0 1 -> 0b01 PO@noPO 1 0 0 -> 0b10 PO@noPO 0 1 0 -> 0b10 PO@noPO 1 1 1 -> 0b01 PO@noPO 0 1 1 -> 0b00 PO@noPO 1 0 1 -> 0b00 PO@PO 0 0 0 -> 0b11 PO@PO 0 0 1 -> 0b11 PO@PO 0 1 0 -> 0b11 PO@PO 0 1 1 -> 0b11 PO@PO 1 0 0 -> 0b11 PO@PO 1 0 1 -> 0b11 PO@PO 1 1 0 -> 0b11 PO@PO 1 1 1 -> 0b11 ; CombineBP 1 0 -> 0 0 1 -> 1 0 0 -> 0 1 1 -> 0 ; RCIConstBank 0 -> 0b010 1 -> 0b100 16 -> 0b110 2 -> 0b010 3 -> 0b010 4 -> 0b010 5 -> 0b010 6 -> 0b010 7 -> 0b010 8 -> 0b010 9 -> 0b010 10 -> 0b010 11 -> 0b010 12 -> 0b010 13 -> 0b010 14 -> 0b010 15 -> 0b010 17 -> 0b010 18 -> 0b010 19 -> 0b010 20 -> 0b010 21 -> 0b010 22 -> 0b010 23 -> 0b010 24 -> 0b010 25 -> 0b010 26 -> 0b010 27 -> 0b010 28 -> 0b010 29 -> 0b010 30 -> 0b010 31 -> 0b010 ; CNSConstBank 0 -> 0b01 1 -> 0b10 16 -> 0b11 2 -> 0b01 3 -> 0b01 4 -> 0b01 5 -> 0b01 6 -> 0b01 7 -> 0b01 8 -> 0b01 9 -> 0b01 10 -> 0b01 11 -> 0b01 12 -> 0b01 13 -> 0b01 14 -> 0b01 15 -> 0b01 17 -> 0b01 18 -> 0b01 19 -> 0b01 20 -> 0b01 21 -> 0b01 22 -> 0b01 23 -> 0b01 24 -> 0b01 25 -> 0b01 26 -> 0b01 27 -> 0b01 28 -> 0b01 29 -> 0b01 30 -> 0b01 31 -> 0b01 ; LDCNConstBank 0 -> 0b000 1 -> 0b001 2 -> 0b010 3 -> 0b011 4 -> 0b100 5 -> 0b101 6 -> 0b110 16 -> 0b111 7 -> 0b000 8 -> 0b000 9 -> 0b000 10 -> 0b000 11 -> 0b000 12 -> 0b000 13 -> 0b000 14 -> 0b000 15 -> 0b000 17 -> 0b000 18 -> 0b000 19 -> 0b000 20 -> 0b000 21 -> 0b000 22 -> 0b000 23 -> 0b000 24 -> 0b000 25 -> 0b000 26 -> 0b000 27 -> 0b000 28 -> 0b000 29 -> 0b000 30 -> 0b000 31 -> 0b000 ; CRegAlignment CInteger@U8 -> 1 CInteger@S8 -> 1 CInteger@U16 -> 1 CInteger@S16 -> 1 CInteger@"32" -> 1 CInteger@"64" -> 2 CInteger@"128" -> 4 CInteger@INVALIDSIZE7 -> 1 ; LDGSizeMask CInteger@U8 -> 0b0000000000_000_0001 CInteger@S8 -> 0b0000000000_001_0001 CInteger@U16 -> 0b0000000000_010_0001 CInteger@S16 -> 0b0000000000_011_0001 CInteger@"32" -> 0b0000000000_100_0001 CInteger@"64" -> 0b0000000000_101_0011 CInteger@"128" -> 0b0000000000_110_1111 CInteger@INVALIDSIZE7 -> 0b0000000000_111_0001 ; LDRegAlignment LDInteger@U8 -> 1 LDInteger@S8 -> 1 LDInteger@U16 -> 1 LDInteger@S16 -> 1 LDInteger@"32" -> 1 LDInteger@"64" -> 2 LDInteger@"128" -> 4 LDInteger@"U.128" -> 4 ; BQRegAlignment BQInteger@"64" -> 2 BQInteger@"128" -> 4 ; ARegAlignment AInteger@"32" -> 1 AInteger@"64" -> 2 AInteger@"96" -> 4 AInteger@"128" -> 4 ; QRegAlignment QInteger@"32" -> 1 QInteger@"64" -> 2 ; SQRegAlignment SQInteger@U32 -> 1 SQInteger@S32 -> 1 SQInteger@"F32.FTZ.RN" -> 1 SQInteger@"F16x2.FTZ.RN" -> 1 SQInteger@"F64.RN" -> 2 SQInteger@INVALIDATOMICSIZE7 -> 1 SQInteger@U64 -> 2 SQInteger@S64 -> 2 ; CASRegAlignment CASInteger@"32" -> 1 CASInteger@"64" -> 2 ; CIntSize CInteger@U8 -> 1 CInteger@S8 -> 1 CInteger@U16 -> 2 CInteger@S16 -> 2 CInteger@"32" -> 4 CInteger@"64" -> 8 CInteger@"128" -> 16 ; Video4ImmSel ASel4@"0000" -> 1 ASel4@"1111" -> 1 ASel4@"2222" -> 1 ASel4@"3333" -> 1 ASel4@"3210" -> 1 ASel4@"4321" -> 1 ASel4@"5432" -> 1 ASel4@"6543" -> 1 ASel4@"3201" -> 1 ASel4@"3012" -> 1 ASel4@"0213" -> 1 ASel4@"3120" -> 1 ASel4@"1230" -> 1 ASel4@"2310" -> 1 ASel4@INVALIDASEL4E -> 1 ASel4@INVALIDASEL4F -> 1 ; TXQModeDim TXQMode@TEX_HEADER_DIMENSION -> 0b00000_1 TXQMode@TEX_HEADER_TEXTURE_TYPE -> 0b00001_0 TXQMode@TEX_HEADER_SAMPLER_POS -> 0b00010_1 TXQMode@"3" -> 0b00011_0 TXQMode@"4" -> 0b00100_0 TXQMode@"5" -> 0b00101_0 TXQMode@"6" -> 0b00110_0 TXQMode@"7" -> 0b00111_0 TXQMode@TEX_SAMPLER_FILTER -> 0b01000_0 TXQMode@TEX_SAMPLER_LOD -> 0b01001_0 TXQMode@TEX_SAMPLER_WRAP -> 0b01010_0 TXQMode@TEX_SAMPLER_BORDER_COLOR -> 0b01011_0 TXQMode@"12" -> 0b01100_0 TXQMode@"13" -> 0b01101_0 TXQMode@"14" -> 0b01110_0 TXQMode@"15" -> 0b01111_0 TXQMode@"16" -> 0b10000_0 TXQMode@"17" -> 0b10001_0 TXQMode@"18" -> 0b10010_0 TXQMode@"19" -> 0b10011_0 TXQMode@"20" -> 0b10100_0 TXQMode@"21" -> 0b10101_0 TXQMode@"22" -> 0b10110_0 TXQMode@"23" -> 0b10111_0 TXQMode@"24" -> 0b11000_0 TXQMode@"25" -> 0b11001_0 TXQMode@"26" -> 0b11010_0 TXQMode@"27" -> 0b11011_0 TXQMode@"28" -> 0b11100_0 TXQMode@"29" -> 0b11101_0 TXQMode@"30" -> 0b11110_0 TXQMode@"31" -> 0b11111_0 ; abSize CInteger@U8 CInteger@U8 -> 0 CInteger@U8 CInteger@S8 -> 1 CInteger@U8 CInteger@U16 -> 2 CInteger@U8 CInteger@S16 -> 3 CInteger@U8 CInteger@"32" -> 4 CInteger@S8 CInteger@U8 -> 5 CInteger@S8 CInteger@S8 -> 6 CInteger@S8 CInteger@U16 -> 7 CInteger@S8 CInteger@S16 -> 8 CInteger@S8 CInteger@"32" -> 9 CInteger@U16 CInteger@U8 -> 10 CInteger@U16 CInteger@S8 -> 11 CInteger@U16 CInteger@U16 -> 12 CInteger@U16 CInteger@S16 -> 13 CInteger@U16 CInteger@"32" -> 14 CInteger@S16 CInteger@U8 -> 15 CInteger@S16 CInteger@S8 -> 16 CInteger@S16 CInteger@U16 -> 17 CInteger@S16 CInteger@S16 -> 18 CInteger@S16 CInteger@"32" -> 19 CInteger@"32" CInteger@U8 -> 20 CInteger@"32" CInteger@S8 -> 21 CInteger@"32" CInteger@U16 -> 22 CInteger@"32" CInteger@S16 -> 23 CInteger@"32" CInteger@"32" -> 24 CInteger@"32" CInteger@"64" -> 25 CInteger@"32" CInteger@"128" -> 26 CInteger@"64" CInteger@"32" -> 27 CInteger@"64" CInteger@"64" -> 28 CInteger@"64" CInteger@"128" -> 29 CInteger@"128" CInteger@"32" -> 30 CInteger@"128" CInteger@"64" -> 31 CInteger@U8 CInteger@"64" -> 0 CInteger@U8 CInteger@"128" -> 0 CInteger@S8 CInteger@"64" -> 0 CInteger@S8 CInteger@"128" -> 0 CInteger@U16 CInteger@"64" -> 0 CInteger@U16 CInteger@"128" -> 0 CInteger@S16 CInteger@"64" -> 0 CInteger@S16 CInteger@"128" -> 0 CInteger@"64" CInteger@U8 -> 0 CInteger@"64" CInteger@S8 -> 0 CInteger@"64" CInteger@U16 -> 0 CInteger@"64" CInteger@S16 -> 0 CInteger@"128" CInteger@U8 -> 0 CInteger@"128" CInteger@S8 -> 0 CInteger@"128" CInteger@U16 -> 0 CInteger@"128" CInteger@S16 -> 0 CInteger@"128" CInteger@"128" -> 0 ; VFormat8 Integer@U8 B1B0@B0 -> 0b0_000 Integer@U8 B1B0@B1 -> 0b0_001 Integer@U8 B1B0@B2 -> 0b0_010 Integer@U8 B1B0@B3 -> 0b0_011 Integer@S8 B1B0@B0 -> 0b1_000 Integer@S8 B1B0@B1 -> 0b1_001 Integer@S8 B1B0@B2 -> 0b1_010 Integer@S8 B1B0@B3 -> 0b1_011 ; VFormat16 Integer@U16 H1H0@H0 -> 0b0_100 Integer@U16 H1H0@H1 -> 0b0_101 Integer@S16 H1H0@H0 -> 0b1_100 Integer@S16 H1H0@H1 -> 0b1_101 ; VFormat32 VInteger32@U32 -> 0b0_110 VInteger32@S32 -> 0b1_110 6 -> 0b0_111 7 -> 0b1_111 ; VFormatU8 U8@U8 B1B0@B0 -> 0b000 U8@U8 B1B0@B1 -> 0b001 U8@U8 B1B0@B2 -> 0b010 U8@U8 B1B0@B3 -> 0b011 ; VFormatU16 U16@U16 H1H0@H0 -> 0b100 U16@U16 H1H0@H1 -> 0b101 ; VFormatU32 U32@U32 -> 0b110 U32@INVALIDSEL7 -> 0b111 ; VFormat8_N Integer@U8 B1B0@B0 Integer@U8 B1B0@B0 -> 0b0_0_00000 Integer@U8 B1B0@B0 Integer@U8 B1B0@B1 -> 0b0_0_00001 Integer@U8 B1B0@B0 Integer@U8 B1B0@B2 -> 0b0_0_00010 Integer@U8 B1B0@B0 Integer@U8 B1B0@B3 -> 0b0_0_00011 Integer@U8 B1B0@B1 Integer@U8 B1B0@B0 -> 0b0_0_00100 Integer@U8 B1B0@B1 Integer@U8 B1B0@B1 -> 0b0_0_00101 Integer@U8 B1B0@B1 Integer@U8 B1B0@B2 -> 0b0_0_00110 Integer@U8 B1B0@B1 Integer@U8 B1B0@B3 -> 0b0_0_00111 Integer@U8 B1B0@B2 Integer@U8 B1B0@B0 -> 0b0_0_01000 Integer@U8 B1B0@B2 Integer@U8 B1B0@B1 -> 0b0_0_01001 Integer@U8 B1B0@B2 Integer@U8 B1B0@B2 -> 0b0_0_01010 Integer@U8 B1B0@B2 Integer@U8 B1B0@B3 -> 0b0_0_01011 Integer@U8 B1B0@B3 Integer@U8 B1B0@B0 -> 0b0_0_01100 Integer@U8 B1B0@B3 Integer@U8 B1B0@B1 -> 0b0_0_01101 Integer@U8 B1B0@B3 Integer@U8 B1B0@B2 -> 0b0_0_01110 Integer@U8 B1B0@B3 Integer@U8 B1B0@B3 -> 0b0_0_01111 Integer@U8 B1B0@B0 Integer@S8 B1B0@B0 -> 0b0_1_00000 Integer@U8 B1B0@B0 Integer@S8 B1B0@B1 -> 0b0_1_00001 Integer@U8 B1B0@B0 Integer@S8 B1B0@B2 -> 0b0_1_00010 Integer@U8 B1B0@B0 Integer@S8 B1B0@B3 -> 0b0_1_00011 Integer@U8 B1B0@B1 Integer@S8 B1B0@B0 -> 0b0_1_00100 Integer@U8 B1B0@B1 Integer@S8 B1B0@B1 -> 0b0_1_00101 Integer@U8 B1B0@B1 Integer@S8 B1B0@B2 -> 0b0_1_00110 Integer@U8 B1B0@B1 Integer@S8 B1B0@B3 -> 0b0_1_00111 Integer@U8 B1B0@B2 Integer@S8 B1B0@B0 -> 0b0_1_01000 Integer@U8 B1B0@B2 Integer@S8 B1B0@B1 -> 0b0_1_01001 Integer@U8 B1B0@B2 Integer@S8 B1B0@B2 -> 0b0_1_01010 Integer@U8 B1B0@B2 Integer@S8 B1B0@B3 -> 0b0_1_01011 Integer@U8 B1B0@B3 Integer@S8 B1B0@B0 -> 0b0_1_01100 Integer@U8 B1B0@B3 Integer@S8 B1B0@B1 -> 0b0_1_01101 Integer@U8 B1B0@B3 Integer@S8 B1B0@B2 -> 0b0_1_01110 Integer@U8 B1B0@B3 Integer@S8 B1B0@B3 -> 0b0_1_01111 Integer@S8 B1B0@B0 Integer@U8 B1B0@B0 -> 0b1_0_00000 Integer@S8 B1B0@B0 Integer@U8 B1B0@B1 -> 0b1_0_00001 Integer@S8 B1B0@B0 Integer@U8 B1B0@B2 -> 0b1_0_00010 Integer@S8 B1B0@B0 Integer@U8 B1B0@B3 -> 0b1_0_00011 Integer@S8 B1B0@B1 Integer@U8 B1B0@B0 -> 0b1_0_00100 Integer@S8 B1B0@B1 Integer@U8 B1B0@B1 -> 0b1_0_00101 Integer@S8 B1B0@B1 Integer@U8 B1B0@B2 -> 0b1_0_00110 Integer@S8 B1B0@B1 Integer@U8 B1B0@B3 -> 0b1_0_00111 Integer@S8 B1B0@B2 Integer@U8 B1B0@B0 -> 0b1_0_01000 Integer@S8 B1B0@B2 Integer@U8 B1B0@B1 -> 0b1_0_01001 Integer@S8 B1B0@B2 Integer@U8 B1B0@B2 -> 0b1_0_01010 Integer@S8 B1B0@B2 Integer@U8 B1B0@B3 -> 0b1_0_01011 Integer@S8 B1B0@B3 Integer@U8 B1B0@B0 -> 0b1_0_01100 Integer@S8 B1B0@B3 Integer@U8 B1B0@B1 -> 0b1_0_01101 Integer@S8 B1B0@B3 Integer@U8 B1B0@B2 -> 0b1_0_01110 Integer@S8 B1B0@B3 Integer@U8 B1B0@B3 -> 0b1_0_01111 Integer@S8 B1B0@B0 Integer@S8 B1B0@B0 -> 0b1_1_00000 Integer@S8 B1B0@B0 Integer@S8 B1B0@B1 -> 0b1_1_00001 Integer@S8 B1B0@B0 Integer@S8 B1B0@B2 -> 0b1_1_00010 Integer@S8 B1B0@B0 Integer@S8 B1B0@B3 -> 0b1_1_00011 Integer@S8 B1B0@B1 Integer@S8 B1B0@B0 -> 0b1_1_00100 Integer@S8 B1B0@B1 Integer@S8 B1B0@B1 -> 0b1_1_00101 Integer@S8 B1B0@B1 Integer@S8 B1B0@B2 -> 0b1_1_00110 Integer@S8 B1B0@B1 Integer@S8 B1B0@B3 -> 0b1_1_00111 Integer@S8 B1B0@B2 Integer@S8 B1B0@B0 -> 0b1_1_01000 Integer@S8 B1B0@B2 Integer@S8 B1B0@B1 -> 0b1_1_01001 Integer@S8 B1B0@B2 Integer@S8 B1B0@B2 -> 0b1_1_01010 Integer@S8 B1B0@B2 Integer@S8 B1B0@B3 -> 0b1_1_01011 Integer@S8 B1B0@B3 Integer@S8 B1B0@B0 -> 0b1_1_01100 Integer@S8 B1B0@B3 Integer@S8 B1B0@B1 -> 0b1_1_01101 Integer@S8 B1B0@B3 Integer@S8 B1B0@B2 -> 0b1_1_01110 Integer@S8 B1B0@B3 Integer@S8 B1B0@B3 -> 0b1_1_01111 ; VFormat32_8_N Integer@U32 Integer@U8 B1B0@B0 -> 0b0_0_10000 Integer@U32 Integer@U8 B1B0@B1 -> 0b0_0_10001 Integer@U32 Integer@U8 B1B0@B2 -> 0b0_0_10010 Integer@U32 Integer@U8 B1B0@B3 -> 0b0_0_10011 Integer@U32 Integer@S8 B1B0@B0 -> 0b0_1_10000 Integer@U32 Integer@S8 B1B0@B1 -> 0b0_1_10001 Integer@U32 Integer@S8 B1B0@B2 -> 0b0_1_10010 Integer@U32 Integer@S8 B1B0@B3 -> 0b0_1_10011 Integer@S32 Integer@U8 B1B0@B0 -> 0b1_0_10000 Integer@S32 Integer@U8 B1B0@B1 -> 0b1_0_10001 Integer@S32 Integer@U8 B1B0@B2 -> 0b1_0_10010 Integer@S32 Integer@U8 B1B0@B3 -> 0b1_0_10011 Integer@S32 Integer@S8 B1B0@B0 -> 0b1_1_10000 Integer@S32 Integer@S8 B1B0@B1 -> 0b1_1_10001 Integer@S32 Integer@S8 B1B0@B2 -> 0b1_1_10010 Integer@S32 Integer@S8 B1B0@B3 -> 0b1_1_10011 ; VFormat8_32_N Integer@U8 B1B0@B0 Integer@U32 -> 0b0_0_10100 Integer@U8 B1B0@B1 Integer@U32 -> 0b0_0_10101 Integer@U8 B1B0@B2 Integer@U32 -> 0b0_0_10110 Integer@U8 B1B0@B3 Integer@U32 -> 0b0_0_10111 Integer@U8 B1B0@B0 Integer@S32 -> 0b0_1_10100 Integer@U8 B1B0@B1 Integer@S32 -> 0b0_1_10101 Integer@U8 B1B0@B2 Integer@S32 -> 0b0_1_10110 Integer@U8 B1B0@B3 Integer@S32 -> 0b0_1_10111 Integer@S8 B1B0@B0 Integer@U32 -> 0b1_0_10100 Integer@S8 B1B0@B1 Integer@U32 -> 0b1_0_10101 Integer@S8 B1B0@B2 Integer@U32 -> 0b1_0_10110 Integer@S8 B1B0@B3 Integer@U32 -> 0b1_0_10111 Integer@S8 B1B0@B0 Integer@S32 -> 0b1_1_10100 Integer@S8 B1B0@B1 Integer@S32 -> 0b1_1_10101 Integer@S8 B1B0@B2 Integer@S32 -> 0b1_1_10110 Integer@S8 B1B0@B3 Integer@S32 -> 0b1_1_10111 ; VFormat16_N Integer@U16 H1H0@H0 Integer@U16 H1H0@H0 -> 0b0_0_11000 Integer@U16 H1H0@H0 Integer@U16 H1H0@H1 -> 0b0_0_11001 Integer@U16 H1H0@H1 Integer@U16 H1H0@H0 -> 0b0_0_11010 Integer@U16 H1H0@H1 Integer@U16 H1H0@H1 -> 0b0_0_11011 Integer@U16 H1H0@H0 Integer@S16 H1H0@H0 -> 0b0_1_11000 Integer@U16 H1H0@H0 Integer@S16 H1H0@H1 -> 0b0_1_11001 Integer@U16 H1H0@H1 Integer@S16 H1H0@H0 -> 0b0_1_11010 Integer@U16 H1H0@H1 Integer@S16 H1H0@H1 -> 0b0_1_11011 Integer@S16 H1H0@H0 Integer@U16 H1H0@H0 -> 0b1_0_11000 Integer@S16 H1H0@H0 Integer@U16 H1H0@H1 -> 0b1_0_11001 Integer@S16 H1H0@H1 Integer@U16 H1H0@H0 -> 0b1_0_11010 Integer@S16 H1H0@H1 Integer@U16 H1H0@H1 -> 0b1_0_11011 Integer@S16 H1H0@H0 Integer@S16 H1H0@H0 -> 0b1_1_11000 Integer@S16 H1H0@H0 Integer@S16 H1H0@H1 -> 0b1_1_11001 Integer@S16 H1H0@H1 Integer@S16 H1H0@H0 -> 0b1_1_11010 Integer@S16 H1H0@H1 Integer@S16 H1H0@H1 -> 0b1_1_11011 ; VFormat32_16_N Integer@U32 Integer@U16 H1H0@H0 -> 0b0_0_11100 Integer@U32 Integer@U16 H1H0@H1 -> 0b0_0_11101 Integer@U32 Integer@S16 H1H0@H0 -> 0b0_1_11100 Integer@U32 Integer@S16 H1H0@H1 -> 0b0_1_11101 Integer@S32 Integer@U16 H1H0@H0 -> 0b1_0_11100 Integer@S32 Integer@U16 H1H0@H1 -> 0b1_0_11101 Integer@S32 Integer@S16 H1H0@H0 -> 0b1_1_11100 Integer@S32 Integer@S16 H1H0@H1 -> 0b1_1_11101 ; VFormat16_32_N Integer@U16 H1H0@H0 Integer@U32 -> 0b0_0_11110 Integer@U16 H1H0@H1 Integer@U32 -> 0b0_0_11111 Integer@U16 H1H0@H0 Integer@S32 -> 0b0_1_11110 Integer@U16 H1H0@H1 Integer@S32 -> 0b0_1_11111 Integer@S16 H1H0@H0 Integer@U32 -> 0b1_0_11110 Integer@S16 H1H0@H1 Integer@U32 -> 0b1_0_11111 Integer@S16 H1H0@H0 Integer@S32 -> 0b1_1_11110 Integer@S16 H1H0@H1 Integer@S32 -> 0b1_1_11111 ; ConsecutiveReg8 Register@R0 Register@R1 CASInteger@"32" -> 0b0_00000000 Register@R1 Register@R2 CASInteger@"32" -> 0b0_00000001 Register@R2 Register@R3 CASInteger@"32" -> 0b0_00000010 Register@R3 Register@R4 CASInteger@"32" -> 0b0_00000011 Register@R4 Register@R5 CASInteger@"32" -> 0b0_00000100 Register@R5 Register@R6 CASInteger@"32" -> 0b0_00000101 Register@R6 Register@R7 CASInteger@"32" -> 0b0_00000110 Register@R7 Register@R8 CASInteger@"32" -> 0b0_00000111 Register@R8 Register@R9 CASInteger@"32" -> 0b0_00001000 Register@R9 Register@R10 CASInteger@"32" -> 0b0_00001001 Register@R10 Register@R11 CASInteger@"32" -> 0b0_00001010 Register@R11 Register@R12 CASInteger@"32" -> 0b0_00001011 Register@R12 Register@R13 CASInteger@"32" -> 0b0_00001100 Register@R13 Register@R14 CASInteger@"32" -> 0b0_00001101 Register@R14 Register@R15 CASInteger@"32" -> 0b0_00001110 Register@R15 Register@R16 CASInteger@"32" -> 0b0_00001111 Register@R16 Register@R17 CASInteger@"32" -> 0b0_00010000 Register@R17 Register@R18 CASInteger@"32" -> 0b0_00010001 Register@R18 Register@R19 CASInteger@"32" -> 0b0_00010010 Register@R19 Register@R20 CASInteger@"32" -> 0b0_00010011 Register@R20 Register@R21 CASInteger@"32" -> 0b0_00010100 Register@R21 Register@R22 CASInteger@"32" -> 0b0_00010101 Register@R22 Register@R23 CASInteger@"32" -> 0b0_00010110 Register@R23 Register@R24 CASInteger@"32" -> 0b0_00010111 Register@R24 Register@R25 CASInteger@"32" -> 0b0_00011000 Register@R25 Register@R26 CASInteger@"32" -> 0b0_00011001 Register@R26 Register@R27 CASInteger@"32" -> 0b0_00011010 Register@R27 Register@R28 CASInteger@"32" -> 0b0_00011011 Register@R28 Register@R29 CASInteger@"32" -> 0b0_00011100 Register@R29 Register@R30 CASInteger@"32" -> 0b0_00011101 Register@R30 Register@R31 CASInteger@"32" -> 0b0_00011110 Register@R31 Register@R32 CASInteger@"32" -> 0b0_00011111 Register@R32 Register@R33 CASInteger@"32" -> 0b0_00100000 Register@R33 Register@R34 CASInteger@"32" -> 0b0_00100001 Register@R34 Register@R35 CASInteger@"32" -> 0b0_00100010 Register@R35 Register@R36 CASInteger@"32" -> 0b0_00100011 Register@R36 Register@R37 CASInteger@"32" -> 0b0_00100100 Register@R37 Register@R38 CASInteger@"32" -> 0b0_00100101 Register@R38 Register@R39 CASInteger@"32" -> 0b0_00100110 Register@R39 Register@R40 CASInteger@"32" -> 0b0_00100111 Register@R40 Register@R41 CASInteger@"32" -> 0b0_00101000 Register@R41 Register@R42 CASInteger@"32" -> 0b0_00101001 Register@R42 Register@R43 CASInteger@"32" -> 0b0_00101010 Register@R43 Register@R44 CASInteger@"32" -> 0b0_00101011 Register@R44 Register@R45 CASInteger@"32" -> 0b0_00101100 Register@R45 Register@R46 CASInteger@"32" -> 0b0_00101101 Register@R46 Register@R47 CASInteger@"32" -> 0b0_00101110 Register@R47 Register@R48 CASInteger@"32" -> 0b0_00101111 Register@R48 Register@R49 CASInteger@"32" -> 0b0_00110000 Register@R49 Register@R50 CASInteger@"32" -> 0b0_00110001 Register@R50 Register@R51 CASInteger@"32" -> 0b0_00110010 Register@R51 Register@R52 CASInteger@"32" -> 0b0_00110011 Register@R52 Register@R53 CASInteger@"32" -> 0b0_00110100 Register@R53 Register@R54 CASInteger@"32" -> 0b0_00110101 Register@R54 Register@R55 CASInteger@"32" -> 0b0_00110110 Register@R55 Register@R56 CASInteger@"32" -> 0b0_00110111 Register@R56 Register@R57 CASInteger@"32" -> 0b0_00111000 Register@R57 Register@R58 CASInteger@"32" -> 0b0_00111001 Register@R58 Register@R59 CASInteger@"32" -> 0b0_00111010 Register@R59 Register@R60 CASInteger@"32" -> 0b0_00111011 Register@R60 Register@R61 CASInteger@"32" -> 0b0_00111100 Register@R61 Register@R62 CASInteger@"32" -> 0b0_00111101 Register@R62 Register@R63 CASInteger@"32" -> 0b0_00111110 Register@R63 Register@R64 CASInteger@"32" -> 0b0_00111111 Register@R64 Register@R65 CASInteger@"32" -> 0b0_01000000 Register@R65 Register@R66 CASInteger@"32" -> 0b0_01000001 Register@R66 Register@R67 CASInteger@"32" -> 0b0_01000010 Register@R67 Register@R68 CASInteger@"32" -> 0b0_01000011 Register@R68 Register@R69 CASInteger@"32" -> 0b0_01000100 Register@R69 Register@R70 CASInteger@"32" -> 0b0_01000101 Register@R70 Register@R71 CASInteger@"32" -> 0b0_01000110 Register@R71 Register@R72 CASInteger@"32" -> 0b0_01000111 Register@R72 Register@R73 CASInteger@"32" -> 0b0_01001000 Register@R73 Register@R74 CASInteger@"32" -> 0b0_01001001 Register@R74 Register@R75 CASInteger@"32" -> 0b0_01001010 Register@R75 Register@R76 CASInteger@"32" -> 0b0_01001011 Register@R76 Register@R77 CASInteger@"32" -> 0b0_01001100 Register@R77 Register@R78 CASInteger@"32" -> 0b0_01001101 Register@R78 Register@R79 CASInteger@"32" -> 0b0_01001110 Register@R79 Register@R80 CASInteger@"32" -> 0b0_01001111 Register@R80 Register@R81 CASInteger@"32" -> 0b0_01010000 Register@R81 Register@R82 CASInteger@"32" -> 0b0_01010001 Register@R82 Register@R83 CASInteger@"32" -> 0b0_01010010 Register@R83 Register@R84 CASInteger@"32" -> 0b0_01010011 Register@R84 Register@R85 CASInteger@"32" -> 0b0_01010100 Register@R85 Register@R86 CASInteger@"32" -> 0b0_01010101 Register@R86 Register@R87 CASInteger@"32" -> 0b0_01010110 Register@R87 Register@R88 CASInteger@"32" -> 0b0_01010111 Register@R88 Register@R89 CASInteger@"32" -> 0b0_01011000 Register@R89 Register@R90 CASInteger@"32" -> 0b0_01011001 Register@R90 Register@R91 CASInteger@"32" -> 0b0_01011010 Register@R91 Register@R92 CASInteger@"32" -> 0b0_01011011 Register@R92 Register@R93 CASInteger@"32" -> 0b0_01011100 Register@R93 Register@R94 CASInteger@"32" -> 0b0_01011101 Register@R94 Register@R95 CASInteger@"32" -> 0b0_01011110 Register@R95 Register@R96 CASInteger@"32" -> 0b0_01011111 Register@R96 Register@R97 CASInteger@"32" -> 0b0_01100000 Register@R97 Register@R98 CASInteger@"32" -> 0b0_01100001 Register@R98 Register@R99 CASInteger@"32" -> 0b0_01100010 Register@R99 Register@R100 CASInteger@"32" -> 0b0_01100011 Register@R100 Register@R101 CASInteger@"32" -> 0b0_01100100 Register@R101 Register@R102 CASInteger@"32" -> 0b0_01100101 Register@R102 Register@R103 CASInteger@"32" -> 0b0_01100110 Register@R103 Register@R104 CASInteger@"32" -> 0b0_01100111 Register@R104 Register@R105 CASInteger@"32" -> 0b0_01101000 Register@R105 Register@R106 CASInteger@"32" -> 0b0_01101001 Register@R106 Register@R107 CASInteger@"32" -> 0b0_01101010 Register@R107 Register@R108 CASInteger@"32" -> 0b0_01101011 Register@R108 Register@R109 CASInteger@"32" -> 0b0_01101100 Register@R109 Register@R110 CASInteger@"32" -> 0b0_01101101 Register@R110 Register@R111 CASInteger@"32" -> 0b0_01101110 Register@R111 Register@R112 CASInteger@"32" -> 0b0_01101111 Register@R112 Register@R113 CASInteger@"32" -> 0b0_01110000 Register@R113 Register@R114 CASInteger@"32" -> 0b0_01110001 Register@R114 Register@R115 CASInteger@"32" -> 0b0_01110010 Register@R115 Register@R116 CASInteger@"32" -> 0b0_01110011 Register@R116 Register@R117 CASInteger@"32" -> 0b0_01110100 Register@R117 Register@R118 CASInteger@"32" -> 0b0_01110101 Register@R118 Register@R119 CASInteger@"32" -> 0b0_01110110 Register@R119 Register@R120 CASInteger@"32" -> 0b0_01110111 Register@R120 Register@R121 CASInteger@"32" -> 0b0_01111000 Register@R121 Register@R122 CASInteger@"32" -> 0b0_01111001 Register@R122 Register@R123 CASInteger@"32" -> 0b0_01111010 Register@R123 Register@R124 CASInteger@"32" -> 0b0_01111011 Register@R124 Register@R125 CASInteger@"32" -> 0b0_01111100 Register@R125 Register@R126 CASInteger@"32" -> 0b0_01111101 Register@R126 Register@R127 CASInteger@"32" -> 0b0_01111110 Register@R127 Register@R128 CASInteger@"32" -> 0b0_01111111 Register@R128 Register@R129 CASInteger@"32" -> 0b0_10000000 Register@R129 Register@R130 CASInteger@"32" -> 0b0_10000001 Register@R130 Register@R131 CASInteger@"32" -> 0b0_10000010 Register@R131 Register@R132 CASInteger@"32" -> 0b0_10000011 Register@R132 Register@R133 CASInteger@"32" -> 0b0_10000100 Register@R133 Register@R134 CASInteger@"32" -> 0b0_10000101 Register@R134 Register@R135 CASInteger@"32" -> 0b0_10000110 Register@R135 Register@R136 CASInteger@"32" -> 0b0_10000111 Register@R136 Register@R137 CASInteger@"32" -> 0b0_10001000 Register@R137 Register@R138 CASInteger@"32" -> 0b0_10001001 Register@R138 Register@R139 CASInteger@"32" -> 0b0_10001010 Register@R139 Register@R140 CASInteger@"32" -> 0b0_10001011 Register@R140 Register@R141 CASInteger@"32" -> 0b0_10001100 Register@R141 Register@R142 CASInteger@"32" -> 0b0_10001101 Register@R142 Register@R143 CASInteger@"32" -> 0b0_10001110 Register@R143 Register@R144 CASInteger@"32" -> 0b0_10001111 Register@R144 Register@R145 CASInteger@"32" -> 0b0_10010000 Register@R145 Register@R146 CASInteger@"32" -> 0b0_10010001 Register@R146 Register@R147 CASInteger@"32" -> 0b0_10010010 Register@R147 Register@R148 CASInteger@"32" -> 0b0_10010011 Register@R148 Register@R149 CASInteger@"32" -> 0b0_10010100 Register@R149 Register@R150 CASInteger@"32" -> 0b0_10010101 Register@R150 Register@R151 CASInteger@"32" -> 0b0_10010110 Register@R151 Register@R152 CASInteger@"32" -> 0b0_10010111 Register@R152 Register@R153 CASInteger@"32" -> 0b0_10011000 Register@R153 Register@R154 CASInteger@"32" -> 0b0_10011001 Register@R154 Register@R155 CASInteger@"32" -> 0b0_10011010 Register@R155 Register@R156 CASInteger@"32" -> 0b0_10011011 Register@R156 Register@R157 CASInteger@"32" -> 0b0_10011100 Register@R157 Register@R158 CASInteger@"32" -> 0b0_10011101 Register@R158 Register@R159 CASInteger@"32" -> 0b0_10011110 Register@R159 Register@R160 CASInteger@"32" -> 0b0_10011111 Register@R160 Register@R161 CASInteger@"32" -> 0b0_10100000 Register@R161 Register@R162 CASInteger@"32" -> 0b0_10100001 Register@R162 Register@R163 CASInteger@"32" -> 0b0_10100010 Register@R163 Register@R164 CASInteger@"32" -> 0b0_10100011 Register@R164 Register@R165 CASInteger@"32" -> 0b0_10100100 Register@R165 Register@R166 CASInteger@"32" -> 0b0_10100101 Register@R166 Register@R167 CASInteger@"32" -> 0b0_10100110 Register@R167 Register@R168 CASInteger@"32" -> 0b0_10100111 Register@R168 Register@R169 CASInteger@"32" -> 0b0_10101000 Register@R169 Register@R170 CASInteger@"32" -> 0b0_10101001 Register@R170 Register@R171 CASInteger@"32" -> 0b0_10101010 Register@R171 Register@R172 CASInteger@"32" -> 0b0_10101011 Register@R172 Register@R173 CASInteger@"32" -> 0b0_10101100 Register@R173 Register@R174 CASInteger@"32" -> 0b0_10101101 Register@R174 Register@R175 CASInteger@"32" -> 0b0_10101110 Register@R175 Register@R176 CASInteger@"32" -> 0b0_10101111 Register@R176 Register@R177 CASInteger@"32" -> 0b0_10110000 Register@R177 Register@R178 CASInteger@"32" -> 0b0_10110001 Register@R178 Register@R179 CASInteger@"32" -> 0b0_10110010 Register@R179 Register@R180 CASInteger@"32" -> 0b0_10110011 Register@R180 Register@R181 CASInteger@"32" -> 0b0_10110100 Register@R181 Register@R182 CASInteger@"32" -> 0b0_10110101 Register@R182 Register@R183 CASInteger@"32" -> 0b0_10110110 Register@R183 Register@R184 CASInteger@"32" -> 0b0_10110111 Register@R184 Register@R185 CASInteger@"32" -> 0b0_10111000 Register@R185 Register@R186 CASInteger@"32" -> 0b0_10111001 Register@R186 Register@R187 CASInteger@"32" -> 0b0_10111010 Register@R187 Register@R188 CASInteger@"32" -> 0b0_10111011 Register@R188 Register@R189 CASInteger@"32" -> 0b0_10111100 Register@R189 Register@R190 CASInteger@"32" -> 0b0_10111101 Register@R190 Register@R191 CASInteger@"32" -> 0b0_10111110 Register@R191 Register@R192 CASInteger@"32" -> 0b0_10111111 Register@R192 Register@R193 CASInteger@"32" -> 0b0_11000000 Register@R193 Register@R194 CASInteger@"32" -> 0b0_11000001 Register@R194 Register@R195 CASInteger@"32" -> 0b0_11000010 Register@R195 Register@R196 CASInteger@"32" -> 0b0_11000011 Register@R196 Register@R197 CASInteger@"32" -> 0b0_11000100 Register@R197 Register@R198 CASInteger@"32" -> 0b0_11000101 Register@R198 Register@R199 CASInteger@"32" -> 0b0_11000110 Register@R199 Register@R200 CASInteger@"32" -> 0b0_11000111 Register@R200 Register@R201 CASInteger@"32" -> 0b0_11001000 Register@R201 Register@R202 CASInteger@"32" -> 0b0_11001001 Register@R202 Register@R203 CASInteger@"32" -> 0b0_11001010 Register@R203 Register@R204 CASInteger@"32" -> 0b0_11001011 Register@R204 Register@R205 CASInteger@"32" -> 0b0_11001100 Register@R205 Register@R206 CASInteger@"32" -> 0b0_11001101 Register@R206 Register@R207 CASInteger@"32" -> 0b0_11001110 Register@R207 Register@R208 CASInteger@"32" -> 0b0_11001111 Register@R208 Register@R209 CASInteger@"32" -> 0b0_11010000 Register@R209 Register@R210 CASInteger@"32" -> 0b0_11010001 Register@R210 Register@R211 CASInteger@"32" -> 0b0_11010010 Register@R211 Register@R212 CASInteger@"32" -> 0b0_11010011 Register@R212 Register@R213 CASInteger@"32" -> 0b0_11010100 Register@R213 Register@R214 CASInteger@"32" -> 0b0_11010101 Register@R214 Register@R215 CASInteger@"32" -> 0b0_11010110 Register@R215 Register@R216 CASInteger@"32" -> 0b0_11010111 Register@R216 Register@R217 CASInteger@"32" -> 0b0_11011000 Register@R217 Register@R218 CASInteger@"32" -> 0b0_11011001 Register@R218 Register@R219 CASInteger@"32" -> 0b0_11011010 Register@R219 Register@R220 CASInteger@"32" -> 0b0_11011011 Register@R220 Register@R221 CASInteger@"32" -> 0b0_11011100 Register@R221 Register@R222 CASInteger@"32" -> 0b0_11011101 Register@R222 Register@R223 CASInteger@"32" -> 0b0_11011110 Register@R223 Register@R224 CASInteger@"32" -> 0b0_11011111 Register@R224 Register@R225 CASInteger@"32" -> 0b0_11100000 Register@R225 Register@R226 CASInteger@"32" -> 0b0_11100001 Register@R226 Register@R227 CASInteger@"32" -> 0b0_11100010 Register@R227 Register@R228 CASInteger@"32" -> 0b0_11100011 Register@R228 Register@R229 CASInteger@"32" -> 0b0_11100100 Register@R229 Register@R230 CASInteger@"32" -> 0b0_11100101 Register@R230 Register@R231 CASInteger@"32" -> 0b0_11100110 Register@R231 Register@R232 CASInteger@"32" -> 0b0_11100111 Register@R232 Register@R233 CASInteger@"32" -> 0b0_11101000 Register@R233 Register@R234 CASInteger@"32" -> 0b0_11101001 Register@R234 Register@R235 CASInteger@"32" -> 0b0_11101010 Register@R235 Register@R236 CASInteger@"32" -> 0b0_11101011 Register@R236 Register@R237 CASInteger@"32" -> 0b0_11101100 Register@R237 Register@R238 CASInteger@"32" -> 0b0_11101101 Register@R238 Register@R239 CASInteger@"32" -> 0b0_11101110 Register@R239 Register@R240 CASInteger@"32" -> 0b0_11101111 Register@R240 Register@R241 CASInteger@"32" -> 0b0_11110000 Register@R241 Register@R242 CASInteger@"32" -> 0b0_11110001 Register@R242 Register@R243 CASInteger@"32" -> 0b0_11110010 Register@R243 Register@R244 CASInteger@"32" -> 0b0_11110011 Register@R244 Register@R245 CASInteger@"32" -> 0b0_11110100 Register@R245 Register@R246 CASInteger@"32" -> 0b0_11110101 Register@R246 Register@R247 CASInteger@"32" -> 0b0_11110110 Register@R247 248 CASInteger@"32" -> 0b0_11110111 248 249 CASInteger@"32" -> 0b0_11111000 249 250 CASInteger@"32" -> 0b0_11111001 250 251 CASInteger@"32" -> 0b0_11111010 251 252 CASInteger@"32" -> 0b0_11111011 252 253 CASInteger@"32" -> 0b0_11111100 253 254 CASInteger@"32" -> 0b0_11111101 254 Register@RZ CASInteger@"32" -> 0b0_11111110 Register@RZ Register@RZ CASInteger@"32" -> 0b0_11111111 Register@R0 Register@R2 CASInteger@"64" -> 0b1_00000000 Register@R1 Register@R3 CASInteger@"64" -> 0b1_00000001 Register@R2 Register@R4 CASInteger@"64" -> 0b1_00000010 Register@R3 Register@R5 CASInteger@"64" -> 0b1_00000011 Register@R4 Register@R6 CASInteger@"64" -> 0b1_00000100 Register@R5 Register@R7 CASInteger@"64" -> 0b1_00000101 Register@R6 Register@R8 CASInteger@"64" -> 0b1_00000110 Register@R7 Register@R9 CASInteger@"64" -> 0b1_00000111 Register@R8 Register@R10 CASInteger@"64" -> 0b1_00001000 Register@R9 Register@R11 CASInteger@"64" -> 0b1_00001001 Register@R10 Register@R12 CASInteger@"64" -> 0b1_00001010 Register@R11 Register@R13 CASInteger@"64" -> 0b1_00001011 Register@R12 Register@R14 CASInteger@"64" -> 0b1_00001100 Register@R13 Register@R15 CASInteger@"64" -> 0b1_00001101 Register@R14 Register@R16 CASInteger@"64" -> 0b1_00001110 Register@R15 Register@R17 CASInteger@"64" -> 0b1_00001111 Register@R16 Register@R18 CASInteger@"64" -> 0b1_00010000 Register@R17 Register@R19 CASInteger@"64" -> 0b1_00010001 Register@R18 Register@R20 CASInteger@"64" -> 0b1_00010010 Register@R19 Register@R21 CASInteger@"64" -> 0b1_00010011 Register@R20 Register@R22 CASInteger@"64" -> 0b1_00010100 Register@R21 Register@R23 CASInteger@"64" -> 0b1_00010101 Register@R22 Register@R24 CASInteger@"64" -> 0b1_00010110 Register@R23 Register@R25 CASInteger@"64" -> 0b1_00010111 Register@R24 Register@R26 CASInteger@"64" -> 0b1_00011000 Register@R25 Register@R27 CASInteger@"64" -> 0b1_00011001 Register@R26 Register@R28 CASInteger@"64" -> 0b1_00011010 Register@R27 Register@R29 CASInteger@"64" -> 0b1_00011011 Register@R28 Register@R30 CASInteger@"64" -> 0b1_00011100 Register@R29 Register@R31 CASInteger@"64" -> 0b1_00011101 Register@R30 Register@R32 CASInteger@"64" -> 0b1_00011110 Register@R31 Register@R33 CASInteger@"64" -> 0b1_00011111 Register@R32 Register@R34 CASInteger@"64" -> 0b1_00100000 Register@R33 Register@R35 CASInteger@"64" -> 0b1_00100001 Register@R34 Register@R36 CASInteger@"64" -> 0b1_00100010 Register@R35 Register@R37 CASInteger@"64" -> 0b1_00100011 Register@R36 Register@R38 CASInteger@"64" -> 0b1_00100100 Register@R37 Register@R39 CASInteger@"64" -> 0b1_00100101 Register@R38 Register@R40 CASInteger@"64" -> 0b1_00100110 Register@R39 Register@R41 CASInteger@"64" -> 0b1_00100111 Register@R40 Register@R42 CASInteger@"64" -> 0b1_00101000 Register@R41 Register@R43 CASInteger@"64" -> 0b1_00101001 Register@R42 Register@R44 CASInteger@"64" -> 0b1_00101010 Register@R43 Register@R45 CASInteger@"64" -> 0b1_00101011 Register@R44 Register@R46 CASInteger@"64" -> 0b1_00101100 Register@R45 Register@R47 CASInteger@"64" -> 0b1_00101101 Register@R46 Register@R48 CASInteger@"64" -> 0b1_00101110 Register@R47 Register@R49 CASInteger@"64" -> 0b1_00101111 Register@R48 Register@R50 CASInteger@"64" -> 0b1_00110000 Register@R49 Register@R51 CASInteger@"64" -> 0b1_00110001 Register@R50 Register@R52 CASInteger@"64" -> 0b1_00110010 Register@R51 Register@R53 CASInteger@"64" -> 0b1_00110011 Register@R52 Register@R54 CASInteger@"64" -> 0b1_00110100 Register@R53 Register@R55 CASInteger@"64" -> 0b1_00110101 Register@R54 Register@R56 CASInteger@"64" -> 0b1_00110110 Register@R55 Register@R57 CASInteger@"64" -> 0b1_00110111 Register@R56 Register@R58 CASInteger@"64" -> 0b1_00111000 Register@R57 Register@R59 CASInteger@"64" -> 0b1_00111001 Register@R58 Register@R60 CASInteger@"64" -> 0b1_00111010 Register@R59 Register@R61 CASInteger@"64" -> 0b1_00111011 Register@R60 Register@R62 CASInteger@"64" -> 0b1_00111100 Register@R61 Register@R63 CASInteger@"64" -> 0b1_00111101 Register@R62 Register@R64 CASInteger@"64" -> 0b1_00111110 Register@R63 Register@R65 CASInteger@"64" -> 0b1_00111111 Register@R64 Register@R66 CASInteger@"64" -> 0b1_01000000 Register@R65 Register@R67 CASInteger@"64" -> 0b1_01000001 Register@R66 Register@R68 CASInteger@"64" -> 0b1_01000010 Register@R67 Register@R69 CASInteger@"64" -> 0b1_01000011 Register@R68 Register@R70 CASInteger@"64" -> 0b1_01000100 Register@R69 Register@R71 CASInteger@"64" -> 0b1_01000101 Register@R70 Register@R72 CASInteger@"64" -> 0b1_01000110 Register@R71 Register@R73 CASInteger@"64" -> 0b1_01000111 Register@R72 Register@R74 CASInteger@"64" -> 0b1_01001000 Register@R73 Register@R75 CASInteger@"64" -> 0b1_01001001 Register@R74 Register@R76 CASInteger@"64" -> 0b1_01001010 Register@R75 Register@R77 CASInteger@"64" -> 0b1_01001011 Register@R76 Register@R78 CASInteger@"64" -> 0b1_01001100 Register@R77 Register@R79 CASInteger@"64" -> 0b1_01001101 Register@R78 Register@R80 CASInteger@"64" -> 0b1_01001110 Register@R79 Register@R81 CASInteger@"64" -> 0b1_01001111 Register@R80 Register@R82 CASInteger@"64" -> 0b1_01010000 Register@R81 Register@R83 CASInteger@"64" -> 0b1_01010001 Register@R82 Register@R84 CASInteger@"64" -> 0b1_01010010 Register@R83 Register@R85 CASInteger@"64" -> 0b1_01010011 Register@R84 Register@R86 CASInteger@"64" -> 0b1_01010100 Register@R85 Register@R87 CASInteger@"64" -> 0b1_01010101 Register@R86 Register@R88 CASInteger@"64" -> 0b1_01010110 Register@R87 Register@R89 CASInteger@"64" -> 0b1_01010111 Register@R88 Register@R90 CASInteger@"64" -> 0b1_01011000 Register@R89 Register@R91 CASInteger@"64" -> 0b1_01011001 Register@R90 Register@R92 CASInteger@"64" -> 0b1_01011010 Register@R91 Register@R93 CASInteger@"64" -> 0b1_01011011 Register@R92 Register@R94 CASInteger@"64" -> 0b1_01011100 Register@R93 Register@R95 CASInteger@"64" -> 0b1_01011101 Register@R94 Register@R96 CASInteger@"64" -> 0b1_01011110 Register@R95 Register@R97 CASInteger@"64" -> 0b1_01011111 Register@R96 Register@R98 CASInteger@"64" -> 0b1_01100000 Register@R97 Register@R99 CASInteger@"64" -> 0b1_01100001 Register@R98 Register@R100 CASInteger@"64" -> 0b1_01100010 Register@R99 Register@R101 CASInteger@"64" -> 0b1_01100011 Register@R100 Register@R102 CASInteger@"64" -> 0b1_01100100 Register@R101 Register@R103 CASInteger@"64" -> 0b1_01100101 Register@R102 Register@R104 CASInteger@"64" -> 0b1_01100110 Register@R103 Register@R105 CASInteger@"64" -> 0b1_01100111 Register@R104 Register@R106 CASInteger@"64" -> 0b1_01101000 Register@R105 Register@R107 CASInteger@"64" -> 0b1_01101001 Register@R106 Register@R108 CASInteger@"64" -> 0b1_01101010 Register@R107 Register@R109 CASInteger@"64" -> 0b1_01101011 Register@R108 Register@R110 CASInteger@"64" -> 0b1_01101100 Register@R109 Register@R111 CASInteger@"64" -> 0b1_01101101 Register@R110 Register@R112 CASInteger@"64" -> 0b1_01101110 Register@R111 Register@R113 CASInteger@"64" -> 0b1_01101111 Register@R112 Register@R114 CASInteger@"64" -> 0b1_01110000 Register@R113 Register@R115 CASInteger@"64" -> 0b1_01110001 Register@R114 Register@R116 CASInteger@"64" -> 0b1_01110010 Register@R115 Register@R117 CASInteger@"64" -> 0b1_01110011 Register@R116 Register@R118 CASInteger@"64" -> 0b1_01110100 Register@R117 Register@R119 CASInteger@"64" -> 0b1_01110101 Register@R118 Register@R120 CASInteger@"64" -> 0b1_01110110 Register@R119 Register@R121 CASInteger@"64" -> 0b1_01110111 Register@R120 Register@R122 CASInteger@"64" -> 0b1_01111000 Register@R121 Register@R123 CASInteger@"64" -> 0b1_01111001 Register@R122 Register@R124 CASInteger@"64" -> 0b1_01111010 Register@R123 Register@R125 CASInteger@"64" -> 0b1_01111011 Register@R124 Register@R126 CASInteger@"64" -> 0b1_01111100 Register@R125 Register@R127 CASInteger@"64" -> 0b1_01111101 Register@R126 Register@R128 CASInteger@"64" -> 0b1_01111110 Register@R127 Register@R129 CASInteger@"64" -> 0b1_01111111 Register@R128 Register@R130 CASInteger@"64" -> 0b1_10000000 Register@R129 Register@R131 CASInteger@"64" -> 0b1_10000001 Register@R130 Register@R132 CASInteger@"64" -> 0b1_10000010 Register@R131 Register@R133 CASInteger@"64" -> 0b1_10000011 Register@R132 Register@R134 CASInteger@"64" -> 0b1_10000100 Register@R133 Register@R135 CASInteger@"64" -> 0b1_10000101 Register@R134 Register@R136 CASInteger@"64" -> 0b1_10000110 Register@R135 Register@R137 CASInteger@"64" -> 0b1_10000111 Register@R136 Register@R138 CASInteger@"64" -> 0b1_10001000 Register@R137 Register@R139 CASInteger@"64" -> 0b1_10001001 Register@R138 Register@R140 CASInteger@"64" -> 0b1_10001010 Register@R139 Register@R141 CASInteger@"64" -> 0b1_10001011 Register@R140 Register@R142 CASInteger@"64" -> 0b1_10001100 Register@R141 Register@R143 CASInteger@"64" -> 0b1_10001101 Register@R142 Register@R144 CASInteger@"64" -> 0b1_10001110 Register@R143 Register@R145 CASInteger@"64" -> 0b1_10001111 Register@R144 Register@R146 CASInteger@"64" -> 0b1_10010000 Register@R145 Register@R147 CASInteger@"64" -> 0b1_10010001 Register@R146 Register@R148 CASInteger@"64" -> 0b1_10010010 Register@R147 Register@R149 CASInteger@"64" -> 0b1_10010011 Register@R148 Register@R150 CASInteger@"64" -> 0b1_10010100 Register@R149 Register@R151 CASInteger@"64" -> 0b1_10010101 Register@R150 Register@R152 CASInteger@"64" -> 0b1_10010110 Register@R151 Register@R153 CASInteger@"64" -> 0b1_10010111 Register@R152 Register@R154 CASInteger@"64" -> 0b1_10011000 Register@R153 Register@R155 CASInteger@"64" -> 0b1_10011001 Register@R154 Register@R156 CASInteger@"64" -> 0b1_10011010 Register@R155 Register@R157 CASInteger@"64" -> 0b1_10011011 Register@R156 Register@R158 CASInteger@"64" -> 0b1_10011100 Register@R157 Register@R159 CASInteger@"64" -> 0b1_10011101 Register@R158 Register@R160 CASInteger@"64" -> 0b1_10011110 Register@R159 Register@R161 CASInteger@"64" -> 0b1_10011111 Register@R160 Register@R162 CASInteger@"64" -> 0b1_10100000 Register@R161 Register@R163 CASInteger@"64" -> 0b1_10100001 Register@R162 Register@R164 CASInteger@"64" -> 0b1_10100010 Register@R163 Register@R165 CASInteger@"64" -> 0b1_10100011 Register@R164 Register@R166 CASInteger@"64" -> 0b1_10100100 Register@R165 Register@R167 CASInteger@"64" -> 0b1_10100101 Register@R166 Register@R168 CASInteger@"64" -> 0b1_10100110 Register@R167 Register@R169 CASInteger@"64" -> 0b1_10100111 Register@R168 Register@R170 CASInteger@"64" -> 0b1_10101000 Register@R169 Register@R171 CASInteger@"64" -> 0b1_10101001 Register@R170 Register@R172 CASInteger@"64" -> 0b1_10101010 Register@R171 Register@R173 CASInteger@"64" -> 0b1_10101011 Register@R172 Register@R174 CASInteger@"64" -> 0b1_10101100 Register@R173 Register@R175 CASInteger@"64" -> 0b1_10101101 Register@R174 Register@R176 CASInteger@"64" -> 0b1_10101110 Register@R175 Register@R177 CASInteger@"64" -> 0b1_10101111 Register@R176 Register@R178 CASInteger@"64" -> 0b1_10110000 Register@R177 Register@R179 CASInteger@"64" -> 0b1_10110001 Register@R178 Register@R180 CASInteger@"64" -> 0b1_10110010 Register@R179 Register@R181 CASInteger@"64" -> 0b1_10110011 Register@R180 Register@R182 CASInteger@"64" -> 0b1_10110100 Register@R181 Register@R183 CASInteger@"64" -> 0b1_10110101 Register@R182 Register@R184 CASInteger@"64" -> 0b1_10110110 Register@R183 Register@R185 CASInteger@"64" -> 0b1_10110111 Register@R184 Register@R186 CASInteger@"64" -> 0b1_10111000 Register@R185 Register@R187 CASInteger@"64" -> 0b1_10111001 Register@R186 Register@R188 CASInteger@"64" -> 0b1_10111010 Register@R187 Register@R189 CASInteger@"64" -> 0b1_10111011 Register@R188 Register@R190 CASInteger@"64" -> 0b1_10111100 Register@R189 Register@R191 CASInteger@"64" -> 0b1_10111101 Register@R190 Register@R192 CASInteger@"64" -> 0b1_10111110 Register@R191 Register@R193 CASInteger@"64" -> 0b1_10111111 Register@R192 Register@R194 CASInteger@"64" -> 0b1_11000000 Register@R193 Register@R195 CASInteger@"64" -> 0b1_11000001 Register@R194 Register@R196 CASInteger@"64" -> 0b1_11000010 Register@R195 Register@R197 CASInteger@"64" -> 0b1_11000011 Register@R196 Register@R198 CASInteger@"64" -> 0b1_11000100 Register@R197 Register@R199 CASInteger@"64" -> 0b1_11000101 Register@R198 Register@R200 CASInteger@"64" -> 0b1_11000110 Register@R199 Register@R201 CASInteger@"64" -> 0b1_11000111 Register@R200 Register@R202 CASInteger@"64" -> 0b1_11001000 Register@R201 Register@R203 CASInteger@"64" -> 0b1_11001001 Register@R202 Register@R204 CASInteger@"64" -> 0b1_11001010 Register@R203 Register@R205 CASInteger@"64" -> 0b1_11001011 Register@R204 Register@R206 CASInteger@"64" -> 0b1_11001100 Register@R205 Register@R207 CASInteger@"64" -> 0b1_11001101 Register@R206 Register@R208 CASInteger@"64" -> 0b1_11001110 Register@R207 Register@R209 CASInteger@"64" -> 0b1_11001111 Register@R208 Register@R210 CASInteger@"64" -> 0b1_11010000 Register@R209 Register@R211 CASInteger@"64" -> 0b1_11010001 Register@R210 Register@R212 CASInteger@"64" -> 0b1_11010010 Register@R211 Register@R213 CASInteger@"64" -> 0b1_11010011 Register@R212 Register@R214 CASInteger@"64" -> 0b1_11010100 Register@R213 Register@R215 CASInteger@"64" -> 0b1_11010101 Register@R214 Register@R216 CASInteger@"64" -> 0b1_11010110 Register@R215 Register@R217 CASInteger@"64" -> 0b1_11010111 Register@R216 Register@R218 CASInteger@"64" -> 0b1_11011000 Register@R217 Register@R219 CASInteger@"64" -> 0b1_11011001 Register@R218 Register@R220 CASInteger@"64" -> 0b1_11011010 Register@R219 Register@R221 CASInteger@"64" -> 0b1_11011011 Register@R220 Register@R222 CASInteger@"64" -> 0b1_11011100 Register@R221 Register@R223 CASInteger@"64" -> 0b1_11011101 Register@R222 Register@R224 CASInteger@"64" -> 0b1_11011110 Register@R223 Register@R225 CASInteger@"64" -> 0b1_11011111 Register@R224 Register@R226 CASInteger@"64" -> 0b1_11100000 Register@R225 Register@R227 CASInteger@"64" -> 0b1_11100001 Register@R226 Register@R228 CASInteger@"64" -> 0b1_11100010 Register@R227 Register@R229 CASInteger@"64" -> 0b1_11100011 Register@R228 Register@R230 CASInteger@"64" -> 0b1_11100100 Register@R229 Register@R231 CASInteger@"64" -> 0b1_11100101 Register@R230 Register@R232 CASInteger@"64" -> 0b1_11100110 Register@R231 Register@R233 CASInteger@"64" -> 0b1_11100111 Register@R232 Register@R234 CASInteger@"64" -> 0b1_11101000 Register@R233 Register@R235 CASInteger@"64" -> 0b1_11101001 Register@R234 Register@R236 CASInteger@"64" -> 0b1_11101010 Register@R235 Register@R237 CASInteger@"64" -> 0b1_11101011 Register@R236 Register@R238 CASInteger@"64" -> 0b1_11101100 Register@R237 Register@R239 CASInteger@"64" -> 0b1_11101101 Register@R238 Register@R240 CASInteger@"64" -> 0b1_11101110 Register@R239 Register@R241 CASInteger@"64" -> 0b1_11101111 Register@R240 Register@R242 CASInteger@"64" -> 0b1_11110000 Register@R241 Register@R243 CASInteger@"64" -> 0b1_11110001 Register@R242 Register@R244 CASInteger@"64" -> 0b1_11110010 Register@R243 Register@R245 CASInteger@"64" -> 0b1_11110011 Register@R244 Register@R246 CASInteger@"64" -> 0b1_11110100 Register@R245 Register@R247 CASInteger@"64" -> 0b1_11110101 Register@R246 248 CASInteger@"64" -> 0b1_11110110 Register@R247 249 CASInteger@"64" -> 0b1_11110111 248 250 CASInteger@"64" -> 0b1_11111000 249 251 CASInteger@"64" -> 0b1_11111001 250 252 CASInteger@"64" -> 0b1_11111010 251 253 CASInteger@"64" -> 0b1_11111011 252 254 CASInteger@"64" -> 0b1_11111100 253 Register@RZ CASInteger@"64" -> 0b1_11111101 254 Register@RZ CASInteger@"64" -> 0b1_11111110 Register@RZ Register@RZ CASInteger@"64" -> 0b1_11111111 ; SM5vshlCW CWMode@C UInteger_old@U16 -> 0b0 CWMode@C UInteger_old@U8 -> 0b0 CWMode@C UInteger_old@U32 -> 0b0 CWMode@W UInteger_old@U16 -> 0b1 CWMode@W UInteger_old@U8 -> 0b1 CWMode@W UInteger_old@U32 -> 0b1 ; Tex2D4 ParamA@"1D" DC@noDC LOD2@LZ -> 0 ParamA@"1D" DC@noDC LOD2@noLOD -> 0 ParamA@"1D" DC@noDC LOD2@LL -> 0 ParamA@"1D" DC@DC LOD2@noLOD -> 0 ParamA@"1D" DC@DC LOD2@LZ -> 0 ParamA@"1D" DC@DC LOD2@LL -> 0 ParamA@"2D" DC@noDC LOD2@noLOD -> 1 ParamA@"2D" DC@noDC LOD2@LZ -> 2 ParamA@"2D" DC@noDC LOD2@LL -> 3 ParamA@"2D" DC@DC LOD2@noLOD -> 4 ParamA@"2D" DC@DC LOD2@LZ -> 6 ParamA@"2D" DC@DC LOD2@LL -> 5 ParamA@"3D" DC@noDC LOD2@noLOD -> 10 ParamA@"3D" DC@noDC LOD2@LZ -> 11 ParamA@"3D" DC@noDC LOD2@LL -> 0 ParamA@"3D" DC@DC LOD2@noLOD -> 0 ParamA@"3D" DC@DC LOD2@LZ -> 0 ParamA@"3D" DC@DC LOD2@LL -> 0 ParamA@CUBE DC@noDC LOD2@noLOD -> 12 ParamA@CUBE DC@noDC LOD2@LZ -> 0 ParamA@CUBE DC@noDC LOD2@LL -> 13 ParamA@CUBE DC@DC LOD2@noLOD -> 0 ParamA@CUBE DC@DC LOD2@LZ -> 0 ParamA@CUBE DC@DC LOD2@LL -> 0 ParamA@ARRAY_1D DC@noDC LOD2@noLOD -> 0 ParamA@ARRAY_1D DC@noDC LOD2@LZ -> 0 ParamA@ARRAY_1D DC@noDC LOD2@LL -> 0 ParamA@ARRAY_1D DC@DC LOD2@noLOD -> 0 ParamA@ARRAY_1D DC@DC LOD2@LZ -> 0 ParamA@ARRAY_1D DC@DC LOD2@LL -> 0 ParamA@ARRAY_2D DC@noDC LOD2@noLOD -> 7 ParamA@ARRAY_2D DC@noDC LOD2@LZ -> 8 ParamA@ARRAY_2D DC@noDC LOD2@LL -> 0 ParamA@ARRAY_2D DC@DC LOD2@noLOD -> 0 ParamA@ARRAY_2D DC@DC LOD2@LZ -> 9 ParamA@ARRAY_2D DC@DC LOD2@LL -> 0 ParamA@ARRAY_3D DC@noDC LOD2@noLOD -> 0 ParamA@ARRAY_3D DC@noDC LOD2@LZ -> 0 ParamA@ARRAY_3D DC@noDC LOD2@LL -> 0 ParamA@ARRAY_3D DC@DC LOD2@noLOD -> 0 ParamA@ARRAY_3D DC@DC LOD2@LZ -> 0 ParamA@ARRAY_3D DC@DC LOD2@LL -> 0 ParamA@CUBEARRAY DC@noDC LOD2@noLOD -> 0 ParamA@CUBEARRAY DC@noDC LOD2@LZ -> 0 ParamA@CUBEARRAY DC@noDC LOD2@LL -> 0 ParamA@CUBEARRAY DC@DC LOD2@noLOD -> 0 ParamA@CUBEARRAY DC@DC LOD2@LZ -> 0 ParamA@CUBEARRAY DC@DC LOD2@LL -> 0 ; Tld2D4 ParamA@"1D" MS@noMS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@"1D" MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@"1D" MS@noMS LOD1@LL TOFF1@noTOFF -> 1 ParamA@"1D" MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@"1D" MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@"1D" MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@"1D" MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@"1D" MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@"2D" MS@noMS LOD1@LZ TOFF1@noTOFF -> 2 ParamA@"2D" MS@noMS LOD1@LZ TOFF1@AOFFI -> 4 ParamA@"2D" MS@noMS LOD1@LL TOFF1@noTOFF -> 5 ParamA@"2D" MS@noMS LOD1@LL TOFF1@AOFFI -> 12 ParamA@"2D" MS@MS LOD1@LZ TOFF1@noTOFF -> 6 ParamA@"2D" MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@"2D" MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@"2D" MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@"3D" MS@noMS LOD1@LZ TOFF1@noTOFF -> 7 ParamA@"3D" MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@"3D" MS@noMS LOD1@LL TOFF1@noTOFF -> 0 ParamA@"3D" MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@"3D" MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@"3D" MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@"3D" MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@"3D" MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@CUBE MS@noMS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@CUBE MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@CUBE MS@noMS LOD1@LL TOFF1@noTOFF -> 0 ParamA@CUBE MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@CUBE MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@CUBE MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@CUBE MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@CUBE MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@ARRAY_1D MS@noMS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@ARRAY_1D MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@ARRAY_1D MS@noMS LOD1@LL TOFF1@noTOFF -> 0 ParamA@ARRAY_1D MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@ARRAY_1D MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@ARRAY_1D MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@ARRAY_1D MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@ARRAY_1D MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@ARRAY_2D MS@noMS LOD1@LZ TOFF1@noTOFF -> 8 ParamA@ARRAY_2D MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@ARRAY_2D MS@noMS LOD1@LL TOFF1@noTOFF -> 0 ParamA@ARRAY_2D MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@ARRAY_2D MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@ARRAY_2D MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@ARRAY_2D MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@ARRAY_2D MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@ARRAY_3D MS@noMS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@ARRAY_3D MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@ARRAY_3D MS@noMS LOD1@LL TOFF1@noTOFF -> 0 ParamA@ARRAY_3D MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@ARRAY_3D MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@ARRAY_3D MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@ARRAY_3D MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@ARRAY_3D MS@MS LOD1@LL TOFF1@AOFFI -> 0 ParamA@CUBEARRAY MS@noMS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@CUBEARRAY MS@noMS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@CUBEARRAY MS@noMS LOD1@LL TOFF1@noTOFF -> 0 ParamA@CUBEARRAY MS@noMS LOD1@LL TOFF1@AOFFI -> 0 ParamA@CUBEARRAY MS@MS LOD1@LZ TOFF1@noTOFF -> 0 ParamA@CUBEARRAY MS@MS LOD1@LZ TOFF1@AOFFI -> 0 ParamA@CUBEARRAY MS@MS LOD1@LL TOFF1@noTOFF -> 0 ParamA@CUBEARRAY MS@MS LOD1@LL TOFF1@AOFFI -> 0 ; LutImm8 LOP@AND 0 0 0 -> 0b10000000 LOP@AND 0 0 1 -> 0b01000000 LOP@AND 0 1 0 -> 0b00100000 LOP@AND 0 1 1 -> 0b00010000 LOP@AND 1 0 0 -> 0b00001000 LOP@AND 1 0 1 -> 0b00000100 LOP@AND 1 1 0 -> 0b00000010 LOP@AND 1 1 1 -> 0b00000001 LOP@OR 0 0 0 -> 0b11111110 LOP@OR 0 0 1 -> 0b11111101 LOP@OR 0 1 0 -> 0b11111011 LOP@OR 0 1 1 -> 0b11110111 LOP@OR 1 0 0 -> 0b11101111 LOP@OR 1 0 1 -> 0b11011111 LOP@OR 1 1 0 -> 0b10111111 LOP@OR 1 1 1 -> 0b01111111 LOP@XOR 0 0 0 -> 0b10010110 LOP@XOR 0 0 1 -> 0b01101001 LOP@XOR 0 1 0 -> 0b01101001 LOP@XOR 0 1 1 -> 0b10010110 LOP@XOR 1 0 0 -> 0b01101001 LOP@XOR 1 0 1 -> 0b10010110 LOP@XOR 1 1 0 -> 0b10010110 LOP@XOR 1 1 1 -> 0b01101001 LOP@PASS_B 0 0 0 -> 0b11001100 LOP@PASS_B 0 0 1 -> 0b11001100 LOP@PASS_B 0 1 0 -> 0b00110011 LOP@PASS_B 0 1 1 -> 0b00110011 LOP@PASS_B 1 0 0 -> 0b11001100 LOP@PASS_B 1 0 1 -> 0b11001100 LOP@PASS_B 1 1 0 -> 0b00110011 LOP@PASS_B 1 1 1 -> 0b00110011 ; hfma2__v2_nAB 0 1 -> 1 1 0 -> 1 0 0 -> 0 1 1 -> 0 ; hfma2__v0_nAB 0 1 -> 1 1 0 -> 1 0 0 -> 0 1 1 -> 0 ; hmul2__v2_nAB 0 1 -> 1 1 0 -> 1 0 0 -> 0 1 1 -> 0 ; hmul2__v0_nAB 0 1 -> 1 1 0 -> 1 0 0 -> 0 1 1 -> 0 ; OPERATION PROPERTIES IWIDTH ITYPE SPA SECONDARY TERTIARY BRANCH_TARGET_INDEX CC_BYPASS_ALLOWED MIN_WAIT_NEEDED OPERATION_TYPE IMM_INDEX VALID_IN_SHADERS IERRORS IDEST_OPERAND_MAP IDEST2_OPERAND_MAP ISRC_A_OPERAND_MAP ISRC_B_OPERAND_MAP ISRC_C_OPERAND_MAP IDEST_OPERAND_TYPE IDEST2_OPERAND_TYPE ISRC_A_OPERAND_TYPE ISRC_B_OPERAND_TYPE ISRC_C_OPERAND_TYPE INSTRUCTION_TYPE BRANCH_TYPE CC_INDEX SINGLETON SIDL_NAME ; OPERATION PREDICATES ISRC_A_SIZE ISRC_B_SIZE ISRC_C_SIZE IDEST_SIZE IDEST2_SIZE DOES_READ_CC VIRTUAL_QUEUE ; FUNIT uC ISSUE_SLOTS 0 1; ENCODING WIDTH 88; KeepRefCnt '..................................................................................X.....' CCC_1 '...................................................................................XXXXX' Imm32 '....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................' Sync '........................X...............................................................' PredNot '....................................................................X...................' Pred '.....................................................................XXX................' QuadMask '.............................................XXXX.......................................' QuadMask2 '........................................................................XXXX............' Dest '................................................................................XXXXXXXX' Dest2 '....................................................XXXXXXXX............................' Dest2_2 '............................................XXXXXXXX....................................' RegA '........................................................................XXXXXXXX........' RegB '............................................................XXXXXXXX....................' RegC '.........................................XXXXXXXX.......................................' RegBALD '.........................................XXXXXXXX.......................................' RegBAST '................................................................................XXXXXXXX' NODEP '......................................X.................................................' Phase '.........................................................XX.............................' Wmsk '.....................................................XXXX...............................' Wmsk3 '...................................XXX..................................................' tex2d_4 '...............................XXXX.....................................................' ParamA '.........................................................XXX............................' FP16RM '.................................X......................................................' FP16RM1 '.............................X..........................................................' TOFF1 '....................................................X...................................' CL '.................................X......................................................' CLB '...................................................X....................................' MS '.....................................X..................................................' MS1 '..........................................................X.............................' MS2 '........................................X...............................................' LOD1 '................................X.......................................................' LOD1B '..................................................X.....................................' TidB '.......................................XXXXXXXXXXXXX....................................' TidBTEX '............................................XXXXXXXX....................................' TidBSAMP '.......................................XXXXX............................................' TidBWmsk '...............................XXXXXXXXXXXXX.........XXXX...............................' TidBWmsk2 '.................................XXXXXXXXXXXXX.......XXXX...............................' TidBTEX3 '..........................................XXXXXXXX......................................' TidBSAMP3 '.....................................XXXXX..............................................' LOD '..............................XXX.......................................................' LODB '................................................XXX.....................................' AOFFI '.................................X......................................................' AOFFI2 '....................................X...................................................' AOFFIB '...................................................X....................................' DC '.....................................X..................................................' NDV '....................................................X...................................' NDV2 '.................................................X......................................' TexQuery '............................................................XXXXXX......................' STPMode '........................................................X...............................' LC '.............................X..........................................................' LCB '...............................................X........................................' LCD '.....................................X..................................................' PredDst '..................................XXX...................................................' PredDstLop '.....................................XXX................................................' TexComp '..............................XX........................................................' TexComp2 '..................................XX....................................................' TOFF2 '................................XX......................................................' TexCompB '................................................XX......................................' TOFF2B '..................................................XX....................................' Sat '.....................................X..................................................' PSign '......................................XX................................................' WriteCC '........................................X...............................................' Xm '............................................X...........................................' ALSize '.......................................XX...............................................' AIO '.......................................................X................................' P '........................................................X...............................' Imm10 '..........................................................XXXXXXXXXX....................' Imm11 '.........................................................XXXXXXXXXXX....................' msbImm11 '.........................................................X..............................' FMZ '.................................XX.....................................................' Rnd '...................................XX...................................................' nC '......................................X.................................................' nAB '.......................................X................................................' FMZ_H '...............................XX.......................................................' FMZ_H2 '.............................XX.........................................................' nAB_H '...............................X........................................................' vBmux_H '.................................XX.....................................................' vAmux_H '.................................XX.....................................................' vAmux_H2 '.......................................XX...............................................' nC_H '...................................X....................................................' nC_H2 '....................................X...................................................' FimmH0 '....................................................XXXXXXXXXXXXXXXX....................' FimmH1 '....................................XXXXXXXXXXXXXXXX....................................' sat_H '...................................X....................................................' FMZLow '..........................................XX............................................' ScaleLow '............................................XXX.........................................' RndLow '...............................................XX.......................................' SatLow '....................................X...................................................' IPAOp '................................XX......................................................' MSI '..................................XX....................................................' IPAIDX '.................................................X......................................' IPAImm10 '..................................................XXXXXXXXXX............................' IPAImm11 '.................................................XXXXXXXXXXX............................' PredSrc '......................................XXX...............................................' PredSrcldst '...........................XXX..........................................................' IdxrfImm '.........................................................XXXXXXXXXXX....................' PredSrcNot '.....................................X..................................................' nC2 '..............................X.........................................................' nAB2 '...............................X........................................................' SatHigh '................................X.......................................................' FMZHigh '.................................XX.....................................................' WriteCCI '...................................X....................................................' PSign2 '...............................XX.......................................................' Sat2 '.................................X......................................................' Xm2 '..................................X.....................................................' MufuOp '................................................................XXXX....................' BSigned '..............................................X.........................................' ASigned '...............................................X........................................' HILO '................................................X.......................................' BSigned2 '................................X.......................................................' ASigned2 '.................................X......................................................' HILO2 '..................................X.....................................................' XMADCop '...................................XXX..................................................' XMADCop2 '....................................XX..................................................' BSigned4 '..............................X.........................................................' BSigned5 '......................................X.................................................' ASigned5 '.......................................X................................................' Xm7 '.................................................X......................................' Xm8 '.................................X......................................................' MRG '..................................................X.....................................' MRG2 '...............................X........................................................' PSL '...................................................X....................................' PSL2 '................................X.......................................................' HILO4 '....................................................X...................................' HILO5 '...................................X....................................................' XMADFiller '.....................................................XXXXXXX............................' XMADImmFiller '...............................X........................................................' Imm24sh '.................................XXXXXXXXXXXXXXXXXXXXXXXX...............................' Imm32sh '........................X................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' Imm4n '.................................XXXX...................................................' Imm4m '.....................................XXXX...............................................' Imm4l '.........................................XXXX...........................................' Imm4k '.............................................XXXX.......................................' Imm4j '.................................................XXXX...................................' Imm4i '.....................................................XXXX...............................' Imm4h '.........................................................XXXX...........................' Imm4g '.............................................................XXXX.......................' Imm4f '........................X........................................XXX....................' Imm4e '....................................................................XXXX................' Imm4d '........................................................................XXXX............' Imm4c '............................................................................XXXX........' Imm4b '................................................................................XXXX....' Imm4a '....................................................................................XXXX' nA1 '.......................................X................................................' aA2 '.........................................X..............................................' nB2 '..........................................X.............................................' FComp '....................................XXXX................................................' FComp2 '.................................................XXXX...................................' FComp3 '...................................XXXX.................................................' H_and '......................................X.................................................' H_and2 '..................................X.....................................................' vAmux '.......................................XX...............................................' vBmux '..........................................................XX............................' nA2 '............................................X...........................................' aB2 '...........................................X............................................' aAH '...........................................X............................................' aA3 '.................................X......................................................' nB3 '..................................X.....................................................' aA4 '................................................................................X.......' nB4 '.................................................................................X......' nBH '........................................................X...............................' aBH '.........................................................X..............................' nBH2 '...............................X........................................................' aBH2 '.................................X......................................................' FTZ '...........................................X............................................' FTZ2 '........................................X...............................................' FTZ3 '................................X.......................................................' FTZH '.................................................................................X......' SrcNot '.............................................X..........................................' SrcPred '..............................................XXX.......................................' Src1Not '.......................................................X................................' Src1Pred '........................................................XXX.............................' Src2Not '........................................................................X...............' Src2Pred '.........................................................................XXX............' PDest '..................................................................................XXX...' PNDest '.....................................................................................XXX' nA3 '............................................X...........................................' nA4 '..........................................X.............................................' nA5 '..................................................X.....................................' nA6 '...............................X........................................................' BVal '...........................................X............................................' BVal1 '...................................X....................................................' SReg '............................................................XXXXXXXX....................' nA7 '....................................X...................................................' nB7 '.....................................X..................................................' nC7 '......................................X.................................................' Xm9 '.......................................X................................................' LRS '.................................................XX.....................................' Apart '...................................................XX...................................' Bpart '.....................................................XX.................................' Cpart '.......................................................XX...............................' LE '..........................................................X.............................' SBID '...........................................................XXX..........................' PendCnt '..............................................................XXXXXX....................' Imm6 '..................................................................................XXXXXX' ImmU5 '............................................XXXXX.......................................' ImmU5_2 '.......................................................XXXXX............................' ImmU5_3 '................................XXXXX...................................................' COP '..............................XX........................................................' COP1 '...................................XX...................................................' LSSize '................................XXX.....................................................' Rf '.................................XX.....................................................' E '...................................X....................................................' AdMode '..........................................XX............................................' LSSize2 '.....................................XXX................................................' COP2 '..........................................XX............................................' SABCExt '.................................XXXXXXX................................................' SBExt '.................................X......................................................' SCExt '...................................XX...................................................' SAExt '.....................................XX.................................................' AtomOp '................................XXXX....................................................' AtomOp2 '........................................XXXX............................................' satmOp '.......................................................XXXX.............................' satmBA '...........................................................X............................' idxrfBA '........................................................X...............................' satmSize1 '..................................XXX...................................................' satmSize2 '.................................................XXX....................................' AtomSize '....................................XXX.................................................' bcRZ '....................................XX..................................................' atomsbcRZ '..........................................................XX............................' AtomSize1 '......................................X.................................................' Size1RegBC '......................................X.....................XXXXXXXX....................' asSize1RegBC '...................................X........................XXXXXXXX....................' AtomE '.......................................X................................................' Imm20a '........................................XXXXXXXXXXXXXXXXXXXX............................' Imm22atoms '....................................XXXXXXXXXXXXXXXXXXXXXX..............................' AtomsSize '..........................................................XX............................' RedOp '..............................................................XXX.......................' SURedOp '.............................................................XXX........................' PopcSz '......................................XX................................................' AtomsSize1 '...................................X....................................................' atomscSPIN '..................................X.....................................................' RedSize '.................................................................XXX....................' Imm20 '................................................XXXXXXXXXXXXXXXXXXXX....................' Bpt '...............................................................................XXX......' Imm5I '............................................XXXXX.......................................' Imm5Ib '..............................XXXXX.....................................................' CA '..................................................................................X.....' LMT '.................................................................................X......' INC '.................................................................................X......' U '................................................................................X.......' LDSU '...........................................X............................................' LDSSize '.....................................XXX...X............................................' Imm24 '............................................XXXXXXXXXXXXXXXXXXXXXXXX....................' CBank '...............................................XXXXX....................................' Imm16 '....................................................XXXXXXXXXXXXXXXX....................' Imm16b '........................................................................XXXXXXXXXXXXXXXX' IComp '....................................XXX.................................................' Signed '.......................................X................................................' Bop '.........................................XX.............................................' Bop0 '..............................................................XX........................' PixMode '......................................................XXX...............................' Imm8 '............................................................XXXXXXXX....................' LOP '.............................................XX.........................................' POP '..........................................XX............................................' nB_L '...............................................X........................................' nA_L '................................................X.......................................' POP2 '..................................................XX....................................' LOPImm '....................................................XXXXXXXX............................' LOPImm2 '................................XXXXXXXX................................................' Xm10 '...............................X........................................................' M_H '.....................................X..................................................' XmdSHF '......................................XX................................................' MaxShift '.................................................XX.....................................' Imm06_shf '..............................................................XXXXXX....................' M '................................................X.......................................' XMode '...........................................XX...........................................' Brev '...............................................X........................................' Xm_I '..............................X.........................................................' nB_L2 '...............................X........................................................' nA_L2 '................................X.......................................................' LOP_I '.................................XX.....................................................' Imm06Tex '..............................................................XXXXXX....................' HILO3 '.................................X......................................................' BSigned3 '..................................X.....................................................' PSign3 '...................................XX...................................................' Xm3 '......................................X.................................................' ASigned3 '.......................................X................................................' Xm4 '.........................................X..............................................' Xm5 '.................................................X......................................' Xm6 '..............................X.........................................................' aB '......................................X.................................................' nB '..........................................X.............................................' By '.............................................XX.........................................' ISrcFmt '..........................................................................X.XX..........' DstFmt '..............................................................................XX........' Byte '.............................................XX.........................................' CCPR '...............................................X........................................' OutType '...............................................XX.......................................' VMode '......................................XX................................................' Imm28 '........................................XXXXXXXXXXXXXXXXXXXXXXXXXXXX....................' VPDest '........................................XXX.............................................' MembarL '..............................................................................XX........' Ivall '......................................................................................XX' AFix_BAR '...........................................X............................................' BFix_BAR '............................................X...........................................' BarRedOp '...................................................XX...................................' BarOp '.....................................................XXX................................' BarFiller '........................................................XXXX............................' Imm12 '........................................................XXXXXXXXXXXX....................' Trig '..........................................................................X.............' Trig2 '...................................................................X....................' CCC_2 '...........................................................................XXXXX........' SrcDstFmt '............................................................................XXXX........' IR '.............................................X..........................................' IRRnd '.............................................X.XX.......................................' Rnd_1 '...............................................XX.......................................' SH '..............................................X.........................................' IDstFmt '...........................................................................X..XX........' SrcFmt '............................................................................XX..........' SrcFmt2 '..........................................................................X.XX..........' PMode '....................................XXXX................................................' RROOp '................................................X.......................................' Barmd '......................................................XX................................' DstPred '........................................XXX.............................................' DstPred1 '.........................................XXX............................................' BarName '........................................................XXXX............................' Imm13 '.........................................XXXXXXXXXXXXX..................................' PredDest '.....................................XXX................................................' PredDest2 '.......................................................XXX..............................' PredDest3 '..................................XXX...................................................' PredDest4 '............................................XXX.........................................' SHFLFiller '.................................................XXXXX..................................' Shflmd '........................................................XX..............................' CFix_SHFL '..........................................................X.............................' BFix_SHFL '...........................................................X............................' shfl_imm5 '...............................................................XXXXX....................' bit6_RegB '............................................................XXX.........................' RTTOp '......................................................................................XX' Imm22a '............................................XXXXXXXXXXXXXXXXXXXXXX......................' Cache '..................................................................................XX....' CCTLOp '....................................................................................XXXX' CCTLTOp '......................................................................................XX' TsIdx13 '.......................................XXXXXXXXXXXXX....................................' Imm30a '....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................' Cache3 '.................................................................................XXX....' SWZMode '............................................XXX.........................................' PNWord '....................................................XXXXXXXX............................' SUPDest '.....................................XXX................................................' BDim '........................................X...............................................' BDim2 '..................................X.....................................................' SMode '...................................XXXX.................................................' Imm06 '...........................................XXXXXX.......................................' Rnd3 '....................................XX..................................................' CMode '................................................................................XX......' ChkModeF '...........................................XXXXXX.......................................' DI '..................................................................................X.....' Ofmt '.....................................XX.................................................' RGBAb '.......................................XXXX.............................................' Clamp '...........................................XX...........................................' LSSize3 '.......................................................XXX..............................' Rf3 '........................................................XX..............................' COP3 '..........................................................XX............................' Ofmt2 '............................................................XX..........................' RGBAa '..............................................................XXXX......................' Clamp2 '..................................................................XX....................' SrcNotSU '.....................................X..................................................' SrcPredSU '......................................XXX...............................................' Ofmt3 '................................................................................XX......' RGBAc '..................................................................................XXXX..' Clamp3 '......................................................................................XX' Clamp4 '.....................................XX.................................................' SUDim '....................................................XXX.................................' COP4 '........................................XX..............................................' COP5 '..............................................................XX........................' COP6 '.......................................XX...............................................' BA '................................................................X.......................' SUSize '.................................................................XXX....................' SURGBA '................................................................XXXX....................' SURGBA2 '.................................................XXX....................................' E2 '..........................................X.............................................' DFormat '.................................................X......................................' DFormat2 '.................................X......................................................' safmt '.......................................X................................................' sbfmt '......................................X.................................................' sbfmt2 '................................X.......................................................' sbfmt3 '..................................X.....................................................' VRed '.................................XX.....................................................' VRed2 '......................................XX................................................' LaneMask4 '...................................XX.............XX....................................' asel4 '....................................................XXXX................................' bsel4 '........................................................XXXX............................' AVGMode '...............................XX.......................................................' AVGMode2 '..............................XX........................................................' AVGMode3 '.................................XX.....................................................' MN '................................X.......................................................' MN2 '...............................X........................................................' VComp '.....................................XXX................................................' VComp2 '...............................XXX......................................................' VComp3 '........................................X..XX...........................................' VRed3 '.........................................XX.............................................' LaneMask4b '...........................................XX.....XX....................................' BFiller2 '..........................................................XX............................' LaneMask2 '...................................XX...................................................' LaneMask2b '...........................................XX...........................................' asel2 '..................................................XXXX..................................' bsel2 '......................................................XXXX..............................' asel2hi '..................................................XX....................................' BVideo '.....................................X..................................................' aSelect '.......................................X.........XXX....................................' bSelect '......................................X..................XXX............................' bSelectU '.........................................................XXX............................' BFiller3 '....................................................XXXXX...............................' VOP '..................................XXX...................................................' MV '......................................X.................................................' VScale '...................................XX...................................................' Sat3 '....................................X...................................................' IBase '.....................................................XX.................................' Bconst '...............................X.................XXXXXXXXXXXXXXXXXXX....................' BimmH0 '..........................................................XXXXXXXXXX....................' BimmH1 '...............................X.................XXXXXXXXX..............................' Bcbank '.................................................XXXXX..................................' Bcaddr '......................................................XXXXXXXXXXXXXX....................' BFiller '.................................................XXXXXXXXXXX............................' Canvas32 '...........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.............................' Opcode32 '.........................XXXXX..........................................................' Opcode42 '........................XXXXX...........................................................' Opcode52 '.........................XXXXXXX........................................................' Opcode362 '.........................XXXXXXXXXXX....................................................' Opcode542 '.........................XXXXXXXXXXX....................................................' Opcode532 '.........................XXXXXXXXXX.....................................................' Opcode512 '.........................XXXXXXXX.......................................................' Opcode552 '........................XXXXXXXXXX......................................................' Opcode3 '........................XXX.............................................................' Opcode5 '........................XXXXX...........................................................' Opcode5b1 '........................XXXXX...X.......................................................' Opcode5_1 '........................XXXXX.X.........................................................' Opcode6 '........................XXXXXX..........................................................' Opcode7 '........................XXXXXXX.........................................................' Opcode8 '........................XXXXXXXX........................................................' Opcode9 '........................XXXXXXXXX.......................................................' Opcode10 '........................XXXXXXXXXX......................................................' Opcode11 '........................XXXXXXXXXXX.....................................................' Opcode12 '........................XXXXXXXXXXXX....................................................' Opcode13 '........................XXXXXXXXXXXXX...................................................' Opcode7b1 '........................XXXXXXX.X.......................................................' Opcode7b2 '........................XXXXXXX.XX......................................................' Opcode7b5 '........................XXXXXXX.XXXXX...................................................' Opcode7b4 '........................XXXXXXX.XXXX....................................................' Opcode352_N '.........................XX................................XXXXXXXX.....................' SubOpcodeX5X '................................XXXXX...................................................' SubOpcodeX4X '................................XXXX....................................................' SubOpcodeX1X '................................X.......................................................' SubOpcodeX2X '................................XX......................................................' Opcode2X2 '.........................XXXX...........................................................' ABCOpcodeX3X_1 '.............................XXX........................................................' Opcode1X2 '.........................XXX............................................................' ABCOpcodeX3X_2 '............................XXX.........................................................' NencATOM '...............................................XXXXXXXXXXXXX............................' NencATOM2 '........................................XXXX...XXXXXXXXXXXXX............................' NencIADD3 '.........................................................XXX............................' NencLDG '...........................................X............................................' NencLDG2 '...........................................X...X........................................' NencLDS '........................................XXX.............................................' NencMOV32I '............................................................................XXXX........' NencMOV '.....................................XXXXXXXX...........................XXXXXXXX........' NencEXIT '....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXX......' NencPEXIT '....................................XXXXXXXX........................XXXXXXXXXXXXXXXXXXXX' NencIADD '.........................................XXX.XXXX.......................................' NencISCADD '.....................................X...XXX............................................' NencPOPC '.....................................XXXXXXXXXX.........................................' NencTLDB '.......................................XXXXXXXXXXXXX....................................' NencTLDB2 '.......................................XXXXX............................................' NencTEXB '.......................................XXXXXXXX.........................................' NencALD '.....................................XX..........XXXXXX.................................' NencAL2P '.....................................XX.....XXXXXXXXXXX.X...............................' NencFMUL '......................................X..X..............................................' NencMUFU '......................................X.X.XXXXXXXXXXXXXXXXXXXXXX........................' NencIMUL '.....................................XXX.XXXXX..........................................' NencSHINT '................................X.......................................................' NencS2R '.....................................XXXXXXXXXXXXXXXXXXXXXXX............XXXXXXXX........' NencBRA '....................................XXXXXXXX............................................' NencISETP '........................................X..X....................................XX......' NencPSETP '.....................................XXXX..XX....XXXXXX....XXX..XXXX........XXXXXX......' NencPSET '.....................................XXX....X....XXXXXX....XXX..XXXX........XXXX........' NencCSETP '.....................................XXXX..XX....XXXXXXXXXXXXXXXXXXX....XXX.....XX......' NencCSET '.....................................XXX....X....XXXXXXXXXXXXXXXXXXX....XXX.............' NencHSETP2 '.....................................X...............XXX........................X.......' NencHSETP3 '................................................................................X.......' NencHSETP '.................................X..............................................X.......' NencVSETP '................................................................................XX......' NencLOP '.........................................X..............................................' NencSHL '.....................................XXX.XXX.XXX........................................' NencSHR '.....................................XX..XX..XX.........................................' NencP2R '.....................................XXXXXXXX...X.......................................' NencTEXDEPBAR '.....................................XXXXXXXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXXXXXXXX' NencSEL '.....................................XXXXXXXX...........................................' NencOUT '.....................................XXXXXXXXXX.........................................' NencI2F '.....................................X.X.X.XX...........................XX.X............' NencMEMBAR '.....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXX..XXXXXX..' NencBAR2 '.....................................XXXXXXXX....XX.....................................' NencBAR '.....................................XXXXXX......XX.....................................' NencCCTLL '.....................................XXXXXXX......................XX............XX......' NencCCTL '..................................................................XX............X.......' NencCCTLTReg '.....................................XXXX........XXXXXXXXXXXXXXXXXXX....XXXXXXXXXXXXXX..' NencCCTLTIDx '.....................................XX.............XXXXXXXXXXXXXXXX....XXXXXXXXXXXXXX..' NencNOP '.....................................XXXXXXXXXXXXXXX....................XX......XXXXXXXX' NencF2F '.......................................X.X..X...........................XXXX............' NencF2I '.....................................X.X.X..XX..........................XXX.............' NencJMP '....................................XXXXXXXXXXX.........................................' NencFSWZADD '.....................................XXX.XX.XXX...XX....................................' NencVOTEVTG '.....................................X..................................XXXXXXXXXXXXXXXX' NencVOTE '.....................................X.....XX....XXXXXXXXXXXXXXXXXXX....XXXXXXXX........' NencSULDGA '.................................................XXXXXX.................................' NencSULD1 '.......................................XX........XXX...XXXXXXX..........................' NencSULD2 '.......................................................XXXXXXX..........................' NencSULD3 '.......................................XX........XXX......XXXX..........................' NencSULD4 '..........................................................XXXX..........................' NencSULD5 '.......................................XX........XXX...XXX.XXX..........................' NencSULD6 '...........................................................X............................' NencSURED1 '.......................................XX........XXX...XXXXXX...........................' NencSURED2 '.......................................................XXXXXX...........................' NencSURED3 '.......................................XX........XXX...XXXXXX...XXXX....................' NencSURED4 '.......................................................XXXXXX...XXXX....................' NencSUATOM1 '.......................................XX...............................................' NencSUATOM2 '.......................................XX........XXX.......X............................' NencSUATOM3 '...........................................................X............................' NencSUATOM4 '.......................................XX.................X.............................' NencSUATOM5 '..........................................................X.............................' NencBPT '....................................XXXXXXXXXXXX....................XXXXXXXXXXX...XXXXXX' NencFLO '.....................................XX..XXXXX..X.......................................' NencI2I '.......................................X.X.XX..XX.......................XX..............' NencB2R '.....................................XXX...XXXXXXXXXXX..XXXXXXXXXXXX....................' NencRPI '.....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXXXXXXXX' NencRTT '....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..' NencSHFL '........................................X.............XX................................' NencPIXLD '.....................................XXX...XXXXXXXXXXX...XXX............................' NencTXQ '.....................................X..............X....XXX......XX....................' NencTXA '.....................................X...................XXXXXXXXXXX....................' NencTMML '.....................................X......................XXXXXXXX....................' NencTMMLB '.....................................X.XXXXXXXXXXXXX....................................' NencSTP '.....................................XXXXXXXXXXXXXXXXXXX.XXX........XXXXXXXXXXXXXXXXXXXX' NencCRSLMEM '....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX................' NencLDC '........................................XX..XXX.........................................' NencBFE '.....................................XX..XXXXXX.X.......................................' NencBFI '.....................................XXX................................................' NencR2B '.....................................XXXXXXXXXXXXXXXXX..................................' NencVILD '.....................................XXXXXXXXXXXXXXXXXXXXXXX............................' NencIDE '....................................XXXXXXXXXXXXXXXX................XXXXXXXXXXXXXX.XXXXX' NencSHF '...............................X...................XXXXXXXXXXX..........................' NencSHF2 '...................................................XXXXXXXXX............................' NencSync '.....................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXXX.....' NencRed '.....................................XX.....................XX..........................' NencDEPBAR '.....................................XXXXXXXXXXXXXXXXXXXXX..............XXXXXXXXXX......' NencISBERD '.....................................XX..XXXXXXXXXXXX....XXXXXXXXXXX....................' NencLEA_LO '...........................................X............................................' NencLEA_HI_REG '...................................................XXXX.................................' NencLDIDXRF '.....................................XX..XXXXXXXXXXXXXXX................................' OEUSchedInfo '...................XXXXX................................................................' OECoupled '...X....................................................................................' OEVarLatDest '................XXX.....................................................................' OEVarLatSrc '.............XXX........................................................................' OEWaitOnSb '.......XXXXXX...........................................................................' OEReserved '...XX...................................................................................' OETexPhase '.....XX.................................................................................' OEReuseA '......X.................................................................................' OEReuseB '.....X..................................................................................' OEReuseC '....X...................................................................................' OEReserved1 'XXX.....................................................................................' ALL '.........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' hfma2__v2_PgNot '....................................................................X...................' hfma2__v2_Pg '.....................................................................XXX................' hfma2__v2_opcode '........................XXXXXXXXXXXXX...................................................' hfma2__v2_ofmt '.....................................XX.................................................' hfma2__v2_fmz '.................................................XX.....................................' hfma2__v2_sat '.......................................................X................................' hfma2__v2_Rd '................................................................................XXXXXXXX' hfma2__v2_Ra '........................................................................XXXXXXXX........' hfma2__v2_Ra_iswz_Ra_mod '.......................................XX...............................................' hfma2__v2_Sb '............................................................XXXXXXXX....................' hfma2__v2_Sb_iswz_Rb_mod '..........................................................XX............................' hfma2__v2_Rc '.........................................XXXXXXXX.......................................' hfma2__v2_Rc_negate '.........................................................X..............................' hfma2__v2_Rc_iswz_Rc_reg_mod '...................................................XX...................................' hfma2__v2_req_sb_bitset '.......XXXXXX...........................................................................' hfma2__v2_src_rel_sb '.............XXX........................................................................' hfma2__v2_dst_wr_sb '................XXX.....................................................................' hfma2__v2_usched_info '...................XXXXX................................................................' hfma2__v2_nAB '........................................................X...............................' hfma2__v2_unused 'XXXX.................................................XX.................................' hfma2__v1_PgNot '....................................................................X...................' hfma2__v1_Pg '.....................................................................XXX................' hfma2__v1_opcode '........................XXXXX...X.......................................................' hfma2__v1_ofmt '.....................................XX.................................................' hfma2__v1_fmz '.............................XX.........................................................' hfma2__v1_sat '...................................X....................................................' hfma2__v1_Rd '................................................................................XXXXXXXX' hfma2__v1_Ra '........................................................................XXXXXXXX........' hfma2__v1_Ra_iswz_Ra_mod '.......................................XX...............................................' hfma2__v1_Sb '...............................X.................XXXXXXXXX..............................' hfma2__v1_Sb2 '..........................................................XXXXXXXXXX....................' hfma2__v1_Rc '.........................................XXXXXXXX.......................................' hfma2__v1_Rc_negate '....................................X...................................................' hfma2__v1_Rc_iswz_Rc_mod '.................................XX.....................................................' hfma2__v1_req_sb_bitset '.......XXXXXX...........................................................................' hfma2__v1_src_rel_sb '.............XXX........................................................................' hfma2__v1_dst_wr_sb '................XXX.....................................................................' hfma2__v1_usched_info '...................XXXXX................................................................' hfma2__v1_unused 'XXXX....................................................................................' hfma2__v0_PgNot '....................................................................X...................' hfma2__v0_Pg '.....................................................................XXX................' hfma2__v0_opcode '........................XXXXX...X.......................................................' hfma2__v0_ofmt '.....................................XX.................................................' hfma2__v0_fmz '.............................XX.........................................................' hfma2__v0_sat '...................................X....................................................' hfma2__v0_Rd '................................................................................XXXXXXXX' hfma2__v0_Ra '........................................................................XXXXXXXX........' hfma2__v0_Ra_iswz_Ra_mod '.......................................XX...............................................' hfma2__v0_Rc '.........................................XXXXXXXX.......................................' hfma2__v0_Rc_negate '....................................X...................................................' hfma2__v0_Rc_iswz_Rc_mod '.................................XX.....................................................' hfma2__v0_req_sb_bitset '.......XXXXXX...........................................................................' hfma2__v0_src_rel_sb '.............XXX........................................................................' hfma2__v0_dst_wr_sb '................XXX.....................................................................' hfma2__v0_usched_info '...................XXXXX................................................................' hfma2__v0_nAB '...............................X........................................................' hfma2__v0_unused 'XXXX....................................................................................' hset2__v2_PgNot '....................................................................X...................' hset2__v2_Pg '.....................................................................XXX................' hset2__v2_opcode '........................XXXXXXXXXXXXX...................................................' hset2__v2_bval '......................................X.................................................' hset2__v2_cmp '.................................................XXXX...................................' hset2__v2_ftz '.....................................X..................................................' hset2__v2_bop '.........................................XX.............................................' hset2__v2_Rd '................................................................................XXXXXXXX' hset2__v2_Ra '........................................................................XXXXXXXX........' hset2__v2_Ra_absolute '...........................................X............................................' hset2__v2_Ra_negate '............................................X...........................................' hset2__v2_Ra_iswz_Ra_mod '.......................................XX...............................................' hset2__v2_Sb '............................................................XXXXXXXX....................' hset2__v2_Sb_absolute '.........................................................X..............................' hset2__v2_Sb_negate '........................................................X...............................' hset2__v2_Sb_iswz_Rb_mod '..........................................................XX............................' hset2__v2_PsNot '.............................................X..........................................' hset2__v2_Ps '..............................................XXX.......................................' hset2__v2_req_sb_bitset '.......XXXXXX...........................................................................' hset2__v2_src_rel_sb '.............XXX........................................................................' hset2__v2_dst_wr_sb '................XXX.....................................................................' hset2__v2_usched_info '...................XXXXX................................................................' hset2__v2_unused 'XXXX.................................................XXX................................' hset2__v1_PgNot '....................................................................X...................' hset2__v1_Pg '.....................................................................XXX................' hset2__v1_opcode '........................XXXXXXX.X.......................................................' hset2__v1_bval '..................................X.....................................................' hset2__v1_cmp '...................................XXXX.................................................' hset2__v1_ftz '.................................X......................................................' hset2__v1_bop '.........................................XX.............................................' hset2__v1_Rd '................................................................................XXXXXXXX' hset2__v1_Ra '........................................................................XXXXXXXX........' hset2__v1_Ra_absolute '...........................................X............................................' hset2__v1_Ra_negate '............................................X...........................................' hset2__v1_Ra_iswz_Ra_mod '.......................................XX...............................................' hset2__v1_Sb '...............................X.................XXXXXXXXX..............................' hset2__v1_Sb2 '..........................................................XXXXXXXXXX....................' hset2__v1_PsNot '.............................................X..........................................' hset2__v1_Ps '..............................................XXX.......................................' hset2__v1_req_sb_bitset '.......XXXXXX...........................................................................' hset2__v1_src_rel_sb '.............XXX........................................................................' hset2__v1_dst_wr_sb '................XXX.....................................................................' hset2__v1_usched_info '...................XXXXX................................................................' hset2__v1_unused 'XXXX....................................................................................' hset2__v0_PgNot '....................................................................X...................' hset2__v0_Pg '.....................................................................XXX................' hset2__v0_opcode '........................XXXXXXX.X.......................................................' hset2__v0_bval '..................................X.....................................................' hset2__v0_cmp '...................................XXXX.................................................' hset2__v0_ftz '.................................X......................................................' hset2__v0_bop '.........................................XX.............................................' hset2__v0_Rd '................................................................................XXXXXXXX' hset2__v0_Ra '........................................................................XXXXXXXX........' hset2__v0_Ra_absolute '...........................................X............................................' hset2__v0_Ra_negate '............................................X...........................................' hset2__v0_Ra_iswz_Ra_mod '.......................................XX...............................................' hset2__v0_Sb_negate '...............................X........................................................' hset2__v0_PsNot '.............................................X..........................................' hset2__v0_Ps '..............................................XXX.......................................' hset2__v0_req_sb_bitset '.......XXXXXX...........................................................................' hset2__v0_src_rel_sb '.............XXX........................................................................' hset2__v0_dst_wr_sb '................XXX.....................................................................' hset2__v0_usched_info '...................XXXXX................................................................' hset2__v0_unused 'XXXX....................................................................................' hset2_bop__v1_PgNot '....................................................................X...................' hset2_bop__v1_Pg '.....................................................................XXX................' hset2_bop__v1_opcode '........................XXXXXXX.X.......................................................' hset2_bop__v1_bval '..................................X.....................................................' hset2_bop__v1_cmp '...................................XXXX.................................................' hset2_bop__v1_ftz '.................................X......................................................' hset2_bop__v1_bop '.........................................XX.............................................' hset2_bop__v1_Rd '................................................................................XXXXXXXX' hset2_bop__v1_Ra '........................................................................XXXXXXXX........' hset2_bop__v1_Ra_absolute '...........................................X............................................' hset2_bop__v1_Ra_negate '............................................X...........................................' hset2_bop__v1_Ra_iswz_Ra_mod '.......................................XX...............................................' hset2_bop__v1_Sb '...............................X.................XXXXXXXXX..............................' hset2_bop__v1_Sb2 '..........................................................XXXXXXXXXX....................' hset2_bop__v1_PsNot '.............................................X..........................................' hset2_bop__v1_Ps '..............................................XXX.......................................' hset2_bop__v1_req_sb_bitset '.......XXXXXX...........................................................................' hset2_bop__v1_src_rel_sb '.............XXX........................................................................' hset2_bop__v1_dst_wr_sb '................XXX.....................................................................' hset2_bop__v1_usched_info '...................XXXXX................................................................' hset2_bop__v1_unused 'XXXX....................................................................................' hset2_bop__v0_PgNot '....................................................................X...................' hset2_bop__v0_Pg '.....................................................................XXX................' hset2_bop__v0_opcode '........................XXXXXXX.X.......................................................' hset2_bop__v0_bval '..................................X.....................................................' hset2_bop__v0_cmp '...................................XXXX.................................................' hset2_bop__v0_ftz '.................................X......................................................' hset2_bop__v0_bop '.........................................XX.............................................' hset2_bop__v0_Rd '................................................................................XXXXXXXX' hset2_bop__v0_Ra '........................................................................XXXXXXXX........' hset2_bop__v0_Ra_absolute '...........................................X............................................' hset2_bop__v0_Ra_negate '............................................X...........................................' hset2_bop__v0_Ra_iswz_Ra_mod '.......................................XX...............................................' hset2_bop__v0_Sb_negate '...............................X........................................................' hset2_bop__v0_PsNot '.............................................X..........................................' hset2_bop__v0_Ps '..............................................XXX.......................................' hset2_bop__v0_req_sb_bitset '.......XXXXXX...........................................................................' hset2_bop__v0_src_rel_sb '.............XXX........................................................................' hset2_bop__v0_dst_wr_sb '................XXX.....................................................................' hset2_bop__v0_usched_info '...................XXXXX................................................................' hset2_bop__v0_unused 'XXXX....................................................................................' hmul2_32i__PgNot '....................................................................X...................' hmul2_32i__Pg '.....................................................................XXX................' hmul2_32i__opcode '........................XXXXXXX.........................................................' hmul2_32i__fmz '...............................XX.......................................................' hmul2_32i__sat '...................................X....................................................' hmul2_32i__Rd '................................................................................XXXXXXXX' hmul2_32i__Ra '........................................................................XXXXXXXX........' hmul2_32i__Ra_iswz_Ra_32i_mod '.................................XX.....................................................' hmul2_32i__imm '....................................XXXXXXXXXXXXXXXX....................................' hmul2_32i__imm2 '....................................................XXXXXXXXXXXXXXXX....................' hmul2_32i__req_sb_bitset '.......XXXXXX...........................................................................' hmul2_32i__src_rel_sb '.............XXX........................................................................' hmul2_32i__dst_wr_sb '................XXX.....................................................................' hmul2_32i__usched_info '...................XXXXX................................................................' hmul2_32i__unused 'XXXX....................................................................................' hset2_bop__v2_PgNot '....................................................................X...................' hset2_bop__v2_Pg '.....................................................................XXX................' hset2_bop__v2_opcode '........................XXXXXXXXXXXXX...................................................' hset2_bop__v2_bval '......................................X.................................................' hset2_bop__v2_cmp '.................................................XXXX...................................' hset2_bop__v2_ftz '.....................................X..................................................' hset2_bop__v2_bop '.........................................XX.............................................' hset2_bop__v2_Rd '................................................................................XXXXXXXX' hset2_bop__v2_Ra '........................................................................XXXXXXXX........' hset2_bop__v2_Ra_absolute '...........................................X............................................' hset2_bop__v2_Ra_negate '............................................X...........................................' hset2_bop__v2_Ra_iswz_Ra_mod '.......................................XX...............................................' hset2_bop__v2_Sb '............................................................XXXXXXXX....................' hset2_bop__v2_Sb_absolute '.........................................................X..............................' hset2_bop__v2_Sb_negate '........................................................X...............................' hset2_bop__v2_Sb_iswz_Rb_mod '..........................................................XX............................' hset2_bop__v2_PsNot '.............................................X..........................................' hset2_bop__v2_Ps '..............................................XXX.......................................' hset2_bop__v2_req_sb_bitset '.......XXXXXX...........................................................................' hset2_bop__v2_src_rel_sb '.............XXX........................................................................' hset2_bop__v2_dst_wr_sb '................XXX.....................................................................' hset2_bop__v2_usched_info '...................XXXXX................................................................' hset2_bop__v2_unused 'XXXX.................................................XXX................................' hadd2__v0_PgNot '....................................................................X...................' hadd2__v0_Pg '.....................................................................XXX................' hadd2__v0_opcode '........................XXXXXXX.X.......................................................' hadd2__v0_ofmt '.....................................XX.................................................' hadd2__v0_ftz '................................................X.......................................' hadd2__v0_sat '...................................X....................................................' hadd2__v0_Rd '................................................................................XXXXXXXX' hadd2__v0_Ra '........................................................................XXXXXXXX........' hadd2__v0_Ra_absolute '...........................................X............................................' hadd2__v0_Ra_negate '............................................X...........................................' hadd2__v0_Ra_iswz_Ra_mod '.......................................XX...............................................' hadd2__v0_Sb_absolute '.................................X......................................................' hadd2__v0_Sb_negate '...............................X........................................................' hadd2__v0_req_sb_bitset '.......XXXXXX...........................................................................' hadd2__v0_src_rel_sb '.............XXX........................................................................' hadd2__v0_dst_wr_sb '................XXX.....................................................................' hadd2__v0_usched_info '...................XXXXX................................................................' hadd2__v0_unused 'XXXX..............................X.X....XX..XXX........................................' hadd2__v1_PgNot '....................................................................X...................' hadd2__v1_Pg '.....................................................................XXX................' hadd2__v1_opcode '........................XXXXXXX.X.......................................................' hadd2__v1_ofmt '.....................................XX.................................................' hadd2__v1_ftz '................................................X.......................................' hadd2__v1_sat '...................................X....................................................' hadd2__v1_Rd '................................................................................XXXXXXXX' hadd2__v1_Ra '........................................................................XXXXXXXX........' hadd2__v1_Ra_absolute '...........................................X............................................' hadd2__v1_Ra_negate '............................................X...........................................' hadd2__v1_Ra_iswz_Ra_mod '.......................................XX...............................................' hadd2__v1_Sb '...............................X.................XXXXXXXXX..............................' hadd2__v1_Sb2 '..........................................................XXXXXXXXXX....................' hadd2__v1_req_sb_bitset '.......XXXXXX...........................................................................' hadd2__v1_src_rel_sb '.............XXX........................................................................' hadd2__v1_dst_wr_sb '................XXX.....................................................................' hadd2__v1_usched_info '...................XXXXX................................................................' hadd2__v1_unused 'XXXX.............................XX.X....XX..XXX........................................' hadd2__v2_PgNot '....................................................................X...................' hadd2__v2_Pg '.....................................................................XXX................' hadd2__v2_opcode '........................XXXXXXXXXXXXX...................................................' hadd2__v2_ofmt '.....................................XX.................................................' hadd2__v2_ftz '................................................X.......................................' hadd2__v2_sat '.......................................................X................................' hadd2__v2_Rd '................................................................................XXXXXXXX' hadd2__v2_Ra '........................................................................XXXXXXXX........' hadd2__v2_Ra_absolute '...........................................X............................................' hadd2__v2_Ra_negate '............................................X...........................................' hadd2__v2_Ra_iswz_Ra_mod '.......................................XX...............................................' hadd2__v2_Sb '............................................................XXXXXXXX....................' hadd2__v2_Sb_absolute '.........................................................X..............................' hadd2__v2_Sb_negate '........................................................X...............................' hadd2__v2_Sb_iswz_Rb_mod '..........................................................XX............................' hadd2__v2_req_sb_bitset '.......XXXXXX...........................................................................' hadd2__v2_src_rel_sb '.............XXX........................................................................' hadd2__v2_dst_wr_sb '................XXX.....................................................................' hadd2__v2_usched_info '...................XXXXX................................................................' hadd2__v2_unused 'XXXX.....................................XX..XXX.XXXXXX.................................' hmul2__v2_PgNot '....................................................................X...................' hmul2__v2_Pg '.....................................................................XXX................' hmul2__v2_opcode '........................XXXXXXXXXXXXX...................................................' hmul2__v2_ofmt '.....................................XX.................................................' hmul2__v2_fmz '...............................................XX.......................................' hmul2__v2_sat '.......................................................X................................' hmul2__v2_Rd '................................................................................XXXXXXXX' hmul2__v2_Ra '........................................................................XXXXXXXX........' hmul2__v2_Ra_absolute '...........................................X............................................' hmul2__v2_Ra_iswz_Ra_mod '.......................................XX...............................................' hmul2__v2_Sb '............................................................XXXXXXXX....................' hmul2__v2_Sb_absolute '.........................................................X..............................' hmul2__v2_Sb_iswz_Rb_mod '..........................................................XX............................' hmul2__v2_req_sb_bitset '.......XXXXXX...........................................................................' hmul2__v2_src_rel_sb '.............XXX........................................................................' hmul2__v2_dst_wr_sb '................XXX.....................................................................' hmul2__v2_usched_info '...................XXXXX................................................................' hmul2__v2_nAB '........................................................X...............................' hmul2__v2_unused 'XXXX.....................................XX.XXX..XXXXXX.................................' hadd2_32i__PgNot '....................................................................X...................' hadd2_32i__Pg '.....................................................................XXX................' hadd2_32i__opcode '........................XXXXXXX.........................................................' hadd2_32i__ftz '................................X.......................................................' hadd2_32i__sat '...................................X....................................................' hadd2_32i__Rd '................................................................................XXXXXXXX' hadd2_32i__Ra '........................................................................XXXXXXXX........' hadd2_32i__Ra_negate '...............................X........................................................' hadd2_32i__Ra_iswz_Ra_32i_mod '.................................XX.....................................................' hadd2_32i__imm '....................................XXXXXXXXXXXXXXXX....................................' hadd2_32i__imm2 '....................................................XXXXXXXXXXXXXXXX....................' hadd2_32i__req_sb_bitset '.......XXXXXX...........................................................................' hadd2_32i__src_rel_sb '.............XXX........................................................................' hadd2_32i__dst_wr_sb '................XXX.....................................................................' hadd2_32i__usched_info '...................XXXXX................................................................' hadd2_32i__unused 'XXXX....................................................................................' hmul2__v1_PgNot '....................................................................X...................' hmul2__v1_Pg '.....................................................................XXX................' hmul2__v1_opcode '........................XXXXXXX.X.......................................................' hmul2__v1_ofmt '.....................................XX.................................................' hmul2__v1_fmz '...............................................XX.......................................' hmul2__v1_sat '...................................X....................................................' hmul2__v1_Rd '................................................................................XXXXXXXX' hmul2__v1_Ra '........................................................................XXXXXXXX........' hmul2__v1_Ra_absolute '...........................................X............................................' hmul2__v1_Ra_negate '............................................X...........................................' hmul2__v1_Ra_iswz_Ra_mod '.......................................XX...............................................' hmul2__v1_Sb '...............................X.................XXXXXXXXX..............................' hmul2__v1_Sb2 '..........................................................XXXXXXXXXX....................' hmul2__v1_req_sb_bitset '.......XXXXXX...........................................................................' hmul2__v1_src_rel_sb '.............XXX........................................................................' hmul2__v1_dst_wr_sb '................XXX.....................................................................' hmul2__v1_usched_info '...................XXXXX................................................................' hmul2__v1_unused 'XXXX.............................XX.X....XX..XX.........................................' hmul2__v0_PgNot '....................................................................X...................' hmul2__v0_Pg '.....................................................................XXX................' hmul2__v0_opcode '........................XXXXXXX.X.......................................................' hmul2__v0_ofmt '.....................................XX.................................................' hmul2__v0_fmz '...............................................XX.......................................' hmul2__v0_sat '...................................X....................................................' hmul2__v0_Rd '................................................................................XXXXXXXX' hmul2__v0_Ra '........................................................................XXXXXXXX........' hmul2__v0_Ra_absolute '...........................................X............................................' hmul2__v0_Ra_iswz_Ra_mod '.......................................XX...............................................' hmul2__v0_Sb_absolute '.................................X......................................................' hmul2__v0_req_sb_bitset '.......XXXXXX...........................................................................' hmul2__v0_src_rel_sb '.............XXX........................................................................' hmul2__v0_dst_wr_sb '................XXX.....................................................................' hmul2__v0_usched_info '...................XXXXX................................................................' hmul2__v0_nAB '............................................X...........................................' hmul2__v0_unused 'XXXX...........................X..X.X....XX..XX.........................................' NOP_ENCODING ALL = 0; CLASS "FFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FFMAfmai_pipe = 0b010110011; FFMAfxu_pipe = 0b010110011; FFMA = 0b010110011; ENCODING Opcode9 = Opcode; FMZ = FMZ; Rnd = Round1; Sat = SAT; nC = Rc@negate; nAB = PSignFFMA(Ra@negate,Rb@negate); WriteCC = writeCC; RegA = Ra; RegB = Rb; RegC = Rc; Pred = Pg; PredNot = Pg@not; Dest = Rd; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_FFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FFMAfmai_pipe = 0b0011001_1; FFMAfxu_pipe = 0b0011001_1; FFMA = 0b0011001_1; ENCODING Opcode7b1 = Opcode; FMZ = FMZ; Rnd = Round1; Sat = SAT; nC = Rc@negate; nAB = PSignFFMA(Ra@negate,UnaryNeg); WriteCC = writeCC; RegA = Ra; Bconst=uImm; RegC = Rc; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const_FFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-] C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FFMAfmai_pipe = 0b010010011; FFMAfxu_pipe = 0b010010011; FFMA = 0b010010011; ENCODING Opcode9 = Opcode; FMZ = FMZ; Rnd = Round1; Sat = SAT; nC = Rc@negate; nAB = PSignFFMA(Ra@negate,srcConst@negate); WriteCC = writeCC; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const1_FFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [-] C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FFMAfmai_pipe = 0b010100011; FFMAfxu_pipe = 0b010100011; FFMA = 0b010100011; ENCODING Opcode9 = Opcode; FMZ = FMZ; Rnd = Round1; Sat = SAT; nC = srcConst@negate; nAB = PSignFFMA(Ra@negate,Rb@negate); WriteCC = writeCC; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FFMA32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):fImm ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR Rd == Rc : "Output register must be the same as last input register" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(fImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FFMA32Ifmai_pipe = 0b000011; FFMA32Ifxu_pipe = 0b000011; FFMA32I = 0b000011; ENCODING Opcode6 = Opcode; nC2 = Rc@negate; nAB2 = Ra@negate; SatHigh = SAT; FMZHigh = FMZ; WriteCCI = writeCC; Imm32 = fImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = IDENTICAL(Rd,Rc); OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "FFMA32I_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):fImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(fImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rd)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FFMA32Ifmai_pipe = 0b000011; FFMA32Ifxu_pipe = 0b000011; FFMA32I = 0b000011; ENCODING Opcode6 = Opcode; nC2 = 0; nAB2 = Ra@negate; SatHigh = SAT; FMZHigh = FMZ; WriteCCI = writeCC; Imm32 = fImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FADDfmai_pipe = 0b0101110001011; FADDfxu_pipe = 0b0101110001011; FADD = 0b0101110001011; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = Rb@negate; FTZ = FTZ; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !ScaleLow; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_b; OECoupled = 0; !OEReserved1; CLASS "Imm_FADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FADDfmai_pipe = 0b0011100_01011; FADDfxu_pipe = 0b0011100_01011; FADD = 0b0011100_01011; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = UnaryNeg; FTZ = FTZ; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; !ScaleLow; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_FADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FADDfmai_pipe = 0b0100110001011; FADDfxu_pipe = 0b0100110001011; FADD = 0b0100110001011; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = srcConst@negate; FTZ = FTZ; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !ScaleLow; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FADD32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):fImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(fImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FADD32Ifmai_pipe = 0b000010; FADD32Ifxu_pipe = 0b000010; FADD32I = 0b000010; ENCODING Opcode6 = Opcode; nC2 = UnaryAbs; nAB2 = Ra@negate; FTZ3 = FTZ; aA3 = Ra@absolute; nB3 = UnaryNeg; WriteCCI = writeCC; Imm32 = fImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FCMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test(GT):fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FCMP" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FCMPfxu_pipe = 0b010110111010; FCMP = 0b010110111010; ENCODING Opcode12 = Opcode; FComp = Test; FTZ2 = FTZ; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_FCMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test(GT):fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FCMP" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FCMPfxu_pipe = 0b0011011_1010; FCMP = 0b0011011_1010; ENCODING Opcode7b4= Opcode; FComp = Test; FTZ2 = FTZ; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const_FCMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test(GT):fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FCMP" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FCMPfxu_pipe = 0b010010111010; FCMP = 0b010010111010; ENCODING Opcode12 = Opcode; FComp = Test; FTZ2 = FTZ; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const1_FCMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test(GT):fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FCMP" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES FCMPfxu_pipe = 0b010100111010; FCMP = 0b010100111010; ENCODING Opcode12 = Opcode; FComp = Test; FTZ2 = FTZ; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FSWZADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Round1(RN):rnd /NDV(noNDV):ndv $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' PNWord:uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSWZADDfxu_pipe = 0b0101000011111; FSWZADD = 0b0101000011111; ENCODING Opcode13 = Opcode; WriteCC = writeCC; FTZ = FTZ; RndLow = Round1; NDV2 = NDV; PNWord = PNWord; RegB = Rb; Pred = Pg; PredNot = Pg@not; RegA = Ra; Dest = Rd; !NencFSWZADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_b; OECoupled = 0; !OEReserved1; CLASS "FMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Scale(NONE):scale /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" ILLEGAL_INSTR_ENCODING_ERROR (scale != `Scale@INVALIDSCALE37): "Invalid Scale (scale) field value INVALIDSCALE37" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMULfmai_pipe = 0b0101110001101; FMULfxu_pipe = 0b0101110001101; FMUL = 0b0101110001101; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; WriteCC = writeCC; FMZLow = FMZ; ScaleLow = Scale; RndLow = Round1; Sat = SAT; nAB = PSignFFMA(Ra@negate,Rb@negate); !BFiller; !NencFMUL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_FMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Scale(NONE):scale /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" ILLEGAL_INSTR_ENCODING_ERROR (scale != `Scale@INVALIDSCALE37): "Invalid Scale (scale) field value INVALIDSCALE37" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMULfmai_pipe = 0b0011100_01101; FMULfxu_pipe = 0b0011100_01101; FMUL = 0b0011100_01101; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; WriteCC = writeCC; FMZLow = FMZ; ScaleLow = Scale; RndLow = Round1; Sat = SAT; nAB = PSignFFMA(Ra@negate,UnaryNeg); !NencFMUL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_FMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /Scale(NONE):scale /Round1(RN):rnd /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-] C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" ILLEGAL_INSTR_ENCODING_ERROR (scale != `Scale@INVALIDSCALE37): "Invalid Scale (scale) field value INVALIDSCALE37" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMULfmai_pipe = 0b0100110001101; FMULfxu_pipe = 0b0100110001101; FMUL = 0b0100110001101; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); WriteCC = writeCC; FMZLow = FMZ; ScaleLow = Scale; RndLow = Round1; Sat = SAT; nAB = PSignFFMA(Ra@negate,srcConst@negate); !NencFMUL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FMUL32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz /SAT(noSAT):sat $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):fImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(fImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMUL32Ifmai_pipe = 0b00011110; FMUL32Ifxu_pipe = 0b00011110; FMUL32I = 0b00011110; ENCODING Opcode8 = Opcode; SatHigh = SAT; FMZHigh = FMZ; WriteCCI = writeCC; Imm32 = fImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMNMXfxu_pipe = 0b0101110001100; FMNMX = 0b0101110001100; ENCODING Opcode13 = Opcode; aB = Rb@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = Rb@negate; FTZ = FTZ; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !BFiller; !Sat; !Xm; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_FMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMNMXfxu_pipe = 0b0011100_01100; FMNMX = 0b0011100_01100; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = UnaryNeg; FTZ = FTZ; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; !Sat; !Xm; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_FMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||] C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FMNMXfxu_pipe = 0b0100110001100; FMNMX = 0b0100110001100; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = srcConst@negate; FTZ = FTZ; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !Sat; !Xm; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /FTZ(noFTZ):ftz /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETfxu_pipe = 0b01011000; FSET = 0b01011000; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; RegA = Ra; RegB = Rb; nA3 = Ra@negate; nB3 = Rb@negate; aA3 = Ra@absolute; aB2 = Rb@absolute; FComp = Test; SrcPred = Pa; SrcNot = Pa@not; BVal1 = BVal; Bop = bopopt; FTZ3 = FTZ; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_FSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETfxu_pipe = 0b01011000; FSET = 0b01011000; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; RegA = Ra; RegB = Rb; nA3 = Ra@negate; nB3 = Rb@negate; aA3 = Ra@absolute; aB2 = Rb@absolute; FComp = Test; SrcPred = `Predicate@PT; SrcNot = 0; BVal1 = BVal; Bop = `Bop@AND; FTZ3 = FTZ; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_FSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /FTZ(noFTZ):ftz /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETfxu_pipe = 0b0011000; FSET = 0b0011000; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; RegA = Ra; Bconst=uImm; nA3 = Ra@negate; nB3 = UnaryNeg; aA3 = Ra@absolute; aB2 = UnaryAbs; FComp = Test; SrcPred = Pa; SrcNot = Pa@not; BVal1 = BVal; Bop = bopopt; FTZ3 = FTZ; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_FSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETfxu_pipe = 0b0011000; FSET = 0b0011000; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; RegA = Ra; Bconst=uImm; nA3 = Ra@negate; nB3 = UnaryNeg; aA3 = Ra@absolute; aB2 = UnaryAbs; FComp = Test; SrcPred = `Predicate@PT; SrcNot = 0; BVal1 = BVal; Bop = `Bop@AND; FTZ3 = FTZ; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_FSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /FTZ(noFTZ):ftz /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETfxu_pipe = 0b01001000; FSET = 0b01001000; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); nA3 = Ra@negate; nB3 = srcConst@negate; aA3 = Ra@absolute; aB2 = srcConst@absolute; FComp = Test; SrcPred = Pa; SrcNot = Pa@not; BVal1 = BVal; Bop = bopopt; FTZ3 = FTZ; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_FSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /FTZ(noFTZ):ftz $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETfxu_pipe = 0b01001000; FSET = 0b01001000; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); nA3 = Ra@negate; nB3 = srcConst@negate; aA3 = Ra@absolute; aB2 = srcConst@absolute; FComp = Test; SrcPred = `Predicate@PT; SrcNot = 0; BVal1 = BVal; Bop = `Bop@AND; FTZ3 = FTZ; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "FSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /FTZ(noFTZ):ftz /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETPfxu_pipe = 0b010110111011; FSETP = 0b010110111011; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = Rb@negate; FTZ2 = FTZ; aB2 = Rb@absolute; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; Bop = bopopt; PDest = Pd; PNDest = nPd; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_FSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /FTZ(noFTZ):ftz Predicate:Pd ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETPfxu_pipe = 0b010110111011; FSETP = 0b010110111011; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = Rb@negate; FTZ2 = FTZ; aB2 = Rb@absolute; SrcPred = `Predicate@PT; SrcNot = 0; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; Bop = `Bop@AND; PDest = Pd; PNDest = `Predicate@PT; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_FSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /FTZ(noFTZ):ftz /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETPfxu_pipe = 0b0011011_1011; FSETP = 0b0011011_1011; ENCODING Opcode7b4 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = UnaryNeg; FTZ2 = FTZ; aB2 = UnaryAbs; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bconst=uImm; Bop = bopopt; PDest = Pd; PNDest = nPd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_FSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /FTZ(noFTZ):ftz Predicate:Pd ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETPfxu_pipe = 0b0011011_1011; FSETP = 0b0011011_1011; ENCODING Opcode7b4 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = UnaryNeg; FTZ2 = FTZ; aB2 = UnaryAbs; SrcPred = `Predicate@PT; SrcNot = 0; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bconst=uImm; Bop = `Bop@AND; PDest = Pd; PNDest = `Predicate@PT; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_FSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /FTZ(noFTZ):ftz /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETPfxu_pipe = 0b010010111011; FSETP = 0b010010111011; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = srcConst@negate; FTZ2 = FTZ; aB2 = srcConst@absolute; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Bop = bopopt; PDest = Pd; PNDest = nPd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_FSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /FTZ(noFTZ):ftz Predicate:Pd ',' $( [-][||] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for FSET" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FSETPfxu_pipe = 0b010010111011; FSETP = 0b010010111011; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = srcConst@negate; FTZ2 = FTZ; aB2 = srcConst@absolute; SrcPred = `Predicate@PT; SrcNot = 0; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Bop = `Bop@AND; PDest = Pd; PNDest = `Predicate@PT; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "IPA_1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IDXOnly:idx /IPAOp(MUL):ipaop /MSI(CENTER):msi /SAT(noSAT):sat Register:Rd ',' A:srcAttr[Register:Ra] ',' Register:Rb ',' Register(RZ):Rc ',' [!]Predicate:Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "Can only be used with pixel shader" ILLEGAL_INSTR_ENCODING_ERROR ((ipaop == `IPAOp@PASS) || (ipaop == `IPAOp@CONSTANT)) -> (Rb == `Register@RZ): "Illegal instruction encoding" ILLEGAL_INSTR_ENCODING_ERROR (msi != `MSI@OFFSET) -> (Rc == `Register@RZ): "Illegal instruction encoding" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (Ra != `Register@RZ) : "Ra cannot be RZ for IPA.IDX" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (msi != `MSI@INVALIDMSI3): "Invalid MSI (msi) field value INVALIDMSI3" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TRAM_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES IPAmio_pipe = 0b11100000; IPA = 0b11100000; ENCODING Opcode8 = Opcode; IPAOp = IPAOp; PredSrc = Ps; PredSrcNot = Ps@not; MSI = MSI; SatLow = SAT; RegA = Ra; RegB = Rb; RegC = Rc; IPAIDX = 1; !IPAImm10; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_IPA_1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IPAOp(MUL):ipaop /MSI(CENTER):msi /SAT(noSAT):sat Register:Rd ',' A:srcAttr[UImm(10/0)*:uImm] ',' Register:Rb ',' Register(RZ):Rc ',' [!]Predicate(PT):Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "Can only be used with pixel shader" ILLEGAL_INSTR_ENCODING_ERROR ((ipaop == `IPAOp@PASS) || (ipaop == `IPAOp@CONSTANT)) -> (Rb == `Register@RZ): "Illegal instruction encoding" ILLEGAL_INSTR_ENCODING_ERROR (msi != `MSI@OFFSET) -> (Rc == `Register@RZ): "Illegal instruction encoding" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (msi != `MSI@INVALIDMSI3): "Invalid MSI (msi) field value INVALIDMSI3" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TRAM_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 10; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = (((sat == `SAT@SAT) || (ipaop == `IPAOp@MUL)) ? $VQ_IPA_MUL : (((ipaop == `IPAOp@PASS) || (ipaop == `IPAOp@CONSTANT)) ? $VQ_IPA_PASS : $VQ_IPA_SC)); OPCODES IPAmio_pipe = 0b11100000; IPA = 0b11100000; ENCODING Opcode8 = Opcode; IPAOp = IPAOp; PredSrc = Ps; PredSrcNot = Ps@not; MSI = MSI; SatLow = SAT; RegA = `Register@RZ; RegB = Rb; RegC = Rc; IPAIDX = 0; IPAImm10 = uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "IPA_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IDXOnly:idx /IPAOp(MUL):ipaop /MSI(CENTER):msi /SAT(noSAT):sat Register:Rd ',' A:srcAttr[Register:Ra] ',' [!]Predicate:Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "Can only be used with pixel shader" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (Ra != `Register@RZ) : "Ra cannot be RZ for IPA.IDX" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (msi != `MSI@INVALIDMSI3): "Invalid MSI (msi) field value INVALIDMSI3" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TRAM_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES IPAmio_pipe = 0b11100000; IPA = 0b11100000; ENCODING Opcode8 = Opcode; IPAOp = IPAOp; PredSrc = Ps; PredSrcNot = Ps@not; MSI = MSI; SatLow = SAT; RegA = Ra; RegB = `Register@RZ; RegC = `Register@RZ; IPAIDX = 1; !IPAImm10; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "I_IPA_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IPAOp(MUL):ipaop /MSI(CENTER):msi /SAT(noSAT):sat Register:Rd ',' A:srcAttr[UImm(10/0)*:uImm] ',' [!]Predicate(PT):Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "Can only be used with pixel shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (msi != `MSI@INVALIDMSI3): "Invalid MSI (msi) field value INVALIDMSI3" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TRAM_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 10; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = (((sat == `SAT@SAT) || (ipaop == `IPAOp@MUL)) ? $VQ_IPA_MUL : (((ipaop == `IPAOp@PASS) || (ipaop == `IPAOp@CONSTANT)) ? $VQ_IPA_PASS : $VQ_IPA_SC)); OPCODES IPAmio_pipe = 0b11100000; IPA = 0b11100000; ENCODING Opcode8 = Opcode; IPAOp = IPAOp; PredSrc = Ps; PredSrcNot = Ps@not; MSI = MSI; SatLow = SAT; RegA = `Register@RZ; RegB = `Register@RZ; RegC = `Register@RZ; IPAIDX = 0; IPAImm10 = uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "RRO" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /RROOp:rroop $( Register:Rd )$ ',' $( [-][||] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES RROfxu_pipe = 0b0101110010010; RRO = 0b0101110010010; ENCODING Opcode13 = Opcode; aB = Rb@absolute; nB = Rb@negate; RROOp = RROOp; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; !RegA; !Sat; !nAB; !WriteCC; !aA2; !XMode; !LOP; !nB_L; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_RRO" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /RROOp:rroop $( Register:Rd )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES RROfxu_pipe = 0b0011100_10010; RRO = 0b0011100_10010; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; nB = UnaryNeg; RROOp = RROOp; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; !RegA; !Sat; !nAB; !WriteCC; !aA2; !XMode; !LOP; !nB_L; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_RRO" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /RROOp:rroop $( Register:Rd )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES RROfxu_pipe = 0b0100110010010; RRO = 0b0100110010010; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; nB = srcConst@negate; RROOp = RROOp; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !RegA; !Sat; !nAB; !WriteCC; !aA2; !XMode; !LOP; !nB_L; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "MUFU" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /MufuOp:mufu /SAT(noSAT):sat Register:Rd ',' [-] [||]Register:Ra $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODE9): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODE9" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODEA): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODEA" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODEB): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODEB" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODEC): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODEC" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODED): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODED" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODEE): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODEE" ILLEGAL_INSTR_ENCODING_ERROR (mufu != `MufuOp@INVALIDMUFUOPCODEF): "Invalid MufuOp (mufu) field value INVALIDMUFUOPCODEF" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES MUFUmio_pipe = 0b0101000010000; MUFU = 0b0101000010000; ENCODING Opcode13= Opcode; Sat = SAT; aA2 = Ra@absolute; nA1 = Ra@negate; MufuOp = MufuOp; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencMUFU; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "FCHK" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ChkMode:mode Predicate:Pd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (mode == `Chkmode@DIVIDE) : "FCHK check mode must be DIVIDE" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FCHKfxu_pipe = 0b0101110010001; FCHK = 0b0101110010001; ENCODING Opcode13 = Opcode; aB = Rb@absolute; nAB = Ra@negate; aA2 = Ra@absolute; nB2 = Rb@negate; ChkModeF = mode; Pred = Pg; PredNot = Pg@not; PDest = Pd; RegA = Ra; RegB = Rb; !BFiller; !WriteCC; !Sat; !PNDest; !aA4; !nB4; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_FCHK" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ChkMode:mode Predicate:Pd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (mode == `Chkmode@DIVIDE) : "FCHK check mode must be DIVIDE" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FCHKfxu_pipe = 0b0011100_10001; FCHK = 0b0011100_10001; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; nAB = Ra@negate; aA2 = Ra@absolute; nB2 = UnaryNeg; ChkModeF = mode; Pred = Pg; PredNot = Pg@not; PDest = Pd; RegA = Ra; Bconst=uImm; !WriteCC; !Sat; !PNDest; !aA4; !nB4; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_FCHK" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ChkMode:mode Predicate:Pd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (mode == `Chkmode@DIVIDE) : "FCHK check mode must be DIVIDE" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES FCHKfxu_pipe = 0b0100110010001; FCHK = 0b0100110010001; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; nAB = Ra@negate; aA2 = Ra@absolute; nB2 = srcConst@negate; ChkModeF = mode; Pred = Pg; PredNot = Pg@not; PDest = Pd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !WriteCC; !Sat; !PNDest; !aA4; !nB4; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "DFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" MISALIGNED_REG_ERROR IsEven(((Rc)+((Rc)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-2))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 64; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DFMAfma64lite_pipe = 0b01011_011_0111; DFMA = 0b01011_011_0111; ENCODING Opcode12 = Opcode; Rnd3 = Round1; nC = Rc@negate; nAB = PSignFFMA(Ra@negate,Rb@negate); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_DFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rc)+((Rc)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-2))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 64; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DFMAfma64lite_pipe = 0b0011011_0111; DFMA = 0b0011011_0111; ENCODING Opcode7b4 = Opcode; Rnd3 = Round1; nC = Rc@negate; nAB = PSignFFMA(Ra@negate,UnaryNeg); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const_DFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" MISALIGNED_REG_ERROR IsEven(((Rc)+((Rc)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-2))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 64; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DFMAfma64lite_pipe = 0b01001_011_0111; DFMA = 0b01001_011_0111; ENCODING Opcode12 = Opcode; Rnd3 = Round1; nC = Rc@negate; nAB = PSignFFMA(Ra@negate,srcConst@negate); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const1_DFMA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 64; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DFMAfma64lite_pipe = 0b01010_011_0111; DFMA = 0b01010_011_0111; ENCODING Opcode12 = Opcode; Rnd3 = Round1; nC = srcConst@negate; nAB = PSignFFMA(Ra@negate,Rb@negate); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "DADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DADDfma64lite_pipe = 0b01011_100_01110; DADD = 0b01011_100_01110; ENCODING Opcode13 = Opcode; aB = Rb@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = Rb@negate; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !BFiller; !Sat; !XMode; !LOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_b; OECoupled = 0; !OEReserved1; CLASS "Imm_DADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DADDfma64lite_pipe = 0b0011100_01110; DADD = 0b0011100_01110; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = UnaryNeg; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; !Sat; !XMode; !LOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_DADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DADDfma64lite_pipe = 0b01001_100_01110; DADD = 0b01001_100_01110; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = srcConst@negate; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !Sat; !XMode; !LOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "DMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DMULfma64lite_pipe = 0b01011_100_10000; DMUL = 0b01011_100_10000; ENCODING Opcode13 = Opcode; nAB = PSignFFMA(Ra@negate,Rb@negate); WriteCC = writeCC; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !BFiller; !Sat; !Bop; !aB; !XMode; !LOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_DMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DMULfma64lite_pipe = 0b0011100_10000; DMUL = 0b0011100_10000; ENCODING Opcode7b5 = Opcode; nAB = PSignFFMA(Ra@negate,UnaryNeg); WriteCC = writeCC; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; !Sat; !Bop; !aB; !XMode; !LOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_DMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-] C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DMULfma64lite_pipe = 0b01001_100_10000; DMUL = 0b01001_100_10000; ENCODING Opcode13 = Opcode; nAB = PSignFFMA(Ra@negate,srcConst@negate); WriteCC = writeCC; RndLow = Round1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !Sat; !Bop; !aB; !XMode; !LOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "DMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd /optCC(noCC):writeCC ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DMNMXfma64lite_pipe = 0b0101110001010; DMNMX = 0b0101110001010; ENCODING Opcode13 = Opcode; aB = Rb@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = Rb@negate; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !BFiller; !Sat; !XMode; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_DMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd /optCC(noCC):writeCC ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DMNMXfma64lite_pipe = 0b0011100_01010; DMNMX = 0b0011100_01010; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = UnaryNeg; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; !Sat; !XMode; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_DMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd /optCC(noCC):writeCC ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DMNMXfma64lite_pipe = 0b0100110001010; DMNMX = 0b0100110001010; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; nAB = Ra@negate; WriteCC = writeCC; aA2 = Ra@absolute; nB2 = srcConst@negate; SrcPred = Pa; SrcNot = Pa@not; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !Sat; !XMode; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "DSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /Bop:bopopt $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETfma64lite_pipe = 0b010110010; DSET = 0b010110010; ENCODING Opcode9 = Opcode; aA3 = Ra@absolute; nB3 = Rb@negate; BVal1 = bval; FComp = fcomp; WriteCC = writeCC; Bop = bopopt; aB2 = Rb@absolute; nA3 = Ra@negate; SrcPred = Pa; SrcNot = Pa@not; RegB = Rb; Pred = Pg; PredNot = Pg@not; RegA = Ra; Dest = Rd; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_DSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETfma64lite_pipe = 0b010110010; DSET = 0b010110010; ENCODING Opcode9 = Opcode; Bop = `Bop@AND; nA3 = Ra@negate; FComp = fcomp; WriteCC = writeCC; aA3 = Ra@absolute; nB3 = Rb@negate; BVal1 = bval; aB2 = Rb@absolute; SrcPred = `Predicate@PT; SrcNot = 0; Dest = Rd; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_DSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /Bop:bopopt $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETfma64lite_pipe = 0b0011001_0; DSET = 0b0011001_0; ENCODING Opcode7b1 = Opcode; Bop = bopopt; nA3 = Ra@negate; FComp = fcomp; WriteCC = writeCC; aA3 = Ra@absolute; nB3 = UnaryNeg; BVal1 = bval; aB2 = UnaryAbs; SrcPred = Pa; SrcNot = Pa@not; Dest = Rd; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_DSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETfma64lite_pipe = 0b0011001_0; DSET = 0b0011001_0; ENCODING Opcode7b1 = Opcode; Bop = `Bop@AND; nA3 = Ra@negate; FComp = fcomp; WriteCC = writeCC; aA3 = Ra@absolute; nB3 = UnaryNeg; BVal1 = bval; aB2 = UnaryAbs; SrcPred = `Predicate@PT; SrcNot = 0; Dest = Rd; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_DSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp /Bop:bopopt $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 64; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETfma64lite_pipe = 0b010010010; DSET = 0b010010010; ENCODING Opcode9 = Opcode; Bop = bopopt; nA3 = Ra@negate; FComp = fcomp; WriteCC = writeCC; aA3 = Ra@absolute; nB3 = srcConst@negate; BVal1 = bval; aB2 = srcConst@absolute; SrcPred = Pa; SrcNot = Pa@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_DSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:fcomp $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 64; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETfma64lite_pipe = 0b010010010; DSET = 0b010010010; ENCODING Opcode9 = Opcode; Bop = `Bop@AND; nA3 = Ra@negate; FComp = fcomp; WriteCC = writeCC; aA3 = Ra@absolute; nB3 = srcConst@negate; BVal1 = bval; aB2 = srcConst@absolute; SrcPred = `Predicate@PT; SrcNot = 0; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "DSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETPfma64lite_pipe = 0b010110111000; DSETP = 0b010110111000; ENCODING Opcode12 = Opcode; FComp = Test; Bop = bopopt; aB2 = Rb@absolute; nA2 = Ra@negate; SrcNot = Pa@not; SrcPred = Pa; aA4 = Ra@absolute; nB4 = Rb@negate; RegB = Rb; RegA = Ra; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !BFiller; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_DSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp Predicate:Pd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" MISALIGNED_REG_ERROR IsEven(((Rb)+((Rb)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETPfma64lite_pipe = 0b010110111000; DSETP = 0b010110111000; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = Rb@negate; aB2 = Rb@absolute; SrcNot = 0; SrcPred = `Predicate@PT; RegB = Rb; RegA = Ra; Pred = Pg; PredNot = Pg@not; Bop = `Bop@AND; PDest = Pd; PNDest = `Predicate@PT; !BFiller; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_DSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETPfma64lite_pipe = 0b0011011_1000; DSETP = 0b0011011_1000; ENCODING Opcode7b4 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = UnaryNeg; aB2 = UnaryAbs; SrcNot = Pa@not; SrcPred = Pa; Bconst=uImm; RegA = Ra; Pred = Pg; PredNot = Pg@not; Bop = bopopt; PDest = Pd; PNDest = nPd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_DSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp Predicate:Pd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETPfma64lite_pipe = 0b0011011_1000; DSETP = 0b0011011_1000; ENCODING Opcode7b4 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = UnaryNeg; aB2 = UnaryAbs; SrcNot = 0; SrcPred = `Predicate@PT; Bconst=uImm; RegA = Ra; Pred = Pg; PredNot = Pg@not; Bop = `Bop@AND; PDest = Pd; PNDest = `Predicate@PT; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_DSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETPfma64lite_pipe = 0b010010111000; DSETP = 0b010010111000; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = srcConst@negate; aB2 = srcConst@absolute; SrcNot = Pa@not; SrcPred = Pa; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegA = Ra; Pred = Pg; PredNot = Pg@not; Bop = bopopt; PDest = Pd; PNDest = nPd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_DSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp Predicate:Pd ',' $( [-][||] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-2))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR Test <= `Test@T : "Comparison operator is not allowed for DSET" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES DSETPfma64lite_pipe = 0b010010111000; DSETP = 0b010010111000; ENCODING Opcode12 = Opcode; FComp = Test; nA2 = Ra@negate; aA4 = Ra@absolute; nB4 = srcConst@negate; aB2 = srcConst@absolute; SrcNot = 0; SrcPred = `Predicate@PT; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegA = Ra; Pred = Pg; PredNot = Pg@not; Bop = `Bop@AND; PDest = Pd; PNDest = `Predicate@PT; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "IMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' [-]Register:Rb ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !Rb@negate && !Rc@negate ) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR PO -> (xmode != `X@X): ".PO cannot be used with .X" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (hib != `HILO@LO)): ".SAT cannot be used with .LO" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (IsOdd(us32) && IsOdd(us32b))) : ".SAT is not allowed for unsigned inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADmio_pipe = 0b010110100; IMAD = 0b010110100; ENCODING Opcode9 = Opcode; HILO3 = HILO; BSigned3 = IsSigned(us32b); PSign3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); Sat = SAT; Xm3 = X; ASigned3 = IsSigned(us32); WriteCC = writeCC; RegC = Rc; !BFiller; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_IMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' SImm(20):uImm /UnaryNeg(noNEG):jneg ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !Rc@negate ) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR PO -> (xmode != `X@X): ".PO cannot be used with .X" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (hib != `HILO@LO)): ".SAT cannot be used with .LO" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (IsOdd(us32) && IsOdd(us32b))) : ".SAT is not allowed for unsigned inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADmio_pipe = 0b0011010_0; IMAD = 0b0011010_0; ENCODING Opcode7b1 = Opcode; HILO3 = HILO; BSigned3 = IsSigned(us32b); PSign3 = PSignMAD(PO,Ra@negate,UnaryNeg,Rc@negate); Sat = SAT; Xm3 = X; ASigned3 = IsSigned(us32); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_IMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !srcConst@negate && !Rc@negate ) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR PO -> (xmode != `X@X): ".PO cannot be used with .X" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (hib != `HILO@LO)): ".SAT cannot be used with .LO" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (IsOdd(us32) && IsOdd(us32b))) : ".SAT is not allowed for unsigned inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADmio_pipe = 0b010010100; IMAD = 0b010010100; ENCODING Opcode9 = Opcode; HILO3 = HILO; BSigned3 = IsSigned(us32b); PSign3 = PSignMAD(PO,Ra@negate,srcConst@negate,Rc@negate); Sat = SAT; Xm3 = X; ASigned3 = IsSigned(us32); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const1_IMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' [-]Register:Rb ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !Rb@negate && !srcConst@negate ) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR PO -> (xmode != `X@X): ".PO cannot be used with .X" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (hib != `HILO@LO)): ".SAT cannot be used with .LO" ILLEGAL_INSTR_ENCODING_ERROR (SAT -> (IsOdd(us32) && IsOdd(us32b))) : ".SAT is not allowed for unsigned inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADmio_pipe = 0b010100100; IMAD = 0b010100100; ENCODING Opcode9 = Opcode; HILO3 = HILO; BSigned3 = IsSigned(us32b); PSign3 = PSignMAD(PO,Ra@negate,Rb@negate,srcConst@negate); Sat = SAT; Xm3 = X; ASigned3 = IsSigned(us32); WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "IMAD32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib /PO(noPO):po Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' SImm(32):sImm ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR Rd == Rc : "Destination register must be the same as input register 3" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMAD32Imio_pipe = 0b000100; IMAD32I = 0b000100; ENCODING Opcode6 = Opcode; BSigned4 = IsSigned(us32b); PSign2 = PSign(PO,Ra@negate,Rc@negate); ASigned2 = IsSigned(us32); WriteCCI = writeCC; Imm32 = sImm; Pred = Pg; PredNot = Pg@not; Dest = IDENTICAL(Rd,Rc); RegA = Ra; HILO2 = HILO; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "IMADSP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerSPA:spa /IntegerSPB:spb /IntegerSPC:spc Register:Rd /optCC(noCC):writeCC ',' Register:Ra ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR !((IsSPASigned(spa) || IsSPBSigned(spb)) && !IsSPCSigned(spc)): "IMADSP with either .saext and .sbext signed, as well as .scext unsigned is illegal. Either .saext signed or .sbext signed requires that .scext also be signed." ILLEGAL_INSTR_ENCODING_ERROR !(!IsSPASigned(spa) && !IsSPBSigned(spb) && IsSPCSigned(spc)): "IMADSP with both .saext and .sbext unsigned, as well as .scext signed is illegal. Both .saext unsigned and .sbext unsigned requires that .scext also be unsigned." ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "IMADSP is deprecated!" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADSPmio_pipe = 0b010110101; IMADSP = 0b010110101; ENCODING Opcode9 = Opcode; SABCExt =* GetSPExtract(spc, spa, spb); WriteCC = writeCC; RegC = Rc; !BFiller; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_IMADSP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerSPA:spa /IntegerSPB:spb /IntegerSPC:spc Register:Rd /optCC(noCC):writeCC ',' Register:Ra ',' SImm(20):uImm ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR !((IsSPASigned(spa) || IsSPBSigned(spb)) && !IsSPCSigned(spc)): "IMADSP with either .saext and .sbext signed, as well as .scext unsigned is illegal. Either .saext signed or .sbext signed requires that .scext also be signed." ILLEGAL_INSTR_ENCODING_ERROR !(!IsSPASigned(spa) && !IsSPBSigned(spb) && IsSPCSigned(spc)): "IMADSP with both .saext and .sbext unsigned, as well as .scext signed is illegal. Both .saext unsigned and .sbext unsigned requires that .scext also be unsigned." ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "IMADSP is deprecated!" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADSPmio_pipe = 0b0011010_1; IMADSP = 0b0011010_1; ENCODING Opcode7b1 = Opcode; SABCExt =* GetSPExtract(spc, spa, spb); WriteCC = writeCC; RegC = Rc; Bconst=uImm ; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_IMADSP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerSPA:spa /IntegerSPB:spb /IntegerSPC:spc Register:Rd /optCC(noCC):writeCC ',' Register:Ra ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR !((IsSPASigned(spa) || IsSPBSigned(spb)) && !IsSPCSigned(spc)): "IMADSP with either .saext and .sbext signed, as well as .scext unsigned is illegal. Either .saext signed or .sbext signed requires that .scext also be signed." ILLEGAL_INSTR_ENCODING_ERROR !(!IsSPASigned(spa) && !IsSPBSigned(spb) && IsSPCSigned(spc)): "IMADSP with both .saext and .sbext unsigned, as well as .scext signed is illegal. Both .saext unsigned and .sbext unsigned requires that .scext also be unsigned." ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "IMADSP is deprecated!" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADSPmio_pipe = 0b010010101; IMADSP = 0b010010101; ENCODING Opcode9 = Opcode; SABCExt =* GetSPExtract(spc, spa, spb); WriteCC = writeCC; RegC = Rc; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const1_IMADSP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerSPA:spa /IntegerSPB:spb /IntegerSPC:spc Register:Rd /optCC(noCC):writeCC ',' Register:Ra ',' Register:Rb ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR !((IsSPASigned(spa) || IsSPBSigned(spb)) && !IsSPCSigned(spc)): "IMADSP with either .saext and .sbext signed, as well as .scext unsigned is illegal. Either .saext signed or .sbext signed requires that .scext also be signed." ILLEGAL_INSTR_ENCODING_ERROR !(!IsSPASigned(spa) && !IsSPBSigned(spb) && IsSPCSigned(spc)): "IMADSP with both .saext and .sbext unsigned, as well as .scext signed is illegal. Both .saext unsigned and .sbext unsigned requires that .scext also be unsigned." ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "IMADSP is deprecated!" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMADSPmio_pipe = 0b010100101; IMADSP = 0b010100101; ENCODING Opcode9 = Opcode; SABCExt =* GetSPExtract(spc, spa, spb); WriteCC = writeCC; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "IMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib RegisterFAU:Rd /optCC(noCC):writeCC ',' RegisterFAU:Ra ',' RegisterFAU:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMULmio_pipe = 0b0101110000111; IMUL = 0b0101110000111; ENCODING Opcode13 = Opcode; WriteCC = writeCC; BSigned = IsSigned(us32b); ASigned = IsSigned(us32); HILO = HILO; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !BFiller; !NencIMUL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_IMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib RegisterFAU:Rd /optCC(noCC):writeCC ',' RegisterFAU:Ra ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMULmio_pipe = 0b0011100_00111; IMUL = 0b0011100_00111; ENCODING Opcode7b5 = Opcode; WriteCC = writeCC; BSigned = IsSigned(us32b); ASigned = IsSigned(us32); HILO = HILO; Bconst=uImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencIMUL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_IMUL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib RegisterFAU:Rd /optCC(noCC):writeCC ',' RegisterFAU:Ra ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMULmio_pipe = 0b0100110000111; IMUL = 0b0100110000111; ENCODING Opcode13 = Opcode; WriteCC = writeCC; BSigned = IsSigned(us32b); ASigned = IsSigned(us32); HILO = HILO; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencIMUL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "IMUL32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer32(S32):us32 /Integer32(S32):us32b } /HILO(LO):hib RegisterFAU:Rd /optCC(noCC):writeCC ',' RegisterFAU:Ra ',' SImm(32):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES IMUL32Imio_pipe = 0b00011111; IMUL32I = 0b00011111; ENCODING Opcode8 = Opcode; BSigned2 = IsSigned(us32b); ASigned2 = IsSigned(us32); HILO2 = HILO; WriteCCI = writeCC; Imm32 = sImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "IADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> !X) && (X ->!PO) : ".PO and .X cannot be simultaneously specified" ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !Rb@negate ) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (X -> (!Ra@negate || !Rb@negate)) : ".X cannot be used with '-' on both of the inputs" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Ra and Rb cannot both be negated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES IADDfmai_pipe = 0b0101110000010; IADDfxu_pipe = 0b0101110000010; IADD = 0b0101110000010; ENCODING Opcode13 = Opcode; Sat = SAT; PSign = PSign(PO,Ra@negate,Rb@negate); WriteCC = writeCC; Xm = xmode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !BFiller; !NencIADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_IADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm /UnaryNeg(noNEG):jneg $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> !X) && (X ->!PO) : ".PO and .X cannot be simultaneously specified" ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !jneg) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !jneg ) : "Ra and Sb cannot both be negated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES IADDfmai_pipe = 0b0011100_00010; IADDfxu_pipe = 0b0011100_00010; IADD = 0b0011100_00010; ENCODING Opcode7b5 = Opcode; Sat = SAT; PSign = PSign(PO,Ra@negate,UnaryNeg); WriteCC = writeCC; Xm = xmode; Bconst=uImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencIADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_IADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> !X) && (X ->!PO) : ".PO and .X cannot be simultaneously specified" ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !srcConst@negate ) ) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (X -> (!Ra@negate || !srcConst@negate)) : ".X cannot be used with '-' on both of the inputs" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !srcConst@negate) : "Ra and Sb cannot both be negated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES IADDfmai_pipe = 0b0100110000010; IADDfxu_pipe = 0b0100110000010; IADD = 0b0100110000010; ENCODING Opcode13 = Opcode; Sat = SAT; PSign = PSign(PO,Ra@negate,srcConst@negate); WriteCC = writeCC; Xm = xmode; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencIADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "IADD3" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DIR(NS):dir /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra/Partsel("32"):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] RegisterFAU:Rb/Partsel("32"):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] RegisterFAU:Rc/Partsel("32"):csel {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (!(Ra@negate && Rb@negate)): "Ra and Rb cannot both be negated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES IADD3fmai_pipe = 0b010111001100; IADD3fxu_pipe = 0b010111001100; IADD3 = 0b010111001100; ENCODING Opcode12 = Opcode; nA7 = Ra@negate; nB7 = Rb@negate; nC7 = Rc@negate; Xm9 = xmode; WriteCC = writeCC; RegC = Rc; LRS = dir; Apart = asel; Bpart = bsel; Cpart = csel; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencIADD3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "BImm_IADD3" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(20):uImm20 /UnaryNeg(noNEG):jneg ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (!(Ra@negate && jneg)): "Ra and Sb (imm) cannot both be negated" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm20)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES IADD3fmai_pipe = 0b0011100_1100; IADD3fxu_pipe = 0b0011100_1100; IADD3 = 0b0011100_1100; ENCODING Opcode7b4 = Opcode; nA7 = Ra@negate; nB7 = jneg; nC7 = Rc@negate; Xm9 = xmode; WriteCC = writeCC; RegC = Rc; Bconst = uImm20; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "BConst_IADD3" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (!(Ra@negate && srcConst@negate)): "Ra and Sb (const) cannot both be negated" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES IADD3fmai_pipe = 0b010011001100; IADD3fxu_pipe = 0b010011001100; IADD3 = 0b010011001100; ENCODING Opcode12 = Opcode; nA7 = Ra@negate; nB7 = srcConst@negate; nC7 = Rc@negate; Xm9 = xmode; WriteCC = writeCC; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "IADD32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po /SAT(noSAT):sat /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [-] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(32):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> !X) && (X ->!PO) : ".PO and .X cannot be simultaneously specified" ILLEGAL_INSTR_ENCODING_ERROR (PO -> !Ra@negate) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES IADD32Ifmai_pipe = 0b0001110; IADD32Ifxu_pipe = 0b0001110; IADD32I = 0b0001110; ENCODING Opcode7 = Opcode; PSign2 = PSign32(PO,Ra@negate); Sat2 = SAT; Xm2 = xmode; WriteCCI = writeCC; Imm32 = sImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "ISCADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' UImm(5):shift $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !Rb@negate ) ) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES ISCADDfxu_pipe = 0b0101110000011; ISCADD = 0b0101110000011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; WriteCC = writeCC; Imm5I = shift; PSign = PSign(PO,Ra@negate,Rb@negate); !BFiller; !NencISCADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_ISCADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm /UnaryNeg(noNEG):jneg ',' UImm(5):shift $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate ) ) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES ISCADDfxu_pipe = 0b0011100_00011; ISCADD = 0b0011100_00011; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; WriteCC = writeCC; Imm5I = shift; PSign = PSign(PO,Ra@negate,UnaryNeg); !NencISCADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_ISCADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PO(noPO):po $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' UImm(5):shift $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (PO -> ( !Ra@negate && !srcConst@negate ) ) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES ISCADDfxu_pipe = 0b0100110000011; ISCADD = 0b0100110000011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); WriteCC = writeCC; Imm5I = shift; PSign = PSign(PO,Ra@negate,srcConst@negate); !NencISCADD; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "ISCADD32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(32):sImm ',' UImm(5):shift $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES ISCADD32Ifxu_pipe = 0b000101; ISCADD32I = 0b000101; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm32 = sImm; WriteCCI = writeCC; Imm5Ib = shift; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "IMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /XMode(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = ((xmode==`XMode@XMED)||(xmode==`XMode@XLO)); OPCODES IMNMXfxu_pipe = 0b0101110000100; IMNMX = 0b0101110000100; ENCODING Opcode13 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; XMode = XMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; SrcPred = Pa; SrcNot = Pa@not; !BFiller; !Sat; !aB; !nB; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_IMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /XMode(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = ((xmode==`XMode@XMED)||(xmode==`XMode@XLO)); OPCODES IMNMXfxu_pipe = 0b0011100_00100; IMNMX = 0b0011100_00100; ENCODING Opcode7b5 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; XMode = XMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; SrcPred = Pa; SrcNot = Pa@not; !Sat; !aB; !nB; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_IMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /XMode(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = ((xmode==`XMode@XMED)||(xmode==`XMode@XLO)); OPCODES IMNMXfxu_pipe = 0b0100110000100; IMNMX = 0b0100110000100; ENCODING Opcode13 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; XMode = XMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); SrcPred = Pa; SrcNot = Pa@not; !Sat; !aB; !nB; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "BFE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /BREV(noBREV):brev $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES BFEfxu_pipe = 0b0101110000000; BFE = 0b0101110000000; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; WriteCC = writeCC; Signed = IsSigned(Integer32); Brev = BREV; !BFiller; !NencBFE; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_BFE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /BREV(noBREV):brev $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES BFEfxu_pipe = 0b0011100_00000; BFE = 0b0011100_00000; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; WriteCC = writeCC; Signed = IsSigned(Integer32); Brev = BREV; !NencBFE; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_BFE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /BREV(noBREV):brev $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES BFEfxu_pipe = 0b0100110000000; BFE = 0b0100110000000; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); WriteCC = writeCC; Signed = IsSigned(Integer32); Brev = BREV; !NencBFE; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "BFI" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES BFIfxu_pipe = 0b0101101111110; BFI = 0b0101101111110; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; WriteCC = writeCC; !BFiller; !NencBFI; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_BFI" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES BFIfxu_pipe = 0b0011011_11110; BFI = 0b0011011_11110; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; RegC = Rc; WriteCC = writeCC; !NencBFI; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const_BFI" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES BFIfxu_pipe = 0b0100101111110; BFI = 0b0100101111110; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; WriteCC = writeCC; !NencBFI; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const1_BFI" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES BFIfxu_pipe = 0b0101001111110; BFI = 0b0101001111110; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; WriteCC = writeCC; !NencBFI; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /CWMode(C):wmode /XXHI(noX):xmode /BREV(noBREV):brev $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (xmode != `XXHI@INVALIDSHRXMODE1): "Invalid XXHI (xmode) field value INVALIDSHRXMODE1" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `XXHI@X)||(xmode == `XXHI@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHR" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = ((xmode==`XXHI@X)||(xmode==`XXHI@XHI)); OPCODES SHRfxu_pipe = 0b0101110000101; SHR = 0b0101110000101; ENCODING Opcode13 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; XMode = XXHI; Brev = BREV; M = CWMode; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !BFiller; !NencSHR; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_SHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /CWMode(C):wmode /XXHI(noX):xmode /BREV(noBREV):brev $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (xmode != `XXHI@INVALIDSHRXMODE1): "Invalid XXHI (xmode) field value INVALIDSHRXMODE1" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `XXHI@X)||(xmode == `XXHI@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHR" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = ((xmode==`XXHI@X)||(xmode==`XXHI@XHI)); OPCODES SHRfxu_pipe = 0b0011100_00101; SHR = 0b0011100_00101; ENCODING Opcode7b5 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; XMode = XXHI; Brev = BREV; M = CWMode; Bconst=uImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSHR; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_SHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /CWMode(C):wmode /XXHI(noX):xmode /BREV(noBREV):brev $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (xmode != `XXHI@INVALIDSHRXMODE1): "Invalid XXHI (xmode) field value INVALIDSHRXMODE1" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `XXHI@X)||(xmode == `XXHI@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHR" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = ((xmode==`XXHI@X)||(xmode==`XXHI@XHI)); OPCODES SHRfxu_pipe = 0b0100110000101; SHR = 0b0100110000101; ENCODING Opcode13 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; XMode = XXHI; Brev = BREV; M = CWMode; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSHR; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CWMode(C):wmode /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `X@X)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X option is used in SHL" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES SHLfxu_pipe = 0b0101110001001; SHL = 0b0101110001001; ENCODING Opcode13= Opcode; WriteCC = writeCC; Xm = X; M = CWMode; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !BFiller; !NencSHL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_SHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CWMode(C):wmode /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `X@X)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X option is used in SHL" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES SHLfxu_pipe = 0b0011100_01001; SHL = 0b0011100_01001; ENCODING Opcode7b5 = Opcode; WriteCC = writeCC; Xm = X; M = CWMode; RegA = Ra; Bconst=uImm; PredNot = Pg@not; Pred = Pg; Dest = Rd; !NencSHL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_SHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CWMode(C):wmode /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `X@X)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X option is used in SHL" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES SHLfxu_pipe = 0b0100110001001; SHL = 0b0100110001001; ENCODING Opcode13 = Opcode; WriteCC = writeCC; Xm = X; M = CWMode; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSHL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SHF_L_imm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /SHF_L:shfl /CWMode(C):wmode /maxShift("32"):maxshift /SHFXMode(NONE):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(32):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (xmode != `SHFXMode@HI) && (xmode != `SHFXMode@XHI) : "Illegal instruction encoding: .HI and .XHI are only allowed with .dir = .R " ILLEGAL_INSTR_ENCODING_ERROR (maxshift != `maxShift@S64) : "Illegal instruction encoding: .S64 can only be specified with .dir = .R " OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (maxshift != `maxShift@INVALIDMAXSHIFT3): "Invalid maxShift (maxshift) field value INVALIDMAXSHIFT3" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `SHFXMode@X)||(xmode == `SHFXMode@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHF.L" PROPERTIES SECONDARY; PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 8; ISRC_C_SIZE = 32; DOES_READ_CC = ((xmode==`SHFXMode@X)||(xmode==`SHFXMode@XHI)); OPCODES SHFfxu_pipe = 0b0011011_11111; SHF = 0b0011011_11111; ENCODING Opcode7b5 = Opcode; M_H = CWMode; XmdSHF = xmode; WriteCC = writeCC; RegC = Rc; MaxShift = maxshift; Imm06_shf = uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencSHF; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SHF_R_imm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /SHF_R:shfr /CWMode(C):wmode /maxShift("32"):maxshift /SHFXMode(NONE):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(32):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (maxshift != `maxShift@INVALIDMAXSHIFT3): "Invalid maxShift (maxshift) field value INVALIDMAXSHIFT3" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `SHFXMode@X)||(xmode == `SHFXMode@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHF.L" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = ((xmode==`SHFXMode@X)||(xmode==`SHFXMode@XHI)); OPCODES SHFfxu_pipe = 0b0011100_11111; SHF = 0b0011100_11111; ENCODING Opcode7b5 = Opcode; M_H = CWMode; XmdSHF = xmode; WriteCC = writeCC; RegC = Rc; MaxShift = maxshift; Imm06_shf = uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencSHF; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SHF_L_reg" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /SHF_L:shfl /CWMode(C):wmode /maxShift("32"):maxshift /SHFXMode(NONE):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (xmode != `SHFXMode@HI) && (xmode != `SHFXMode@XHI) : "Illegal instruction encoding: .HI and .XHI are only allowed with .dir = .R " ILLEGAL_INSTR_ENCODING_ERROR (maxshift != `maxShift@S64) : "Illegal instruction encoding: .S64 can only be specified with .dir = .R " OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (maxshift != `maxShift@INVALIDMAXSHIFT3): "Invalid maxShift (maxshift) field value INVALIDMAXSHIFT3" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `SHFXMode@X)||(xmode == `SHFXMode@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHF.L" PROPERTIES SECONDARY; PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = ((xmode==`SHFXMode@X)||(xmode==`SHFXMode@XHI)); OPCODES SHFfxu_pipe = 0b0101101111111; SHF = 0b0101101111111; ENCODING Opcode13 = Opcode; M_H = CWMode; XmdSHF = xmode; WriteCC = writeCC; RegC = Rc; MaxShift = maxshift; RegB = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencSHF2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SHF_R_reg" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /SHF_R:shfr /CWMode(C):wmode /maxShift("32"):maxshift /SHFXMode(NONE):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (maxshift != `maxShift@INVALIDMAXSHIFT3): "Invalid maxShift (maxshift) field value INVALIDMAXSHIFT3" UNPREDICTABLE_BEHAVIOR_WARNING (((xmode == `SHFXMode@X)||(xmode == `SHFXMode@XHI)) -> (writeCC == `optCC@CC)) : "Unpredictable Behavior Error: .CC option must be used when .X or .XHI option is used in SHF.L" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = ((xmode==`SHFXMode@X)||(xmode==`SHFXMode@XHI)); OPCODES SHFfxu_pipe = 0b0101110011111; SHF = 0b0101110011111; ENCODING Opcode13 = Opcode; M_H = CWMode; XmdSHF = xmode; WriteCC = writeCC; RegC = Rc; MaxShift = maxshift; RegB = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencSHF2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "LOP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode /POP(F):pop Predicate(PT):Pd ',' $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [~] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LOPfmai_pipe = 0b0101110001000; LOPfxu_pipe = 0b0101110001000; LOP = 0b0101110001000; ENCODING Opcode13= Opcode; PredDstLop = Pd; POP = POP; Xm = X; LOP = LOP; nA_L = Ra@invert; nB_L = Rb@invert; WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !BFiller; !NencLOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_LOP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode /POP(F):pop Predicate(PT):Pd ',' $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm /UnaryInv(noINV):jinv $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LOPfmai_pipe = 0b0011100_01000; LOPfxu_pipe = 0b0011100_01000; LOP = 0b0011100_01000; ENCODING Opcode7b5 = Opcode; PredDstLop = Pd; POP = POP; Xm = X; LOP = LOP; nA_L = Ra@invert; nB_L = UnaryInv; WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; !NencLOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_LOP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode /POP(F):pop Predicate(PT):Pd ',' $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [~]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LOPfmai_pipe = 0b0100110001000; LOPfxu_pipe = 0b0100110001000; LOP = 0b0100110001000; ENCODING Opcode13 = Opcode; PredDstLop = Pd; POP = POP; Xm = X; LOP = LOP; nA_L = Ra@invert; nB_L = srcConst@invert; WriteCC = writeCC; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencLOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "LOP32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(32):uImm /UnaryInv(noINV):jinv $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LOP32Ifmai_pipe = 0b000001; LOP32Ifxu_pipe = 0b000001; LOP32I = 0b000001; ENCODING Opcode6 = Opcode; Xm_I = X; nB_L2 = UnaryInv; nA_L2 = Ra@invert; LOP_I = LOP; WriteCCI = writeCC; Imm32 = uImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "LOP3_LUT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LUTOnly:lut /X(noX):xmode /POP(F):pop Predicate(PT):Pd ',' $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ ',' UImm(8):Imm8 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES LOP3fmai_pipe = 0b0101101111100; LOP3fxu_pipe = 0b0101101111100; LOP3 = 0b0101101111100; ENCODING Opcode13= Opcode; PredDstLop = Pd; WriteCC = writeCC; RegC = Rc; POP2 = pop; Xm5 = xmode; LOPImm = Imm8; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "LOP3_LUT_BImm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LUTOnly:lut /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ ',' UImm(8):Imm8 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES LOP3fmai_pipe = 0b001111; LOP3fxu_pipe = 0b001111; LOP3 = 0b001111; ENCODING Opcode6= Opcode; WriteCC = writeCC; RegC = Rc; Xm6 = xmode; LOPImm2 = Imm8; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst = uImm; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "LOP3_LUT_BConst" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LUTOnly:lut /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ ',' UImm(8):Imm8 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES LOP3fmai_pipe = 0b0000001; LOP3fxu_pipe = 0b0000001; LOP3 = 0b0000001; ENCODING Opcode7= Opcode; WriteCC = writeCC; RegC = Rc; Xm10 = xmode; LOPImm2 = Imm8; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "LOP3" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode /POP(F):pop Predicate(PT):Pd ',' $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [~] RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( [~] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES LOP3fmai_pipe = 0b0101101111100; LOP3fxu_pipe = 0b0101101111100; LOP3 = 0b0101101111100; ENCODING Opcode13= Opcode; PredDstLop = Pd; WriteCC = writeCC; RegC = Rc; POP2 = pop; Xm5 = xmode; LOPImm = LutImm8(lop,Ra@invert,Rb@invert,Rc@invert); Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "LOP3_BImm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm /UnaryInv(noINV):jinv ',' $( [~] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES LOP3fmai_pipe = 0b001111; LOP3fxu_pipe = 0b001111; LOP3 = 0b001111; ENCODING Opcode6= Opcode; WriteCC = writeCC; RegC = Rc; Xm6 = xmode; LOPImm2 = LutImm8(lop,Ra@invert,jinv,Rc@invert); Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst = uImm; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "LOP3_Bconst" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOP:lop /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( [~] RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [~]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( [~] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES LOP3fmai_pipe = 0b0000001; LOP3fxu_pipe = 0b0000001; LOP3 = 0b0000001; ENCODING Opcode7= Opcode; WriteCC = writeCC; RegC = Rc; Xm10 = xmode; LOPImm2 = LutImm8(lop,Ra@invert,srcConst@invert,Rc@invert); Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "FLO" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /SH(noSH):sh Register:Rd /optCC(noCC):writeCC ',' [~]Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES FLOmio_pipe = 0b0101110000110; FLO = 0b0101110000110; ENCODING Opcode13 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; SH = SH; nB_L = Rb@invert; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; !BFiller; !RegA; !NencFLO; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_FLO" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /SH(noSH):sh Register:Rd /optCC(noCC):writeCC ',' SImm(20):uImm /UnaryInv(noINV):jinv $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES FLOmio_pipe = 0b0011100_00110; FLO = 0b0011100_00110; ENCODING Opcode7b5 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; SH = SH; nB_L = UnaryInv; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; !RegA; !NencFLO; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_FLO" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer32(S32):us32 /SH(noSH):sh Register:Rd /optCC(noCC):writeCC ',' [~]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES FLOmio_pipe = 0b0100110000110; FLO = 0b0100110000110; ENCODING Opcode13 = Opcode; Signed = IsSigned(Integer32); WriteCC = writeCC; SH = SH; nB_L = srcConst@invert; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !RegA; !NencFLO; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ISET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010110110101; ISET = 0b010110110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; RegB = Rb; IComp = ICmpAll; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; Xm = X; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_ISET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010110110101; ISET = 0b010110110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; RegB = Rb; IComp = ICmpAll; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; Xm = X; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_ISET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b0011011_0101; ISET = 0b0011011_0101; ENCODING Opcode7b4 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bconst=uImm; IComp = ICmpAll; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_ISET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b0011011_0101; ISET = 0b0011011_0101; ENCODING Opcode7b4 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bconst=uImm; IComp = ICmpAll; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_ISET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010010110101; ISET = 0b010010110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); IComp = ICmpAll; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_ISET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010010110101; ISET = 0b010010110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); IComp = ICmpAll; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "ISET_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpU:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010110110101; ISET = 0b010110110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; RegB = Rb; IComp = ICmpU; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; Xm = X; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_ISET_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpU:icomp /Integer32(S32):us32 /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010110110101; ISET = 0b010110110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; RegB = Rb; IComp = ICmpU; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; Xm = X; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Imm_ISET_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpU:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b0011011_0101; ISET = 0b0011011_0101; ENCODING Opcode7b4 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bconst=uImm; IComp = ICmpU; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_ISET_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpU:icomp /Integer32(S32):us32 /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b0011011_0101; ISET = 0b0011011_0101; ENCODING Opcode7b4 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bconst=uImm; IComp = ICmpU; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Const_ISET_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpU:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010010110101; ISET = 0b010010110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); IComp = ICmpU; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_ISET_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /ICmpU:icomp /Integer32(S32):us32 /X(noX):xmode $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETfxu_pipe = 0b010010110101; ISET = 0b010010110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Signed = IsSigned(Integer32); RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); IComp = ICmpU; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; Xm = X; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "ISETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010110110110; ISETP = 0b010110110110; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); Bop = bopopt; Xm = X; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !NencISETP; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_ISETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode Predicate:Pd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010110110110; ISETP = 0b010110110110; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); Bop = `Bop@AND; Xm = X; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; !NencISETP; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_ISETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b0011011_0110; ISETP = 0b0011011_0110; ENCODING Opcode7b4 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); Bop = bopopt; Xm = X; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_ISETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode Predicate:Pd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b0011011_0110; ISETP = 0b0011011_0110; ENCODING Opcode7b4 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); Bop = `Bop@AND; Xm = X; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_ISETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010010110110; ISETP = 0b010010110110; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); Bop = bopopt; Xm = X; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_ISETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 /X(noX):xmode Predicate:Pd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010010110110; ISETP = 0b010010110110; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); Bop = `Bop@AND; Xm = X; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "ISETP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(U32):us32 /X(noX):xmode /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (us32 != `Integer32@S32): ".fmt cannot be S32 for unsigned only comparisons" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010110110110; ISETP = 0b010110110110; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); Bop = bopopt; Xm = X; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !NencISETP; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_ISETP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(U32):us32 /X(noX):xmode Predicate:Pd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (us32 != `Integer32@S32): ".fmt cannot be S32 for unsigned only comparisons" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010110110110; ISETP = 0b010110110110; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); Bop = `Bop@AND; Xm = X; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; !NencISETP; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Imm_ISETP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(U32):us32 /X(noX):xmode /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (us32 != `Integer32@S32): ".fmt cannot be S32 for unsigned only comparisons" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b0011011_0110; ISETP = 0b0011011_0110; ENCODING Opcode7b4 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); Bop = bopopt; Xm = X; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_ISETP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(U32):us32 /X(noX):xmode Predicate:Pd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (us32 != `Integer32@S32): ".fmt cannot be S32 for unsigned only comparisons" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b0011011_0110; ISETP = 0b0011011_0110; ENCODING Opcode7b4 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); Bop = `Bop@AND; Xm = X; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Const_ISETP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(U32):us32 /X(noX):xmode /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (us32 != `Integer32@S32): ".fmt cannot be S32 for unsigned only comparisons" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010010110110; ISETP = 0b010010110110; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); Bop = bopopt; Xm = X; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_ISETP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(U32):us32 /X(noX):xmode Predicate:Pd ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (us32 != `Integer32@S32): ".fmt cannot be S32 for unsigned only comparisons" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES ISETPfxu_pipe = 0b010010110110; ISETP = 0b010010110110; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); Bop = `Bop@AND; Xm = X; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; !NencISETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "ICMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b010110110100; ICMP = 0b010110110100; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); RegC = Rc; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; Dest = Rd; !BFiller; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_ICMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b0011011_0100; ICMP = 0b0011011_0100; ENCODING Opcode7b4 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); RegC = Rc; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bconst=uImm; Dest = Rd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const_ICMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b010010110100; ICMP = 0b010010110100; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); RegC = Rc; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Dest = Rd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const1_ICMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b010100110100; ICMP = 0b010100110100; ENCODING Opcode12 = Opcode; IComp = ICmpAll; Signed = IsSigned(Integer32); RegC = Rb; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Dest = Rd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "ICMP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b010110110100; ICMP = 0b010110110100; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); RegC = Rc; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; Dest = Rd; !BFiller; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Imm_ICMP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b0011011_0100; ICMP = 0b0011011_0100; ENCODING Opcode7b4 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); RegC = Rc; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bconst=uImm; Dest = Rd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Const_ICMP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b010010110100; ICMP = 0b010010110100; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); RegC = Rc; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Dest = Rd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Const1_ICMP_U" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpU:icomp /Integer32(S32):us32 $( Register:Rd )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES ICMPfxu_pipe = 0b010100110100; ICMP = 0b010100110100; ENCODING Opcode12 = Opcode; IComp = ICmpU; Signed = IsSigned(Integer32); RegC = Rb; Pred = Pg; PredNot = Pg@not; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Dest = Rd; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "POPC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd ',' [~]Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES POPCmio_pipe = 0b0101110000001; POPC = 0b0101110000001; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; !RegA; RegB = Rb; !nA_L; nB_L = Rb@invert; !BFiller; !NencPOPC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_POPC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd ',' SImm(20):uImm /UnaryInv(noINV):jinv $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES POPCmio_pipe = 0b0011100_00001; POPC = 0b0011100_00001; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; !RegA; Bconst=uImm; !nA_L; nB_L = UnaryInv; !NencPOPC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_POPC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd ',' [~]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES POPCmio_pipe = 0b0100110000001; POPC = 0b0100110000001; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; !RegA; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !nA_L; nB_L = srcConst@invert; !NencPOPC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "XMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer16(U16):us16 /Integer16(U16):us16b } /PSL(noPSL):psl /XMADcop(C32):cop /MRG(noMRG):mrg /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES XMADfmai_pipe = 0b0101101100; XMADfxu_pipe = 0b0101101100; XMAD = 0b0101101100; ENCODING Opcode10 = Opcode; HILO2 = asel; XMADCop = cop; BSigned5 = IsSigned16(us16b); ASigned5 = IsSigned16(us16); WriteCC = writeCC; RegC = Rc; Xm7 = xmode; MRG = mrg; PSL = psl; HILO4 = bsel; !XMADFiller; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "ImmB_XMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer16(U16):us16 /U16(U16):us16b } /PSL(noPSL):psl /XMADcop(C32):cop /MRG(noMRG):mrg /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES XMADfmai_pipe = 0b0011011_00; XMADfxu_pipe = 0b0011011_00; XMAD = 0b0011011_00; ENCODING Opcode7b2 = Opcode; HILO2 = asel; XMADCop = cop; BSigned5 = 0; ASigned5 = IsSigned16(us16); WriteCC = writeCC; RegC = Rc; Xm7 = xmode; MRG = mrg; PSL = psl; !XMADImmFiller; Imm16 = uImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImmB_XMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer16:us16 /S16:us16b /PSL(noPSL):psl /XMADcop(C32):cop /MRG(noMRG):mrg /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES XMADfmai_pipe = 0b0011011_00; XMADfxu_pipe = 0b0011011_00; XMAD = 0b0011011_00; ENCODING Opcode7b2 = Opcode; HILO2 = asel; XMADCop = cop; BSigned5 = 1; ASigned5 = IsSigned16(us16); WriteCC = writeCC; RegC = Rc; Xm7 = xmode; MRG = mrg; PSL = psl; !XMADImmFiller; Imm16 = uImm; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "ConstB_XMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer16(U16):us16 /Integer16(U16):us16b } /PSL(noPSL):psl /XMADcop2(C32):cop /MRG(noMRG):mrg /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset]/H1H0(H0):bsel ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES XMADfmai_pipe = 0b0100111; XMADfxu_pipe = 0b0100111; XMAD = 0b0100111; ENCODING Opcode7 = Opcode; MRG2 = mrg; PSL2 = psl; Xm8 = xmode; HILO2 = asel; HILO5 = bsel; XMADCop2 = cop; BSigned5 = IsSigned16(us16b); ASigned5 = IsSigned16(us16); WriteCC = writeCC; RegC = Rc; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "ConstC_XMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /Integer16(U16):us16 /Integer16(U16):us16b } /XMADcop2(C32):cop /X(noX):xmode $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = (xmode==`X@X); OPCODES XMADfmai_pipe = 0b010100010; XMADfxu_pipe = 0b010100010; XMAD = 0b010100010; ENCODING Opcode9 = Opcode; Xm8 = xmode; HILO2 = asel; HILO5 = bsel; XMADCop2 = cop; BSigned5 = IsSigned16(us16b); ASigned5 = IsSigned16(us16); WriteCC = writeCC; RegC = Rb; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer16:safmt /Integer16:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer8:safmt /Integer16:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VInteger32:safmt /Integer16:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' [-]Register:Rb /H1H0(H0):bsel ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "b8_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer16:safmt /Integer8:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer8:safmt /Integer8:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VInteger32:safmt /Integer8:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' [-]Register:Rb /B1B0(B0):bsel ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "b32_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer16:safmt /VInteger32:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra /H1H0(H0):asel ',' [-]Register:Rb ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "a8_b32_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer8:safmt /VInteger32:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra /B1B0(B0):asel ',' [-]Register:Rb ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "a32_b32_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VInteger32:safmt /VInteger32:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' [-]Register:Rb ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,Rb@negate,Rc@negate); VScale = VMadScale; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer16:safmt /UIntegerNo32No64:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,0,Rc@negate); VScale = VMadScale; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer16:safmt /SIntegerNo32No64:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(16):sImm ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !sImm@sign && !Rc@negate)) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,sImm@sign,Rc@negate); VScale = VMadScale; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer8:safmt /UIntegerNo32No64:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(17):uImm ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,uImm@sign,Rc@negate); VScale = VMadScale; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Integer8:safmt /SIntegerNo32No64:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(16):sImm ',' $( [-] Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !sImm@sign && !Rc@negate)) : ".PO cannot be used with '-' on either input" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,sImm@sign,Rc@negate); VScale = VMadScale; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VInteger32:safmt /UInteger:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' SSImm(17):uImm ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,uImm@sign,Rc@negate); VScale = VMadScale; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "a32_SImm_VMAD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VInteger32:safmt /SInteger:sbfmt /PO(noPO):po /VMadScale(PASS):vscale /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-]Register:Ra ',' SSImm(16):sImm ',' [-]Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !sImm@sign && !Rc@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "VMAD.*32 is deprecated!" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (vscale != `VMadScale@INVALIDVMADSCALE3): "Invalid VMadScale (vscale) field value INVALIDVMADSCALE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_FMA64; OPCODES VMADmio_pipe = 0b01011111; VMAD = 0b01011111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; WriteCC = writeCC; AVGMode3 = PSignMAD(PO,Ra@negate,sImm@sign,Rc@negate); VScale = VMadScale; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /Integer16:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /Integer16:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /Integer16:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b8_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /Integer8:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /Integer8:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /Integer8:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b32_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /VInteger32:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /VInteger32:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /VInteger32(S32):sbfmt } /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !Rb@negate)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !Rb@negate) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,Rb@negate); BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /UInteger:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(17):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,uImm@sign); BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /SInteger:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !sImm@sign)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !sImm@sign) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,sImm@sign); BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /UInteger:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(17):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,uImm@sign); BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /SInteger:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !sImm@sign)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !sImm@sign) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,sImm@sign); BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /UInteger:sbfmt /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(17):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,uImm@sign); BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VADD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /SInteger(S16):sbfmt } /PO(noPO):po /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SSImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (PO -> (!Ra@negate && !sImm@sign)) : ".PO cannot be used with '-' on either input" ILLEGAL_INSTR_ENCODING_ERROR (!Ra@negate || !sImm@sign) : "Cannot use '-' on both of the inputs" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VADDfxu_pipe = 0b001000; VADD = 0b001000; ENCODING Opcode6 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; AVGMode2 = PSign(PO,Ra@negate,sImm@sign); BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer16:safmt /Integer16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer8:safmt /Integer16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /VInteger32:safmt /Integer16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b8_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer16:safmt /Integer8:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer8:safmt /Integer8:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /VInteger32:safmt /Integer8:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b32_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer16:safmt /VInteger32:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer8:safmt /VInteger32:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt { /VInteger32(S32):safmt /VInteger32(S32):sbfmt } /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer16:safmt /UInteger16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer16:safmt /SInteger16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer8:safmt /UInteger16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer8:safmt /SInteger16:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /VInteger32:safmt /UInteger:sbfmt /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VABSDIFF" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt { /VInteger32(S32):safmt /SInteger16(S16):sbfmt } /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFFfxu_pipe = 0b01010100; VABSDIFF = 0b01010100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /Integer16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /Integer16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /Integer16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b8_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /Integer8:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /Integer8:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /Integer8:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b32_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /VInteger32:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /VInteger32:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /VInteger32(S32):sbfmt } /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /UInteger16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /SInteger16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /UInteger16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /SInteger16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /UInteger16:sbfmt /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VMNMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /SInteger16(S16):sbfmt } /MN(MN):mnmx /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VMNMXfxu_pipe = 0b0011101; VMNMX = 0b0011101; ENCODING Opcode7 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MN2 = MN; BVideo=0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /Integer16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /Integer16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /Integer16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b8_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /Integer8:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /Integer8:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /Integer8:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b32_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /VInteger32:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /VInteger32:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp { /VInteger32(S32):safmt /VInteger32(S32):sbfmt } /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; RegC = Rc; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /UInteger16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 0; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; Imm16 = uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /SInteger16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 0; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; Imm16 = sImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /UInteger16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 0; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; Imm16 = uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /SInteger16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 0; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; Imm16 = sImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /UInteger16:sbfmt /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 0; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; Imm16 = uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp { /VInteger32(S32):safmt /SInteger16(S16):sbfmt } /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSETfxu_pipe = 0b0100000; VSET = 0b0100000; ENCODING Opcode7 = Opcode; VComp2 = ICmpAll; VOP = VOP; BVideo = 0; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); WriteCC = writeCC; RegA = Ra; Pred = Pg; PredNot = Pg@not; Dest = Rd; Imm16 = sImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /Integer16:sbfmt Predicate:Pd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a8_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /Integer16:sbfmt Predicate:Pd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a32_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /Integer16:sbfmt Predicate:Pd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "b8_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /Integer8:sbfmt Predicate:Pd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a8_b8_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /Integer8:sbfmt Predicate:Pd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a32_b8_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /Integer8:sbfmt Predicate:Pd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "b32_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /VInteger32:sbfmt Predicate:Pd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a8_b32_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /VInteger32:sbfmt Predicate:Pd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a32_b32_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp { /VInteger32(S32):safmt /VInteger32(S32):sbfmt } Predicate:Pd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = `Predicate@PT; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Imm_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /UInteger16:sbfmt Predicate:Pd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = uImm; PDest = Pd; PNDest = `Predicate@PT; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "SImm_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /SInteger16:sbfmt Predicate:Pd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = sImm; PDest = Pd; PNDest = `Predicate@PT; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a8_Imm_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /UInteger16:sbfmt Predicate:Pd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = uImm; PDest = Pd; PNDest = `Predicate@PT; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a8_SImm_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /SInteger16:sbfmt Predicate:Pd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = sImm; PDest = Pd; PNDest = `Predicate@PT; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a32_Imm_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /UInteger16:sbfmt Predicate:Pd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = uImm; PDest = Pd; PNDest = `Predicate@PT; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "a32_SImm_VSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /SInteger16:sbfmt Predicate:Pd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = `Bop@AND; SrcPred = `Predicate@PT; SrcNot = 0; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = sImm; PDest = Pd; PNDest = `Predicate@PT; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /Integer16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a8_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /Integer16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat16(sbfmt,bsel); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a32_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /Integer16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat16(sbfmt,bsel); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "b8_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /Integer8:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /Integer8:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat8(sbfmt,bsel); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /Integer8:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb /B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat8(sbfmt,bsel); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "b32_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /VInteger32:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat16(safmt,asel); bSelect =* VFormat32(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /VInteger32:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat8(safmt,asel); bSelect =* VFormat32(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp { /VInteger32(S32):safmt /VInteger32(S32):sbfmt } /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 1; aSelect =* VFormat32(safmt); bSelect =* VFormat32(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; RegB = Rb; PDest = Pd; PNDest = nPd; !BFiller3; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /UInteger16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = uImm; PDest = Pd; PNDest = nPd; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SImm_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer16:safmt /SInteger16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat16(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = sImm; PDest = Pd; PNDest = nPd; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /UInteger16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = uImm; PDest = Pd; PNDest = nPd; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /Integer8:safmt /SInteger16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra /B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat8(safmt,asel); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = sImm; PDest = Pd; PNDest = nPd; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /UInteger16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = uImm; PDest = Pd; PNDest = nPd; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VSETP_bop" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ICmpAll:icomp /VInteger32:safmt /SInteger16:sbfmt /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VSETPfxu_pipe = 0b0101000011110; VSETP = 0b0101000011110; ENCODING Opcode13 = Opcode; BVideo = 0; aSelect =* VFormat32(safmt); sbfmt =* IntegerSigned(sbfmt); VComp3 = ICmpAll; Bop = bopopt; SrcPred = Pa; SrcNot = Pa@not; RegA = Ra; Pred = Pg; PredNot = Pg@not; Imm16 = sImm; PDest = Pd; PNDest = nPd; !NencVSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /U16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelectU =* VFormatU16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /U16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelectU =* VFormatU16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /U16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelectU =* VFormatU16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b8_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /U8:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelectU =* VFormatU8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /U8:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelectU =* VFormatU8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /U8:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelectU =* VFormatU8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b32_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /U32:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `U32@INVALIDASEL7): "Invalid U32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelectU =* VFormatU32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /U32:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `U32@INVALIDASEL7): "Invalid U32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelectU =* VFormatU32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /U32(U32):sbfmt } /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `U32@INVALIDASEL7): "Invalid U32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelectU =* VFormatU32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /UInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /SInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /UInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /SInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /UInteger16(U16):sbfmt } /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VSHL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /SInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHLfxu_pipe = 0b01010111; VSHL = 0b01010111; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /U16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelectU =* VFormatU16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /U16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelectU =* VFormatU16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /U16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/H1H0(H0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelectU =* VFormatU16(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b8_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /U8:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelectU =* VFormatU8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b8_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /U8:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelectU =* VFormatU8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b8_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /U8:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb/B1B0(B0):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelectU =* VFormatU8(sbfmt,bsel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "b32_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /U32:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `U32@INVALIDASEL7): "Invalid U32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); bSelectU =* VFormatU32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_b32_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /U32:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `U32@INVALIDASEL7): "Invalid U32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); bSelectU =* VFormatU32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_b32_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /U32(U32):sbfmt } /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (safmt != `VInteger32@INVALIDASEL7): "Invalid VInteger32 (safmt) field value INVALIDASEL7" ILLEGAL_INSTR_ENCODING_ERROR (sbfmt != `U32@INVALIDASEL7): "Invalid U32 (sbfmt) field value INVALIDASEL7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); bSelectU =* VFormatU32(sbfmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV = CWMode; BVideo = 1; !BFiller3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /UInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer16:safmt /SInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/H1H0(H0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat16(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_Imm_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /UInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a8_SImm_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /Integer8:safmt /SInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra/B1B0(B0):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat8(safmt,asel); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_Imm_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt { /VInteger32(S32):safmt /UInteger16(U16):sbfmt } /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(16):uImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = uImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "a32_SImm_VSHR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(SD):dfmt /VInteger32:safmt /SInteger16:sbfmt /CWMode(C):wrap /SAT(noSAT):sat /VOP(PASS):vop $( Register:Rd /optCC(noCC):writeCC )$ ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(16):sImm ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !IsOdd(sbfmt) : "No signed integer format allowed for shift count" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 16; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VSHRfxu_pipe = 0b01010110; VSHR = 0b01010110; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Imm16 = sImm; RegC = Rc; DFormat2 = DFormat; aSelect =* VFormat32(safmt); SatHigh = SAT; VOP = VOP; WriteCC = writeCC; MV =* SM5vshlCW(CWMode,sbfmt); BVideo = 0; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "VABSDIFF4" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt { /Integer8(S8):safmt /Integer8(S8):sbfmt } /SAT(noSAT):sat /VRed2(SIMD_MRG):vred /LaneMask4(XYZW):laneMsk $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra/ASel4("3210"):asel {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb/BSel4("7654"):bsel {/REUSE(noreuse):reuse_src_b} )$ ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (asel != `ASel4@INVALIDASEL4E): "Invalid ASel4 (asel) field value INVALIDASEL4E" ILLEGAL_INSTR_ENCODING_ERROR (asel != `ASel4@INVALIDASEL4F): "Invalid ASel4 (asel) field value INVALIDASEL4F" ILLEGAL_INSTR_ENCODING_ERROR (vred != `VRed2@INVALIDRED2): "Invalid VRed2 (vred) field value INVALIDRED2" ILLEGAL_INSTR_ENCODING_ERROR (vred != `VRed2@INVALIDRED3): "Invalid VRed2 (vred) field value INVALIDRED3" ILLEGAL_INSTR_ENCODING_ERROR (bsel != `BSel4@INVALIDBSEL4B): "Invalid BSel4 (bsel) field value INVALIDBSEL4B" ILLEGAL_INSTR_ENCODING_ERROR (bsel != `BSel4@INVALIDBSEL4C): "Invalid BSel4 (bsel) field value INVALIDBSEL4C" ILLEGAL_INSTR_ENCODING_ERROR (bsel != `BSel4@INVALIDBSEL4D): "Invalid BSel4 (bsel) field value INVALIDBSEL4D" ILLEGAL_INSTR_ENCODING_ERROR (bsel != `BSel4@INVALIDBSEL4E): "Invalid BSel4 (bsel) field value INVALIDBSEL4E" ILLEGAL_INSTR_ENCODING_ERROR (sat == `SAT@noSAT): ".SAT is not allowed in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (dfmt == `DFormat@UD): ".SD is not allowed in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (laneMsk == `LaneMask4@XYZW): "Invalid lanemask in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (asel == `ASel4@"3210"): "Invalid asel in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (bsel == `BSel4@"7654"): "Invalid bsel in Maxwell VABSDIFF4" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFF4fmai_pipe = 0b010100000; VABSDIFF4fxu_pipe = 0b010100000; VABSDIFF4 = 0b010100000; ENCODING Opcode9 = Opcode; VRed = VRed2; LaneMask4 = LaneMask4; Sat = SAT; sbfmt = Integer8Signed(sbfmt); safmt = Integer8Signed(safmt); WriteCC = writeCC; DFormat = DFormat; asel4 = asel; bsel4 =* bsel; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_VABSDIFF4" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt /Integer8:safmt /UInteger8:sbfmt /SAT(noSAT):sat /VRed2(SIMD_MRG):vred /LaneMask4(XYZW):laneMsk $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra/ASel4("3210"):asel {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(8):uImm ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (asel != `ASel4@INVALIDASEL4E): "Invalid ASel4 (asel) field value INVALIDASEL4E" ILLEGAL_INSTR_ENCODING_ERROR (asel != `ASel4@INVALIDASEL4F): "Invalid ASel4 (asel) field value INVALIDASEL4F" ILLEGAL_INSTR_ENCODING_ERROR (vred != `VRed2@INVALIDRED2): "Invalid VRed2 (vred) field value INVALIDRED2" ILLEGAL_INSTR_ENCODING_ERROR (vred != `VRed2@INVALIDRED3): "Invalid VRed2 (vred) field value INVALIDRED3" ILLEGAL_INSTR_ENCODING_ERROR (sat == `SAT@noSAT): ".SAT is not allowed in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (dfmt == `DFormat@UD): ".SD is not allowed in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (laneMsk == `LaneMask4@XYZW): "Invalid lanemask in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (asel == `ASel4@"3210"): "Invalid asel in Maxwell VABSDIFF4" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 8; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFF4fmai_pipe = 0b010100000; VABSDIFF4fxu_pipe = 0b010100000; VABSDIFF4 = 0b010100000; ENCODING Opcode9 = Opcode; VRed = VRed2; LaneMask4 = LaneMask4; Sat = SAT; sbfmt =* Integer8Signed(sbfmt); safmt =* Integer8Signed(safmt); WriteCC = writeCC; DFormat = DFormat; asel4 = asel; bsel4 = 0xf; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = uImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "SImm_VABSDIFF4" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DFormat(UD):dfmt { /Integer8(S8):safmt /SInteger8(S8):sbfmt } /SAT(noSAT):sat /VRed2(SIMD_MRG):vred /LaneMask4(XYZW):laneMsk $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' $( RegisterFAU:Ra/ASel4("3210"):asel {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(8):sImm ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (asel != `ASel4@INVALIDASEL4E): "Invalid ASel4 (asel) field value INVALIDASEL4E" ILLEGAL_INSTR_ENCODING_ERROR (asel != `ASel4@INVALIDASEL4F): "Invalid ASel4 (asel) field value INVALIDASEL4F" ILLEGAL_INSTR_ENCODING_ERROR (vred != `VRed2@INVALIDRED2): "Invalid VRed2 (vred) field value INVALIDRED2" ILLEGAL_INSTR_ENCODING_ERROR (vred != `VRed2@INVALIDRED3): "Invalid VRed2 (vred) field value INVALIDRED3" ILLEGAL_INSTR_ENCODING_ERROR (sat == `SAT@noSAT): ".SAT is not allowed in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (dfmt == `DFormat@UD): ".SD is not allowed in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (laneMsk == `LaneMask4@XYZW): "Invalid lanemask in Maxwell VABSDIFF4" ILLEGAL_INSTR_ENCODING_ERROR (asel == `ASel4@"3210"): "Invalid asel in Maxwell VABSDIFF4" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 8; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES VABSDIFF4fmai_pipe = 0b010100000; VABSDIFF4fxu_pipe = 0b010100000; VABSDIFF4 = 0b010100000; ENCODING Opcode9 = Opcode; VRed = VRed2; LaneMask4 = LaneMask4; Sat = SAT; sbfmt =* Integer8Signed(sbfmt); safmt =* Integer8Signed(safmt); WriteCC = writeCC; DFormat = DFormat; asel4 = asel; bsel4 = 0xf; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = sImm; RegC = Rc; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "F2F_1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1("F32.F32"/PRINT):fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; !SH; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "F2F_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "F2F_2_64_32" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64_32:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR ( fmts == `F2Ffmts2_64_32@"F64.F32" ) -> (sat == `SAT@noSAT): "F64 cannot be used with SAT" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "F2F_1_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1_16:fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 16; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; SH = halfsel; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "F2F_2_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_16:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; SH = halfsel; !IR; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "F2F_2_64_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64_16:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb/H1H0(H0):halfsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmts != `F2Ffmts2_64_16@"F64.F16") : "F16 cannot be converted to F64" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; SH = halfsel; !IR; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "F2F_1_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1_64:fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR sat == `SAT@noSAT: "F64 cannot be used with SAT" MISALIGNED_REG_ERROR ((Rb%2==0)||(Rb==`Register@RZ)): "Rb must be aligned to 64bits when srcfmt is F64" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" MISALIGNED_REG_ERROR ( fmts == `F2Ffmts1_64@"F64.F64" ) -> IsEven(((Rd)+((Rd)==255))) : "F64 as destination format requires an even destination register" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" MISALIGNED_REG_ERROR ( fmts == `F2Ffmts1_64@"F64.F64" ) -> IsEven(((Rb)+((Rb)==255))) : "F64 as source format requires an even source register" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; !SH; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "F2F_2_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ( fmts != `F2Ffmts2_64@"F16.F64" ) : "F64 cannot be converted to F16" ILLEGAL_INSTR_ENCODING_ERROR sat == `SAT@noSAT: "F64 cannot be used with SAT" MISALIGNED_REG_ERROR ((Rb%2==0)||(Rb==`Register@RZ)): "Rb must be aligned to 64bits when srcfmt is F64" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR ( fmts == `F2Ffmts1_64@"F64.F64" ) -> IsEven(((Rb)+((Rb)==255))) : "F64 as source format requires an even source register" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((fmts==`F2Ffmts2_64@F16.F64)*16) + ((fmts==`F2Ffmts2_64@F32.F64)*32)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0101110010101; F2F = 0b0101110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !BFiller; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_F2F_1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1("F32.F32"/PRINT):fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; !SH; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_F2F_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_F2F_2_64_32" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64_32:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ( fmts == `F2Ffmts2_64_32@"F64.F32" ) -> (sat == `SAT@noSAT): "F64 cannot be used with SAT" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_F2F_1_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1_16:fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' F16Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 16; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; SH = halfsel; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_F2F_2_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_16:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' F16Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; SH = halfsel; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_F2F_2_64_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64_16:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' F16Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmts != `F2Ffmts2_64_16@"F64.F16") : "F16 cannot be converted to F64" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; SH = halfsel; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_F2F_1_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1_64:fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR sat == `SAT@noSAT: "F64 cannot be used with SAT" MISALIGNED_REG_ERROR ( fmts == `F2Ffmts1_64@"F64.F64" ) -> IsEven(((Rd)+((Rd)==255))) : "F64 as destination format requires an even destination register" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; !SH; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_F2F_2_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ( fmts != `F2Ffmts2_64@"F16.F64" ) : "F64 cannot be converted to F16" ILLEGAL_INSTR_ENCODING_ERROR sat == `SAT@noSAT: "F64 cannot be used with SAT" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((fmts==`F2Ffmts2_64@F16.F64)*16) + ((fmts==`F2Ffmts2_64@F32.F64)*32)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0011100_10101; F2F = 0b0011100_10101; ENCODING Opcode7b5 = Opcode; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_F2F_1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1("F32.F32"/PRINT):fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; !SH; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_F2F_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_F2F_2_64_32" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64_32:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR ( fmts == `F2Ffmts2_64_32@"F64.F32" ) -> (sat == `SAT@noSAT): "F64 cannot be used with SAT" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_F2F_1_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1_16:fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset]/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 16; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; SH = halfsel; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_F2F_2_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_16:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset]/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; SH = halfsel; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_F2F_2_64_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64_16:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset]/H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ( fmts != `F2Ffmts2_64_16@"F64.F16" ) : "F16 cannot be converted to F64" MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; SH = halfsel; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_F2F_1_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts1_64:fmts /F2FRound1(PASS):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR sat == `SAT@noSAT: "F64 cannot be used with SAT" MISALIGNED_REG_ERROR ( fmts == `F2Ffmts1_64@"F64.F64" ) -> IsEven(((Rd)+((Rd)==255))) : "F64 as destination format requires an even destination register" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; IRRnd = rnd; !SH; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_F2F_2_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /F2Ffmts2_64:fmts /F2FRound2(RN):rnd /SAT(noSAT):sat $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ( fmts != `F2Ffmts2_64@"F16.F64" ) : "F64 cannot be converted to F16" ILLEGAL_INSTR_ENCODING_ERROR sat == `SAT@noSAT: "F64 cannot be used with SAT" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (fmts == 10)) : "Warning: .FTZ is ignored unless .dfmt.sfmt is F32.F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((fmts==`F2Ffmts2_64@F16.F64)*16) + ((fmts==`F2Ffmts2_64@F32.F64)*32)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Fmio_pipe = 0b0100110010101; F2F = 0b0100110010101; ENCODING Opcode13 = Opcode; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SrcDstFmt =* fmts; Dest = Rd; Rnd_1 = rnd; !SH; !IR; !NencF2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "F2I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz { /IntegerInv8No64(S32/PRINT):dstfmt /Float32(F32/PRINT):srcfmt } /Round3(ROUND):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "H1 is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (srcfmt != `Float32@INVALIDFPDEST0): "Invalid Float32 (srcfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (srcfmt == `Float32@F32)) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Imio_pipe = 0b0101110010110; F2I = 0b0101110010110; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt =* IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !BFiller; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "F2I_I64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Integer64:dstfmt /Float32:srcfmt /Round3(ROUND):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb /H1H0(H0):halfsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "H1 is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (srcfmt != `Float32@INVALIDFPDEST0): "Invalid Float32 (srcfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (srcfmt == `Float32@F32)) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Imio_pipe = 0b0101110010110; F2I = 0b0101110010110; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt =* IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !BFiller; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "F2I_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /IntegerNo8:dstfmt /Float16:srcfmt /Round3(ROUND):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (((dstfmt)&0xfe) != `Integer@U64): "F16 cannot be converted to U64/S64" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_WARNING (ftz != `FTZ@FTZ) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Imio_pipe = 0b0101110010110; F2I = 0b0101110010110; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt = IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !BFiller; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "F2I_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /IntegerNo8:dstfmt /Float64:srcfmt /Round3(ROUND):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb /H1H0(H0):halfsel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" MISALIGNED_REG_ERROR (srcfmt == `Float64@F64) -> IsEven(((Rb)+((Rb)==255))) : "F64 as source format requires an even source register" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-2))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (((dstfmt)&0xfe) == `Integer@U16) -> (srcfmt != `Float64@F64) : "F64 cannot be converted to S16/U16" ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "HI is only allowed for an F16 source" ILLEGAL_INSTR_ENCODING_WARNING (ftz != `FTZ@FTZ) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Imio_pipe = 0b0101110010110; F2I = 0b0101110010110; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; FTZ = FTZ; RegB = Rb; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt = IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !BFiller; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_F2I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz { /IntegerInv8No64(S32/PRINT):dstfmt /Float32(F32/PRINT):srcfmt } /Round3(ROUND):rnd Register:Rd /optCC(noCC):writeCC ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "H1 is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR (srcfmt != `Float32@INVALIDFPDEST0): "Invalid Float32 (srcfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (srcfmt == `Float32@F32)) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Imio_pipe = 0b0011100_10110; F2I = 0b0011100_10110; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt =* IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_F2I_I64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Integer64:dstfmt /Float32:srcfmt /Round3(ROUND):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' F32Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "H1 is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR (srcfmt != `Float32@INVALIDFPDEST0): "Invalid Float32 (srcfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (srcfmt == `Float32@F32)) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Imio_pipe = 0b0011100_10110; F2I = 0b0011100_10110; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt =* IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_F2I_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /IntegerNo8:dstfmt /Float16:srcfmt /Round3(ROUND):rnd Register:Rd /optCC(noCC):writeCC ',' F16Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (((dstfmt)&0xfe) != `Integer@U64): "F16 cannot be converted to U64/S64" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" ILLEGAL_INSTR_ENCODING_WARNING (ftz != `FTZ@FTZ) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Imio_pipe = 0b0011100_10110; F2I = 0b0011100_10110; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt = IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_F2I_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /IntegerNo8:dstfmt /Float64:srcfmt /Round3(ROUND):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' F64Imm(64):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (((dstfmt)&0xfe) == `Integer@U16) -> (srcfmt != `Float64@F64) : "F64 cannot be converted to S16/U16" ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "HI is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" ILLEGAL_INSTR_ENCODING_WARNING (ftz != `FTZ@FTZ) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Imio_pipe = 0b0011100_10110; F2I = 0b0011100_10110; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; FTZ = FTZ; Bconst=uImm; Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt = IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_F2I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz { /IntegerInv8No64(S32/PRINT):dstfmt /Float32(F32/PRINT):srcfmt } /Round3(ROUND):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "H1 is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (srcfmt != `Float32@INVALIDFPDEST0): "Invalid Float32 (srcfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (srcfmt == `Float32@F32)) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Imio_pipe = 0b0100110010110; F2I = 0b0100110010110; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt =* IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_F2I_I64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /Integer64:dstfmt /Float32:srcfmt /Round3(ROUND):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "H1 is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (srcfmt != `Float32@INVALIDFPDEST0): "Invalid Float32 (srcfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_WARNING ((ftz == `FTZ@FTZ) -> (srcfmt == `Float32@F32)) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Imio_pipe = 0b0100110010110; F2I = 0b0100110010110; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt =* IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_F2I_16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /IntegerNo8:dstfmt /Float16:srcfmt /Round3(ROUND):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (((dstfmt)&0xfe) != `Integer@U64): "F16 cannot be converted to U64/S64" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING (ftz != `FTZ@FTZ) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES F2Imio_pipe = 0b0100110010110; F2I = 0b0100110010110; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt = IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_F2I_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FTZ(noFTZ):ftz /IntegerNo8:dstfmt /Float64:srcfmt /Round3(ROUND):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /H1H0(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (((dstfmt)&0xfe) == `Integer@U16) -> (srcfmt != `Float64@F64) : "F64 cannot be converted to S16/U16" ILLEGAL_INSTR_ENCODING_ERROR (halfsel == `H1H0@H0) : "HI is only allowed for an F16 source" MISALIGNED_REG_ERROR (((dstfmt)&0xfe) == `Integer@U64) -> IsEven(((Rd)+((Rd)==255))) : "U64/S64 as destination format requires an even destination register" OOR_REG_ERROR ((((dstfmt)&0xfe) != `Integer@U64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register D is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_WARNING (ftz != `FTZ@FTZ) : "Warning: .FTZ is ignored unless sfmt is F32" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_DOUBLE); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES F2Imio_pipe = 0b0100110010110; F2I = 0b0100110010110; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; FTZ = FTZ; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; SH = halfsel; IDstFmt = IntSize( dstfmt ); SrcFmt =* srcfmt; Rnd_1 = rnd; Dest = Rd; !NencF2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "I2F" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /FloatNo64(F32/PRINT):dstfmt /IntegerNo16No64(S32/PRINT):srcfmt } /Round1(RN):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" MISALIGNED_REG_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (IsEven(((Rb)+((Rb)==255)))) : ".U64 requires an even source register" OOR_REG_ERROR ((srcfmt == `IntegerNo16@U64) || (srcfmt == `IntegerNo16@S64)) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register B is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `FloatNo64@INVALIDFPDEST0): "Invalid FloatNo64 (dstfmt) field value INVALIDFPDEST0" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Fmio_pipe = 0b0101110010111; I2F = 0b0101110010111; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt =* dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; !NencI2F; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I2F_F64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float64:dstfmt /IntegerNo16No64:srcfmt /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb /B1B0(B0):bytesel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" MISALIGNED_REG_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (IsEven(((Rb)+((Rb)==255)))) : ".U64 requires an even source register" OOR_REG_ERROR ((srcfmt == `IntegerNo16@U64) || (srcfmt == `IntegerNo16@S64)) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register B is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES I2Fmio_pipe = 0b0101110010111; I2F = 0b0101110010111; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt =* dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; !NencI2F; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "I2F64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float:dstfmt /Integer64:srcfmt /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-][||] Register:Rb /B1B0(B0):bytesel {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" MISALIGNED_REG_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (IsEven(((Rb)+((Rb)==255)))) : ".U64 requires an even source register" OOR_REG_ERROR ((srcfmt == `IntegerNo16@U64) || (srcfmt == `IntegerNo16@S64)) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register B is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@INVALIDFPDEST0): "Invalid Float (dstfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES I2Fmio_pipe = 0b0101110010111; I2F = 0b0101110010111; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt = dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; !NencI2F; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "I2F16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float:dstfmt /Integer16:srcfmt /Round1(RN):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb /I2XH(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@F64): ".U16/.S16 to .F64 is not supported" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (halfsel != `I2XH@INVALIDSIZE1): "Invalid I2XH (halfsel) field value INVALIDSIZE1" ILLEGAL_INSTR_ENCODING_ERROR (halfsel != `I2XH@INVALIDSIZE3): "Invalid I2XH (halfsel) field value INVALIDSIZE3" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@INVALIDFPDEST0): "Invalid Float (dstfmt) field value INVALIDFPDEST0" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Fmio_pipe = 0b0101110010111; I2F = 0b0101110010111; ENCODING Opcode13 = Opcode; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; By = I2XH; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt = dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; !NencI2F; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_I2F" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /FloatNo64(F32/PRINT):dstfmt /IntegerNo16No64(S32/PRINT):srcfmt } /Round1(RN):rnd Register:Rd /optCC(noCC):writeCC ',' SImm(20):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `FloatNo64@INVALIDFPDEST0): "Invalid FloatNo64 (dstfmt) field value INVALIDFPDEST0" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Fmio_pipe = 0b0011100_10111; I2F = 0b0011100_10111; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt =* dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_I2F_F64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float64:dstfmt /IntegerNo16No64:srcfmt /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' SImm(20):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES I2Fmio_pipe = 0b0011100_10111; I2F = 0b0011100_10111; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt =* dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_I2F64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float:dstfmt /Integer64:srcfmt /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' SImm(20):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@INVALIDFPDEST0): "Invalid Float (dstfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES I2Fmio_pipe = 0b0011100_10111; I2F = 0b0011100_10111; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt = dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_I2F16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float:dstfmt /Integer16:srcfmt /Round1(RN):rnd Register:Rd /optCC(noCC):writeCC ',' SImm(20):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /I2XH(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@F64): ".U16/.S16 to .F64 is not supported" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (halfsel != `I2XH@INVALIDSIZE1): "Invalid I2XH (halfsel) field value INVALIDSIZE1" ILLEGAL_INSTR_ENCODING_ERROR (halfsel != `I2XH@INVALIDSIZE3): "Invalid I2XH (halfsel) field value INVALIDSIZE3" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@INVALIDFPDEST0): "Invalid Float (dstfmt) field value INVALIDFPDEST0" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Fmio_pipe = 0b0011100_10111; I2F = 0b0011100_10111; ENCODING Opcode7b5 = Opcode; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; By = I2XH; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt = dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_I2F" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /FloatNo64(F32/PRINT):dstfmt /IntegerNo16No64(S32/PRINT):srcfmt } /Round1(RN):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `FloatNo64@INVALIDFPDEST0): "Invalid FloatNo64 (dstfmt) field value INVALIDFPDEST0" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Fmio_pipe = 0b0100110010111; I2F = 0b0100110010111; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt =* dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_I2F_F64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float64:dstfmt /IntegerNo16No64:srcfmt /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES I2Fmio_pipe = 0b0100110010111; I2F = 0b0100110010111; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt =* dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_I2F64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float:dstfmt /Integer64:srcfmt /Round1(RN):rnd $( Register:Rd /optCC(noCC):writeCC )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (dstfmt == `Float@F64) -> (IsEven(((Rd)+((Rd)==255)))) : ".F64 requires an even destination register" OOR_REG_ERROR ((dstfmt != `Float@F64) && (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) || ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))): "Register D is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U8) || (srcfmt == `Integer@S8)) -> (dstfmt != `Float@F64) : ".U8/.S8 to .F64 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U32) || (srcfmt == `Integer@S32)) -> (dstfmt != `Float@F16) : ".U32/.S32 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@INVALIDFPDEST0): "Invalid Float (dstfmt) field value INVALIDFPDEST0" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (dstfmt != `Float@F16) : ".U64/.S64 to .F16 is not supported" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 64; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE; OPCODES I2Fmio_pipe = 0b0100110010111; I2F = 0b0100110010111; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; By = B1B0; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt = dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_I2F16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float:dstfmt /Integer16:srcfmt /Round1(RN):rnd Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /I2XH(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@F64): ".U16/.S16 to .F64 is not supported" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (halfsel != `I2XH@INVALIDSIZE1): "Invalid I2XH (halfsel) field value INVALIDSIZE1" ILLEGAL_INSTR_ENCODING_ERROR (halfsel != `I2XH@INVALIDSIZE3): "Invalid I2XH (halfsel) field value INVALIDSIZE3" ILLEGAL_INSTR_ENCODING_ERROR (dstfmt != `Float@INVALIDFPDEST0): "Invalid Float (dstfmt) field value INVALIDFPDEST0" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Float@F64)*64) + ((dstfmt==`Float@F32)*32) + ((dstfmt==`Float@F16)*16)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Fmio_pipe = 0b0100110010111; I2F = 0b0100110010111; ENCODING Opcode13 = Opcode; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; By = I2XH; RndLow = Round1; ISrcFmt =* IntSize ( srcfmt ); DstFmt = dstfmt; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencI2F; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I2I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /IntegerNo64(S32/PRINT):dstfmt /IntegerNo16Inv64(S32/PRINT):srcfmt } /SAT(noSAT):sat RegisterFAU:Rd /optCC(noCC):writeCC ',' [-][||]RegisterFAU:Rb /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" MISALIGNED_REG_ERROR ((srcfmt == `Integer@U64) || (srcfmt == `Integer@S64)) -> (IsEven(((Rb)+((Rb)==255)))) : ".U64 requires an even source register" OOR_REG_ERROR ((srcfmt == `IntegerNo16@U64) || (srcfmt == `IntegerNo16@S64)) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register B is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Imio_pipe = 0b0101110011100; I2I = 0b0101110011100; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; By = B1B0; IDstFmt = IntSize( dstfmt ); SrcFmt2 =* IntSize( srcfmt ); Dest = Rd; RegB = Rb; !BFiller; !NencI2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I2I16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerNo64:dstfmt /Integer16:srcfmt /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]Register:Rb /I2XH(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Imio_pipe = 0b0101110011100; I2I = 0b0101110011100; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Sat = SAT; aB = Rb@absolute; WriteCC = writeCC; nB = Rb@negate; By = I2XH; IDstFmt = IntSize( dstfmt ); SrcFmt2 =* IntSize( srcfmt ); Dest = Rd; RegB = Rb; !BFiller; !NencI2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_I2I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /IntegerNo64(S32/PRINT):dstfmt /IntegerNo16Inv64(S32/PRINT):srcfmt } /SAT(noSAT):sat RegisterFAU:Rd /optCC(noCC):writeCC ',' SImm(20):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Imio_pipe = 0b0011100_11100; I2I = 0b0011100_11100; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; By = B1B0; IDstFmt = IntSize( dstfmt ); SrcFmt2 =* IntSize( srcfmt ); Dest = Rd; Bconst=uImm; !NencI2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_I2I16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerNo64:dstfmt /Integer16:srcfmt /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' SImm(20):uImm /UnaryNeg(noNEG):jneg /UnaryAbs(noABS):jabs /I2XH(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Imio_pipe = 0b0011100_11100; I2I = 0b0011100_11100; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Sat = SAT; aB = UnaryAbs; WriteCC = writeCC; nB = UnaryNeg; By = I2XH; IDstFmt = IntSize( dstfmt ); SrcFmt2 =* IntSize( srcfmt ); Dest = Rd; Bconst=uImm; !NencI2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_I2I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { /IntegerNo64(S32/PRINT):dstfmt /IntegerNo16Inv64(S32/PRINT):srcfmt } /SAT(noSAT):sat RegisterFAU:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /B1B0(B0):bytesel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR ((srcfmt == `Integer@S32) || (srcfmt == `Integer@U32) || (srcfmt == `Integer@S64) || (srcfmt == `Integer@U64)) -> (bytesel == `B1B0@B0) : "No byte select can be combined with 32/64 bit src formats" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = (((srcfmt==`IntegerNo16@U8)*8) + ((srcfmt==`IntegerNo16@S8)*8) + ((srcfmt==`IntegerNo16@U32)*32) + ((srcfmt==`IntegerNo16@S32)*32) + ((srcfmt==`IntegerNo16@U64)*64) + ((srcfmt==`IntegerNo16@S64)*64)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Imio_pipe = 0b0100110011100; I2I = 0b0100110011100; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; By = B1B0; IDstFmt = IntSize( dstfmt ); SrcFmt2 =* IntSize( srcfmt ); Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencI2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_I2I16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /IntegerNo64:dstfmt /Integer16:srcfmt /SAT(noSAT):sat Register:Rd /optCC(noCC):writeCC ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] /I2XH(H0):halfsel $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((dstfmt==`Integer@U8)*8) + ((dstfmt==`Integer@S8)*8) + ((dstfmt==`Integer@U16)*16) + ((dstfmt==`Integer@S16)*16) + ((dstfmt==`Integer@U32)*32) + ((dstfmt==`Integer@S32)*32) + ((dstfmt==`Integer@U64)*64) + ((dstfmt==`Integer@S64)*64)); ISRC_A_SIZE = 0; ISRC_B_SIZE = 16; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_XU; OPCODES I2Imio_pipe = 0b0100110011100; I2I = 0b0100110011100; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Sat = SAT; aB = srcConst@absolute; WriteCC = writeCC; nB = srcConst@negate; By = I2XH; IDstFmt = IntSize( dstfmt ); SrcFmt2 =* IntSize( srcfmt ); Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); !NencI2I; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "MOV" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' UImm(4/0xf):quadMask $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES MOVfmai_pipe = 0b0101110010011; MOVfxu_pipe = 0b0101110010011; MOV = 0b0101110010011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegB = Rb; QuadMask = quadMask; !BFiller; !NencMOV; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_MOV" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' SImm(20):uImm ',' UImm(4/0xf):quadMask $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES MOVfmai_pipe = 0b0011100_10011; MOVfxu_pipe = 0b0011100_10011; MOV = 0b0011100_10011; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bconst=uImm; QuadMask = quadMask; !NencMOV; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_MOV" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' UImm(4/0xf):quadMask $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES MOVfmai_pipe = 0b0100110010011; MOVfxu_pipe = 0b0100110010011; MOV = 0b0100110010011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); QuadMask = quadMask; !NencMOV; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "MOV32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' UImm(32)*:uImm ',' UImm(4/0xf):quadMask $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES MOV32Ifmai_pipe = 0b000000010000; MOV32Ifxu_pipe = 0b000000010000; MOV32I = 0b000000010000; ENCODING Opcode12= Opcode; Imm32 = uImm; PredNot = Pg@not; Pred = Pg; Dest = Rd; QuadMask2 = quadMask; !NencMOV32I; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SEL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!] Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES SELfxu_pipe = 0b0101110010100; SEL = 0b0101110010100; ENCODING Opcode13 = Opcode; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; SrcPred = Pa; SrcNot = Pa@not; !NencSEL; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_SEL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' [!] Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES SELfxu_pipe = 0b0011100_10100; SEL = 0b0011100_10100; ENCODING Opcode7b5 = Opcode; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; SrcPred = Pa; SrcNot = Pa@not; !NencSEL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_SEL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!] Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES SELfxu_pipe = 0b0100110010100; SEL = 0b0100110010100; ENCODING Opcode13 = Opcode; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; Dest = Rd; SrcPred = Pa; SrcNot = Pa@not; !NencSEL; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "PRMT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PMode(IDX):prmt $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (prmt != `PMode@INVALIDPMODE7): "Invalid PMode (prmt) field value INVALIDPMODE7" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES PRMTfmai_pipe = 0b010110111100; PRMT = 0b010110111100; ENCODING Opcode12 = Opcode; PMode = PMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; !BFiller; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Imm_PRMT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PMode(IDX):prmt $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (prmt != `PMode@INVALIDPMODE7): "Invalid PMode (prmt) field value INVALIDPMODE7" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES PRMTfmai_pipe = 0b0011011_1100; PRMT = 0b0011011_1100; ENCODING Opcode7b4 = Opcode; PMode = PMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bconst=uImm; RegC = Rc; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const_PRMT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PMode(IDX):prmt $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (prmt != `PMode@INVALIDPMODE7): "Invalid PMode (prmt) field value INVALIDPMODE7" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES PRMTfmai_pipe = 0b010010111100; PRMT = 0b010010111100; ENCODING Opcode12 = Opcode; PMode = PMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rc; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "Const1_PRMT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PMode(IDX):prmt $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( RegisterFAU:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (prmt != `PMode@INVALIDPMODE7): "Invalid PMode (prmt) field value INVALIDPMODE7" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; OPCODES PRMTfmai_pipe = 0b010100111100; PRMT = 0b010100111100; ENCODING Opcode12 = Opcode; PMode = PMode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); RegC = Rb; !WriteCC; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SHFL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Shflmd:shflmd Predicate:Pd ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES SHFLmio_pipe = 0b1110111100010; SHFL = 0b1110111100010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; RegC = Rc; Shflmd = shflmd; !SHFLFiller; CFix_SHFL=0; BFix_SHFL=0; PredDest = Pd; !NencSHFL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "b_SHFL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Shflmd:shflmd Predicate:Pd ',' Register:Rd ',' Register:Ra ',' UImm(5):uImm5 ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm5)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 5; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES SHFLmio_pipe = 0b1110111100010; SHFL = 0b1110111100010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; shfl_imm5 = uImm5; !bit6_RegB; RegC = Rc; Shflmd = shflmd; !SHFLFiller; CFix_SHFL=0; BFix_SHFL=1; PredDest = Pd; !NencSHFL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "c_b_SHFL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Shflmd:shflmd Predicate:Pd ',' Register:Rd ',' Register:Ra ',' UImm(5):uImm5 ',' UImm(13):uImm13 $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm5)); ISRC_C_OPERAND_MAP = (1<<INDEX(uImm13)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 5; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES SHFLmio_pipe = 0b1110111100010; SHFL = 0b1110111100010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; shfl_imm5 = uImm5; !bit6_RegB; Imm13 = uImm13; Shflmd = shflmd; CFix_SHFL=1; BFix_SHFL=1; PredDest = Pd; !NencSHFL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "c_SHFL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Shflmd:shflmd Predicate:Pd ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(13):uImm13 $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(uImm13)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES SHFLmio_pipe = 0b1110111100010; SHFL = 0b1110111100010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; Imm13 = uImm13; Shflmd = shflmd; CFix_SHFL=1; BFix_SHFL=0; PredDest = Pd; !NencSHFL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "P2R" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /B3B0(B0):extract $( Register:Rd )$ ',' CCPR:Pr ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES P2Rfxu_pipe = 0b0101110011101; P2R = 0b0101110011101; ENCODING Opcode13 = Opcode; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; Byte = B3B0; CCPR = CCPR; !NencP2R; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_P2R" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /B3B0(B0):extract $( Register:Rd )$ ',' CCPR:Pr ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES P2Rfxu_pipe = 0b0011100_11101; P2R = 0b0011100_11101; ENCODING Opcode7b5 = Opcode; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; Byte = B3B0; CCPR = CCPR; !NencP2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_P2R" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /B3B0(B0):extract $( Register:Rd )$ ',' CCPR:Pr ',' $( Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES P2Rfxu_pipe = 0b0100110011101; P2R = 0b0100110011101; ENCODING Opcode13 = Opcode; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; Dest = Rd; Byte = B3B0; CCPR = CCPR; !NencP2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "Simple_P2R" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /B3B0(B0):extract $( Register:Rd )$ ',' CCPR:Pr $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES P2Rfxu_pipe = 0b0011100_11101; P2R = 0b0011100_11101; ENCODING Opcode7b5 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = `Register@RZ; Bconst = 0xFFFF; Byte = B3B0; CCPR = CCPR; !NencP2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "R2P" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CCPR:Pr ',' $( Register:Ra /B3B0(B0):extract {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES R2Pfxu_pipe = 0b0101110011110; R2P = 0b0101110011110; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; Byte = B3B0; CCPR = CCPR; !NencP2R; !Dest; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_R2P" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CCPR:Pr ',' $( Register:Ra /B3B0(B0):extract {/REUSE(noreuse):reuse_src_a} )$ ',' UImm(20/0xffff):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES R2Pfxu_pipe = 0b0011100_11110; R2P = 0b0011100_11110; ENCODING Opcode7b5 = Opcode; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; Byte = B3B0; CCPR = CCPR; !NencP2R; !Dest; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_R2P" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CCPR:Pr ',' $( Register:Ra /B3B0(B0):extract {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (Pr==`CCPR@CC); OPCODES R2Pfxu_pipe = 0b0100110011110; R2P = 0b0100110011110; ENCODING Opcode13 = Opcode; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; Byte = B3B0; CCPR = CCPR; !NencP2R; !Dest; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "CSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:CCTest /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' CC:dummyCC ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); OPCODES CSETfxu_pipe = 0b0101000010011; CSET = 0b0101000010011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; CCC_2 = CCTest; SrcPred = Pa; SrcNot = Pa@not; BVal = BVal; Bop = bopopt; !NencCSET; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_CSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Test:CCTest $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' CC:dummyCC $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); OPCODES CSETfxu_pipe = 0b0101000010011; CSET = 0b0101000010011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; CCC_2 = CCTest; SrcPred = `Predicate@PT; SrcNot = 0; BVal = BVal; Bop = `Bop@AND; !NencCSET; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "CSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:CCTest /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' CC:inputCC ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); OPCODES CSETPfxu_pipe = 0b0101000010100; CSETP = 0b0101000010100; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; CCC_2 = CCTest; SrcPred = Pa; SrcNot = Pa@not; Bop = bopopt; !NencCSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_CSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:CCTest Predicate:Pd ',' CC:inputCC $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); OPCODES CSETPfxu_pipe = 0b0101000010100; CSETP = 0b0101000010100; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; CCC_2 = CCTest; SrcPred = `Predicate@PT; SrcNot = 0; Bop = `Bop@AND; !NencCSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "PSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Bop:bop0 /Bop:bopopt $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' [!]Predicate:Pc ',' [!]Predicate:Pb ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bop0 != `Bop@INVALIDBOP03): "Invalid Bop (bop0) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES PSETfxu_pipe = 0b0101000010001; PSET = 0b0101000010001; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Src2Pred = Pc; Src2Not = Pc@not; Src1Pred = Pb; Src1Not = Pb@not; SrcPred = Pa; SrcNot = Pa@not; Bop0 = bop0; Bop = bopopt; BVal = BVal; !NencPSET; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_PSET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BVal(BM):bval /Bop:bop0 $( RegisterFAU:Rd /optCC(noCC):writeCC )$ ',' [!]Predicate:Pc ',' [!]Predicate:Pb $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bop0 != `Bop@INVALIDBOP03): "Invalid Bop (bop0) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES PSETfxu_pipe = 0b0101000010001; PSET = 0b0101000010001; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; WriteCC = writeCC; Src2Pred = Pc; Src2Not = Pc@not; Src1Pred = Pb; Src1Not = Pb@not; SrcPred = `Predicate@PT; SrcNot = 0; Bop0 = bop0; Bop = `Bop@AND; BVal = BVal; !NencPSET; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "PSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Bop:bop0 /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' [!]Predicate:Pc ',' [!]Predicate:Pb ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (bop0 != `Bop@INVALIDBOP03): "Invalid Bop (bop0) field value INVALIDBOP03" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES PSETPfxu_pipe = 0b0101000010010; PSETP = 0b0101000010010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = nPd; Src2Pred = Pc; Src2Not = Pc@not; Src1Pred = Pb; Src1Not = Pb@not; SrcPred = Pa; SrcNot = Pa@not; Bop0 = bop0; Bop = bopopt; !NencPSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_PSETP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Bop:bop0 Predicate:Pd ',' [!]Predicate:Pc ',' [!]Predicate:Pb $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (bop0 != `Bop@INVALIDBOP03): "Invalid Bop (bop0) field value INVALIDBOP03" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES PSETPfxu_pipe = 0b0101000010010; PSETP = 0b0101000010010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; PDest = Pd; PNDest = `Predicate@PT; Src2Pred = Pc; Src2Not = Pc@not; Src1Pred = Pb; Src1Not = Pb@not; SrcPred = `Predicate@PT; SrcNot = 0; Bop0 = bop0; Bop = `Bop@AND; !NencPSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "STP" FORMAT Opcode /STPMode(noWAIT):stpmode /TPhase(noPhase):phase UImm(8):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_STP_INDEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 20; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES STPmio_pipe = 0b111_01110_10100; STP = 0b111_01110_10100; ENCODING Opcode13 = Opcode; STPMode = STPMode; Imm8 = uImm; !NencSTP; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TEX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD(noLOD):lod /LC(noLC):lc /TOFF1(noTOFF):toff /DC(noDC):dc /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (TOFF1 == `TOFF1@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: ARRAY_3D is not supported yet" ILLEGAL_INSTR_ENCODING_ERROR (DC == `DC@DC) -> (ParamA != `ParamA@"_3D") : "Illegal instruction encoding: Depth Comparison filter is not supported by 3D textures" ILLEGAL_INSTR_ENCODING_ERROR ( (LOD == `LOD@LLA) || (LOD == `LOD@LBA) || (LOD == `LOD@LL) ) -> (LC != `LC@LC): "Illegal instruction encoding: .LC is supported only on instructions that involve implicit LOD calculations" ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD4): "Invalid LOD (lod) field value INVALIDBLOD4" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD5): "Invalid LOD (lod) field value INVALIDBLOD5" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) )) * 32; ISRC_B_SIZE = (( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXmio_pipe = 0b11000; TEX = 0b11000; ENCODING Opcode5 = Opcode; LC = lc; PredDst = Pd; TidB = tid; LOD = LOD; AOFFI = TOFF1; DC = DC; NDV = NDV; ParamA = ParamA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TEX_legacy_style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD(noLOD):lod /LC(noLC):lc /TOFF1(noTOFF):toff /DC(noDC):dc /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(8):tid ',' UImm(5):smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (TOFF1 == `TOFF1@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: ARRAY_3D is not supported yet" ILLEGAL_INSTR_ENCODING_ERROR (DC == `DC@DC) -> (ParamA != `ParamA@"_3D") : "Illegal instruction encoding: Depth Comparison filter is not supported by 3D textures" ILLEGAL_INSTR_ENCODING_ERROR ( (LOD == `LOD@LLA) || (LOD == `LOD@LBA) || (LOD == `LOD@LL) ) -> (LC != `LC@LC): "Illegal instruction encoding: .LC is supported only on instructions that involve implicit LOD calculations" ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD4): "Invalid LOD (lod) field value INVALIDBLOD4" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD5): "Invalid LOD (lod) field value INVALIDBLOD5" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) )) * 32; ISRC_B_SIZE = (( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXmio_pipe = 0b11000; TEX = 0b11000; ENCODING Opcode5 = Opcode; LC = lc; PredDst = Pd; TidBTEX = tid; TidBSAMP = smp; LOD = LOD; AOFFI = TOFF1; DC = DC; NDV = NDV; ParamA = ParamA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TEX_B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LOD(noLOD):lod /LC(noLC):lc /TOFF1(noTOFF):toff /DC(noDC):dc /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13)@:tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (TOFF1 == `TOFF1@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: ARRAY_3D is not supported yet" ILLEGAL_INSTR_ENCODING_ERROR (DC == `DC@DC) -> (ParamA != `ParamA@"_3D") : "Illegal instruction encoding: Depth Comparison filter is not supported by 3D textures" ILLEGAL_INSTR_ENCODING_ERROR ( (LOD == `LOD@LLA) || (LOD == `LOD@LBA) || (LOD == `LOD@LL) ) -> (LC != `LC@LC): "Illegal instruction encoding: .LC is supported only on instructions that involve implicit LOD calculations" ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR (((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ))) : "Register A is out of range" MISALIGNED_REG_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD4): "Invalid LOD (lod) field value INVALIDBLOD4" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD5): "Invalid LOD (lod) field value INVALIDBLOD5" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) )) * 32; ISRC_B_SIZE = ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1)) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXmio_pipe = 0b1101111010; TEX = 0b1101111010; ENCODING Opcode10 = Opcode; LCB = lc; PredDst = Pd; LODB = LOD; AOFFIB = TOFF1; DC = DC; NDV = NDV; ParamA = ParamA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTEXB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TEX_B_legacy_style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LOD(noLOD):lod /LC(noLC):lc /TOFF1(noTOFF):toff /DC(noDC):dc /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(8)@:tid ',' UImm(5)@:smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (TOFF1 == `TOFF1@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: ARRAY_3D is not supported yet" ILLEGAL_INSTR_ENCODING_ERROR (DC == `DC@DC) -> (ParamA != `ParamA@"_3D") : "Illegal instruction encoding: Depth Comparison filter is not supported by 3D textures" ILLEGAL_INSTR_ENCODING_ERROR ( (LOD == `LOD@LLA) || (LOD == `LOD@LBA) || (LOD == `LOD@LL) ) -> (LC != `LC@LC): "Illegal instruction encoding: .LC is supported only on instructions that involve implicit LOD calculations" ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR (((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) ))) : "Register A is out of range" MISALIGNED_REG_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD4): "Invalid LOD (lod) field value INVALIDBLOD4" ILLEGAL_INSTR_ENCODING_ERROR (lod != `LOD@INVALIDBLOD5): "Invalid LOD (lod) field value INVALIDBLOD5" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 + (((ParamA == `ParamA@"_1D") || (ParamA == `ParamA@RECT) || (ParamA == `ParamA@CUBE) || (ParamA == `ParamA@"_3D")) && (LC==`LC@LC)) )) * 32; ISRC_B_SIZE = ((( (TOFF1 == `TOFF1@AOFFI) + (DC == `DC@DC) + (LOD == `LOD@LB || LOD == `LOD@LL || LOD == `LOD@LBA || LOD == `LOD@LLA) )+1)) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXmio_pipe = 0b1101111010; TEX = 0b1101111010; ENCODING Opcode10 = Opcode; LCB = lc; PredDst = Pd; LODB = LOD; AOFFIB = TOFF1; DC = DC; NDV = NDV; ParamA = ParamA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTEXB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TEXS_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD2(noLOD):lod /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase ZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk2C:wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (LOD2 == `LOD2@LZ): "Illegal instruction encoding: 1D is only supported with LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (DC == `DC@noDC): "Illegal instruction encoding: 1D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"ARRAY_2D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: Array 2D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA == `ParamA@"ARRAY_2D") && (LOD2 == `LOD2@noLOD)) -> (DC!=`DC@DC) : "Illegal instruction encoding: Array 2D with noLOD only supports noDC set" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (DC == `DC@noDC): "Illegal instruction encoding: 3D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: 3D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (DC == `DC@noDC): "Illegal instruction encoding: CUBE is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (LOD2 != `LOD2@LZ): "Illegal instruction encoding: CUBE does not support the LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,dc) for TEXS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Ra%2==0)): "Misaligned Ra register in TEXS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Rb%2==0)): "Misaligned Rb register in TEXS" MISALIGNED_REG_ERROR ((( ( (wmsk == `TEXWmsk2C@R ) * 32 ) + ( (wmsk == `TEXWmsk2C@G ) * 32 ) + ( (wmsk == `TEXWmsk2C@B ) * 32 ) + ( (wmsk == `TEXWmsk2C@A ) * 32 ) + ( (wmsk == `TEXWmsk2C@RG ) * 64 ) + ( (wmsk == `TEXWmsk2C@RA ) * 64 ) + ( (wmsk == `TEXWmsk2C@GA ) * 64 ) + ( (wmsk == `TEXWmsk2C@BA ) * 64 ) ) == 64) -> ((Rd == `Register@RZ)||(Rd%2==0))): "Misaligned Rd register in TEXS" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Ra is out of range in TEXS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Rb is out of range in TEXS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-( ( (wmsk == `TEXWmsk2C@R ) * 32 ) + ( (wmsk == `TEXWmsk2C@G ) * 32 ) + ( (wmsk == `TEXWmsk2C@B ) * 32 ) + ( (wmsk == `TEXWmsk2C@A ) * 32 ) + ( (wmsk == `TEXWmsk2C@RG ) * 64 ) + ( (wmsk == `TEXWmsk2C@RA ) * 64 ) + ( (wmsk == `TEXWmsk2C@GA ) * 64 ) + ( (wmsk == `TEXWmsk2C@BA ) * 64 ) )/32))) : "Register Rd is out of range in TEXS" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( ( (wmsk == `TEXWmsk2C@R ) * 32 ) + ( (wmsk == `TEXWmsk2C@G ) * 32 ) + ( (wmsk == `TEXWmsk2C@B ) * 32 ) + ( (wmsk == `TEXWmsk2C@A ) * 32 ) + ( (wmsk == `TEXWmsk2C@RG ) * 64 ) + ( (wmsk == `TEXWmsk2C@RA ) * 64 ) + ( (wmsk == `TEXWmsk2C@GA ) * 64 ) + ( (wmsk == `TEXWmsk2C@BA ) * 64 ) ); IDEST2_SIZE = (0); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXSmio_pipe = 0b1101100; TEXS = 0b1101100; ENCODING Opcode7 = Opcode; tex2d_4 = Tex2D4(paramA,dc,lod); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TEXS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD2(noLOD):lod /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase NonZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk34C(RGBA/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (LOD2 == `LOD2@LZ): "Illegal instruction encoding: 1D is only supported with LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (DC == `DC@noDC): "Illegal instruction encoding: 1D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"ARRAY_2D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: Array 2D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA == `ParamA@"ARRAY_2D") && (LOD2 == `LOD2@noLOD)) -> (DC!=`DC@DC) : "Illegal instruction encoding: Array 2D with noLOD only supports noDC set" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (DC == `DC@noDC): "Illegal instruction encoding: 3D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: 3D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (DC == `DC@noDC): "Illegal instruction encoding: CUBE is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (LOD2 != `LOD2@LZ): "Illegal instruction encoding: CUBE does not support the LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,dc) for TEXS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Ra%2==0)): "Misaligned Ra register in TEXS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Rb%2==0)): "Misaligned Rb register in TEXS" MISALIGNED_REG_ERROR ((( ( (wmsk == `TEXWmsk34C@RGB ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@GBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGBA) * 64 ) ) == 64) -> ((Rd2 == `Register@RZ)||(Rd2%2==0))): "Misaligned Rd2 register in TEXS" MISALIGNED_REG_ERROR ((Rd == `Register@RZ)||(Rd%2==0)): "Misaligned Rd register in TEXS" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Ra is out of range in TEXS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Rb is out of range in TEXS" OOR_REG_ERROR ((((Rd2)==`Register@RZ)||((Rd2)<=%MAX_REG_COUNT-( ( (wmsk == `TEXWmsk34C@RGB ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@GBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGBA) * 64 ) )/32))) : "Register Rd2 is out of range in TEXS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-64/32))) : "Register Rd is out of range in TEXS" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (64); IDEST2_SIZE = ( ( (wmsk == `TEXWmsk34C@RGB ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@GBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGBA) * 64 ) ); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXSmio_pipe = 0b1101100; TEXS = 0b1101100; ENCODING Opcode7 = Opcode; tex2d_4 = Tex2D4(paramA,dc,lod); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TEXS_F16_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float16:f16 /F16RoundMode(RTNE):fp16rm /LOD2(noLOD):lod /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase ZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk2C:wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (LOD2 == `LOD2@LZ): "Illegal instruction encoding: 1D is only supported with LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (DC == `DC@noDC): "Illegal instruction encoding: 1D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"ARRAY_2D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: Array 2D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA == `ParamA@"ARRAY_2D") && (LOD2 == `LOD2@noLOD)) -> (DC!=`DC@DC) : "Illegal instruction encoding: Array 2D with noLOD only supports noDC set" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (DC == `DC@noDC): "Illegal instruction encoding: 3D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: 3D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (DC == `DC@noDC): "Illegal instruction encoding: CUBE is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (LOD2 != `LOD2@LZ): "Illegal instruction encoding: CUBE does not support the LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,dc) for TEXS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Ra%2==0)): "Misaligned Ra register in TEXS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Rb%2==0)): "Misaligned Rb register in TEXS" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Ra is out of range in TEXS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Rb is out of range in TEXS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-32/32))) : "Register Rd is out of range in TEXS" PROPERTIES SIDL_NAME = `SIDL_NAMES@TEXS16; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (32); IDEST2_SIZE = (0); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXSmio_pipe = 0b11010_0; TEXS = 0b11010_0; ENCODING Opcode5_1 = Opcode; FP16RM1 = fp16rm; tex2d_4 = Tex2D4(paramA,dc,lod); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TEXS_F16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float16:f16 /F16RoundMode(RTNE):fp16rm /LOD2(noLOD):lod /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase NonZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk34C(RGBA/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (LOD2 == `LOD2@LZ): "Illegal instruction encoding: 1D is only supported with LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"1D") -> (DC == `DC@noDC): "Illegal instruction encoding: 1D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"ARRAY_2D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: Array 2D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA == `ParamA@"ARRAY_2D") && (LOD2 == `LOD2@noLOD)) -> (DC!=`DC@DC) : "Illegal instruction encoding: Array 2D with noLOD only supports noDC set" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (DC == `DC@noDC): "Illegal instruction encoding: 3D is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@"3D") -> (LOD2 != `LOD2@LL): "Illegal instruction encoding: 3D does not support the LL LOD option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (DC == `DC@noDC): "Illegal instruction encoding: CUBE is only supported with the no DC option" ILLEGAL_INSTR_ENCODING_ERROR (ParamA == `ParamA@CUBE) -> (LOD2 != `LOD2@LZ): "Illegal instruction encoding: CUBE does not support the LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,dc) for TEXS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (ParamA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Ra%2==0)): "Misaligned Ra register in TEXS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ) == 64 ) -> (Rb%2==0)): "Misaligned Rb register in TEXS" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Ra is out of range in TEXS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ))/32)))) : "Register Rb is out of range in TEXS" OOR_REG_ERROR ((((Rd2)==`Register@RZ)||((Rd2)<=%MAX_REG_COUNT-32/32))) : "Register Rd2 is out of range in TEXS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-32/32))) : "Register Rd is out of range in TEXS" PROPERTIES SIDL_NAME = `SIDL_NAMES@TEXS16; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (32); IDEST2_SIZE = (32); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 64 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 0 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LL) ) && (dc == `DC@DC ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@DC ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD2@LZ) ) && (dc == `DC@DC) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD2@LZ) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@noLOD) ) && (dc == `DC@noDC) ) * 32 ) + ( ( ( (paramA == `ParamA@"CUBE" ) && (lod == `LOD2@LL) ) && (dc == `DC@noDC) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TEXSmio_pipe = 0b11010_0; TEXS = 0b11010_0; ENCODING Opcode5_1 = Opcode; FP16RM1 = fp16rm; tex2d_4 = Tex2D4(paramA,dc,lod); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLDS_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD1:lod /TOFF1(noTOFF):toff /MS(noMS):ms /NODEP(noNODEP):ndp /TPhase(noPhase):phase ZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk2C:wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Ra%2==0)) : "Misaligned Ra register in TLDS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Rb%2==0)) : "Misaligned Rb register in TLDS" MISALIGNED_REG_ERROR ((( ( (wmsk == `TEXWmsk2C@R ) * 32 ) + ( (wmsk == `TEXWmsk2C@G ) * 32 ) + ( (wmsk == `TEXWmsk2C@B ) * 32 ) + ( (wmsk == `TEXWmsk2C@A ) * 32 ) + ( (wmsk == `TEXWmsk2C@RG ) * 64 ) + ( (wmsk == `TEXWmsk2C@RA ) * 64 ) + ( (wmsk == `TEXWmsk2C@GA ) * 64 ) + ( (wmsk == `TEXWmsk2C@BA ) * 64 ) ) == 64) -> ((Rd==`Register@RZ)||(Rd%2==0))): "Misaligned Rd register in TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,toff,ms) for TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Ra is out of range in TLDS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Rb is out of range in TLDS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-( ( (wmsk == `TEXWmsk2C@R ) * 32 ) + ( (wmsk == `TEXWmsk2C@G ) * 32 ) + ( (wmsk == `TEXWmsk2C@B ) * 32 ) + ( (wmsk == `TEXWmsk2C@A ) * 32 ) + ( (wmsk == `TEXWmsk2C@RG ) * 64 ) + ( (wmsk == `TEXWmsk2C@RA ) * 64 ) + ( (wmsk == `TEXWmsk2C@GA ) * 64 ) + ( (wmsk == `TEXWmsk2C@BA ) * 64 ) )/32))) : "Register Rd is out of range in TLDS" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( ( (wmsk == `TEXWmsk2C@R ) * 32 ) + ( (wmsk == `TEXWmsk2C@G ) * 32 ) + ( (wmsk == `TEXWmsk2C@B ) * 32 ) + ( (wmsk == `TEXWmsk2C@A ) * 32 ) + ( (wmsk == `TEXWmsk2C@RG ) * 64 ) + ( (wmsk == `TEXWmsk2C@RA ) * 64 ) + ( (wmsk == `TEXWmsk2C@GA ) * 64 ) + ( (wmsk == `TEXWmsk2C@BA ) * 64 ) ); IDEST2_SIZE = (0); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLDSmio_pipe = 0b1101101; TLDS = 0b1101101; ENCODING Opcode7 = Opcode; tex2d_4 = Tld2D4(paramA, ms, lod, toff); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLDS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD1:lod /TOFF1(noTOFF):toff /MS(noMS):ms /NODEP(noNODEP):ndp /TPhase(noPhase):phase NonZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk34C(RGBA/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (wmsk != `TEXWmsk34C@INVALID5): "Invalid TEXWmsk34C (wmsk) field value INVALID5" ILLEGAL_INSTR_ENCODING_ERROR (wmsk != `TEXWmsk34C@INVALID6): "Invalid TEXWmsk34C (wmsk) field value INVALID6" ILLEGAL_INSTR_ENCODING_ERROR (wmsk != `TEXWmsk34C@INVALID7): "Invalid TEXWmsk34C (wmsk) field value INVALID7" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Ra%2==0)) : "Misaligned Ra register in TLDS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Rb%2==0)) : "Misaligned Rb register in TLDS" MISALIGNED_REG_ERROR ((( ( (wmsk == `TEXWmsk34C@RGB ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@GBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGBA) * 64 ) ) == 64) -> ((Rd2==`Register@RZ)||(Rd2%2==0))): "Misaligned Rd2 register in TLDS" MISALIGNED_REG_ERROR ((Rd==`Register@RZ)||(Rd%2==0)): "Misaligned Rd register in TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,toff,ms) for TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Ra is out of range in TLDS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Rb is out of range in TLDS" OOR_REG_ERROR ((((Rd2)==`Register@RZ)||((Rd2)<=%MAX_REG_COUNT-( ( (wmsk == `TEXWmsk34C@RGB ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@GBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGBA) * 64 ) )/32))) : "Register Rd2 is out of range in TLDS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-64/32))) : "Register Rd is out of range in TLDS" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (64); IDEST2_SIZE = ( ( (wmsk == `TEXWmsk34C@RGB ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@GBA ) * 32 ) + ( (wmsk == `TEXWmsk34C@RGBA) * 64 ) ); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLDSmio_pipe = 0b1101101; TLDS = 0b1101101; ENCODING Opcode7 = Opcode; tex2d_4 = Tld2D4(paramA, ms, lod, toff); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLDS_F16_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float16:f16 /F16RoundMode(RTNE):fp16rm /LOD1:lod /TOFF1(noTOFF):toff /MS(noMS):ms /NODEP(noNODEP):ndp /TPhase(noPhase):phase ZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk2C:wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Ra%2==0)) : "Misaligned Ra register in TLDS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Rb%2==0)) : "Misaligned Rb register in TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,toff,ms) for TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Ra is out of range in TLDS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Rb is out of range in TLDS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-32/32))) : "Register Rd is out of range in TLDS" PROPERTIES SIDL_NAME = `SIDL_NAMES@TLDS16; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (32); IDEST2_SIZE = (0); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLDSmio_pipe = 0b11010_1; TLDS = 0b11010_1; ENCODING Opcode5_1 = Opcode; FP16RM1 = fp16rm; tex2d_4 = Tld2D4(paramA, ms, lod, toff); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLDS_F16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float16:f16 /F16RoundMode(RTNE):fp16rm /LOD1:lod /TOFF1(noTOFF):toff /MS(noMS):ms /NODEP(noNODEP):ndp /TPhase(noPhase):phase NonZeroRegister:Rd2 ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' TEXWmsk34C(RGBA/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (wmsk != `TEXWmsk34C@INVALID5): "Invalid TEXWmsk34C (wmsk) field value INVALID5" ILLEGAL_INSTR_ENCODING_ERROR (wmsk != `TEXWmsk34C@INVALID6): "Invalid TEXWmsk34C (wmsk) field value INVALID6" ILLEGAL_INSTR_ENCODING_ERROR (wmsk != `TEXWmsk34C@INVALID7): "Invalid TEXWmsk34C (wmsk) field value INVALID7" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Ra%2==0)) : "Misaligned Ra register in TLDS" MISALIGNED_REG_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 64 ) -> (Rb%2==0)) : "Misaligned Rb register in TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR (( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) ) ) == 1): "Illegal instruction encoding: Invalid combination of (paramA,lod,toff,ms) for TLDS" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((( ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (ParamA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (ParamA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (ParamA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ) == 0 ) -> (Rb == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Ra is out of range in TLDS" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ))/32)))) : "Register Rb is out of range in TLDS" OOR_REG_ERROR ((((Rd2)==`Register@RZ)||((Rd2)<=%MAX_REG_COUNT-32/32))) : "Register Rd2 is out of range in TLDS" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-32/32))) : "Register Rd is out of range in TLDS" PROPERTIES SIDL_NAME = `SIDL_NAMES@TLDS16; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (32); IDEST2_SIZE = (32); ISRC_A_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_B_SIZE = ( ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 0 ) + ( ( ( (paramA == `ParamA@"1D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@MS ) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"3D" ) && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 32 ) + ( ( ( (paramA == `ParamA@"ARRAY_2D") && (lod == `LOD1@LZ) && (toff == `TOFF1@noTOFF) && (ms == `MS@noMS) ) ) * 64 ) + ( ( ( (paramA == `ParamA@"2D" ) && (lod == `LOD1@LL) && (toff == `TOFF1@AOFFI ) && (ms == `MS@noMS) ) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLDSmio_pipe = 0b11010_1; TLDS = 0b11010_1; ENCODING Opcode5_1 = Opcode; FP16RM1 = fp16rm; tex2d_4 = Tld2D4(paramA, ms, lod, toff); Wmsk3 = wmsk; NODEP = NODEP; TidB = tid; Dest2 =* Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLD4S" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /TexComp:tcomp /TOFF1(noTOFF):toff /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd2 ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(13):tid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((Rd==`Register@RZ)||(Rd%2==0)): "Misaligned Rd register in TLD4S" MISALIGNED_REG_ERROR ((Rd2==`Register@RZ)||(Rd2%2==0)): "Misaligned Rd2 register in TLD4S" MISALIGNED_REG_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 64 ) -> (Ra%2==0)) : "Misaligned Ra register in TLD4S" MISALIGNED_REG_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 64 ) -> (Rb%2==0)) : "Misaligned Rb register in TLD4S" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_WARNING ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_WARNING ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2))) : "Register Rd is out of range in TLD4S" OOR_REG_ERROR ((((Rd2)==`Register@RZ)||((Rd2)<=%MAX_REG_COUNT-2))) : "Register Rd2 is out of range in TLD4S" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ))/32)))) : "Register Ra is out of range in TLD4S" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ))/32)))) : "Register Rb is out of range in TLD4S" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; IDEST2_SIZE = 64; ISRC_A_SIZE = ( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ); ISRC_B_SIZE = ( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLD4Smio_pipe = 0b1101111100; TLD4S = 0b1101111100; ENCODING Opcode10 = Opcode; TexComp2 = TexComp; AOFFI2 = toff; DC = DC; NODEP = NODEP; TidB = tid; Dest2 = Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLD4S_F16" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Float16:f16 /F16RoundMode(RTNE):fp16rm /TexComp:tcomp /TOFF1(noTOFF):toff /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd2 ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(13):tid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 64 ) -> (Ra%2==0)) : "Misaligned Ra register in TLD4S" MISALIGNED_REG_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 64 ) -> (Rb%2==0)) : "Misaligned Rb register in TLD4S" ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) > 0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " ILLEGAL_INSTR_ENCODING_ERROR ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) > 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ " ILLEGAL_INSTR_ENCODING_WARNING ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 0 ) -> (Ra == `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is == 0, then Ra must be RZ " ILLEGAL_INSTR_ENCODING_WARNING ((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ) == 0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is == 0, then Rb must be RZ " OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ))/32)))) : "Register Ra is out of range in TLD4S" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ))/32)))) : "Register Rb is out of range in TLD4S" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1))) : "Register Rd is out of range in TLD4S" OOR_REG_ERROR ((((Rd2)==`Register@RZ)||((Rd2)<=%MAX_REG_COUNT-1))) : "Register Rd2 is out of range in TLD4S" PROPERTIES SIDL_NAME = `SIDL_NAMES@TLD4S16; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST2_OPERAND_MAP = (1<<INDEX(Rd2)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; IDEST2_SIZE = 32; ISRC_A_SIZE = ( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 64 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ); ISRC_B_SIZE = ( ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@noTOFF) && ( dc == `DC@DC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@noDC ) ) * 32 ) + ( ( (toff == `TOFF1@AOFFI ) && ( dc == `DC@DC ) ) * 64 ) ); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLD4Smio_pipe = 0b110111111; TLD4S = 0b110111111; ENCODING Opcode9 = Opcode; FP16RM = fp16rm; TexComp2 = TexComp; AOFFI2 = toff; DC = DC; NODEP = NODEP; TidB = tid; Dest2 = Rd2; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOD1:lod /TOFF1(noTOFF):toff /MS(noMS):ms /CL(noCL):clamp /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@CUBE): "Illegal instruction encoding: CUBE is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_CUBE) : "Illegal instruction encoding: ARRAY_3D is not supported" ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: ARRAY_CUBE is not supported" ILLEGAL_INSTR_ENCODING_ERROR (MS == `MS@MS) -> (LOD1 == `LOD1@LZ): "Illegal instruction encoding: .MS can only be used with the .LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR (MS == `MS@MS) -> (CL != `CL@CL): "Illegal instruction encoding: .MS can not be used with the CL option" ILLEGAL_INSTR_ENCODING_ERROR (MS == `MS@MS) -> (ParamA == `ParamA@"2D" || ParamA == `ParamA@ARRAY_2D): "Illegal instruction encoding: .MS can only be used with 2D/ARRAY_2D textures" ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = (( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLDmio_pipe = 0b110_11100; TLD = 0b110_11100; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; TidB = tid; Wmsk = wmsk; LOD1 = LOD1; TOFF1 = TOFF1; MS = MS; CL = CL; NODEP = NODEP; PredDst = Pd; ParamA = ParamA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLD_B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LOD1:lod /TOFF1(noTOFF):toff /MS(noMS):ms /CL(noCL):clamp /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13)@:tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) + 1 ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) + 1 ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) + 1 ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@CUBE): "Illegal instruction encoding: CUBE is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_CUBE) : "Illegal instruction encoding: ARRAY_3D is not supported" ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: ARRAY_CUBE is not supported" ILLEGAL_INSTR_ENCODING_ERROR (MS == `MS@MS) -> (LOD1 == `LOD1@LZ): "Illegal instruction encoding: .MS can only be used with the .LZ LOD option" ILLEGAL_INSTR_ENCODING_ERROR (MS == `MS@MS) -> (CL != `CL@CL): "Illegal instruction encoding: .MS can not be used with the CL option" ILLEGAL_INSTR_ENCODING_ERROR (MS == `MS@MS) -> (ParamA == `ParamA@"2D" || ParamA == `ParamA@ARRAY_2D): "Illegal instruction encoding: .MS can only be used with 2D/ARRAY_2D textures" ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) + 1 ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = (( (TOFF1 == `TOFF1@AOFFI) + (MS == `MS@MS) + (LOD1 == `LOD1@LL) + 1 )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLDmio_pipe = 0b110_11101; TLD = 0b110_11101; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTLDB; Wmsk = wmsk; LOD1 = LOD1; TOFF1 = TOFF1; MS = MS; CL = CL; NODEP = NODEP; PredDst = Pd; ParamA = paramA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLD4" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /TexComp:tcomp /TOFF2(noTOFF):toff /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13):tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (toff != `TOFF2@INVALIDBTOFF03): "Invalid TOFF2 (toff) field value INVALIDBTOFF03" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@PTP) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: PTP is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"1D") : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_1D) : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = (( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLD4mio_pipe = 0b11001; TLD4 = 0b11001; ENCODING Opcode5 = Opcode; LC = 0; PredDst = Pd; TidB = tid; TexComp = TexComp; TOFF2 = TOFF2; DC = DC; ParamA = paramA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NDV; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TLD4_B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /TexComp:tcomp /BOnly:b /TOFF2(noTOFF):toff /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13)@:tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (toff != `TOFF2@INVALIDBTOFF03): "Invalid TOFF2 (toff) field value INVALIDBTOFF03" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@PTP) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: PTP is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"1D") : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_1D) : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR (((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1)) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLD4mio_pipe = 0b11011_11011; TLD4 = 0b11011_11011; ENCODING Opcode10 = Opcode; LCB = 0; PredDst = Pd; TexCompB = TexComp; TOFF2B = TOFF2; DC = DC; ParamA = paramA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTEXB; !NDV; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TLD4_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /TexComp:tcomp /TOFF2(noTOFF):toff /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(8):tid ',' UImm(5):smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (toff != `TOFF2@INVALIDBTOFF03): "Invalid TOFF2 (toff) field value INVALIDBTOFF03" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@PTP) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: PTP is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"1D") : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_1D) : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = (( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLD4mio_pipe = 0b11001; TLD4 = 0b11001; ENCODING Opcode5 = Opcode; LC = 0; PredDst = Pd; TidBTEX = tid; TidBSAMP = smp; TexComp = TexComp; TOFF2 = TOFF2; DC = DC; ParamA = ParamA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NDV; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TLD4_B_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /TexComp:tcomp /BOnly:b /TOFF2(noTOFF):toff /DC(noDC):dc /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(8)@:tid ',' UImm(5)@:smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (toff != `TOFF2@INVALIDBTOFF03): "Invalid TOFF2 (toff) field value INVALIDBTOFF03" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@PTP) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: PTP is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (TOFF2 == `TOFF2@AOFFI) -> ((ParamA != `ParamA@CUBE) && (ParamA != `ParamA@ARRAY_CUBE)) : "Illegal instruction encoding: AOFFI is not supported with CubeMap textures " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"1D") : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_1D) : "Illegal instruction encoding: 1D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (ParamA != `ParamA@ARRAY_3D) : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR (((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = ((( (TOFF2 == `TOFF2@AOFFI ) + (TOFF2 == `TOFF2@PTP) * 2 + (DC == `DC@DC) )+1)) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TLD4mio_pipe = 0b11011_11011; TLD4 = 0b11011_11011; ENCODING Opcode10 = Opcode; LCB = 0; PredDst = Pd; TexCompB = TexComp; TOFF2B = TOFF2; DC = DC; ParamA = ParamA; Wmsk = wmsk; NODEP = NODEP; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTEXB; !NDV; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TMML" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LODOnly:lod /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' Register(RZ)@:Rb ',' UImm(13):tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR (0 > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (0 == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-0)) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA != `ParamA@ARRAY_3D)) : "Illegal instruction encoding: ARRAY_3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((0 >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = (0) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TMMLmio_pipe = 0b110_11111_01011; TMML = 0b110_11111_01011; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidB = tid; NDV = NDV; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencTMML; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TMML_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LODOnly:lod /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' Register(RZ)@:Rb ',' UImm(8):tid ',' UImm(5):smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR (0 > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (0 == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-0)) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA != `ParamA@ARRAY_3D)) : "Illegal instruction encoding: ARRAY_3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((0 >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = (0) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TMMLmio_pipe = 0b110_11111_01011; TMML = 0b110_11111_01011; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidBTEX = tid; TidBSAMP = smp; NDV = NDV; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; !NencTMML; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TMML_B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LODOnly:lod /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(13)@:tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR ((0 +1) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((0 +1) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(0 +1))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA != `ParamA@ARRAY_3D)) : "Illegal instruction encoding: ARRAY_3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR (((0 +1) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = ((0 +1)) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TMMLmio_pipe = 0b110_11111_01100; TMML = 0b110_11111_01100; ENCODING Opcode13 = Opcode; NODEP = NODEP; NDV = NDV; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTMMLB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TMML_B_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LODOnly:lod /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' Register(RZ):Rb ',' UImm(8)@:tid ',' UImm(5)@:smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ))) : "Register A is out of range" MISALIGNED_REG_ERROR ((0 +1) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((0 +1) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(0 +1))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((ParamA != `ParamA@ARRAY_3D)) : "Illegal instruction encoding: ARRAY_3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR (((0 +1) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (( (ParamA == `ParamA@"_1D") + (ParamA == `ParamA@RECT) * 2 + (ParamA == `ParamA@CUBE) * 3 + (ParamA == `ParamA@"_3D") * 3 + (ParamA == `ParamA@ARRAY_1D) * 2 + (ParamA == `ParamA@ARRAY_RECT) * 3 + (ParamA == `ParamA@ARRAY_3D) * 4 + (ParamA == `ParamA@ARRAY_CUBE) * 4 )) * 32; ISRC_B_SIZE = ((0 +1)) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TMMLmio_pipe = 0b110_11111_01100; TMML = 0b110_11111_01100; ENCODING Opcode13 = Opcode; NODEP = NODEP; NDV = NDV; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !NencTMMLB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TXD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LC(noLC):lc /TOFF1(noTOFF):toff /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(13):tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_3D) : "(Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ( ( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )) * 32; ISRC_B_SIZE = ( ( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXDmio_pipe = 0b11011_11000; TXD = 0b11011_11000; ENCODING Opcode10 = Opcode; PredDst = Pd; LCD = lc; NODEP = NODEP; TidB = tid; TOFF1 = TOFF1; Wmsk = wmsk; ParamA = ParamA; RegB = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXD_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LC(noLC):lc /TOFF1(noTOFF):toff /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(8):tid ',' UImm(5):smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ))) : "Register A is out of range" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_3D) : "(Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR ((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) ) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ( ( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )) * 32; ISRC_B_SIZE = ( ( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXDmio_pipe = 0b11011_11000; TXD = 0b11011_11000; ENCODING Opcode10 = Opcode; PredDst = Pd; LCD = lc; NODEP = NODEP; TidBTEX = tid; TidBSAMP = smp; TOFF1 = TOFF1; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TXD.B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LC(noLC):lc /TOFF1(noTOFF):toff /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(13)@:tid ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR ((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1))) : "Register A is out of range" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_3D) : "(Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR (((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ( (( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1)) * 32; ISRC_B_SIZE = ( ( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXDmio_pipe = 0b11011_11001; TXD = 0b11011_11001; ENCODING Opcode10 = Opcode; PredDst = Pd; LCD = lc; NODEP = NODEP; TOFF1 = TOFF1; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !TidB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXD_B_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /LC(noLC):lc /TOFF1(noTOFF):toff /NODEP(noNODEP):ndp /TPhase(noPhase):phase Predicate(PT):Pd ',' Register:Rd ',' Register:Ra ',' Register:Rb ',' UImm(8)@:tid ',' UImm(5)@:smp ',' ParamA:paramA ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR ((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1) > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR ((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1))) : "Register A is out of range" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) > 2 ) -> ((((Rb)+((Rb)==255)) & 0x3) == 0) : "Register B should be aligned to 4 if the number of coordinates is > 2" MISALIGNED_REG_ERROR (( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) == 2) -> ((((Rb)+((Rb)==255)) & 0x1) == 0) : "Register B should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ))) : "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@"3D") : "Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_3D) : "(Illegal instruction encoding: 3D is not supported " ILLEGAL_INSTR_ENCODING_ERROR (paramA != `ParamA@ARRAY_CUBE) : "Illegal instruction encoding: Cube is not supported " ILLEGAL_INSTR_ENCODING_ERROR (((( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ" ILLEGAL_INSTR_ENCODING_ERROR ((( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) ) >0 ) -> (Rb != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Rb is > 0, then Rb cannot be RZ" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ( (( ((ParamA == `ParamA@"1D")*1) + ((ParamA == `ParamA@"2D")*2 ) + (((ParamA == `ParamA@"1D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + (((ParamA == `ParamA@"2D")&&((TOFF1 == `TOFF1@AOFFI) || (LC == `LC@LC)))) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*3) )+1)) * 32; ISRC_B_SIZE = ( ( ((ParamA == `ParamA@"1D")*2) + ((ParamA == `ParamA@"2D")*4 ) + ((ParamA == `ParamA@"ARRAY_1D")*2) + ((ParamA == `ParamA@"ARRAY_2D")*4) )) * 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXDmio_pipe = 0b11011_11001; TXD = 0b11011_11001; ENCODING Opcode10 = Opcode; PredDst = Pd; LCD = lc; NODEP = NODEP; TOFF1 = TOFF1; Wmsk = wmsk; ParamA = ParamA; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; RegB = Rb; !TidB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TXQ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' TXQMode:query ',' UImm(13):tid ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01001; TXQ = 0b110_11111_01001; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidB = tid; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(TXQMode); !NencTXQ; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXQ_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' TXQMode:query ',' UImm(8):tid ',' UImm(5):smp ',' UImm(4):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01001; TXQ = 0b110_11111_01001; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidBTEX = tid; TidBSAMP = smp; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(TXQMode); !NencTXQ; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXQ_Imm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' UImm(5):query ',' UImm(13):tid ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01001; TXQ = 0b110_11111_01001; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidB = tid; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(query); !NencTXQ; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXQ_Imm_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' UImm(5):query ',' UImm(8):tid ',' UImm(5):smp ',' UImm(4):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = (((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01001; TXQ = 0b110_11111_01001; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidBTEX = tid; TidBSAMP = smp; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(query); !NencTXQ; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TXQ_B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' TXQMode:query ',' UImm(13)@:tid ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((TXQMode == `TXQMode@TEX_HEADER_DIMENSION) || (TXQMode == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> ((((Ra)+((Ra)==255)) & 0x1) == 0): "Register A is not aligned" OOR_REG_ERROR ((TXQMode == `TXQMode@TEX_HEADER_DIMENSION) || (TXQMode == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR (((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1)) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01010; TXQ = 0b110_11111_01010; ENCODING Opcode13 = Opcode; NODEP = NODEP; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(TXQMode); !NencTXQ; !TidB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXQ_B_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' TXQMode:query ',' UImm(8)@:tid ',' UImm(5)@:smp ',' UImm(4):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((TXQMode == `TXQMode@TEX_HEADER_DIMENSION) || (TXQMode == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> ((((Ra)+((Ra)==255)) & 0x1) == 0): "Register A is not aligned" OOR_REG_ERROR ((TXQMode == `TXQMode@TEX_HEADER_DIMENSION) || (TXQMode == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR (((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1)) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01010; TXQ = 0b110_11111_01010; ENCODING Opcode13 = Opcode; NODEP = NODEP; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(TXQMode); !NencTXQ; !TidB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXQ_B_Imm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' UImm(5):query ',' UImm(13)@:tid ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> ((((Ra)+((Ra)==255)) & 0x1) == 0): "Register A is not aligned" OOR_REG_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR (((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1)) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01010; TXQ = 0b110_11111_01010; ENCODING Opcode13 = Opcode; NODEP = NODEP; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(query); !NencTXQ; !TidB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXQ_B_Imm_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BOnly:b /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' UImm(5):query ',' UImm(8)@:tid ',' UImm(5)@:smp ',' UImm(4):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> ((((Ra)+((Ra)==255)) & 0x1) == 0): "Register A is not aligned" OOR_REG_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) == 2) -> ((((Ra)+((Ra)==255)) & 0x1) == 0) : "Register A should be aligned to 2 if the number of coordinates is == 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1))) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" ILLEGAL_INSTR_ENCODING_ERROR ((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_TEXTURE_TYPE) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS)) : "Illegal instruction encoding: Queue mode not supported" ILLEGAL_INSTR_ENCODING_ERROR (((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1) >0 ) -> (Ra != `Register@RZ)) : "Illegal instruction encoding: If the number of coordinates of Ra is > 0, then Ra cannot be RZ " PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = ((((query == `TXQMode@TEX_HEADER_DIMENSION) || (query == `TXQMode@TEX_HEADER_SAMPLER_POS))+1)) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXQmio_pipe = 0b110_11111_01010; TXQ = 0b110_11111_01010; ENCODING Opcode13 = Opcode; NODEP = NODEP; Wmsk = wmsk; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; TexQuery = TXQModeDim(query); !NencTXQ; !TidB; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "TXA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' UImm(13):tid ',' UImm(4/15/PRINT):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS) : "Can only be used with pixel shader" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ) : "Ra cannot be RZ for TXA instruction" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (4 > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-4)) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = 128; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXAmio_pipe = 0b110_11111_01000; TXA = 0b110_11111_01000; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidB = tid; NDV = NDV; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Wmsk = wmsk; !NencTXA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "TXA_Legacy_Style" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /NDV(noNDV):ndv /NODEP(noNODEP):ndp /TPhase(noPhase):phase Register:Rd ',' Register:Ra ',' UImm(8):tid ',' UImm(5):smp ',' UImm(4):wmsk $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS) : "Can only be used with pixel shader" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ) : "Ra cannot be RZ for TXA instruction" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) > 2) -> ((((Rd)+((Rd)==255)) & 0x3) == 0) : "Register D should be aligned to 4 if sz is greater than 64" MISALIGNED_REG_ERROR ((((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)) == 2) -> ((((Rd)+((Rd)==255)) & 0x1) == 0) : "Register D should be aligned to 2 if sz is 64" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(((wmsk & 0x1) != 0) + ((wmsk & 0x2) != 0) + ((wmsk & 0x4) != 0) + ((wmsk & 0x8) != 0)))) : "Register D is out of range" MISALIGNED_REG_ERROR (4 > 2 ) -> ((((Ra)+((Ra)==255)) & 0x3) == 0) : "Register A should be aligned to 4 if the number of coordinates is > 2" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-4)) : "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (phase != `TPhase@INVALIDPHASE3): "Invalid TPhase (phase) field value INVALIDPHASE3" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FLOAT); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = ( (((wmsk)&0x1) + ((wmsk>>1)&0x1) + ((wmsk>>2)&0x1) + ((wmsk>>3)&0x1)) ) * 32; ISRC_A_SIZE = 128; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES TXAmio_pipe = 0b110_11111_01000; TXA = 0b110_11111_01000; ENCODING Opcode13 = Opcode; NODEP = NODEP; TidBTEX = tid; TidBSAMP = smp; NDV = NDV; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = Ra; Wmsk = wmsk; !NencTXA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OETexPhase = TPhase; !OEReserved; !OEReserved1; CLASS "DEPBAR_LE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LEOnly:le Scoreboard:sbidx ',' UImm(6):cnt ',' BITSET(6/0x0000):dep_scbd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((dep_scbd & (1 << sbidx)) == 0): "In DEPBAR.LE s, m, S, the scoreboard s cannot be in the set of scorboards S" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES DEPBARfe_pipe = 0b1111000011110; DEPBAR = 0b1111000011110; ENCODING Opcode13 = Opcode; LE = 1; SBID = sbidx; PendCnt = cnt; Pred = Pg; PredNot = Pg@not; Imm6=dep_scbd; !NencDEPBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "DEPBAR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode BITSET(6/0x0000):dep_scbd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES DEPBARfe_pipe = 0b1111000011110; DEPBAR = 0b1111000011110; ENCODING Opcode13 = Opcode; LE = 0; !SBID; !PendCnt; Pred = Pg; PredNot = Pg@not; Imm6 = dep_scbd; !NencDEPBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "DEPBAR_ALL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ALLOnly:all $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES DEPBARfe_pipe = 0b1111000011110; DEPBAR = 0b1111000011110; ENCODING Opcode13 = Opcode; LE = 0; !SBID; !PendCnt; Pred = Pg; PredNot = Pg@not; Imm6 = 0b111111; !NencDEPBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "AL2P" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AIO(I):io /AInteger("32"):size Predicate(PT):Pd ',' Register:Rd ',' NonZeroRegister:Ra ',' SImm(11/0):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS) : "Can't use instruction AL2P with shader type CS)" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS) + (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOGICAL_ATTR_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES AL2Pmio_pipe = 0b1110111110100; AL2P = 0b1110111110100; ENCODING Opcode13= Opcode; ALSize = AInteger; AIO = AIO; Imm11 = sImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; DstPred1 = Pd; !NencAL2P; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_AL2P" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AIO(I):io /AInteger("32"):size Predicate(PT):Pd ',' Register:Rd ',' ZeroRegister(RZ):Ra ',' UImm(10/0):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS) : "Can't use instruction AL2P with shader type CS)" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS) + (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOGICAL_ATTR_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 10; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_ADU; OPCODES AL2Pmio_pipe = 0b1110111110100; AL2P = 0b1110111110100; ENCODING Opcode13 = Opcode; ALSize = AInteger; AIO = AIO; Imm10 = uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA = `Register@RZ; DstPred1 = Pd; !NencAL2P; !msbImm11; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ALD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AIO(I):io /AInteger("32"):size Register:Rd ',' A:srcAttr[ZeroRegister(RZ):Ra + UImm(10/0)*:uImm] ',' Register(RZ):Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS) : "Can't use instruction ALD with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS) : "Can't use instruction ALD with shader type CS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_GS) -> (AIO != `AIO@O)) : "Can't use instruction ALD with shader type GS and .O modifier)" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_VSA || %SHADER_TYPE == $ST_VSB) -> (Rb == `Register@RZ)) : "Register B must be Rz when using with shader type VSa or VSb)" MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-AInteger+1)))): "Register D is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOGICAL_ATTR_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_A_SIZE = 10; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ALDmio_pipe = 0b1110111111011; ALD = 0b1110111111011; ENCODING Opcode13 = Opcode; AIO = AIO; P = 0; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; RegBALD = Rb; Imm10 = uImm; ALSize = AInteger; !NencALD; !msbImm11; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ALD_PATCH" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AIO(I):io /POnly:p /AInteger("32"):size Register:Rd ',' A:srcAttr[ZeroRegister(RZ):Ra + UImm(10/0)*:uImm] ',' Register(RZ):Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS) : "Can't use instruction ALD with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS) : "Can't use instruction ALD with shader type CS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_GS) -> (AIO != `AIO@O)) : "Can't use instruction ALD with shader type GS and .O modifier)" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_VSA || %SHADER_TYPE == $ST_VSB) -> (Rb == `Register@RZ)) : "Register B must be Rz when using with shader type VSa or VSb)" ILLEGAL_INSTR_ENCODING_ERROR (p == `POnly@P) -> (Rb == `Register@RZ) : ".P modifier can only be used with Rb equal to Rz" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (((p == `POnly@P) && (io == `AIO@O)) -> (%SHADER_TYPE == $ST_TI)) : ".P and .O modifier can only be used together when shader type is TI" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((p == `POnly@P) -> ((io == `AIO@O) || (%SHADER_TYPE == $ST_TS) || (%SHADER_TYPE == $ST_GS))) : ".P modifer can only be used with .O modifier or shader type TS or shader type GS" MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-AInteger+1)))): "Register D is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PATCH_OFFSET_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_A_SIZE = 10; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ALDmio_pipe = 0b1110111111011; ALD = 0b1110111111011; ENCODING Opcode13 = Opcode; AIO = AIO; P = 1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; RegBALD = Rb; Imm10 = uImm; ALSize = AInteger; !NencALD; !msbImm11; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ALD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AIO(I):io /POnly:p /AInteger("32"):size Register:Rd ',' A:srcAttr[NonZeroRegister:Ra + SImm(11/0)*:sImm] ',' Register(RZ):Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS) : "Can't use instruction ALD with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS) : "Can't use instruction ALD with shader type CS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_GS) -> (AIO != `AIO@O)) : "Can't use instruction ALD with shader type GS and .O modifier)" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_VSA || %SHADER_TYPE == $ST_VSB) -> (Rb == `Register@RZ)) : "Register B must be Rz when using with shader type VSa or VSb)" ILLEGAL_INSTR_ENCODING_ERROR (p == `POnly@P) -> (Rb == `Register@RZ) : ".P modifier can only be used with Rb equal to Rz" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (((p == `POnly@P) && (io == `AIO@O)) -> (%SHADER_TYPE == $ST_TI)) : ".P and .O modifier can only be used together when shader type is TI" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((p == `POnly@P) -> ((io == `AIO@O) || (%SHADER_TYPE == $ST_TS) || (%SHADER_TYPE == $ST_GS))) : ".P modifer can only be used with .O modifier or shader type TS or shader type GS" MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-AInteger+1)))): "Register D is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PATCH_OFFSET_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ALDmio_pipe = 0b1110111111011; ALD = 0b1110111111011; ENCODING Opcode13 = Opcode; AIO = AIO; P = 1; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; RegBALD = Rb; Imm11 = sImm; ALSize = AInteger; !NencALD; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ALD_PHYS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AIO(I):io /Phys:phys /AInteger("32"):size Register:Rd ',' A:srcAttr[NonZeroRegister:Ra] ',' Register(RZ):Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS) : "Can't use instruction ALD with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS) : "Can't use instruction ALD with shader type CS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_GS) -> (AIO != `AIO@O)) : "Can't use instruction ALD with shader type GS and .O modifier)" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_VSA || %SHADER_TYPE == $ST_VSB) -> (Rb == `Register@RZ)) : "Register B must be Rz when using with shader type VSa or VSb)" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (Ra != `Register@RZ) : "Ra cannot be RZ for ALD.PHYS" MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-AInteger+1)))): "Register D is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PHYSICAL_ATTR_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ALDmio_pipe = 0b1110111111011; ALD = 0b1110111111011; ENCODING Opcode13 = Opcode; AIO = AIO; P = 0; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; RegBALD = Rb; Imm11 = 0; ALSize = AInteger; !NencALD; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_AST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AInteger("32"):size A:srcAttr[ZeroRegister(RZ):Ra + UImm(10/0)*:uImm] ',' Register:Rb ',' Register(RZ):Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS): "Can't use with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS): "Can't use with shader type CS)" UNPREDICTABLE_BEHAVIOR_WARNING ((%SHADER_TYPE != $ST_GS)->(Rc==`Register@RZ)): "Unpredictable Behavior Warning: Rc must be RZ for AST in non Geometry Shaders" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-AInteger+1)))): "Register B is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOGICAL_ATTR_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 10; ISRC_B_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ASTmio_pipe = 0b1110111111110; AST = 0b1110111111110; ENCODING Opcode13= Opcode; P = 0; Pred = Pg; PredNot = Pg@not; RegC = Rc; RegA =* Ra; RegBAST = Rb; Imm10 = uImm; ALSize = AInteger; !AIO; !NencALD; !msbImm11; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_AST_PATCH" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /AInteger("32"):size A:srcAttr[ZeroRegister(RZ):Ra + UImm(10/0)*:uImm] ',' Register:Rb ',' Register(RZ):Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS): "Can't use with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS): "Can't use with shader type CS)" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((p==`POnly@P) -> (%SHADER_TYPE == $ST_TI)): ".P modifier can only be used with shader type TI" UNPREDICTABLE_BEHAVIOR_WARNING ((%SHADER_TYPE != $ST_GS)->(Rc==`Register@RZ)): "Unpredictable Behavior Warning: Rc must be RZ for AST in non Geometry Shaders" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-AInteger+1)))): "Register B is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PATCH_OFFSET_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 10; ISRC_B_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ASTmio_pipe = 0b1110111111110; AST = 0b1110111111110; ENCODING Opcode13= Opcode; P = 1; Pred = Pg; PredNot = Pg@not; RegC = Rc; RegA =* Ra; RegBAST = Rb; Imm10 = uImm; ALSize = AInteger; !AIO; !NencALD; !msbImm11; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "AST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /AInteger("32"):size A:srcAttr[NonZeroRegister:Ra + SImm(11/0)*:sImm] ',' Register:Rb ',' Register(RZ):Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS): "Can't use with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS): "Can't use with shader type CS)" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((p==`POnly@P) -> (%SHADER_TYPE == $ST_TI)): ".P modifier can only be used with shader type TI" UNPREDICTABLE_BEHAVIOR_WARNING ((%SHADER_TYPE != $ST_GS)->(Rc==`Register@RZ)): "Unpredictable Behavior Warning: Rc must be RZ for AST in non Geometry Shaders" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-AInteger+1)))): "Register B is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PATCH_OFFSET_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ASTmio_pipe = 0b1110111111110; AST = 0b1110111111110; ENCODING Opcode13 = Opcode; P = 1; Pred = Pg; PredNot = Pg@not; RegC = Rc; RegA =* Ra; RegBAST = Rb; Imm11 = sImm; ALSize = AInteger; !NencALD; !AIO; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "AST_PHYS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Phys:phys /AInteger("32"):size A:srcAttr[NonZeroRegister:Ra] ',' Register:Rb ',' Register(RZ):Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS): "Can't use with shader type PS" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_CS): "Can't use with shader type CS)" UNPREDICTABLE_BEHAVIOR_WARNING ((%SHADER_TYPE != $ST_GS)->(Rc==`Register@RZ)): "Unpredictable Behavior Warning: Rc must be RZ for AST in non Geometry Shaders" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % ARegAlignment(AInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-AInteger+1)))): "Register B is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PHYSICAL_ATTR_MISMATCH_ERROR) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PHYSICAL_ATTR_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==`AInteger@"32")*32) + ((size==`AInteger@"64")*64) + ((size==`AInteger@"96")*96) + ((size==`AInteger@"128")*128)); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ASTmio_pipe = 0b1110111111110; AST = 0b1110111111110; ENCODING Opcode13 = Opcode; P = 0; Pred = Pg; PredNot = Pg@not; RegC = Rc; RegA =* Ra; RegBAST = Rb; Imm11 = 0; ALSize = AInteger; !NencALD; !AIO; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "OUT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /OutType:out Register:Rd ',' Register:Ra ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_GS): "must be used with GS shader" ILLEGAL_INSTR_ENCODING_ERROR (out == `OutType@CUT) -> (Rb ==`Register@RZ) : ".CUT modifier must be used with Rb as Rz" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (out != `OutType@INVALIDOUTSTYPE0): "Invalid OutType (out) field value INVALIDOUTSTYPE0" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = (1<<ISHADER_GS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES OUTmio_pipe = 0b1111101111100; OUT = 0b1111101111100; ENCODING Opcode13 = Opcode; RegA = Ra; RegB = Rb; Pred = Pg; PredNot = Pg@not; Dest = Rd; OutType = OutType; !NencOUT; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Imm_OUT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /OutType:out Register:Rd ',' Register:Ra ',' SImm(20):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_GS): "must be used with GS shader" ILLEGAL_INSTR_ENCODING_ERROR out != `OutType@CUT : "with .CUT modifier can't be used with immediate" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (out != `OutType@INVALIDOUTSTYPE0): "Invalid OutType (out) field value INVALIDOUTSTYPE0" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = (1<<ISHADER_GS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES OUTmio_pipe = 0b1111011_11100; OUT = 0b1111011_11100; ENCODING Opcode7b5 = Opcode; RegA = Ra; Bconst=uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; OutType = OutType; !NencOUT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "Const_OUT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /OutType:out Register:Rd ',' Register:Ra ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_GS): "must be used with GS shader" ILLEGAL_INSTR_ENCODING_ERROR ((out != `OutType@CUT)&&(out != `OutType@EMIT_THEN_CUT)) : "OUT.CUT/.EMIT_THEM_CUT cannot be used when Sb is constant with immediate address. See Errate 24 in the ISA page of OUT" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0: "OUT with constat with immediate address for Sb is deprecated (Errata 24)" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (out != `OutType@INVALIDOUTSTYPE0): "Invalid OutType (out) field value INVALIDOUTSTYPE0" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = (1<<ISHADER_GS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_GEOMETRY_SM_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GS_STATE); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES OUTmio_pipe = 0b1110101111100; OUT = 0b1110101111100; ENCODING Opcode13 = Opcode; RegA = Ra; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; Dest = Rd; OutType = OutType; !NencOUT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "PIXLD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PixMode(MSCOUNT):pixmode Register:Rd ',' Predicate(PT):Pd ',' [NonZeroRegister:Ra + SImm(8/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "must be used with PS shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (pixmode != `PixMode@INVALIDPIXMODE6): "Invalid PixMode (pixmode) field value INVALIDPIXMODE6" ILLEGAL_INSTR_ENCODING_ERROR (pixmode != `PixMode@INVALIDPIXMODE7): "Invalid PixMode (pixmode) field value INVALIDPIXMODE7" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PIXLD_INDEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES PIXLDmio_pipe = 0b1110111111101; PIXLD = 0b1110111111101; ENCODING Opcode13 = Opcode; DstPred = Pd; PixMode = PixMode; Imm8 = sImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; !NencPIXLD; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_PIXLD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PixMode(MSCOUNT):pixmode Register:Rd ',' Predicate(PT):Pd ',' [ZeroRegister(RZ):Ra + UImm(8/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "must be used with PS shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (pixmode != `PixMode@INVALIDPIXMODE6): "Invalid PixMode (pixmode) field value INVALIDPIXMODE6" ILLEGAL_INSTR_ENCODING_ERROR (pixmode != `PixMode@INVALIDPIXMODE7): "Invalid PixMode (pixmode) field value INVALIDPIXMODE7" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_PIXLD_INDEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 20; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES PIXLDmio_pipe = 0b1110111111101; PIXLD = 0b1110111111101; ENCODING Opcode13 = Opcode; DstPred = Pd; PixMode = PixMode; Imm8 = uImm; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; !NencPIXLD; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; ALTERNATE CLASS "PIXLD_simple" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /PixMode(MSCOUNT):pixmode Register:Rd ',' Predicate(PT):Pd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "must be used with PS shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (pixmode != `PixMode@INVALIDPIXMODE6): "Invalid PixMode (pixmode) field value INVALIDPIXMODE6" ILLEGAL_INSTR_ENCODING_ERROR (pixmode != `PixMode@INVALIDPIXMODE7): "Invalid PixMode (pixmode) field value INVALIDPIXMODE7" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES PIXLDmio_pipe = 0b1110111111101; PIXLD = 0b1110111111101; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; DstPred = Pd; RegA = `Register@RZ; PixMode = PixMode; Imm8 = 0; !NencPIXLD; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LDC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CInteger_n64_n128("32"):size /AdMode(IA):ad RegisterFAU:Rd ',' C:srcConst[UImm(5/0*):constBank]* [NonZeroRegisterFAU:Ra + SImm(17/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger_n64_n128@INVALIDSIZE6): "Invalid CInteger_n64_n128 (size) field value INVALIDSIZE6" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger_n64_n128@INVALIDSIZE7): "Invalid CInteger_n64_n128 (size) field value INVALIDSIZE7" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_CONSTANT_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES LDCmio_pipe = 0b1110111110010; LDC = 0b1110111110010; ENCODING Opcode13 = Opcode; LSSize2 =* CInteger_n64_n128; AdMode = AdMode; CBank,Imm16 = ConstBankAddress0(constBank,sImm); PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !NencLDC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LDC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CInteger_n64_n128("32"):size /AdMode(IA):ad RegisterFAU:Rd ',' C:srcConst[UImm(5/0*):constBank]* [ZeroRegister(RZ):Ra + SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger_n64_n128@INVALIDSIZE6): "Invalid CInteger_n64_n128 (size) field value INVALIDSIZE6" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger_n64_n128@INVALIDSIZE7): "Invalid CInteger_n64_n128 (size) field value INVALIDSIZE7" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_CONSTANT_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(Ra)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES LDCmio_pipe = 0b1110111110010; LDC = 0b1110111110010; ENCODING Opcode13 = Opcode; LSSize2 =* CInteger_n64_n128; AdMode = AdMode; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !NencLDC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LDC_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CInteger_64:size /AdMode(IA):ad RegisterFAU:Rd ',' C:srcConst[UImm(5/0*):constBank]* [NonZeroRegisterFAU:Ra + SImm(17/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_CONSTANT_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES LDCmio_pipe = 0b1110111110010; LDC = 0b1110111110010; ENCODING Opcode13 = Opcode; LSSize2 = 5; AdMode = AdMode; CBank,Imm16 = ConstBankAddress0(constBank,sImm); PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !NencLDC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LDC_64" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CInteger_64:size /AdMode(IA):ad RegisterFAU:Rd ',' C:srcConst[UImm(5/0*):constBank]* [ZeroRegister(RZ):Ra + SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_CONSTANT_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(Ra)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES LDCmio_pipe = 0b1110111110010; LDC = 0b1110111110010; ENCODING Opcode13 = Opcode; LSSize2 = 5; AdMode = AdMode; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !NencLDC; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /LoadCacheOp(CA):cop /LDInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(32/0)*:sImm] ',' Predicate(PT):Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE != $ST_CS) -> (Ps == `Predicate@PT)): "with non-CS shader type Plg must be PT )" MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % LDRegAlignment(LDInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-LDRegAlignment(LDInteger)))): "Register D is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_GENERICS; OPCODES LDmio_pipe = 0b100; LD = 0b100; ENCODING Opcode3 = Opcode; PredSrcldst = Ps; COP = LoadCacheOp; LSSize =* LDInteger; E = E; Imm32 = sImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /LoadCacheOp(CA):cop /LDInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(32/0)*:uImm] ',' Predicate(PT):Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE != $ST_CS) -> (Ps == `Predicate@PT)): "with non-CS shader type Plg must be PT )" MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % LDRegAlignment(LDInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-LDRegAlignment(LDInteger)))): "Register D is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_GENERICS; OPCODES LDmio_pipe = 0b100; LD = 0b100; ENCODING Opcode3 = Opcode; PredSrcldst = Ps; COP = LoadCacheOp; LSSize =* LDInteger; E = E; Imm32 = uImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LDG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /LoadCacheOp(CA):cop /LDInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % LDRegAlignment(LDInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-LDRegAlignment(LDInteger)))): "Register D is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES LDGmio_pipe = 0b111_01110_11010; LDG = 0b111_01110_11010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; LSSize2 = LDInteger; COP4 = LoadCacheOp; E2 = E; Imm24 = sImm; !NencLDG; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LDG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /LoadCacheOp(CA):cop /LDInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % LDRegAlignment(LDInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-LDRegAlignment(LDInteger)))): "Register D is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES LDGmio_pipe = 0b111_01110_11010; LDG = 0b111_01110_11010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; LSSize2 = LDInteger; COP4 = LoadCacheOp; E2 = E; Imm24 = uImm; !NencLDG; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LDG_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /LoadCacheOp(CA):cop /LDInteger("32"):size Predicate:Pd ',' Register:Rd ',' [NonZeroRegister:Ra + SImm(20/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % LDRegAlignment(LDInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-LDRegAlignment(LDInteger)))): "Register D is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES LDGmio_pipe = 0b111_01110_11001; LDG = 0b111_01110_11001; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; LSSize2 = LDInteger; COP4 = LoadCacheOp; E2 = E; PredDest4 = DestPred(Pd); Imm20 = sImm; !NencLDG2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LDG_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /LoadCacheOp(CA):cop /LDInteger("32"):size Predicate:Pd ',' Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(20/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % LDRegAlignment(LDInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-LDRegAlignment(LDInteger)))): "Register D is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES LDGmio_pipe = 0b111_01110_11001; LDG = 0b111_01110_11001; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; RegA =* Ra; LSSize2 = LDInteger; COP4 = LoadCacheOp; E2 = E; PredDest4 = DestPred(Pd); Imm20 = uImm; !NencLDG2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LDL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LLoadCacheOp(CA):cop /CInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-CRegAlignment(CInteger)))): "Register D is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOCAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES LDLmio_pipe = 0b1110111101000; LDL = 0b1110111101000; ENCODING Opcode13 = Opcode; LSSize2 = CInteger; COP2 = LLoadCacheOp; Imm24 = sImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !WriteCC; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LDL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LLoadCacheOp(CA):cop /CInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-CRegAlignment(CInteger)))): "Register D is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOCAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES LDLmio_pipe = 0b1110111101000; LDL = 0b1110111101000; ENCODING Opcode13 = Opcode; LSSize2 = CInteger; COP2 = LLoadCacheOp; Imm24 = uImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !WriteCC; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LDS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LDSInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "must be used with compute shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDSInteger@INVALIDSIZE7): "Invalid LDSInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDSInteger@U.INVALIDSIZE7): "Invalid LDSInteger (size) field value U.INVALIDSIZE7" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==0)*8) + ((size==1)*8) + ((size==2)*8) + ((size==3)*8) + ((size==4)*16) + ((size==5)*16) + ((size==6)*16) + ((size==7)*16) + ((size==8)*32) + ((size==9)*32) + ((size==10)*64) + ((size==11)*64) + ((size==12)*128) + ((size==13)*128) + ((size==14)*1) + ((size==15)*1)); ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES LDSmio_pipe = 0b1110111101001; LDS = 0b1110111101001; ENCODING Opcode13 = Opcode; LDSSize =* size; Imm24 = sImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !NencLDS; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_LDS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LDSInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "must be used with compute shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDSInteger@INVALIDSIZE7): "Invalid LDSInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDSInteger@U.INVALIDSIZE7): "Invalid LDSInteger (size) field value U.INVALIDSIZE7" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==0)*8) + ((size==1)*8) + ((size==2)*8) + ((size==3)*8) + ((size==4)*16) + ((size==5)*16) + ((size==6)*16) + ((size==7)*16) + ((size==8)*32) + ((size==9)*32) + ((size==10)*64) + ((size==11)*64) + ((size==12)*128) + ((size==13)*128) + ((size==14)*1) + ((size==15)*1)); ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES LDSmio_pipe = 0b1110111101001; LDS = 0b1110111101001; ENCODING Opcode13 = Opcode; LDSSize =* size; Imm24 = uImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; !NencLDS; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LEA_LO_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOOnly(LO)@:hilo /X(noX):xmode Predicate(PT):Pd ',' $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' UImm(5/0):uImm5 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LEAfxu_pipe = 0b0101101111010; LEA = 0b0101101111010; ENCODING Opcode13 = Opcode; PredDest = Pd; WriteCC = writeCC; Xm4 = xmode; nA4 = Ra@negate; ImmU5 = uImm5; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencLEA_LO; !BFiller; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "LEA_LO_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOOnly(LO)@:hilo /X(noX):xmode Predicate(PT):Pd ',' $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' SImm(20):uImm20 ',' UImm(5/0):uImm5 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm20)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LEAfxu_pipe = 0b0011011_11010; LEA = 0b0011011_11010; ENCODING Opcode7b5 = Opcode; PredDest = Pd; WriteCC = writeCC; Xm4 = xmode; nA4 = Ra@negate; ImmU5 = uImm5; Bconst = uImm20; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencLEA_LO; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "LEA_LO_CONST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LOOnly(LO)@:hilo /X(noX):xmode Predicate(PT):Pd ',' $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' UImm(5/0):uImm5 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = (xmode==`X@X); OPCODES LEAfxu_pipe = 0b0100101111010; LEA = 0b0100101111010; ENCODING Opcode13 = Opcode; PredDest = Pd; WriteCC = writeCC; Xm4 = xmode; nA4 = Ra@negate; ImmU5 = uImm5; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencLEA_LO; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "LEA_HI_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /HIOnly:hi /X(noX):xmode Predicate(PT):Pd ',' $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( Register:Rb {/REUSE(noreuse):reuse_src_b} )$ ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ ',' UImm(5/0):uImm5 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 1; OPCODES LEAfxu_pipe = 0b0101101111011; LEA = 0b0101101111011; ENCODING Opcode13 = Opcode; PredDest = Pd; WriteCC = writeCC; RegC = Rc; Xm5 = xmode; nA5 = Ra@negate; ImmU5_2 = uImm5; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencLEA_HI_REG; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "LEA_HI_CONST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /HIOnly:hi /X(noX):xmode Predicate(PT):Pd ',' $( Register:Rd /optCC(noCC):writeCC )$ ',' $( [-] Register:Ra {/REUSE(noreuse):reuse_src_a} )$ ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( Register:Rc {/REUSE(noreuse):reuse_src_c} )$ ',' UImm(5/0):uImm5 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((writeCC) -> (Pd==`Predicate@PT)) : "CC and destination Predicates cannot both be updated" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; CC_BYPASS_ALLOWED; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 1; OPCODES LEAfxu_pipe = 0b000110; LEA = 0b000110; ENCODING Opcode6 = Opcode; Xm6 = xmode; nA6 = Ra@negate; ImmU5_3 = uImm5; PredDest = Pd; WriteCC = writeCC; RegC = Rc; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; CLASS "ST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /StoreCacheOp(WB):cop /CInteger("32"):size [NonZeroRegister:Ra + SImm(32/0)*:sImm] ',' Register:Rb ',' Predicate(PT):Plg $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE != $ST_CS) -> (Plg == `Predicate@PT)): "with non-CS shader type Plg must be PT )" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_GENERICS; OPCODES STmio_pipe = 0b101; ST = 0b101; ENCODING Opcode3 = Opcode; PredSrcldst = Plg; COP = StoreCacheOp; LSSize = CInteger; E = E; Imm32 = sImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /StoreCacheOp(WB):cop /CInteger("32"):size [ZeroRegister(RZ):Ra + UImm(32/0)*:uImm] ',' Register:Rb ',' Predicate(PT):Plg $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE != $ST_CS) -> (Plg == `Predicate@PT)): "with non-CS shader type Plg must be PT )" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_GENERICS; OPCODES STmio_pipe = 0b101; ST = 0b101; ENCODING Opcode3 = Opcode; PredSrcldst = Plg; COP = StoreCacheOp; LSSize = CInteger; E = E; Imm32 = uImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rb; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "STG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /StoreCacheOp(WB):cop /CInteger("32"):size [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES STGmio_pipe = 0b111_01110_11011; STG = 0b111_01110_11011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rb; RegA =* Ra; LSSize2 = CInteger; COP4 = StoreCacheOp; E2 = E; Imm24 = sImm; !NencLDG; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_STG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /StoreCacheOp(WB):cop /CInteger("32"):size [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES STGmio_pipe = 0b111_01110_11011; STG = 0b111_01110_11011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rb; RegA =* Ra; LSSize2 = CInteger; COP4 = StoreCacheOp; E2 = E; Imm24 = uImm; !NencLDG; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "STL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /StoreCacheOp(WB):cop /CInteger("32"):size [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOCAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES STLmio_pipe = 0b1110111101010; STL = 0b1110111101010; ENCODING Opcode13 = Opcode; LSSize2 = CInteger; COP2 = StoreCacheOp; Imm24 = sImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rb; !WriteCC; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_STL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /StoreCacheOp(WB):cop /CInteger("32"):size [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOCAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES STLmio_pipe = 0b1110111101010; STL = 0b1110111101010; ENCODING Opcode13 = Opcode; LSSize2 = CInteger; COP2 = StoreCacheOp; Imm24 = uImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rb; !WriteCC; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "STS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CInteger("32"):size [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "must be used with compute shader" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES STSmio_pipe = 0b1110111101011; STS = 0b1110111101011; ENCODING Opcode13 = Opcode; LSSize2 =* CInteger; Imm24 = sImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rb; !COP2; !WriteCC; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_STS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CInteger("32"):size [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "must be used with compute shader" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CRegAlignment(CInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR ((((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-CRegAlignment(CInteger))))): "Register B is out of range" ILLEGAL_INSTR_ENCODING_ERROR (size != `CInteger@INVALIDSIZE7): "Invalid CInteger (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES STSmio_pipe = 0b1110111101011; STS = 0b1110111101011; ENCODING Opcode13 = Opcode; LSSize2 =* CInteger; Imm24 = uImm; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rb; !COP2; !WriteCC; !aA2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /AtomOp:atom /SQInteger("U32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(20/0)*:sImm] ',' Register:Rb ',' Register(RZ)@:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@S32) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP9): "Invalid AtomOp (atom) field value INVALIDATOMOP9" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP11): "Invalid AtomOp (atom) field value INVALIDATOMOP11" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP12): "Invalid AtomOp (atom) field value INVALIDATOMOP12" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP13): "Invalid AtomOp (atom) field value INVALIDATOMOP13" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP14): "Invalid AtomOp (atom) field value INVALIDATOMOP14" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP15): "Invalid AtomOp (atom) field value INVALIDATOMOP15" ILLEGAL_INSTR_ENCODING_ERROR (size != `SQInteger@INVALIDATOMICSIZE7): "Invalid SQInteger (size) field value INVALIDATOMICSIZE7" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@ADD) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@F32.FTZ.RN)||(size == `SQInteger@F16x2.FTZ.RN)||(size == `SQInteger@F64.RN))): "ATOM.ADD only supports sizes U32, S32, U64, F16x2.FTZ.RN, F64.RN, and F32.FTZ.RN" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@MIN) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "ATOM.MIN only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@MAX) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "ATOM.MAX only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@INC) -> ((size == `SQInteger@U32))): "ATOM.INC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@DEC) -> ((size == `SQInteger@U32))): "ATOM.DEC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@AND) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.AND only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@OR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.OR only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@XOR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.XOR only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@EXCH) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@SAFEADD) -> ((size == `SQInteger@U64))): "ATOM.SAFEADD only supports size U64" ILLEGAL_INSTR_ENCODING_ERROR ((size == `SQInteger@"F32.FTZ.RN") -> (atom == `AtomOp@ADD)): "Only ATOM.ADD can use F32.FTZ.RN" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_C_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b11101101; ATOM = 0b11101101; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; RegB = Rb; Dest =* Rd; RegA =* Ra; Imm20a = sImm; AtomSize = SQInteger; AtomOp = AtomOp; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /AtomOp:atom /SQInteger("U32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(20/0)*:uImm] ',' Register:Rb ',' Register(RZ)@:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@S32) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP9): "Invalid AtomOp (atom) field value INVALIDATOMOP9" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP11): "Invalid AtomOp (atom) field value INVALIDATOMOP11" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP12): "Invalid AtomOp (atom) field value INVALIDATOMOP12" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP13): "Invalid AtomOp (atom) field value INVALIDATOMOP13" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP14): "Invalid AtomOp (atom) field value INVALIDATOMOP14" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP15): "Invalid AtomOp (atom) field value INVALIDATOMOP15" ILLEGAL_INSTR_ENCODING_ERROR (size != `SQInteger@INVALIDATOMICSIZE7): "Invalid SQInteger (size) field value INVALIDATOMICSIZE7" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@ADD) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@F32.FTZ.RN)||(size == `SQInteger@F16x2.FTZ.RN)||(size == `SQInteger@F64.RN))): "ATOM.ADD only supports sizes U32, S32, U64, F16x2.FTZ.RN, F64.RN, and F32.FTZ.RN" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@MIN) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "ATOM.MIN only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@MAX) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "ATOM.MAX only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@INC) -> ((size == `SQInteger@U32))): "ATOM.INC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@DEC) -> ((size == `SQInteger@U32))): "ATOM.DEC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@AND) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.AND only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@OR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.OR only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@XOR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.XOR only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@EXCH) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@SAFEADD) -> ((size == `SQInteger@U64))): "ATOM.SAFEADD only supports size U64" ILLEGAL_INSTR_ENCODING_ERROR ((size == `SQInteger@"F32.FTZ.RN") -> (atom == `AtomOp@ADD)): "Only ATOM.ADD can use F32.FTZ.RN" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_C_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b11101101; ATOM = 0b11101101; ENCODING Opcode8 = Opcode; Pred = Pg; PredNot = Pg@not; RegB = Rb; Dest =* Rd; RegA =* Ra; Imm20a = uImm; AtomSize = SQInteger; AtomOp = AtomOp; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_CAS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(20/0)*:sImm] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> IsEven(((Rb)+((Rb)==`Register@RZ))): "ATOM.CAS.32 requires Rb to be 64bit vector-aligned (even)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rb)+((Rb)==`Register@RZ))%4 == 0): "ATOM.CAS.64 requires Rb to be R4n+0 or RZ" MISALIGNED_REG_ERROR (((Rc)+((Rc)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> (((Rc)+((Rc)==`Register@RZ))%2 == CASRegAlignment(CASInteger)): "ATOM.CAS.32 requires Rc to be 64bit vector-aligned (odd)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rc)+((Rc)==`Register@RZ))%4 == CASRegAlignment(CASInteger)): "ATOM.CAS.64 requires Rc to be Rb+2 or RZ" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011101111; ATOM = 0b111011101111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Size1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); Dest = Rd; RegA =* Ra; Imm20a = sImm; bcRZ = 0; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOM_CAS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(20/0)*:uImm] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> IsEven(((Rb)+((Rb)==`Register@RZ))): "ATOM.CAS.32 requires Rb to be 64bit vector-aligned (even)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rb)+((Rb)==`Register@RZ))%4 == 0): "ATOM.CAS.64 requires Rb to be R4n+0 or RZ" MISALIGNED_REG_ERROR (((Rc)+((Rc)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> (((Rc)+((Rc)==`Register@RZ))%2 == CASRegAlignment(CASInteger)): "ATOM.CAS.32 requires Rc to be 64bit vector-aligned (odd)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rc)+((Rc)==`Register@RZ))%4 == CASRegAlignment(CASInteger)): "ATOM.CAS.64 requires Rc to be Rb+2 or RZ" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011101111; ATOM = 0b111011101111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; Size1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); Dest = Rd; RegA =* Ra; Imm20a = uImm; bcRZ = 0; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_CAS_Rb_and_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(20/0)*:sImm] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> IsEven(((Rb)+((Rb)==`Register@RZ))): "ATOM.CAS.32 requires Rb to be 64bit vector-aligned (even)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rb)+((Rb)==`Register@RZ))%4 == 0): "ATOM.CAS.64 requires Rb to be R4n+0 or RZ" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011101111; ATOM = 0b111011101111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; RegB = Rb; Dest = Rd; RegA =* Ra; Imm20a = sImm; AtomSize1 = CASInteger; bcRZ = 1; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOM_CAS_Rb_and_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(20/0)*:uImm] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> IsEven(((Rb)+((Rb)==`Register@RZ))): "ATOM.CAS.32 requires Rb to be 64bit vector-aligned (even)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rb)+((Rb)==`Register@RZ))%4 == 0): "ATOM.CAS.64 requires Rb to be R4n+0 or RZ" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011101111; ATOM = 0b111011101111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; RegB = Rb; Dest = Rd; RegA =* Ra; Imm20a = uImm; AtomSize1 = CASInteger; bcRZ = 1; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_CAS_RZ_and_Rc" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(20/0)*:sImm] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" MISALIGNED_REG_ERROR (((Rc)+((Rc)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> (((Rc)+((Rc)==`Register@RZ))%2 == CASRegAlignment(CASInteger)): "ATOM.CAS.32 requires Rc to be 64bit vector-aligned (odd)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rc)+((Rc)==`Register@RZ))%4 == CASRegAlignment(CASInteger)): "ATOM.CAS.64 requires Rc to be Rb+2 or RZ" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011101111; ATOM = 0b111011101111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; RegB = Rc; Dest = Rd; RegA =* Ra; Imm20a = sImm; AtomSize1 = CASInteger; bcRZ = 2; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOM_CAS_RZ_and_Rc" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(20/0)*:uImm] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" MISALIGNED_REG_ERROR (((Rc)+((Rc)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> (((Rc)+((Rc)==`Register@RZ))%2 == CASRegAlignment(CASInteger)): "ATOM.CAS.32 requires Rc to be 64bit vector-aligned (odd)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rc)+((Rc)==`Register@RZ))%4 == CASRegAlignment(CASInteger)): "ATOM.CAS.64 requires Rc to be Rb+2 or RZ" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011101111; ATOM = 0b111011101111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; RegB = Rc; Dest = Rd; RegA =* Ra; Imm20a = uImm; AtomSize1 = CASInteger; bcRZ = 2; AtomE = E; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /AtomOp:atom /SQInteger("U32"):size Predicate:Pd ',' Register:Rd ',' [NonZeroRegister:Ra] ',' Register:Rb ',' Register(RZ)@:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@S32) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Input register improperly aligned for specified operation size" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP9): "Invalid AtomOp (atom) field value INVALIDATOMOP9" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP11): "Invalid AtomOp (atom) field value INVALIDATOMOP11" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP12): "Invalid AtomOp (atom) field value INVALIDATOMOP12" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP13): "Invalid AtomOp (atom) field value INVALIDATOMOP13" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP14): "Invalid AtomOp (atom) field value INVALIDATOMOP14" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomOp@INVALIDATOMOP15): "Invalid AtomOp (atom) field value INVALIDATOMOP15" ILLEGAL_INSTR_ENCODING_ERROR (size != `SQInteger@INVALIDATOMICSIZE7): "Invalid SQInteger (size) field value INVALIDATOMICSIZE7" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@ADD) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@F32.FTZ.RN)||(size == `SQInteger@F16x2.FTZ.RN)||(size == `SQInteger@F64.RN))): "ATOM.ADD only supports sizes U32, S32, U64, F16x2.FTZ.RN, F64.RN, and F32.FTZ.RN" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@MIN) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "ATOM.MIN only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@MAX) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "ATOM.MAX only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@INC) -> ((size == `SQInteger@U32))): "ATOM.INC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@DEC) -> ((size == `SQInteger@U32))): "ATOM.DEC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@AND) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.AND only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@OR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.OR only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@XOR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.XOR only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@EXCH) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomOp@SAFEADD) -> ((size == `SQInteger@U64))): "ATOM.SAFEADD only supports size U64" ILLEGAL_INSTR_ENCODING_ERROR ((size == `SQInteger@"F32.FTZ.RN") -> (atom == `AtomOp@ADD)): "Only ATOM.ADD can use F32.FTZ.RN" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_C_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011100110; ATOM = 0b111011100110; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; PredDest4 = DestPred(Pd); RegB = Rb; Dest =* Rd; RegA =* Ra; AtomSize = SQInteger; AtomOp2 = AtomOp; AtomE = E; !NencATOM; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_CAS_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Predicate:Pd ',' Register:Rd ',' [NonZeroRegister:Ra] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> IsEven(((Rb)+((Rb)==`Register@RZ))): "ATOM.CAS.32 requires Rb to be 64bit vector-aligned (even)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rb)+((Rb)==`Register@RZ))%4 == 0): "ATOM.CAS.64 requires Rb to be R4n+0 or RZ" MISALIGNED_REG_ERROR (((Rc)+((Rc)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> (((Rc)+((Rc)==`Register@RZ))%2 == CASRegAlignment(CASInteger)): "ATOM.CAS.32 requires Rc to be 64bit vector-aligned (odd)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rc)+((Rc)==`Register@RZ))%4 == CASRegAlignment(CASInteger)): "ATOM.CAS.64 requires Rc to be Rb+2 or RZ" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011100111; ATOM = 0b111011100111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; PredDest4 = DestPred(Pd); Size1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); Dest = Rd; RegA =* Ra; bcRZ = 0; AtomE = E; !NencATOM2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_CAS_RZ_and_Rc_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Predicate:Pd ',' Register:Rd ',' [NonZeroRegister:Ra] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" MISALIGNED_REG_ERROR (((Rc)+((Rc)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> (((Rc)+((Rc)==`Register@RZ))%2 == CASRegAlignment(CASInteger)): "ATOM.CAS.32 requires Rc to be 64bit vector-aligned (odd)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rc)+((Rc)==`Register@RZ))%4 == CASRegAlignment(CASInteger)): "ATOM.CAS.64 requires Rc to be Rb+2 or RZ" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011100111; ATOM = 0b111011100111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; PredDest4 = DestPred(Pd); RegB = Rc; Dest = Rd; RegA =* Ra; AtomSize1 = CASInteger; bcRZ = 2; AtomE = E; !NencATOM2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOM_CAS_Rb_and_RZ_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /CAS:cas /CASInteger("32"):size Predicate:Pd ',' Register:Rd ',' [NonZeroRegister:Ra] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR (((Rd)+((Rd)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % CASRegAlignment(CASInteger)) == 0 : "Output register improperly aligned for specified operation size" OOR_REG_ERROR (size == `CASInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `CASInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (size == `CASInteger@"32") -> IsEven(((Rb)+((Rb)==`Register@RZ))): "ATOM.CAS.32 requires Rb to be 64bit vector-aligned (even)" MISALIGNED_REG_ERROR (size == `CASInteger@"64") -> (((Rb)+((Rb)==`Register@RZ))%4 == 0): "ATOM.CAS.64 requires Rb to be R4n+0 or RZ" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "ATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOM.CAS" MISALIGNED_REG_ERROR ((Rc==`Register@RZ)||(((Rb%(2*CASRegAlignment(CASInteger))==0)&&(Rc==Rb+CASRegAlignment(CASInteger))))): "ATOM.CAS requires that (Rb,Rc) to be aligned and be vector-consecutive" MISALIGNED_REG_ERROR ((Rb%(2*CASRegAlignment(CASInteger)))==0): "ATOM.CAS requires Rb to be aligned" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES ATOMmio_pipe = 0b111011100111; ATOM = 0b111011100111; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; PredDest4 = DestPred(Pd); RegB = Rb; Dest = Rd; RegA =* Ra; AtomSize1 = CASInteger; bcRZ = 1; AtomE = E; !NencATOM2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AtomsOp:atom /AtomsSz("U32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' Register:Rb ',' Register(RZ)@:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (atom) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (atom) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (atom) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (atom) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (atom) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (atom) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (atom) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@ADD)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.ADD only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@MIN)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.MIN only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@MAX)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.MAX only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@INC)->((size == `AtomsSz@U32))): "ATOMS.INC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@DEC)->((size == `AtomsSz@U32))): "ATOMS.DEC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@AND)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.AND only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@OR)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.OR only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@XOR)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.XOR only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@EXCH)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32)||(size == `AtomsSz@U64))): "ATOMS.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (size != `AtomsSz@S64): "S64 is not supported for any ops of ATOMS" MISALIGNED_REG_ERROR (((size == `AtomsSz@U64)||(size == `AtomsSz@S64)) -> ((Rb==`Register@RZ)||(Rb%2==0))): "Misaligned Rb register in ATOMS" MISALIGNED_REG_ERROR (((size == `AtomsSz@U64)||(size == `AtomsSz@S64)) -> ((Rd==`Register@RZ)||(Rd%2==0))): "Misaligned Rd register in ATOMS" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = ((((size==0)||(size==1))*32)+(((size==2)||(size==3))*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = ((((size==0)||(size==1))*32)+(((size==2)||(size==3))*64)); ISRC_C_SIZE = ((((size==0)||(size==1))*32)+(((size==2)||(size==3))*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101100; ATOMS = 0b11101100; ENCODING Opcode8 = Opcode; AtomOp = atom; Imm22atoms = sImm SCALE 4; AtomsSize = size; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest =* Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /AtomsOp:atom /AtomsSz("U32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' Register:Rb ',' Register(RZ)@:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (atom) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (atom) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (atom) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (atom) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (atom) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (atom) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (atom != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (atom) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@ADD)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.ADD only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@MIN)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.MIN only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@MAX)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.MAX only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@INC)->((size == `AtomsSz@U32))): "ATOMS.INC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@DEC)->((size == `AtomsSz@U32))): "ATOMS.DEC only supports size U32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@AND)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.AND only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@OR)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.OR only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@XOR)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32))): "ATOMS.XOR only supports sizes U32 and S32" ILLEGAL_INSTR_ENCODING_ERROR ((atom == `AtomsOp@EXCH)->((size == `AtomsSz@U32)||(size == `AtomsSz@S32)||(size == `AtomsSz@U64))): "ATOMS.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (size != `AtomsSz@S64): "S64 is not supported for any ops of ATOMS" MISALIGNED_REG_ERROR (((size == `AtomsSz@U64)||(size == `AtomsSz@S64)) -> ((Rb==`Register@RZ)||(Rb%2==0))): "Misaligned Rb register in ATOMS" MISALIGNED_REG_ERROR (((size == `AtomsSz@U64)||(size == `AtomsSz@S64)) -> ((Rd==`Register@RZ)||(Rd%2==0))): "Misaligned Rd register in ATOMS" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = ((((size==0)||(size==1))*32)+(((size==2)||(size==3))*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = ((((size==0)||(size==1))*32)+(((size==2)||(size==3))*64)); ISRC_C_SIZE = ((((size==0)||(size==1))*32)+(((size==2)||(size==3))*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101100; ATOMS = 0b11101100; ENCODING Opcode8 = Opcode; AtomOp = atom; Imm22atoms = uImm SCALE 4; AtomsSize = size; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest =* Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS_CAS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAS:cas /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101110010; ATOMS = 0b11101110010; ENCODING Opcode11 = Opcode; atomsbcRZ = 0; Imm22atoms = sImm SCALE 4; asSize1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS_CAS" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAS:cas /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101110010; ATOMS = 0b11101110010; ENCODING Opcode11 = Opcode; atomsbcRZ = 0; Imm22atoms = uImm SCALE 4; asSize1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS_CAS_Rb_and_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAS:cas /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101110010; ATOMS = 0b11101110010; ENCODING Opcode11 = Opcode; atomsbcRZ = 1; Imm22atoms = sImm SCALE 4; AtomsSize1 = CASInteger; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS_CAS_Rb_and_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAS:cas /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101110010; ATOMS = 0b11101110010; ENCODING Opcode11 = Opcode; atomsbcRZ = 1; Imm22atoms = uImm SCALE 4; AtomsSize1 = CASInteger; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS_CAS_RZ_and_Rc" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAS:cas /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101110010; ATOMS = 0b11101110010; ENCODING Opcode11 = Opcode; atomsbcRZ = 2; Imm22atoms = sImm SCALE 4; AtomsSize1 = CASInteger; RegB = Rc; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS_CAS_RZ_and_Rc" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAS:cas /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b11101110010; ATOMS = 0b11101110010; ENCODING Opcode11 = Opcode; atomsbcRZ = 2; Imm22atoms = uImm SCALE 4; AtomsSize1 = CASInteger; RegB = Rc; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS_CAST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAST:cast /AtomsSPIN(noSPIN):spin /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES TERTIARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b1110111000; ATOMS = 0b1110111000; ENCODING Opcode10 = Opcode; atomsbcRZ = 0; Imm22atoms = sImm SCALE 4; asSize1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); atomscSPIN = spin; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS_CAST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAST:cast /AtomsSPIN(noSPIN):spin /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' NonZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES TERTIARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b1110111000; ATOMS = 0b1110111000; ENCODING Opcode10 = Opcode; atomsbcRZ = 0; Imm22atoms = uImm SCALE 4; asSize1RegBC = ConsecutiveReg8(Rb,Rc,CASInteger); atomscSPIN = spin; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS_CAST_Rb_and_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAST:cast /AtomsSPIN(noSPIN):spin /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES TERTIARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b1110111000; ATOMS = 0b1110111000; ENCODING Opcode10 = Opcode; atomsbcRZ = 1; Imm22atoms = sImm SCALE 4; AtomsSize1 = CASInteger; atomscSPIN = spin; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS_CAST_Rb_and_RZ" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAST:cast /AtomsSPIN(noSPIN):spin/CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' Register:Rb ',' ZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES TERTIARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b1110111000; ATOMS = 0b1110111000; ENCODING Opcode10 = Opcode; atomsbcRZ = 1; Imm22atoms = uImm SCALE 4; AtomsSize1 = CASInteger; atomscSPIN = spin; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ATOMS_CAST_RZ_and_Rc" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAST:cast /AtomsSPIN(noSPIN):spin /CASInteger("32"):size Register:Rd ',' [NonZeroRegister:Ra + SImm(24/0)*:sImm] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES TERTIARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b1110111000; ATOMS = 0b1110111000; ENCODING Opcode10 = Opcode; atomsbcRZ = 2; Imm22atoms = sImm SCALE 4; AtomsSize1 = CASInteger; atomscSPIN = spin; RegB = Rc; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_ATOMS_CAST_RZ_and_Rc" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CAST:cast /AtomsSPIN(noSPIN):spin /CASInteger("32"):size Register:Rd ',' [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] ',' ZeroRegister:Rb ',' NonZeroRegister:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "ATOMS.CAS/ATOMS.CAST must be used with compute shader" ILLEGAL_INSTR_ENCODING_ERROR (Rb != `Register@RZ): "Register Rb cannot be RZ for ATOMS.CAS/ATOMS.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb==`Register@RZ)||(Rb%4 == 0))): "Misaligned Rb register in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"32") -> ((Rb%2==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+1)||(Rc == `Register@RZ)))): "Rb should be 2n and Rc should be Rb+1 when size is 32 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rb%4==0)&&(Rb!=`Register@RZ)&&((Rc == Rb+2)||(Rc == `Register@RZ)))): "Rb should be 4n and Rc should be Rb+2 when size is 64 bits in ATOMS.CAS/.CAST" MISALIGNED_REG_ERROR ((size == `CASInteger@"64") -> ((Rd==`Register@RZ)||(Rd%2 == 0))): "Misaligned Rd register in ATOMS.CAS/.CAST" PROPERTIES TERTIARY; PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SHARED_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_A_SIZE = 32; ISRC_B_SIZE = (((size==0)*32)+((size==1)*64)); ISRC_C_SIZE = (((size==0)*32)+((size==1)*64)); DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ATOMSmio_pipe = 0b1110111000; ATOMS = 0b1110111000; ENCODING Opcode10 = Opcode; atomsbcRZ = 2; Imm22atoms = uImm SCALE 4; AtomsSize1 = CASInteger; atomscSPIN = spin; RegB = Rc; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "RED" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /RedOp:redop /SQInteger("U32"):size [NonZeroRegister:Ra + SImm(20/0)*:sImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@S32) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Input register improperly aligned for specified operation size" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP8): "Invalid RedOp (redop) field value INVALIDREDOP8" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP9): "Invalid RedOp (redop) field value INVALIDREDOP9" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP10): "Invalid RedOp (redop) field value INVALIDREDOP10" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP11): "Invalid RedOp (redop) field value INVALIDREDOP11" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP12): "Invalid RedOp (redop) field value INVALIDREDOP12" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP13): "Invalid RedOp (redop) field value INVALIDREDOP13" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP14): "Invalid RedOp (redop) field value INVALIDREDOP14" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP15): "Invalid RedOp (redop) field value INVALIDREDOP15" ILLEGAL_INSTR_ENCODING_ERROR (size != `SQInteger@INVALIDATOMICSIZE7): "Invalid SQInteger (size) field value INVALIDATOMICSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@ADD) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@F32.FTZ.RN)||(size == `SQInteger@F16x2.FTZ.RN)||(size == `SQInteger@F64.RN))): "RED.ADD only supports sizes U32, S32, U64, F16x2.FTZ.RN, F64.RN, and F32.FTZ.RN" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MIN) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "RED.MIN only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MAX) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "RED.MAX only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@INC) -> ((size == `SQInteger@U32))): "RED.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@DEC) -> ((size == `SQInteger@U32))): "RED.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@AND) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "RED.AND only supports sizes U32, S32, and U64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@OR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "RED.OR only supports sizes U32, S32, and U64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@XOR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "RED.XOR only supports sizes U32, S32, and U64" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES REDmio_pipe = 0b1110101111111; RED = 0b1110101111111; ENCODING Opcode13 = Opcode; AtomE = E; Imm20a = sImm; RedOp = RedOp; RedSize = SQInteger; Pred = Pg; PredNot = Pg@not; RegBAST = Rb; RegA =* Ra; !NencRed; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_RED" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /RedOp:redop /SQInteger("U32"):size [ZeroRegister(RZ):Ra + UImm(20/0)*:uImm] ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" OOR_REG_ERROR (size == `SQInteger@"32") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@S32) -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"S64") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)) : "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F16x2.FTZ.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-1)): "Register is out of range" OOR_REG_ERROR (size == `SQInteger@"F64.RN") -> (((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-2)): "Register is out of range" MISALIGNED_REG_ERROR (((Rb)+((Rb)==`Register@RZ)) % SQRegAlignment(SQInteger)) == 0 : "Input register improperly aligned for specified operation size" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP8): "Invalid RedOp (redop) field value INVALIDREDOP8" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP9): "Invalid RedOp (redop) field value INVALIDREDOP9" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP10): "Invalid RedOp (redop) field value INVALIDREDOP10" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP11): "Invalid RedOp (redop) field value INVALIDREDOP11" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP12): "Invalid RedOp (redop) field value INVALIDREDOP12" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP13): "Invalid RedOp (redop) field value INVALIDREDOP13" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP14): "Invalid RedOp (redop) field value INVALIDREDOP14" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP15): "Invalid RedOp (redop) field value INVALIDREDOP15" ILLEGAL_INSTR_ENCODING_ERROR (size != `SQInteger@INVALIDATOMICSIZE7): "Invalid SQInteger (size) field value INVALIDATOMICSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@ADD) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@F32.FTZ.RN)||(size == `SQInteger@F16x2.FTZ.RN)||(size == `SQInteger@F64.RN))): "RED.ADD only supports sizes U32, S32, U64, F16x2.FTZ.RN, F64.RN, and F32.FTZ.RN" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MIN) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "RED.MIN only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MAX) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64)||(size == `SQInteger@S64)||(size == `SQInteger@F16x2.FTZ.RN))): "RED.MAX only supports sizes U32, S32, U64, F16x2.FTZ.RN, and S64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@INC) -> ((size == `SQInteger@U32))): "RED.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@DEC) -> ((size == `SQInteger@U32))): "RED.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@AND) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "RED.AND only supports sizes U32, S32, and U64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@OR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "RED.OR only supports sizes U32, S32, and U64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@XOR) -> ((size == `SQInteger@U32)||(size == `SQInteger@S32)||(size == `SQInteger@U64))): "RED.XOR only supports sizes U32, S32, and U64" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_INVALID_ADDR_SPACE) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GLOBAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = (((size==`SQInteger@"32")*32) + ((size==`SQInteger@S32)*32) + ((size==`SQInteger@"64")*64) + ((size==`SQInteger@F32)*32) + ((size==`SQInteger@"F16x2.FTZ.RN")*32) + ((size==`SQInteger@S64)*64) + ((size==`SQInteger@"F64.RN")*64) + ((size==`SQInteger@INVALIDATOMICSIZE7)*1)); ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES REDmio_pipe = 0b1110101111111; RED = 0b1110101111111; ENCODING Opcode13 = Opcode; AtomE = E; Imm20a = uImm; RedOp = RedOp; RedSize = SQInteger; Pred = Pg; PredNot = Pg@not; RegBAST = Rb; RegA = `Register@RZ; !NencRed; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /Cache3(D):cache /CCTLOp:cctlop [NonZeroRegister:Ra + SImm(32/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@RSLB) : "RSLB is disallowed for CCTL" ILLEGAL_INSTR_ENCODING_ERROR ((Cache3 != `Cache3@D) && (Cache3 != `Cache3@U)) -> ((cctlop != `CCTLOp@RS) && (cctlop != `CCTLOp@PF1) && (cctlop != `CCTLOp@WB) && (cctlop != `CCTLOp@PF2)): "Illegal instruction: unsupported combination" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@PF1.5): "PF1.5 CCTLOP is invalid" ILLEGAL_INSTR_ENCODING_ERROR (cctlop == `CCTLOp@IV) -> ((Cache3 != `Cache3@C) && (Cache3 != `Cache3@I)): "Illegal instruction: unsupported combination" ILLEGAL_INSTR_ENCODING_ERROR (Cache3 != `Cache3@CRS) : "CRS is disallowed for CCTL" UNPREDICTABLE_BEHAVIOR_WARNING ((cctlop == `CCTLOp@WB) -> (cache == `Cache3@D)) : "Unpredictable Behavior Error: CCTL.WB must only be used with Data Cache" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP10): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP10" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP11): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP11" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP12): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP12" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP13): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP13" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP14): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP14" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP15): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP15" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP5): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP5" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP6): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP6" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP7): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLmio_pipe = 0b11101111011; CCTL = 0b11101111011; ENCODING Opcode11 = Opcode; Imm30a = sImm SCALE 4; E = E; Pred = Pg; PredNot = Pg@not; RegA =* Ra; Cache3 = Cache3; CCTLOp =* CCTLOp; !NencCCTL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_CCTL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /Cache3(D):cache /CCTLOp:cctlop [ZeroRegister(RZ):Ra + UImm(32/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@RSLB) : "RSLB is disallowed for CCTL" ILLEGAL_INSTR_ENCODING_ERROR ((Cache3 != `Cache3@D) && (Cache3 != `Cache3@U)) -> ((cctlop != `CCTLOp@RS) && (cctlop != `CCTLOp@PF1) && (cctlop != `CCTLOp@WB) && (cctlop != `CCTLOp@PF2)): "Illegal instruction: unsupported combination" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@PF1.5): "PF1.5 CCTLOP is invalid" ILLEGAL_INSTR_ENCODING_ERROR (cctlop == `CCTLOp@IV) -> ((Cache3 != `Cache3@C) && (Cache3 != `Cache3@I)): "Illegal instruction: unsupported combination" ILLEGAL_INSTR_ENCODING_ERROR (Cache3 != `Cache3@CRS) : "CRS is disallowed for CCTL" UNPREDICTABLE_BEHAVIOR_WARNING ((cctlop == `CCTLOp@WB) -> (cache == `Cache3@D)) : "Unpredictable Behavior Error: CCTL.WB must only be used with Data Cache" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP10): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP10" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP11): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP11" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP12): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP12" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP13): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP13" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP14): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP14" ILLEGAL_INSTR_ENCODING_ERROR (cctlop != `CCTLOp@INVALIDCCTLOP15): "Invalid CCTLOp (cctlop) field value INVALIDCCTLOP15" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP5): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP5" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP6): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP6" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP7): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLmio_pipe = 0b11101111011; CCTL = 0b11101111011; ENCODING Opcode11 = Opcode; Imm30a = uImm SCALE 4; E = E; Pred = Pg; PredNot = Pg@not; RegA =* Ra; Cache3 = Cache3; CCTLOp =* CCTLOp; !NencCCTL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTL_IVALL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /Cache3NoCI(D):cache /OnlyIvall:ivall $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3NoCI@INVALIDCCTLCACHEOP5): "Invalid Cache3NoCI (cache) field value INVALIDCCTLCACHEOP5" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3NoCI@INVALIDCCTLCACHEOP6): "Invalid Cache3NoCI (cache) field value INVALIDCCTLCACHEOP6" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3NoCI@INVALIDCCTLCACHEOP7): "Invalid Cache3NoCI (cache) field value INVALIDCCTLCACHEOP7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_ERROR (e != `E@E) : "E is disallowed for CCTL.IVALL" ILLEGAL_INSTR_ENCODING_ERROR (Cache3NoCI != `Cache3NoCI@CRS) : "CRS is disallowed for CCTL" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLmio_pipe = 0b11101111011; CCTL = 0b11101111011; ENCODING Opcode11 = Opcode; Pred = Pg; PredNot = Pg@not; RegA = `Register@RZ; Imm30a = 0; E = E; Cache3 =* Cache3NoCI; CCTLOp =* OnlyIvall; !NencCCTL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTL_CI_IVALL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /Cache3CI:cache /OnlyIvall:ivall $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (e != `E@E) : "E is disallowed for CCTL.IVALL" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLmio_pipe = 0b11101111011; CCTL = 0b11101111011; ENCODING Opcode11 = Opcode; Pred = Pg; PredNot = Pg@not; RegA = `Register@RZ; Imm30a = 0; E = E; Cache3 =* Cache3CI; CCTLOp =* OnlyIvall; !NencCCTL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTL_QRY" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /Cache3(D):cache /OnlyQry:op Register(RZ)@:Rd ',' [NonZeroRegister:Ra + SImm(32/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR 0: "can't use .QRY1 modifier" ILLEGAL_INSTR_ENCODING_ERROR (Cache3 != `Cache3@CRS) : "CRS is disallowed for CCTL" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP5): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP5" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP6): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP6" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP7): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = e ? 64 : 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLmio_pipe = 0b11101111011; CCTL = 0b11101111011; ENCODING Opcode11 = Opcode; Pred = Pg; PredNot = Pg@not; RegA =* Ra; Imm30a = sImm SCALE 4; E = E; Cache3 = Cache3; CCTLOp =* OnlyQry; !NencCCTL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_CCTL_QRY" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /E(noE):e /Cache3(D):cache /OnlyQry:op Register(RZ)@:Rd ',' [ZeroRegister(RZ):Ra + UImm(32/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR 0 : "can't use .QRY1 modifier" ILLEGAL_INSTR_ENCODING_ERROR (Cache3 != `Cache3@CRS) : "CRS is disallowed for CCTL" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" MISALIGNED_REG_ERROR E -> IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required when '.E' is specified" OOR_REG_ERROR E -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-2)): "Register A is out of range" OOR_REG_ERROR (E == `E@noE) -> (((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-1)): "Register A is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP5): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP5" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP6): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP6" ILLEGAL_INSTR_ENCODING_ERROR (cache != `Cache3@INVALIDCCTLCACHEOP7): "Invalid Cache3 (cache) field value INVALIDCCTLCACHEOP7" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTL = 0b11101111011; ENCODING Opcode11 = Opcode; Pred = Pg; PredNot = Pg@not; RegA =* Ra; Imm30a = uImm SCALE 4; E = E; Cache3 = Cache3; CCTLOp =* OnlyQry; !NencCCTL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTLL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LCache(D):cache /CCTLOp:cctllop [NonZeroRegister:Ra + SImm(24/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !(cctllop == `CCTLOp@RSLB) : "RSLB is disallowed for CCTLL" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@PF1.5): "PF1.5 CCTLOP is invalid" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP10): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP10" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP11): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP11" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP12): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP12" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP13): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP13" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP14): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP14" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP15): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP15" ILLEGAL_INSTR_ENCODING_ERROR (cache != `LCache@INVALIDLCACHETYPE2): "Invalid LCache (cache) field value INVALIDLCACHETYPE2" ILLEGAL_INSTR_ENCODING_ERROR (cache != `LCache@INVALIDLCACHETYPE3): "Invalid LCache (cache) field value INVALIDLCACHETYPE3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOCAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLLmio_pipe = 0b1110111110000; CCTLL = 0b1110111110000; ENCODING Opcode13 = Opcode; Imm22a = sImm SCALE 4; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Cache = cache; CCTLOp =* cctllop; !NencCCTLL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "I_CCTLL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LCache(D):cache /CCTLOp:cctllop [ZeroRegister(RZ):Ra + UImm(24/0)*:uImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !(cctllop == `CCTLOp@RSLB) : "RSLB is disallowed for CCTLL" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@PF1.5): "PF1.5 CCTLOP is invalid" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP10): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP10" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP11): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP11" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP12): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP12" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP13): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP13" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP14): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP14" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP15): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP15" ILLEGAL_INSTR_ENCODING_ERROR (cache != `LCache@INVALIDLCACHETYPE2): "Invalid LCache (cache) field value INVALIDLCACHETYPE2" ILLEGAL_INSTR_ENCODING_ERROR (cache != `LCache@INVALIDLCACHETYPE3): "Invalid LCache (cache) field value INVALIDLCACHETYPE3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_LOCAL_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLLmio_pipe = 0b1110111110000; CCTLL = 0b1110111110000; ENCODING Opcode13 = Opcode; Imm22a = uImm SCALE 4; PredNot = Pg@not; Pred = Pg; RegA =* Ra; Cache = cache; CCTLOp =* cctllop; !NencCCTLL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTLL_IVALL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CCTLLOp2:cctllop $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP10): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP10" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP11): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP11" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP12): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP12" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP13): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP13" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP14): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP14" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP15): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP15" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLLmio_pipe = 0b1110111110000; CCTLL = 0b1110111110000; ENCODING Opcode13 = Opcode; Imm22a = 0; Pred = Pg; PredNot = Pg@not; RegA = `Register@RZ; Cache = 0; CCTLOp =* cctllop; !NencCCTLL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTLL_CRS_WBALL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CRSOnly:cache /CCTLLOp3:cctllop $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP10): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP10" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP11): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP11" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP12): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP12" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP13): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP13" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP14): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP14" ILLEGAL_INSTR_ENCODING_ERROR (cctllop != `CCTLOp@INVALIDCCTLOP15): "Invalid CCTLOp (cctllop) field value INVALIDCCTLOP15" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES CCTLLmio_pipe = 0b1110111110000; CCTLL = 0b1110111110000; ENCODING Opcode13 = Opcode; Imm22a = 0; Pred = Pg; PredNot = Pg@not; RegA = `Register@RZ; Cache = cache; CCTLOp =* cctllop; !NencCCTLL; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTLT_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CCTLTOp:cctltop Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (cctltop != `CCTLTOp@INVALIDCCTLTOP2): "Invalid CCTLTOp (cctltop) field value INVALIDCCTLTOP2" ILLEGAL_INSTR_ENCODING_ERROR (cctltop != `CCTLTOp@INVALIDCCTLTOP3): "Invalid CCTLTOp (cctltop) field value INVALIDCCTLTOP3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_ERROR (cctltop == `CCTLTOp@IVTH) : "Only IVTH encoding is allowed for with a register" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLTmio_pipe = 0b1110101111101; CCTLT = 0b1110101111101; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; RegC =* Rb; CCTLTOp =* CCTLTOp; !NencCCTLTReg; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTLT_IDX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CCTLTOp:cctltop UImm(13):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cctltop != `CCTLTOp@INVALIDCCTLTOP2): "Invalid CCTLTOp (cctltop) field value INVALIDCCTLTOP2" ILLEGAL_INSTR_ENCODING_ERROR (cctltop != `CCTLTOp@INVALIDCCTLTOP3): "Invalid CCTLTOp (cctltop) field value INVALIDCCTLTOP3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_ERROR (cctltop == `CCTLTOp@IVTH) : "Only IVTH encoding is allowed for with an index" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 13; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLTmio_pipe = 0b1110101111110; CCTLT = 0b1110101111110; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; TsIdx13 =* uImm; CCTLTOp =* CCTLTOp; !NencCCTLTIDx; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CCTLT_IVALL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /CCTLTOpIVALL:cctltop $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (cctltop != `CCTLTOp@INVALIDCCTLTOP2): "Invalid CCTLTOp (cctltop) field value INVALIDCCTLTOP2" ILLEGAL_INSTR_ENCODING_ERROR (cctltop != `CCTLTOp@INVALIDCCTLTOP3): "Invalid CCTLTOp (cctltop) field value INVALIDCCTLTOP3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES CCTLTmio_pipe = 0b1110101111110; CCTLT = 0b1110101111110; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; CCTLTOp =* CCTLTOpIVALL; TsIdx13 = 0; !NencCCTLTIDx; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "MEMBAR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /MemBarLevel:lvl /MemBarIvall(NOIVALL):ivall $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES MEMBARmio_pipe = 0b1110111110011; MEMBAR = 0b1110111110011; ENCODING Opcode13 = Opcode; MembarL = MemBarLevel; Pred = Pg; PredNot = Pg@not; Ivall = MemBarIvall; !NencMEMBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SULD_D_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /LoadCacheOp(CA):cop /LDInteger_nU128("32"):size /Clamp1(NEAR):clamp Predicate(PT):Pd ',' Register:Rd ',' [ Register:Ra ] ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))) == 0) : "Rd is misaligned in SULD.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 )))))) : "Register Rd is out of range in SULD.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDInteger_nU128@INVALIDSIZE7): "Invalid LDInteger_nU128 (size) field value INVALIDSIZE7" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SULDmio_pipe = 0b1110101100010; SULD = 0b1110101100010; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; PredDest2 = DestPred(Pd); COP5 = cop; BA = ba; SUSize = size; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSULD3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SULD_D_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /LoadCacheOp(CA):cop /LDInteger_nU128("32"):size /Clamp1(NEAR):clamp Predicate(PT):Pd ',' Register:Rd ',' [ Register:Ra ] ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))) == 0) : "Rd is misaligned in SULD.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 )))))) : "Register Rd is out of range in SULD.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDInteger_nU128@INVALIDSIZE7): "Invalid LDInteger_nU128 (size) field value INVALIDSIZE7" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SULDmio_pipe = 0b1110101100011; SULD = 0b1110101100011; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; PredDest2 = DestPred(Pd); COP5 = cop; BA = ba; SUSize = size; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSULD4; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SULD_P_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /LoadCacheOp(CA):cop /RGBA(RGBA):rgba /Clamp1(NEAR):clamp Predicate(PT):Pd ',' Register:Rd ',' [ Register:Ra ] ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((rgba==`RGBA@R)||(rgba==`RGBA@RG)||(rgba==`RGBA@RGBA)): "rgba field can only be .R or .RG or .RGBA for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))) == 0) : "Rd is misaligned in SULD.P" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4)))))) : "Register Rd is out of range SULD.P" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))*32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SULDmio_pipe = 0b1110101100000; SULD = 0b1110101100000; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; PredDest2 = DestPred(Pd); COP5 = cop; SURGBA = rgba; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSULD3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SULD_P_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /LoadCacheOp(CA):cop /RGBA(RGBA):rgba /Clamp1(NEAR):clamp Predicate(PT):Pd ',' Register:Rd ',' [ Register:Ra ] ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((rgba==`RGBA@R)||(rgba==`RGBA@RG)||(rgba==`RGBA@RGBA)): "rgba field can only be .R or .RG or .RGBA for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))) == 0) : "Rd is misaligned in SULD.P" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4)))))) : "Register Rd is out of range SULD.P" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))*32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SULDmio_pipe = 0b1110101100001; SULD = 0b1110101100001; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; PredDest2 = DestPred(Pd); COP5 = cop; SURGBA = rgba; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSULD4; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUST_D_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /StoreCacheOp(WB):cop /LDInteger_nU128("32"):size /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))) == 0) : "Rb is misaligned in SUST.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 )))))) : "Register Rb is out of range in SUST.D" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDInteger_nU128@INVALIDSIZE7): "Invalid LDInteger_nU128 (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUSTmio_pipe = 0b1110101100110; SUST = 0b1110101100110; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; COP5 = cop; BA = ba; SUSize = size; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSULD1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUST_D_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /StoreCacheOp(WB):cop /LDInteger_nU128("32"):size /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))) == 0) : "Rb is misaligned in SUST.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 )))))) : "Register Rb is out of range in SUST.D" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (size != `LDInteger_nU128@INVALIDSIZE7): "Invalid LDInteger_nU128 (size) field value INVALIDSIZE7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( size <= 4 ) ? 1 : ( ( size == 5 ) ? 2 : 4 ))*32; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUSTmio_pipe = 0b1110101100111; SUST = 0b1110101100111; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; COP5 = cop; BA = ba; SUSize = size; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSULD2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUST_P_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /StoreCacheOp(WB):cop /RGBA(RGBA):rgba /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((rgba==`RGBA@R)||(rgba==`RGBA@RG)||(rgba==`RGBA@RGBA)): "rgba field can only be .R or .RG or .RGBA for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))) == 0) : "Rb is misaligned in SUST.P" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4)))))) : "Register Rb is out of range in SUST.P" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))*32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUSTmio_pipe = 0b1110101100100; SUST = 0b1110101100100; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; COP5 = cop; SURGBA = rgba; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSULD1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUST_P_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /StoreCacheOp(WB):cop /RGBA(RGBA):rgba /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((rgba==`RGBA@R)||(rgba==`RGBA@RG)||(rgba==`RGBA@RGBA)): "rgba field can only be .R or .RG or .RGBA for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))) == 0) : "Rb is misaligned in SUST.P" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4)))))) : "Register Rb is out of range in SUST.P" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SECONDARY; PROPERTIES OPERATION_TYPE = MEMORY_STORE; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = ((((rgba==`RGBA@R)||(rgba==`RGBA@G)||(rgba==`RGBA@B)||(rgba==`RGBA@A))*1+ ((rgba==`RGBA@RG)||(rgba==`RGBA@RB)||(rgba==`RGBA@GB)||(rgba==`RGBA@RA)||(rgba==`RGBA@GA)||(rgba==`RGBA@BA))*2+ ((rgba==`RGBA@RGB)||(rgba==`RGBA@RGA)||(rgba==`RGBA@RBA)||(rgba==`RGBA@GBA))*3+ ((rgba==`RGBA@RGBA))*4))*32; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUSTmio_pipe = 0b1110101100101; SUST = 0b1110101100101; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; COP5 = cop; SURGBA = rgba; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSULD2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SURED_D_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /RedOp:redop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@ADD) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@F32.FTZ.RN)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SURED.ADD only supports sizes U32, S32, U64, F32.FTZ.RN, F16x2.FTZ.RN and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MIN) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SURED.MIN only supports sizes U32, S32, U64, S64, SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MAX) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SURED.MAX only supports sizes U32, S32, U64, S64, SD32.F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@INC) -> ((size == `AtomicInteger@U32))): "SURED.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@DEC) -> ((size == `AtomicInteger@U32))): "SURED.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@AND) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SURED.AND only supports sizes U32, S32, U64, and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@OR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SURED.OR only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@XOR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SURED.XOR only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rb is misaligned in SURED.D/SUATOM.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SURED.D/SUATOM.D" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP8): "Invalid RedOp (redop) field value INVALIDREDOP8" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP9): "Invalid RedOp (redop) field value INVALIDREDOP9" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP10): "Invalid RedOp (redop) field value INVALIDREDOP10" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP11): "Invalid RedOp (redop) field value INVALIDREDOP11" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP12): "Invalid RedOp (redop) field value INVALIDREDOP12" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP13): "Invalid RedOp (redop) field value INVALIDREDOP13" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP14): "Invalid RedOp (redop) field value INVALIDREDOP14" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP15): "Invalid RedOp (redop) field value INVALIDREDOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUREDmio_pipe = 0b1110101101010; SURED = 0b1110101101010; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; SURedOp = redop; BA = ba; SUSize = size; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSURED1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SURED_D_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /RedOp:redop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@ADD) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@F32.FTZ.RN)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SURED.ADD only supports sizes U32, S32, U64, F32.FTZ.RN, F16x2.FTZ.RN and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MIN) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SURED.MIN only supports sizes U32, S32, U64, S64, SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@MAX) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SURED.MAX only supports sizes U32, S32, U64, S64, SD32.F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@INC) -> ((size == `AtomicInteger@U32))): "SURED.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@DEC) -> ((size == `AtomicInteger@U32))): "SURED.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@AND) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SURED.AND only supports sizes U32, S32, U64, and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@OR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SURED.OR only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((redop == `RedOP@XOR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SURED.XOR only supports sizes U32, S32, U64 and SD32" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rb is misaligned in SURED.D/SUATOM.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SURED.D/SUATOM.D" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP8): "Invalid RedOp (redop) field value INVALIDREDOP8" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP9): "Invalid RedOp (redop) field value INVALIDREDOP9" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP10): "Invalid RedOp (redop) field value INVALIDREDOP10" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP11): "Invalid RedOp (redop) field value INVALIDREDOP11" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP12): "Invalid RedOp (redop) field value INVALIDREDOP12" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP13): "Invalid RedOp (redop) field value INVALIDREDOP13" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP14): "Invalid RedOp (redop) field value INVALIDREDOP14" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP15): "Invalid RedOp (redop) field value INVALIDREDOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUREDmio_pipe = 0b1110101101011; SURED = 0b1110101101011; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; SURedOp = redop; BA = ba; SUSize = size; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSURED2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SURED_P_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /RedOp:redop /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP8): "Invalid RedOp (redop) field value INVALIDREDOP8" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP9): "Invalid RedOp (redop) field value INVALIDREDOP9" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP10): "Invalid RedOp (redop) field value INVALIDREDOP10" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP11): "Invalid RedOp (redop) field value INVALIDREDOP11" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP12): "Invalid RedOp (redop) field value INVALIDREDOP12" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP13): "Invalid RedOp (redop) field value INVALIDREDOP13" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP14): "Invalid RedOp (redop) field value INVALIDREDOP14" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP15): "Invalid RedOp (redop) field value INVALIDREDOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "SURED.P is deprecated!" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUREDmio_pipe = 0b1110101101000; SURED = 0b1110101101000; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; SURedOp = redop; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSURED3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SURED_P_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /RedOp:redop /Clamp1(NEAR):clamp [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP8): "Invalid RedOp (redop) field value INVALIDREDOP8" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP9): "Invalid RedOp (redop) field value INVALIDREDOP9" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP10): "Invalid RedOp (redop) field value INVALIDREDOP10" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP11): "Invalid RedOp (redop) field value INVALIDREDOP11" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP12): "Invalid RedOp (redop) field value INVALIDREDOP12" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP13): "Invalid RedOp (redop) field value INVALIDREDOP13" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP14): "Invalid RedOp (redop) field value INVALIDREDOP14" ILLEGAL_INSTR_ENCODING_ERROR (redop != `RedOp@INVALIDREDOP15): "Invalid RedOp (redop) field value INVALIDREDOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "SURED.P is deprecated!" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUREDmio_pipe = 0b1110101101001; SURED = 0b1110101101001; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; SURedOp= redop; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rb; !NencSURED4; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_D_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /AtomsOp:suatomop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@ADD) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@F32.FTZ.RN)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.ADD only supports sizes U32, S32, U64, F32.FTZ.RN, F16x2.FTZ.RN and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@MIN) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.MIN only supports sizes U32, S32, U64, S64, SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@MAX) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.MAX only supports sizes U32, S32, U64, S64 SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@INC) -> ((size == `AtomicInteger@U32))): "SUATOM.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@DEC) -> ((size == `AtomicInteger@U32))): "SUATOM.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@AND) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.AND only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@OR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.OR only supports sizes U32, S32, U64 and SD32 " ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@XOR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.XOR only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@EXCH) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64))): "SUATOM.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rb is misaligned in SURED.D/SUATOM.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SURED.D/SUATOM.D" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rd is misaligned in SUATOM.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SUATOM.D" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101001110; SUATOM = 0b1110101001110; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; satmSize2 = size; SUDim = dim; satmOp = suatomop; satmBA = ba; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_D_REG_SPARSE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /AtomsOp:suatomop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp Predicate:Pd ',' Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@ADD) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@F32.FTZ.RN)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.ADD only supports sizes U32, S32, U64, F32.FTZ.RN, F16x2.FTZ.RN and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@MIN) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.MIN only supports sizes U32, S32, U64, S64, SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@MAX) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.MAX only supports sizes U32, S32, U64, S64 SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@INC) -> ((size == `AtomicInteger@U32))): "SUATOM.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@DEC) -> ((size == `AtomicInteger@U32))): "SUATOM.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@AND) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.AND only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@OR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.OR only supports sizes U32, S32, U64 and SD32 " ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@XOR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.XOR only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@EXCH) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64))): "SUATOM.EXCH only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rb is misaligned in SURED.D/SUATOM.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SURED.D/SUATOM.D" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rd is misaligned in SUATOM.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SUATOM.D" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101110; SUATOM = 0b1110101110; ENCODING Opcode10 = Opcode; PredDest3 = DestPred(Pd); Clamp4 = clamp; RegC = Rc; satmSize2 = size; SUDim = dim; satmOp = suatomop; satmBA = ba; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_D_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /AtomsOp:suatomop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@ADD) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@F32.FTZ.RN)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.ADD only supports sizes U32, S32, U64, F32.FTZ.RN, F16x2.FTZ.RN and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@MIN) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.MIN only supports sizes U32, S32, U64, S64, SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@MAX) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@S64)||(size == `AtomicInteger@SD32)||(size == `AtomicInteger@SD64)||(size == `AtomicInteger@F16x2.FTZ.RN))): "SUATOM.MAX only supports sizes U32, S32, U64, S64 SD32, F16x2.FTZ.RN and SD64" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@INC) -> ((size == `AtomicInteger@U32))): "SUATOM.INC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@DEC) -> ((size == `AtomicInteger@U32))): "SUATOM.DEC only supports sizes U32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@AND) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.AND only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@OR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.OR only supports sizes U32, S32, U64 and SD32 " ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@XOR) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)||(size == `AtomicInteger@SD32))): "SUATOM.XOR only supports sizes U32, S32, U64 and SD32" ILLEGAL_INSTR_ENCODING_ERROR ((suatomop == `AtomsOp@EXCH) -> ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64))): "SUATOM.EXCH only supports sizes U32, S32 and U64" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rb is misaligned in SURED.D/SUATOM.D" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SURED.D/SUATOM.D" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rd is misaligned in SUATOM.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SUATOM.D" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101000; SUATOM = 0b1110101000; ENCODING Opcode10 = Opcode; satmSize1 = size; Clamp4 = clamp; TidB = suid; SUDim = dim; satmOp = suatomop; satmBA = ba; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_P_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /AtomsOp:suatomop /Clamp1(NEAR):clamp Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "SUATOM.P is deprecated!" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101001100; SUATOM = 0b1110101001100; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; satmOp = suatomop; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_P_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /AtomsOp:suatomop /Clamp1(NEAR):clamp Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP9): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP9" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP10): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP10" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP11): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP11" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP12): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP12" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP13): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP13" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP14): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP14" ILLEGAL_INSTR_ENCODING_ERROR (suatomop != `AtomsOp@INVALIDATOMSOP15): "Invalid AtomsOp (suatomop) field value INVALIDATOMSOP15" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "SUATOM.P is deprecated!" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101001101; SUATOM = 0b1110101001101; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; satmOp = suatomop; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_D_CAS_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /CAS:suatomop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp Predicate(PT):Pd ',' Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)): "SUATOM.CAS only supports sizes U32, S32 and U64" ILLEGAL_INSTR_ENCODING_ERROR (Rc != `Register@RZ): "In bindless mode, Rc cannot be RZ for surface instructions" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" OOR_REG_ERROR (((Rc)==`Register@RZ)||((((Rc)==`Register@RZ)||((Rc)<=%MAX_REG_COUNT-1)))) : "Register Rc is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % ((( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*2))) == 0) : "Rb is misaligned in SUATOM.D.CAS" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*2)))))) : "Register Rb is out of range in SUATOM.D.CAS" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rd is misaligned in SUATOM.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SUATOM.D" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*2*32); ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101011010; SUATOM = 0b1110101011010; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; satmSize2 = size; SUDim = dim; PredDest2 = DestPred(Pd); satmBA = ba; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM4; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_D_CAS_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /DOnly:d /BA(noBA):ba /Dim1:dim /CAS:suatomop /AtomicInteger("U32"):size /Clamp1(NEAR):clamp Predicate(PT):Pd ',' Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_ERROR ((size == `AtomicInteger@U32)||(size == `AtomicInteger@S32)||(size == `AtomicInteger@U64)): "SUATOM.CAS only supports sizes U32, S32 and U64" MISALIGNED_REG_ERROR ((Ra % (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) + (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ) == 3))) == 0 ) : "Ra is misaligned in surface instruction" OOR_REG_ERROR ((((Ra)==`Register@RZ)||((Ra)<=%MAX_REG_COUNT-(( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") ))))) : "Register Ra is out of range in surface instruction" MISALIGNED_REG_ERROR (Rb == `Register@RZ)||((Rb % ((( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*2))) == 0) : "Rb is misaligned in SUATOM.D.CAS" OOR_REG_ERROR (((Rb)==`Register@RZ)||((((Rb)==`Register@RZ)||((Rb)<=%MAX_REG_COUNT-((( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*2)))))) : "Register Rb is out of range in SUATOM.D.CAS" MISALIGNED_REG_ERROR (Rd == `Register@RZ)||((Rd % (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) ))) == 0) : "Rd is misaligned in SUATOM.D" OOR_REG_ERROR (((Rd)==`Register@RZ)||((((Rd)==`Register@RZ)||((Rd)<=%MAX_REG_COUNT-(( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )))))) : "Register Rb is out of range in SUATOM.D" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*32); ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = (( ((size == `AtomicInteger@U32)) + ((size == `AtomicInteger@S32)) + ((size == `AtomicInteger@SD32)) + ((size == `AtomicInteger@U64)*2) + ((size == `AtomicInteger@S64)*2) + ((size == `AtomicInteger@SD64)*2) + ((size == `AtomicInteger@F32.FTZ.RN) + ((size == `AtomicInteger@F16x2.FTZ.RN)*1)) )*2*32); ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101010; SUATOM = 0b1110101010; ENCODING Opcode10 = Opcode; satmSize1 = size; Clamp4 = clamp; TidB = suid; SUDim = dim; PredDest2 = DestPred(Pd); satmBA = ba; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM5; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_P_CAS_REG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /CAS:suatomop /Clamp1(NEAR):clamp Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' Register:Rc $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "SUATOM.P.CAS is deprecated!" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101011000; SUATOM = 0b1110101011000; ENCODING Opcode13 = Opcode; Clamp4 = clamp; RegC = Rc; SUDim = dim; satmOp = suatomop; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SUATOM_P_CAS_IMM" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /POnly:p /Dim1:dim /CAS:suatomop /Clamp1(NEAR):clamp Register:Rd ',' [ Register:Ra ] ',' Register:Rb ',' UImm(13):suid $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (clamp != `Clamp1@INVALIDSURFACECLAMP3): "Invalid Clamp1 (clamp) field value INVALIDSURFACECLAMP3" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM6): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM6" ILLEGAL_INSTR_ENCODING_ERROR (dim != `Dim1@INVALIDSURFACEDIM7): "Invalid Dim1 (dim) field value INVALIDSURFACEDIM7" ILLEGAL_INSTR_ENCODING_ERROR (Ra != `Register@RZ): "Ra cannot be RZ for surface instructions" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR 0 : "SUATOM.P.CAS is deprecated!" PROPERTIES SECONDARY; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_SURFACE_COORDINATES); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_TEX); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(suid)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = (( (Dim1 == `Dim1@"1D") + (Dim1 == `Dim1@"1D_BUFFER") + (Dim1 == `Dim1@"1D_ARRAY") * 2 + (Dim1 == `Dim1@"2D") * 2 + (Dim1 == `Dim1@"2D_ARRAY") * 3 + (Dim1 == `Dim1@"3D") * 3 + (Dim1 == `Dim1@"INVALIDSURFACEDIM6") + (Dim1 == `Dim1@"INVALIDSURFACEDIM7") )) * 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 13; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_TEX; OPCODES SUATOMmio_pipe = 0b1110101011001; SUATOM = 0b1110101011001; ENCODING Opcode13 = Opcode; Clamp4 = clamp; TidB = suid; SUDim = dim; satmOp = suatomop; RegB = Rb; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; !NencSUATOM3; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BRA" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /U(noU):uniform /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES BRAbru_pipe = 0b111000100100; BRA = 0b111000100100; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 0; Imm24 = sImm; U = U; LMT = LMT; !NencBRA; !RegA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "BRA_c" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /U(noU):uniform /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(immConstOffset); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES BRAbru_pipe = 0b111000100100; BRA = 0b111000100100; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); U = U; LMT = LMT; !ScaleLow; !NencBRA; !RegA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "BRX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' Register:Ra SImm(24/0):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(Ra); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES BRXbru_pipe = 0b111000100101; BRX = 0b111000100101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 0; Imm24 = sImm; RegA = Ra; LMT = LMT; !U; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "BRX_c" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' C:srcConst[UImm(5/0*):constBank]* [Register(RZ):Ra + SImm(17/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES BRXbru_pipe = 0b111000100101; BRX = 0b111000100101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,sImm); RegA = Ra; LMT = LMT; !U; !ScaleLow; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "JMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /U(noU):uniform /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' UImm(32)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES JMPbru_pipe = 0b111000100001; JMP = 0b111000100001; ENCODING Opcode12 = Opcode; Imm32 = sImm; Pred = Pg; PredNot = Pg@not; U = U; LMT = LMT; CA = 0; CCC_1 = Test; !RegA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "JMP_c" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /U(noU):uniform /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(immConstOffset); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES JMPbru_pipe = 0b111000100001; JMP = 0b111000100001; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); U = U; LMT = LMT; !RegA; !NencJMP; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "JMX" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' Register:Ra SImm(32/0):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(Ra); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES JMXbru_pipe = 0b111000100000; JMX = 0b111000100000; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 0; Imm32 = sImm; RegA = Ra; LMT = LMT; !U; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "JMX_c" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /LMT(noLMT):lmt { CC(CC):TestCC/Test(T):CCTest } ',' C:srcConst[UImm(5/0*):constBank]* [Register(RZ):Ra + SImm(17/0)*:sImm] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(Ra)) + (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES JMXbru_pipe = 0b111000100000; JMX = 0b111000100000; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,sImm); RegA = Ra; LMT = LMT; !U; !NencJMP; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "CAL" FORMAT Opcode /INC(INC):inc RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_CALL; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES CALbru_pipe = 0b111000100110; CAL = 0b111000100110; ENCODING Opcode12 = Opcode; CA = 0; Imm24 = sImm; INC = INC; !Pred; !PredNot; !RegA; !U; !CCC_1; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "CAL_c" FORMAT Opcode /INC(INC):inc C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES BRANCH_TYPE = BRT_CALL; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(immConstOffset); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES CALbru_pipe = 0b111000100110; CAL = 0b111000100110; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); INC = INC; !ScaleLow; !Pred; !PredNot; !RegA; !U; !CCC_1; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PRET" FORMAT Opcode /INC(INC):inc RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PRETbru_pipe = 0b111000100111; PRET = 0b111000100111; ENCODING Opcode12 = Opcode; CA = 0; Imm24 = sImm; INC = INC; !Pred; !PredNot; !RegA; !U; !CCC_1; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PRET_c" FORMAT Opcode /INC(INC):inc C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; BRANCH_TARGET_INDEX = INDEX(immConstOffset); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PRETbru_pipe = 0b111000100111; PRET = 0b111000100111; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); INC = INC; !ScaleLow; !Pred; !PredNot; !RegA; !U; !CCC_1; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "JCAL" FORMAT Opcode /INC(INC):inc UImm(32)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_CALL; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(sImm); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES JCALbru_pipe = 0b111000100010; JCAL = 0b111000100010; ENCODING Opcode12 = Opcode; CA = 0; Imm32 = sImm; INC = INC; !Pred; !PredNot; !RegA; !U; !CCC_1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "JCAL_c" FORMAT Opcode /INC(INC):inc C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES BRANCH_TYPE = BRT_CALL; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; BRANCH_TARGET_INDEX = INDEX(immConstOffset); IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES JCALbru_pipe = 0b111000100010; JCAL = 0b111000100010; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); INC = INC; !NencJMP; !Pred; !PredNot; !RegA; !U; !CCC_1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "SSY" FORMAT Opcode RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES SSYbru_pipe = 0b111000101001; SSY = 0b111000101001; ENCODING Opcode12 = Opcode; Imm24 = sImm; CA = 0; !CCC_1; !LMT; !U; !RegA; !Pred; !PredNot; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "SSY_c" FORMAT Opcode C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES SSYbru_pipe = 0b111000101001; SSY = 0b111000101001; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); !NencBRA; !ScaleLow; !Pred; !PredNot; !RegA; !U; !LMT; !CCC_1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PLONGJMP" FORMAT Opcode RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PLONGJMPbru_pipe = 0b111000101000; PLONGJMP = 0b111000101000; ENCODING Opcode12 = Opcode; Imm24 = sImm; CA = 0; !CCC_1; !LMT; !U; !RegA; !Pred; !PredNot; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PLONGJMP_c" FORMAT Opcode C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PLONGJMPbru_pipe = 0b111000101000; PLONGJMP = 0b111000101000; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); !NencBRA; !ScaleLow; !Pred; !PredNot; !RegA; !U; !LMT; !CCC_1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PBK" FORMAT Opcode RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PBKbru_pipe = 0b111000101010; PBK = 0b111000101010; ENCODING Opcode12 = Opcode; Imm24 = sImm; CA = 0; !CCC_1; !LMT; !U; !RegA; !Pred; !PredNot; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PBK_c" FORMAT Opcode C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PBKbru_pipe = 0b111000101010; PBK = 0b111000101010; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); !NencBRA; !ScaleLow; !Pred; !PredNot; !RegA; !U; !LMT; !CCC_1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PCNT" FORMAT Opcode RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 24; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PCNTbru_pipe = 0b111000101011; PCNT = 0b111000101011; ENCODING Opcode12 = Opcode; Imm24 = sImm; CA = 0; !CCC_1; !LMT; !U; !RegA; !Pred; !PredNot; !NencBRA; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PCNT_c" FORMAT Opcode C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PCNTbru_pipe = 0b111000101011; PCNT = 0b111000101011; ENCODING Opcode12 = Opcode; CA = 1; CBank,Imm16 = ConstBankAddress0(constBank,immConstOffset); !NencBRA; !ScaleLow; !Pred; !PredNot; !RegA; !U; !LMT; !CCC_1; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "RET" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_RETURN; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES RETbru_pipe = 0b111000110010; RET = 0b111000110010; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; !Imm32; !RegA; !U; !CA; !LMT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "LONGJMP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITION PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES LONGJMPbru_pipe = 0b111000110001; LONGJMP = 0b111000110001; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; !Imm32; !RegA; !U; !CA; !LMT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "KIL" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_PS): "Can only be used with pixel shader" PROPERTIES BRANCH_TYPE = BRT_BRANCHOUT; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_PS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_SPH_INSTR_COMBINATION) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES KILbru_pipe = 0b111000110011; KIL = 0b111000110011; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; !Imm32; !RegA; !U; !CA; !LMT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "BRK" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES BRKbru_pipe = 0b111000110100; BRK = 0b111000110100; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; !Imm32; !RegA; !U; !CA; !LMT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "CONT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_BRANCH; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES CONTbru_pipe = 0b111000110101; CONT = 0b111000110101; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; !Imm32; !RegA; !U; !CA; !LMT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "EXIT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /KeepRefCount(noKEEPREFCOUNT):krc CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE != $ST_CS) -> (krc == `KeepRefCount@noKEEPREFCOUNT)) : "EXIT.KEEPREFCOUNT can only be used in compute shaders." PROPERTIES BRANCH_TYPE = BRT_BRANCHOUT; CC_INDEX = INDEX(CCTest); PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES EXITbru_pipe = 0b111000110000; EXIT = 0b111000110000; ENCODING Opcode12 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; KeepRefCnt = krc; !NencEXIT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "PEXIT" FORMAT Opcode RSImm(24)*:sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PC_MISALIGNED_ERROR ((sImm & 0x7) == 0 ): "Misaligned PEXIT address" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE != $ST_PS): "Cant' used with shader type PS" PROPERTIES PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PC_OVERFLOW) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) + (1<<IERROR_PC_MISALIGNED) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC_ADDRESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES PEXITbru_pipe = 0b111000100011; PEXIT = 0b111000100011; ENCODING Opcode12 = Opcode; Imm24 = sImm; !NencPEXIT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "SAM" FORMAT Opcode $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 2; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_PHYSICAL_STACK_OVERFLOW) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES SAMbru_pipe = 0b111000110111; SAM = 0b111000110111; ENCODING Opcode12 = Opcode; !NencRTT; !RTTOp; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "RAM" FORMAT Opcode $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_API_STACK_ERROR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES RAMbru_pipe = 0b111000111000; RAM = 0b111000111000; ENCODING Opcode12 = Opcode; !NencRTT; !RTTOp; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "BPT" FORMAT Opcode /BPTMode:bpt UImm(20/0):sImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR !(bpt == `BPTMode@TRAP && (sImm < 1 || sImm > 7)) : "BPT.TRAP immediate must be between 1 and 7" ILLEGAL_INSTR_ENCODING_ERROR (bpt != `BPTMode@CAL): ".CAL option is illegal for Maxwell BPT instruction" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(sImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES BPTbru_pipe = 0b111000111010; BPT = 0b111000111010; ENCODING Opcode12 = Opcode; Imm20 = sImm; Bpt = BPTMode; !NencBPT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "RTT" FORMAT Opcode /RTTOp(POPCRS):rttop $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_RETURN; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES RTTbru_pipe = 0b111000110110; RTT = 0b111000110110; ENCODING Opcode12 = Opcode; RTTOp = RTTOp; !NencRTT; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "IDE_EN" FORMAT Opcode /IDEActionENOnly:en UImm(16/0xc10):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (uImm == 0xC10) : "only immediate value 0xC10 is allowed" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES IDEfxu_pipe = 0b111000111001; IDE = 0b111000111001; ENCODING Opcode12 = Opcode; Imm16 = uImm; DI = 0; !NencIDE; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "IDE_DI" FORMAT Opcode /IDEActionDIOnly(DI):di UImm(16/0xc10):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (uImm == 0xC10) : "only immediate value 0xC10 is allowed" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES IDEfxu_pipe = 0b111000111001; IDE = 0b111000111001; ENCODING Opcode12 = Opcode; Imm16 = uImm; DI = 1; !NencIDE; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SYNC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode CC(CC):TestCC/Test(T):CCTest $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES BRANCH_TYPE = BRT_BRANCH; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_BRU_DEPBAR_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((CCTest!=`Test@T) && (CCTest!=`Test@F) && (CCTest!=`Test@CSM_TA) && (CCTest!=`Test@CSM_TR) && (CCTest!=`Test@CSM_MX) && (CCTest!=`Test@FCSM_TA) && (CCTest!=`Test@FCSM_TR) && (CCTest!=`Test@FCSM_MX)); VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES SYNCbru_pipe = 0b1111000011111; SYNC = 0b1111000011111; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; CCC_1 = Test; !NencSync; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = 7; OEVarLatSrc = 7; !OETexPhase; !OEReserved; !OEReserved1; CLASS "NOP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode { CC(CC):TestCC/Test(T):fcomp } ',' UImm(16/0):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES NOPcoupled_fe_pipe = 0b0101000010110; NOP = 0b0101000010110; ENCODING Opcode13 = Opcode; Imm16 = uImm; PredNot = Pg@not; Pred = Pg; Trig = 0; CCC_2 = Test; !NencNOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "NOP_trig" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Trig:trig { CC(CC):TestCC/Test(T):fcomp } ',' UImm(16/0):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS PROPERTIES SINGLETON; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = ((fcomp!=`Test@T) && (fcomp!=`Test@F) && (fcomp!=`Test@CSM_TA) && (fcomp!=`Test@CSM_TR) && (fcomp!=`Test@CSM_MX) && (fcomp!=`Test@FCSM_TA) && (fcomp!=`Test@FCSM_TR) && (fcomp!=`Test@FCSM_MX)); OPCODES NOPcoupled_fe_pipe = 0b0101000010110; NOP = 0b0101000010110; ENCODING Opcode13 = Opcode; Imm16 = uImm; PredNot = Pg@not; Pred = Pg; Trig = 1; CCC_2 = Test; !NencNOP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "S2R" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode RegisterFAU:Rd ',' SpecialRegister:SR $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(SR)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES S2Rmio_pipe = 0b1111000011001; S2R = 0b1111000011001; ENCODING Opcode13= Opcode; SReg = SR; PredNot = Pg@not; Pred = Pg; Dest = Rd; !NencS2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "CS2R" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode RegisterFAU:Rd ',' SpecialRegister:SR $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_WARNING ((SR >= 4)&&(SR <= 11)||(SR >= 72)&&(SR <= 83)): "Warning: Only SR4..SR11 and SR72..SR83 are valid for CS2R" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(SR)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES CS2Rfxu_pipe = 0b0101000011001; CS2R = 0b0101000011001; ENCODING Opcode13= Opcode; SReg = SR; PredNot = Pg@not; Pred = Pg; Dest = Rd; !NencS2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "B2R_BAR" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarmdBAR(BAR):barmd Register:Rd ',' UImm(4):barNum $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "Can only be used with compute shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (barmd != `BarmdBAR@INVALID): "Invalid BarmdBAR (barmd) field value INVALID" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 4; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES B2Rmio_pipe = 0b1111000010111; B2R = 0b1111000010111; ENCODING Opcode13 = Opcode; DstPred =* `Predicate@PT; Barmd =* BarmdBAR; Dest = Rd; RegA = barNum; Pred = Pg; PredNot = Pg@not; !NencB2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "B2R_RESULT" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarmdRESULT:barmd Register:Rd ',' Predicate(PT):Pd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "Can only be used with compute shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES B2Rmio_pipe = 0b1111000010111; B2R = 0b1111000010111; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Barmd =* BarmdRESULT; DstPred = Pd; Dest = Rd; RegA = `Register@RZ; !NencB2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "B2R_WARP" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarmdWARP:barmd Register:Rd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS) : "Can only be used with compute shader" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES B2Rmio_pipe = 0b1111000010111; B2R = 0b1111000010111; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Barmd =* BarmdWARP; DstPred =* `Predicate@PT; Dest = Rd; RegA = `Register@RZ; !NencB2R; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "R2B" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Barmd(BAR):barmd UImm(4):uImm ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (barmd != `Barmd@RESULT): "R2B.RESULT is invalid" ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "must be used with compute shader" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (barmd != `Barmd@INVALID): "Invalid Barmd (barmd) field value INVALID" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 8; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES R2Bmio_pipe = 0b1111000011000; R2B = 0b1111000011000; ENCODING Opcode13 = Opcode; Barmd = barmd; BarName = uImm; Pred = Pg; PredNot = Pg@not; RegB = Rb; !RegA; !Dest; !NencR2B; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "LEPC" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode Register:Rd $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITION OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES LEPCfxu_pipe = 0b0101000011010; LEPC = 0b0101000011010; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; Dest = Rd; !Imm28; !LSSize2; !RegA; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "BAR_Sync" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSync:barmode Register:Ra ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR ((Ra+(Ra==`Register@RZ)) == (Rb+(Rb==`Register@RZ))) : "Ra needs to be equal to Rb when specifying registers for SaName and SbarCnt" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; SrcNot = 0; SrcPred = `Predicate@PT; BarOp =* BarSync; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; !Dest; AFix_BAR=0; BFix_BAR=0; !BarFiller; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Sync_b" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSync:barmode Register:Ra ',' UImm(12/0):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; SrcNot = 0; SrcPred = `Predicate@PT; BarOp =* BarSync; Pred = Pg; PredNot = Pg@not; RegA = Ra; Imm12 = uImm; !Dest; AFix_BAR=0; BFix_BAR=1; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Sync_a_b" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSync:barmode UImm(4):barNum ',' UImm(12/0):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; SrcNot = 0; SrcPred = `Predicate@PT; BarOp =* BarSync; Pred = Pg; PredNot = Pg@not; RegA = barNum; Imm12 = uImm; !Dest; AFix_BAR=1; BFix_BAR=1; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Sync_a" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSync:barmode UImm(4):barNum ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; SrcNot = 0; SrcPred = `Predicate@PT; BarOp =* BarSync; Pred = Pg; PredNot = Pg@not; RegA = barNum; RegB = Rb; !Dest; !BarFiller; AFix_BAR=1; BFix_BAR=0; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Arv" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarArv:barmode Register:Ra ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR ((Ra+(Ra==`Register@RZ)) == (Rb+(Rb==`Register@RZ))) : "Ra needs to be equal to Rb when specifying registers for SaName and SbarCnt" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarArv; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; !Dest; SrcPred = `Predicate@PT; SrcNot = 0; !BarFiller; AFix_BAR=0; BFix_BAR=0; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Arv_a" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarArv:barmode UImm(4):barNum ',' Register:Rb $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarArv; Pred = Pg; PredNot = Pg@not; RegA = barNum; RegB = Rb; !Dest; SrcPred = `Predicate@PT; SrcNot = 0; !BarFiller; AFix_BAR=1; BFix_BAR=0; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Arv_imm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarArv:barmode Register:Ra ',' UImm(12):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarArv; Pred = Pg; PredNot = Pg@not; RegA = Ra; Imm12 = uImm; !Dest; SrcPred = `Predicate@PT; SrcNot = 0; !BarRedOp; AFix_BAR=0; BFix_BAR=1; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Arv_imm_a" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarArv:barmode UImm(4):barNum ',' UImm(12):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarArv; Pred = Pg; PredNot = Pg@not; RegA = barNum; Imm12 = uImm; !Dest; SrcPred = `Predicate@PT; SrcNot = 0; !BarRedOp; AFix_BAR=1; BFix_BAR=1; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Red" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarRED:barmode /Red:redmode Register:Ra ',' Register:Rb ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR ((Ra+(Ra==`Register@RZ)) == (Rb+(Rb==`Register@RZ))) : "Ra needs to be equal to Rb when specifying registers for SaName and SbarCnt" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redmode != `Red@INVALIDBARMODE3): "Invalid Red (redmode) field value INVALIDBARMODE3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarRED; BarRedOp = Red; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; SrcPred = Pa; SrcNot = Pa@not; !Dest; !BarFiller; AFix_BAR=0; BFix_BAR=0; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Red_b" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarRED:barmode /Red:redmode Register:Ra ',' UImm(12/0):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redmode != `Red@INVALIDBARMODE3): "Invalid Red (redmode) field value INVALIDBARMODE3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarRED; BarRedOp = Red; Pred = Pg; PredNot = Pg@not; RegA = Ra; Imm12 = uImm; SrcPred = Pa; SrcNot = Pa@not; !Dest; AFix_BAR=0; BFix_BAR=1; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Red_a_b" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarRED:barmode /Red:redmode UImm(4):barNum ',' UImm(12/0):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR (redmode != `Red@INVALIDBARMODE3): "Invalid Red (redmode) field value INVALIDBARMODE3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarRED; BarRedOp = Red; Pred = Pg; PredNot = Pg@not; RegA = barNum; Imm12 = uImm; SrcPred = Pa; SrcNot = Pa@not; !Dest; AFix_BAR=1; BFix_BAR=1; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Red_a" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarRED:barmode /Red:redmode UImm(4):barNum ',' Register:Rb ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (redmode != `Red@INVALIDBARMODE3): "Invalid Red (redmode) field value INVALIDBARMODE3" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarRED; BarRedOp = Red; Pred = Pg; PredNot = Pg@not; RegA = barNum; RegB = Rb; SrcPred = Pa; SrcNot = Pa@not; !Dest; !BarFiller; AFix_BAR=1; BFix_BAR=0; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_syncall" FORMAT Opcode /BarSYNCALL:barmode $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarSYNCALL; Pred =*`Predicate@PT; PredNot =* 0; !RegA; RegB = `Register@RZ; !Dest; SrcPred = `Predicate@PT; SrcNot = 0; !BarFiller; !BarRedOp; !NencBAR2; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Scan" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSCAN:barmode Register:Ra ',' Register:Rb ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR ((Ra+(Ra==`Register@RZ)) == (Rb+(Rb==`Register@RZ))) : "Ra needs to be equal to Rb when specifying registers for SaName and SbarCnt" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarSCAN; Pred = Pg; PredNot = Pg@not; RegA = Ra; RegB = Rb; !Dest; SrcPred = Pa; SrcNot = Pa@not; !BarFiller; AFix_BAR=0; BFix_BAR=0; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_Scan_a" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSCAN:barmode UImm(4):barNum ',' Register:Rb ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarSCAN; Pred = Pg; PredNot = Pg@not; RegA = barNum; RegB = Rb; !Dest; SrcPred = Pa; SrcNot = Pa@not; !BarFiller; AFix_BAR=1; BFix_BAR=0; !BarRedOp; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_scan_imm" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSCAN:barmode Register:Ra ',' UImm(12):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarSCAN; Pred = Pg; PredNot = Pg@not; RegA = Ra; Imm12 = uImm; !Dest; SrcPred = Pa; SrcNot = Pa@not; !BarRedOp; AFix_BAR=0; BFix_BAR=1; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "BAR_scan_imm_a" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /BarSCAN:barmode UImm(4):barNum ',' UImm(12):uImm ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || (%SHADER_TYPE == $ST_CS): "Shader type must be CS" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = (1<<ISHADER_CS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_ILLEGAL_INSTR_PARAM) + (1<<IERROR_ILLEGAL_INSTR_PARAM2) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_INTEGER); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(barNum)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 4; ISRC_B_SIZE = 12; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES BARmio_pipe = 0b1111000010101; BAR = 0b1111000010101; ENCODING Opcode13 = Opcode; BarOp =* BarSCAN; Pred = Pg; PredNot = Pg@not; RegA = barNum; Imm12 = uImm; !Dest; SrcPred = Pa; SrcNot = Pa@not; !BarRedOp; AFix_BAR=1; BFix_BAR=1; !NencBAR; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "VOTE.VTG" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VTG:vtg /VTGMode:vtgmode UImm(28):uImm $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_VSA) || (%SHADER_TYPE == $ST_VSB) || (%SHADER_TYPE == $ST_TI) || (%SHADER_TYPE == $ST_TS) || (%SHADER_TYPE == $ST_GS)) : " VOTE.VTG can only be used with VSa, VSb, TI, TS, or GS" ILLEGAL_INSTR_ENCODING_ERROR (vtgmode != `VTGMode@INVALIDVTGMODE3): "Invalid VTGMode (vtgmode) field value INVALIDVTGMODE3" PROPERTIES SIDL_NAME = `SIDL_NAMES@VOTE_VTG; PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_VOTE_INDEX); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(uImm)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 28; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VOTEfxu_pipe = 0b010_10000_11100; VOTE = 0b010_10000_11100; ENCODING Opcode13 = Opcode; VMode = VTGMode; Pred = Pg; PredNot = Pg@not; Imm28 = uImm; !NencVOTEVTG; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "VOTE" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /VoteOp:voteop { Register(RZ):Rd } ',' Predicate:Pd ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" ILLEGAL_INSTR_ENCODING_ERROR (voteop != `VoteOp@INVALIDVMODE3): "Invalid VoteOp (voteop) field value INVALIDVMODE3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_MATH; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; OPCODES VOTEfxu_pipe = 0b010_10000_11011; VOTE = 0b010_10000_11011; ENCODING Opcode13 = Opcode; Pred = Pg; PredNot = Pg@not; VMode = VoteOp; Dest = Rd; VPDest = Pd; SrcPred = Pa; SrcNot = Pa@not; !NencVOTE; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = 7; OEVarLatSrc = 7; !OEReuseA; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "SETCRSPTR" FORMAT Opcode Register:Ra $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 5; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES SETCRSPTRmio_pipe = 0b111000_10_1110; SETCRSPTR = 0b111000_10_1110; ENCODING Opcode12 = Opcode; RegA = Ra; !Dest; !NencCRSLMEM; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "GETCRSPTR" FORMAT Opcode Register:Rd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_UNORDERED; OPCODES GETCRSPTRmio_pipe = 0b111000_10_1100; GETCRSPTR = 0b111000_10_1100; ENCODING Opcode12 = Opcode; Dest = Rd; !RegA ; !NencCRSLMEM; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "SETLMEMBASE" FORMAT Opcode Register:Ra $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (dst_wr_sb == 7): "Illegal instruction encoding: Instruction type INST_TYPE_MIO_RD_SCBD can not have a wr scoreboard value other than 7 (no scbd) " MISALIGNED_REG_ERROR IsEven(((Ra)+((Ra)==`Register@RZ))) : "An even address register is required" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 64; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_ADU; OPCODES SETLMEMBASEmio_pipe = 0b111000_10_1111; SETLMEMBASE = 0b111000_10_1111; ENCODING Opcode12 = Opcode; RegA = Ra; !Dest; !NencCRSLMEM; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "GETLMEMBASE" FORMAT Opcode Register:Rd $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS MISALIGNED_REG_ERROR IsEven(((Rd)+((Rd)==`Register@RZ))) : "Register numbers must be even for double float operations" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-2))) : "Register Rd is out of range" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_MISALIGNED_REG) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 64; ISRC_A_SIZE = 0; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_ADU; OPCODES GETLMEMBASEmio_pipe = 0b111000_10_1101; GETLMEMBASE = 0b111000_10_1101; ENCODING Opcode12 = Opcode; Dest = Rd; !RegA; !NencCRSLMEM; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "ISBERD" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /ISBERDIO(I):io /BASE(MAP):base /SKEW(noSKEW):skew /ISBERDInteger(U8):size Register:Rd ',' [Register:Ra] $( { '&' REQ:req '=' BITSET(6/0x0000):req_bit_set } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR (%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_TI) || (%SHADER_TYPE == $ST_TS) || (%SHADER_TYPE == $ST_GS) || (%SHADER_TYPE == $ST_VSA) || (%SHADER_TYPE == $ST_VSB)) : " ISBERD can only be used with VSa, VSb, TI, TS, or GS" ILLEGAL_INSTR_ENCODING_ERROR ((io == `ISBERDIO@O) -> ((%SHADER_TYPE == $ST_UNKNOWN) || ((%SHADER_TYPE == $ST_TI) || (%SHADER_TYPE == $ST_TS) || (%SHADER_TYPE == $ST_VSA) || (%SHADER_TYPE == $ST_VSB)))) : " ISBERD.O can only be used with VSa, VSb, TI, or TS" ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR ((((%SHADER_TYPE == $ST_VSA) || (%SHADER_TYPE == $ST_VSB))&&(io==`ISBERDIO@I)) -> ((base!=`BASE@MAP) && (base!=`BASE@PATCH))) : " ISBERD.I.MAP and ISBERD.I.PATCH canot be used with VSa, VSb" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES OPERATION_TYPE = MEMORY_LOAD; VALID_IN_SHADERS = (1<<ISHADER_VS) + (1<<ISHADER_GS) + (1<<ISHADER_TI) + (1<<ISHADER_TS); INSTRUCTION_TYPE = INST_TYPE_DECOUPLED_RD_WR_SCBD; MIN_WAIT_NEEDED = 1; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_ADDR) + (1<<IERROR_MISALIGNED_ADDR) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_GENERIC); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_RAW_ISBE_ACCESS); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = (((size==`ISBERDInteger@U8)*8) + ((size==`ISBERDInteger@U16)*16) + ((size==`ISBERDInteger@"32")*32)); ISRC_A_SIZE = 10; ISRC_B_SIZE = 0; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_SHM; OPCODES ISBERDmio_pipe = 0b1110111111010; ISBERD = 0b1110111111010; ENCODING Opcode13 = Opcode; ALSize = ISBERDInteger; IBase = base; AIO = ISBERDIO; P = SKEW; Pred = Pg; PredNot = Pg@not; RegA =* Ra; Dest = Rd; !NencISBERD; OEUSchedInfo = usched_info; OEWaitOnSb = req_bit_set; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); !OETexPhase; !OEReserved; !OEReserved1; CLASS "hfma2__v2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hfma2__v2_ofmt("F16_V2"):ofmt /hfma2__v2_fmz("nofmz"):fmz /hfma2__v2_sat("nosat"):sat hfma2__v2_Rd:Rd ',' $( [-] hfma2__v2_Ra:Ra /hfma2__v2_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] hfma2__v2_Rb:Rb /hfma2__v2_Sb_iswz_Rb_mod("H1_H0"):iswz_Rb_mod {/REUSE(noreuse):reuse_src_b} )$ ',' $( [-] hfma2__v2_Rc:Rc /hfma2__v2_Rc_iswz_Rc_reg_mod("H1_H0"):iswz_Rc_reg_mod {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hfma2__v2_ofmt@MRG_H1) && (ofmt != `hfma2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HFMA2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HFMA2_REG ; ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HFMA2fp16g0_pipe = 2976; HFMA2fp16g1_pipe = 2976; HFMA2 = 2976; ENCODING !hfma2__v2_unused; hfma2__v2_Pg = Pg; hfma2__v2_PgNot = Pg@not; hfma2__v2_opcode=Opcode; hfma2__v2_ofmt=ofmt; hfma2__v2_fmz=fmz; hfma2__v2_sat=sat; hfma2__v2_Rd=Rd; hfma2__v2_Ra=Ra; hfma2__v2_Ra_iswz_Ra_mod=iswz_Ra_mod; hfma2__v2_Sb=Rb; hfma2__v2_Sb_iswz_Rb_mod=iswz_Rb_mod; hfma2__v2_Rc=Rc; hfma2__v2_Rc_negate=Rc@negate; hfma2__v2_Rc_iswz_Rc_reg_mod=iswz_Rc_reg_mod; hfma2__v2_req_sb_bitset=req_sb_bitset; hfma2__v2_src_rel_sb=VarLatOperandEnc(src_rel_sb); hfma2__v2_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; OEReuseC = reuse_src_c; hfma2__v2_usched_info=usched_info; hfma2__v2_nAB=hfma2__v2_nAB(Ra@negate,Rb@negate); CLASS "hfma2__v1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hfma2__v1_ofmt("F16_V2"):ofmt /hfma2__v1_fmz("nofmz"):fmz /hfma2__v1_sat("nosat"):sat hfma2__v1_Rd:Rd ',' $( hfma2__v1_Ra:Ra /hfma2__v1_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):Sb ','F16Imm(64):Sb2 ',' $( [-] hfma2__v1_Rc:Rc /hfma2__v1_Rc_iswz_Rc_mod("H1_H0"):iswz_Rc_mod {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hfma2__v2_ofmt@MRG_H1) && (ofmt != `hfma2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HFMA2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HFMA2_IMM ; ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Sb))+(1<<INDEX(Sb)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HFMA2fp16g0_pipe = 28; HFMA2fp16g1_pipe = 28; HFMA2 = 28; ENCODING !hfma2__v1_unused; hfma2__v1_Pg = Pg; hfma2__v1_PgNot = Pg@not; hfma2__v1_opcode=Opcode; hfma2__v1_ofmt=ofmt; hfma2__v1_fmz=fmz; hfma2__v1_sat=sat; hfma2__v1_Rd=Rd; hfma2__v1_Ra=Ra; hfma2__v1_Ra_iswz_Ra_mod=iswz_Ra_mod; hfma2__v1_Sb=Sb; hfma2__v1_Sb2=Sb2; hfma2__v1_Rc=Rc; hfma2__v1_Rc_negate=Rc@negate; hfma2__v1_Rc_iswz_Rc_mod=iswz_Rc_mod; hfma2__v1_req_sb_bitset=req_sb_bitset; hfma2__v1_src_rel_sb=VarLatOperandEnc(src_rel_sb); hfma2__v1_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; hfma2__v1_usched_info=usched_info; CLASS "hfma2__v0" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hfma2__v0_ofmt("F16_V2"):ofmt /hfma2__v0_fmz("nofmz"):fmz /hfma2__v0_sat("nosat"):sat hfma2__v0_Rd:Rd ',' $( [-] hfma2__v0_Ra:Ra /hfma2__v0_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' [-] C:Sb[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' $( [-] hfma2__v0_Rc:Rc /hfma2__v0_Rc_iswz_Rc_mod("H1_H0"):iswz_Rc_mod {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hfma2__v2_ofmt@MRG_H1) && (ofmt != `hfma2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HFMA2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_MISALIGNED_ADDR)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+(1<<IERROR_INVALID_CONST_ADDR)+(1<<IERROR_OOR_REG)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HFMA2_BCST ; ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank))+(1<<INDEX(immConstOffset)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HFMA2fp16g0_pipe = 29; HFMA2fp16g1_pipe = 29; HFMA2 = 29; ENCODING !hfma2__v0_unused; hfma2__v0_Pg = Pg; hfma2__v0_PgNot = Pg@not; hfma2__v0_opcode=Opcode; hfma2__v0_ofmt=ofmt; hfma2__v0_fmz=fmz; hfma2__v0_sat=sat; hfma2__v0_Rd=Rd; hfma2__v0_Ra=Ra; hfma2__v0_Ra_iswz_Ra_mod=iswz_Ra_mod; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); hfma2__v0_Rc=Rc; hfma2__v0_Rc_negate=Rc@negate; hfma2__v0_Rc_iswz_Rc_mod=iswz_Rc_mod; hfma2__v0_req_sb_bitset=req_sb_bitset; hfma2__v0_src_rel_sb=VarLatOperandEnc(src_rel_sb); hfma2__v0_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; hfma2__v0_usched_info=usched_info; hfma2__v0_nAB=hfma2__v0_nAB(Ra@negate,Sb@negate); CLASS "hset2__v2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hset2__v2_bval("BM"):bval /hset2__v2_cmp:cmp /hset2__v2_ftz("noftz"):ftz /hset2__v2_bop:bop hset2__v2_Rd:Rd ',' $( [-][||] hset2__v2_Ra:Ra /hset2__v2_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] hset2__v2_Rb:Rb /hset2__v2_Sb_iswz_Rb_mod("H1_H0"):iswz_Rb_mod {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bop != `Bop@INVALIDBOP03): "Invalid Bop (bop) field value INVALIDBOP03" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HSET2_REG ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HSET2fp16g0_pipe = 2979; HSET2fp16g1_pipe = 2979; HSET2 = 2979; ENCODING !hset2__v2_unused; hset2__v2_Pg = Pg; hset2__v2_PgNot = Pg@not; hset2__v2_opcode=Opcode; hset2__v2_bval=bval; hset2__v2_cmp=cmp; hset2__v2_ftz=ftz; hset2__v2_bop=bop; hset2__v2_Rd=Rd; hset2__v2_Ra=Ra; hset2__v2_Ra_absolute=Ra@absolute; hset2__v2_Ra_negate=Ra@negate; hset2__v2_Ra_iswz_Ra_mod=iswz_Ra_mod; hset2__v2_Sb=Rb; hset2__v2_Sb_absolute=Rb@absolute; hset2__v2_Sb_negate=Rb@negate; hset2__v2_Sb_iswz_Rb_mod=iswz_Rb_mod; hset2__v2_Ps = Ps; hset2__v2_PsNot = Ps@not; hset2__v2_req_sb_bitset=req_sb_bitset; hset2__v2_src_rel_sb=VarLatOperandEnc(src_rel_sb); hset2__v2_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; hset2__v2_usched_info=usched_info; CLASS "hset2__v1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hset2__v1_bval("BM"):bval /hset2__v1_cmp:cmp /hset2__v1_ftz("noftz"):ftz /hset2__v1_bop:bop hset2__v1_Rd:Rd ',' $( [-][||] hset2__v1_Ra:Ra /hset2__v1_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):Sb ','F16Imm(64):Sb2 ',' [!]Predicate:Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bop != `Bop@INVALIDBOP03): "Invalid Bop (bop) field value INVALIDBOP03" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HSET2_IMM ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Sb))+(1<<INDEX(Sb)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HSET2fp16g0_pipe = 124; HSET2fp16g1_pipe = 124; HSET2 = 124; ENCODING !hset2__v1_unused; hset2__v1_Pg = Pg; hset2__v1_PgNot = Pg@not; hset2__v1_opcode=Opcode; hset2__v1_bval=bval; hset2__v1_cmp=cmp; hset2__v1_ftz=ftz; hset2__v1_bop=bop; hset2__v1_Rd=Rd; hset2__v1_Ra=Ra; hset2__v1_Ra_absolute=Ra@absolute; hset2__v1_Ra_negate=Ra@negate; hset2__v1_Ra_iswz_Ra_mod=iswz_Ra_mod; hset2__v1_Sb=Sb; hset2__v1_Sb2=Sb2; hset2__v1_Ps = Ps; hset2__v1_PsNot = Ps@not; hset2__v1_req_sb_bitset=req_sb_bitset; hset2__v1_src_rel_sb=VarLatOperandEnc(src_rel_sb); hset2__v1_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hset2__v1_usched_info=usched_info; CLASS "hset2__v0" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hset2__v0_bval("BM"):bval /hset2__v0_cmp:cmp /hset2__v0_ftz("noftz"):ftz /hset2__v0_bop:bop hset2__v0_Rd:Rd ',' $( [-][||] hset2__v0_Ra:Ra /hset2__v0_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' [-] C:Sb[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Ps $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bop != `Bop@INVALIDBOP03): "Invalid Bop (bop) field value INVALIDBOP03" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+(1<<IERROR_INVALID_CONST_ADDR)+(1<<IERROR_MISALIGNED_ADDR)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HSET2_BCST ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank))+(1<<INDEX(immConstOffset)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HSET2fp16g0_pipe = 125; HSET2fp16g1_pipe = 125; HSET2 = 125; ENCODING !hset2__v0_unused; hset2__v0_Pg = Pg; hset2__v0_PgNot = Pg@not; hset2__v0_opcode=Opcode; hset2__v0_bval=bval; hset2__v0_cmp=cmp; hset2__v0_ftz=ftz; hset2__v0_bop=bop; hset2__v0_Rd=Rd; hset2__v0_Ra=Ra; hset2__v0_Ra_absolute=Ra@absolute; hset2__v0_Ra_negate=Ra@negate; hset2__v0_Ra_iswz_Ra_mod=iswz_Ra_mod; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); hset2__v0_Sb_negate=Sb@negate; hset2__v0_Ps = Ps; hset2__v0_PsNot = Ps@not; hset2__v0_req_sb_bitset=req_sb_bitset; hset2__v0_src_rel_sb=VarLatOperandEnc(src_rel_sb); hset2__v0_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hset2__v0_usched_info=usched_info; ALTERNATE CLASS "hset2_bop__v1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hset2_bop__v1_bval("BM"):bval /hset2_bop__v1_cmp:cmp /hset2_bop__v1_ftz("noftz"):ftz hset2_bop__v1_Rd:Rd ',' $( [-][||] hset2_bop__v1_Ra:Ra /hset2_bop__v1_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):Sb ','F16Imm(64):Sb2 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; MIN_WAIT_NEEDED = 0 ; VALID_IN_SHADERS = ISHADER_ALL ; SIDL_NAME = `SIDL_NAMES@HSET2_IMM ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Sb))+(1<<INDEX(Sb)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HSET2fp16g0_pipe = 124; HSET2fp16g1_pipe = 124; HSET2 = 124; ENCODING !hset2_bop__v1_unused; hset2_bop__v1_Pg = Pg; hset2_bop__v1_PgNot = Pg@not; hset2_bop__v1_opcode=Opcode; hset2_bop__v1_bval=bval; hset2_bop__v1_cmp=cmp; hset2_bop__v1_ftz=ftz; hset2_bop__v1_bop=*0; hset2_bop__v1_Rd=Rd; hset2_bop__v1_Ra=Ra; hset2_bop__v1_Ra_absolute=Ra@absolute; hset2_bop__v1_Ra_negate=Ra@negate; hset2_bop__v1_Ra_iswz_Ra_mod=iswz_Ra_mod; hset2_bop__v1_Sb=Sb; hset2_bop__v1_Sb2=Sb2; hset2_bop__v1_Ps =* 7; hset2_bop__v1_PsNot =* 0; hset2_bop__v1_req_sb_bitset=req_sb_bitset; hset2_bop__v1_src_rel_sb=VarLatOperandEnc(src_rel_sb); hset2_bop__v1_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hset2_bop__v1_usched_info=usched_info; ALTERNATE CLASS "hset2_bop__v0" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hset2_bop__v0_bval("BM"):bval /hset2_bop__v0_cmp:cmp /hset2_bop__v0_ftz("noftz"):ftz hset2_bop__v0_Rd:Rd ',' $( [-][||] hset2_bop__v0_Ra:Ra /hset2_bop__v0_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' [-] C:Sb[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+(1<<IERROR_INVALID_CONST_ADDR)+(1<<IERROR_MISALIGNED_ADDR)+0; MIN_WAIT_NEEDED = 0 ; VALID_IN_SHADERS = ISHADER_ALL ; SIDL_NAME = `SIDL_NAMES@HSET2_BCST ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank))+(1<<INDEX(immConstOffset)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HSET2fp16g0_pipe = 125; HSET2fp16g1_pipe = 125; HSET2 = 125; ENCODING !hset2_bop__v0_unused; hset2_bop__v0_Pg = Pg; hset2_bop__v0_PgNot = Pg@not; hset2_bop__v0_opcode=Opcode; hset2_bop__v0_bval=bval; hset2_bop__v0_cmp=cmp; hset2_bop__v0_ftz=ftz; hset2_bop__v0_bop=*0; hset2_bop__v0_Rd=Rd; hset2_bop__v0_Ra=Ra; hset2_bop__v0_Ra_absolute=Ra@absolute; hset2_bop__v0_Ra_negate=Ra@negate; hset2_bop__v0_Ra_iswz_Ra_mod=iswz_Ra_mod; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); hset2_bop__v0_Sb_negate=Sb@negate; hset2_bop__v0_Ps =* 7; hset2_bop__v0_PsNot =* 0; hset2_bop__v0_req_sb_bitset=req_sb_bitset; hset2_bop__v0_src_rel_sb=VarLatOperandEnc(src_rel_sb); hset2_bop__v0_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hset2_bop__v0_usched_info=usched_info; CLASS "hmul2_32i_" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hmul2_32i__fmz("nofmz"):fmz /hmul2_32i__sat("nosat"):sat hmul2_32i__Rd:Rd ',' $( hmul2_32i__Ra:Ra /hmul2_32i__Ra_iswz_Ra_32i_mod("H1_H0"):iswz_Ra_32i_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):imm ','F16Imm(64):imm2 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(imm))+(1<<INDEX(imm)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HMUL2_32Ifp16g0_pipe = 21; HMUL2_32Ifp16g1_pipe = 21; HMUL2_32I = 21; ENCODING !hmul2_32i__unused; hmul2_32i__Pg = Pg; hmul2_32i__PgNot = Pg@not; hmul2_32i__opcode=Opcode; hmul2_32i__fmz=fmz; hmul2_32i__sat=sat; hmul2_32i__Rd=Rd; hmul2_32i__Ra=Ra; hmul2_32i__Ra_iswz_Ra_32i_mod=iswz_Ra_32i_mod; hmul2_32i__imm=imm; hmul2_32i__imm2=imm2; hmul2_32i__req_sb_bitset=req_sb_bitset; hmul2_32i__src_rel_sb=VarLatOperandEnc(src_rel_sb); hmul2_32i__dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hmul2_32i__usched_info=usched_info; ALTERNATE CLASS "hset2_bop__v2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hset2_bop__v2_bval("BM"):bval /hset2_bop__v2_cmp:cmp /hset2_bop__v2_ftz("noftz"):ftz hset2_bop__v2_Rd:Rd ',' $( [-][||] hset2_bop__v2_Ra:Ra /hset2_bop__v2_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] hset2_bop__v2_Rb:Rb /hset2_bop__v2_Sb_iswz_Rb_mod("H1_H0"):iswz_Rb_mod {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; MIN_WAIT_NEEDED = 0 ; VALID_IN_SHADERS = ISHADER_ALL ; SIDL_NAME = `SIDL_NAMES@HSET2_REG ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HSET2fp16g0_pipe = 2979; HSET2fp16g1_pipe = 2979; HSET2 = 2979; ENCODING !hset2_bop__v2_unused; hset2_bop__v2_Pg = Pg; hset2_bop__v2_PgNot = Pg@not; hset2_bop__v2_opcode=Opcode; hset2_bop__v2_bval=bval; hset2_bop__v2_cmp=cmp; hset2_bop__v2_ftz=ftz; hset2_bop__v2_bop=*0; hset2_bop__v2_Rd=Rd; hset2_bop__v2_Ra=Ra; hset2_bop__v2_Ra_absolute=Ra@absolute; hset2_bop__v2_Ra_negate=Ra@negate; hset2_bop__v2_Ra_iswz_Ra_mod=iswz_Ra_mod; hset2_bop__v2_Sb=Rb; hset2_bop__v2_Sb_absolute=Rb@absolute; hset2_bop__v2_Sb_negate=Rb@negate; hset2_bop__v2_Sb_iswz_Rb_mod=iswz_Rb_mod; hset2_bop__v2_Ps =* 7; hset2_bop__v2_PsNot =* 0; hset2_bop__v2_req_sb_bitset=req_sb_bitset; hset2_bop__v2_src_rel_sb=VarLatOperandEnc(src_rel_sb); hset2_bop__v2_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; hset2_bop__v2_usched_info=usched_info; CLASS "hadd2__v0" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hadd2__v0_ofmt("F16_V2"):ofmt /hadd2__v0_ftz("noftz"):ftz /hadd2__v0_sat("nosat"):sat hadd2__v0_Rd:Rd ',' $( [-][||] hadd2__v0_Ra:Ra /hadd2__v0_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||] C:Sb[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hadd2__v2_ofmt@MRG_H1) && (ofmt != `hadd2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HADD2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+(1<<IERROR_INVALID_CONST_ADDR)+(1<<IERROR_MISALIGNED_ADDR)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HADD2_BCST ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank))+(1<<INDEX(immConstOffset)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HADD2fp16g0_pipe = 123; HADD2fp16g1_pipe = 123; HADD2 = 123; ENCODING !hadd2__v0_unused; hadd2__v0_Pg = Pg; hadd2__v0_PgNot = Pg@not; hadd2__v0_opcode=Opcode; hadd2__v0_ofmt=ofmt; hadd2__v0_ftz=ftz; hadd2__v0_sat=sat; hadd2__v0_Rd=Rd; hadd2__v0_Ra=Ra; hadd2__v0_Ra_absolute=Ra@absolute; hadd2__v0_Ra_negate=Ra@negate; hadd2__v0_Ra_iswz_Ra_mod=iswz_Ra_mod; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); hadd2__v0_Sb_absolute=Sb@absolute; hadd2__v0_Sb_negate=Sb@negate; hadd2__v0_req_sb_bitset=req_sb_bitset; hadd2__v0_src_rel_sb=VarLatOperandEnc(src_rel_sb); hadd2__v0_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hadd2__v0_usched_info=usched_info; CLASS "hadd2__v1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hadd2__v1_ofmt("F16_V2"):ofmt /hadd2__v1_ftz("noftz"):ftz /hadd2__v1_sat("nosat"):sat hadd2__v1_Rd:Rd ',' $( [-][||] hadd2__v1_Ra:Ra /hadd2__v1_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):Sb ','F16Imm(64):Sb2 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hadd2__v2_ofmt@MRG_H1) && (ofmt != `hadd2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HADD2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HADD2_IMM ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Sb))+(1<<INDEX(Sb)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HADD2fp16g0_pipe = 122; HADD2fp16g1_pipe = 122; HADD2 = 122; ENCODING !hadd2__v1_unused; hadd2__v1_Pg = Pg; hadd2__v1_PgNot = Pg@not; hadd2__v1_opcode=Opcode; hadd2__v1_ofmt=ofmt; hadd2__v1_ftz=ftz; hadd2__v1_sat=sat; hadd2__v1_Rd=Rd; hadd2__v1_Ra=Ra; hadd2__v1_Ra_absolute=Ra@absolute; hadd2__v1_Ra_negate=Ra@negate; hadd2__v1_Ra_iswz_Ra_mod=iswz_Ra_mod; hadd2__v1_Sb=Sb; hadd2__v1_Sb2=Sb2; hadd2__v1_req_sb_bitset=req_sb_bitset; hadd2__v1_src_rel_sb=VarLatOperandEnc(src_rel_sb); hadd2__v1_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hadd2__v1_usched_info=usched_info; CLASS "hadd2__v2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hadd2__v2_ofmt("F16_V2"):ofmt /hadd2__v2_ftz("noftz"):ftz /hadd2__v2_sat("nosat"):sat hadd2__v2_Rd:Rd ',' $( [-][||] hadd2__v2_Ra:Ra /hadd2__v2_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] hadd2__v2_Rb:Rb /hadd2__v2_Sb_iswz_Rb_mod("H1_H0"):iswz_Rb_mod {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hadd2__v2_ofmt@MRG_H1) && (ofmt != `hadd2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HADD2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HADD2_REG ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HADD2fp16g0_pipe = 2978; HADD2fp16g1_pipe = 2978; HADD2 = 2978; ENCODING !hadd2__v2_unused; hadd2__v2_Pg = Pg; hadd2__v2_PgNot = Pg@not; hadd2__v2_opcode=Opcode; hadd2__v2_ofmt=ofmt; hadd2__v2_ftz=ftz; hadd2__v2_sat=sat; hadd2__v2_Rd=Rd; hadd2__v2_Ra=Ra; hadd2__v2_Ra_absolute=Ra@absolute; hadd2__v2_Ra_negate=Ra@negate; hadd2__v2_Ra_iswz_Ra_mod=iswz_Ra_mod; hadd2__v2_Sb=Rb; hadd2__v2_Sb_absolute=Rb@absolute; hadd2__v2_Sb_negate=Rb@negate; hadd2__v2_Sb_iswz_Rb_mod=iswz_Rb_mod; hadd2__v2_req_sb_bitset=req_sb_bitset; hadd2__v2_src_rel_sb=VarLatOperandEnc(src_rel_sb); hadd2__v2_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_b; hadd2__v2_usched_info=usched_info; CLASS "hmul2__v2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hmul2__v2_ofmt("F16_V2"):ofmt /hmul2__v2_fmz("nofmz"):fmz /hmul2__v2_sat("nosat"):sat hmul2__v2_Rd:Rd ',' $( [-][||] hmul2__v2_Ra:Ra /hmul2__v2_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] hmul2__v2_Rb:Rb /hmul2__v2_Sb_iswz_Rb_mod("H1_H0"):iswz_Rb_mod {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hmul2__v2_ofmt@MRG_H1) && (ofmt != `hmul2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HMUL2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HMUL2_REG ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HMUL2fp16g0_pipe = 2977; HMUL2fp16g1_pipe = 2977; HMUL2 = 2977; ENCODING !hmul2__v2_unused; hmul2__v2_Pg = Pg; hmul2__v2_PgNot = Pg@not; hmul2__v2_opcode=Opcode; hmul2__v2_ofmt=ofmt; hmul2__v2_fmz=fmz; hmul2__v2_sat=sat; hmul2__v2_Rd=Rd; hmul2__v2_Ra=Ra; hmul2__v2_Ra_absolute=Ra@absolute; hmul2__v2_Ra_iswz_Ra_mod=iswz_Ra_mod; hmul2__v2_Sb=Rb; hmul2__v2_Sb_absolute=Rb@absolute; hmul2__v2_Sb_iswz_Rb_mod=iswz_Rb_mod; hmul2__v2_req_sb_bitset=req_sb_bitset; hmul2__v2_src_rel_sb=VarLatOperandEnc(src_rel_sb); hmul2__v2_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; hmul2__v2_usched_info=usched_info; hmul2__v2_nAB=hmul2__v2_nAB(Ra@negate,Rb@negate); CLASS "hadd2_32i_" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hadd2_32i__ftz("noftz"):ftz /hadd2_32i__sat("nosat"):sat hadd2_32i__Rd:Rd ',' $( [-] hadd2_32i__Ra:Ra /hadd2_32i__Ra_iswz_Ra_32i_mod("H1_H0"):iswz_Ra_32i_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):imm ','F16Imm(64):imm2 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(imm))+(1<<INDEX(imm)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HADD2_32Ifp16g0_pipe = 22; HADD2_32Ifp16g1_pipe = 22; HADD2_32I = 22; ENCODING !hadd2_32i__unused; hadd2_32i__Pg = Pg; hadd2_32i__PgNot = Pg@not; hadd2_32i__opcode=Opcode; hadd2_32i__ftz=ftz; hadd2_32i__sat=sat; hadd2_32i__Rd=Rd; hadd2_32i__Ra=Ra; hadd2_32i__Ra_negate=Ra@negate; hadd2_32i__Ra_iswz_Ra_32i_mod=iswz_Ra_32i_mod; hadd2_32i__imm=imm; hadd2_32i__imm2=imm2; hadd2_32i__req_sb_bitset=req_sb_bitset; hadd2_32i__src_rel_sb=VarLatOperandEnc(src_rel_sb); hadd2_32i__dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hadd2_32i__usched_info=usched_info; CLASS "hmul2__v1" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hmul2__v1_ofmt("F16_V2"):ofmt /hmul2__v1_fmz("nofmz"):fmz /hmul2__v1_sat("nosat"):sat hmul2__v1_Rd:Rd ',' $( [-][||] hmul2__v1_Ra:Ra /hmul2__v1_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ','F16Imm(64):Sb ','F16Imm(64):Sb2 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hmul2__v2_ofmt@MRG_H1) && (ofmt != `hmul2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HMUL2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HMUL2_IMM ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(Sb))+(1<<INDEX(Sb)+1); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HMUL2fp16g0_pipe = 120; HMUL2fp16g1_pipe = 120; HMUL2 = 120; ENCODING !hmul2__v1_unused; hmul2__v1_Pg = Pg; hmul2__v1_PgNot = Pg@not; hmul2__v1_opcode=Opcode; hmul2__v1_ofmt=ofmt; hmul2__v1_fmz=fmz; hmul2__v1_sat=sat; hmul2__v1_Rd=Rd; hmul2__v1_Ra=Ra; hmul2__v1_Ra_absolute=Ra@absolute; hmul2__v1_Ra_negate=Ra@negate; hmul2__v1_Ra_iswz_Ra_mod=iswz_Ra_mod; hmul2__v1_Sb=Sb; hmul2__v1_Sb2=Sb2; hmul2__v1_req_sb_bitset=req_sb_bitset; hmul2__v1_src_rel_sb=VarLatOperandEnc(src_rel_sb); hmul2__v1_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hmul2__v1_usched_info=usched_info; CLASS "hmul2__v0" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /hmul2__v0_ofmt("F16_V2"):ofmt /hmul2__v0_fmz("nofmz"):fmz /hmul2__v0_sat("nosat"):sat hmul2__v0_Rd:Rd ',' $( [-][||] hmul2__v0_Ra:Ra /hmul2__v0_Ra_iswz_Ra_mod("H1_H0"):iswz_Ra_mod {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||] C:Sb[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `hmul2__v2_ofmt@MRG_H1) && (ofmt != `hmul2__v2_ofmt@MRG_H0))) : "Illegal instruction encoding : HMUL2 does not support .MRG_H0 or .MRG_H1" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; IERRORS = (1<<IERROR_PC_WRAP)+(1<<IERROR_OOR_REG)+(1<<IERROR_ILLEGAL_INSTR_DECODING)+(1<<IERROR_INVALID_CONST_ADDR)+(1<<IERROR_MISALIGNED_ADDR)+0; VALID_IN_SHADERS = ISHADER_ALL ; MIN_WAIT_NEEDED = 0 ; SIDL_NAME = `SIDL_NAMES@HMUL2_BCST ; ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank))+(1<<INDEX(immConstOffset)); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST2_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); IDEST2_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); PREDICATES DOES_READ_CC=0; ISRC_C_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; IDEST2_SIZE = 0; IDEST_SIZE = 32; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16 ; OPCODES HMUL2fp16g0_pipe = 121; HMUL2fp16g1_pipe = 121; HMUL2 = 121; ENCODING !hmul2__v0_unused; hmul2__v0_Pg = Pg; hmul2__v0_PgNot = Pg@not; hmul2__v0_opcode=Opcode; hmul2__v0_ofmt=ofmt; hmul2__v0_fmz=fmz; hmul2__v0_sat=sat; hmul2__v0_Rd=Rd; hmul2__v0_Ra=Ra; hmul2__v0_Ra_absolute=Ra@absolute; hmul2__v0_Ra_iswz_Ra_mod=iswz_Ra_mod; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); hmul2__v0_Sb_absolute=Sb@absolute; hmul2__v0_req_sb_bitset=req_sb_bitset; hmul2__v0_src_rel_sb=VarLatOperandEnc(src_rel_sb); hmul2__v0_dst_wr_sb=VarLatOperandEnc(dst_wr_sb); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; hmul2__v0_usched_info=usched_info; hmul2__v0_nAB=hmul2__v0_nAB(Ra@negate,Sb@negate); CLASS "HSETP2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /H_AND(noH_AND):h_and /FTZ(noFTZ):ftz /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb/ISWZ(H1_H0):iswz_Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HSETP2fp16g0_pipe = 0b0101110100100; HSETP2fp16g1_pipe = 0b0101110100100; HSETP2 = 0b0101110100100; ENCODING Opcode13 = Opcode; H_and = h_and; vAmux = iswz_Ra; Bop = bopopt; aAH = Ra@absolute; nA2 = Ra@negate; SrcPred = Pa; SrcNot = Pa@not; FComp2 = Test; nBH = Rb@negate; aBH = Rb@absolute; vBmux = iswz_Rb; RegB = Rb; Pred = Pg; PredNot = Pg@not; RegA = Ra; FTZH = FTZ; PDest = Pd; PNDest = nPd; !NencHSETP2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_HSETP2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /H_AND(noH_AND):h_and /FTZ(noFTZ):ftz Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-][||] RegisterFAU:Rb/ISWZ(H1_H0):iswz_Rb {/REUSE(noreuse):reuse_src_b} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" PROPERTIES ITYPE = ITYPE_ABC_REG; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HSETP2fp16g0_pipe = 0b0101110100100; HSETP2fp16g1_pipe = 0b0101110100100; HSETP2 = 0b0101110100100; ENCODING Opcode13 = Opcode; H_and = h_and; vAmux = iswz_Ra; Bop = `Bop@AND; aAH = Ra@absolute; nA2 = Ra@negate; SrcPred = `Predicate@PT; SrcNot = 0; FComp2 = Test; nBH = Rb@negate; aBH = Rb@absolute; vBmux = iswz_Rb; RegB = Rb; Pred = Pg; PredNot = Pg@not; RegA = Ra; FTZH = FTZ; PDest = Pd; PNDest = nPd; !NencHSETP2; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Imm_HSETP2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /H_AND(noH_AND):h_and /FTZ(noFTZ):ftz /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F16Imm(64):uImm ',' F16Imm(64):uImmH0 ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm))+(1<<INDEX(uImm)+1); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HSETP2fp16g0_pipe = 0b0111111_0; HSETP2fp16g1_pipe = 0b0111111_0; HSETP2 = 0b0111111_0; ENCODING Opcode7b1 = Opcode; H_and2 = h_and; FComp3 = Test; vAmux = iswz_Ra; Bop = bopopt; aAH = Ra@absolute; nA2 = Ra@negate; SrcPred = Pa; SrcNot = Pa@not; BimmH1=uImm; BimmH0=uImmH0; Pred = Pg; PredNot = Pg@not; RegA = Ra; FTZH = FTZ; PDest = Pd; PNDest = nPd; !NencHSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Imm_HSETP2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /H_AND(noH_AND):h_and /FTZ(noFTZ):ftz Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F16Imm(64):uImm ',' F16Imm(64):uImmH0 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" PROPERTIES ITYPE = ITYPE_ABC_B20I; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(uImm))+(1<<INDEX(uImm)+1); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HSETP2fp16g0_pipe = 0b0111111_0; HSETP2fp16g1_pipe = 0b0111111_0; HSETP2 = 0b0111111_0; ENCODING Opcode7b1 = Opcode; H_and2 = h_and; FComp3 = Test; vAmux = iswz_Ra; Bop = `Bop@AND; aAH = Ra@absolute; nA2 = Ra@negate; SrcPred = `Predicate@PT; SrcNot = 0; BimmH1=uImm; BimmH0=uImmH0; Pred = Pg; PredNot = Pg@not; RegA = Ra; FTZH = FTZ; PDest = Pd; PNDest = nPd; !NencHSETP; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "Const_HSETP2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /H_AND(noH_AND):h_and /FTZ(noFTZ):ftz /Bop:bopopt Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] ',' [!]Predicate:Pa $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (bopopt != `Bop@INVALIDBOP03): "Invalid Bop (bopopt) field value INVALIDBOP03" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HSETP2fp16g0_pipe = 0b0111111_1; HSETP2fp16g1_pipe = 0b0111111_1; HSETP2 = 0b0111111_1; ENCODING Opcode7b1 = Opcode; nBH2 = srcConst@negate; aBH2 = srcConst@absolute; H_and2 = h_and; FComp3 = Test; vAmux = iswz_Ra; Bop = bopopt; aAH = Ra@absolute; nA2 = Ra@negate; SrcPred = Pa; SrcNot = Pa@not; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; RegA = Ra; FTZH = FTZ; PDest = Pd; PNDest = nPd; !NencHSETP3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "NoBop_Const_HSETP2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Test:fcomp /H_AND(noH_AND):h_and /FTZ(noFTZ):ftz Predicate:Pd ',' Predicate:nPd ',' $( [-][||] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' [-][||]C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" PROPERTIES ITYPE = ITYPE_ABC_BCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_NON_EXISTENT_OPERAND); IDEST_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); ISRC_C_OPERAND_MAP = (1<<IOPERAND_MAP_NON_EXISTENT_OPERAND); PREDICATES IDEST_SIZE = 0; ISRC_A_SIZE = 32; ISRC_B_SIZE = 20; ISRC_C_SIZE = 0; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HSETP2fp16g0_pipe = 0b0111111_1; HSETP2fp16g1_pipe = 0b0111111_1; HSETP2 = 0b0111111_1; ENCODING Opcode7b1 = Opcode; nBH2 = srcConst@negate; aBH2 = srcConst@absolute; H_and2 = h_and; FComp3 = Test; vAmux = iswz_Ra; Bop = `Bop@AND; aAH = Ra@absolute; nA2 = Ra@negate; SrcPred = `Predicate@PT; SrcNot = 0; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); Pred = Pg; PredNot = Pg@not; RegA = Ra; FTZH = FTZ; PDest = Pd; PNDest = nPd; !NencHSETP3; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "HFMA2_32I" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F16Imm(64):fImm ',' F16Imm(64):fImm1 ',' $( [-] RegisterFAU:Rc {/REUSE(noreuse):reuse_src_c} )$ $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS ILLEGAL_INSTR_ENCODING_SASS_ONLY_ERROR Rd == Rc : "Output register must be the same as last input register" OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rc)==`Register@RZ)||((Rc)<=(%MAX_REG_COUNT-1))) : "Register Rc is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(fImm))+(1<<INDEX(fImm)+1); ISRC_C_OPERAND_MAP = (1<<INDEX(Rc)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HFMA2_32Ifp16g0_pipe = 0b0010100; HFMA2_32Ifp16g1_pipe = 0b0010100; HFMA2_32I = 0b0010100; ENCODING Opcode7 = Opcode; FMZ_H = FMZ; nC_H = Rc@negate; vAmux_H = iswz_Ra; FimmH1 = fImm; FimmH0 = fImm1; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = IDENTICAL(Rd,Rc); OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; OEReuseC = reuse_src_c; OECoupled = 0; !OEReserved1; ALTERNATE CLASS "HFMA2_32I_2" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /FMZ(noFTZ):fmz $( RegisterFAU:Rd )$ ',' $( RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' F16Imm(64):fImm ',' F16Imm(64):fImm1 $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" PROPERTIES VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(fImm))+(1<<INDEX(fImm)+1); ISRC_C_OPERAND_MAP = (1<<INDEX(Rd)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HFMA2_32Ifp16g0_pipe = 0b0010100; HFMA2_32Ifp16g1_pipe = 0b0010100; HFMA2_32I = 0b0010100; ENCODING Opcode7 = Opcode; FMZ_H = FMZ; nC_H = 0; vAmux_H = iswz_Ra; FimmH1 = fImm; FimmH0 = fImm1; PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; !OEReuseB; !OEReuseC; OECoupled = 0; !OEReserved1; CLASS "HFMA2_CCST" FORMAT PREDICATE @[!]Predicate(PT):Pg Opcode /Ofmt_FP16(F16_V2):ofmt /FMZ(noFTZ):fmz /SAT(noSAT):sat $( RegisterFAU:Rd )$ ',' $( [-] RegisterFAU:Ra/ISWZ(H1_H0):iswz_Ra {/REUSE(noreuse):reuse_src_a} )$ ',' $( [-] RegisterFAU:Rb/ISWZ(H1_H0):iswz_Rb {/REUSE(noreuse):reuse_src_b} )$ ',' [-] C:srcConst[UImm(5/0*):constBank]* [SImm(17)*:immConstOffset] $( { '&' REQ:req '=' BITSET(6/0x0000):req_sb_bitset } )$ $( { '&' RD:rd '=' UImm(3/0x7):src_rel_sb } )$ $( { '&' WR:wr '=' UImm(3/0x7):dst_wr_sb } )$ $( { '?' USCHED_INFO:usched_info } )$ ; CONDITIONS OOR_REG_ERROR (((Rd)==`Register@RZ)||((Rd)<=(%MAX_REG_COUNT-1))) : "Register Rd is out of range" OOR_REG_ERROR (((Ra)==`Register@RZ)||((Ra)<=(%MAX_REG_COUNT-1))) : "Register Ra is out of range" OOR_REG_ERROR (((Rb)==`Register@RZ)||((Rb)<=(%MAX_REG_COUNT-1))) : "Register Rb is out of range" INVALID_CONST_ADDR_SASS_ONLY_ERROR (constBank <= %MAX_CONST_BANK) : "Invalid constant bank error" MISALIGNED_ADDR_ERROR (immConstOffset & 0x3) == 0 : "Constant offsets must be aligned on a 4B boundary" ILLEGAL_INSTR_ENCODING_ERROR (fmz != `FMZ@INVALIDFMZ3): "Invalid FMZ (fmz) field value INVALIDFMZ3" ILLEGAL_INSTR_ENCODING_ERROR ((%ALLOW_F16_PARTIAL_WRITES == 0) -> ((ofmt != `Ofmt_FP16@MRG_H1) && (ofmt != `Ofmt_FP16@MRG_H0))) : "Illegal instruction encoding : HFMA2 does not support .MRG_H0 or .MRG_H1" PROPERTIES ITYPE = ITYPE_ABC_CCST; VALID_IN_SHADERS = ISHADER_ALL; INSTRUCTION_TYPE = INST_TYPE_COUPLED_EMULATABLE; MIN_WAIT_NEEDED = 0; IERRORS = (1<<IERROR_PC_WRAP) + (1<<IERROR_ILLEGAL_INSTR_DECODING) + (1<<IERROR_OOR_REG) + (1<<IERROR_INVALID_CONST_ADDR) + (1<<IERROR_MISALIGNED_ADDR) ; IDEST_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_A_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_B_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); ISRC_C_OPERAND_TYPE = (1<<IOPERAND_TYPE_FP16SIMD); IDEST_OPERAND_MAP = (1<<INDEX(Rd)); ISRC_A_OPERAND_MAP = (1<<INDEX(Ra)); ISRC_B_OPERAND_MAP = (1<<INDEX(Rb)); ISRC_C_OPERAND_MAP = (1<<INDEX(constBank)) + (1<<INDEX(immConstOffset)); PREDICATES IDEST_SIZE = 32; ISRC_A_SIZE = 32; ISRC_B_SIZE = 32; ISRC_C_SIZE = 32; DOES_READ_CC = 0; VIRTUAL_QUEUE = $VQ_REDIRECTABLE_FP16; OPCODES HFMA2fp16g0_pipe = 0b011001; HFMA2fp16g1_pipe = 0b011001; HFMA2 = 0b011001; ENCODING Opcode5b1 = Opcode; FMZ_H2 = FMZ; nAB_H = PSignFFMA(Ra@negate,Rb@negate); vBmux_H = iswz_Rb; sat_H = sat; nC_H2 = srcConst@negate; Ofmt = ofmt; vAmux_H2 = iswz_Ra; RegC = Rb; Bcbank,Bcaddr = ConstBankAddress2(constBank,immConstOffset); PredNot = Pg@not; Pred = Pg; RegA = Ra; Dest = Rd; OEUSchedInfo = usched_info; OEWaitOnSb = req_sb_bitset; OEVarLatDest = VarLatOperandEnc( dst_wr_sb ); OEVarLatSrc = VarLatOperandEnc( src_rel_sb ); OEReuseA = reuse_src_a; OEReuseB = reuse_src_b; !OEReuseC; OECoupled = 0; !OEReserved1;