blob: ee09797b5f9784a7b52c6dd0dd3b56cc28357e2f [file] [log] [blame]
Nguyen Anh Quynhdd407502014-01-19 23:51:34 +08001#ifndef CAPSTONE_ARM_H
2#define CAPSTONE_ARM_H
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08003
4/* Capstone Disassembler Engine */
5/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013> */
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11#include <stdint.h>
12#include <stdbool.h>
13
Alex Ionescu46018db2014-01-22 09:45:00 -080014#ifdef _MSC_VER
15#pragma warning(disable:4201)
16#endif
17
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080018//> ARM shift type
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080019typedef enum arm_shifter {
20 ARM_SFT_INVALID = 0,
21 ARM_SFT_ASR, // shift with immediate const
22 ARM_SFT_LSL, // shift with immediate const
23 ARM_SFT_LSR, // shift with immediate const
24 ARM_SFT_ROR, // shift with immediate const
25 ARM_SFT_RRX, // shift with immediate const
26 ARM_SFT_ASR_REG, // shift with register
27 ARM_SFT_LSL_REG, // shift with register
28 ARM_SFT_LSR_REG, // shift with register
29 ARM_SFT_ROR_REG, // shift with register
30 ARM_SFT_RRX_REG, // shift with register
31} arm_shifter;
32
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080033//> ARM condition code
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080034typedef enum arm_cc {
35 ARM_CC_INVALID = 0,
36 ARM_CC_EQ, // Equal Equal
37 ARM_CC_NE, // Not equal Not equal, or unordered
38 ARM_CC_HS, // Carry set >, ==, or unordered
39 ARM_CC_LO, // Carry clear Less than
40 ARM_CC_MI, // Minus, negative Less than
41 ARM_CC_PL, // Plus, positive or zero >, ==, or unordered
42 ARM_CC_VS, // Overflow Unordered
43 ARM_CC_VC, // No overflow Not unordered
44 ARM_CC_HI, // Unsigned higher Greater than, or unordered
45 ARM_CC_LS, // Unsigned lower or same Less than or equal
46 ARM_CC_GE, // Greater than or equal Greater than or equal
47 ARM_CC_LT, // Less than Less than, or unordered
48 ARM_CC_GT, // Greater than Greater than
49 ARM_CC_LE, // Less than or equal <, ==, or unordered
50 ARM_CC_AL // Always (unconditional) Always (unconditional)
51} arm_cc;
52
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +080053//> Operand type for instruction's operands
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080054typedef enum arm_op_type {
55 ARM_OP_INVALID = 0, // Uninitialized.
56 ARM_OP_REG, // Register operand.
Nguyen Anh Quynhdf3fb002013-12-19 12:41:32 +080057 ARM_OP_CIMM, // C-Immediate (coprocessor registers)
58 ARM_OP_PIMM, // P-Immediate (coprocessor registers)
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080059 ARM_OP_IMM, // Immediate operand.
60 ARM_OP_FP, // Floating-Point immediate operand.
61 ARM_OP_MEM, // Memory operand
62} arm_op_type;
63
64// Instruction's operand referring to memory
65// This is associated with ARM_OP_MEM operand type above
66typedef struct arm_op_mem {
67 unsigned int base; // base register
68 unsigned int index; // index register
69 int scale; // scale for index register (can be 1, or -1)
Nguyen Anh Quynhb42a6572013-11-29 17:40:07 +080070 int disp; // displacement/offset value
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080071} arm_op_mem;
72
73// Instruction operand
74typedef struct cs_arm_op {
75 struct {
76 arm_shifter type;
77 unsigned int value;
78 } shift;
79 arm_op_type type; // operand type
80 union {
81 unsigned int reg; // register value for REG operand
Nguyen Anh Quynhb42a6572013-11-29 17:40:07 +080082 unsigned int imm; // immediate value for C-IMM, P-IMM or IMM operand
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080083 double fp; // floating point value for FP operand
84 arm_op_mem mem; // base/index/scale/disp value for MEM operand
85 };
86} cs_arm_op;
87
88// Instruction structure
89typedef struct cs_arm {
90 arm_cc cc; // conditional code for this insn
91 bool update_flags; // does this insn update flags?
92 bool writeback; // does this insn write-back?
93
94 // Number of operands of this instruction,
95 // or 0 when instruction has no operand.
96 uint8_t op_count;
97
Nguyen Anh Quynhb99aec82014-01-13 23:29:39 +080098 cs_arm_op operands[36]; // operands for this instruction.
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080099} cs_arm;
100
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +0800101//> ARM registers
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800102typedef enum arm_reg {
103 ARM_REG_INVALID = 0,
104 ARM_REG_APSR,
105 ARM_REG_APSR_NZCV,
106 ARM_REG_CPSR,
107 ARM_REG_FPEXC,
108 ARM_REG_FPINST,
109 ARM_REG_FPSCR,
110 ARM_REG_FPSCR_NZCV,
111 ARM_REG_FPSID,
112 ARM_REG_ITSTATE,
113 ARM_REG_LR,
114 ARM_REG_PC,
115 ARM_REG_SP,
116 ARM_REG_SPSR,
117 ARM_REG_D0,
118 ARM_REG_D1,
119 ARM_REG_D2,
120 ARM_REG_D3,
121 ARM_REG_D4,
122 ARM_REG_D5,
123 ARM_REG_D6,
124 ARM_REG_D7,
125 ARM_REG_D8,
126 ARM_REG_D9,
127 ARM_REG_D10,
128 ARM_REG_D11,
129 ARM_REG_D12,
130 ARM_REG_D13,
131 ARM_REG_D14,
132 ARM_REG_D15,
133 ARM_REG_D16,
134 ARM_REG_D17,
135 ARM_REG_D18,
136 ARM_REG_D19,
137 ARM_REG_D20,
138 ARM_REG_D21,
139 ARM_REG_D22,
140 ARM_REG_D23,
141 ARM_REG_D24,
142 ARM_REG_D25,
143 ARM_REG_D26,
144 ARM_REG_D27,
145 ARM_REG_D28,
146 ARM_REG_D29,
147 ARM_REG_D30,
148 ARM_REG_D31,
149 ARM_REG_FPINST2,
150 ARM_REG_MVFR0,
151 ARM_REG_MVFR1,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800152 ARM_REG_MVFR2,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800153 ARM_REG_Q0,
154 ARM_REG_Q1,
155 ARM_REG_Q2,
156 ARM_REG_Q3,
157 ARM_REG_Q4,
158 ARM_REG_Q5,
159 ARM_REG_Q6,
160 ARM_REG_Q7,
161 ARM_REG_Q8,
162 ARM_REG_Q9,
163 ARM_REG_Q10,
164 ARM_REG_Q11,
165 ARM_REG_Q12,
166 ARM_REG_Q13,
167 ARM_REG_Q14,
168 ARM_REG_Q15,
169 ARM_REG_R0,
170 ARM_REG_R1,
171 ARM_REG_R2,
172 ARM_REG_R3,
173 ARM_REG_R4,
174 ARM_REG_R5,
175 ARM_REG_R6,
176 ARM_REG_R7,
177 ARM_REG_R8,
178 ARM_REG_R9,
179 ARM_REG_R10,
180 ARM_REG_R11,
181 ARM_REG_R12,
182 ARM_REG_S0,
183 ARM_REG_S1,
184 ARM_REG_S2,
185 ARM_REG_S3,
186 ARM_REG_S4,
187 ARM_REG_S5,
188 ARM_REG_S6,
189 ARM_REG_S7,
190 ARM_REG_S8,
191 ARM_REG_S9,
192 ARM_REG_S10,
193 ARM_REG_S11,
194 ARM_REG_S12,
195 ARM_REG_S13,
196 ARM_REG_S14,
197 ARM_REG_S15,
198 ARM_REG_S16,
199 ARM_REG_S17,
200 ARM_REG_S18,
201 ARM_REG_S19,
202 ARM_REG_S20,
203 ARM_REG_S21,
204 ARM_REG_S22,
205 ARM_REG_S23,
206 ARM_REG_S24,
207 ARM_REG_S25,
208 ARM_REG_S26,
209 ARM_REG_S27,
210 ARM_REG_S28,
211 ARM_REG_S29,
212 ARM_REG_S30,
213 ARM_REG_S31,
Nguyen Anh Quynhb39ef0b2013-12-04 11:52:28 +0800214
Nguyen Anh Quynhea5b79d2013-12-04 12:10:47 +0800215 ARM_REG_MAX, // <-- mark the end of the list or registers
Nguyen Anh Quynhb39ef0b2013-12-04 11:52:28 +0800216
Nguyen Anh Quynhd06e2f52013-12-19 16:50:57 +0800217 //> alias registers
Nguyen Anh Quynhb39ef0b2013-12-04 11:52:28 +0800218 ARM_REG_R13 = ARM_REG_SP,
219 ARM_REG_R14 = ARM_REG_LR,
220 ARM_REG_R15 = ARM_REG_PC,
Nguyen Anh Quynhd06e2f52013-12-19 16:50:57 +0800221
222 ARM_REG_SB = ARM_REG_R9,
223 ARM_REG_SL = ARM_REG_R10,
224 ARM_REG_FP = ARM_REG_R11,
225 ARM_REG_IP = ARM_REG_R12,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800226} arm_reg;
227
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +0800228//> ARM instruction
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800229typedef enum arm_insn {
230 ARM_INS_INVALID = 0,
Nguyen Anh Quynh9cc56a32014-01-15 16:01:55 +0800231
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800232 ARM_INS_ADC,
233 ARM_INS_ADD,
234 ARM_INS_ADR,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800235 ARM_INS_AESD,
236 ARM_INS_AESE,
237 ARM_INS_AESIMC,
238 ARM_INS_AESMC,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800239 ARM_INS_AND,
240 ARM_INS_BFC,
241 ARM_INS_BFI,
242 ARM_INS_BIC,
243 ARM_INS_BKPT,
244 ARM_INS_BL,
245 ARM_INS_BLX,
246 ARM_INS_BX,
247 ARM_INS_BXJ,
248 ARM_INS_B,
249 ARM_INS_CDP,
250 ARM_INS_CDP2,
251 ARM_INS_CLREX,
252 ARM_INS_CLZ,
253 ARM_INS_CMN,
254 ARM_INS_CMP,
255 ARM_INS_CPS,
256 ARM_INS_CRC32B,
257 ARM_INS_CRC32CB,
258 ARM_INS_CRC32CH,
259 ARM_INS_CRC32CW,
260 ARM_INS_CRC32H,
261 ARM_INS_CRC32W,
262 ARM_INS_DBG,
263 ARM_INS_DMB,
264 ARM_INS_DSB,
265 ARM_INS_EOR,
266 ARM_INS_VMOV,
267 ARM_INS_FLDMDBX,
268 ARM_INS_FLDMIAX,
269 ARM_INS_VMRS,
270 ARM_INS_FSTMDBX,
271 ARM_INS_FSTMIAX,
272 ARM_INS_HINT,
273 ARM_INS_HLT,
274 ARM_INS_ISB,
275 ARM_INS_LDA,
276 ARM_INS_LDAB,
277 ARM_INS_LDAEX,
278 ARM_INS_LDAEXB,
279 ARM_INS_LDAEXD,
280 ARM_INS_LDAEXH,
281 ARM_INS_LDAH,
282 ARM_INS_LDC2L,
283 ARM_INS_LDC2,
284 ARM_INS_LDCL,
285 ARM_INS_LDC,
286 ARM_INS_LDMDA,
287 ARM_INS_LDMDB,
288 ARM_INS_LDM,
289 ARM_INS_LDMIB,
290 ARM_INS_LDRBT,
291 ARM_INS_LDRB,
292 ARM_INS_LDRD,
293 ARM_INS_LDREX,
294 ARM_INS_LDREXB,
295 ARM_INS_LDREXD,
296 ARM_INS_LDREXH,
297 ARM_INS_LDRH,
298 ARM_INS_LDRHT,
299 ARM_INS_LDRSB,
300 ARM_INS_LDRSBT,
301 ARM_INS_LDRSH,
302 ARM_INS_LDRSHT,
303 ARM_INS_LDRT,
304 ARM_INS_LDR,
305 ARM_INS_MCR,
306 ARM_INS_MCR2,
307 ARM_INS_MCRR,
308 ARM_INS_MCRR2,
309 ARM_INS_MLA,
310 ARM_INS_MLS,
311 ARM_INS_MOV,
312 ARM_INS_MOVT,
313 ARM_INS_MOVW,
314 ARM_INS_MRC,
315 ARM_INS_MRC2,
316 ARM_INS_MRRC,
317 ARM_INS_MRRC2,
318 ARM_INS_MRS,
319 ARM_INS_MSR,
320 ARM_INS_MUL,
321 ARM_INS_MVN,
322 ARM_INS_ORR,
323 ARM_INS_PKHBT,
324 ARM_INS_PKHTB,
325 ARM_INS_PLDW,
326 ARM_INS_PLD,
327 ARM_INS_PLI,
328 ARM_INS_QADD,
329 ARM_INS_QADD16,
330 ARM_INS_QADD8,
331 ARM_INS_QASX,
332 ARM_INS_QDADD,
333 ARM_INS_QDSUB,
334 ARM_INS_QSAX,
335 ARM_INS_QSUB,
336 ARM_INS_QSUB16,
337 ARM_INS_QSUB8,
338 ARM_INS_RBIT,
339 ARM_INS_REV,
340 ARM_INS_REV16,
341 ARM_INS_REVSH,
342 ARM_INS_RFEDA,
343 ARM_INS_RFEDB,
344 ARM_INS_RFEIA,
345 ARM_INS_RFEIB,
346 ARM_INS_RSB,
347 ARM_INS_RSC,
348 ARM_INS_SADD16,
349 ARM_INS_SADD8,
350 ARM_INS_SASX,
351 ARM_INS_SBC,
352 ARM_INS_SBFX,
353 ARM_INS_SDIV,
354 ARM_INS_SEL,
355 ARM_INS_SETEND,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800356 ARM_INS_SHA1C,
357 ARM_INS_SHA1H,
358 ARM_INS_SHA1M,
359 ARM_INS_SHA1P,
360 ARM_INS_SHA1SU0,
361 ARM_INS_SHA1SU1,
362 ARM_INS_SHA256H,
363 ARM_INS_SHA256H2,
364 ARM_INS_SHA256SU0,
365 ARM_INS_SHA256SU1,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800366 ARM_INS_SHADD16,
367 ARM_INS_SHADD8,
368 ARM_INS_SHASX,
369 ARM_INS_SHSAX,
370 ARM_INS_SHSUB16,
371 ARM_INS_SHSUB8,
372 ARM_INS_SMC,
373 ARM_INS_SMLABB,
374 ARM_INS_SMLABT,
375 ARM_INS_SMLAD,
376 ARM_INS_SMLADX,
377 ARM_INS_SMLAL,
378 ARM_INS_SMLALBB,
379 ARM_INS_SMLALBT,
380 ARM_INS_SMLALD,
381 ARM_INS_SMLALDX,
382 ARM_INS_SMLALTB,
383 ARM_INS_SMLALTT,
384 ARM_INS_SMLATB,
385 ARM_INS_SMLATT,
386 ARM_INS_SMLAWB,
387 ARM_INS_SMLAWT,
388 ARM_INS_SMLSD,
389 ARM_INS_SMLSDX,
390 ARM_INS_SMLSLD,
391 ARM_INS_SMLSLDX,
392 ARM_INS_SMMLA,
393 ARM_INS_SMMLAR,
394 ARM_INS_SMMLS,
395 ARM_INS_SMMLSR,
396 ARM_INS_SMMUL,
397 ARM_INS_SMMULR,
398 ARM_INS_SMUAD,
399 ARM_INS_SMUADX,
400 ARM_INS_SMULBB,
401 ARM_INS_SMULBT,
402 ARM_INS_SMULL,
403 ARM_INS_SMULTB,
404 ARM_INS_SMULTT,
405 ARM_INS_SMULWB,
406 ARM_INS_SMULWT,
407 ARM_INS_SMUSD,
408 ARM_INS_SMUSDX,
409 ARM_INS_SRSDA,
410 ARM_INS_SRSDB,
411 ARM_INS_SRSIA,
412 ARM_INS_SRSIB,
413 ARM_INS_SSAT,
414 ARM_INS_SSAT16,
415 ARM_INS_SSAX,
416 ARM_INS_SSUB16,
417 ARM_INS_SSUB8,
418 ARM_INS_STC2L,
419 ARM_INS_STC2,
420 ARM_INS_STCL,
421 ARM_INS_STC,
422 ARM_INS_STL,
423 ARM_INS_STLB,
424 ARM_INS_STLEX,
425 ARM_INS_STLEXB,
426 ARM_INS_STLEXD,
427 ARM_INS_STLEXH,
428 ARM_INS_STLH,
429 ARM_INS_STMDA,
430 ARM_INS_STMDB,
431 ARM_INS_STM,
432 ARM_INS_STMIB,
433 ARM_INS_STRBT,
434 ARM_INS_STRB,
435 ARM_INS_STRD,
436 ARM_INS_STREX,
437 ARM_INS_STREXB,
438 ARM_INS_STREXD,
439 ARM_INS_STREXH,
440 ARM_INS_STRH,
441 ARM_INS_STRHT,
442 ARM_INS_STRT,
443 ARM_INS_STR,
444 ARM_INS_SUB,
445 ARM_INS_SVC,
446 ARM_INS_SWP,
447 ARM_INS_SWPB,
448 ARM_INS_SXTAB,
449 ARM_INS_SXTAB16,
450 ARM_INS_SXTAH,
451 ARM_INS_SXTB,
452 ARM_INS_SXTB16,
453 ARM_INS_SXTH,
454 ARM_INS_TEQ,
455 ARM_INS_TRAP,
456 ARM_INS_TST,
457 ARM_INS_UADD16,
458 ARM_INS_UADD8,
459 ARM_INS_UASX,
460 ARM_INS_UBFX,
461 ARM_INS_UDIV,
462 ARM_INS_UHADD16,
463 ARM_INS_UHADD8,
464 ARM_INS_UHASX,
465 ARM_INS_UHSAX,
466 ARM_INS_UHSUB16,
467 ARM_INS_UHSUB8,
468 ARM_INS_UMAAL,
469 ARM_INS_UMLAL,
470 ARM_INS_UMULL,
471 ARM_INS_UQADD16,
472 ARM_INS_UQADD8,
473 ARM_INS_UQASX,
474 ARM_INS_UQSAX,
475 ARM_INS_UQSUB16,
476 ARM_INS_UQSUB8,
477 ARM_INS_USAD8,
478 ARM_INS_USADA8,
479 ARM_INS_USAT,
480 ARM_INS_USAT16,
481 ARM_INS_USAX,
482 ARM_INS_USUB16,
483 ARM_INS_USUB8,
484 ARM_INS_UXTAB,
485 ARM_INS_UXTAB16,
486 ARM_INS_UXTAH,
487 ARM_INS_UXTB,
488 ARM_INS_UXTB16,
489 ARM_INS_UXTH,
490 ARM_INS_VABAL,
491 ARM_INS_VABA,
492 ARM_INS_VABDL,
493 ARM_INS_VABD,
494 ARM_INS_VABS,
495 ARM_INS_VACGE,
496 ARM_INS_VACGT,
497 ARM_INS_VADD,
498 ARM_INS_VADDHN,
499 ARM_INS_VADDL,
500 ARM_INS_VADDW,
501 ARM_INS_VAND,
502 ARM_INS_VBIC,
503 ARM_INS_VBIF,
504 ARM_INS_VBIT,
505 ARM_INS_VBSL,
506 ARM_INS_VCEQ,
507 ARM_INS_VCGE,
508 ARM_INS_VCGT,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800509 ARM_INS_VCLS,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800510 ARM_INS_VCLZ,
511 ARM_INS_VCMP,
512 ARM_INS_VCMPE,
513 ARM_INS_VCNT,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800514 ARM_INS_VCVTA,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800515 ARM_INS_VCVTB,
516 ARM_INS_VCVT,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800517 ARM_INS_VCVTM,
518 ARM_INS_VCVTN,
519 ARM_INS_VCVTP,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800520 ARM_INS_VCVTT,
521 ARM_INS_VDIV,
522 ARM_INS_VDUP,
523 ARM_INS_VEOR,
524 ARM_INS_VEXT,
525 ARM_INS_VFMA,
526 ARM_INS_VFMS,
527 ARM_INS_VFNMA,
528 ARM_INS_VFNMS,
529 ARM_INS_VHADD,
530 ARM_INS_VHSUB,
531 ARM_INS_VLD1,
532 ARM_INS_VLD2,
533 ARM_INS_VLD3,
534 ARM_INS_VLD4,
535 ARM_INS_VLDMDB,
536 ARM_INS_VLDMIA,
537 ARM_INS_VLDR,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800538 ARM_INS_VMAXNM,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800539 ARM_INS_VMAX,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800540 ARM_INS_VMINNM,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800541 ARM_INS_VMIN,
542 ARM_INS_VMLA,
543 ARM_INS_VMLAL,
544 ARM_INS_VMLS,
545 ARM_INS_VMLSL,
546 ARM_INS_VMOVL,
547 ARM_INS_VMOVN,
548 ARM_INS_VMSR,
549 ARM_INS_VMUL,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800550 ARM_INS_VMULL,
551 ARM_INS_VMVN,
552 ARM_INS_VNEG,
553 ARM_INS_VNMLA,
554 ARM_INS_VNMLS,
555 ARM_INS_VNMUL,
556 ARM_INS_VORN,
557 ARM_INS_VORR,
558 ARM_INS_VPADAL,
559 ARM_INS_VPADDL,
560 ARM_INS_VPADD,
561 ARM_INS_VPMAX,
562 ARM_INS_VPMIN,
563 ARM_INS_VQABS,
564 ARM_INS_VQADD,
565 ARM_INS_VQDMLAL,
566 ARM_INS_VQDMLSL,
567 ARM_INS_VQDMULH,
568 ARM_INS_VQDMULL,
569 ARM_INS_VQMOVUN,
570 ARM_INS_VQMOVN,
571 ARM_INS_VQNEG,
572 ARM_INS_VQRDMULH,
573 ARM_INS_VQRSHL,
574 ARM_INS_VQRSHRN,
575 ARM_INS_VQRSHRUN,
576 ARM_INS_VQSHL,
577 ARM_INS_VQSHLU,
578 ARM_INS_VQSHRN,
579 ARM_INS_VQSHRUN,
580 ARM_INS_VQSUB,
581 ARM_INS_VRADDHN,
582 ARM_INS_VRECPE,
583 ARM_INS_VRECPS,
584 ARM_INS_VREV16,
585 ARM_INS_VREV32,
586 ARM_INS_VREV64,
587 ARM_INS_VRHADD,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800588 ARM_INS_VRINTA,
589 ARM_INS_VRINTM,
590 ARM_INS_VRINTN,
591 ARM_INS_VRINTP,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800592 ARM_INS_VRINTR,
593 ARM_INS_VRINTX,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800594 ARM_INS_VRINTZ,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800595 ARM_INS_VRSHL,
596 ARM_INS_VRSHRN,
597 ARM_INS_VRSHR,
598 ARM_INS_VRSQRTE,
599 ARM_INS_VRSQRTS,
600 ARM_INS_VRSRA,
601 ARM_INS_VRSUBHN,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800602 ARM_INS_VSELEQ,
603 ARM_INS_VSELGE,
604 ARM_INS_VSELGT,
605 ARM_INS_VSELVS,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800606 ARM_INS_VSHLL,
607 ARM_INS_VSHL,
608 ARM_INS_VSHRN,
609 ARM_INS_VSHR,
610 ARM_INS_VSLI,
611 ARM_INS_VSQRT,
612 ARM_INS_VSRA,
613 ARM_INS_VSRI,
614 ARM_INS_VST1,
615 ARM_INS_VST2,
616 ARM_INS_VST3,
617 ARM_INS_VST4,
618 ARM_INS_VSTMDB,
619 ARM_INS_VSTMIA,
620 ARM_INS_VSTR,
621 ARM_INS_VSUB,
622 ARM_INS_VSUBHN,
623 ARM_INS_VSUBL,
624 ARM_INS_VSUBW,
625 ARM_INS_VSWP,
626 ARM_INS_VTBL,
627 ARM_INS_VTBX,
628 ARM_INS_VCVTR,
629 ARM_INS_VTRN,
630 ARM_INS_VTST,
631 ARM_INS_VUZP,
632 ARM_INS_VZIP,
633 ARM_INS_ADDW,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800634 ARM_INS_ASR,
635 ARM_INS_DCPS1,
636 ARM_INS_DCPS2,
637 ARM_INS_DCPS3,
638 ARM_INS_IT,
639 ARM_INS_LSL,
640 ARM_INS_LSR,
641 ARM_INS_ORN,
642 ARM_INS_ROR,
643 ARM_INS_RRX,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800644 ARM_INS_SUBS,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800645 ARM_INS_SUBW,
646 ARM_INS_TBB,
647 ARM_INS_TBH,
648 ARM_INS_CBNZ,
649 ARM_INS_CBZ,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800650 ARM_INS_MOVS,
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800651 ARM_INS_POP,
652 ARM_INS_PUSH,
Nguyen Anh Quynh9cc56a32014-01-15 16:01:55 +0800653
Nguyen Anh Quynh6b804da2014-02-19 12:52:50 +0800654 ARM_INS_MAX, // <-- mark the end of the list of instructions
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800655} arm_insn;
656
Nguyen Anh Quynha2f825f2013-12-04 23:56:24 +0800657//> Group of ARM instructions
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800658typedef enum arm_insn_group {
659 ARM_GRP_INVALID = 0,
660 ARM_GRP_CRYPTO,
661 ARM_GRP_DATABARRIER,
662 ARM_GRP_DIVIDE,
663 ARM_GRP_FPARMV8,
664 ARM_GRP_MULTPRO,
665 ARM_GRP_NEON,
666 ARM_GRP_T2EXTRACTPACK,
667 ARM_GRP_THUMB2DSP,
668 ARM_GRP_TRUSTZONE,
669 ARM_GRP_V4T,
670 ARM_GRP_V5T,
671 ARM_GRP_V5TE,
672 ARM_GRP_V6,
673 ARM_GRP_V6T2,
674 ARM_GRP_V7,
675 ARM_GRP_V8,
676 ARM_GRP_VFP2,
677 ARM_GRP_VFP3,
678 ARM_GRP_VFP4,
679 ARM_GRP_ARM,
680 ARM_GRP_MCLASS,
681 ARM_GRP_NOTMCLASS,
682 ARM_GRP_THUMB,
683 ARM_GRP_THUMB1ONLY,
684 ARM_GRP_THUMB2,
685 ARM_GRP_PREV8,
686 ARM_GRP_FPVMLX,
687 ARM_GRP_MULOPS,
Nguyen Anh Quynh173ed2b2013-12-01 22:19:27 +0800688 ARM_GRP_CRC,
689 ARM_GRP_DPVFP,
690 ARM_GRP_V6M,
Nguyen Anh Quynhec0ed8e2013-12-02 13:55:38 +0800691
Nguyen Anh Quynh3582bc12013-12-03 09:43:27 +0800692 ARM_GRP_JUMP, // all jump instructions (conditional+direct+indirect jumps)
693
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800694 ARM_GRP_MAX,
695} arm_insn_group;
696
697#ifdef __cplusplus
698}
699#endif
700
701#endif