You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
701 lines
12 KiB
701 lines
12 KiB
#ifndef CAPSTONE_ARM_H |
|
#define CAPSTONE_ARM_H |
|
|
|
/* Capstone Disassembly Engine */ |
|
/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */ |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#include <stdint.h> |
|
#include "platform.h" |
|
|
|
#ifdef _MSC_VER |
|
#pragma warning(disable:4201) |
|
#endif |
|
|
|
//> ARM shift type |
|
typedef enum arm_shifter { |
|
ARM_SFT_INVALID = 0, |
|
ARM_SFT_ASR, // shift with immediate const |
|
ARM_SFT_LSL, // shift with immediate const |
|
ARM_SFT_LSR, // shift with immediate const |
|
ARM_SFT_ROR, // shift with immediate const |
|
ARM_SFT_RRX, // shift with immediate const |
|
ARM_SFT_ASR_REG, // shift with register |
|
ARM_SFT_LSL_REG, // shift with register |
|
ARM_SFT_LSR_REG, // shift with register |
|
ARM_SFT_ROR_REG, // shift with register |
|
ARM_SFT_RRX_REG, // shift with register |
|
} arm_shifter; |
|
|
|
//> ARM condition code |
|
typedef enum arm_cc { |
|
ARM_CC_INVALID = 0, |
|
ARM_CC_EQ, // Equal Equal |
|
ARM_CC_NE, // Not equal Not equal, or unordered |
|
ARM_CC_HS, // Carry set >, ==, or unordered |
|
ARM_CC_LO, // Carry clear Less than |
|
ARM_CC_MI, // Minus, negative Less than |
|
ARM_CC_PL, // Plus, positive or zero >, ==, or unordered |
|
ARM_CC_VS, // Overflow Unordered |
|
ARM_CC_VC, // No overflow Not unordered |
|
ARM_CC_HI, // Unsigned higher Greater than, or unordered |
|
ARM_CC_LS, // Unsigned lower or same Less than or equal |
|
ARM_CC_GE, // Greater than or equal Greater than or equal |
|
ARM_CC_LT, // Less than Less than, or unordered |
|
ARM_CC_GT, // Greater than Greater than |
|
ARM_CC_LE, // Less than or equal <, ==, or unordered |
|
ARM_CC_AL // Always (unconditional) Always (unconditional) |
|
} arm_cc; |
|
|
|
//> Operand type for instruction's operands |
|
typedef enum arm_op_type { |
|
ARM_OP_INVALID = 0, // Uninitialized. |
|
ARM_OP_REG, // Register operand. |
|
ARM_OP_CIMM, // C-Immediate (coprocessor registers) |
|
ARM_OP_PIMM, // P-Immediate (coprocessor registers) |
|
ARM_OP_IMM, // Immediate operand. |
|
ARM_OP_FP, // Floating-Point immediate operand. |
|
ARM_OP_MEM, // Memory operand |
|
} arm_op_type; |
|
|
|
// Instruction's operand referring to memory |
|
// This is associated with ARM_OP_MEM operand type above |
|
typedef struct arm_op_mem { |
|
unsigned int base; // base register |
|
unsigned int index; // index register |
|
int scale; // scale for index register (can be 1, or -1) |
|
int disp; // displacement/offset value |
|
} arm_op_mem; |
|
|
|
// Instruction operand |
|
typedef struct cs_arm_op { |
|
struct { |
|
arm_shifter type; |
|
unsigned int value; |
|
} shift; |
|
arm_op_type type; // operand type |
|
union { |
|
unsigned int reg; // register value for REG operand |
|
int32_t imm; // immediate value for C-IMM, P-IMM or IMM operand |
|
double fp; // floating point value for FP operand |
|
arm_op_mem mem; // base/index/scale/disp value for MEM operand |
|
}; |
|
} cs_arm_op; |
|
|
|
// Instruction structure |
|
typedef struct cs_arm { |
|
arm_cc cc; // conditional code for this insn |
|
bool update_flags; // does this insn update flags? |
|
bool writeback; // does this insn write-back? |
|
|
|
// Number of operands of this instruction, |
|
// or 0 when instruction has no operand. |
|
uint8_t op_count; |
|
|
|
cs_arm_op operands[36]; // operands for this instruction. |
|
} cs_arm; |
|
|
|
//> ARM registers |
|
typedef enum arm_reg { |
|
ARM_REG_INVALID = 0, |
|
ARM_REG_APSR, |
|
ARM_REG_APSR_NZCV, |
|
ARM_REG_CPSR, |
|
ARM_REG_FPEXC, |
|
ARM_REG_FPINST, |
|
ARM_REG_FPSCR, |
|
ARM_REG_FPSCR_NZCV, |
|
ARM_REG_FPSID, |
|
ARM_REG_ITSTATE, |
|
ARM_REG_LR, |
|
ARM_REG_PC, |
|
ARM_REG_SP, |
|
ARM_REG_SPSR, |
|
ARM_REG_D0, |
|
ARM_REG_D1, |
|
ARM_REG_D2, |
|
ARM_REG_D3, |
|
ARM_REG_D4, |
|
ARM_REG_D5, |
|
ARM_REG_D6, |
|
ARM_REG_D7, |
|
ARM_REG_D8, |
|
ARM_REG_D9, |
|
ARM_REG_D10, |
|
ARM_REG_D11, |
|
ARM_REG_D12, |
|
ARM_REG_D13, |
|
ARM_REG_D14, |
|
ARM_REG_D15, |
|
ARM_REG_D16, |
|
ARM_REG_D17, |
|
ARM_REG_D18, |
|
ARM_REG_D19, |
|
ARM_REG_D20, |
|
ARM_REG_D21, |
|
ARM_REG_D22, |
|
ARM_REG_D23, |
|
ARM_REG_D24, |
|
ARM_REG_D25, |
|
ARM_REG_D26, |
|
ARM_REG_D27, |
|
ARM_REG_D28, |
|
ARM_REG_D29, |
|
ARM_REG_D30, |
|
ARM_REG_D31, |
|
ARM_REG_FPINST2, |
|
ARM_REG_MVFR0, |
|
ARM_REG_MVFR1, |
|
ARM_REG_MVFR2, |
|
ARM_REG_Q0, |
|
ARM_REG_Q1, |
|
ARM_REG_Q2, |
|
ARM_REG_Q3, |
|
ARM_REG_Q4, |
|
ARM_REG_Q5, |
|
ARM_REG_Q6, |
|
ARM_REG_Q7, |
|
ARM_REG_Q8, |
|
ARM_REG_Q9, |
|
ARM_REG_Q10, |
|
ARM_REG_Q11, |
|
ARM_REG_Q12, |
|
ARM_REG_Q13, |
|
ARM_REG_Q14, |
|
ARM_REG_Q15, |
|
ARM_REG_R0, |
|
ARM_REG_R1, |
|
ARM_REG_R2, |
|
ARM_REG_R3, |
|
ARM_REG_R4, |
|
ARM_REG_R5, |
|
ARM_REG_R6, |
|
ARM_REG_R7, |
|
ARM_REG_R8, |
|
ARM_REG_R9, |
|
ARM_REG_R10, |
|
ARM_REG_R11, |
|
ARM_REG_R12, |
|
ARM_REG_S0, |
|
ARM_REG_S1, |
|
ARM_REG_S2, |
|
ARM_REG_S3, |
|
ARM_REG_S4, |
|
ARM_REG_S5, |
|
ARM_REG_S6, |
|
ARM_REG_S7, |
|
ARM_REG_S8, |
|
ARM_REG_S9, |
|
ARM_REG_S10, |
|
ARM_REG_S11, |
|
ARM_REG_S12, |
|
ARM_REG_S13, |
|
ARM_REG_S14, |
|
ARM_REG_S15, |
|
ARM_REG_S16, |
|
ARM_REG_S17, |
|
ARM_REG_S18, |
|
ARM_REG_S19, |
|
ARM_REG_S20, |
|
ARM_REG_S21, |
|
ARM_REG_S22, |
|
ARM_REG_S23, |
|
ARM_REG_S24, |
|
ARM_REG_S25, |
|
ARM_REG_S26, |
|
ARM_REG_S27, |
|
ARM_REG_S28, |
|
ARM_REG_S29, |
|
ARM_REG_S30, |
|
ARM_REG_S31, |
|
|
|
ARM_REG_MAX, // <-- mark the end of the list or registers |
|
|
|
//> alias registers |
|
ARM_REG_R13 = ARM_REG_SP, |
|
ARM_REG_R14 = ARM_REG_LR, |
|
ARM_REG_R15 = ARM_REG_PC, |
|
|
|
ARM_REG_SB = ARM_REG_R9, |
|
ARM_REG_SL = ARM_REG_R10, |
|
ARM_REG_FP = ARM_REG_R11, |
|
ARM_REG_IP = ARM_REG_R12, |
|
} arm_reg; |
|
|
|
//> ARM instruction |
|
typedef enum arm_insn { |
|
ARM_INS_INVALID = 0, |
|
|
|
ARM_INS_ADC, |
|
ARM_INS_ADD, |
|
ARM_INS_ADR, |
|
ARM_INS_AESD, |
|
ARM_INS_AESE, |
|
ARM_INS_AESIMC, |
|
ARM_INS_AESMC, |
|
ARM_INS_AND, |
|
ARM_INS_BFC, |
|
ARM_INS_BFI, |
|
ARM_INS_BIC, |
|
ARM_INS_BKPT, |
|
ARM_INS_BL, |
|
ARM_INS_BLX, |
|
ARM_INS_BX, |
|
ARM_INS_BXJ, |
|
ARM_INS_B, |
|
ARM_INS_CDP, |
|
ARM_INS_CDP2, |
|
ARM_INS_CLREX, |
|
ARM_INS_CLZ, |
|
ARM_INS_CMN, |
|
ARM_INS_CMP, |
|
ARM_INS_CPS, |
|
ARM_INS_CRC32B, |
|
ARM_INS_CRC32CB, |
|
ARM_INS_CRC32CH, |
|
ARM_INS_CRC32CW, |
|
ARM_INS_CRC32H, |
|
ARM_INS_CRC32W, |
|
ARM_INS_DBG, |
|
ARM_INS_DMB, |
|
ARM_INS_DSB, |
|
ARM_INS_EOR, |
|
ARM_INS_VMOV, |
|
ARM_INS_FLDMDBX, |
|
ARM_INS_FLDMIAX, |
|
ARM_INS_VMRS, |
|
ARM_INS_FSTMDBX, |
|
ARM_INS_FSTMIAX, |
|
ARM_INS_HINT, |
|
ARM_INS_HLT, |
|
ARM_INS_ISB, |
|
ARM_INS_LDA, |
|
ARM_INS_LDAB, |
|
ARM_INS_LDAEX, |
|
ARM_INS_LDAEXB, |
|
ARM_INS_LDAEXD, |
|
ARM_INS_LDAEXH, |
|
ARM_INS_LDAH, |
|
ARM_INS_LDC2L, |
|
ARM_INS_LDC2, |
|
ARM_INS_LDCL, |
|
ARM_INS_LDC, |
|
ARM_INS_LDMDA, |
|
ARM_INS_LDMDB, |
|
ARM_INS_LDM, |
|
ARM_INS_LDMIB, |
|
ARM_INS_LDRBT, |
|
ARM_INS_LDRB, |
|
ARM_INS_LDRD, |
|
ARM_INS_LDREX, |
|
ARM_INS_LDREXB, |
|
ARM_INS_LDREXD, |
|
ARM_INS_LDREXH, |
|
ARM_INS_LDRH, |
|
ARM_INS_LDRHT, |
|
ARM_INS_LDRSB, |
|
ARM_INS_LDRSBT, |
|
ARM_INS_LDRSH, |
|
ARM_INS_LDRSHT, |
|
ARM_INS_LDRT, |
|
ARM_INS_LDR, |
|
ARM_INS_MCR, |
|
ARM_INS_MCR2, |
|
ARM_INS_MCRR, |
|
ARM_INS_MCRR2, |
|
ARM_INS_MLA, |
|
ARM_INS_MLS, |
|
ARM_INS_MOV, |
|
ARM_INS_MOVT, |
|
ARM_INS_MOVW, |
|
ARM_INS_MRC, |
|
ARM_INS_MRC2, |
|
ARM_INS_MRRC, |
|
ARM_INS_MRRC2, |
|
ARM_INS_MRS, |
|
ARM_INS_MSR, |
|
ARM_INS_MUL, |
|
ARM_INS_MVN, |
|
ARM_INS_ORR, |
|
ARM_INS_PKHBT, |
|
ARM_INS_PKHTB, |
|
ARM_INS_PLDW, |
|
ARM_INS_PLD, |
|
ARM_INS_PLI, |
|
ARM_INS_QADD, |
|
ARM_INS_QADD16, |
|
ARM_INS_QADD8, |
|
ARM_INS_QASX, |
|
ARM_INS_QDADD, |
|
ARM_INS_QDSUB, |
|
ARM_INS_QSAX, |
|
ARM_INS_QSUB, |
|
ARM_INS_QSUB16, |
|
ARM_INS_QSUB8, |
|
ARM_INS_RBIT, |
|
ARM_INS_REV, |
|
ARM_INS_REV16, |
|
ARM_INS_REVSH, |
|
ARM_INS_RFEDA, |
|
ARM_INS_RFEDB, |
|
ARM_INS_RFEIA, |
|
ARM_INS_RFEIB, |
|
ARM_INS_RSB, |
|
ARM_INS_RSC, |
|
ARM_INS_SADD16, |
|
ARM_INS_SADD8, |
|
ARM_INS_SASX, |
|
ARM_INS_SBC, |
|
ARM_INS_SBFX, |
|
ARM_INS_SDIV, |
|
ARM_INS_SEL, |
|
ARM_INS_SETEND, |
|
ARM_INS_SHA1C, |
|
ARM_INS_SHA1H, |
|
ARM_INS_SHA1M, |
|
ARM_INS_SHA1P, |
|
ARM_INS_SHA1SU0, |
|
ARM_INS_SHA1SU1, |
|
ARM_INS_SHA256H, |
|
ARM_INS_SHA256H2, |
|
ARM_INS_SHA256SU0, |
|
ARM_INS_SHA256SU1, |
|
ARM_INS_SHADD16, |
|
ARM_INS_SHADD8, |
|
ARM_INS_SHASX, |
|
ARM_INS_SHSAX, |
|
ARM_INS_SHSUB16, |
|
ARM_INS_SHSUB8, |
|
ARM_INS_SMC, |
|
ARM_INS_SMLABB, |
|
ARM_INS_SMLABT, |
|
ARM_INS_SMLAD, |
|
ARM_INS_SMLADX, |
|
ARM_INS_SMLAL, |
|
ARM_INS_SMLALBB, |
|
ARM_INS_SMLALBT, |
|
ARM_INS_SMLALD, |
|
ARM_INS_SMLALDX, |
|
ARM_INS_SMLALTB, |
|
ARM_INS_SMLALTT, |
|
ARM_INS_SMLATB, |
|
ARM_INS_SMLATT, |
|
ARM_INS_SMLAWB, |
|
ARM_INS_SMLAWT, |
|
ARM_INS_SMLSD, |
|
ARM_INS_SMLSDX, |
|
ARM_INS_SMLSLD, |
|
ARM_INS_SMLSLDX, |
|
ARM_INS_SMMLA, |
|
ARM_INS_SMMLAR, |
|
ARM_INS_SMMLS, |
|
ARM_INS_SMMLSR, |
|
ARM_INS_SMMUL, |
|
ARM_INS_SMMULR, |
|
ARM_INS_SMUAD, |
|
ARM_INS_SMUADX, |
|
ARM_INS_SMULBB, |
|
ARM_INS_SMULBT, |
|
ARM_INS_SMULL, |
|
ARM_INS_SMULTB, |
|
ARM_INS_SMULTT, |
|
ARM_INS_SMULWB, |
|
ARM_INS_SMULWT, |
|
ARM_INS_SMUSD, |
|
ARM_INS_SMUSDX, |
|
ARM_INS_SRSDA, |
|
ARM_INS_SRSDB, |
|
ARM_INS_SRSIA, |
|
ARM_INS_SRSIB, |
|
ARM_INS_SSAT, |
|
ARM_INS_SSAT16, |
|
ARM_INS_SSAX, |
|
ARM_INS_SSUB16, |
|
ARM_INS_SSUB8, |
|
ARM_INS_STC2L, |
|
ARM_INS_STC2, |
|
ARM_INS_STCL, |
|
ARM_INS_STC, |
|
ARM_INS_STL, |
|
ARM_INS_STLB, |
|
ARM_INS_STLEX, |
|
ARM_INS_STLEXB, |
|
ARM_INS_STLEXD, |
|
ARM_INS_STLEXH, |
|
ARM_INS_STLH, |
|
ARM_INS_STMDA, |
|
ARM_INS_STMDB, |
|
ARM_INS_STM, |
|
ARM_INS_STMIB, |
|
ARM_INS_STRBT, |
|
ARM_INS_STRB, |
|
ARM_INS_STRD, |
|
ARM_INS_STREX, |
|
ARM_INS_STREXB, |
|
ARM_INS_STREXD, |
|
ARM_INS_STREXH, |
|
ARM_INS_STRH, |
|
ARM_INS_STRHT, |
|
ARM_INS_STRT, |
|
ARM_INS_STR, |
|
ARM_INS_SUB, |
|
ARM_INS_SVC, |
|
ARM_INS_SWP, |
|
ARM_INS_SWPB, |
|
ARM_INS_SXTAB, |
|
ARM_INS_SXTAB16, |
|
ARM_INS_SXTAH, |
|
ARM_INS_SXTB, |
|
ARM_INS_SXTB16, |
|
ARM_INS_SXTH, |
|
ARM_INS_TEQ, |
|
ARM_INS_TRAP, |
|
ARM_INS_TST, |
|
ARM_INS_UADD16, |
|
ARM_INS_UADD8, |
|
ARM_INS_UASX, |
|
ARM_INS_UBFX, |
|
ARM_INS_UDIV, |
|
ARM_INS_UHADD16, |
|
ARM_INS_UHADD8, |
|
ARM_INS_UHASX, |
|
ARM_INS_UHSAX, |
|
ARM_INS_UHSUB16, |
|
ARM_INS_UHSUB8, |
|
ARM_INS_UMAAL, |
|
ARM_INS_UMLAL, |
|
ARM_INS_UMULL, |
|
ARM_INS_UQADD16, |
|
ARM_INS_UQADD8, |
|
ARM_INS_UQASX, |
|
ARM_INS_UQSAX, |
|
ARM_INS_UQSUB16, |
|
ARM_INS_UQSUB8, |
|
ARM_INS_USAD8, |
|
ARM_INS_USADA8, |
|
ARM_INS_USAT, |
|
ARM_INS_USAT16, |
|
ARM_INS_USAX, |
|
ARM_INS_USUB16, |
|
ARM_INS_USUB8, |
|
ARM_INS_UXTAB, |
|
ARM_INS_UXTAB16, |
|
ARM_INS_UXTAH, |
|
ARM_INS_UXTB, |
|
ARM_INS_UXTB16, |
|
ARM_INS_UXTH, |
|
ARM_INS_VABAL, |
|
ARM_INS_VABA, |
|
ARM_INS_VABDL, |
|
ARM_INS_VABD, |
|
ARM_INS_VABS, |
|
ARM_INS_VACGE, |
|
ARM_INS_VACGT, |
|
ARM_INS_VADD, |
|
ARM_INS_VADDHN, |
|
ARM_INS_VADDL, |
|
ARM_INS_VADDW, |
|
ARM_INS_VAND, |
|
ARM_INS_VBIC, |
|
ARM_INS_VBIF, |
|
ARM_INS_VBIT, |
|
ARM_INS_VBSL, |
|
ARM_INS_VCEQ, |
|
ARM_INS_VCGE, |
|
ARM_INS_VCGT, |
|
ARM_INS_VCLS, |
|
ARM_INS_VCLZ, |
|
ARM_INS_VCMP, |
|
ARM_INS_VCMPE, |
|
ARM_INS_VCNT, |
|
ARM_INS_VCVTA, |
|
ARM_INS_VCVTB, |
|
ARM_INS_VCVT, |
|
ARM_INS_VCVTM, |
|
ARM_INS_VCVTN, |
|
ARM_INS_VCVTP, |
|
ARM_INS_VCVTT, |
|
ARM_INS_VDIV, |
|
ARM_INS_VDUP, |
|
ARM_INS_VEOR, |
|
ARM_INS_VEXT, |
|
ARM_INS_VFMA, |
|
ARM_INS_VFMS, |
|
ARM_INS_VFNMA, |
|
ARM_INS_VFNMS, |
|
ARM_INS_VHADD, |
|
ARM_INS_VHSUB, |
|
ARM_INS_VLD1, |
|
ARM_INS_VLD2, |
|
ARM_INS_VLD3, |
|
ARM_INS_VLD4, |
|
ARM_INS_VLDMDB, |
|
ARM_INS_VLDMIA, |
|
ARM_INS_VLDR, |
|
ARM_INS_VMAXNM, |
|
ARM_INS_VMAX, |
|
ARM_INS_VMINNM, |
|
ARM_INS_VMIN, |
|
ARM_INS_VMLA, |
|
ARM_INS_VMLAL, |
|
ARM_INS_VMLS, |
|
ARM_INS_VMLSL, |
|
ARM_INS_VMOVL, |
|
ARM_INS_VMOVN, |
|
ARM_INS_VMSR, |
|
ARM_INS_VMUL, |
|
ARM_INS_VMULL, |
|
ARM_INS_VMVN, |
|
ARM_INS_VNEG, |
|
ARM_INS_VNMLA, |
|
ARM_INS_VNMLS, |
|
ARM_INS_VNMUL, |
|
ARM_INS_VORN, |
|
ARM_INS_VORR, |
|
ARM_INS_VPADAL, |
|
ARM_INS_VPADDL, |
|
ARM_INS_VPADD, |
|
ARM_INS_VPMAX, |
|
ARM_INS_VPMIN, |
|
ARM_INS_VQABS, |
|
ARM_INS_VQADD, |
|
ARM_INS_VQDMLAL, |
|
ARM_INS_VQDMLSL, |
|
ARM_INS_VQDMULH, |
|
ARM_INS_VQDMULL, |
|
ARM_INS_VQMOVUN, |
|
ARM_INS_VQMOVN, |
|
ARM_INS_VQNEG, |
|
ARM_INS_VQRDMULH, |
|
ARM_INS_VQRSHL, |
|
ARM_INS_VQRSHRN, |
|
ARM_INS_VQRSHRUN, |
|
ARM_INS_VQSHL, |
|
ARM_INS_VQSHLU, |
|
ARM_INS_VQSHRN, |
|
ARM_INS_VQSHRUN, |
|
ARM_INS_VQSUB, |
|
ARM_INS_VRADDHN, |
|
ARM_INS_VRECPE, |
|
ARM_INS_VRECPS, |
|
ARM_INS_VREV16, |
|
ARM_INS_VREV32, |
|
ARM_INS_VREV64, |
|
ARM_INS_VRHADD, |
|
ARM_INS_VRINTA, |
|
ARM_INS_VRINTM, |
|
ARM_INS_VRINTN, |
|
ARM_INS_VRINTP, |
|
ARM_INS_VRINTR, |
|
ARM_INS_VRINTX, |
|
ARM_INS_VRINTZ, |
|
ARM_INS_VRSHL, |
|
ARM_INS_VRSHRN, |
|
ARM_INS_VRSHR, |
|
ARM_INS_VRSQRTE, |
|
ARM_INS_VRSQRTS, |
|
ARM_INS_VRSRA, |
|
ARM_INS_VRSUBHN, |
|
ARM_INS_VSELEQ, |
|
ARM_INS_VSELGE, |
|
ARM_INS_VSELGT, |
|
ARM_INS_VSELVS, |
|
ARM_INS_VSHLL, |
|
ARM_INS_VSHL, |
|
ARM_INS_VSHRN, |
|
ARM_INS_VSHR, |
|
ARM_INS_VSLI, |
|
ARM_INS_VSQRT, |
|
ARM_INS_VSRA, |
|
ARM_INS_VSRI, |
|
ARM_INS_VST1, |
|
ARM_INS_VST2, |
|
ARM_INS_VST3, |
|
ARM_INS_VST4, |
|
ARM_INS_VSTMDB, |
|
ARM_INS_VSTMIA, |
|
ARM_INS_VSTR, |
|
ARM_INS_VSUB, |
|
ARM_INS_VSUBHN, |
|
ARM_INS_VSUBL, |
|
ARM_INS_VSUBW, |
|
ARM_INS_VSWP, |
|
ARM_INS_VTBL, |
|
ARM_INS_VTBX, |
|
ARM_INS_VCVTR, |
|
ARM_INS_VTRN, |
|
ARM_INS_VTST, |
|
ARM_INS_VUZP, |
|
ARM_INS_VZIP, |
|
ARM_INS_ADDW, |
|
ARM_INS_ASR, |
|
ARM_INS_DCPS1, |
|
ARM_INS_DCPS2, |
|
ARM_INS_DCPS3, |
|
ARM_INS_IT, |
|
ARM_INS_LSL, |
|
ARM_INS_LSR, |
|
ARM_INS_ORN, |
|
ARM_INS_ROR, |
|
ARM_INS_RRX, |
|
ARM_INS_SUBS, |
|
ARM_INS_SUBW, |
|
ARM_INS_TBB, |
|
ARM_INS_TBH, |
|
ARM_INS_CBNZ, |
|
ARM_INS_CBZ, |
|
ARM_INS_MOVS, |
|
ARM_INS_POP, |
|
ARM_INS_PUSH, |
|
|
|
ARM_INS_MAX, // <-- mark the end of the list of instructions |
|
} arm_insn; |
|
|
|
//> Group of ARM instructions |
|
typedef enum arm_insn_group { |
|
ARM_GRP_INVALID = 0, |
|
ARM_GRP_CRYPTO, |
|
ARM_GRP_DATABARRIER, |
|
ARM_GRP_DIVIDE, |
|
ARM_GRP_FPARMV8, |
|
ARM_GRP_MULTPRO, |
|
ARM_GRP_NEON, |
|
ARM_GRP_T2EXTRACTPACK, |
|
ARM_GRP_THUMB2DSP, |
|
ARM_GRP_TRUSTZONE, |
|
ARM_GRP_V4T, |
|
ARM_GRP_V5T, |
|
ARM_GRP_V5TE, |
|
ARM_GRP_V6, |
|
ARM_GRP_V6T2, |
|
ARM_GRP_V7, |
|
ARM_GRP_V8, |
|
ARM_GRP_VFP2, |
|
ARM_GRP_VFP3, |
|
ARM_GRP_VFP4, |
|
ARM_GRP_ARM, |
|
ARM_GRP_MCLASS, |
|
ARM_GRP_NOTMCLASS, |
|
ARM_GRP_THUMB, |
|
ARM_GRP_THUMB1ONLY, |
|
ARM_GRP_THUMB2, |
|
ARM_GRP_PREV8, |
|
ARM_GRP_FPVMLX, |
|
ARM_GRP_MULOPS, |
|
ARM_GRP_CRC, |
|
ARM_GRP_DPVFP, |
|
ARM_GRP_V6M, |
|
|
|
ARM_GRP_JUMP, // all jump instructions (conditional+direct+indirect jumps) |
|
|
|
ARM_GRP_MAX, |
|
} arm_insn_group; |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif
|
|
|