aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600/r600_shader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/r600/r600_shader.c')
-rw-r--r--src/gallium/drivers/r600/r600_shader.c1180
1 files changed, 589 insertions, 591 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 4e67447ad65..acac89fcca9 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -311,8 +311,6 @@ struct r600_shader_ctx {
};
struct r600_shader_tgsi_instruction {
- unsigned tgsi_opcode;
- unsigned is_op3;
unsigned op;
int (*process)(struct r600_shader_ctx *ctx);
};
@@ -7273,604 +7271,604 @@ static int tgsi_umad(struct r600_shader_ctx *ctx)
}
static struct r600_shader_tgsi_instruction r600_shader_tgsi_instruction[] = {
- {TGSI_OPCODE_ARL, 0, ALU_OP0_NOP, tgsi_r600_arl},
- {TGSI_OPCODE_MOV, 0, ALU_OP1_MOV, tgsi_op2},
- {TGSI_OPCODE_LIT, 0, ALU_OP0_NOP, tgsi_lit},
+ [TGSI_OPCODE_ARL] = { ALU_OP0_NOP, tgsi_r600_arl},
+ [TGSI_OPCODE_MOV] = { ALU_OP1_MOV, tgsi_op2},
+ [TGSI_OPCODE_LIT] = { ALU_OP0_NOP, tgsi_lit},
/* XXX:
* For state trackers other than OpenGL, we'll want to use
* _RECIP_IEEE instead.
*/
- {TGSI_OPCODE_RCP, 0, ALU_OP1_RECIP_CLAMPED, tgsi_trans_srcx_replicate},
-
- {TGSI_OPCODE_RSQ, 0, ALU_OP0_NOP, tgsi_rsq},
- {TGSI_OPCODE_EXP, 0, ALU_OP0_NOP, tgsi_exp},
- {TGSI_OPCODE_LOG, 0, ALU_OP0_NOP, tgsi_log},
- {TGSI_OPCODE_MUL, 0, ALU_OP2_MUL, tgsi_op2},
- {TGSI_OPCODE_ADD, 0, ALU_OP2_ADD, tgsi_op2},
- {TGSI_OPCODE_DP3, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_DP4, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_DST, 0, ALU_OP0_NOP, tgsi_opdst},
- {TGSI_OPCODE_MIN, 0, ALU_OP2_MIN, tgsi_op2},
- {TGSI_OPCODE_MAX, 0, ALU_OP2_MAX, tgsi_op2},
- {TGSI_OPCODE_SLT, 0, ALU_OP2_SETGT, tgsi_op2_swap},
- {TGSI_OPCODE_SGE, 0, ALU_OP2_SETGE, tgsi_op2},
- {TGSI_OPCODE_MAD, 1, ALU_OP3_MULADD, tgsi_op3},
- {TGSI_OPCODE_SUB, 0, ALU_OP2_ADD, tgsi_op2},
- {TGSI_OPCODE_LRP, 0, ALU_OP0_NOP, tgsi_lrp},
- {TGSI_OPCODE_FMA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SQRT, 0, ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_DP2A, 0, ALU_OP0_NOP, tgsi_unsupported},
- {22, 0, ALU_OP0_NOP, tgsi_unsupported},
- {23, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FRC, 0, ALU_OP1_FRACT, tgsi_op2},
- {TGSI_OPCODE_CLAMP, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FLR, 0, ALU_OP1_FLOOR, tgsi_op2},
- {TGSI_OPCODE_ROUND, 0, ALU_OP1_RNDNE, tgsi_op2},
- {TGSI_OPCODE_EX2, 0, ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_LG2, 0, ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_POW, 0, ALU_OP0_NOP, tgsi_pow},
- {TGSI_OPCODE_XPD, 0, ALU_OP0_NOP, tgsi_xpd},
- {32, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ABS, 0, ALU_OP1_MOV, tgsi_op2},
- {34, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DPH, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_COS, 0, ALU_OP1_COS, tgsi_trig},
- {TGSI_OPCODE_DDX, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
- {TGSI_OPCODE_DDY, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
- {TGSI_OPCODE_KILL, 0, ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */
- {TGSI_OPCODE_PK2H, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK2US, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK4B, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK4UB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {44, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SEQ, 0, ALU_OP2_SETE, tgsi_op2},
- {46, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SGT, 0, ALU_OP2_SETGT, tgsi_op2},
- {TGSI_OPCODE_SIN, 0, ALU_OP1_SIN, tgsi_trig},
- {TGSI_OPCODE_SLE, 0, ALU_OP2_SETGE, tgsi_op2_swap},
- {TGSI_OPCODE_SNE, 0, ALU_OP2_SETNE, tgsi_op2},
- {51, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TEX, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_TXD, 0, FETCH_OP_SAMPLE_G, tgsi_tex},
- {TGSI_OPCODE_TXP, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_UP2H, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP2US, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP4B, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP4UB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {59, 0, ALU_OP0_NOP, tgsi_unsupported},
- {60, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ARR, 0, ALU_OP0_NOP, tgsi_r600_arl},
- {62, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CAL, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_RET, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SSG, 0, ALU_OP0_NOP, tgsi_ssg},
- {TGSI_OPCODE_CMP, 0, ALU_OP0_NOP, tgsi_cmp},
- {TGSI_OPCODE_SCS, 0, ALU_OP0_NOP, tgsi_scs},
- {TGSI_OPCODE_TXB, 0, FETCH_OP_SAMPLE_LB, tgsi_tex},
- {69, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DIV, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DP2, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex},
- {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont},
- {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if},
- {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif},
- {76, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else},
- {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif},
- {TGSI_OPCODE_DDX_FINE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DDY_FINE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PUSHA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_POPA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CEIL, 0, ALU_OP1_CEIL, tgsi_op2},
- {TGSI_OPCODE_I2F, 0, ALU_OP1_INT_TO_FLT, tgsi_op2_trans},
- {TGSI_OPCODE_NOT, 0, ALU_OP1_NOT_INT, tgsi_op2},
- {TGSI_OPCODE_TRUNC, 0, ALU_OP1_TRUNC, tgsi_op2},
- {TGSI_OPCODE_SHL, 0, ALU_OP2_LSHL_INT, tgsi_op2_trans},
- {88, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_AND, 0, ALU_OP2_AND_INT, tgsi_op2},
- {TGSI_OPCODE_OR, 0, ALU_OP2_OR_INT, tgsi_op2},
- {TGSI_OPCODE_MOD, 0, ALU_OP0_NOP, tgsi_imod},
- {TGSI_OPCODE_XOR, 0, ALU_OP2_XOR_INT, tgsi_op2},
- {TGSI_OPCODE_SAD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TXF, 0, FETCH_OP_LD, tgsi_tex},
- {TGSI_OPCODE_TXQ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
- {TGSI_OPCODE_CONT, 0, CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont},
- {TGSI_OPCODE_EMIT, 0, CF_OP_EMIT_VERTEX, tgsi_gs_emit},
- {TGSI_OPCODE_ENDPRIM, 0, CF_OP_CUT_VERTEX, tgsi_gs_emit},
- {TGSI_OPCODE_BGNLOOP, 0, ALU_OP0_NOP, tgsi_bgnloop},
- {TGSI_OPCODE_BGNSUB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ENDLOOP, 0, ALU_OP0_NOP, tgsi_endloop},
- {TGSI_OPCODE_ENDSUB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TXQ_LZ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
- {104, 0, ALU_OP0_NOP, tgsi_unsupported},
- {105, 0, ALU_OP0_NOP, tgsi_unsupported},
- {106, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_NOP, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FSEQ, 0, ALU_OP2_SETE_DX10, tgsi_op2},
- {TGSI_OPCODE_FSGE, 0, ALU_OP2_SETGE_DX10, tgsi_op2},
- {TGSI_OPCODE_FSLT, 0, ALU_OP2_SETGT_DX10, tgsi_op2_swap},
- {TGSI_OPCODE_FSNE, 0, ALU_OP2_SETNE_DX10, tgsi_op2_swap},
- {112, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CALLNZ, 0, ALU_OP0_NOP, tgsi_unsupported},
- {114, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BREAKC, 0, ALU_OP0_NOP, tgsi_loop_breakc},
- {TGSI_OPCODE_KILL_IF, 0, ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */
- {TGSI_OPCODE_END, 0, ALU_OP0_NOP, tgsi_end}, /* aka HALT */
- {118, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_F2I, 0, ALU_OP1_FLT_TO_INT, tgsi_op2_trans},
- {TGSI_OPCODE_IDIV, 0, ALU_OP0_NOP, tgsi_idiv},
- {TGSI_OPCODE_IMAX, 0, ALU_OP2_MAX_INT, tgsi_op2},
- {TGSI_OPCODE_IMIN, 0, ALU_OP2_MIN_INT, tgsi_op2},
- {TGSI_OPCODE_INEG, 0, ALU_OP2_SUB_INT, tgsi_ineg},
- {TGSI_OPCODE_ISGE, 0, ALU_OP2_SETGE_INT, tgsi_op2},
- {TGSI_OPCODE_ISHR, 0, ALU_OP2_ASHR_INT, tgsi_op2_trans},
- {TGSI_OPCODE_ISLT, 0, ALU_OP2_SETGT_INT, tgsi_op2_swap},
- {TGSI_OPCODE_F2U, 0, ALU_OP1_FLT_TO_UINT, tgsi_op2_trans},
- {TGSI_OPCODE_U2F, 0, ALU_OP1_UINT_TO_FLT, tgsi_op2_trans},
- {TGSI_OPCODE_UADD, 0, ALU_OP2_ADD_INT, tgsi_op2},
- {TGSI_OPCODE_UDIV, 0, ALU_OP0_NOP, tgsi_udiv},
- {TGSI_OPCODE_UMAD, 0, ALU_OP0_NOP, tgsi_umad},
- {TGSI_OPCODE_UMAX, 0, ALU_OP2_MAX_UINT, tgsi_op2},
- {TGSI_OPCODE_UMIN, 0, ALU_OP2_MIN_UINT, tgsi_op2},
- {TGSI_OPCODE_UMOD, 0, ALU_OP0_NOP, tgsi_umod},
- {TGSI_OPCODE_UMUL, 0, ALU_OP2_MULLO_UINT, tgsi_op2_trans},
- {TGSI_OPCODE_USEQ, 0, ALU_OP2_SETE_INT, tgsi_op2},
- {TGSI_OPCODE_USGE, 0, ALU_OP2_SETGE_UINT, tgsi_op2},
- {TGSI_OPCODE_USHR, 0, ALU_OP2_LSHR_INT, tgsi_op2_trans},
- {TGSI_OPCODE_USLT, 0, ALU_OP2_SETGT_UINT, tgsi_op2_swap},
- {TGSI_OPCODE_USNE, 0, ALU_OP2_SETNE_INT, tgsi_op2_swap},
- {TGSI_OPCODE_SWITCH, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CASE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DEFAULT, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ENDSWITCH, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_I, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_I_MS, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_B, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_C, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_C_LZ, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_D, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_L, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_GATHER4, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SVIEWINFO, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_POS, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_INFO, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_UARL, 0, ALU_OP1_MOVA_INT, tgsi_r600_arl},
- {TGSI_OPCODE_UCMP, 0, ALU_OP0_NOP, tgsi_ucmp},
- {TGSI_OPCODE_IABS, 0, 0, tgsi_iabs},
- {TGSI_OPCODE_ISSG, 0, 0, tgsi_issg},
- {TGSI_OPCODE_LOAD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_STORE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_MFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_LFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BARRIER, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUADD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMXCHG, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMCAS, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMAND, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMOR, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMXOR, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUMIN, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUMAX, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMIMIN, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMIMAX, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TEX2, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_TXB2, 0, FETCH_OP_SAMPLE_LB, tgsi_tex},
- {TGSI_OPCODE_TXL2, 0, FETCH_OP_SAMPLE_L, tgsi_tex},
- {TGSI_OPCODE_IMUL_HI, 0, ALU_OP2_MULHI_INT, tgsi_op2_trans},
- {TGSI_OPCODE_UMUL_HI, 0, ALU_OP2_MULHI_UINT, tgsi_op2_trans},
- {TGSI_OPCODE_TG4, 0, FETCH_OP_GATHER4, tgsi_unsupported},
- {TGSI_OPCODE_LODQ, 0, FETCH_OP_GET_LOD, tgsi_unsupported},
- {TGSI_OPCODE_IBFE, 1, ALU_OP3_BFE_INT, tgsi_unsupported},
- {TGSI_OPCODE_UBFE, 1, ALU_OP3_BFE_UINT, tgsi_unsupported},
- {TGSI_OPCODE_BFI, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BREV, 0, ALU_OP1_BFREV_INT, tgsi_unsupported},
- {TGSI_OPCODE_POPC, 0, ALU_OP1_BCNT_INT, tgsi_unsupported},
- {TGSI_OPCODE_LSB, 0, ALU_OP1_FFBL_INT, tgsi_unsupported},
- {TGSI_OPCODE_IMSB, 0, ALU_OP1_FFBH_INT, tgsi_unsupported},
- {TGSI_OPCODE_UMSB, 0, ALU_OP1_FFBH_UINT, tgsi_unsupported},
- {TGSI_OPCODE_INTERP_CENTROID, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_INTERP_SAMPLE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_INTERP_OFFSET, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_LAST, 0, ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_RCP] = { ALU_OP1_RECIP_CLAMPED, tgsi_trans_srcx_replicate},
+
+ [TGSI_OPCODE_RSQ] = { ALU_OP0_NOP, tgsi_rsq},
+ [TGSI_OPCODE_EXP] = { ALU_OP0_NOP, tgsi_exp},
+ [TGSI_OPCODE_LOG] = { ALU_OP0_NOP, tgsi_log},
+ [TGSI_OPCODE_MUL] = { ALU_OP2_MUL, tgsi_op2},
+ [TGSI_OPCODE_ADD] = { ALU_OP2_ADD, tgsi_op2},
+ [TGSI_OPCODE_DP3] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_DP4] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_DST] = { ALU_OP0_NOP, tgsi_opdst},
+ [TGSI_OPCODE_MIN] = { ALU_OP2_MIN, tgsi_op2},
+ [TGSI_OPCODE_MAX] = { ALU_OP2_MAX, tgsi_op2},
+ [TGSI_OPCODE_SLT] = { ALU_OP2_SETGT, tgsi_op2_swap},
+ [TGSI_OPCODE_SGE] = { ALU_OP2_SETGE, tgsi_op2},
+ [TGSI_OPCODE_MAD] = { ALU_OP3_MULADD, tgsi_op3},
+ [TGSI_OPCODE_SUB] = { ALU_OP2_ADD, tgsi_op2},
+ [TGSI_OPCODE_LRP] = { ALU_OP0_NOP, tgsi_lrp},
+ [TGSI_OPCODE_FMA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SQRT] = { ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_DP2A] = { ALU_OP0_NOP, tgsi_unsupported},
+ [22] = { ALU_OP0_NOP, tgsi_unsupported},
+ [23] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FRC] = { ALU_OP1_FRACT, tgsi_op2},
+ [TGSI_OPCODE_CLAMP] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FLR] = { ALU_OP1_FLOOR, tgsi_op2},
+ [TGSI_OPCODE_ROUND] = { ALU_OP1_RNDNE, tgsi_op2},
+ [TGSI_OPCODE_EX2] = { ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_LG2] = { ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_POW] = { ALU_OP0_NOP, tgsi_pow},
+ [TGSI_OPCODE_XPD] = { ALU_OP0_NOP, tgsi_xpd},
+ [32] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ABS] = { ALU_OP1_MOV, tgsi_op2},
+ [34] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DPH] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_COS] = { ALU_OP1_COS, tgsi_trig},
+ [TGSI_OPCODE_DDX] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
+ [TGSI_OPCODE_DDY] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
+ [TGSI_OPCODE_KILL] = { ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */
+ [TGSI_OPCODE_PK2H] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK2US] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK4B] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK4UB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [44] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SEQ] = { ALU_OP2_SETE, tgsi_op2},
+ [46] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SGT] = { ALU_OP2_SETGT, tgsi_op2},
+ [TGSI_OPCODE_SIN] = { ALU_OP1_SIN, tgsi_trig},
+ [TGSI_OPCODE_SLE] = { ALU_OP2_SETGE, tgsi_op2_swap},
+ [TGSI_OPCODE_SNE] = { ALU_OP2_SETNE, tgsi_op2},
+ [51] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TEX] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_TXD] = { FETCH_OP_SAMPLE_G, tgsi_tex},
+ [TGSI_OPCODE_TXP] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_UP2H] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP2US] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP4B] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP4UB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [59] = { ALU_OP0_NOP, tgsi_unsupported},
+ [60] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ARR] = { ALU_OP0_NOP, tgsi_r600_arl},
+ [62] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CAL] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_RET] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SSG] = { ALU_OP0_NOP, tgsi_ssg},
+ [TGSI_OPCODE_CMP] = { ALU_OP0_NOP, tgsi_cmp},
+ [TGSI_OPCODE_SCS] = { ALU_OP0_NOP, tgsi_scs},
+ [TGSI_OPCODE_TXB] = { FETCH_OP_SAMPLE_LB, tgsi_tex},
+ [69] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DIV] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DP2] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_TXL] = { FETCH_OP_SAMPLE_L, tgsi_tex},
+ [TGSI_OPCODE_BRK] = { CF_OP_LOOP_BREAK, tgsi_loop_brk_cont},
+ [TGSI_OPCODE_IF] = { ALU_OP0_NOP, tgsi_if},
+ [TGSI_OPCODE_UIF] = { ALU_OP0_NOP, tgsi_uif},
+ [76] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ELSE] = { ALU_OP0_NOP, tgsi_else},
+ [TGSI_OPCODE_ENDIF] = { ALU_OP0_NOP, tgsi_endif},
+ [TGSI_OPCODE_DDX_FINE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DDY_FINE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PUSHA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_POPA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CEIL] = { ALU_OP1_CEIL, tgsi_op2},
+ [TGSI_OPCODE_I2F] = { ALU_OP1_INT_TO_FLT, tgsi_op2_trans},
+ [TGSI_OPCODE_NOT] = { ALU_OP1_NOT_INT, tgsi_op2},
+ [TGSI_OPCODE_TRUNC] = { ALU_OP1_TRUNC, tgsi_op2},
+ [TGSI_OPCODE_SHL] = { ALU_OP2_LSHL_INT, tgsi_op2_trans},
+ [88] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_AND] = { ALU_OP2_AND_INT, tgsi_op2},
+ [TGSI_OPCODE_OR] = { ALU_OP2_OR_INT, tgsi_op2},
+ [TGSI_OPCODE_MOD] = { ALU_OP0_NOP, tgsi_imod},
+ [TGSI_OPCODE_XOR] = { ALU_OP2_XOR_INT, tgsi_op2},
+ [TGSI_OPCODE_SAD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TXF] = { FETCH_OP_LD, tgsi_tex},
+ [TGSI_OPCODE_TXQ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
+ [TGSI_OPCODE_CONT] = { CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont},
+ [TGSI_OPCODE_EMIT] = { CF_OP_EMIT_VERTEX, tgsi_gs_emit},
+ [TGSI_OPCODE_ENDPRIM] = { CF_OP_CUT_VERTEX, tgsi_gs_emit},
+ [TGSI_OPCODE_BGNLOOP] = { ALU_OP0_NOP, tgsi_bgnloop},
+ [TGSI_OPCODE_BGNSUB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ENDLOOP] = { ALU_OP0_NOP, tgsi_endloop},
+ [TGSI_OPCODE_ENDSUB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TXQ_LZ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
+ [104] = { ALU_OP0_NOP, tgsi_unsupported},
+ [105] = { ALU_OP0_NOP, tgsi_unsupported},
+ [106] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_NOP] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FSEQ] = { ALU_OP2_SETE_DX10, tgsi_op2},
+ [TGSI_OPCODE_FSGE] = { ALU_OP2_SETGE_DX10, tgsi_op2},
+ [TGSI_OPCODE_FSLT] = { ALU_OP2_SETGT_DX10, tgsi_op2_swap},
+ [TGSI_OPCODE_FSNE] = { ALU_OP2_SETNE_DX10, tgsi_op2_swap},
+ [112] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CALLNZ] = { ALU_OP0_NOP, tgsi_unsupported},
+ [114] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BREAKC] = { ALU_OP0_NOP, tgsi_loop_breakc},
+ [TGSI_OPCODE_KILL_IF] = { ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */
+ [TGSI_OPCODE_END] = { ALU_OP0_NOP, tgsi_end}, /* aka HALT */
+ [118] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_F2I] = { ALU_OP1_FLT_TO_INT, tgsi_op2_trans},
+ [TGSI_OPCODE_IDIV] = { ALU_OP0_NOP, tgsi_idiv},
+ [TGSI_OPCODE_IMAX] = { ALU_OP2_MAX_INT, tgsi_op2},
+ [TGSI_OPCODE_IMIN] = { ALU_OP2_MIN_INT, tgsi_op2},
+ [TGSI_OPCODE_INEG] = { ALU_OP2_SUB_INT, tgsi_ineg},
+ [TGSI_OPCODE_ISGE] = { ALU_OP2_SETGE_INT, tgsi_op2},
+ [TGSI_OPCODE_ISHR] = { ALU_OP2_ASHR_INT, tgsi_op2_trans},
+ [TGSI_OPCODE_ISLT] = { ALU_OP2_SETGT_INT, tgsi_op2_swap},
+ [TGSI_OPCODE_F2U] = { ALU_OP1_FLT_TO_UINT, tgsi_op2_trans},
+ [TGSI_OPCODE_U2F] = { ALU_OP1_UINT_TO_FLT, tgsi_op2_trans},
+ [TGSI_OPCODE_UADD] = { ALU_OP2_ADD_INT, tgsi_op2},
+ [TGSI_OPCODE_UDIV] = { ALU_OP0_NOP, tgsi_udiv},
+ [TGSI_OPCODE_UMAD] = { ALU_OP0_NOP, tgsi_umad},
+ [TGSI_OPCODE_UMAX] = { ALU_OP2_MAX_UINT, tgsi_op2},
+ [TGSI_OPCODE_UMIN] = { ALU_OP2_MIN_UINT, tgsi_op2},
+ [TGSI_OPCODE_UMOD] = { ALU_OP0_NOP, tgsi_umod},
+ [TGSI_OPCODE_UMUL] = { ALU_OP2_MULLO_UINT, tgsi_op2_trans},
+ [TGSI_OPCODE_USEQ] = { ALU_OP2_SETE_INT, tgsi_op2},
+ [TGSI_OPCODE_USGE] = { ALU_OP2_SETGE_UINT, tgsi_op2},
+ [TGSI_OPCODE_USHR] = { ALU_OP2_LSHR_INT, tgsi_op2_trans},
+ [TGSI_OPCODE_USLT] = { ALU_OP2_SETGT_UINT, tgsi_op2_swap},
+ [TGSI_OPCODE_USNE] = { ALU_OP2_SETNE_INT, tgsi_op2_swap},
+ [TGSI_OPCODE_SWITCH] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CASE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DEFAULT] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ENDSWITCH] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_I] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_I_MS] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_B] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_C] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_C_LZ] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_D] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_L] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_GATHER4] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SVIEWINFO] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_POS] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_INFO] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_UARL] = { ALU_OP1_MOVA_INT, tgsi_r600_arl},
+ [TGSI_OPCODE_UCMP] = { ALU_OP0_NOP, tgsi_ucmp},
+ [TGSI_OPCODE_IABS] = { 0, tgsi_iabs},
+ [TGSI_OPCODE_ISSG] = { 0, tgsi_issg},
+ [TGSI_OPCODE_LOAD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_STORE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_MFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_LFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BARRIER] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUADD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMXCHG] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMCAS] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMAND] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMOR] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMXOR] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUMIN] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUMAX] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMIMIN] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMIMAX] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TEX2] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_TXB2] = { FETCH_OP_SAMPLE_LB, tgsi_tex},
+ [TGSI_OPCODE_TXL2] = { FETCH_OP_SAMPLE_L, tgsi_tex},
+ [TGSI_OPCODE_IMUL_HI] = { ALU_OP2_MULHI_INT, tgsi_op2_trans},
+ [TGSI_OPCODE_UMUL_HI] = { ALU_OP2_MULHI_UINT, tgsi_op2_trans},
+ [TGSI_OPCODE_TG4] = { FETCH_OP_GATHER4, tgsi_unsupported},
+ [TGSI_OPCODE_LODQ] = { FETCH_OP_GET_LOD, tgsi_unsupported},
+ [TGSI_OPCODE_IBFE] = { ALU_OP3_BFE_INT, tgsi_unsupported},
+ [TGSI_OPCODE_UBFE] = { ALU_OP3_BFE_UINT, tgsi_unsupported},
+ [TGSI_OPCODE_BFI] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BREV] = { ALU_OP1_BFREV_INT, tgsi_unsupported},
+ [TGSI_OPCODE_POPC] = { ALU_OP1_BCNT_INT, tgsi_unsupported},
+ [TGSI_OPCODE_LSB] = { ALU_OP1_FFBL_INT, tgsi_unsupported},
+ [TGSI_OPCODE_IMSB] = { ALU_OP1_FFBH_INT, tgsi_unsupported},
+ [TGSI_OPCODE_UMSB] = { ALU_OP1_FFBH_UINT, tgsi_unsupported},
+ [TGSI_OPCODE_INTERP_CENTROID] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_INTERP_SAMPLE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_INTERP_OFFSET] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_LAST] = { ALU_OP0_NOP, tgsi_unsupported},
};
static struct r600_shader_tgsi_instruction eg_shader_tgsi_instruction[] = {
- {TGSI_OPCODE_ARL, 0, ALU_OP0_NOP, tgsi_eg_arl},
- {TGSI_OPCODE_MOV, 0, ALU_OP1_MOV, tgsi_op2},
- {TGSI_OPCODE_LIT, 0, ALU_OP0_NOP, tgsi_lit},
- {TGSI_OPCODE_RCP, 0, ALU_OP1_RECIP_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_RSQ, 0, ALU_OP1_RECIPSQRT_IEEE, tgsi_rsq},
- {TGSI_OPCODE_EXP, 0, ALU_OP0_NOP, tgsi_exp},
- {TGSI_OPCODE_LOG, 0, ALU_OP0_NOP, tgsi_log},
- {TGSI_OPCODE_MUL, 0, ALU_OP2_MUL, tgsi_op2},
- {TGSI_OPCODE_ADD, 0, ALU_OP2_ADD, tgsi_op2},
- {TGSI_OPCODE_DP3, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_DP4, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_DST, 0, ALU_OP0_NOP, tgsi_opdst},
- {TGSI_OPCODE_MIN, 0, ALU_OP2_MIN, tgsi_op2},
- {TGSI_OPCODE_MAX, 0, ALU_OP2_MAX, tgsi_op2},
- {TGSI_OPCODE_SLT, 0, ALU_OP2_SETGT, tgsi_op2_swap},
- {TGSI_OPCODE_SGE, 0, ALU_OP2_SETGE, tgsi_op2},
- {TGSI_OPCODE_MAD, 1, ALU_OP3_MULADD, tgsi_op3},
- {TGSI_OPCODE_SUB, 0, ALU_OP2_ADD, tgsi_op2},
- {TGSI_OPCODE_LRP, 0, ALU_OP0_NOP, tgsi_lrp},
- {TGSI_OPCODE_FMA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SQRT, 0, ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_DP2A, 0, ALU_OP0_NOP, tgsi_unsupported},
- {22, 0, ALU_OP0_NOP, tgsi_unsupported},
- {23, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FRC, 0, ALU_OP1_FRACT, tgsi_op2},
- {TGSI_OPCODE_CLAMP, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FLR, 0, ALU_OP1_FLOOR, tgsi_op2},
- {TGSI_OPCODE_ROUND, 0, ALU_OP1_RNDNE, tgsi_op2},
- {TGSI_OPCODE_EX2, 0, ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_LG2, 0, ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate},
- {TGSI_OPCODE_POW, 0, ALU_OP0_NOP, tgsi_pow},
- {TGSI_OPCODE_XPD, 0, ALU_OP0_NOP, tgsi_xpd},
- {32, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ABS, 0, ALU_OP1_MOV, tgsi_op2},
- {34, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DPH, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_COS, 0, ALU_OP1_COS, tgsi_trig},
- {TGSI_OPCODE_DDX, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
- {TGSI_OPCODE_DDY, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
- {TGSI_OPCODE_KILL, 0, ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */
- {TGSI_OPCODE_PK2H, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK2US, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK4B, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK4UB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {44, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SEQ, 0, ALU_OP2_SETE, tgsi_op2},
- {46, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SGT, 0, ALU_OP2_SETGT, tgsi_op2},
- {TGSI_OPCODE_SIN, 0, ALU_OP1_SIN, tgsi_trig},
- {TGSI_OPCODE_SLE, 0, ALU_OP2_SETGE, tgsi_op2_swap},
- {TGSI_OPCODE_SNE, 0, ALU_OP2_SETNE, tgsi_op2},
- {51, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TEX, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_TXD, 0, FETCH_OP_SAMPLE_G, tgsi_tex},
- {TGSI_OPCODE_TXP, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_UP2H, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP2US, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP4B, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP4UB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {59, 0, ALU_OP0_NOP, tgsi_unsupported},
- {60, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ARR, 0, ALU_OP0_NOP, tgsi_eg_arl},
- {62, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CAL, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_RET, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SSG, 0, ALU_OP0_NOP, tgsi_ssg},
- {TGSI_OPCODE_CMP, 0, ALU_OP0_NOP, tgsi_cmp},
- {TGSI_OPCODE_SCS, 0, ALU_OP0_NOP, tgsi_scs},
- {TGSI_OPCODE_TXB, 0, FETCH_OP_SAMPLE_LB, tgsi_tex},
- {69, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DIV, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DP2, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex},
- {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont},
- {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if},
- {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif},
- {76, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else},
- {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif},
- {TGSI_OPCODE_DDX_FINE, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
- {TGSI_OPCODE_DDY_FINE, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
- {TGSI_OPCODE_PUSHA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_POPA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CEIL, 0, ALU_OP1_CEIL, tgsi_op2},
- {TGSI_OPCODE_I2F, 0, ALU_OP1_INT_TO_FLT, tgsi_op2_trans},
- {TGSI_OPCODE_NOT, 0, ALU_OP1_NOT_INT, tgsi_op2},
- {TGSI_OPCODE_TRUNC, 0, ALU_OP1_TRUNC, tgsi_op2},
- {TGSI_OPCODE_SHL, 0, ALU_OP2_LSHL_INT, tgsi_op2},
- {88, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_AND, 0, ALU_OP2_AND_INT, tgsi_op2},
- {TGSI_OPCODE_OR, 0, ALU_OP2_OR_INT, tgsi_op2},
- {TGSI_OPCODE_MOD, 0, ALU_OP0_NOP, tgsi_imod},
- {TGSI_OPCODE_XOR, 0, ALU_OP2_XOR_INT, tgsi_op2},
- {TGSI_OPCODE_SAD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TXF, 0, FETCH_OP_LD, tgsi_tex},
- {TGSI_OPCODE_TXQ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
- {TGSI_OPCODE_CONT, 0, CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont},
- {TGSI_OPCODE_EMIT, 0, CF_OP_EMIT_VERTEX, tgsi_gs_emit},
- {TGSI_OPCODE_ENDPRIM, 0, CF_OP_CUT_VERTEX, tgsi_gs_emit},
- {TGSI_OPCODE_BGNLOOP, 0, ALU_OP0_NOP, tgsi_bgnloop},
- {TGSI_OPCODE_BGNSUB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ENDLOOP, 0, ALU_OP0_NOP, tgsi_endloop},
- {TGSI_OPCODE_ENDSUB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TXQ_LZ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
- {104, 0, ALU_OP0_NOP, tgsi_unsupported},
- {105, 0, ALU_OP0_NOP, tgsi_unsupported},
- {106, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_NOP, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FSEQ, 0, ALU_OP2_SETE_DX10, tgsi_op2},
- {TGSI_OPCODE_FSGE, 0, ALU_OP2_SETGE_DX10, tgsi_op2},
- {TGSI_OPCODE_FSLT, 0, ALU_OP2_SETGT_DX10, tgsi_op2_swap},
- {TGSI_OPCODE_FSNE, 0, ALU_OP2_SETNE_DX10, tgsi_op2_swap},
- {112, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CALLNZ, 0, ALU_OP0_NOP, tgsi_unsupported},
- {114, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BREAKC, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_KILL_IF, 0, ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */
- {TGSI_OPCODE_END, 0, ALU_OP0_NOP, tgsi_end}, /* aka HALT */
- {118, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_F2I, 0, ALU_OP1_FLT_TO_INT, tgsi_f2i},
- {TGSI_OPCODE_IDIV, 0, ALU_OP0_NOP, tgsi_idiv},
- {TGSI_OPCODE_IMAX, 0, ALU_OP2_MAX_INT, tgsi_op2},
- {TGSI_OPCODE_IMIN, 0, ALU_OP2_MIN_INT, tgsi_op2},
- {TGSI_OPCODE_INEG, 0, ALU_OP2_SUB_INT, tgsi_ineg},
- {TGSI_OPCODE_ISGE, 0, ALU_OP2_SETGE_INT, tgsi_op2},
- {TGSI_OPCODE_ISHR, 0, ALU_OP2_ASHR_INT, tgsi_op2},
- {TGSI_OPCODE_ISLT, 0, ALU_OP2_SETGT_INT, tgsi_op2_swap},
- {TGSI_OPCODE_F2U, 0, ALU_OP1_FLT_TO_UINT, tgsi_f2i},
- {TGSI_OPCODE_U2F, 0, ALU_OP1_UINT_TO_FLT, tgsi_op2_trans},
- {TGSI_OPCODE_UADD, 0, ALU_OP2_ADD_INT, tgsi_op2},
- {TGSI_OPCODE_UDIV, 0, ALU_OP0_NOP, tgsi_udiv},
- {TGSI_OPCODE_UMAD, 0, ALU_OP0_NOP, tgsi_umad},
- {TGSI_OPCODE_UMAX, 0, ALU_OP2_MAX_UINT, tgsi_op2},
- {TGSI_OPCODE_UMIN, 0, ALU_OP2_MIN_UINT, tgsi_op2},
- {TGSI_OPCODE_UMOD, 0, ALU_OP0_NOP, tgsi_umod},
- {TGSI_OPCODE_UMUL, 0, ALU_OP2_MULLO_UINT, tgsi_op2_trans},
- {TGSI_OPCODE_USEQ, 0, ALU_OP2_SETE_INT, tgsi_op2},
- {TGSI_OPCODE_USGE, 0, ALU_OP2_SETGE_UINT, tgsi_op2},
- {TGSI_OPCODE_USHR, 0, ALU_OP2_LSHR_INT, tgsi_op2},
- {TGSI_OPCODE_USLT, 0, ALU_OP2_SETGT_UINT, tgsi_op2_swap},
- {TGSI_OPCODE_USNE, 0, ALU_OP2_SETNE_INT, tgsi_op2},
- {TGSI_OPCODE_SWITCH, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CASE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DEFAULT, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ENDSWITCH, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_I, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_I_MS, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_B, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_C, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_C_LZ, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_D, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_L, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_GATHER4, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SVIEWINFO, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_POS, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_INFO, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_UARL, 0, ALU_OP1_MOVA_INT, tgsi_eg_arl},
- {TGSI_OPCODE_UCMP, 0, ALU_OP0_NOP, tgsi_ucmp},
- {TGSI_OPCODE_IABS, 0, 0, tgsi_iabs},
- {TGSI_OPCODE_ISSG, 0, 0, tgsi_issg},
- {TGSI_OPCODE_LOAD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_STORE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_MFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_LFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BARRIER, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUADD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMXCHG, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMCAS, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMAND, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMOR, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMXOR, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUMIN, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUMAX, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMIMIN, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMIMAX, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TEX2, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_TXB2, 0, FETCH_OP_SAMPLE_LB, tgsi_tex},
- {TGSI_OPCODE_TXL2, 0, FETCH_OP_SAMPLE_L, tgsi_tex},
- {TGSI_OPCODE_IMUL_HI, 0, ALU_OP2_MULHI_INT, tgsi_op2_trans},
- {TGSI_OPCODE_UMUL_HI, 0, ALU_OP2_MULHI_UINT, tgsi_op2_trans},
- {TGSI_OPCODE_TG4, 0, FETCH_OP_GATHER4, tgsi_tex},
- {TGSI_OPCODE_LODQ, 0, FETCH_OP_GET_LOD, tgsi_tex},
- {TGSI_OPCODE_IBFE, 1, ALU_OP3_BFE_INT, tgsi_op3},
- {TGSI_OPCODE_UBFE, 1, ALU_OP3_BFE_UINT, tgsi_op3},
- {TGSI_OPCODE_BFI, 0, ALU_OP0_NOP, tgsi_bfi},
- {TGSI_OPCODE_BREV, 0, ALU_OP1_BFREV_INT, tgsi_op2},
- {TGSI_OPCODE_POPC, 0, ALU_OP1_BCNT_INT, tgsi_op2},
- {TGSI_OPCODE_LSB, 0, ALU_OP1_FFBL_INT, tgsi_op2},
- {TGSI_OPCODE_IMSB, 0, ALU_OP1_FFBH_INT, tgsi_msb},
- {TGSI_OPCODE_UMSB, 0, ALU_OP1_FFBH_UINT, tgsi_msb},
- {TGSI_OPCODE_INTERP_CENTROID, 0, ALU_OP0_NOP, tgsi_interp_egcm},
- {TGSI_OPCODE_INTERP_SAMPLE, 0, ALU_OP0_NOP, tgsi_interp_egcm},
- {TGSI_OPCODE_INTERP_OFFSET, 0, ALU_OP0_NOP, tgsi_interp_egcm},
- {TGSI_OPCODE_LAST, 0, ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ARL] = { ALU_OP0_NOP, tgsi_eg_arl},
+ [TGSI_OPCODE_MOV] = { ALU_OP1_MOV, tgsi_op2},
+ [TGSI_OPCODE_LIT] = { ALU_OP0_NOP, tgsi_lit},
+ [TGSI_OPCODE_RCP] = { ALU_OP1_RECIP_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_RSQ] = { ALU_OP1_RECIPSQRT_IEEE, tgsi_rsq},
+ [TGSI_OPCODE_EXP] = { ALU_OP0_NOP, tgsi_exp},
+ [TGSI_OPCODE_LOG] = { ALU_OP0_NOP, tgsi_log},
+ [TGSI_OPCODE_MUL] = { ALU_OP2_MUL, tgsi_op2},
+ [TGSI_OPCODE_ADD] = { ALU_OP2_ADD, tgsi_op2},
+ [TGSI_OPCODE_DP3] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_DP4] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_DST] = { ALU_OP0_NOP, tgsi_opdst},
+ [TGSI_OPCODE_MIN] = { ALU_OP2_MIN, tgsi_op2},
+ [TGSI_OPCODE_MAX] = { ALU_OP2_MAX, tgsi_op2},
+ [TGSI_OPCODE_SLT] = { ALU_OP2_SETGT, tgsi_op2_swap},
+ [TGSI_OPCODE_SGE] = { ALU_OP2_SETGE, tgsi_op2},
+ [TGSI_OPCODE_MAD] = { ALU_OP3_MULADD, tgsi_op3},
+ [TGSI_OPCODE_SUB] = { ALU_OP2_ADD, tgsi_op2},
+ [TGSI_OPCODE_LRP] = { ALU_OP0_NOP, tgsi_lrp},
+ [TGSI_OPCODE_FMA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SQRT] = { ALU_OP1_SQRT_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_DP2A] = { ALU_OP0_NOP, tgsi_unsupported},
+ [22] = { ALU_OP0_NOP, tgsi_unsupported},
+ [23] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FRC] = { ALU_OP1_FRACT, tgsi_op2},
+ [TGSI_OPCODE_CLAMP] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FLR] = { ALU_OP1_FLOOR, tgsi_op2},
+ [TGSI_OPCODE_ROUND] = { ALU_OP1_RNDNE, tgsi_op2},
+ [TGSI_OPCODE_EX2] = { ALU_OP1_EXP_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_LG2] = { ALU_OP1_LOG_IEEE, tgsi_trans_srcx_replicate},
+ [TGSI_OPCODE_POW] = { ALU_OP0_NOP, tgsi_pow},
+ [TGSI_OPCODE_XPD] = { ALU_OP0_NOP, tgsi_xpd},
+ [32] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ABS] = { ALU_OP1_MOV, tgsi_op2},
+ [34] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DPH] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_COS] = { ALU_OP1_COS, tgsi_trig},
+ [TGSI_OPCODE_DDX] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
+ [TGSI_OPCODE_DDY] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
+ [TGSI_OPCODE_KILL] = { ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */
+ [TGSI_OPCODE_PK2H] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK2US] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK4B] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK4UB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [44] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SEQ] = { ALU_OP2_SETE, tgsi_op2},
+ [46] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SGT] = { ALU_OP2_SETGT, tgsi_op2},
+ [TGSI_OPCODE_SIN] = { ALU_OP1_SIN, tgsi_trig},
+ [TGSI_OPCODE_SLE] = { ALU_OP2_SETGE, tgsi_op2_swap},
+ [TGSI_OPCODE_SNE] = { ALU_OP2_SETNE, tgsi_op2},
+ [51] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TEX] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_TXD] = { FETCH_OP_SAMPLE_G, tgsi_tex},
+ [TGSI_OPCODE_TXP] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_UP2H] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP2US] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP4B] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP4UB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [59] = { ALU_OP0_NOP, tgsi_unsupported},
+ [60] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ARR] = { ALU_OP0_NOP, tgsi_eg_arl},
+ [62] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CAL] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_RET] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SSG] = { ALU_OP0_NOP, tgsi_ssg},
+ [TGSI_OPCODE_CMP] = { ALU_OP0_NOP, tgsi_cmp},
+ [TGSI_OPCODE_SCS] = { ALU_OP0_NOP, tgsi_scs},
+ [TGSI_OPCODE_TXB] = { FETCH_OP_SAMPLE_LB, tgsi_tex},
+ [69] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DIV] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DP2] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_TXL] = { FETCH_OP_SAMPLE_L, tgsi_tex},
+ [TGSI_OPCODE_BRK] = { CF_OP_LOOP_BREAK, tgsi_loop_brk_cont},
+ [TGSI_OPCODE_IF] = { ALU_OP0_NOP, tgsi_if},
+ [TGSI_OPCODE_UIF] = { ALU_OP0_NOP, tgsi_uif},
+ [76] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ELSE] = { ALU_OP0_NOP, tgsi_else},
+ [TGSI_OPCODE_ENDIF] = { ALU_OP0_NOP, tgsi_endif},
+ [TGSI_OPCODE_DDX_FINE] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
+ [TGSI_OPCODE_DDY_FINE] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
+ [TGSI_OPCODE_PUSHA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_POPA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CEIL] = { ALU_OP1_CEIL, tgsi_op2},
+ [TGSI_OPCODE_I2F] = { ALU_OP1_INT_TO_FLT, tgsi_op2_trans},
+ [TGSI_OPCODE_NOT] = { ALU_OP1_NOT_INT, tgsi_op2},
+ [TGSI_OPCODE_TRUNC] = { ALU_OP1_TRUNC, tgsi_op2},
+ [TGSI_OPCODE_SHL] = { ALU_OP2_LSHL_INT, tgsi_op2},
+ [88] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_AND] = { ALU_OP2_AND_INT, tgsi_op2},
+ [TGSI_OPCODE_OR] = { ALU_OP2_OR_INT, tgsi_op2},
+ [TGSI_OPCODE_MOD] = { ALU_OP0_NOP, tgsi_imod},
+ [TGSI_OPCODE_XOR] = { ALU_OP2_XOR_INT, tgsi_op2},
+ [TGSI_OPCODE_SAD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TXF] = { FETCH_OP_LD, tgsi_tex},
+ [TGSI_OPCODE_TXQ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
+ [TGSI_OPCODE_CONT] = { CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont},
+ [TGSI_OPCODE_EMIT] = { CF_OP_EMIT_VERTEX, tgsi_gs_emit},
+ [TGSI_OPCODE_ENDPRIM] = { CF_OP_CUT_VERTEX, tgsi_gs_emit},
+ [TGSI_OPCODE_BGNLOOP] = { ALU_OP0_NOP, tgsi_bgnloop},
+ [TGSI_OPCODE_BGNSUB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ENDLOOP] = { ALU_OP0_NOP, tgsi_endloop},
+ [TGSI_OPCODE_ENDSUB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TXQ_LZ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
+ [104] = { ALU_OP0_NOP, tgsi_unsupported},
+ [105] = { ALU_OP0_NOP, tgsi_unsupported},
+ [106] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_NOP] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FSEQ] = { ALU_OP2_SETE_DX10, tgsi_op2},
+ [TGSI_OPCODE_FSGE] = { ALU_OP2_SETGE_DX10, tgsi_op2},
+ [TGSI_OPCODE_FSLT] = { ALU_OP2_SETGT_DX10, tgsi_op2_swap},
+ [TGSI_OPCODE_FSNE] = { ALU_OP2_SETNE_DX10, tgsi_op2_swap},
+ [112] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CALLNZ] = { ALU_OP0_NOP, tgsi_unsupported},
+ [114] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BREAKC] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_KILL_IF] = { ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */
+ [TGSI_OPCODE_END] = { ALU_OP0_NOP, tgsi_end}, /* aka HALT */
+ [118] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_F2I] = { ALU_OP1_FLT_TO_INT, tgsi_f2i},
+ [TGSI_OPCODE_IDIV] = { ALU_OP0_NOP, tgsi_idiv},
+ [TGSI_OPCODE_IMAX] = { ALU_OP2_MAX_INT, tgsi_op2},
+ [TGSI_OPCODE_IMIN] = { ALU_OP2_MIN_INT, tgsi_op2},
+ [TGSI_OPCODE_INEG] = { ALU_OP2_SUB_INT, tgsi_ineg},
+ [TGSI_OPCODE_ISGE] = { ALU_OP2_SETGE_INT, tgsi_op2},
+ [TGSI_OPCODE_ISHR] = { ALU_OP2_ASHR_INT, tgsi_op2},
+ [TGSI_OPCODE_ISLT] = { ALU_OP2_SETGT_INT, tgsi_op2_swap},
+ [TGSI_OPCODE_F2U] = { ALU_OP1_FLT_TO_UINT, tgsi_f2i},
+ [TGSI_OPCODE_U2F] = { ALU_OP1_UINT_TO_FLT, tgsi_op2_trans},
+ [TGSI_OPCODE_UADD] = { ALU_OP2_ADD_INT, tgsi_op2},
+ [TGSI_OPCODE_UDIV] = { ALU_OP0_NOP, tgsi_udiv},
+ [TGSI_OPCODE_UMAD] = { ALU_OP0_NOP, tgsi_umad},
+ [TGSI_OPCODE_UMAX] = { ALU_OP2_MAX_UINT, tgsi_op2},
+ [TGSI_OPCODE_UMIN] = { ALU_OP2_MIN_UINT, tgsi_op2},
+ [TGSI_OPCODE_UMOD] = { ALU_OP0_NOP, tgsi_umod},
+ [TGSI_OPCODE_UMUL] = { ALU_OP2_MULLO_UINT, tgsi_op2_trans},
+ [TGSI_OPCODE_USEQ] = { ALU_OP2_SETE_INT, tgsi_op2},
+ [TGSI_OPCODE_USGE] = { ALU_OP2_SETGE_UINT, tgsi_op2},
+ [TGSI_OPCODE_USHR] = { ALU_OP2_LSHR_INT, tgsi_op2},
+ [TGSI_OPCODE_USLT] = { ALU_OP2_SETGT_UINT, tgsi_op2_swap},
+ [TGSI_OPCODE_USNE] = { ALU_OP2_SETNE_INT, tgsi_op2},
+ [TGSI_OPCODE_SWITCH] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CASE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DEFAULT] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ENDSWITCH] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_I] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_I_MS] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_B] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_C] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_C_LZ] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_D] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_L] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_GATHER4] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SVIEWINFO] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_POS] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_INFO] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_UARL] = { ALU_OP1_MOVA_INT, tgsi_eg_arl},
+ [TGSI_OPCODE_UCMP] = { ALU_OP0_NOP, tgsi_ucmp},
+ [TGSI_OPCODE_IABS] = { 0, tgsi_iabs},
+ [TGSI_OPCODE_ISSG] = { 0, tgsi_issg},
+ [TGSI_OPCODE_LOAD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_STORE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_MFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_LFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BARRIER] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUADD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMXCHG] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMCAS] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMAND] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMOR] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMXOR] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUMIN] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUMAX] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMIMIN] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMIMAX] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TEX2] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_TXB2] = { FETCH_OP_SAMPLE_LB, tgsi_tex},
+ [TGSI_OPCODE_TXL2] = { FETCH_OP_SAMPLE_L, tgsi_tex},
+ [TGSI_OPCODE_IMUL_HI] = { ALU_OP2_MULHI_INT, tgsi_op2_trans},
+ [TGSI_OPCODE_UMUL_HI] = { ALU_OP2_MULHI_UINT, tgsi_op2_trans},
+ [TGSI_OPCODE_TG4] = { FETCH_OP_GATHER4, tgsi_tex},
+ [TGSI_OPCODE_LODQ] = { FETCH_OP_GET_LOD, tgsi_tex},
+ [TGSI_OPCODE_IBFE] = { ALU_OP3_BFE_INT, tgsi_op3},
+ [TGSI_OPCODE_UBFE] = { ALU_OP3_BFE_UINT, tgsi_op3},
+ [TGSI_OPCODE_BFI] = { ALU_OP0_NOP, tgsi_bfi},
+ [TGSI_OPCODE_BREV] = { ALU_OP1_BFREV_INT, tgsi_op2},
+ [TGSI_OPCODE_POPC] = { ALU_OP1_BCNT_INT, tgsi_op2},
+ [TGSI_OPCODE_LSB] = { ALU_OP1_FFBL_INT, tgsi_op2},
+ [TGSI_OPCODE_IMSB] = { ALU_OP1_FFBH_INT, tgsi_msb},
+ [TGSI_OPCODE_UMSB] = { ALU_OP1_FFBH_UINT, tgsi_msb},
+ [TGSI_OPCODE_INTERP_CENTROID] = { ALU_OP0_NOP, tgsi_interp_egcm},
+ [TGSI_OPCODE_INTERP_SAMPLE] = { ALU_OP0_NOP, tgsi_interp_egcm},
+ [TGSI_OPCODE_INTERP_OFFSET] = { ALU_OP0_NOP, tgsi_interp_egcm},
+ [TGSI_OPCODE_LAST] = { ALU_OP0_NOP, tgsi_unsupported},
};
static struct r600_shader_tgsi_instruction cm_shader_tgsi_instruction[] = {
- {TGSI_OPCODE_ARL, 0, ALU_OP0_NOP, tgsi_eg_arl},
- {TGSI_OPCODE_MOV, 0, ALU_OP1_MOV, tgsi_op2},
- {TGSI_OPCODE_LIT, 0, ALU_OP0_NOP, tgsi_lit},
- {TGSI_OPCODE_RCP, 0, ALU_OP1_RECIP_IEEE, cayman_emit_float_instr},
- {TGSI_OPCODE_RSQ, 0, ALU_OP1_RECIPSQRT_IEEE, cayman_emit_float_instr},
- {TGSI_OPCODE_EXP, 0, ALU_OP0_NOP, tgsi_exp},
- {TGSI_OPCODE_LOG, 0, ALU_OP0_NOP, tgsi_log},
- {TGSI_OPCODE_MUL, 0, ALU_OP2_MUL, tgsi_op2},
- {TGSI_OPCODE_ADD, 0, ALU_OP2_ADD, tgsi_op2},
- {TGSI_OPCODE_DP3, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_DP4, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_DST, 0, ALU_OP0_NOP, tgsi_opdst},
- {TGSI_OPCODE_MIN, 0, ALU_OP2_MIN, tgsi_op2},
- {TGSI_OPCODE_MAX, 0, ALU_OP2_MAX, tgsi_op2},
- {TGSI_OPCODE_SLT, 0, ALU_OP2_SETGT, tgsi_op2_swap},
- {TGSI_OPCODE_SGE, 0, ALU_OP2_SETGE, tgsi_op2},
- {TGSI_OPCODE_MAD, 1, ALU_OP3_MULADD, tgsi_op3},
- {TGSI_OPCODE_SUB, 0, ALU_OP2_ADD, tgsi_op2},
- {TGSI_OPCODE_LRP, 0, ALU_OP0_NOP, tgsi_lrp},
- {TGSI_OPCODE_FMA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SQRT, 0, ALU_OP1_SQRT_IEEE, cayman_emit_float_instr},
- {TGSI_OPCODE_DP2A, 0, ALU_OP0_NOP, tgsi_unsupported},
- {22, 0, ALU_OP0_NOP, tgsi_unsupported},
- {23, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FRC, 0, ALU_OP1_FRACT, tgsi_op2},
- {TGSI_OPCODE_CLAMP, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FLR, 0, ALU_OP1_FLOOR, tgsi_op2},
- {TGSI_OPCODE_ROUND, 0, ALU_OP1_RNDNE, tgsi_op2},
- {TGSI_OPCODE_EX2, 0, ALU_OP1_EXP_IEEE, cayman_emit_float_instr},
- {TGSI_OPCODE_LG2, 0, ALU_OP1_LOG_IEEE, cayman_emit_float_instr},
- {TGSI_OPCODE_POW, 0, ALU_OP0_NOP, cayman_pow},
- {TGSI_OPCODE_XPD, 0, ALU_OP0_NOP, tgsi_xpd},
- {32, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ABS, 0, ALU_OP1_MOV, tgsi_op2},
- {34, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DPH, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_COS, 0, ALU_OP1_COS, cayman_trig},
- {TGSI_OPCODE_DDX, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
- {TGSI_OPCODE_DDY, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
- {TGSI_OPCODE_KILL, 0, ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */
- {TGSI_OPCODE_PK2H, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK2US, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK4B, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_PK4UB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {44, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SEQ, 0, ALU_OP2_SETE, tgsi_op2},
- {46, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SGT, 0, ALU_OP2_SETGT, tgsi_op2},
- {TGSI_OPCODE_SIN, 0, ALU_OP1_SIN, cayman_trig},
- {TGSI_OPCODE_SLE, 0, ALU_OP2_SETGE, tgsi_op2_swap},
- {TGSI_OPCODE_SNE, 0, ALU_OP2_SETNE, tgsi_op2},
- {51, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TEX, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_TXD, 0, FETCH_OP_SAMPLE_G, tgsi_tex},
- {TGSI_OPCODE_TXP, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_UP2H, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP2US, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP4B, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_UP4UB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {59, 0, ALU_OP0_NOP, tgsi_unsupported},
- {60, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ARR, 0, ALU_OP0_NOP, tgsi_eg_arl},
- {62, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CAL, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_RET, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SSG, 0, ALU_OP0_NOP, tgsi_ssg},
- {TGSI_OPCODE_CMP, 0, ALU_OP0_NOP, tgsi_cmp},
- {TGSI_OPCODE_SCS, 0, ALU_OP0_NOP, tgsi_scs},
- {TGSI_OPCODE_TXB, 0, FETCH_OP_SAMPLE_LB, tgsi_tex},
- {69, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DIV, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DP2, 0, ALU_OP2_DOT4, tgsi_dp},
- {TGSI_OPCODE_TXL, 0, FETCH_OP_SAMPLE_L, tgsi_tex},
- {TGSI_OPCODE_BRK, 0, CF_OP_LOOP_BREAK, tgsi_loop_brk_cont},
- {TGSI_OPCODE_IF, 0, ALU_OP0_NOP, tgsi_if},
- {TGSI_OPCODE_UIF, 0, ALU_OP0_NOP, tgsi_uif},
- {76, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ELSE, 0, ALU_OP0_NOP, tgsi_else},
- {TGSI_OPCODE_ENDIF, 0, ALU_OP0_NOP, tgsi_endif},
- {TGSI_OPCODE_DDX_FINE, 0, FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
- {TGSI_OPCODE_DDY_FINE, 0, FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
- {TGSI_OPCODE_PUSHA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_POPA, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CEIL, 0, ALU_OP1_CEIL, tgsi_op2},
- {TGSI_OPCODE_I2F, 0, ALU_OP1_INT_TO_FLT, tgsi_op2},
- {TGSI_OPCODE_NOT, 0, ALU_OP1_NOT_INT, tgsi_op2},
- {TGSI_OPCODE_TRUNC, 0, ALU_OP1_TRUNC, tgsi_op2},
- {TGSI_OPCODE_SHL, 0, ALU_OP2_LSHL_INT, tgsi_op2},
- {88, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_AND, 0, ALU_OP2_AND_INT, tgsi_op2},
- {TGSI_OPCODE_OR, 0, ALU_OP2_OR_INT, tgsi_op2},
- {TGSI_OPCODE_MOD, 0, ALU_OP0_NOP, tgsi_imod},
- {TGSI_OPCODE_XOR, 0, ALU_OP2_XOR_INT, tgsi_op2},
- {TGSI_OPCODE_SAD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TXF, 0, FETCH_OP_LD, tgsi_tex},
- {TGSI_OPCODE_TXQ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
- {TGSI_OPCODE_CONT, 0, CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont},
- {TGSI_OPCODE_EMIT, 0, CF_OP_EMIT_VERTEX, tgsi_gs_emit},
- {TGSI_OPCODE_ENDPRIM, 0, CF_OP_CUT_VERTEX, tgsi_gs_emit},
- {TGSI_OPCODE_BGNLOOP, 0, ALU_OP0_NOP, tgsi_bgnloop},
- {TGSI_OPCODE_BGNSUB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ENDLOOP, 0, ALU_OP0_NOP, tgsi_endloop},
- {TGSI_OPCODE_ENDSUB, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TXQ_LZ, 0, FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
- {104, 0, ALU_OP0_NOP, tgsi_unsupported},
- {105, 0, ALU_OP0_NOP, tgsi_unsupported},
- {106, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_NOP, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_FSEQ, 0, ALU_OP2_SETE_DX10, tgsi_op2},
- {TGSI_OPCODE_FSGE, 0, ALU_OP2_SETGE_DX10, tgsi_op2},
- {TGSI_OPCODE_FSLT, 0, ALU_OP2_SETGT_DX10, tgsi_op2_swap},
- {TGSI_OPCODE_FSNE, 0, ALU_OP2_SETNE_DX10, tgsi_op2_swap},
- {112, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CALLNZ, 0, ALU_OP0_NOP, tgsi_unsupported},
- {114, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BREAKC, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_KILL_IF, 0, ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */
- {TGSI_OPCODE_END, 0, ALU_OP0_NOP, tgsi_end}, /* aka HALT */
- {118, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_F2I, 0, ALU_OP1_FLT_TO_INT, tgsi_op2},
- {TGSI_OPCODE_IDIV, 0, ALU_OP0_NOP, tgsi_idiv},
- {TGSI_OPCODE_IMAX, 0, ALU_OP2_MAX_INT, tgsi_op2},
- {TGSI_OPCODE_IMIN, 0, ALU_OP2_MIN_INT, tgsi_op2},
- {TGSI_OPCODE_INEG, 0, ALU_OP2_SUB_INT, tgsi_ineg},
- {TGSI_OPCODE_ISGE, 0, ALU_OP2_SETGE_INT, tgsi_op2},
- {TGSI_OPCODE_ISHR, 0, ALU_OP2_ASHR_INT, tgsi_op2},
- {TGSI_OPCODE_ISLT, 0, ALU_OP2_SETGT_INT, tgsi_op2_swap},
- {TGSI_OPCODE_F2U, 0, ALU_OP1_FLT_TO_UINT, tgsi_op2},
- {TGSI_OPCODE_U2F, 0, ALU_OP1_UINT_TO_FLT, tgsi_op2},
- {TGSI_OPCODE_UADD, 0, ALU_OP2_ADD_INT, tgsi_op2},
- {TGSI_OPCODE_UDIV, 0, ALU_OP0_NOP, tgsi_udiv},
- {TGSI_OPCODE_UMAD, 0, ALU_OP0_NOP, tgsi_umad},
- {TGSI_OPCODE_UMAX, 0, ALU_OP2_MAX_UINT, tgsi_op2},
- {TGSI_OPCODE_UMIN, 0, ALU_OP2_MIN_UINT, tgsi_op2},
- {TGSI_OPCODE_UMOD, 0, ALU_OP0_NOP, tgsi_umod},
- {TGSI_OPCODE_UMUL, 0, ALU_OP2_MULLO_INT, cayman_mul_int_instr},
- {TGSI_OPCODE_USEQ, 0, ALU_OP2_SETE_INT, tgsi_op2},
- {TGSI_OPCODE_USGE, 0, ALU_OP2_SETGE_UINT, tgsi_op2},
- {TGSI_OPCODE_USHR, 0, ALU_OP2_LSHR_INT, tgsi_op2},
- {TGSI_OPCODE_USLT, 0, ALU_OP2_SETGT_UINT, tgsi_op2_swap},
- {TGSI_OPCODE_USNE, 0, ALU_OP2_SETNE_INT, tgsi_op2},
- {TGSI_OPCODE_SWITCH, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_CASE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_DEFAULT, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ENDSWITCH, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_I, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_I_MS, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_B, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_C, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_C_LZ, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_D, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_L, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_GATHER4, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SVIEWINFO, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_POS, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_SAMPLE_INFO, 0, 0, tgsi_unsupported},
- {TGSI_OPCODE_UARL, 0, ALU_OP1_MOVA_INT, tgsi_eg_arl},
- {TGSI_OPCODE_UCMP, 0, ALU_OP0_NOP, tgsi_ucmp},
- {TGSI_OPCODE_IABS, 0, 0, tgsi_iabs},
- {TGSI_OPCODE_ISSG, 0, 0, tgsi_issg},
- {TGSI_OPCODE_LOAD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_STORE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_MFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_LFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_SFENCE, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_BARRIER, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUADD, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMXCHG, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMCAS, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMAND, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMOR, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMXOR, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUMIN, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMUMAX, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMIMIN, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_ATOMIMAX, 0, ALU_OP0_NOP, tgsi_unsupported},
- {TGSI_OPCODE_TEX2, 0, FETCH_OP_SAMPLE, tgsi_tex},
- {TGSI_OPCODE_TXB2, 0, FETCH_OP_SAMPLE_LB, tgsi_tex},
- {TGSI_OPCODE_TXL2, 0, FETCH_OP_SAMPLE_L, tgsi_tex},
- {TGSI_OPCODE_IMUL_HI, 0, ALU_OP2_MULHI_INT, cayman_mul_int_instr},
- {TGSI_OPCODE_UMUL_HI, 0, ALU_OP2_MULHI_UINT, cayman_mul_int_instr},
- {TGSI_OPCODE_TG4, 0, FETCH_OP_GATHER4, tgsi_tex},
- {TGSI_OPCODE_LODQ, 0, FETCH_OP_GET_LOD, tgsi_tex},
- {TGSI_OPCODE_IBFE, 1, ALU_OP3_BFE_INT, tgsi_op3},
- {TGSI_OPCODE_UBFE, 1, ALU_OP3_BFE_UINT, tgsi_op3},
- {TGSI_OPCODE_BFI, 0, ALU_OP0_NOP, tgsi_bfi},
- {TGSI_OPCODE_BREV, 0, ALU_OP1_BFREV_INT, tgsi_op2},
- {TGSI_OPCODE_POPC, 0, ALU_OP1_BCNT_INT, tgsi_op2},
- {TGSI_OPCODE_LSB, 0, ALU_OP1_FFBL_INT, tgsi_op2},
- {TGSI_OPCODE_IMSB, 0, ALU_OP1_FFBH_INT, tgsi_msb},
- {TGSI_OPCODE_UMSB, 0, ALU_OP1_FFBH_UINT, tgsi_msb},
- {TGSI_OPCODE_INTERP_CENTROID, 0, ALU_OP0_NOP, tgsi_interp_egcm},
- {TGSI_OPCODE_INTERP_SAMPLE, 0, ALU_OP0_NOP, tgsi_interp_egcm},
- {TGSI_OPCODE_INTERP_OFFSET, 0, ALU_OP0_NOP, tgsi_interp_egcm},
- {TGSI_OPCODE_LAST, 0, ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ARL] = { ALU_OP0_NOP, tgsi_eg_arl},
+ [TGSI_OPCODE_MOV] = { ALU_OP1_MOV, tgsi_op2},
+ [TGSI_OPCODE_LIT] = { ALU_OP0_NOP, tgsi_lit},
+ [TGSI_OPCODE_RCP] = { ALU_OP1_RECIP_IEEE, cayman_emit_float_instr},
+ [TGSI_OPCODE_RSQ] = { ALU_OP1_RECIPSQRT_IEEE, cayman_emit_float_instr},
+ [TGSI_OPCODE_EXP] = { ALU_OP0_NOP, tgsi_exp},
+ [TGSI_OPCODE_LOG] = { ALU_OP0_NOP, tgsi_log},
+ [TGSI_OPCODE_MUL] = { ALU_OP2_MUL, tgsi_op2},
+ [TGSI_OPCODE_ADD] = { ALU_OP2_ADD, tgsi_op2},
+ [TGSI_OPCODE_DP3] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_DP4] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_DST] = { ALU_OP0_NOP, tgsi_opdst},
+ [TGSI_OPCODE_MIN] = { ALU_OP2_MIN, tgsi_op2},
+ [TGSI_OPCODE_MAX] = { ALU_OP2_MAX, tgsi_op2},
+ [TGSI_OPCODE_SLT] = { ALU_OP2_SETGT, tgsi_op2_swap},
+ [TGSI_OPCODE_SGE] = { ALU_OP2_SETGE, tgsi_op2},
+ [TGSI_OPCODE_MAD] = { ALU_OP3_MULADD, tgsi_op3},
+ [TGSI_OPCODE_SUB] = { ALU_OP2_ADD, tgsi_op2},
+ [TGSI_OPCODE_LRP] = { ALU_OP0_NOP, tgsi_lrp},
+ [TGSI_OPCODE_FMA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SQRT] = { ALU_OP1_SQRT_IEEE, cayman_emit_float_instr},
+ [TGSI_OPCODE_DP2A] = { ALU_OP0_NOP, tgsi_unsupported},
+ [22] = { ALU_OP0_NOP, tgsi_unsupported},
+ [23] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FRC] = { ALU_OP1_FRACT, tgsi_op2},
+ [TGSI_OPCODE_CLAMP] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FLR] = { ALU_OP1_FLOOR, tgsi_op2},
+ [TGSI_OPCODE_ROUND] = { ALU_OP1_RNDNE, tgsi_op2},
+ [TGSI_OPCODE_EX2] = { ALU_OP1_EXP_IEEE, cayman_emit_float_instr},
+ [TGSI_OPCODE_LG2] = { ALU_OP1_LOG_IEEE, cayman_emit_float_instr},
+ [TGSI_OPCODE_POW] = { ALU_OP0_NOP, cayman_pow},
+ [TGSI_OPCODE_XPD] = { ALU_OP0_NOP, tgsi_xpd},
+ [32] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ABS] = { ALU_OP1_MOV, tgsi_op2},
+ [34] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DPH] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_COS] = { ALU_OP1_COS, cayman_trig},
+ [TGSI_OPCODE_DDX] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
+ [TGSI_OPCODE_DDY] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
+ [TGSI_OPCODE_KILL] = { ALU_OP2_KILLGT, tgsi_kill}, /* unconditional kill */
+ [TGSI_OPCODE_PK2H] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK2US] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK4B] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_PK4UB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [44] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SEQ] = { ALU_OP2_SETE, tgsi_op2},
+ [46] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SGT] = { ALU_OP2_SETGT, tgsi_op2},
+ [TGSI_OPCODE_SIN] = { ALU_OP1_SIN, cayman_trig},
+ [TGSI_OPCODE_SLE] = { ALU_OP2_SETGE, tgsi_op2_swap},
+ [TGSI_OPCODE_SNE] = { ALU_OP2_SETNE, tgsi_op2},
+ [51] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TEX] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_TXD] = { FETCH_OP_SAMPLE_G, tgsi_tex},
+ [TGSI_OPCODE_TXP] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_UP2H] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP2US] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP4B] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_UP4UB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [59] = { ALU_OP0_NOP, tgsi_unsupported},
+ [60] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ARR] = { ALU_OP0_NOP, tgsi_eg_arl},
+ [62] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CAL] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_RET] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SSG] = { ALU_OP0_NOP, tgsi_ssg},
+ [TGSI_OPCODE_CMP] = { ALU_OP0_NOP, tgsi_cmp},
+ [TGSI_OPCODE_SCS] = { ALU_OP0_NOP, tgsi_scs},
+ [TGSI_OPCODE_TXB] = { FETCH_OP_SAMPLE_LB, tgsi_tex},
+ [69] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DIV] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DP2] = { ALU_OP2_DOT4, tgsi_dp},
+ [TGSI_OPCODE_TXL] = { FETCH_OP_SAMPLE_L, tgsi_tex},
+ [TGSI_OPCODE_BRK] = { CF_OP_LOOP_BREAK, tgsi_loop_brk_cont},
+ [TGSI_OPCODE_IF] = { ALU_OP0_NOP, tgsi_if},
+ [TGSI_OPCODE_UIF] = { ALU_OP0_NOP, tgsi_uif},
+ [76] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ELSE] = { ALU_OP0_NOP, tgsi_else},
+ [TGSI_OPCODE_ENDIF] = { ALU_OP0_NOP, tgsi_endif},
+ [TGSI_OPCODE_DDX_FINE] = { FETCH_OP_GET_GRADIENTS_H, tgsi_tex},
+ [TGSI_OPCODE_DDY_FINE] = { FETCH_OP_GET_GRADIENTS_V, tgsi_tex},
+ [TGSI_OPCODE_PUSHA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_POPA] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CEIL] = { ALU_OP1_CEIL, tgsi_op2},
+ [TGSI_OPCODE_I2F] = { ALU_OP1_INT_TO_FLT, tgsi_op2},
+ [TGSI_OPCODE_NOT] = { ALU_OP1_NOT_INT, tgsi_op2},
+ [TGSI_OPCODE_TRUNC] = { ALU_OP1_TRUNC, tgsi_op2},
+ [TGSI_OPCODE_SHL] = { ALU_OP2_LSHL_INT, tgsi_op2},
+ [88] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_AND] = { ALU_OP2_AND_INT, tgsi_op2},
+ [TGSI_OPCODE_OR] = { ALU_OP2_OR_INT, tgsi_op2},
+ [TGSI_OPCODE_MOD] = { ALU_OP0_NOP, tgsi_imod},
+ [TGSI_OPCODE_XOR] = { ALU_OP2_XOR_INT, tgsi_op2},
+ [TGSI_OPCODE_SAD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TXF] = { FETCH_OP_LD, tgsi_tex},
+ [TGSI_OPCODE_TXQ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
+ [TGSI_OPCODE_CONT] = { CF_OP_LOOP_CONTINUE, tgsi_loop_brk_cont},
+ [TGSI_OPCODE_EMIT] = { CF_OP_EMIT_VERTEX, tgsi_gs_emit},
+ [TGSI_OPCODE_ENDPRIM] = { CF_OP_CUT_VERTEX, tgsi_gs_emit},
+ [TGSI_OPCODE_BGNLOOP] = { ALU_OP0_NOP, tgsi_bgnloop},
+ [TGSI_OPCODE_BGNSUB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ENDLOOP] = { ALU_OP0_NOP, tgsi_endloop},
+ [TGSI_OPCODE_ENDSUB] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TXQ_LZ] = { FETCH_OP_GET_TEXTURE_RESINFO, tgsi_tex},
+ [104] = { ALU_OP0_NOP, tgsi_unsupported},
+ [105] = { ALU_OP0_NOP, tgsi_unsupported},
+ [106] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_NOP] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_FSEQ] = { ALU_OP2_SETE_DX10, tgsi_op2},
+ [TGSI_OPCODE_FSGE] = { ALU_OP2_SETGE_DX10, tgsi_op2},
+ [TGSI_OPCODE_FSLT] = { ALU_OP2_SETGT_DX10, tgsi_op2_swap},
+ [TGSI_OPCODE_FSNE] = { ALU_OP2_SETNE_DX10, tgsi_op2_swap},
+ [112] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CALLNZ] = { ALU_OP0_NOP, tgsi_unsupported},
+ [114] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BREAKC] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_KILL_IF] = { ALU_OP2_KILLGT, tgsi_kill}, /* conditional kill */
+ [TGSI_OPCODE_END] = { ALU_OP0_NOP, tgsi_end}, /* aka HALT */
+ [118] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_F2I] = { ALU_OP1_FLT_TO_INT, tgsi_op2},
+ [TGSI_OPCODE_IDIV] = { ALU_OP0_NOP, tgsi_idiv},
+ [TGSI_OPCODE_IMAX] = { ALU_OP2_MAX_INT, tgsi_op2},
+ [TGSI_OPCODE_IMIN] = { ALU_OP2_MIN_INT, tgsi_op2},
+ [TGSI_OPCODE_INEG] = { ALU_OP2_SUB_INT, tgsi_ineg},
+ [TGSI_OPCODE_ISGE] = { ALU_OP2_SETGE_INT, tgsi_op2},
+ [TGSI_OPCODE_ISHR] = { ALU_OP2_ASHR_INT, tgsi_op2},
+ [TGSI_OPCODE_ISLT] = { ALU_OP2_SETGT_INT, tgsi_op2_swap},
+ [TGSI_OPCODE_F2U] = { ALU_OP1_FLT_TO_UINT, tgsi_op2},
+ [TGSI_OPCODE_U2F] = { ALU_OP1_UINT_TO_FLT, tgsi_op2},
+ [TGSI_OPCODE_UADD] = { ALU_OP2_ADD_INT, tgsi_op2},
+ [TGSI_OPCODE_UDIV] = { ALU_OP0_NOP, tgsi_udiv},
+ [TGSI_OPCODE_UMAD] = { ALU_OP0_NOP, tgsi_umad},
+ [TGSI_OPCODE_UMAX] = { ALU_OP2_MAX_UINT, tgsi_op2},
+ [TGSI_OPCODE_UMIN] = { ALU_OP2_MIN_UINT, tgsi_op2},
+ [TGSI_OPCODE_UMOD] = { ALU_OP0_NOP, tgsi_umod},
+ [TGSI_OPCODE_UMUL] = { ALU_OP2_MULLO_INT, cayman_mul_int_instr},
+ [TGSI_OPCODE_USEQ] = { ALU_OP2_SETE_INT, tgsi_op2},
+ [TGSI_OPCODE_USGE] = { ALU_OP2_SETGE_UINT, tgsi_op2},
+ [TGSI_OPCODE_USHR] = { ALU_OP2_LSHR_INT, tgsi_op2},
+ [TGSI_OPCODE_USLT] = { ALU_OP2_SETGT_UINT, tgsi_op2_swap},
+ [TGSI_OPCODE_USNE] = { ALU_OP2_SETNE_INT, tgsi_op2},
+ [TGSI_OPCODE_SWITCH] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_CASE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_DEFAULT] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ENDSWITCH] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_I] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_I_MS] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_B] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_C] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_C_LZ] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_D] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_L] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_GATHER4] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SVIEWINFO] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_POS] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_SAMPLE_INFO] = { 0, tgsi_unsupported},
+ [TGSI_OPCODE_UARL] = { ALU_OP1_MOVA_INT, tgsi_eg_arl},
+ [TGSI_OPCODE_UCMP] = { ALU_OP0_NOP, tgsi_ucmp},
+ [TGSI_OPCODE_IABS] = { 0, tgsi_iabs},
+ [TGSI_OPCODE_ISSG] = { 0, tgsi_issg},
+ [TGSI_OPCODE_LOAD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_STORE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_MFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_LFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_SFENCE] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_BARRIER] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUADD] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMXCHG] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMCAS] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMAND] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMOR] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMXOR] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUMIN] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMUMAX] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMIMIN] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_ATOMIMAX] = { ALU_OP0_NOP, tgsi_unsupported},
+ [TGSI_OPCODE_TEX2] = { FETCH_OP_SAMPLE, tgsi_tex},
+ [TGSI_OPCODE_TXB2] = { FETCH_OP_SAMPLE_LB, tgsi_tex},
+ [TGSI_OPCODE_TXL2] = { FETCH_OP_SAMPLE_L, tgsi_tex},
+ [TGSI_OPCODE_IMUL_HI] = { ALU_OP2_MULHI_INT, cayman_mul_int_instr},
+ [TGSI_OPCODE_UMUL_HI] = { ALU_OP2_MULHI_UINT, cayman_mul_int_instr},
+ [TGSI_OPCODE_TG4] = { FETCH_OP_GATHER4, tgsi_tex},
+ [TGSI_OPCODE_LODQ] = { FETCH_OP_GET_LOD, tgsi_tex},
+ [TGSI_OPCODE_IBFE] = { ALU_OP3_BFE_INT, tgsi_op3},
+ [TGSI_OPCODE_UBFE] = { ALU_OP3_BFE_UINT, tgsi_op3},
+ [TGSI_OPCODE_BFI] = { ALU_OP0_NOP, tgsi_bfi},
+ [TGSI_OPCODE_BREV] = { ALU_OP1_BFREV_INT, tgsi_op2},
+ [TGSI_OPCODE_POPC] = { ALU_OP1_BCNT_INT, tgsi_op2},
+ [TGSI_OPCODE_LSB] = { ALU_OP1_FFBL_INT, tgsi_op2},
+ [TGSI_OPCODE_IMSB] = { ALU_OP1_FFBH_INT, tgsi_msb},
+ [TGSI_OPCODE_UMSB] = { ALU_OP1_FFBH_UINT, tgsi_msb},
+ [TGSI_OPCODE_INTERP_CENTROID] = { ALU_OP0_NOP, tgsi_interp_egcm},
+ [TGSI_OPCODE_INTERP_SAMPLE] = { ALU_OP0_NOP, tgsi_interp_egcm},
+ [TGSI_OPCODE_INTERP_OFFSET] = { ALU_OP0_NOP, tgsi_interp_egcm},
+ [TGSI_OPCODE_LAST] = { ALU_OP0_NOP, tgsi_unsupported},
};