[Mesa-dev] [PATCH 2/3] r600g: kill off r600_shader_tgsi_instruction::{tgsi_opcode, is_op3}

Emil Velikov emil.l.velikov at gmail.com
Mon Mar 16 07:47:08 PDT 2015


Both of which are no longer used. Use designated initializer to make
things obvious as people add/remove TGSI_OPCODEs.

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 src/gallium/drivers/r600/r600_shader.c | 1180 ++++++++++++++++----------------
 1 file changed, 589 insertions(+), 591 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 4e67447..acac89f 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},
 };
-- 
2.3.1



More information about the mesa-dev mailing list