OSDN Git Service

r600g: kill off r600_shader_tgsi_instruction::{tgsi_opcode,is_op3}
authorEmil Velikov <emil.l.velikov@gmail.com>
Mon, 16 Mar 2015 14:47:08 +0000 (14:47 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Tue, 17 Mar 2015 23:52:35 +0000 (23:52 +0000)
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@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/r600/r600_shader.c

index 4e67447..acac89f 100644 (file)
@@ -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},
 };