ROSE 0.11.145.147
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
11namespace Rose {
12namespace BinaryAnalysis {
13
14// Members of the Motorola Coldfire family of m68k processors. These descriptions come from page 1-1 of the manual. In particular,
15// when the manual mentions a processor (like "MC68020") it refers to both that particular processor and the embedded versions
16// thereof ("MC68EC020"). We'll use the same approach here, and if we need to refer to only a paricular processor excluding embedded
17// version, we append "_only" to the name.
18enum M68kFamily {
19 m68k_family = 0xffffffff, // All M68k CPUs
20 // Generation one (internally 16/32-bit and produced with 8-, 16-, and 32-bit interfaces)
21 m68k_generation_1 = 0x000000ff, // M68k first generation
22 m68k_68000_only = 0x00000001, // MC68000 16-/32-bit microprocessor
23 m68k_68ec000 = 0x00000002, // MC68EC000 16-/32-bit embedded controller
24 m68k_68hc000 = 0x00000004, // MC68HC000 low-power CMOS version of MC68000
25 m68k_68000 = 0x00000007, // MC68000 and embedded versions thereof
26 m68k_68008 = 0x00000008, // MC68008 16-bit microprocessor with 8-bit external data bus
27 m68k_68010 = 0x00000010, // MC68010 16-/32-bit virtual memory microprocessor
28 m68k_68012 = 0x00000020, // MC68012 84-pin PGA version of MC68010 supporting 2GB RAM
29 // Generation two (internally fully 32-bit)
30 m68k_generation_2 = 0x0000ff00, // M68k second generation
31 m68k_68020_only = 0x00000100, // MC68020 32-bit virtual memory microprocessor
32 m68k_68ec020 = 0x00000200, // MC68EC020 32-bit embedded controller
33 m68k_68020 = 0x00000300, // MC68020 and embedded versions thereof.
34 m68k_68030_only = 0x00000400, // MC68030 second-generation 32-bit enhanced microprocessor
35 m68k_68ec030 = 0x00001000, // MC68EC030 32-bit embedded controller
36 m68k_68030 = 0x00002000, // MC68030 and embedded versions thereof
37 // Generation three (pipelined)
38 m68k_generation_3 = 0x00ff0000, // M68k third generation
39 m68k_68040_only = 0x00010000, // MC68040 third-generation 32-bit microprocessor
40 m68k_68ec040 = 0x00020000, // MC68EC040 32-bit embedded controller w/out FPU or MMU
41 m68k_68lc040 = 0x00040000, // MC68LC040 32-bit embedded controller w/out FPU
42 m68k_68040 = 0x00070000, // MC68040 and embedded versions thereof
43 // Freescale CPUs based on m68k
44 m68k_freescale = 0xff000000, // Freescale CPUs based on Motorola 683xx
45 m68k_freescale_cpu32= 0x01000000, // Freescale CPU32 (similar to MC68020 w/out bitfield insns
46 m68k_freescale_isaa = 0x02000000, // Freescale ISA_A, the original ColdFire ISA (subset of M68000)
47 m68k_freescale_isab = 0x04000000, // Freescale ISA_B, improved data movement instructions, etc.
48 m68k_freescale_isac = 0x08000000, // Freescale ISA_C, improved bit manipulation instructions
49 m68k_freescale_fpu = 0x10000000, // Freescale FPU, original ColdFire floating point ISA.
50 m68k_freescale_mac = 0x20000000, // Freescale MAC, original ColdFire multiply-accumulate ISA.
51 m68k_freescale_emac = 0x40000000, // Freescale EMAC, enhanced multiply-accumulate ISA.
52 m68k_freescale_emacb= 0x80000000 // Freescale EMAC_B, dual accumulation instructions.
53};
54
55// M68k register classes.
56enum M68kRegisterClass {
57 m68k_regclass_data, // Data registers.
58 m68k_regclass_addr, // Address registers.
59 m68k_regclass_fpr, // Floating point registers.
60 m68k_regclass_spr, // Special purpose registers.
61 m68k_regclass_mac, // Multiply-accumulate registers (includes EMAC registers).
62 m68k_regclass_sup // Supervisor registers.
63};
64
65// M68k special purpose registers.
66enum M68kSpecialPurposeRegister {
67 m68k_spr_pc, // Program counter.
68 m68k_spr_sr, // Status register, including condition codes.
69 m68k_spr_fpcr, // Floating-point control register.
70 m68k_spr_fpsr, // Floating-point status register.
71 m68k_spr_fpiar // Floating-point instruction address register.
72};
73
74// M68k MAC registers.
75enum M68kMacRegister {
76 m68k_mac_macsr, // MAC status register.
77 m68k_mac_acc0, // MAC 32-bit accumulator #0.
78 m68k_mac_acc1, // MAC 32-bit accumulator #1.
79 m68k_mac_acc2, // MAC 32-bit accumulator #2.
80 m68k_mac_acc3, // MAC 32-bit accumulator #3.
81 m68k_mac_ext01, // Extensions for ACC0 and ACC1.
82 m68k_mac_ext23, // Extensions for ACC2 and ACC3.
83 m68k_mac_ext0, // Extension for ACC0.
84 m68k_mac_ext1, // Extension for ACC1.
85 m68k_mac_ext2, // Extension for ACC2.
86 m68k_mac_ext3, // Extension for ACC3.
87 m68k_mac_mask // MAC mask register.
88};
89
90// M68k EMAC registers.
91enum M68kEmacRegister {
92 m68k_emac_macsr, // EMAC status register.
93 m68k_emac_acc0, // EMAC accumulator 0.
94 m68k_emac_acc1, // EMAC accumulator 1.
95 m68k_emac_acc2, // EMAC accumulator 2.
96 m68k_emac_acc3, // EMAC accumulator 3.
97 m68k_emac_mask // EMAC mask register.
98};
99
100// M68k supervisor registers.
101enum M68kSupervisorRegister {
102 m68k_sup_vbr, // Interrupt vector base address.
103 m68k_sup_ssp, // Supervisor stack pointer.
104 m68k_sup_sfc, // Alternate function.
105 m68k_sup_dfc, // Code registers.
106 m68k_sup_cacr, // Cache control register.
107 m68k_sup_asid, // Address space ID register.
108 m68k_sup_acr0, // Access control register 0 (data).
109 m68k_sup_acr1, // Access control register 1 (data).
110 m68k_sup_acr2, // Access control register 2 (instruction).
111 m68k_sup_acr3, // Access control register 3 (instruction).
112 m68k_sup_mmubar, // MMU base address register.
113 m68k_sup_rombar0, // ROM base address register 0.
114 m68k_sup_rombar1, // ROM base address register 1.
115 m68k_sup_rambar0, // RAM base address register 0.
116 m68k_sup_rambar1, // RAM base address register 1.
117 m68k_sup_mbar, // Module base address register.
118 m68k_sup_mpcr, // Multiprocessor control register.
119 m68k_sup_edrambar, // Embedded DRAM base address register.
120 m68k_sup_secmbar, // Secondary module base address register.
121 m68k_sup_0_pcr1, // RAM 0 permutation control register 1.
122 m68k_sup_0_pcr2, // RAM 0 permutation control register 2.
123 m68k_sup_0_pcr3, // RAM 0 permutation control register 3.
124 m68k_sup_1_pcr1, // RAM 1 permutation control register 1.
125 m68k_sup_1_pcr2, // RAM 1 permutation control register 2.
126 m68k_sup_1_pcr3 // RAM 1 permutation control register 3.
127};
128
129// M68k effective addressing modes.
130//
131// @code
132// Mode Reg.
133// Addressing Modes Syntax Field Field Data Mem Ctl Alter 234 Symbol
134// ------------------------------- --------------- ----- ----- ---- --- --- ----- --- -----------------
135// Register direct m68k_eam_rd
136// Data Dn 000 reg# X - - X - m68k_eam_drd
137// Address An 001 reg# - - - X - m68k_eam_ard
138//
139// Register indirect m68k_eam_ri
140// Address (An) 010 reg# X X X X - m68k_eam_ari
141// Address with postincrement (An)+ 011 reg# X X - X - m68k_eam_inc
142// Address with predecrement -(An) 100 reg# X X - X - m68k_eam_dec
143// Address with displacement (d16,An) 101 reg# X X X X - m68k_eam_dsp
144//
145// Address register indirect with index m68k_eam_idx
146// 8-bit displacement (d8,An,Xn) 110 reg# X X X X - m68k_eam_idx8
147// Base Displacement (bd,An,Xn) 110 reg# X X X X X m68k_eam_idxbd
148//
149// Memory indirect m68k_eam_mi
150// Postindexed ([bd,An],Xn,od) 110 reg# X X X X X m68k_eam_mpost
151// Preindexed ([bd,An,Xn],od) 110 reg# X X X X X m68k_eam_mpre
152//
153// Program counter indirect m68k_eam_pci
154// With displacement (d16,PC) 111 010 X X X - - m68k_eam_pcdsp
155//
156// Program counter indirect with index m68k_eam_pcidx
157// 8-Bit Displacement (d8,PC,Xn) 111 011 X X X - - m68k_eam_pcidx8
158// Base Displacement (bd,PC,Xn) 111 011 X X X - X m68k_eam_pcidxbd
159//
160// Program counter memory indirect m68k_eam_pcmi
161// Postindexed ([bd,PC],Xn,od) 111 011 X X X X(+) X m68k_eam_pcmpost
162// Preindexed ([bd,PC,Xn],od) 111 011 X X X X(+) X m68k_eam_pcmpre
163//
164// Absolute data addressing m68k_eam_abs
165// Short (xxx).W 111 000 X X X X(+) - m68k_eam_absw
166// Long (xxx).L 111 001(*) X X X X(+) - m68k_eam_absl
167//
168// Immediate #<xxx> 111 100 X X - - - m68k_eam_imm
169//
170// Unused
171// NA NA 111 101 - - - - -
172// NA NA 111 110 - - - - -
173// NA NA 111 111 - - - - -
174// @endcode
175//
176// Note *: the "reg field" for absolute data addressing long is indicated as "000" in the documentation but I believe it should
177// be "001". [Robb P. Matzke 2013-10-07]
178//
179// Note +: the absolute data addressing modes are marked as non-alterable in this table in the m68k documentation, but the
180// documentation for instructions that say an operand "uses the alterable addressing modes shown in the following table" shows
181// the absolute addressing modes as being valid for the instruction. Therefore, I'm including the absolute addressing modes in
182// the set of alterable addressing modes. [Robb P. Matzke 2013-10-07] After implementing all the integer instructions, it
183// looks like this table in the reference manual has an error: the table excludes the two absolute data addressing modes (as
184// just mentioned), but includes the two program counter memory indirect modes (which are missing from the tables for most
185// instructions that say they use alterable addressing modes). So it looks like someone at Motorola placed two "X"s in the
186// wrong rows. I may change my table in the future. FIXME[Robb P. Matzke 2014-02-24]
187enum M68kEffectiveAddressMode {
188 m68k_eam_unknown = 0,
189
190 // single bits
191 m68k_eam_drd = 0x00000001, // Data register direct: Dn
192 m68k_eam_ard = 0x00000002, // Address register direct: An
193 m68k_eam_ari = 0x00000004, // Address register indirect: (An)
194 m68k_eam_inc = 0x00000008, // Address register indirect with post increment: (An)+
195 m68k_eam_dec = 0x00000010, // Address register indirect with pre decrement: -(An)
196 m68k_eam_dsp = 0x00000020, // Address register indirect with displacement: (d_16,An)
197 m68k_eam_idx8 = 0x00000040, // Address register indirect with scaled index and 8-bit displacement
198 m68k_eam_idxbd = 0x00000080, // Address register indirect with scaled index and base displacement
199 m68k_eam_mpost = 0x00000100, // Memory indirect post indexed
200 m68k_eam_mpre = 0x00000200, // Memory indirect pre indexed
201 m68k_eam_pcdsp = 0x00000400, // Program counter indirect with displacement: (d_16,PC)
202 m68k_eam_pcidx8 = 0x00000800, // Program counter indirect with scaled index and 8-bit displacement
203 m68k_eam_pcidxbd = 0x00001000, // Program counter indirect with scaled index and base displacement
204 m68k_eam_pcmpost = 0x00002000, // Program counter memory indirect post indexed
205 m68k_eam_pcmpre = 0x00004000, // Program counter memory indirect pre indexed
206 m68k_eam_absw = 0x00008000, // Absolute data addressing short: (xxx).W
207 m68k_eam_absl = 0x00010000, // Absolute data addressing long: (xxx).L
208 m68k_eam_imm = 0x00020000, // Immediate data
209
210 // masks for groups of rows from the table above.
211 m68k_eam_all = 0x0003ffff, // All addressing modes
212 m68k_eam_rd = 0x00000003, // Register direct addressing modes
213 m68k_eam_ri = 0x0000003c, // Register indirect addressing modes
214 m68k_eam_idx = 0x000000c0, // Address register indirect with scaled index
215 m68k_eam_mi = 0x00000300, // Memory indirect addressing modes
216 m68k_eam_pci = 0x00000400, // Program counter indirect// NO_STRINGIFY
217 m68k_eam_pcidx = 0x00001800, // Program counter indirect with index
218 m68k_eam_pcmi = 0x00006000, // Program counter memory indirect
219 m68k_eam_abs = 0x00018000, // Absolute data addressing
220
221 // masks for the data, mem, ctl, alter, and 234 columns of the table above.
222 m68k_eam_data = 0x0003fffd, // Data addressing modes. All modes except address register direct.
223 m68k_eam_memory = 0x0003fffc, // Memory addressing modes. All modes except register direct.
224 m68k_eam_control = 0x0001ffe4, // Control addressing modes. Memory modes except increment, decrement, and
225 // immediate.
226 m68k_eam_alter = 0x0001e3ff, // Alterable addressing modes. All modes except immediate, program counter
227 // indirect with index, and program counter indirect. Note that the m68k
228 // documentation excludes absolute addressing modes from the definition of alterable
229 // modes, but then includes the absolute addressing modes in all the instructions
230 // that say they use alterable addressing modes.
231 m68k_eam_234 = 0x00007380, // Addressing modes specific to m680{20,30,40}.
232
233 // additional useful masks
234 m68k_eam_direct = 0x00000003, // All register direct addressing modes. // NO_STRINGIFY
235 m68k_eam_pc = 0x00007c00 // All PC address modes.
236};
237
238// M68k data formats for floating-point operations.
239//
240// The integer values are important: they are the bit patterns in floating point instruction encodings.
241enum M68kDataFormat {
242 m68k_fmt_i32 = 0, // 32-bit integer.
243 m68k_fmt_f32 = 1, // 32-bit floating point, "single real".
244 m68k_fmt_f96 = 2, // 96-bit floating point, "extended real".
245 m68k_fmt_p96 = 3, // Three 32-bit words of binary coded decimal.
246 m68k_fmt_i16 = 4, // 16-bit integer.
247 m68k_fmt_f64 = 5, // 64-bit floating point, "double real".
248 m68k_fmt_i8 = 6, // 8-bit integer.
249 m68k_fmt_unknown = 255 // Invalid format.
250};
251
252// M68k instruction types.
253enum M68kInstructionKind {
254 m68k_unknown_instruction,
255 m68k_abcd, // Add decimal with extended
256 m68k_add, // Add
257 m68k_adda, // Add address
258 m68k_addi, // Add immediate
259 m68k_addq, // Add quick
260 m68k_addx, // Add extended
261 m68k_and, // AND logical
262 m68k_andi, // AND immediate
263 m68k_asl, // Arithmetic shift left
264 m68k_asr, // Arithmetic shift right
265 m68k_bcc, // Branch carry clear (alias bhs)
266 m68k_bcs, // Branch carry set (alias blo)
267 m68k_beq, // Branch equal
268 m68k_bge, // Branch greater or equal
269 m68k_bgt, // Branch greater than
270 m68k_bhi, // Branch high
271 m68k_ble, // Branch less or equal
272 m68k_bls, // Branch lower or same
273 m68k_blt, // Branch less than
274 m68k_bmi, // Branch minus
275 m68k_bne, // Branch not equal
276 m68k_bpl, // Branch plus
277 m68k_bvc, // Branch overflow clear
278 m68k_bvs, // Branch overflow set
279 m68k_bchg, // Test a bit and change
280 m68k_bclr, // Test a bit and clear
281 m68k_bfchg, // Test bit field and change
282 m68k_bfclr, // Test bit field and clear
283 m68k_bfexts, // Extract bit field signed
284 m68k_bfextu, // Extract bit field unsigned
285// m68k_bfffo, // Find first one in bit field
286 m68k_bfins, // Insert bit field
287 m68k_bfset, // Test bit field and set
288 m68k_bftst, // Test bit field
289// m68k_bitrev, // Bit reverse register
290 m68k_bkpt, // Breakpoint
291 m68k_bra, // Branch always
292 m68k_bset, // Test a bit and set
293 m68k_bsr, // Branch to subroutine
294 m68k_btst, // Test a bit
295// m68k_byterev, // Byte reverse register
296 m68k_callm, // Call module
297 m68k_cas, // Compare and swap with operand
298 m68k_cas2, // Compare and swap with operands
299 m68k_chk, // Check register against bounds
300 m68k_chk2, // Check register against bounds
301 m68k_clr, // Clear an operand
302 m68k_cmp, // Compare
303 m68k_cmp2, // Compare register against bounds
304 m68k_cmpa, // Compare address
305 m68k_cmpi, // Compare immediate
306 m68k_cmpm, // Compare memory
307 m68k_cpusha, // Push and invalidate all
308 m68k_cpushl, // Push and invalidate cache lines
309 m68k_cpushp, // Push and invalidate cache pages
310 m68k_dbt, // Decrement and branch if true
311 m68k_dbf, // Decrement and branch if false
312 m68k_dbhi, // Decrement and branch if high
313 m68k_dbls, // Decrement and branch if lower or same
314 m68k_dbcc, // Decrement and branch if cary clear
315 m68k_dbcs, // Decrement and branch if carry set
316 m68k_dbne, // Decrement and branch if not equal
317 m68k_dbeq, // Decrement and branch if equal
318 m68k_dbvc, // Decrement and branch if overflow clear
319 m68k_dbvs, // Decrement and branch if overflow set
320 m68k_dbpl, // Decrement and branch if plus
321 m68k_dbmi, // Decrement and branch if minus
322 m68k_dbge, // Decrement and branch if greater or equal
323 m68k_dblt, // Decrement and branch if less than
324 m68k_dbgt, // Decrement and branch if greater than
325 m68k_dble, // Decrement and branch if less than or equal
326 m68k_divs, // Signed divide with optional remainder
327 m68k_divsl, // Signed divide 32-bit quotient with remainder
328 m68k_divu, // Unsigned divide with optional remainder
329 m68k_divul, // Unsigned divide 32-bit quotient with remainder
330 m68k_eor, // Exclusive-OR logical
331 m68k_eori, // Exclusive-OR immediate
332 m68k_exg, // Exchange registers
333 m68k_ext, // Sign extend
334 m68k_extb, // Sign extend byte to longword
335 m68k_fabs, // Floating-point absolute value with FPCR rounding
336 m68k_fadd, // Floating-point add with FPCR rounding
337 m68k_fbeq, // Floating-point branch if equal
338 m68k_fbne, // Floating-point branch if not equal
339 m68k_fbgt, // Floating-point branch if greater than
340 m68k_fbngt, // Floating-point branch if not greater than
341 m68k_fbge, // Floating-point branch if greater than or equal
342 m68k_fbnge, // Floating-point branch if not greater than or equal
343 m68k_fblt, // Floating-point branch if less than
344 m68k_fbnlt, // Floating-point branch if not less than
345 m68k_fble, // Floating-point branch if less than or equal
346 m68k_fbnle, // Floating-point branch if not less than or equal
347 m68k_fbgl, // Floating-point branch if greater or less than
348 m68k_fbngl, // Floating-point branch if not greater or less than
349 m68k_fbgle, // Floating-point branch if greater, less, or equal
350 m68k_fbngle, // Floating-point branch if not greater, less, or equal
351 m68k_fbogt, // Floating-point branch if ordered greater than
352 m68k_fbule, // Floating-point branch if unordered or less or equal
353 m68k_fboge, // Floating-point branch if ordered greater than or equal
354 m68k_fbult, // Floating-point branch if unordered less than
355 m68k_fbolt, // Floating-point branch if ordered less than
356 m68k_fbuge, // Floating-point branch if unordered or greater than or equal
357 m68k_fbole, // Floating-point branch if ordered less than or equal
358 m68k_fbugt, // Floating-point branch if unordered or greater than
359 m68k_fbogl, // Floating-point branch if ordered greater or less than
360 m68k_fbueq, // Floating-point branch if unordered or equal
361 m68k_fbor, // Floating-point branch if ordered
362 m68k_fbun, // Floating-point branch if unordered
363 m68k_fbf, // Floating-point branch if false
364 m68k_fbt, // Floating-point branch if true
365 m68k_fbsf, // Floating-point branch if signaling false
366 m68k_fbst, // Floating-point branch if signaling true
367 m68k_fbseq, // Floating-point branch if signaling equal
368 m68k_fbsne, // Floating-point branch if signaling not equal
369 m68k_fcmp, // Floating-point compare
370 m68k_fdabs, // Floating-point absolute value with double-precision rounding
371 m68k_fdadd, // Floating-point add with double-precision rounding
372 m68k_fddiv, // Floating-point divide with double-precision rounding
373 m68k_fdiv, // Floating-point divide with FPCR rounding
374 m68k_fdmove, // Move floating-point data with double-precision rounding
375 m68k_fdmul, // Floating-point multiple with double-precision rounding
376 m68k_fdneg, // Floating-point negation with double-precision rounding
377 m68k_fdsqrt, // Floating-point square root with double-precision rounding
378 m68k_fdsub, // Floating-point subtract with double-precision rounding
379// m68k_ff1, // Find first one in register
380 m68k_fint, // Floating-point integer part
381 m68k_fintrz, // Floating-point integer part rounded-to-zero
382 m68k_fmove, // Move floating-point data with FPCR rounding
383 m68k_fmovem, // Move multiple floating-point data registers
384 m68k_fmul, // Floating-point multiply with FPCR rounding
385 m68k_fneg, // Floating-pont negate with FPCR rounding
386 m68k_fnop, // Floating-point no operation
387// m68k_frestore,
388 m68k_fsabs, // Floating-point absolute value with single-precision rounding
389 m68k_fsadd, // Floating-point add with single-precision rounding
390// m68k_fsave,
391 m68k_fsdiv, // Floating-point divide with single-precision rounding
392 m68k_fsmove, // Move floating-point data with single-precision rounding
393 m68k_fsmul, // Floating-point multiply with single-precision rounding
394 m68k_fsneg, // Floating-point negation with single-precision rounding
395 m68k_fsqrt, // Floating-point square root with FPCR rounding
396 m68k_fssqrt, // Floating-point square root with single-precision rounding
397 m68k_fssub, // Floating-point subtract with single-precision rounding
398 m68k_fsub, // Floating-point subtract with FPCR rounding
399 m68k_ftst, // Floating point test
400// m68k_halt, // Halt the CPU
401 m68k_illegal, // Take illegal instruction trap
402// m68k_intouch,
403 m68k_jmp, // Jump
404 m68k_jsr, // Jump to subroutine
405 m68k_lea, // Load effective address
406 m68k_link, // Link and allocate
407 m68k_lsl, // Logical shift left
408 m68k_lsr, // Logical shift right
409 m68k_mac, // Multiply accumulate
410 m68k_mov3q, // Move 3-bit data quick
411 m68k_movclr, // Move from MAC ACC register and clear
412 m68k_move, // Move from source to destination (data, CCR, ACC, MACSR, MASK)
413 m68k_move_acc, // Move MAC ACC register
414 m68k_move_accext, // Move MAC ACCext register
415 m68k_move_ccr, // Move condition code register
416 m68k_move_macsr, // Move MAC status register
417 m68k_move_mask, // Move MAC MASK register
418 m68k_move_sr, // Move status register
419 m68k_move16, // Move 16-byte block
420 m68k_movea, // Move address from source to destination
421 m68k_movec, // Move control register
422 m68k_movem, // Move multiple registers
423 m68k_movep, // Move peripheral data
424 m68k_moveq, // Move quick
425 m68k_msac, // Multiply subtract
426 m68k_muls, // Signed multiply
427 m68k_mulu, // Unsigned multiply
428 m68k_mvs, // Move with sign extend
429 m68k_mvz, // Move with zero fill
430 m68k_nbcd, // Negate decimal with extend
431 m68k_neg, // Negate
432 m68k_negx, // Negate with extend
433 m68k_nop, // No operation
434 m68k_not, // Logical complement
435 m68k_or, // Inclusive-OR logical
436 m68k_ori, // Inclusive-OR immediate
437 m68k_pack, // Pack
438 m68k_pea, // Push effective address
439// m68k_pulse, // Generate unique processor status
440// m68k_rems, // Signed divide remainder -- see divs instead
441// m68k_remu, // Unsigned divide remainder -- see divu instead
442 m68k_rol, // Rotate left without extend
443 m68k_ror, // Rotate right without extend
444 m68k_roxl, // Rotate left with extend
445 m68k_roxr, // Rotate right with extend
446 m68k_rtd, // Return and deallocate
447 m68k_rtm, // Return from module
448// m68k_rte, // Return from exception
449 m68k_rtr, // Return and restore condition codes
450 m68k_rts, // Return from subroutine
451// m68k_sats, // Signed saturate
452 m68k_sbcd, // Subtract decimal with extend
453 m68k_st, // Set if true
454 m68k_sf, // Set if false
455 m68k_shi, // Set if high
456 m68k_sls, // Set if lower or same
457 m68k_scc, // Set if carry clear (HS)
458 m68k_scs, // Set if carry set (LO)
459 m68k_sne, // Set if not equal
460 m68k_seq, // Set if equal
461 m68k_svc, // Set if overflow clear
462 m68k_svs, // Set if overflow set
463 m68k_spl, // Set if plus
464 m68k_smi, // Set if minus
465 m68k_sge, // Set if greater or equal
466 m68k_slt, // Set if less than
467 m68k_sgt, // Set if greater than
468 m68k_sle, // Set if less or equal
469// m68k_stop,
470 m68k_sub, // Subtract
471 m68k_suba, // Subtract address
472 m68k_subi, // Subtract immediate
473 m68k_subq, // Subtract quick
474 m68k_subx, // Subtract extended
475 m68k_swap, // Swap register halves
476 m68k_tas, // Test and set an operand
477// m68k_tpf, // Trap false (no operation)
478 m68k_trap, // Trap
479 m68k_trapt, // Trap if true
480 m68k_trapf, // Trap if false
481 m68k_traphi, // Trap if high
482 m68k_trapls, // Trap if lower or same
483 m68k_trapcc, // Trap if carry clear (HS)
484 m68k_trapcs, // Trap if carry set (LO)
485 m68k_trapne, // Trap if not equal
486 m68k_trapeq, // Trap if equal
487 m68k_trapvc, // Trap if overflow clear
488 m68k_trapvs, // Trap if overflow set
489 m68k_trappl, // Trap if plus
490 m68k_trapmi, // Trap if minus
491 m68k_trapge, // Trap if greater or equal
492 m68k_traplt, // Trap if less than
493 m68k_trapgt, // Trap if greater than
494 m68k_traple, // Trap if less or equal
495 m68k_trapv, // Trap on overflow
496 m68k_tst, // Test an operand
497 m68k_unlk, // Unlink
498 m68k_unpk, // Unpack binary coded decimal
499// m68k_wddata, // Write to debug data
500// m68k_wdebug,
501
502 // must be last
503 m68k_last_instruction
504};
505
506} // namespace
507} // namespace
508
509#endif
510#endif
The ROSE library.