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