ROSE  0.9.9.139
InstructionEnumsM68k.h
1 #ifndef ROSE_InstructionEnumsM68k_H
2 #define ROSE_InstructionEnumsM68k_H
3 /* References:
4  * [1] "M68000 PM/AD REV.1 Programmers Reference Manual (Includes CPU32 Instructions)" Downloaded from the
5  * Freescale website on 2013-10-07.
6  */
7 
12 enum M68kFamily {
13  m68k_family = 0xffffffff,
14  // Generation one (internally 16/32-bit and produced with 8-, 16-, and 32-bit interfaces)
15  m68k_generation_1 = 0x000000ff,
16  m68k_68000_only = 0x00000001,
17  m68k_68ec000 = 0x00000002,
18  m68k_68hc000 = 0x00000004,
19  m68k_68000 = 0x00000007,
20  m68k_68008 = 0x00000008,
21  m68k_68010 = 0x00000010,
22  m68k_68012 = 0x00000020,
23  // Generation two (internally fully 32-bit)
24  m68k_generation_2 = 0x0000ff00,
25  m68k_68020_only = 0x00000100,
26  m68k_68ec020 = 0x00000200,
27  m68k_68020 = 0x00000300,
28  m68k_68030_only = 0x00000400,
29  m68k_68ec030 = 0x00001000,
30  m68k_68030 = 0x00002000,
31  // Generation three (pipelined)
32  m68k_generation_3 = 0x00ff0000,
33  m68k_68040_only = 0x00010000,
34  m68k_68ec040 = 0x00020000,
35  m68k_68lc040 = 0x00040000,
36  m68k_68040 = 0x00070000,
37  // Freescale CPUs based on m68k
38  m68k_freescale = 0xff000000,
39  m68k_freescale_cpu32= 0x01000000,
40  m68k_freescale_isaa = 0x02000000,
41  m68k_freescale_isab = 0x04000000,
42  m68k_freescale_isac = 0x08000000,
43  m68k_freescale_fpu = 0x10000000,
44  m68k_freescale_mac = 0x20000000,
45  m68k_freescale_emac = 0x40000000,
46  m68k_freescale_emacb= 0x80000000
47 };
48 
49 enum M68kRegisterClass {
50  m68k_regclass_data,
51  m68k_regclass_addr,
52  m68k_regclass_fpr,
53  m68k_regclass_spr,
54  m68k_regclass_mac,
55  m68k_regclass_sup
56 };
57 
58 enum M68kSpecialPurposeRegister {
59  m68k_spr_pc,
60  m68k_spr_sr,
61  m68k_spr_fpcr,
62  m68k_spr_fpsr,
63  m68k_spr_fpiar
64 };
65 
66 enum M68kMacRegister {
67  m68k_mac_macsr,
68  m68k_mac_acc0,
69  m68k_mac_acc1,
70  m68k_mac_acc2,
71  m68k_mac_acc3,
72  m68k_mac_ext01,
73  m68k_mac_ext23,
74  m68k_mac_ext0,
75  m68k_mac_ext1,
76  m68k_mac_ext2,
77  m68k_mac_ext3,
78  m68k_mac_mask
79 };
80 
81 enum M68kEmacRegister {
82  m68k_emac_macsr,
83  m68k_emac_acc0,
84  m68k_emac_acc1,
85  m68k_emac_acc2,
86  m68k_emac_acc3,
87  m68k_emac_mask
88 };
89 
90 enum M68kSupervisorRegister {
91  m68k_sup_vbr,
92  m68k_sup_ssp,
93  m68k_sup_sfc,
94  m68k_sup_dfc,
95  m68k_sup_cacr,
96  m68k_sup_asid,
97  m68k_sup_acr0,
98  m68k_sup_acr1,
99  m68k_sup_acr2,
100  m68k_sup_acr3,
101  m68k_sup_mmubar,
102  m68k_sup_rombar0,
103  m68k_sup_rombar1,
104  m68k_sup_rambar0,
105  m68k_sup_rambar1,
106  m68k_sup_mbar,
107  m68k_sup_mpcr,
108  m68k_sup_edrambar,
109  m68k_sup_secmbar,
110  m68k_sup_0_pcr1,
111  m68k_sup_0_pcr2,
112  m68k_sup_0_pcr3,
113  m68k_sup_1_pcr1,
114  m68k_sup_1_pcr2,
115  m68k_sup_1_pcr3
116 };
117 
177 enum M68kEffectiveAddressMode {
178  m68k_eam_unknown = 0,
179 
180  // single bits
181  m68k_eam_drd = 0x00000001,
182  m68k_eam_ard = 0x00000002,
183  m68k_eam_ari = 0x00000004,
184  m68k_eam_inc = 0x00000008,
185  m68k_eam_dec = 0x00000010,
186  m68k_eam_dsp = 0x00000020,
187  m68k_eam_idx8 = 0x00000040,
188  m68k_eam_idxbd = 0x00000080,
189  m68k_eam_mpost = 0x00000100,
190  m68k_eam_mpre = 0x00000200,
191  m68k_eam_pcdsp = 0x00000400,
192  m68k_eam_pcidx8 = 0x00000800,
193  m68k_eam_pcidxbd = 0x00001000,
194  m68k_eam_pcmpost = 0x00002000,
195  m68k_eam_pcmpre = 0x00004000,
196  m68k_eam_absw = 0x00008000,
197  m68k_eam_absl = 0x00010000,
198  m68k_eam_imm = 0x00020000,
200  // masks for groups of rows from the table above.
201  m68k_eam_all = 0x0003ffff,
202  m68k_eam_rd = 0x00000003,
203  m68k_eam_ri = 0x0000003c,
204  m68k_eam_idx = 0x000000c0,
205  m68k_eam_mi = 0x00000300,
206  m68k_eam_pci = 0x00000400, // NO_STRINGIFY
207  m68k_eam_pcidx = 0x00001800,
208  m68k_eam_pcmi = 0x00006000,
209  m68k_eam_abs = 0x00018000,
211  // masks for the data, mem, ctl, alter, and 234 columns of the table above.
212  m68k_eam_data = 0x0003fffd,
213  m68k_eam_memory = 0x0003fffc,
214  m68k_eam_control = 0x0001ffe4,
216  m68k_eam_alter = 0x0001e3ff,
221  m68k_eam_234 = 0x00007380,
223  // additional useful masks
224  m68k_eam_direct = 0x00000003, // NO_STRINGIFY
225  m68k_eam_pc = 0x00007c00
226 };
227 
231 enum M68kDataFormat {
232  m68k_fmt_i32 = 0,
233  m68k_fmt_f32 = 1,
234  m68k_fmt_f96 = 2,
235  m68k_fmt_p96 = 3,
236  m68k_fmt_i16 = 4,
237  m68k_fmt_f64 = 5,
238  m68k_fmt_i8 = 6,
239  m68k_fmt_unknown = 255
240 };
241 
242 enum M68kInstructionKind {
243  m68k_unknown_instruction,
244  m68k_abcd,
245  m68k_add,
246  m68k_adda,
247  m68k_addi,
248  m68k_addq,
249  m68k_addx,
250  m68k_and,
251  m68k_andi,
252  m68k_asl,
253  m68k_asr,
254  m68k_bcc,
255  m68k_bcs,
256  m68k_beq,
257  m68k_bge,
258  m68k_bgt,
259  m68k_bhi,
260  m68k_ble,
261  m68k_bls,
262  m68k_blt,
263  m68k_bmi,
264  m68k_bne,
265  m68k_bpl,
266  m68k_bvc,
267  m68k_bvs,
268  m68k_bchg,
269  m68k_bclr,
270  m68k_bfchg,
271  m68k_bfclr,
272  m68k_bfexts,
273  m68k_bfextu,
274 // m68k_bfffo, /**< Find first one in bit field */
275  m68k_bfins,
276  m68k_bfset,
277  m68k_bftst,
278 // m68k_bitrev, /**< Bit reverse register */
279  m68k_bkpt,
280  m68k_bra,
281  m68k_bset,
282  m68k_bsr,
283  m68k_btst,
284 // m68k_byterev, /**< Byte reverse register */
285  m68k_callm,
286  m68k_cas,
287  m68k_cas2,
288  m68k_chk,
289  m68k_chk2,
290  m68k_clr,
291  m68k_cmp,
292  m68k_cmp2,
293  m68k_cmpa,
294  m68k_cmpi,
295  m68k_cmpm,
296  m68k_cpusha,
297  m68k_cpushl,
298  m68k_cpushp,
299  m68k_dbt,
300  m68k_dbf,
301  m68k_dbhi,
302  m68k_dbls,
303  m68k_dbcc,
304  m68k_dbcs,
305  m68k_dbne,
306  m68k_dbeq,
307  m68k_dbvc,
308  m68k_dbvs,
309  m68k_dbpl,
310  m68k_dbmi,
311  m68k_dbge,
312  m68k_dblt,
313  m68k_dbgt,
314  m68k_dble,
315  m68k_divs,
316  m68k_divsl,
317  m68k_divu,
318  m68k_divul,
319  m68k_eor,
320  m68k_eori,
321  m68k_exg,
322  m68k_ext,
323  m68k_extb,
324  m68k_fabs,
325  m68k_fadd,
326  m68k_fbeq,
327  m68k_fbne,
328  m68k_fbgt,
329  m68k_fbngt,
330  m68k_fbge,
331  m68k_fbnge,
332  m68k_fblt,
333  m68k_fbnlt,
334  m68k_fble,
335  m68k_fbnle,
336  m68k_fbgl,
337  m68k_fbngl,
338  m68k_fbgle,
339  m68k_fbngle,
340  m68k_fbogt,
341  m68k_fbule,
342  m68k_fboge,
343  m68k_fbult,
344  m68k_fbolt,
345  m68k_fbuge,
346  m68k_fbole,
347  m68k_fbugt,
348  m68k_fbogl,
349  m68k_fbueq,
350  m68k_fbor,
351  m68k_fbun,
352  m68k_fbf,
353  m68k_fbt,
354  m68k_fbsf,
355  m68k_fbst,
356  m68k_fbseq,
357  m68k_fbsne,
358  m68k_fcmp,
359  m68k_fdabs,
360  m68k_fdadd,
361  m68k_fddiv,
362  m68k_fdiv,
363  m68k_fdmove,
364  m68k_fdmul,
365  m68k_fdneg,
366  m68k_fdsqrt,
367  m68k_fdsub,
368 // m68k_ff1, /**< Find first one in register */
369  m68k_fint,
370  m68k_fintrz,
371  m68k_fmove,
372  m68k_fmovem,
373  m68k_fmul,
374  m68k_fneg,
375  m68k_fnop,
376 // m68k_frestore,
377  m68k_fsabs,
378  m68k_fsadd,
379 // m68k_fsave,
380  m68k_fsdiv,
381  m68k_fsmove,
382  m68k_fsmul,
383  m68k_fsneg,
384  m68k_fsqrt,
385  m68k_fssqrt,
386  m68k_fssub,
387  m68k_fsub,
388  m68k_ftst,
389 // m68k_halt, /**< Halt the CPU */
390  m68k_illegal,
391 // m68k_intouch,
392  m68k_jmp,
393  m68k_jsr,
394  m68k_lea,
395  m68k_link,
396  m68k_lsl,
397  m68k_lsr,
398  m68k_mac,
399  m68k_mov3q,
400  m68k_movclr,
401  m68k_move,
402  m68k_move_acc,
403  m68k_move_accext,
404  m68k_move_ccr,
405  m68k_move_macsr,
406  m68k_move_mask,
407  m68k_move_sr,
408  m68k_move16,
409  m68k_movea,
410  m68k_movec,
411  m68k_movem,
412  m68k_movep,
413  m68k_moveq,
414  m68k_msac,
415  m68k_muls,
416  m68k_mulu,
417  m68k_mvs,
418  m68k_mvz,
419  m68k_nbcd,
420  m68k_neg,
421  m68k_negx,
422  m68k_nop,
423  m68k_not,
424  m68k_or,
425  m68k_ori,
426  m68k_pack,
427  m68k_pea,
428 // m68k_pulse, /**< Generate unique processor status */
429 // m68k_rems, /**< Signed divide remainder -- see divs instead */
430 // m68k_remu, /**< Unsigned divide remainder -- see divu instead */
431  m68k_rol,
432  m68k_ror,
433  m68k_roxl,
434  m68k_roxr,
435  m68k_rtd,
436  m68k_rtm,
437 // m68k_rte, /**< Return from exception */
438  m68k_rtr,
439  m68k_rts,
440 // m68k_sats, /**< Signed saturate */
441  m68k_sbcd,
442  m68k_st,
443  m68k_sf,
444  m68k_shi,
445  m68k_sls,
446  m68k_scc,
447  m68k_scs,
448  m68k_sne,
449  m68k_seq,
450  m68k_svc,
451  m68k_svs,
452  m68k_spl,
453  m68k_smi,
454  m68k_sge,
455  m68k_slt,
456  m68k_sgt,
457  m68k_sle,
458 // m68k_stop,
459  m68k_sub,
460  m68k_suba,
461  m68k_subi,
462  m68k_subq,
463  m68k_subx,
464  m68k_swap,
465  m68k_tas,
466 // m68k_tpf, /**< Trap false (no operation) */
467  m68k_trap,
468  m68k_trapt,
469  m68k_trapf,
470  m68k_traphi,
471  m68k_trapls,
472  m68k_trapcc,
473  m68k_trapcs,
474  m68k_trapne,
475  m68k_trapeq,
476  m68k_trapvc,
477  m68k_trapvs,
478  m68k_trappl,
479  m68k_trapmi,
480  m68k_trapge,
481  m68k_traplt,
482  m68k_trapgt,
483  m68k_traple,
484  m68k_trapv,
485  m68k_tst,
486  m68k_unlk,
487  m68k_unpk,
488 // m68k_wddata, /**< Write to debug data */
489 // m68k_wdebug,
490 
491  // must be last
492  m68k_last_instruction
493 };
494 
495 #endif