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