7 "zero",
"at",
"v0",
"v1",
"a0",
"a1",
"a2",
"a3",
8 "t0",
"t1",
"t2",
"t3",
"t4",
"t5",
"t6",
"t7",
9 "s0",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6",
"s7",
10 "t8",
"t9",
"k0",
"k1",
"gp",
"sp",
"s8",
"ra"
14 "SP_MEM_ADDR",
"SP_DRAM_ADDR",
"SP_RD_LEN",
"SP_WR_LEN",
15 "SP_STATUS",
"SP_DMA_FULL",
"SP_DMA_BUSY",
"SP_SEMAPHORE",
16 "DPC_START",
"DPC_END",
"DPC_CURRENT",
"DPC_STATUS",
17 "DPC_CLOCK",
"DPC_BUF_BUSY",
"DPC_PIPE_BUSY",
"DPC_TMEM_BUSY"
56 "$c0",
"$c1",
"$c2",
"$c3",
"$c4",
"$c5",
"$c6",
"$c7",
57 "$c8",
"$c9",
"$c10",
"$c11",
"$c12",
"$c13",
"$c14",
"$c15"
61 "$vco",
"$vcc",
"$vce",
"???"
65 "ACC_H",
"ACC_M",
"ACC_L",
"???"
69 "$v0",
"$v1",
"$v2",
"$v3",
"$v4",
"$v5",
"$v6",
"$v7",
70 "$v8",
"$v9",
"$v10",
"$v11",
"$v12",
"$v13",
"$v14",
"$v15",
71 "$v16",
"$v17",
"$v18",
"$v19",
"$v20",
"$v21",
"$v22",
"$v23",
72 "$v24",
"$v25",
"$v26",
"$v27",
"$v28",
"$v29",
"$v30",
"$v31"
76 "",
"[?]",
"[0q]",
"[1q]",
"[0h]",
"[1h]",
"[2h]",
"[3h]",
77 "[0]",
"[1]",
"[2]",
"[3]",
"[4]",
"[5]",
"[6]",
"[7]"
82 { RSP_OPND_GP_REG, 21, 0x1f, 0, 0, 0, 0, 0 }
84 { RSP_OPND_GP_REG, 16, 0x1f, 0, 0, 0, 0, 0 }
86 { RSP_OPND_GP_REG, 11, 0x1f, 0, 0, 0, 0, 0 }
88 { RSP_OPND_SHIFT_AMOUNT, 6, 0x1f, 0, 0, 0, 0, 0 }
90 { RSP_OPND_ZIMM, 0, 0xffff, 16, 0, 0, 0, 0 }
91 #define ZIMM_DECODER \
92 { RSP_OPND_ZIMM, 0, 0xffff, 0, 0, 0, 0, 0 }
93 #define SIMM_DECODER \
94 { RSP_OPND_SIMM, 0, 0, 0, 0, 0xffff, 0x8000, 0 }
95 #define OFFSET_DECODER \
96 { RSP_OPND_OFFSET, 0, 0, 0, 0, 0xffff, 0x8000, 2 }
97 #define BASE_OFFSET_DECODER \
98 { RSP_OPND_BASE_OFFSET, 21, 0x1f, 0, 0, 0xffff, 0x8000, 0 }
99 #define TARGET_DECODER \
100 { RSP_OPND_TARGET, 0, 0x03ff, 2, 0, 0, 0, 0 }
101 #define C0_REG_DECODER \
102 { RSP_OPND_C0_REG, 11, 0x0f, 0, 0, 0, 0, 0 }
103 #define C2_CREG_DECODER \
104 { RSP_OPND_C2_CREG, 11, 0x03, 0, 0, 0, 0, 0 }
105 #define C2_ACCU_DECODER \
106 { RSP_OPND_C2_ACCU, 21, 0x03, 0, 0, 0, 0, 0 }
108 { RSP_OPND_C2_VREG, 11, 0x1f, 0, 0, 0, 0, 0 }
110 { RSP_OPND_C2_VREG, 6, 0x1f, 0, 0, 0, 0, 0 }
111 #define VT_BYTE_DECODER \
112 { RSP_OPND_C2_VREG_BYTE, 16, 0x1f, 0, 7, 0xf, 0, 0 }
113 #define VS_BYTE_DECODER \
114 { RSP_OPND_C2_VREG_BYTE, 11, 0x1f, 0, 7, 0xf, 0, 0 }
115 #define VT_SCALAR_DECODER \
116 { RSP_OPND_C2_VREG_SCALAR, 16, 0x1f, 0, 21, 0x7, 0, 0 }
117 #define VD_SCALAR_DECODER \
118 { RSP_OPND_C2_VREG_SCALAR, 6, 0x1f, 0, 11, 0x7, 0, 0 }
119 #define VT_ELEMENT_DECODER \
120 { RSP_OPND_C2_VREG_ELEMENT, 16, 0x1f, 0, 21, 0xf, 0, 0 }
121 #define BASE_VOFFSET1_DECODER \
122 { RSP_OPND_BASE_OFFSET, 21, 0x1f, 0, 0, 0x7f, 0x40, 0 }
123 #define BASE_VOFFSET2_DECODER \
124 { RSP_OPND_BASE_OFFSET, 21, 0x1f, 0, 0, 0x7f, 0x40, 1 }
125 #define BASE_VOFFSET4_DECODER \
126 { RSP_OPND_BASE_OFFSET, 21, 0x1f, 0, 0, 0x7f, 0x40, 2 }
127 #define BASE_VOFFSET8_DECODER \
128 { RSP_OPND_BASE_OFFSET, 21, 0x1f, 0, 0, 0x7f, 0x40, 3 }
129 #define BASE_VOFFSET16_DECODER \
130 { RSP_OPND_BASE_OFFSET, 21, 0x1f, 0, 0, 0x7f, 0x40, 4 }
133 #define OPNDS_NONE 0,
134 #define OPNDS_TARGET \
135 1, { TARGET_DECODER }
136 #define OPNDS_RS_OFFSET \
137 2, { RS_DECODER, OFFSET_DECODER }
138 #define OPNDS_RS_RT_OFFSET \
139 3, { RS_DECODER, RT_DECODER, OFFSET_DECODER }
140 #define OPNDS_RT_BASE_OFFSET \
141 2, { RT_DECODER, BASE_OFFSET_DECODER }
144 #define OPNDS_RT_LUI \
145 2, { RT_DECODER, LUI_DECODER }
146 #define OPNDS_RT_RS_SIMM \
147 3, { RT_DECODER, RS_DECODER, SIMM_DECODER }
148 #define OPNDS_RT_RS_ZIMM \
149 3, { RT_DECODER, RS_DECODER, ZIMM_DECODER }
150 #define OPNDS_RD_RT_SA \
151 3, { RD_DECODER, RT_DECODER, SA_DECODER }
152 #define OPNDS_RD_RT_RS \
153 3, { RD_DECODER, RT_DECODER, RS_DECODER }
154 #define OPNDS_RD_RS_RT \
155 3, { RD_DECODER, RS_DECODER, RT_DECODER }
156 #define OPNDS_RT_C0_REG \
157 2, { RT_DECODER, C0_REG_DECODER }
158 #define OPNDS_RT_C2_CREG \
159 2, { RT_DECODER, C2_CREG_DECODER }
160 #define OPNDS_RT_VSB \
161 2, { RT_DECODER, VS_BYTE_DECODER }
162 #define OPNDS_VDS_VTS \
163 2, { VD_SCALAR_DECODER, VT_SCALAR_DECODER }
164 #define OPNDS_VTB_BASE_OFFSET1 \
165 2, { VT_BYTE_DECODER, BASE_VOFFSET1_DECODER }
166 #define OPNDS_VTB_BASE_OFFSET2 \
167 2, { VT_BYTE_DECODER, BASE_VOFFSET2_DECODER }
168 #define OPNDS_VTB_BASE_OFFSET4 \
169 2, { VT_BYTE_DECODER, BASE_VOFFSET4_DECODER }
170 #define OPNDS_VTB_BASE_OFFSET8 \
171 2, { VT_BYTE_DECODER, BASE_VOFFSET8_DECODER }
172 #define OPNDS_VTB_BASE_OFFSET16 \
173 2, { VT_BYTE_DECODER, BASE_VOFFSET16_DECODER }
174 #define OPNDS_VD_VS_C2_ACCU \
175 3, { VD_DECODER, VS_DECODER, C2_ACCU_DECODER }
176 #define OPNDS_VD_VS_VTE \
177 3, { VD_DECODER, VS_DECODER, VT_ELEMENT_DECODER }
181 { "invalid", RSP_OP_INVALID, OPNDS_NONE }
183 { "nop", RSP_OP_NOP, OPNDS_NONE }
185 { "sll", RSP_OP_SLL, OPNDS_RD_RT_SA }
187 { "srl", RSP_OP_SRL, OPNDS_RD_RT_SA }
189 { "sra", RSP_OP_SRA, OPNDS_RD_RT_SA }
191 { "sllv", RSP_OP_SLLV, OPNDS_RD_RT_RS }
193 { "srlv", RSP_OP_SRLV, OPNDS_RD_RT_RS }
195 { "srav", RSP_OP_SRAV, OPNDS_RD_RT_RS }
197 { "jr", RSP_OP_JR, OPNDS_RS }
199 { "break", RSP_OP_BREAK, OPNDS_NONE }
201 { "add", RSP_OP_ADD, OPNDS_RD_RS_RT }
203 { "addu", RSP_OP_ADDU, OPNDS_RD_RS_RT }
205 { "sub", RSP_OP_SUB, OPNDS_RD_RS_RT }
207 { "subu", RSP_OP_SUBU, OPNDS_RD_RS_RT }
209 { "and", RSP_OP_AND, OPNDS_RD_RS_RT }
211 { "or", RSP_OP_OR, OPNDS_RD_RS_RT }
213 { "xor", RSP_OP_XOR, OPNDS_RD_RS_RT }
215 { "nor", RSP_OP_NOR, OPNDS_RD_RS_RT }
217 { "slt", RSP_OP_SLT, OPNDS_RD_RS_RT }
219 { "sltu", RSP_OP_SLTU, OPNDS_RD_RS_RT }
221 { "bltz", RSP_OP_BLTZ, OPNDS_RS_OFFSET }
223 { "bgez", RSP_OP_BGEZ, OPNDS_RS_OFFSET }
225 { "bltzal", RSP_OP_BLTZAL, OPNDS_RS_OFFSET }
227 { "bgezal", RSP_OP_BGEZAL, OPNDS_RS_OFFSET }
229 { "mfc0", RSP_OP_MFC0, OPNDS_RT_C0_REG }
231 { "mtc0", RSP_OP_MTC0, OPNDS_RT_C0_REG }
233 { "mfc2", RSP_OP_MFC2, OPNDS_RT_VSB }
235 { "mtc2", RSP_OP_MTC2, OPNDS_RT_VSB }
237 { "cfc2", RSP_OP_CFC2, OPNDS_RT_C2_CREG }
239 { "ctc2", RSP_OP_CTC2, OPNDS_RT_C2_CREG }
241 { "vmulf", RSP_OP_VMULF, OPNDS_VD_VS_VTE }
243 { "vmulu", RSP_OP_VMULU, OPNDS_VD_VS_VTE }
245 { "vmudl", RSP_OP_VMUDL, OPNDS_VD_VS_VTE }
247 { "vmudm", RSP_OP_VMUDM, OPNDS_VD_VS_VTE }
249 { "vmudn", RSP_OP_VMUDN, OPNDS_VD_VS_VTE }
251 { "vmudh", RSP_OP_VMUDH, OPNDS_VD_VS_VTE }
253 { "vmacf", RSP_OP_VMACF, OPNDS_VD_VS_VTE }
255 { "vmacu", RSP_OP_VMACU, OPNDS_VD_VS_VTE }
257 { "vmadl", RSP_OP_VMADL, OPNDS_VD_VS_VTE }
259 { "vmadm", RSP_OP_VMADM, OPNDS_VD_VS_VTE }
261 { "vmadn", RSP_OP_VMADN, OPNDS_VD_VS_VTE }
263 { "vmadh", RSP_OP_VMADH, OPNDS_VD_VS_VTE }
265 { "vadd", RSP_OP_VADD, OPNDS_VD_VS_VTE }
267 { "vsub", RSP_OP_VSUB, OPNDS_VD_VS_VTE }
269 { "vabs", RSP_OP_VABS, OPNDS_VD_VS_VTE }
271 { "vaddc", RSP_OP_VADDC, OPNDS_VD_VS_VTE }
273 { "vsubc", RSP_OP_VSUBC, OPNDS_VD_VS_VTE }
275 { "vsar", RSP_OP_VSAR, OPNDS_VD_VS_C2_ACCU }
277 { "vlt", RSP_OP_VLT, OPNDS_VD_VS_VTE }
279 { "veq", RSP_OP_VEQ, OPNDS_VD_VS_VTE }
281 { "vne", RSP_OP_VNE, OPNDS_VD_VS_VTE }
283 { "vge", RSP_OP_VGE, OPNDS_VD_VS_VTE }
285 { "vcl", RSP_OP_VCL, OPNDS_VD_VS_VTE }
287 { "vch", RSP_OP_VCH, OPNDS_VD_VS_VTE }
289 { "vcr", RSP_OP_VCR, OPNDS_VD_VS_VTE }
291 { "vmrg", RSP_OP_VMRG, OPNDS_VD_VS_VTE }
293 { "vand", RSP_OP_VAND, OPNDS_VD_VS_VTE }
295 { "vnand", RSP_OP_VNAND, OPNDS_VD_VS_VTE }
297 { "vor", RSP_OP_VOR, OPNDS_VD_VS_VTE }
299 { "vnor", RSP_OP_VNOR, OPNDS_VD_VS_VTE }
301 { "vxor", RSP_OP_VXOR, OPNDS_VD_VS_VTE }
303 { "vnxor", RSP_OP_VNXOR, OPNDS_VD_VS_VTE }
305 { "vrcp", RSP_OP_VRCP, OPNDS_VDS_VTS }
307 { "vrcpl", RSP_OP_VRCPL, OPNDS_VDS_VTS }
309 { "vrcph", RSP_OP_VRCPH, OPNDS_VDS_VTS }
311 { "vmov", RSP_OP_VMOV, OPNDS_VDS_VTS }
313 { "vrsq", RSP_OP_VRSQ, OPNDS_VDS_VTS }
315 { "vrsql", RSP_OP_VRSQL, OPNDS_VDS_VTS }
317 { "vrsqh", RSP_OP_VRSQH, OPNDS_VDS_VTS }
319 { "vnop", RSP_OP_VNOP, OPNDS_NONE }
321 { "lbv", RSP_OP_LBV, OPNDS_VTB_BASE_OFFSET1 }
323 { "lsv", RSP_OP_LSV, OPNDS_VTB_BASE_OFFSET2 }
325 { "llv", RSP_OP_LLV, OPNDS_VTB_BASE_OFFSET4 }
327 { "ldv", RSP_OP_LDV, OPNDS_VTB_BASE_OFFSET8 }
329 { "lqv", RSP_OP_LQV, OPNDS_VTB_BASE_OFFSET16 }
331 { "lrv", RSP_OP_LRV, OPNDS_VTB_BASE_OFFSET16 }
333 { "lpv", RSP_OP_LPV, OPNDS_VTB_BASE_OFFSET8 }
335 { "luv", RSP_OP_LUV, OPNDS_VTB_BASE_OFFSET8 }
337 { "lhv", RSP_OP_LHV, OPNDS_VTB_BASE_OFFSET16 }
339 { "lfv", RSP_OP_LFV, OPNDS_VTB_BASE_OFFSET16 }
341 { "ltv", RSP_OP_LTV, OPNDS_VTB_BASE_OFFSET16 }
343 { "sbv", RSP_OP_SBV, OPNDS_VTB_BASE_OFFSET1 }
345 { "ssv", RSP_OP_SSV, OPNDS_VTB_BASE_OFFSET2 }
347 { "slv", RSP_OP_SLV, OPNDS_VTB_BASE_OFFSET4 }
349 { "sdv", RSP_OP_SDV, OPNDS_VTB_BASE_OFFSET8 }
351 { "sqv", RSP_OP_SQV, OPNDS_VTB_BASE_OFFSET16 }
353 { "srv", RSP_OP_SRV, OPNDS_VTB_BASE_OFFSET8 }
355 { "spv", RSP_OP_SPV, OPNDS_VTB_BASE_OFFSET8 }
357 { "suv", RSP_OP_SUV, OPNDS_VTB_BASE_OFFSET16 }
359 { "shv", RSP_OP_SHV, OPNDS_VTB_BASE_OFFSET16 }
361 { "sfv", RSP_OP_SFV, OPNDS_VTB_BASE_OFFSET16 }
363 { "swv", RSP_OP_SWV, OPNDS_VTB_BASE_OFFSET16 }
365 { "stv", RSP_OP_STV, OPNDS_VTB_BASE_OFFSET16 }
367 { "j", RSP_OP_J, OPNDS_TARGET }
369 { "jal", RSP_OP_JAL, OPNDS_TARGET }
371 { "beq", RSP_OP_BEQ, OPNDS_RS_RT_OFFSET }
373 { "bne", RSP_OP_BNE, OPNDS_RS_RT_OFFSET }
375 { "blez", RSP_OP_BLEZ, OPNDS_RS_RT_OFFSET }
377 { "bgtz", RSP_OP_BGTZ, OPNDS_RS_RT_OFFSET }
379 { "addi", RSP_OP_ADDI, OPNDS_RT_RS_SIMM }
381 { "addiu", RSP_OP_ADDIU, OPNDS_RT_RS_SIMM }
383 { "slti", RSP_OP_SLTI, OPNDS_RT_RS_SIMM }
385 { "sltiu", RSP_OP_SLTIU, OPNDS_RT_RS_SIMM }
387 { "andi", RSP_OP_ANDI, OPNDS_RT_RS_ZIMM }
389 { "ori", RSP_OP_ORI, OPNDS_RT_RS_ZIMM }
391 { "xori", RSP_OP_XORI, OPNDS_RT_RS_ZIMM }
393 { "lui", RSP_OP_LUI, OPNDS_RT_LUI }
395 { "lb", RSP_OP_LB, OPNDS_RT_BASE_OFFSET }
397 { "lh", RSP_OP_LH, OPNDS_RT_BASE_OFFSET }
399 { "lw", RSP_OP_LW, OPNDS_RT_BASE_OFFSET }
401 { "lbu", RSP_OP_LBU, OPNDS_RT_BASE_OFFSET }
403 { "lhu", RSP_OP_LHU, OPNDS_RT_BASE_OFFSET }
405 { "sb", RSP_OP_SB, OPNDS_RT_BASE_OFFSET }
407 { "sh", RSP_OP_SH, OPNDS_RT_BASE_OFFSET }
409 { "sw", RSP_OP_SW, OPNDS_RT_BASE_OFFSET }
596 for (opnd = 0; opnd < rz_instr.
noperands; opnd++) {
static const rsp_instruction_priv * rsp_decode_priv(ut32 iw)
rsp_instruction rsp_instruction_decode(ut64 pc, ut32 iw)
const char * rsp_c0_reg_soft_names[]
const char * rsp_gp_reg_soft_names[]
static st32 rsp_sign_extend(st32 x, st32 m)
const char * rsp_c0_reg_names[]
const char * rsp_c2_vreg_names[]
const char * rsp_c2_accu_names[]
const char * rsp_gp_reg_names[]
static const rsp_instruction_priv rsp_op_table[]
const char * rsp_c2_creg_names[]
const char * rsp_c2_vreg_element_names[]
static rsp_operand rsp_operand_decode(ut64 pc, ut32 iw, const rsp_operand_decoder *odec)
static const rsp_op_escape rsp_escapes_table[]
static ut64 rsp_mem_addr(ut64 addr, ut64 base)
rsp_operand_decoder odecs[RSP_MAX_OPNDS]
rsp_operand operands[RSP_MAX_OPNDS]
ut64(WINAPI *w32_GetEnabledXStateFeatures)()