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