mips.h 17 KB

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