1 module capstone.m68k;
2 
3 extern (C):
4 
5 /* Capstone Disassembly Engine */
6 /* By Daniel Collin <daniel@collin.com>, 2015-2016 */
7 
8 enum M68K_OPERAND_COUNT = 4;
9 
10 /// M68K registers and special registers
11 enum m68k_reg
12 {
13     M68K_REG_INVALID = 0,
14 
15     M68K_REG_D0 = 1,
16     M68K_REG_D1 = 2,
17     M68K_REG_D2 = 3,
18     M68K_REG_D3 = 4,
19     M68K_REG_D4 = 5,
20     M68K_REG_D5 = 6,
21     M68K_REG_D6 = 7,
22     M68K_REG_D7 = 8,
23 
24     M68K_REG_A0 = 9,
25     M68K_REG_A1 = 10,
26     M68K_REG_A2 = 11,
27     M68K_REG_A3 = 12,
28     M68K_REG_A4 = 13,
29     M68K_REG_A5 = 14,
30     M68K_REG_A6 = 15,
31     M68K_REG_A7 = 16,
32 
33     M68K_REG_FP0 = 17,
34     M68K_REG_FP1 = 18,
35     M68K_REG_FP2 = 19,
36     M68K_REG_FP3 = 20,
37     M68K_REG_FP4 = 21,
38     M68K_REG_FP5 = 22,
39     M68K_REG_FP6 = 23,
40     M68K_REG_FP7 = 24,
41 
42     M68K_REG_PC = 25,
43 
44     M68K_REG_SR = 26,
45     M68K_REG_CCR = 27,
46     M68K_REG_SFC = 28,
47     M68K_REG_DFC = 29,
48     M68K_REG_USP = 30,
49     M68K_REG_VBR = 31,
50     M68K_REG_CACR = 32,
51     M68K_REG_CAAR = 33,
52     M68K_REG_MSP = 34,
53     M68K_REG_ISP = 35,
54     M68K_REG_TC = 36,
55     M68K_REG_ITT0 = 37,
56     M68K_REG_ITT1 = 38,
57     M68K_REG_DTT0 = 39,
58     M68K_REG_DTT1 = 40,
59     M68K_REG_MMUSR = 41,
60     M68K_REG_URP = 42,
61     M68K_REG_SRP = 43,
62 
63     M68K_REG_FPCR = 44,
64     M68K_REG_FPSR = 45,
65     M68K_REG_FPIAR = 46,
66 
67     M68K_REG_ENDING = 47 // <-- mark the end of the list of registers
68 }
69 
70 /// M68K Addressing Modes
71 enum m68k_address_mode
72 {
73     M68K_AM_NONE = 0, ///< No address mode.
74 
75     M68K_AM_REG_DIRECT_DATA = 1, ///< Register Direct - Data
76     M68K_AM_REG_DIRECT_ADDR = 2, ///< Register Direct - Address
77 
78     M68K_AM_REGI_ADDR = 3, ///< Register Indirect - Address
79     M68K_AM_REGI_ADDR_POST_INC = 4, ///< Register Indirect - Address with Postincrement
80     M68K_AM_REGI_ADDR_PRE_DEC = 5, ///< Register Indirect - Address with Predecrement
81     M68K_AM_REGI_ADDR_DISP = 6, ///< Register Indirect - Address with Displacement
82 
83     M68K_AM_AREGI_INDEX_8_BIT_DISP = 7, ///< Address Register Indirect With Index- 8-bit displacement
84     M68K_AM_AREGI_INDEX_BASE_DISP = 8, ///< Address Register Indirect With Index- Base displacement
85 
86     M68K_AM_MEMI_POST_INDEX = 9, ///< Memory indirect - Postindex
87     M68K_AM_MEMI_PRE_INDEX = 10, ///< Memory indirect - Preindex
88 
89     M68K_AM_PCI_DISP = 11, ///< Program Counter Indirect - with Displacement
90 
91     M68K_AM_PCI_INDEX_8_BIT_DISP = 12, ///< Program Counter Indirect with Index - with 8-Bit Displacement
92     M68K_AM_PCI_INDEX_BASE_DISP = 13, ///< Program Counter Indirect with Index - with Base Displacement
93 
94     M68K_AM_PC_MEMI_POST_INDEX = 14, ///< Program Counter Memory Indirect - Postindexed
95     M68K_AM_PC_MEMI_PRE_INDEX = 15, ///< Program Counter Memory Indirect - Preindexed
96 
97     M68K_AM_ABSOLUTE_DATA_SHORT = 16, ///< Absolute Data Addressing  - Short
98     M68K_AM_ABSOLUTE_DATA_LONG = 17, ///< Absolute Data Addressing  - Long
99     M68K_AM_IMMEDIATE = 18, ///< Immediate value
100 
101     M68K_AM_BRANCH_DISPLACEMENT = 19 ///< Address as displacement from (PC+2) used by branches
102 }
103 
104 /// Operand type for instruction's operands
105 enum m68k_op_type
106 {
107     M68K_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized).
108     M68K_OP_REG = 1, ///< = CS_OP_REG (Register operand).
109     M68K_OP_IMM = 2, ///< = CS_OP_IMM (Immediate operand).
110     M68K_OP_MEM = 3, ///< = CS_OP_MEM (Memory operand).
111     M68K_OP_FP_SINGLE = 4, ///< single precision Floating-Point operand
112     M68K_OP_FP_DOUBLE = 5, ///< double precision Floating-Point operand
113     M68K_OP_REG_BITS = 6, ///< Register bits move
114     M68K_OP_REG_PAIR = 7, ///< Register pair in the same op (upper 4 bits for first reg, lower for second)
115     M68K_OP_BR_DISP = 8 ///< Branch displacement
116 }
117 
118 /// Instruction's operand referring to memory
119 /// This is associated with M68K_OP_MEM operand type above
120 struct m68k_op_mem
121 {
122     m68k_reg base_reg; ///< base register (or M68K_REG_INVALID if irrelevant)
123     m68k_reg index_reg; ///< index register (or M68K_REG_INVALID if irrelevant)
124     m68k_reg in_base_reg; ///< indirect base register (or M68K_REG_INVALID if irrelevant)
125     uint in_disp; ///< indirect displacement
126     uint out_disp; ///< other displacement
127     short disp; ///< displacement value
128     ubyte scale; ///< scale for index register
129     ubyte bitfield; ///< set to true if the two values below should be used
130     ubyte width; ///< used for bf* instructions
131     ubyte offset; ///< used for bf* instructions
132     ubyte index_size; ///< 0 = w, 1 = l
133 }
134 
135 /// Operand type for instruction's operands
136 enum m68k_op_br_disp_size
137 {
138     M68K_OP_BR_DISP_SIZE_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized).
139     M68K_OP_BR_DISP_SIZE_BYTE = 1, ///< signed 8-bit displacement
140     M68K_OP_BR_DISP_SIZE_WORD = 2, ///< signed 16-bit displacement
141     M68K_OP_BR_DISP_SIZE_LONG = 4 ///< signed 32-bit displacement
142 }
143 
144 struct m68k_op_br_disp
145 {
146     int disp; ///< displacement value
147     ubyte disp_size; ///< Size from m68k_op_br_disp_size type above
148 }
149 
150 /// Instruction operand
151 struct cs_m68k_op
152 {
153     union
154     {
155         ulong imm; ///< immediate value for IMM operand
156         double dimm; ///< double imm
157         float simm; ///< float imm
158         m68k_reg reg; ///< register value for REG operand
159         ///< register pair in one operand
160         struct _Anonymous_0
161         {
162             m68k_reg reg_0;
163             m68k_reg reg_1;
164         }
165 
166         _Anonymous_0 reg_pair;
167     }
168 
169     m68k_op_mem mem; ///< data when operand is targeting memory
170     m68k_op_br_disp br_disp; ///< data when operand is a branch displacement
171     uint register_bits; ///< register bits for movem etc. (always in d0-d7, a0-a7, fp0 - fp7 order)
172     m68k_op_type type;
173     m68k_address_mode address_mode; ///< M68K addressing mode for this op
174 }
175 
176 /// Operation size of the CPU instructions
177 enum m68k_cpu_size
178 {
179     M68K_CPU_SIZE_NONE = 0, ///< unsized or unspecified
180     M68K_CPU_SIZE_BYTE = 1, ///< 1 byte in size
181     M68K_CPU_SIZE_WORD = 2, ///< 2 bytes in size
182     M68K_CPU_SIZE_LONG = 4 ///< 4 bytes in size
183 }
184 
185 /// Operation size of the FPU instructions (Notice that FPU instruction can also use CPU sizes if needed)
186 enum m68k_fpu_size
187 {
188     M68K_FPU_SIZE_NONE = 0, ///< unsized like fsave/frestore
189     M68K_FPU_SIZE_SINGLE = 4, ///< 4 byte in size (single float)
190     M68K_FPU_SIZE_DOUBLE = 8, ///< 8 byte in size (double)
191     M68K_FPU_SIZE_EXTENDED = 12 ///< 12 byte in size (extended real format)
192 }
193 
194 /// Type of size that is being used for the current instruction
195 enum m68k_size_type
196 {
197     M68K_SIZE_TYPE_INVALID = 0,
198 
199     M68K_SIZE_TYPE_CPU = 1,
200     M68K_SIZE_TYPE_FPU = 2
201 }
202 
203 /// Operation size of the current instruction (NOT the actually size of instruction)
204 struct m68k_op_size
205 {
206     m68k_size_type type;
207 
208     union
209     {
210         m68k_cpu_size cpu_size;
211         m68k_fpu_size fpu_size;
212     }
213 }
214 
215 /// The M68K instruction and it's operands
216 struct cs_m68k
217 {
218     // Number of operands of this instruction or 0 when instruction has no operand.
219     cs_m68k_op[M68K_OPERAND_COUNT] operands; ///< operands for this instruction.
220     m68k_op_size op_size; ///< size of data operand works on in bytes (.b, .w, .l, etc)
221     ubyte op_count; ///< number of operands for the instruction
222 }
223 
224 /// M68K instruction
225 enum m68k_insn
226 {
227     M68K_INS_INVALID = 0,
228 
229     M68K_INS_ABCD = 1,
230     M68K_INS_ADD = 2,
231     M68K_INS_ADDA = 3,
232     M68K_INS_ADDI = 4,
233     M68K_INS_ADDQ = 5,
234     M68K_INS_ADDX = 6,
235     M68K_INS_AND = 7,
236     M68K_INS_ANDI = 8,
237     M68K_INS_ASL = 9,
238     M68K_INS_ASR = 10,
239     M68K_INS_BHS = 11,
240     M68K_INS_BLO = 12,
241     M68K_INS_BHI = 13,
242     M68K_INS_BLS = 14,
243     M68K_INS_BCC = 15,
244     M68K_INS_BCS = 16,
245     M68K_INS_BNE = 17,
246     M68K_INS_BEQ = 18,
247     M68K_INS_BVC = 19,
248     M68K_INS_BVS = 20,
249     M68K_INS_BPL = 21,
250     M68K_INS_BMI = 22,
251     M68K_INS_BGE = 23,
252     M68K_INS_BLT = 24,
253     M68K_INS_BGT = 25,
254     M68K_INS_BLE = 26,
255     M68K_INS_BRA = 27,
256     M68K_INS_BSR = 28,
257     M68K_INS_BCHG = 29,
258     M68K_INS_BCLR = 30,
259     M68K_INS_BSET = 31,
260     M68K_INS_BTST = 32,
261     M68K_INS_BFCHG = 33,
262     M68K_INS_BFCLR = 34,
263     M68K_INS_BFEXTS = 35,
264     M68K_INS_BFEXTU = 36,
265     M68K_INS_BFFFO = 37,
266     M68K_INS_BFINS = 38,
267     M68K_INS_BFSET = 39,
268     M68K_INS_BFTST = 40,
269     M68K_INS_BKPT = 41,
270     M68K_INS_CALLM = 42,
271     M68K_INS_CAS = 43,
272     M68K_INS_CAS2 = 44,
273     M68K_INS_CHK = 45,
274     M68K_INS_CHK2 = 46,
275     M68K_INS_CLR = 47,
276     M68K_INS_CMP = 48,
277     M68K_INS_CMPA = 49,
278     M68K_INS_CMPI = 50,
279     M68K_INS_CMPM = 51,
280     M68K_INS_CMP2 = 52,
281     M68K_INS_CINVL = 53,
282     M68K_INS_CINVP = 54,
283     M68K_INS_CINVA = 55,
284     M68K_INS_CPUSHL = 56,
285     M68K_INS_CPUSHP = 57,
286     M68K_INS_CPUSHA = 58,
287     M68K_INS_DBT = 59,
288     M68K_INS_DBF = 60,
289     M68K_INS_DBHI = 61,
290     M68K_INS_DBLS = 62,
291     M68K_INS_DBCC = 63,
292     M68K_INS_DBCS = 64,
293     M68K_INS_DBNE = 65,
294     M68K_INS_DBEQ = 66,
295     M68K_INS_DBVC = 67,
296     M68K_INS_DBVS = 68,
297     M68K_INS_DBPL = 69,
298     M68K_INS_DBMI = 70,
299     M68K_INS_DBGE = 71,
300     M68K_INS_DBLT = 72,
301     M68K_INS_DBGT = 73,
302     M68K_INS_DBLE = 74,
303     M68K_INS_DBRA = 75,
304     M68K_INS_DIVS = 76,
305     M68K_INS_DIVSL = 77,
306     M68K_INS_DIVU = 78,
307     M68K_INS_DIVUL = 79,
308     M68K_INS_EOR = 80,
309     M68K_INS_EORI = 81,
310     M68K_INS_EXG = 82,
311     M68K_INS_EXT = 83,
312     M68K_INS_EXTB = 84,
313     M68K_INS_FABS = 85,
314     M68K_INS_FSABS = 86,
315     M68K_INS_FDABS = 87,
316     M68K_INS_FACOS = 88,
317     M68K_INS_FADD = 89,
318     M68K_INS_FSADD = 90,
319     M68K_INS_FDADD = 91,
320     M68K_INS_FASIN = 92,
321     M68K_INS_FATAN = 93,
322     M68K_INS_FATANH = 94,
323     M68K_INS_FBF = 95,
324     M68K_INS_FBEQ = 96,
325     M68K_INS_FBOGT = 97,
326     M68K_INS_FBOGE = 98,
327     M68K_INS_FBOLT = 99,
328     M68K_INS_FBOLE = 100,
329     M68K_INS_FBOGL = 101,
330     M68K_INS_FBOR = 102,
331     M68K_INS_FBUN = 103,
332     M68K_INS_FBUEQ = 104,
333     M68K_INS_FBUGT = 105,
334     M68K_INS_FBUGE = 106,
335     M68K_INS_FBULT = 107,
336     M68K_INS_FBULE = 108,
337     M68K_INS_FBNE = 109,
338     M68K_INS_FBT = 110,
339     M68K_INS_FBSF = 111,
340     M68K_INS_FBSEQ = 112,
341     M68K_INS_FBGT = 113,
342     M68K_INS_FBGE = 114,
343     M68K_INS_FBLT = 115,
344     M68K_INS_FBLE = 116,
345     M68K_INS_FBGL = 117,
346     M68K_INS_FBGLE = 118,
347     M68K_INS_FBNGLE = 119,
348     M68K_INS_FBNGL = 120,
349     M68K_INS_FBNLE = 121,
350     M68K_INS_FBNLT = 122,
351     M68K_INS_FBNGE = 123,
352     M68K_INS_FBNGT = 124,
353     M68K_INS_FBSNE = 125,
354     M68K_INS_FBST = 126,
355     M68K_INS_FCMP = 127,
356     M68K_INS_FCOS = 128,
357     M68K_INS_FCOSH = 129,
358     M68K_INS_FDBF = 130,
359     M68K_INS_FDBEQ = 131,
360     M68K_INS_FDBOGT = 132,
361     M68K_INS_FDBOGE = 133,
362     M68K_INS_FDBOLT = 134,
363     M68K_INS_FDBOLE = 135,
364     M68K_INS_FDBOGL = 136,
365     M68K_INS_FDBOR = 137,
366     M68K_INS_FDBUN = 138,
367     M68K_INS_FDBUEQ = 139,
368     M68K_INS_FDBUGT = 140,
369     M68K_INS_FDBUGE = 141,
370     M68K_INS_FDBULT = 142,
371     M68K_INS_FDBULE = 143,
372     M68K_INS_FDBNE = 144,
373     M68K_INS_FDBT = 145,
374     M68K_INS_FDBSF = 146,
375     M68K_INS_FDBSEQ = 147,
376     M68K_INS_FDBGT = 148,
377     M68K_INS_FDBGE = 149,
378     M68K_INS_FDBLT = 150,
379     M68K_INS_FDBLE = 151,
380     M68K_INS_FDBGL = 152,
381     M68K_INS_FDBGLE = 153,
382     M68K_INS_FDBNGLE = 154,
383     M68K_INS_FDBNGL = 155,
384     M68K_INS_FDBNLE = 156,
385     M68K_INS_FDBNLT = 157,
386     M68K_INS_FDBNGE = 158,
387     M68K_INS_FDBNGT = 159,
388     M68K_INS_FDBSNE = 160,
389     M68K_INS_FDBST = 161,
390     M68K_INS_FDIV = 162,
391     M68K_INS_FSDIV = 163,
392     M68K_INS_FDDIV = 164,
393     M68K_INS_FETOX = 165,
394     M68K_INS_FETOXM1 = 166,
395     M68K_INS_FGETEXP = 167,
396     M68K_INS_FGETMAN = 168,
397     M68K_INS_FINT = 169,
398     M68K_INS_FINTRZ = 170,
399     M68K_INS_FLOG10 = 171,
400     M68K_INS_FLOG2 = 172,
401     M68K_INS_FLOGN = 173,
402     M68K_INS_FLOGNP1 = 174,
403     M68K_INS_FMOD = 175,
404     M68K_INS_FMOVE = 176,
405     M68K_INS_FSMOVE = 177,
406     M68K_INS_FDMOVE = 178,
407     M68K_INS_FMOVECR = 179,
408     M68K_INS_FMOVEM = 180,
409     M68K_INS_FMUL = 181,
410     M68K_INS_FSMUL = 182,
411     M68K_INS_FDMUL = 183,
412     M68K_INS_FNEG = 184,
413     M68K_INS_FSNEG = 185,
414     M68K_INS_FDNEG = 186,
415     M68K_INS_FNOP = 187,
416     M68K_INS_FREM = 188,
417     M68K_INS_FRESTORE = 189,
418     M68K_INS_FSAVE = 190,
419     M68K_INS_FSCALE = 191,
420     M68K_INS_FSGLDIV = 192,
421     M68K_INS_FSGLMUL = 193,
422     M68K_INS_FSIN = 194,
423     M68K_INS_FSINCOS = 195,
424     M68K_INS_FSINH = 196,
425     M68K_INS_FSQRT = 197,
426     M68K_INS_FSSQRT = 198,
427     M68K_INS_FDSQRT = 199,
428     M68K_INS_FSF = 200,
429     M68K_INS_FSBEQ = 201,
430     M68K_INS_FSOGT = 202,
431     M68K_INS_FSOGE = 203,
432     M68K_INS_FSOLT = 204,
433     M68K_INS_FSOLE = 205,
434     M68K_INS_FSOGL = 206,
435     M68K_INS_FSOR = 207,
436     M68K_INS_FSUN = 208,
437     M68K_INS_FSUEQ = 209,
438     M68K_INS_FSUGT = 210,
439     M68K_INS_FSUGE = 211,
440     M68K_INS_FSULT = 212,
441     M68K_INS_FSULE = 213,
442     M68K_INS_FSNE = 214,
443     M68K_INS_FST = 215,
444     M68K_INS_FSSF = 216,
445     M68K_INS_FSSEQ = 217,
446     M68K_INS_FSGT = 218,
447     M68K_INS_FSGE = 219,
448     M68K_INS_FSLT = 220,
449     M68K_INS_FSLE = 221,
450     M68K_INS_FSGL = 222,
451     M68K_INS_FSGLE = 223,
452     M68K_INS_FSNGLE = 224,
453     M68K_INS_FSNGL = 225,
454     M68K_INS_FSNLE = 226,
455     M68K_INS_FSNLT = 227,
456     M68K_INS_FSNGE = 228,
457     M68K_INS_FSNGT = 229,
458     M68K_INS_FSSNE = 230,
459     M68K_INS_FSST = 231,
460     M68K_INS_FSUB = 232,
461     M68K_INS_FSSUB = 233,
462     M68K_INS_FDSUB = 234,
463     M68K_INS_FTAN = 235,
464     M68K_INS_FTANH = 236,
465     M68K_INS_FTENTOX = 237,
466     M68K_INS_FTRAPF = 238,
467     M68K_INS_FTRAPEQ = 239,
468     M68K_INS_FTRAPOGT = 240,
469     M68K_INS_FTRAPOGE = 241,
470     M68K_INS_FTRAPOLT = 242,
471     M68K_INS_FTRAPOLE = 243,
472     M68K_INS_FTRAPOGL = 244,
473     M68K_INS_FTRAPOR = 245,
474     M68K_INS_FTRAPUN = 246,
475     M68K_INS_FTRAPUEQ = 247,
476     M68K_INS_FTRAPUGT = 248,
477     M68K_INS_FTRAPUGE = 249,
478     M68K_INS_FTRAPULT = 250,
479     M68K_INS_FTRAPULE = 251,
480     M68K_INS_FTRAPNE = 252,
481     M68K_INS_FTRAPT = 253,
482     M68K_INS_FTRAPSF = 254,
483     M68K_INS_FTRAPSEQ = 255,
484     M68K_INS_FTRAPGT = 256,
485     M68K_INS_FTRAPGE = 257,
486     M68K_INS_FTRAPLT = 258,
487     M68K_INS_FTRAPLE = 259,
488     M68K_INS_FTRAPGL = 260,
489     M68K_INS_FTRAPGLE = 261,
490     M68K_INS_FTRAPNGLE = 262,
491     M68K_INS_FTRAPNGL = 263,
492     M68K_INS_FTRAPNLE = 264,
493     M68K_INS_FTRAPNLT = 265,
494     M68K_INS_FTRAPNGE = 266,
495     M68K_INS_FTRAPNGT = 267,
496     M68K_INS_FTRAPSNE = 268,
497     M68K_INS_FTRAPST = 269,
498     M68K_INS_FTST = 270,
499     M68K_INS_FTWOTOX = 271,
500     M68K_INS_HALT = 272,
501     M68K_INS_ILLEGAL = 273,
502     M68K_INS_JMP = 274,
503     M68K_INS_JSR = 275,
504     M68K_INS_LEA = 276,
505     M68K_INS_LINK = 277,
506     M68K_INS_LPSTOP = 278,
507     M68K_INS_LSL = 279,
508     M68K_INS_LSR = 280,
509     M68K_INS_MOVE = 281,
510     M68K_INS_MOVEA = 282,
511     M68K_INS_MOVEC = 283,
512     M68K_INS_MOVEM = 284,
513     M68K_INS_MOVEP = 285,
514     M68K_INS_MOVEQ = 286,
515     M68K_INS_MOVES = 287,
516     M68K_INS_MOVE16 = 288,
517     M68K_INS_MULS = 289,
518     M68K_INS_MULU = 290,
519     M68K_INS_NBCD = 291,
520     M68K_INS_NEG = 292,
521     M68K_INS_NEGX = 293,
522     M68K_INS_NOP = 294,
523     M68K_INS_NOT = 295,
524     M68K_INS_OR = 296,
525     M68K_INS_ORI = 297,
526     M68K_INS_PACK = 298,
527     M68K_INS_PEA = 299,
528     M68K_INS_PFLUSH = 300,
529     M68K_INS_PFLUSHA = 301,
530     M68K_INS_PFLUSHAN = 302,
531     M68K_INS_PFLUSHN = 303,
532     M68K_INS_PLOADR = 304,
533     M68K_INS_PLOADW = 305,
534     M68K_INS_PLPAR = 306,
535     M68K_INS_PLPAW = 307,
536     M68K_INS_PMOVE = 308,
537     M68K_INS_PMOVEFD = 309,
538     M68K_INS_PTESTR = 310,
539     M68K_INS_PTESTW = 311,
540     M68K_INS_PULSE = 312,
541     M68K_INS_REMS = 313,
542     M68K_INS_REMU = 314,
543     M68K_INS_RESET = 315,
544     M68K_INS_ROL = 316,
545     M68K_INS_ROR = 317,
546     M68K_INS_ROXL = 318,
547     M68K_INS_ROXR = 319,
548     M68K_INS_RTD = 320,
549     M68K_INS_RTE = 321,
550     M68K_INS_RTM = 322,
551     M68K_INS_RTR = 323,
552     M68K_INS_RTS = 324,
553     M68K_INS_SBCD = 325,
554     M68K_INS_ST = 326,
555     M68K_INS_SF = 327,
556     M68K_INS_SHI = 328,
557     M68K_INS_SLS = 329,
558     M68K_INS_SCC = 330,
559     M68K_INS_SHS = 331,
560     M68K_INS_SCS = 332,
561     M68K_INS_SLO = 333,
562     M68K_INS_SNE = 334,
563     M68K_INS_SEQ = 335,
564     M68K_INS_SVC = 336,
565     M68K_INS_SVS = 337,
566     M68K_INS_SPL = 338,
567     M68K_INS_SMI = 339,
568     M68K_INS_SGE = 340,
569     M68K_INS_SLT = 341,
570     M68K_INS_SGT = 342,
571     M68K_INS_SLE = 343,
572     M68K_INS_STOP = 344,
573     M68K_INS_SUB = 345,
574     M68K_INS_SUBA = 346,
575     M68K_INS_SUBI = 347,
576     M68K_INS_SUBQ = 348,
577     M68K_INS_SUBX = 349,
578     M68K_INS_SWAP = 350,
579     M68K_INS_TAS = 351,
580     M68K_INS_TRAP = 352,
581     M68K_INS_TRAPV = 353,
582     M68K_INS_TRAPT = 354,
583     M68K_INS_TRAPF = 355,
584     M68K_INS_TRAPHI = 356,
585     M68K_INS_TRAPLS = 357,
586     M68K_INS_TRAPCC = 358,
587     M68K_INS_TRAPHS = 359,
588     M68K_INS_TRAPCS = 360,
589     M68K_INS_TRAPLO = 361,
590     M68K_INS_TRAPNE = 362,
591     M68K_INS_TRAPEQ = 363,
592     M68K_INS_TRAPVC = 364,
593     M68K_INS_TRAPVS = 365,
594     M68K_INS_TRAPPL = 366,
595     M68K_INS_TRAPMI = 367,
596     M68K_INS_TRAPGE = 368,
597     M68K_INS_TRAPLT = 369,
598     M68K_INS_TRAPGT = 370,
599     M68K_INS_TRAPLE = 371,
600     M68K_INS_TST = 372,
601     M68K_INS_UNLK = 373,
602     M68K_INS_UNPK = 374,
603     M68K_INS_ENDING = 375 // <-- mark the end of the list of instructions
604 }
605 
606 /// Group of M68K instructions
607 enum m68k_group_type
608 {
609     M68K_GRP_INVALID = 0, ///< CS_GRUP_INVALID
610     M68K_GRP_JUMP = 1, ///< = CS_GRP_JUMP
611     M68K_GRP_RET = 3, ///< = CS_GRP_RET
612     M68K_GRP_IRET = 5, ///< = CS_GRP_IRET
613     M68K_GRP_BRANCH_RELATIVE = 7, ///< = CS_GRP_BRANCH_RELATIVE
614 
615     M68K_GRP_ENDING = 8 // <-- mark the end of the list of groups
616 }