Passo intermediario, ainda falta um longo caminho
[pspdecompiler.git] / allegrex.h
blobb7e39de384c89d1895a5786ebc637154f14edf07
1 #ifndef __ALLEGREX_H
2 #define __ALLEGREX_H
4 #define INSN_READ_GPR_S 0x00000001
5 #define INSN_READ_GPR_T 0x00000002
6 #define INSN_READ_GPR_D 0x00000004
7 #define INSN_READ_FPR_S 0x00000008
8 #define INSN_READ_FPR_T 0x00000010
9 #define INSN_READ_COND_CODE 0x00000020
10 #define INSN_READ_HI 0x00000040
11 #define INSN_READ_LO 0x00000080
12 #define INSN_WRITE_GPR_D 0x00000100
13 #define INSN_WRITE_GPR_T 0x00000200
14 #define INSN_WRITE_FPR_D 0x00000400
15 #define INSN_WRITE_FPR_T 0x00000800
16 #define INSN_WRITE_COND_CODE 0x00001000
17 #define INSN_WRITE_HI 0x00002000
18 #define INSN_WRITE_LO 0x00004000
19 #define INSN_JUMP 0x00008000
20 #define INSN_BRANCH 0x00010000
21 #define INSN_BRANCHLIKELY 0x00020000
22 #define INSN_LINK 0x00040000
23 #define INSN_LOAD 0x00080000
24 #define INSN_STORE 0x00100000
26 #define INSN_ALLEGREX 0x00000000
27 #define INSN_SPECIAL 0x01000000
28 #define INSN_DEBUG 0x02000000
29 #define INSN_COP0 0x03000000
30 #define INSN_FPU 0x04000000
31 #define INSN_VFPU 0x05000000
33 #define INSN_TYPE(flags) ((flags) & 0x0F000000)
35 #define INSN_ALIAS 0x80000000
37 enum allegrex_insn {
38 I_INVALID,
39 I_ADD,
40 I_ADDI,
41 I_ADDIU,
42 I_ADDU,
43 I_AND,
44 I_ANDI,
45 I_BEQ,
46 I_BEQL,
47 I_BGEZ,
48 I_BGEZAL,
49 I_BGEZL,
50 I_BGTZ,
51 I_BGTZL,
52 I_BITREV,
53 I_BLEZ,
54 I_BLEZL,
55 I_BLTZ,
56 I_BLTZL,
57 I_BLTZAL,
58 I_BLTZALL,
59 I_BNE,
60 I_BNEL,
61 I_BREAK,
62 I_CACHE,
63 I_CFC0,
64 I_CLO,
65 I_CLZ,
66 I_CTC0,
67 I_MAX,
68 I_MIN,
69 I_DBREAK,
70 I_DIV,
71 I_DIVU,
72 I_DRET,
73 I_ERET,
74 I_EXT,
75 I_INS,
76 I_J,
77 I_JR,
78 I_JALR,
79 I_JAL,
80 I_LB,
81 I_LBU,
82 I_LH,
83 I_LHU,
84 I_LL,
85 I_LUI,
86 I_LW,
87 I_LWL,
88 I_LWR,
89 I_MADD,
90 I_MADDU,
91 I_MFC0,
92 I_MFDR,
93 I_MFHI,
94 I_MFIC,
95 I_MFLO,
96 I_MOVN,
97 I_MOVZ,
98 I_MSUB,
99 I_MSUBU,
100 I_MTC0,
101 I_MTDR,
102 I_MTIC,
103 I_HALT,
104 I_MTHI,
105 I_MTLO,
106 I_MULT,
107 I_MULTU,
108 I_NOR,
109 I_OR,
110 I_ORI,
111 I_ROTR,
112 I_ROTV,
113 I_SEB,
114 I_SEH,
115 I_SB,
116 I_SC,
117 I_SH,
118 I_SLLV,
119 I_SLL,
120 I_SLT,
121 I_SLTI,
122 I_SLTIU,
123 I_SLTU,
124 I_SRA,
125 I_SRAV,
126 I_SRLV,
127 I_SRL,
128 I_SW,
129 I_SWL,
130 I_SWR,
131 I_SUB,
132 I_SUBU,
133 I_SYNC,
134 I_SYSCALL,
135 I_XOR,
136 I_XORI,
137 I_WSBH,
138 I_WSBW,
139 I_ABS_S,
140 I_ADD_S,
141 I_BC1F,
142 I_BC1FL,
143 I_BC1T,
144 I_BC1TL,
145 I_C_F_S,
146 I_C_UN_S,
147 I_C_EQ_S,
148 I_C_UEQ_S,
149 I_C_OLT_S,
150 I_C_ULT_S,
151 I_C_OLE_S,
152 I_C_ULE_S,
153 I_C_SF_S,
154 I_C_NGLE_S,
155 I_C_SEQ_S,
156 I_C_NGL_S,
157 I_C_LT_S,
158 I_C_NGE_S,
159 I_C_LE_S,
160 I_C_NGT_S,
161 I_CEIL_W_S,
162 I_CFC1,
163 I_CTC1,
164 I_CVT_S_W,
165 I_CVT_W_S,
166 I_DIV_S,
167 I_FLOOR_W_S,
168 I_LWC1,
169 I_MFC1,
170 I_MOV_S,
171 I_MTC1,
172 I_MUL_S,
173 I_NEG_S,
174 I_ROUND_W_S,
175 I_SQRT_S,
176 I_SUB_S,
177 I_SWC1,
178 I_TRUNC_W_S,
179 I_BVF,
180 I_BVFL,
181 I_BVT,
182 I_BVTL,
183 I_LV_Q,
184 I_LV_S,
185 I_LVL_Q,
186 I_LVR_Q,
187 I_MFV,
188 I_MFVC,
189 I_MTV,
190 I_MTVC,
191 I_SV_Q,
192 I_SV_S,
193 I_SVL_Q,
194 I_SVR_Q,
195 I_VABS_P,
196 I_VABS_Q,
197 I_VABS_S,
198 I_VABS_T,
199 I_VADD_P,
200 I_VADD_Q,
201 I_VADD_S,
202 I_VADD_T,
203 I_VASIN_P,
204 I_VASIN_Q,
205 I_VASIN_S,
206 I_VASIN_T,
207 I_VAVG_P,
208 I_VAVG_Q,
209 I_VAVG_T,
210 I_VBFY1_P,
211 I_VBFY1_Q,
212 I_VBFY2_Q,
213 I_VCMOVF_P,
214 I_VCMOVF_Q,
215 I_VCMOVF_S,
216 I_VCMOVF_T,
217 I_VCMOVT_P,
218 I_VCMOVT_Q,
219 I_VCMOVT_S,
220 I_VCMOVT_T,
221 I_VCMP_P,
222 I_VCMP_Q,
223 I_VCMP_S,
224 I_VCMP_T,
225 I_VCOS_P,
226 I_VCOS_Q,
227 I_VCOS_S,
228 I_VCOS_T,
229 I_VCRS_T,
230 I_VCRSP_T,
231 I_VCST_P,
232 I_VCST_Q,
233 I_VCST_S,
234 I_VCST_T,
235 I_VDET_P,
236 I_VDIV_P,
237 I_VDIV_Q,
238 I_VDIV_S,
239 I_VDIV_T,
240 I_VDOT_P,
241 I_VDOT_Q,
242 I_VDOT_T,
243 I_VEXP2_P,
244 I_VEXP2_Q,
245 I_VEXP2_S,
246 I_VEXP2_T,
247 I_VF2H_P,
248 I_VF2H_Q,
249 I_VF2ID_P,
250 I_VF2ID_Q,
251 I_VF2ID_S,
252 I_VF2ID_T,
253 I_VF2IN_P,
254 I_VF2IN_Q,
255 I_VF2IN_S,
256 I_VF2IN_T,
257 I_VF2IU_P,
258 I_VF2IU_Q,
259 I_VF2IU_S,
260 I_VF2IU_T,
261 I_VF2IZ_P,
262 I_VF2IZ_Q,
263 I_VF2IZ_S,
264 I_VF2IZ_T,
265 I_VFAD_P,
266 I_VFAD_Q,
267 I_VFAD_T,
268 I_VFIM_S,
269 I_VFLUSH,
270 I_VH2F_P,
271 I_VH2F_S,
272 I_VHDP_P,
273 I_VHDP_Q,
274 I_VHDP_T,
275 I_VHTFM2_P,
276 I_VHTFM3_T,
277 I_VHTFM4_Q,
278 I_VI2C_Q,
279 I_VI2F_P,
280 I_VI2F_Q,
281 I_VI2F_S,
282 I_VI2F_T,
283 I_VI2S_P,
284 I_VI2S_Q,
285 I_VI2UC_Q,
286 I_VI2US_P,
287 I_VI2US_Q,
288 I_VIDT_P,
289 I_VIDT_Q,
290 I_VIIM_S,
291 I_VLGB_S,
292 I_VLOG2_P,
293 I_VLOG2_Q,
294 I_VLOG2_S,
295 I_VLOG2_T,
296 I_VMAX_P,
297 I_VMAX_Q,
298 I_VMAX_S,
299 I_VMAX_T,
300 I_VMFVC,
301 I_VMIDT_P,
302 I_VMIDT_Q,
303 I_VMIDT_T,
304 I_VMIN_P,
305 I_VMIN_Q,
306 I_VMIN_S,
307 I_VMIN_T,
308 I_VMMOV_P,
309 I_VMMOV_Q,
310 I_VMMOV_T,
311 I_VMMUL_P,
312 I_VMMUL_Q,
313 I_VMMUL_T,
314 I_VMONE_P,
315 I_VMONE_Q,
316 I_VMONE_T,
317 I_VMOV_P,
318 I_VMOV_Q,
319 I_VMOV_S,
320 I_VMOV_T,
321 I_VMSCL_P,
322 I_VMSCL_Q,
323 I_VMSCL_T,
324 I_VMTVC,
325 I_VMUL_P,
326 I_VMUL_Q,
327 I_VMUL_S,
328 I_VMUL_T,
329 I_VMZERO_P,
330 I_VMZERO_Q,
331 I_VMZERO_T,
332 I_VNEG_P,
333 I_VNEG_Q,
334 I_VNEG_S,
335 I_VNEG_T,
336 I_VNOP,
337 I_VNRCP_P,
338 I_VNRCP_Q,
339 I_VNRCP_S,
340 I_VNRCP_T,
341 I_VNSIN_P,
342 I_VNSIN_Q,
343 I_VNSIN_S,
344 I_VNSIN_T,
345 I_VOCP_P,
346 I_VOCP_Q,
347 I_VOCP_S,
348 I_VOCP_T,
349 I_VONE_P,
350 I_VONE_Q,
351 I_VONE_S,
352 I_VONE_T,
353 I_VPFXD,
354 I_VPFXS,
355 I_VPFXT,
356 I_VQMUL_Q,
357 I_VRCP_P,
358 I_VRCP_Q,
359 I_VRCP_S,
360 I_VRCP_T,
361 I_VREXP2_P,
362 I_VREXP2_Q,
363 I_VREXP2_S,
364 I_VREXP2_T,
365 I_VRNDF1_P,
366 I_VRNDF1_Q,
367 I_VRNDF1_S,
368 I_VRNDF1_T,
369 I_VRNDF2_P,
370 I_VRNDF2_Q,
371 I_VRNDF2_S,
372 I_VRNDF2_T,
373 I_VRNDI_P,
374 I_VRNDI_Q,
375 I_VRNDI_S,
376 I_VRNDI_T,
377 I_VRNDS_S,
378 I_VROT_P,
379 I_VROT_Q,
380 I_VROT_T,
381 I_VRSQ_P,
382 I_VRSQ_Q,
383 I_VRSQ_S,
384 I_VRSQ_T,
385 I_VS2I_P,
386 I_VS2I_S,
387 I_VSAT0_P,
388 I_VSAT0_Q,
389 I_VSAT0_S,
390 I_VSAT0_T,
391 I_VSAT1_P,
392 I_VSAT1_Q,
393 I_VSAT1_S,
394 I_VSAT1_T,
395 I_VSBN_S,
396 I_VSBZ_S,
397 I_VSCL_P,
398 I_VSCL_Q,
399 I_VSCL_T,
400 I_VSCMP_P,
401 I_VSCMP_Q,
402 I_VSCMP_S,
403 I_VSCMP_T,
404 I_VSGE_P,
405 I_VSGE_Q,
406 I_VSGE_S,
407 I_VSGE_T,
408 I_VSGN_P,
409 I_VSGN_Q,
410 I_VSGN_S,
411 I_VSGN_T,
412 I_VSIN_P,
413 I_VSIN_Q,
414 I_VSIN_S,
415 I_VSIN_T,
416 I_VSLT_P,
417 I_VSLT_Q,
418 I_VSLT_S,
419 I_VSLT_T,
420 I_VSOCP_P,
421 I_VSOCP_S,
422 I_VSQRT_P,
423 I_VSQRT_Q,
424 I_VSQRT_S,
425 I_VSQRT_T,
426 I_VSRT1_Q,
427 I_VSRT2_Q,
428 I_VSRT3_Q,
429 I_VSRT4_Q,
430 I_VSUB_P,
431 I_VSUB_Q,
432 I_VSUB_S,
433 I_VSUB_T,
434 I_VSYNC,
435 I_VT4444_Q,
436 I_VT5551_Q,
437 I_VT5650_Q,
438 I_VTFM2_P,
439 I_VTFM3_T,
440 I_VTFM4_Q,
441 I_VUS2I_P,
442 I_VUS2I_S,
443 I_VWB_Q,
444 I_VWBN_S,
445 I_VZERO_P,
446 I_VZERO_Q,
447 I_VZERO_S,
448 I_VZERO_T,
449 I_MFVME,
450 I_MTVME
453 struct allegrex_instruction
455 enum allegrex_insn insn;
456 const char *name;
457 unsigned int opcode;
458 unsigned int mask;
459 const char *fmt;
460 unsigned int flags;
463 extern const char *gpr_names[];
465 char *allegrex_disassemble (unsigned int opcode, unsigned int PC, int prtall);
466 const struct allegrex_instruction *allegrex_decode (unsigned int opcode, int allowalias);
468 #endif /* __ALLEGREX_H */