1 #ifndef CAPSTONE_MIPS_H 2 #define CAPSTONE_MIPS_H 3 4 /* Capstone Disassembly Engine */ 5 /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */ 6 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 11 #include "platform.h" 12 13 // GCC MIPS toolchain has a default macro called "mips" which breaks 14 // compilation 15 #undef mips 16 17 #ifdef _MSC_VER 18 #pragma warning(disable:4201) 19 #endif 20 21 /// Operand type for instruction's operands 22 typedef enum mips_op_type { 23 MIPS_OP_INVALID = 0, ///< = CS_OP_INVALID (Uninitialized). 24 MIPS_OP_REG, ///< = CS_OP_REG (Register operand). 25 MIPS_OP_IMM, ///< = CS_OP_IMM (Immediate operand). 26 MIPS_OP_MEM, ///< = CS_OP_MEM (Memory operand). 27 } mips_op_type; 28 29 /// MIPS registers 30 typedef enum mips_reg { 31 MIPS_REG_INVALID = 0, 32 // General purpose registers 33 MIPS_REG_PC, 34 35 MIPS_REG_0, 36 MIPS_REG_1, 37 MIPS_REG_2, 38 MIPS_REG_3, 39 MIPS_REG_4, 40 MIPS_REG_5, 41 MIPS_REG_6, 42 MIPS_REG_7, 43 MIPS_REG_8, 44 MIPS_REG_9, 45 MIPS_REG_10, 46 MIPS_REG_11, 47 MIPS_REG_12, 48 MIPS_REG_13, 49 MIPS_REG_14, 50 MIPS_REG_15, 51 MIPS_REG_16, 52 MIPS_REG_17, 53 MIPS_REG_18, 54 MIPS_REG_19, 55 MIPS_REG_20, 56 MIPS_REG_21, 57 MIPS_REG_22, 58 MIPS_REG_23, 59 MIPS_REG_24, 60 MIPS_REG_25, 61 MIPS_REG_26, 62 MIPS_REG_27, 63 MIPS_REG_28, 64 MIPS_REG_29, 65 MIPS_REG_30, 66 MIPS_REG_31, 67 68 // DSP registers 69 MIPS_REG_DSPCCOND, 70 MIPS_REG_DSPCARRY, 71 MIPS_REG_DSPEFI, 72 MIPS_REG_DSPOUTFLAG, 73 MIPS_REG_DSPOUTFLAG16_19, 74 MIPS_REG_DSPOUTFLAG20, 75 MIPS_REG_DSPOUTFLAG21, 76 MIPS_REG_DSPOUTFLAG22, 77 MIPS_REG_DSPOUTFLAG23, 78 MIPS_REG_DSPPOS, 79 MIPS_REG_DSPSCOUNT, 80 81 // ACC registers 82 MIPS_REG_AC0, 83 MIPS_REG_AC1, 84 MIPS_REG_AC2, 85 MIPS_REG_AC3, 86 87 // COP registers 88 MIPS_REG_CC0, 89 MIPS_REG_CC1, 90 MIPS_REG_CC2, 91 MIPS_REG_CC3, 92 MIPS_REG_CC4, 93 MIPS_REG_CC5, 94 MIPS_REG_CC6, 95 MIPS_REG_CC7, 96 97 // FPU registers 98 MIPS_REG_F0, 99 MIPS_REG_F1, 100 MIPS_REG_F2, 101 MIPS_REG_F3, 102 MIPS_REG_F4, 103 MIPS_REG_F5, 104 MIPS_REG_F6, 105 MIPS_REG_F7, 106 MIPS_REG_F8, 107 MIPS_REG_F9, 108 MIPS_REG_F10, 109 MIPS_REG_F11, 110 MIPS_REG_F12, 111 MIPS_REG_F13, 112 MIPS_REG_F14, 113 MIPS_REG_F15, 114 MIPS_REG_F16, 115 MIPS_REG_F17, 116 MIPS_REG_F18, 117 MIPS_REG_F19, 118 MIPS_REG_F20, 119 MIPS_REG_F21, 120 MIPS_REG_F22, 121 MIPS_REG_F23, 122 MIPS_REG_F24, 123 MIPS_REG_F25, 124 MIPS_REG_F26, 125 MIPS_REG_F27, 126 MIPS_REG_F28, 127 MIPS_REG_F29, 128 MIPS_REG_F30, 129 MIPS_REG_F31, 130 131 MIPS_REG_FCC0, 132 MIPS_REG_FCC1, 133 MIPS_REG_FCC2, 134 MIPS_REG_FCC3, 135 MIPS_REG_FCC4, 136 MIPS_REG_FCC5, 137 MIPS_REG_FCC6, 138 MIPS_REG_FCC7, 139 140 // AFPR128 141 MIPS_REG_W0, 142 MIPS_REG_W1, 143 MIPS_REG_W2, 144 MIPS_REG_W3, 145 MIPS_REG_W4, 146 MIPS_REG_W5, 147 MIPS_REG_W6, 148 MIPS_REG_W7, 149 MIPS_REG_W8, 150 MIPS_REG_W9, 151 MIPS_REG_W10, 152 MIPS_REG_W11, 153 MIPS_REG_W12, 154 MIPS_REG_W13, 155 MIPS_REG_W14, 156 MIPS_REG_W15, 157 MIPS_REG_W16, 158 MIPS_REG_W17, 159 MIPS_REG_W18, 160 MIPS_REG_W19, 161 MIPS_REG_W20, 162 MIPS_REG_W21, 163 MIPS_REG_W22, 164 MIPS_REG_W23, 165 MIPS_REG_W24, 166 MIPS_REG_W25, 167 MIPS_REG_W26, 168 MIPS_REG_W27, 169 MIPS_REG_W28, 170 MIPS_REG_W29, 171 MIPS_REG_W30, 172 MIPS_REG_W31, 173 174 MIPS_REG_HI, 175 MIPS_REG_LO, 176 177 MIPS_REG_P0, 178 MIPS_REG_P1, 179 MIPS_REG_P2, 180 181 MIPS_REG_MPL0, 182 MIPS_REG_MPL1, 183 MIPS_REG_MPL2, 184 185 MIPS_REG_ENDING, // <-- mark the end of the list or registers 186 187 // alias registers 188 MIPS_REG_ZERO = MIPS_REG_0, 189 MIPS_REG_AT = MIPS_REG_1, 190 MIPS_REG_V0 = MIPS_REG_2, 191 MIPS_REG_V1 = MIPS_REG_3, 192 MIPS_REG_A0 = MIPS_REG_4, 193 MIPS_REG_A1 = MIPS_REG_5, 194 MIPS_REG_A2 = MIPS_REG_6, 195 MIPS_REG_A3 = MIPS_REG_7, 196 MIPS_REG_T0 = MIPS_REG_8, 197 MIPS_REG_T1 = MIPS_REG_9, 198 MIPS_REG_T2 = MIPS_REG_10, 199 MIPS_REG_T3 = MIPS_REG_11, 200 MIPS_REG_T4 = MIPS_REG_12, 201 MIPS_REG_T5 = MIPS_REG_13, 202 MIPS_REG_T6 = MIPS_REG_14, 203 MIPS_REG_T7 = MIPS_REG_15, 204 MIPS_REG_S0 = MIPS_REG_16, 205 MIPS_REG_S1 = MIPS_REG_17, 206 MIPS_REG_S2 = MIPS_REG_18, 207 MIPS_REG_S3 = MIPS_REG_19, 208 MIPS_REG_S4 = MIPS_REG_20, 209 MIPS_REG_S5 = MIPS_REG_21, 210 MIPS_REG_S6 = MIPS_REG_22, 211 MIPS_REG_S7 = MIPS_REG_23, 212 MIPS_REG_T8 = MIPS_REG_24, 213 MIPS_REG_T9 = MIPS_REG_25, 214 MIPS_REG_K0 = MIPS_REG_26, 215 MIPS_REG_K1 = MIPS_REG_27, 216 MIPS_REG_GP = MIPS_REG_28, 217 MIPS_REG_SP = MIPS_REG_29, 218 MIPS_REG_FP = MIPS_REG_30, MIPS_REG_S8 = MIPS_REG_30, 219 MIPS_REG_RA = MIPS_REG_31, 220 221 MIPS_REG_HI0 = MIPS_REG_AC0, 222 MIPS_REG_HI1 = MIPS_REG_AC1, 223 MIPS_REG_HI2 = MIPS_REG_AC2, 224 MIPS_REG_HI3 = MIPS_REG_AC3, 225 226 MIPS_REG_LO0 = MIPS_REG_HI0, 227 MIPS_REG_LO1 = MIPS_REG_HI1, 228 MIPS_REG_LO2 = MIPS_REG_HI2, 229 MIPS_REG_LO3 = MIPS_REG_HI3, 230 } mips_reg; 231 232 /// Instruction's operand referring to memory 233 /// This is associated with MIPS_OP_MEM operand type above 234 typedef struct mips_op_mem { 235 mips_reg base; ///< base register 236 int64_t disp; ///< displacement/offset value 237 } mips_op_mem; 238 239 /// Instruction operand 240 typedef struct cs_mips_op { 241 mips_op_type type; ///< operand type 242 union { 243 mips_reg reg; ///< register id for REG operand 244 int64_t imm; ///< immediate value for IMM operand 245 mips_op_mem mem; ///< base/index/scale/disp value for MEM operand 246 }; 247 } cs_mips_op; 248 249 /// Instruction structure 250 typedef struct cs_mips { 251 /// Number of operands of this instruction, 252 /// or 0 when instruction has no operand. 253 uint8_t op_count; 254 cs_mips_op operands[10]; ///< operands for this instruction. 255 } cs_mips; 256 257 /// MIPS instruction 258 typedef enum mips_insn { 259 MIPS_INS_INVALID = 0, 260 261 MIPS_INS_ABSQ_S, 262 MIPS_INS_ADD, 263 MIPS_INS_ADDIUPC, 264 MIPS_INS_ADDIUR1SP, 265 MIPS_INS_ADDIUR2, 266 MIPS_INS_ADDIUS5, 267 MIPS_INS_ADDIUSP, 268 MIPS_INS_ADDQH, 269 MIPS_INS_ADDQH_R, 270 MIPS_INS_ADDQ, 271 MIPS_INS_ADDQ_S, 272 MIPS_INS_ADDSC, 273 MIPS_INS_ADDS_A, 274 MIPS_INS_ADDS_S, 275 MIPS_INS_ADDS_U, 276 MIPS_INS_ADDU16, 277 MIPS_INS_ADDUH, 278 MIPS_INS_ADDUH_R, 279 MIPS_INS_ADDU, 280 MIPS_INS_ADDU_S, 281 MIPS_INS_ADDVI, 282 MIPS_INS_ADDV, 283 MIPS_INS_ADDWC, 284 MIPS_INS_ADD_A, 285 MIPS_INS_ADDI, 286 MIPS_INS_ADDIU, 287 MIPS_INS_ALIGN, 288 MIPS_INS_ALUIPC, 289 MIPS_INS_AND, 290 MIPS_INS_AND16, 291 MIPS_INS_ANDI16, 292 MIPS_INS_ANDI, 293 MIPS_INS_APPEND, 294 MIPS_INS_ASUB_S, 295 MIPS_INS_ASUB_U, 296 MIPS_INS_AUI, 297 MIPS_INS_AUIPC, 298 MIPS_INS_AVER_S, 299 MIPS_INS_AVER_U, 300 MIPS_INS_AVE_S, 301 MIPS_INS_AVE_U, 302 MIPS_INS_B16, 303 MIPS_INS_BADDU, 304 MIPS_INS_BAL, 305 MIPS_INS_BALC, 306 MIPS_INS_BALIGN, 307 MIPS_INS_BBIT0, 308 MIPS_INS_BBIT032, 309 MIPS_INS_BBIT1, 310 MIPS_INS_BBIT132, 311 MIPS_INS_BC, 312 MIPS_INS_BC0F, 313 MIPS_INS_BC0FL, 314 MIPS_INS_BC0T, 315 MIPS_INS_BC0TL, 316 MIPS_INS_BC1EQZ, 317 MIPS_INS_BC1F, 318 MIPS_INS_BC1FL, 319 MIPS_INS_BC1NEZ, 320 MIPS_INS_BC1T, 321 MIPS_INS_BC1TL, 322 MIPS_INS_BC2EQZ, 323 MIPS_INS_BC2F, 324 MIPS_INS_BC2FL, 325 MIPS_INS_BC2NEZ, 326 MIPS_INS_BC2T, 327 MIPS_INS_BC2TL, 328 MIPS_INS_BC3F, 329 MIPS_INS_BC3FL, 330 MIPS_INS_BC3T, 331 MIPS_INS_BC3TL, 332 MIPS_INS_BCLRI, 333 MIPS_INS_BCLR, 334 MIPS_INS_BEQ, 335 MIPS_INS_BEQC, 336 MIPS_INS_BEQL, 337 MIPS_INS_BEQZ16, 338 MIPS_INS_BEQZALC, 339 MIPS_INS_BEQZC, 340 MIPS_INS_BGEC, 341 MIPS_INS_BGEUC, 342 MIPS_INS_BGEZ, 343 MIPS_INS_BGEZAL, 344 MIPS_INS_BGEZALC, 345 MIPS_INS_BGEZALL, 346 MIPS_INS_BGEZALS, 347 MIPS_INS_BGEZC, 348 MIPS_INS_BGEZL, 349 MIPS_INS_BGTZ, 350 MIPS_INS_BGTZALC, 351 MIPS_INS_BGTZC, 352 MIPS_INS_BGTZL, 353 MIPS_INS_BINSLI, 354 MIPS_INS_BINSL, 355 MIPS_INS_BINSRI, 356 MIPS_INS_BINSR, 357 MIPS_INS_BITREV, 358 MIPS_INS_BITSWAP, 359 MIPS_INS_BLEZ, 360 MIPS_INS_BLEZALC, 361 MIPS_INS_BLEZC, 362 MIPS_INS_BLEZL, 363 MIPS_INS_BLTC, 364 MIPS_INS_BLTUC, 365 MIPS_INS_BLTZ, 366 MIPS_INS_BLTZAL, 367 MIPS_INS_BLTZALC, 368 MIPS_INS_BLTZALL, 369 MIPS_INS_BLTZALS, 370 MIPS_INS_BLTZC, 371 MIPS_INS_BLTZL, 372 MIPS_INS_BMNZI, 373 MIPS_INS_BMNZ, 374 MIPS_INS_BMZI, 375 MIPS_INS_BMZ, 376 MIPS_INS_BNE, 377 MIPS_INS_BNEC, 378 MIPS_INS_BNEGI, 379 MIPS_INS_BNEG, 380 MIPS_INS_BNEL, 381 MIPS_INS_BNEZ16, 382 MIPS_INS_BNEZALC, 383 MIPS_INS_BNEZC, 384 MIPS_INS_BNVC, 385 MIPS_INS_BNZ, 386 MIPS_INS_BOVC, 387 MIPS_INS_BPOSGE32, 388 MIPS_INS_BREAK, 389 MIPS_INS_BREAK16, 390 MIPS_INS_BSELI, 391 MIPS_INS_BSEL, 392 MIPS_INS_BSETI, 393 MIPS_INS_BSET, 394 MIPS_INS_BZ, 395 MIPS_INS_BEQZ, 396 MIPS_INS_B, 397 MIPS_INS_BNEZ, 398 MIPS_INS_BTEQZ, 399 MIPS_INS_BTNEZ, 400 MIPS_INS_CACHE, 401 MIPS_INS_CEIL, 402 MIPS_INS_CEQI, 403 MIPS_INS_CEQ, 404 MIPS_INS_CFC1, 405 MIPS_INS_CFCMSA, 406 MIPS_INS_CINS, 407 MIPS_INS_CINS32, 408 MIPS_INS_CLASS, 409 MIPS_INS_CLEI_S, 410 MIPS_INS_CLEI_U, 411 MIPS_INS_CLE_S, 412 MIPS_INS_CLE_U, 413 MIPS_INS_CLO, 414 MIPS_INS_CLTI_S, 415 MIPS_INS_CLTI_U, 416 MIPS_INS_CLT_S, 417 MIPS_INS_CLT_U, 418 MIPS_INS_CLZ, 419 MIPS_INS_CMPGDU, 420 MIPS_INS_CMPGU, 421 MIPS_INS_CMPU, 422 MIPS_INS_CMP, 423 MIPS_INS_COPY_S, 424 MIPS_INS_COPY_U, 425 MIPS_INS_CTC1, 426 MIPS_INS_CTCMSA, 427 MIPS_INS_CVT, 428 MIPS_INS_C, 429 MIPS_INS_CMPI, 430 MIPS_INS_DADD, 431 MIPS_INS_DADDI, 432 MIPS_INS_DADDIU, 433 MIPS_INS_DADDU, 434 MIPS_INS_DAHI, 435 MIPS_INS_DALIGN, 436 MIPS_INS_DATI, 437 MIPS_INS_DAUI, 438 MIPS_INS_DBITSWAP, 439 MIPS_INS_DCLO, 440 MIPS_INS_DCLZ, 441 MIPS_INS_DDIV, 442 MIPS_INS_DDIVU, 443 MIPS_INS_DERET, 444 MIPS_INS_DEXT, 445 MIPS_INS_DEXTM, 446 MIPS_INS_DEXTU, 447 MIPS_INS_DI, 448 MIPS_INS_DINS, 449 MIPS_INS_DINSM, 450 MIPS_INS_DINSU, 451 MIPS_INS_DIV, 452 MIPS_INS_DIVU, 453 MIPS_INS_DIV_S, 454 MIPS_INS_DIV_U, 455 MIPS_INS_DLSA, 456 MIPS_INS_DMFC0, 457 MIPS_INS_DMFC1, 458 MIPS_INS_DMFC2, 459 MIPS_INS_DMOD, 460 MIPS_INS_DMODU, 461 MIPS_INS_DMTC0, 462 MIPS_INS_DMTC1, 463 MIPS_INS_DMTC2, 464 MIPS_INS_DMUH, 465 MIPS_INS_DMUHU, 466 MIPS_INS_DMUL, 467 MIPS_INS_DMULT, 468 MIPS_INS_DMULTU, 469 MIPS_INS_DMULU, 470 MIPS_INS_DOTP_S, 471 MIPS_INS_DOTP_U, 472 MIPS_INS_DPADD_S, 473 MIPS_INS_DPADD_U, 474 MIPS_INS_DPAQX_SA, 475 MIPS_INS_DPAQX_S, 476 MIPS_INS_DPAQ_SA, 477 MIPS_INS_DPAQ_S, 478 MIPS_INS_DPAU, 479 MIPS_INS_DPAX, 480 MIPS_INS_DPA, 481 MIPS_INS_DPOP, 482 MIPS_INS_DPSQX_SA, 483 MIPS_INS_DPSQX_S, 484 MIPS_INS_DPSQ_SA, 485 MIPS_INS_DPSQ_S, 486 MIPS_INS_DPSUB_S, 487 MIPS_INS_DPSUB_U, 488 MIPS_INS_DPSU, 489 MIPS_INS_DPSX, 490 MIPS_INS_DPS, 491 MIPS_INS_DROTR, 492 MIPS_INS_DROTR32, 493 MIPS_INS_DROTRV, 494 MIPS_INS_DSBH, 495 MIPS_INS_DSHD, 496 MIPS_INS_DSLL, 497 MIPS_INS_DSLL32, 498 MIPS_INS_DSLLV, 499 MIPS_INS_DSRA, 500 MIPS_INS_DSRA32, 501 MIPS_INS_DSRAV, 502 MIPS_INS_DSRL, 503 MIPS_INS_DSRL32, 504 MIPS_INS_DSRLV, 505 MIPS_INS_DSUB, 506 MIPS_INS_DSUBU, 507 MIPS_INS_EHB, 508 MIPS_INS_EI, 509 MIPS_INS_ERET, 510 MIPS_INS_EXT, 511 MIPS_INS_EXTP, 512 MIPS_INS_EXTPDP, 513 MIPS_INS_EXTPDPV, 514 MIPS_INS_EXTPV, 515 MIPS_INS_EXTRV_RS, 516 MIPS_INS_EXTRV_R, 517 MIPS_INS_EXTRV_S, 518 MIPS_INS_EXTRV, 519 MIPS_INS_EXTR_RS, 520 MIPS_INS_EXTR_R, 521 MIPS_INS_EXTR_S, 522 MIPS_INS_EXTR, 523 MIPS_INS_EXTS, 524 MIPS_INS_EXTS32, 525 MIPS_INS_ABS, 526 MIPS_INS_FADD, 527 MIPS_INS_FCAF, 528 MIPS_INS_FCEQ, 529 MIPS_INS_FCLASS, 530 MIPS_INS_FCLE, 531 MIPS_INS_FCLT, 532 MIPS_INS_FCNE, 533 MIPS_INS_FCOR, 534 MIPS_INS_FCUEQ, 535 MIPS_INS_FCULE, 536 MIPS_INS_FCULT, 537 MIPS_INS_FCUNE, 538 MIPS_INS_FCUN, 539 MIPS_INS_FDIV, 540 MIPS_INS_FEXDO, 541 MIPS_INS_FEXP2, 542 MIPS_INS_FEXUPL, 543 MIPS_INS_FEXUPR, 544 MIPS_INS_FFINT_S, 545 MIPS_INS_FFINT_U, 546 MIPS_INS_FFQL, 547 MIPS_INS_FFQR, 548 MIPS_INS_FILL, 549 MIPS_INS_FLOG2, 550 MIPS_INS_FLOOR, 551 MIPS_INS_FMADD, 552 MIPS_INS_FMAX_A, 553 MIPS_INS_FMAX, 554 MIPS_INS_FMIN_A, 555 MIPS_INS_FMIN, 556 MIPS_INS_MOV, 557 MIPS_INS_FMSUB, 558 MIPS_INS_FMUL, 559 MIPS_INS_MUL, 560 MIPS_INS_NEG, 561 MIPS_INS_FRCP, 562 MIPS_INS_FRINT, 563 MIPS_INS_FRSQRT, 564 MIPS_INS_FSAF, 565 MIPS_INS_FSEQ, 566 MIPS_INS_FSLE, 567 MIPS_INS_FSLT, 568 MIPS_INS_FSNE, 569 MIPS_INS_FSOR, 570 MIPS_INS_FSQRT, 571 MIPS_INS_SQRT, 572 MIPS_INS_FSUB, 573 MIPS_INS_SUB, 574 MIPS_INS_FSUEQ, 575 MIPS_INS_FSULE, 576 MIPS_INS_FSULT, 577 MIPS_INS_FSUNE, 578 MIPS_INS_FSUN, 579 MIPS_INS_FTINT_S, 580 MIPS_INS_FTINT_U, 581 MIPS_INS_FTQ, 582 MIPS_INS_FTRUNC_S, 583 MIPS_INS_FTRUNC_U, 584 MIPS_INS_HADD_S, 585 MIPS_INS_HADD_U, 586 MIPS_INS_HSUB_S, 587 MIPS_INS_HSUB_U, 588 MIPS_INS_ILVEV, 589 MIPS_INS_ILVL, 590 MIPS_INS_ILVOD, 591 MIPS_INS_ILVR, 592 MIPS_INS_INS, 593 MIPS_INS_INSERT, 594 MIPS_INS_INSV, 595 MIPS_INS_INSVE, 596 MIPS_INS_J, 597 MIPS_INS_JAL, 598 MIPS_INS_JALR, 599 MIPS_INS_JALRS16, 600 MIPS_INS_JALRS, 601 MIPS_INS_JALS, 602 MIPS_INS_JALX, 603 MIPS_INS_JIALC, 604 MIPS_INS_JIC, 605 MIPS_INS_JR, 606 MIPS_INS_JR16, 607 MIPS_INS_JRADDIUSP, 608 MIPS_INS_JRC, 609 MIPS_INS_JALRC, 610 MIPS_INS_LB, 611 MIPS_INS_LBU16, 612 MIPS_INS_LBUX, 613 MIPS_INS_LBU, 614 MIPS_INS_LD, 615 MIPS_INS_LDC1, 616 MIPS_INS_LDC2, 617 MIPS_INS_LDC3, 618 MIPS_INS_LDI, 619 MIPS_INS_LDL, 620 MIPS_INS_LDPC, 621 MIPS_INS_LDR, 622 MIPS_INS_LDXC1, 623 MIPS_INS_LH, 624 MIPS_INS_LHU16, 625 MIPS_INS_LHX, 626 MIPS_INS_LHU, 627 MIPS_INS_LI16, 628 MIPS_INS_LL, 629 MIPS_INS_LLD, 630 MIPS_INS_LSA, 631 MIPS_INS_LUXC1, 632 MIPS_INS_LUI, 633 MIPS_INS_LW, 634 MIPS_INS_LW16, 635 MIPS_INS_LWC1, 636 MIPS_INS_LWC2, 637 MIPS_INS_LWC3, 638 MIPS_INS_LWL, 639 MIPS_INS_LWM16, 640 MIPS_INS_LWM32, 641 MIPS_INS_LWPC, 642 MIPS_INS_LWP, 643 MIPS_INS_LWR, 644 MIPS_INS_LWUPC, 645 MIPS_INS_LWU, 646 MIPS_INS_LWX, 647 MIPS_INS_LWXC1, 648 MIPS_INS_LWXS, 649 MIPS_INS_LI, 650 MIPS_INS_MADD, 651 MIPS_INS_MADDF, 652 MIPS_INS_MADDR_Q, 653 MIPS_INS_MADDU, 654 MIPS_INS_MADDV, 655 MIPS_INS_MADD_Q, 656 MIPS_INS_MAQ_SA, 657 MIPS_INS_MAQ_S, 658 MIPS_INS_MAXA, 659 MIPS_INS_MAXI_S, 660 MIPS_INS_MAXI_U, 661 MIPS_INS_MAX_A, 662 MIPS_INS_MAX, 663 MIPS_INS_MAX_S, 664 MIPS_INS_MAX_U, 665 MIPS_INS_MFC0, 666 MIPS_INS_MFC1, 667 MIPS_INS_MFC2, 668 MIPS_INS_MFHC1, 669 MIPS_INS_MFHI, 670 MIPS_INS_MFLO, 671 MIPS_INS_MINA, 672 MIPS_INS_MINI_S, 673 MIPS_INS_MINI_U, 674 MIPS_INS_MIN_A, 675 MIPS_INS_MIN, 676 MIPS_INS_MIN_S, 677 MIPS_INS_MIN_U, 678 MIPS_INS_MOD, 679 MIPS_INS_MODSUB, 680 MIPS_INS_MODU, 681 MIPS_INS_MOD_S, 682 MIPS_INS_MOD_U, 683 MIPS_INS_MOVE, 684 MIPS_INS_MOVEP, 685 MIPS_INS_MOVF, 686 MIPS_INS_MOVN, 687 MIPS_INS_MOVT, 688 MIPS_INS_MOVZ, 689 MIPS_INS_MSUB, 690 MIPS_INS_MSUBF, 691 MIPS_INS_MSUBR_Q, 692 MIPS_INS_MSUBU, 693 MIPS_INS_MSUBV, 694 MIPS_INS_MSUB_Q, 695 MIPS_INS_MTC0, 696 MIPS_INS_MTC1, 697 MIPS_INS_MTC2, 698 MIPS_INS_MTHC1, 699 MIPS_INS_MTHI, 700 MIPS_INS_MTHLIP, 701 MIPS_INS_MTLO, 702 MIPS_INS_MTM0, 703 MIPS_INS_MTM1, 704 MIPS_INS_MTM2, 705 MIPS_INS_MTP0, 706 MIPS_INS_MTP1, 707 MIPS_INS_MTP2, 708 MIPS_INS_MUH, 709 MIPS_INS_MUHU, 710 MIPS_INS_MULEQ_S, 711 MIPS_INS_MULEU_S, 712 MIPS_INS_MULQ_RS, 713 MIPS_INS_MULQ_S, 714 MIPS_INS_MULR_Q, 715 MIPS_INS_MULSAQ_S, 716 MIPS_INS_MULSA, 717 MIPS_INS_MULT, 718 MIPS_INS_MULTU, 719 MIPS_INS_MULU, 720 MIPS_INS_MULV, 721 MIPS_INS_MUL_Q, 722 MIPS_INS_MUL_S, 723 MIPS_INS_NLOC, 724 MIPS_INS_NLZC, 725 MIPS_INS_NMADD, 726 MIPS_INS_NMSUB, 727 MIPS_INS_NOR, 728 MIPS_INS_NORI, 729 MIPS_INS_NOT16, 730 MIPS_INS_NOT, 731 MIPS_INS_OR, 732 MIPS_INS_OR16, 733 MIPS_INS_ORI, 734 MIPS_INS_PACKRL, 735 MIPS_INS_PAUSE, 736 MIPS_INS_PCKEV, 737 MIPS_INS_PCKOD, 738 MIPS_INS_PCNT, 739 MIPS_INS_PICK, 740 MIPS_INS_POP, 741 MIPS_INS_PRECEQU, 742 MIPS_INS_PRECEQ, 743 MIPS_INS_PRECEU, 744 MIPS_INS_PRECRQU_S, 745 MIPS_INS_PRECRQ, 746 MIPS_INS_PRECRQ_RS, 747 MIPS_INS_PRECR, 748 MIPS_INS_PRECR_SRA, 749 MIPS_INS_PRECR_SRA_R, 750 MIPS_INS_PREF, 751 MIPS_INS_PREPEND, 752 MIPS_INS_RADDU, 753 MIPS_INS_RDDSP, 754 MIPS_INS_RDHWR, 755 MIPS_INS_REPLV, 756 MIPS_INS_REPL, 757 MIPS_INS_RINT, 758 MIPS_INS_ROTR, 759 MIPS_INS_ROTRV, 760 MIPS_INS_ROUND, 761 MIPS_INS_SAT_S, 762 MIPS_INS_SAT_U, 763 MIPS_INS_SB, 764 MIPS_INS_SB16, 765 MIPS_INS_SC, 766 MIPS_INS_SCD, 767 MIPS_INS_SD, 768 MIPS_INS_SDBBP, 769 MIPS_INS_SDBBP16, 770 MIPS_INS_SDC1, 771 MIPS_INS_SDC2, 772 MIPS_INS_SDC3, 773 MIPS_INS_SDL, 774 MIPS_INS_SDR, 775 MIPS_INS_SDXC1, 776 MIPS_INS_SEB, 777 MIPS_INS_SEH, 778 MIPS_INS_SELEQZ, 779 MIPS_INS_SELNEZ, 780 MIPS_INS_SEL, 781 MIPS_INS_SEQ, 782 MIPS_INS_SEQI, 783 MIPS_INS_SH, 784 MIPS_INS_SH16, 785 MIPS_INS_SHF, 786 MIPS_INS_SHILO, 787 MIPS_INS_SHILOV, 788 MIPS_INS_SHLLV, 789 MIPS_INS_SHLLV_S, 790 MIPS_INS_SHLL, 791 MIPS_INS_SHLL_S, 792 MIPS_INS_SHRAV, 793 MIPS_INS_SHRAV_R, 794 MIPS_INS_SHRA, 795 MIPS_INS_SHRA_R, 796 MIPS_INS_SHRLV, 797 MIPS_INS_SHRL, 798 MIPS_INS_SLDI, 799 MIPS_INS_SLD, 800 MIPS_INS_SLL, 801 MIPS_INS_SLL16, 802 MIPS_INS_SLLI, 803 MIPS_INS_SLLV, 804 MIPS_INS_SLT, 805 MIPS_INS_SLTI, 806 MIPS_INS_SLTIU, 807 MIPS_INS_SLTU, 808 MIPS_INS_SNE, 809 MIPS_INS_SNEI, 810 MIPS_INS_SPLATI, 811 MIPS_INS_SPLAT, 812 MIPS_INS_SRA, 813 MIPS_INS_SRAI, 814 MIPS_INS_SRARI, 815 MIPS_INS_SRAR, 816 MIPS_INS_SRAV, 817 MIPS_INS_SRL, 818 MIPS_INS_SRL16, 819 MIPS_INS_SRLI, 820 MIPS_INS_SRLRI, 821 MIPS_INS_SRLR, 822 MIPS_INS_SRLV, 823 MIPS_INS_SSNOP, 824 MIPS_INS_ST, 825 MIPS_INS_SUBQH, 826 MIPS_INS_SUBQH_R, 827 MIPS_INS_SUBQ, 828 MIPS_INS_SUBQ_S, 829 MIPS_INS_SUBSUS_U, 830 MIPS_INS_SUBSUU_S, 831 MIPS_INS_SUBS_S, 832 MIPS_INS_SUBS_U, 833 MIPS_INS_SUBU16, 834 MIPS_INS_SUBUH, 835 MIPS_INS_SUBUH_R, 836 MIPS_INS_SUBU, 837 MIPS_INS_SUBU_S, 838 MIPS_INS_SUBVI, 839 MIPS_INS_SUBV, 840 MIPS_INS_SUXC1, 841 MIPS_INS_SW, 842 MIPS_INS_SW16, 843 MIPS_INS_SWC1, 844 MIPS_INS_SWC2, 845 MIPS_INS_SWC3, 846 MIPS_INS_SWL, 847 MIPS_INS_SWM16, 848 MIPS_INS_SWM32, 849 MIPS_INS_SWP, 850 MIPS_INS_SWR, 851 MIPS_INS_SWXC1, 852 MIPS_INS_SYNC, 853 MIPS_INS_SYNCI, 854 MIPS_INS_SYSCALL, 855 MIPS_INS_TEQ, 856 MIPS_INS_TEQI, 857 MIPS_INS_TGE, 858 MIPS_INS_TGEI, 859 MIPS_INS_TGEIU, 860 MIPS_INS_TGEU, 861 MIPS_INS_TLBP, 862 MIPS_INS_TLBR, 863 MIPS_INS_TLBWI, 864 MIPS_INS_TLBWR, 865 MIPS_INS_TLT, 866 MIPS_INS_TLTI, 867 MIPS_INS_TLTIU, 868 MIPS_INS_TLTU, 869 MIPS_INS_TNE, 870 MIPS_INS_TNEI, 871 MIPS_INS_TRUNC, 872 MIPS_INS_V3MULU, 873 MIPS_INS_VMM0, 874 MIPS_INS_VMULU, 875 MIPS_INS_VSHF, 876 MIPS_INS_WAIT, 877 MIPS_INS_WRDSP, 878 MIPS_INS_WSBH, 879 MIPS_INS_XOR, 880 MIPS_INS_XOR16, 881 MIPS_INS_XORI, 882 883 //> some alias instructions 884 MIPS_INS_NOP, 885 MIPS_INS_NEGU, 886 887 //> special instructions 888 MIPS_INS_JALR_HB, // jump and link with Hazard Barrier 889 MIPS_INS_JR_HB, // jump register with Hazard Barrier 890 891 MIPS_INS_ENDING, 892 } mips_insn; 893 894 /// Group of MIPS instructions 895 typedef enum mips_insn_group { 896 MIPS_GRP_INVALID = 0, ///< = CS_GRP_INVALID 897 898 // Generic groups 899 // all jump instructions (conditional+direct+indirect jumps) 900 MIPS_GRP_JUMP, ///< = CS_GRP_JUMP 901 // all call instructions 902 MIPS_GRP_CALL, ///< = CS_GRP_CALL 903 // all return instructions 904 MIPS_GRP_RET, ///< = CS_GRP_RET 905 // all interrupt instructions (int+syscall) 906 MIPS_GRP_INT, ///< = CS_GRP_INT 907 // all interrupt return instructions 908 MIPS_GRP_IRET, ///< = CS_GRP_IRET 909 // all privileged instructions 910 MIPS_GRP_PRIVILEGE, ///< = CS_GRP_PRIVILEGE 911 // all relative branching instructions 912 MIPS_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE 913 914 // Architecture-specific groups 915 MIPS_GRP_BITCOUNT = 128, 916 MIPS_GRP_DSP, 917 MIPS_GRP_DSPR2, 918 MIPS_GRP_FPIDX, 919 MIPS_GRP_MSA, 920 MIPS_GRP_MIPS32R2, 921 MIPS_GRP_MIPS64, 922 MIPS_GRP_MIPS64R2, 923 MIPS_GRP_SEINREG, 924 MIPS_GRP_STDENC, 925 MIPS_GRP_SWAP, 926 MIPS_GRP_MICROMIPS, 927 MIPS_GRP_MIPS16MODE, 928 MIPS_GRP_FP64BIT, 929 MIPS_GRP_NONANSFPMATH, 930 MIPS_GRP_NOTFP64BIT, 931 MIPS_GRP_NOTINMICROMIPS, 932 MIPS_GRP_NOTNACL, 933 MIPS_GRP_NOTMIPS32R6, 934 MIPS_GRP_NOTMIPS64R6, 935 MIPS_GRP_CNMIPS, 936 MIPS_GRP_MIPS32, 937 MIPS_GRP_MIPS32R6, 938 MIPS_GRP_MIPS64R6, 939 MIPS_GRP_MIPS2, 940 MIPS_GRP_MIPS3, 941 MIPS_GRP_MIPS3_32, 942 MIPS_GRP_MIPS3_32R2, 943 MIPS_GRP_MIPS4_32, 944 MIPS_GRP_MIPS4_32R2, 945 MIPS_GRP_MIPS5_32R2, 946 MIPS_GRP_GP32BIT, 947 MIPS_GRP_GP64BIT, 948 949 MIPS_GRP_ENDING, 950 } mips_insn_group; 951 952 #ifdef __cplusplus 953 } 954 #endif 955 956 #endif 957