Rizin
unix-like reverse engineering framework and cli tools
ARMBaseInfo.h File Reference
#include "capstone/arm.h"
#include "ARMGenRegisterInfo.inc"

Go to the source code of this file.

Macros

#define GET_REGINFO_ENUM
 

Typedefs

typedef enum ARMCC_CondCodes ARMCC_CondCodes
 
typedef enum ARMII_AddrMode ARMII_AddrMode
 ARM Addressing Modes. More...
 

Enumerations

enum  ARMCC_CondCodes {
  ARMCC_EQ , ARMCC_NE , ARMCC_HS , ARMCC_LO ,
  ARMCC_MI , ARMCC_PL , ARMCC_VS , ARMCC_VC ,
  ARMCC_HI , ARMCC_LS , ARMCC_GE , ARMCC_LT ,
  ARMCC_GT , ARMCC_LE , ARMCC_AL
}
 
enum  ARM_ISB_InstSyncBOpt {
  ARM_ISB_RESERVED_0 = 0 , ARM_ISB_RESERVED_1 = 1 , ARM_ISB_RESERVED_2 = 2 , ARM_ISB_RESERVED_3 = 3 ,
  ARM_ISB_RESERVED_4 = 4 , ARM_ISB_RESERVED_5 = 5 , ARM_ISB_RESERVED_6 = 6 , ARM_ISB_RESERVED_7 = 7 ,
  ARM_ISB_RESERVED_8 = 8 , ARM_ISB_RESERVED_9 = 9 , ARM_ISB_RESERVED_10 = 10 , ARM_ISB_RESERVED_11 = 11 ,
  ARM_ISB_RESERVED_12 = 12 , ARM_ISB_RESERVED_13 = 13 , ARM_ISB_RESERVED_14 = 14 , ARM_ISB_SY = 15
}
 
enum  ARMII_IndexMode { ARMII_IndexModeNone = 0 , ARMII_IndexModePre = 1 , ARMII_IndexModePost = 2 , ARMII_IndexModeUpd = 3 }
 
enum  ARMII_AddrMode {
  ARMII_AddrModeNone = 0 , ARMII_AddrMode1 = 1 , ARMII_AddrMode2 = 2 , ARMII_AddrMode3 = 3 ,
  ARMII_AddrMode4 = 4 , ARMII_AddrMode5 = 5 , ARMII_AddrMode6 = 6 , ARMII_AddrModeT1_1 = 7 ,
  ARMII_AddrModeT1_2 = 8 , ARMII_AddrModeT1_4 = 9 , ARMII_AddrModeT1_s = 10 , ARMII_AddrModeT2_i12 = 11 ,
  ARMII_AddrModeT2_i8 = 12 , ARMII_AddrModeT2_so = 13 , ARMII_AddrModeT2_pc = 14 , ARMII_AddrModeT2_i8s4 = 15 ,
  ARMII_AddrMode_i12 = 16
}
 ARM Addressing Modes. More...
 
enum  ARMII_TOF {
  ARMII_MO_NO_FLAG , ARMII_MO_LO16 , ARMII_MO_HI16 , ARMII_MO_LO16_NONLAZY ,
  ARMII_MO_HI16_NONLAZY , ARMII_MO_LO16_NONLAZY_PIC , ARMII_MO_HI16_NONLAZY_PIC , ARMII_MO_PLT
}
 Target Operand Flag enum. More...
 
enum  {
  ARMII_AddrModeMask = 0x1f , ARMII_IndexModeShift = 5 , ARMII_IndexModeMask = 3 << ARMII_IndexModeShift , ARMII_FormShift = 7 ,
  ARMII_FormMask = 0x3f << ARMII_FormShift , ARMII_Pseudo = 0 << ARMII_FormShift , ARMII_MulFrm = 1 << ARMII_FormShift , ARMII_BrFrm = 2 << ARMII_FormShift ,
  ARMII_BrMiscFrm = 3 << ARMII_FormShift , ARMII_DPFrm = 4 << ARMII_FormShift , ARMII_DPSoRegFrm = 5 << ARMII_FormShift , ARMII_LdFrm = 6 << ARMII_FormShift ,
  ARMII_StFrm = 7 << ARMII_FormShift , ARMII_LdMiscFrm = 8 << ARMII_FormShift , ARMII_StMiscFrm = 9 << ARMII_FormShift , ARMII_LdStMulFrm = 10 << ARMII_FormShift ,
  ARMII_LdStExFrm = 11 << ARMII_FormShift , ARMII_ArithMiscFrm = 12 << ARMII_FormShift , ARMII_SatFrm = 13 << ARMII_FormShift , ARMII_ExtFrm = 14 << ARMII_FormShift ,
  ARMII_VFPUnaryFrm = 15 << ARMII_FormShift , ARMII_VFPBinaryFrm = 16 << ARMII_FormShift , ARMII_VFPConv1Frm = 17 << ARMII_FormShift , ARMII_VFPConv2Frm = 18 << ARMII_FormShift ,
  ARMII_VFPConv3Frm = 19 << ARMII_FormShift , ARMII_VFPConv4Frm = 20 << ARMII_FormShift , ARMII_VFPConv5Frm = 21 << ARMII_FormShift , ARMII_VFPLdStFrm = 22 << ARMII_FormShift ,
  ARMII_VFPLdStMulFrm = 23 << ARMII_FormShift , ARMII_VFPMiscFrm = 24 << ARMII_FormShift , ARMII_ThumbFrm = 25 << ARMII_FormShift , ARMII_MiscFrm = 26 << ARMII_FormShift ,
  ARMII_NGetLnFrm = 27 << ARMII_FormShift , ARMII_NSetLnFrm = 28 << ARMII_FormShift , ARMII_NDupFrm = 29 << ARMII_FormShift , ARMII_NLdStFrm = 30 << ARMII_FormShift ,
  ARMII_N1RegModImmFrm = 31 << ARMII_FormShift , ARMII_N2RegFrm = 32 << ARMII_FormShift , ARMII_NVCVTFrm = 33 << ARMII_FormShift , ARMII_NVDupLnFrm = 34 << ARMII_FormShift ,
  ARMII_N2RegVShLFrm = 35 << ARMII_FormShift , ARMII_N2RegVShRFrm = 36 << ARMII_FormShift , ARMII_N3RegFrm = 37 << ARMII_FormShift , ARMII_N3RegVShFrm = 38 << ARMII_FormShift ,
  ARMII_NVExtFrm = 39 << ARMII_FormShift , ARMII_NVMulSLFrm = 40 << ARMII_FormShift , ARMII_NVTBLFrm = 41 << ARMII_FormShift , ARMII_UnaryDP = 1 << 13 ,
  ARMII_Xform16Bit = 1 << 14 , ARMII_ThumbArithFlagSetting = 1 << 18 , ARMII_DomainShift = 15 , ARMII_DomainMask = 7 << ARMII_DomainShift ,
  ARMII_DomainGeneral = 0 << ARMII_DomainShift , ARMII_DomainVFP = 1 << ARMII_DomainShift , ARMII_DomainNEON = 2 << ARMII_DomainShift , ARMII_DomainNEONA8 = 4 << ARMII_DomainShift ,
  ARMII_ShiftTypeShift = 4 , ARMII_M_BitShift = 5 , ARMII_ShiftImmShift = 5 , ARMII_ShiftShift = 7 ,
  ARMII_N_BitShift = 7 , ARMII_ImmHiShift = 8 , ARMII_SoRotImmShift = 8 , ARMII_RegRsShift = 8 ,
  ARMII_ExtRotImmShift = 10 , ARMII_RegRdLoShift = 12 , ARMII_RegRdShift = 12 , ARMII_RegRdHiShift = 16 ,
  ARMII_RegRnShift = 16 , ARMII_S_BitShift = 20 , ARMII_W_BitShift = 21 , ARMII_AM3_I_BitShift = 22 ,
  ARMII_D_BitShift = 22 , ARMII_U_BitShift = 23 , ARMII_P_BitShift = 24 , ARMII_I_BitShift = 25 ,
  ARMII_CondShift = 28
}
 

Functions

static ARMCC_CondCodes ARMCC_getOppositeCondition (ARMCC_CondCodes CC)
 
static const char * ARMCC_ARMCondCodeToString (ARMCC_CondCodes CC)
 
static const char * ARM_PROC_IFlagsToString (unsigned val)
 
static const char * ARM_PROC_IModToString (unsigned val)
 
static const char * ARM_MB_MemBOptToString (unsigned val, bool HasV8)
 
static const char * ARM_ISB_InstSyncBOptToString (unsigned val)
 
static bool isARMLowRegister (unsigned Reg)
 
static const char * ARMII_AddrModeToString (ARMII_AddrMode addrmode)
 

Macro Definition Documentation

◆ GET_REGINFO_ENUM

#define GET_REGINFO_ENUM

Definition at line 28 of file ARMBaseInfo.h.

Typedef Documentation

◆ ARMCC_CondCodes

◆ ARMII_AddrMode

ARM Addressing Modes.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
ARMII_AddrModeMask 
ARMII_IndexModeShift 
ARMII_IndexModeMask 
ARMII_FormShift 
ARMII_FormMask 
ARMII_Pseudo 
ARMII_MulFrm 
ARMII_BrFrm 
ARMII_BrMiscFrm 
ARMII_DPFrm 
ARMII_DPSoRegFrm 
ARMII_LdFrm 
ARMII_StFrm 
ARMII_LdMiscFrm 
ARMII_StMiscFrm 
ARMII_LdStMulFrm 
ARMII_LdStExFrm 
ARMII_ArithMiscFrm 
ARMII_SatFrm 
ARMII_ExtFrm 
ARMII_VFPUnaryFrm 
ARMII_VFPBinaryFrm 
ARMII_VFPConv1Frm 
ARMII_VFPConv2Frm 
ARMII_VFPConv3Frm 
ARMII_VFPConv4Frm 
ARMII_VFPConv5Frm 
ARMII_VFPLdStFrm 
ARMII_VFPLdStMulFrm 
ARMII_VFPMiscFrm 
ARMII_ThumbFrm 
ARMII_MiscFrm 
ARMII_NGetLnFrm 
ARMII_NSetLnFrm 
ARMII_NDupFrm 
ARMII_NLdStFrm 
ARMII_N1RegModImmFrm 
ARMII_N2RegFrm 
ARMII_NVCVTFrm 
ARMII_NVDupLnFrm 
ARMII_N2RegVShLFrm 
ARMII_N2RegVShRFrm 
ARMII_N3RegFrm 
ARMII_N3RegVShFrm 
ARMII_NVExtFrm 
ARMII_NVMulSLFrm 
ARMII_NVTBLFrm 
ARMII_UnaryDP 
ARMII_Xform16Bit 
ARMII_ThumbArithFlagSetting 
ARMII_DomainShift 
ARMII_DomainMask 
ARMII_DomainGeneral 
ARMII_DomainVFP 
ARMII_DomainNEON 
ARMII_DomainNEONA8 
ARMII_ShiftTypeShift 
ARMII_M_BitShift 
ARMII_ShiftImmShift 
ARMII_ShiftShift 
ARMII_N_BitShift 
ARMII_ImmHiShift 
ARMII_SoRotImmShift 
ARMII_RegRsShift 
ARMII_ExtRotImmShift 
ARMII_RegRdLoShift 
ARMII_RegRdShift 
ARMII_RegRdHiShift 
ARMII_RegRnShift 
ARMII_S_BitShift 
ARMII_W_BitShift 
ARMII_AM3_I_BitShift 
ARMII_D_BitShift 
ARMII_U_BitShift 
ARMII_P_BitShift 
ARMII_I_BitShift 
ARMII_CondShift 

Definition at line 291 of file ARMBaseInfo.h.

291  {
292  //===------------------------------------------------------------------===//
293  // Instruction Flags.
294 
295  //===------------------------------------------------------------------===//
296  // This four-bit field describes the addressing mode used.
297  ARMII_AddrModeMask = 0x1f, // The AddrMode enums are declared in ARMBaseInfo.h
298 
299  // IndexMode - Unindex, pre-indexed, or post-indexed are valid for load
300  // and store ops only. Generic "updating" flag is used for ld/st multiple.
301  // The index mode enums are declared in ARMBaseInfo.h
304 
305  //===------------------------------------------------------------------===//
306  // Instruction encoding formats.
307  //
308  ARMII_FormShift = 7,
310 
311  // Pseudo instructions
313 
314  // Multiply instructions
316 
317  // Branch instructions
320 
321  // Data Processing instructions
324 
325  // Load and Store
331 
333 
334  // Miscellaneous arithmetic instructions
337 
338  // Extend instructions
340 
341  // VFP formats
352 
353  // Thumb format
355 
356  // Miscelleaneous format
358 
359  // NEON formats
375 
376  //===------------------------------------------------------------------===//
377  // Misc flags.
378 
379  // UnaryDP - Indicates this is a unary data processing instruction, i.e.
380  // it doesn't have a Rn operand.
381  ARMII_UnaryDP = 1 << 13,
382 
383  // Xform16Bit - Indicates this Thumb2 instruction may be transformed into
384  // a 16-bit Thumb instruction if certain conditions are met.
385  ARMII_Xform16Bit = 1 << 14,
386 
387  // ThumbArithFlagSetting - The instruction is a 16-bit flag setting Thumb
388  // instruction. Used by the parser to determine whether to require the 'S'
389  // suffix on the mnemonic (when not in an IT block) or preclude it (when
390  // in an IT block).
391  ARMII_ThumbArithFlagSetting = 1 << 18,
392 
393  //===------------------------------------------------------------------===//
394  // Code domain.
395  ARMII_DomainShift = 15,
401 
402  //===------------------------------------------------------------------===//
403  // Field shifts - such shifts are used to set field while generating
404  // machine instructions.
405  //
406  // FIXME: This list will need adjusting/fixing as the MC code emitter
407  // takes shape and the ARMCodeEmitter.cpp bits go away.
409 
410  ARMII_M_BitShift = 5,
412  ARMII_ShiftShift = 7,
413  ARMII_N_BitShift = 7,
414  ARMII_ImmHiShift = 8,
416  ARMII_RegRsShift = 8,
418  ARMII_RegRdLoShift = 12,
419  ARMII_RegRdShift = 12,
420  ARMII_RegRdHiShift = 16,
421  ARMII_RegRnShift = 16,
422  ARMII_S_BitShift = 20,
423  ARMII_W_BitShift = 21,
425  ARMII_D_BitShift = 22,
426  ARMII_U_BitShift = 23,
427  ARMII_P_BitShift = 24,
428  ARMII_I_BitShift = 25,
429  ARMII_CondShift = 28
430 };
@ ARMII_StFrm
Definition: ARMBaseInfo.h:327
@ ARMII_N2RegFrm
Definition: ARMBaseInfo.h:365
@ ARMII_N3RegFrm
Definition: ARMBaseInfo.h:370
@ ARMII_M_BitShift
Definition: ARMBaseInfo.h:410
@ ARMII_NLdStFrm
Definition: ARMBaseInfo.h:363
@ ARMII_VFPConv1Frm
Definition: ARMBaseInfo.h:344
@ ARMII_ExtRotImmShift
Definition: ARMBaseInfo.h:417
@ ARMII_AddrModeMask
Definition: ARMBaseInfo.h:297
@ ARMII_RegRdHiShift
Definition: ARMBaseInfo.h:420
@ ARMII_NGetLnFrm
Definition: ARMBaseInfo.h:360
@ ARMII_VFPConv5Frm
Definition: ARMBaseInfo.h:348
@ ARMII_I_BitShift
Definition: ARMBaseInfo.h:428
@ ARMII_RegRdLoShift
Definition: ARMBaseInfo.h:418
@ ARMII_Pseudo
Definition: ARMBaseInfo.h:312
@ ARMII_FormMask
Definition: ARMBaseInfo.h:309
@ ARMII_RegRnShift
Definition: ARMBaseInfo.h:421
@ ARMII_N3RegVShFrm
Definition: ARMBaseInfo.h:371
@ ARMII_LdStMulFrm
Definition: ARMBaseInfo.h:330
@ ARMII_ShiftTypeShift
Definition: ARMBaseInfo.h:408
@ ARMII_IndexModeMask
Definition: ARMBaseInfo.h:303
@ ARMII_VFPUnaryFrm
Definition: ARMBaseInfo.h:342
@ ARMII_S_BitShift
Definition: ARMBaseInfo.h:422
@ ARMII_N_BitShift
Definition: ARMBaseInfo.h:413
@ ARMII_DomainNEONA8
Definition: ARMBaseInfo.h:400
@ ARMII_ShiftShift
Definition: ARMBaseInfo.h:412
@ ARMII_VFPMiscFrm
Definition: ARMBaseInfo.h:351
@ ARMII_VFPConv4Frm
Definition: ARMBaseInfo.h:347
@ ARMII_P_BitShift
Definition: ARMBaseInfo.h:427
@ ARMII_VFPConv2Frm
Definition: ARMBaseInfo.h:345
@ ARMII_CondShift
Definition: ARMBaseInfo.h:429
@ ARMII_LdMiscFrm
Definition: ARMBaseInfo.h:328
@ ARMII_FormShift
Definition: ARMBaseInfo.h:308
@ ARMII_ArithMiscFrm
Definition: ARMBaseInfo.h:335
@ ARMII_Xform16Bit
Definition: ARMBaseInfo.h:385
@ ARMII_IndexModeShift
Definition: ARMBaseInfo.h:302
@ ARMII_ShiftImmShift
Definition: ARMBaseInfo.h:411
@ ARMII_BrMiscFrm
Definition: ARMBaseInfo.h:319
@ ARMII_ThumbFrm
Definition: ARMBaseInfo.h:354
@ ARMII_NVTBLFrm
Definition: ARMBaseInfo.h:374
@ ARMII_W_BitShift
Definition: ARMBaseInfo.h:423
@ ARMII_MiscFrm
Definition: ARMBaseInfo.h:357
@ ARMII_BrFrm
Definition: ARMBaseInfo.h:318
@ ARMII_MulFrm
Definition: ARMBaseInfo.h:315
@ ARMII_LdFrm
Definition: ARMBaseInfo.h:326
@ ARMII_RegRdShift
Definition: ARMBaseInfo.h:419
@ ARMII_SoRotImmShift
Definition: ARMBaseInfo.h:415
@ ARMII_NVMulSLFrm
Definition: ARMBaseInfo.h:373
@ ARMII_VFPBinaryFrm
Definition: ARMBaseInfo.h:343
@ ARMII_U_BitShift
Definition: ARMBaseInfo.h:426
@ ARMII_ExtFrm
Definition: ARMBaseInfo.h:339
@ ARMII_VFPLdStFrm
Definition: ARMBaseInfo.h:349
@ ARMII_NVExtFrm
Definition: ARMBaseInfo.h:372
@ ARMII_DomainVFP
Definition: ARMBaseInfo.h:398
@ ARMII_DomainGeneral
Definition: ARMBaseInfo.h:397
@ ARMII_ThumbArithFlagSetting
Definition: ARMBaseInfo.h:391
@ ARMII_VFPConv3Frm
Definition: ARMBaseInfo.h:346
@ ARMII_DPFrm
Definition: ARMBaseInfo.h:322
@ ARMII_StMiscFrm
Definition: ARMBaseInfo.h:329
@ ARMII_LdStExFrm
Definition: ARMBaseInfo.h:332
@ ARMII_ImmHiShift
Definition: ARMBaseInfo.h:414
@ ARMII_DomainShift
Definition: ARMBaseInfo.h:395
@ ARMII_N2RegVShRFrm
Definition: ARMBaseInfo.h:369
@ ARMII_N1RegModImmFrm
Definition: ARMBaseInfo.h:364
@ ARMII_DPSoRegFrm
Definition: ARMBaseInfo.h:323
@ ARMII_NVDupLnFrm
Definition: ARMBaseInfo.h:367
@ ARMII_DomainNEON
Definition: ARMBaseInfo.h:399
@ ARMII_UnaryDP
Definition: ARMBaseInfo.h:381
@ ARMII_VFPLdStMulFrm
Definition: ARMBaseInfo.h:350
@ ARMII_SatFrm
Definition: ARMBaseInfo.h:336
@ ARMII_RegRsShift
Definition: ARMBaseInfo.h:416
@ ARMII_D_BitShift
Definition: ARMBaseInfo.h:425
@ ARMII_NVCVTFrm
Definition: ARMBaseInfo.h:366
@ ARMII_AM3_I_BitShift
Definition: ARMBaseInfo.h:424
@ ARMII_N2RegVShLFrm
Definition: ARMBaseInfo.h:368
@ ARMII_NDupFrm
Definition: ARMBaseInfo.h:362
@ ARMII_DomainMask
Definition: ARMBaseInfo.h:396
@ ARMII_NSetLnFrm
Definition: ARMBaseInfo.h:361

◆ ARM_ISB_InstSyncBOpt

Enumerator
ARM_ISB_RESERVED_0 
ARM_ISB_RESERVED_1 
ARM_ISB_RESERVED_2 
ARM_ISB_RESERVED_3 
ARM_ISB_RESERVED_4 
ARM_ISB_RESERVED_5 
ARM_ISB_RESERVED_6 
ARM_ISB_RESERVED_7 
ARM_ISB_RESERVED_8 
ARM_ISB_RESERVED_9 
ARM_ISB_RESERVED_10 
ARM_ISB_RESERVED_11 
ARM_ISB_RESERVED_12 
ARM_ISB_RESERVED_13 
ARM_ISB_RESERVED_14 
ARM_ISB_SY 

Definition at line 137 of file ARMBaseInfo.h.

137  {
138  ARM_ISB_RESERVED_0 = 0,
139  ARM_ISB_RESERVED_1 = 1,
140  ARM_ISB_RESERVED_2 = 2,
141  ARM_ISB_RESERVED_3 = 3,
142  ARM_ISB_RESERVED_4 = 4,
143  ARM_ISB_RESERVED_5 = 5,
144  ARM_ISB_RESERVED_6 = 6,
145  ARM_ISB_RESERVED_7 = 7,
146  ARM_ISB_RESERVED_8 = 8,
147  ARM_ISB_RESERVED_9 = 9,
148  ARM_ISB_RESERVED_10 = 10,
149  ARM_ISB_RESERVED_11 = 11,
150  ARM_ISB_RESERVED_12 = 12,
151  ARM_ISB_RESERVED_13 = 13,
152  ARM_ISB_RESERVED_14 = 14,
153  ARM_ISB_SY = 15
154 };
@ ARM_ISB_SY
Definition: ARMBaseInfo.h:153
@ ARM_ISB_RESERVED_9
Definition: ARMBaseInfo.h:147
@ ARM_ISB_RESERVED_12
Definition: ARMBaseInfo.h:150
@ ARM_ISB_RESERVED_4
Definition: ARMBaseInfo.h:142
@ ARM_ISB_RESERVED_10
Definition: ARMBaseInfo.h:148
@ ARM_ISB_RESERVED_13
Definition: ARMBaseInfo.h:151
@ ARM_ISB_RESERVED_5
Definition: ARMBaseInfo.h:143
@ ARM_ISB_RESERVED_8
Definition: ARMBaseInfo.h:146
@ ARM_ISB_RESERVED_0
Definition: ARMBaseInfo.h:138
@ ARM_ISB_RESERVED_11
Definition: ARMBaseInfo.h:149
@ ARM_ISB_RESERVED_1
Definition: ARMBaseInfo.h:139
@ ARM_ISB_RESERVED_6
Definition: ARMBaseInfo.h:144
@ ARM_ISB_RESERVED_14
Definition: ARMBaseInfo.h:152
@ ARM_ISB_RESERVED_7
Definition: ARMBaseInfo.h:145
@ ARM_ISB_RESERVED_2
Definition: ARMBaseInfo.h:140
@ ARM_ISB_RESERVED_3
Definition: ARMBaseInfo.h:141

◆ ARMCC_CondCodes

Enumerator
ARMCC_EQ 
ARMCC_NE 
ARMCC_HS 
ARMCC_LO 
ARMCC_MI 
ARMCC_PL 
ARMCC_VS 
ARMCC_VC 
ARMCC_HI 
ARMCC_LS 
ARMCC_GE 
ARMCC_LT 
ARMCC_GT 
ARMCC_LE 
ARMCC_AL 

Definition at line 34 of file ARMBaseInfo.h.

34  { // Meaning (integer) Meaning (floating-point)
35  ARMCC_EQ, // Equal Equal
36  ARMCC_NE, // Not equal Not equal, or unordered
37  ARMCC_HS, // Carry set >, ==, or unordered
38  ARMCC_LO, // Carry clear Less than
39  ARMCC_MI, // Minus, negative Less than
40  ARMCC_PL, // Plus, positive or zero >, ==, or unordered
41  ARMCC_VS, // Overflow Unordered
42  ARMCC_VC, // No overflow Not unordered
43  ARMCC_HI, // Unsigned higher Greater than, or unordered
44  ARMCC_LS, // Unsigned lower or same Less than or equal
45  ARMCC_GE, // Greater than or equal Greater than or equal
46  ARMCC_LT, // Less than Less than, or unordered
47  ARMCC_GT, // Greater than Greater than
48  ARMCC_LE, // Less than or equal <, ==, or unordered
49  ARMCC_AL // Always (unconditional) Always (unconditional)
ARMCC_CondCodes
Definition: ARMBaseInfo.h:34
@ ARMCC_MI
Definition: ARMBaseInfo.h:39
@ ARMCC_VS
Definition: ARMBaseInfo.h:41
@ ARMCC_LS
Definition: ARMBaseInfo.h:44
@ ARMCC_HS
Definition: ARMBaseInfo.h:37
@ ARMCC_VC
Definition: ARMBaseInfo.h:42
@ ARMCC_LE
Definition: ARMBaseInfo.h:48
@ ARMCC_NE
Definition: ARMBaseInfo.h:36
@ ARMCC_EQ
Definition: ARMBaseInfo.h:35
@ ARMCC_LT
Definition: ARMBaseInfo.h:46
@ ARMCC_LO
Definition: ARMBaseInfo.h:38
@ ARMCC_GE
Definition: ARMBaseInfo.h:45
@ ARMCC_PL
Definition: ARMBaseInfo.h:40
@ ARMCC_HI
Definition: ARMBaseInfo.h:43
@ ARMCC_GT
Definition: ARMBaseInfo.h:47
@ ARMCC_AL
Definition: ARMBaseInfo.h:49

◆ ARMII_AddrMode

ARM Addressing Modes.

Enumerator
ARMII_AddrModeNone 
ARMII_AddrMode1 
ARMII_AddrMode2 
ARMII_AddrMode3 
ARMII_AddrMode4 
ARMII_AddrMode5 
ARMII_AddrMode6 
ARMII_AddrModeT1_1 
ARMII_AddrModeT1_2 
ARMII_AddrModeT1_4 
ARMII_AddrModeT1_s 
ARMII_AddrModeT2_i12 
ARMII_AddrModeT2_i8 
ARMII_AddrModeT2_so 
ARMII_AddrModeT2_pc 
ARMII_AddrModeT2_i8s4 
ARMII_AddrMode_i12 

Definition at line 205 of file ARMBaseInfo.h.

205  {
206  ARMII_AddrModeNone = 0,
207  ARMII_AddrMode1 = 1,
208  ARMII_AddrMode2 = 2,
209  ARMII_AddrMode3 = 3,
210  ARMII_AddrMode4 = 4,
211  ARMII_AddrMode5 = 5,
212  ARMII_AddrMode6 = 6,
213  ARMII_AddrModeT1_1 = 7,
214  ARMII_AddrModeT1_2 = 8,
215  ARMII_AddrModeT1_4 = 9,
216  ARMII_AddrModeT1_s = 10, // i8 * 4 for pc and sp relative data
218  ARMII_AddrModeT2_i8 = 12,
219  ARMII_AddrModeT2_so = 13,
220  ARMII_AddrModeT2_pc = 14, // +/- i12 for pc relative data
221  ARMII_AddrModeT2_i8s4 = 15, // i8 * 4
222  ARMII_AddrMode_i12 = 16
ARMII_AddrMode
ARM Addressing Modes.
Definition: ARMBaseInfo.h:205
@ ARMII_AddrMode6
Definition: ARMBaseInfo.h:212
@ ARMII_AddrModeT1_s
Definition: ARMBaseInfo.h:216
@ ARMII_AddrModeT2_i8s4
Definition: ARMBaseInfo.h:221
@ ARMII_AddrModeNone
Definition: ARMBaseInfo.h:206
@ ARMII_AddrModeT2_i8
Definition: ARMBaseInfo.h:218
@ ARMII_AddrModeT2_pc
Definition: ARMBaseInfo.h:220
@ ARMII_AddrModeT2_so
Definition: ARMBaseInfo.h:219
@ ARMII_AddrMode1
Definition: ARMBaseInfo.h:207
@ ARMII_AddrMode2
Definition: ARMBaseInfo.h:208
@ ARMII_AddrModeT1_4
Definition: ARMBaseInfo.h:215
@ ARMII_AddrMode3
Definition: ARMBaseInfo.h:209
@ ARMII_AddrModeT1_1
Definition: ARMBaseInfo.h:213
@ ARMII_AddrMode_i12
Definition: ARMBaseInfo.h:222
@ ARMII_AddrMode5
Definition: ARMBaseInfo.h:211
@ ARMII_AddrModeT1_2
Definition: ARMBaseInfo.h:214
@ ARMII_AddrMode4
Definition: ARMBaseInfo.h:210
@ ARMII_AddrModeT2_i12
Definition: ARMBaseInfo.h:217

◆ ARMII_IndexMode

ARMII - This namespace holds all of the target specific flags that instruction info tracks.

ARM Index Modes

Enumerator
ARMII_IndexModeNone 
ARMII_IndexModePre 
ARMII_IndexModePost 
ARMII_IndexModeUpd 

Definition at line 197 of file ARMBaseInfo.h.

197  {
199  ARMII_IndexModePre = 1,
202 };
@ ARMII_IndexModePre
Definition: ARMBaseInfo.h:199
@ ARMII_IndexModePost
Definition: ARMBaseInfo.h:200
@ ARMII_IndexModeNone
Definition: ARMBaseInfo.h:198
@ ARMII_IndexModeUpd
Definition: ARMBaseInfo.h:201

◆ ARMII_TOF

enum ARMII_TOF

Target Operand Flag enum.

Enumerator
ARMII_MO_NO_FLAG 
ARMII_MO_LO16 

MO_LO16 - On a symbol operand, this represents a relocation containing lower 16 bit of the address. Used only via movw instruction.

ARMII_MO_HI16 

MO_HI16 - On a symbol operand, this represents a relocation containing higher 16 bit of the address. Used only via movt instruction.

ARMII_MO_LO16_NONLAZY 

MO_LO16_NONLAZY - On a symbol operand "FOO", this represents a relocation containing lower 16 bit of the non-lazy-ptr indirect symbol, i.e. "FOO$non_lazy_ptr". Used only via movw instruction.

ARMII_MO_HI16_NONLAZY 

MO_HI16_NONLAZY - On a symbol operand "FOO", this represents a relocation containing lower 16 bit of the non-lazy-ptr indirect symbol, i.e. "FOO$non_lazy_ptr". Used only via movt instruction.

ARMII_MO_LO16_NONLAZY_PIC 

MO_LO16_NONLAZY_PIC - On a symbol operand "FOO", this represents a relocation containing lower 16 bit of the PC relative address of the non-lazy-ptr indirect symbol, i.e. "FOO$non_lazy_ptr - LABEL". Used only via movw instruction.

ARMII_MO_HI16_NONLAZY_PIC 

MO_HI16_NONLAZY_PIC - On a symbol operand "FOO", this represents a relocation containing lower 16 bit of the PC relative address of the non-lazy-ptr indirect symbol, i.e. "FOO$non_lazy_ptr - LABEL". Used only via movt instruction.

ARMII_MO_PLT 

MO_PLT - On a symbol operand, this represents an ELF PLT reference on a call operand.

Definition at line 249 of file ARMBaseInfo.h.

249  {
250  //===------------------------------------------------------------------===//
251  // ARM Specific MachineOperand flags.
252 
254 
258 
262 
268 
273 
279 
285 
289 };
@ ARMII_MO_HI16_NONLAZY_PIC
Definition: ARMBaseInfo.h:284
@ ARMII_MO_NO_FLAG
Definition: ARMBaseInfo.h:253
@ ARMII_MO_HI16_NONLAZY
Definition: ARMBaseInfo.h:272
@ ARMII_MO_HI16
Definition: ARMBaseInfo.h:261
@ ARMII_MO_LO16
Definition: ARMBaseInfo.h:257
@ ARMII_MO_LO16_NONLAZY
Definition: ARMBaseInfo.h:267
@ ARMII_MO_LO16_NONLAZY_PIC
Definition: ARMBaseInfo.h:278
@ ARMII_MO_PLT
Definition: ARMBaseInfo.h:288

Function Documentation

◆ ARM_ISB_InstSyncBOptToString()

static const char* ARM_ISB_InstSyncBOptToString ( unsigned  val)
inlinestatic

Definition at line 156 of file ARMBaseInfo.h.

157 {
158  switch (val) {
159  default: // never reach
160  case ARM_ISB_RESERVED_0: return "#0x0";
161  case ARM_ISB_RESERVED_1: return "#0x1";
162  case ARM_ISB_RESERVED_2: return "#0x2";
163  case ARM_ISB_RESERVED_3: return "#0x3";
164  case ARM_ISB_RESERVED_4: return "#0x4";
165  case ARM_ISB_RESERVED_5: return "#0x5";
166  case ARM_ISB_RESERVED_6: return "#0x6";
167  case ARM_ISB_RESERVED_7: return "#0x7";
168  case ARM_ISB_RESERVED_8: return "#0x8";
169  case ARM_ISB_RESERVED_9: return "#0x9";
170  case ARM_ISB_RESERVED_10: return "#0xa";
171  case ARM_ISB_RESERVED_11: return "#0xb";
172  case ARM_ISB_RESERVED_12: return "#0xc";
173  case ARM_ISB_RESERVED_13: return "#0xd";
174  case ARM_ISB_RESERVED_14: return "#0xe";
175  case ARM_ISB_SY: return "sy";
176  }
177 }
ut16 val
Definition: armass64_const.h:6

References ARM_ISB_RESERVED_0, ARM_ISB_RESERVED_1, ARM_ISB_RESERVED_10, ARM_ISB_RESERVED_11, ARM_ISB_RESERVED_12, ARM_ISB_RESERVED_13, ARM_ISB_RESERVED_14, ARM_ISB_RESERVED_2, ARM_ISB_RESERVED_3, ARM_ISB_RESERVED_4, ARM_ISB_RESERVED_5, ARM_ISB_RESERVED_6, ARM_ISB_RESERVED_7, ARM_ISB_RESERVED_8, ARM_ISB_RESERVED_9, ARM_ISB_SY, and val.

◆ ARM_MB_MemBOptToString()

static const char* ARM_MB_MemBOptToString ( unsigned  val,
bool  HasV8 
)
inlinestatic

Definition at line 114 of file ARMBaseInfo.h.

115 {
116  switch (val) {
117  default: return "BUGBUG";
118  case ARM_MB_SY: return "sy";
119  case ARM_MB_ST: return "st";
120  case ARM_MB_LD: return HasV8 ? "ld" : "#0xd";
121  case ARM_MB_RESERVED_12: return "#0xc";
122  case ARM_MB_ISH: return "ish";
123  case ARM_MB_ISHST: return "ishst";
124  case ARM_MB_ISHLD: return HasV8 ? "ishld" : "#0x9";
125  case ARM_MB_RESERVED_8: return "#0x8";
126  case ARM_MB_NSH: return "nsh";
127  case ARM_MB_NSHST: return "nshst";
128  case ARM_MB_NSHLD: return HasV8 ? "nshld" : "#0x5";
129  case ARM_MB_RESERVED_4: return "#0x4";
130  case ARM_MB_OSH: return "osh";
131  case ARM_MB_OSHST: return "oshst";
132  case ARM_MB_OSHLD: return HasV8 ? "oshld" : "#0x1";
133  case ARM_MB_RESERVED_0: return "#0x0";
134  }
135 }
@ ARM_MB_NSH
Definition: arm.h:149
@ ARM_MB_ISHLD
Definition: arm.h:151
@ ARM_MB_OSHST
Definition: arm.h:144
@ ARM_MB_RESERVED_8
Definition: arm.h:150
@ ARM_MB_ISHST
Definition: arm.h:152
@ ARM_MB_ST
Definition: arm.h:156
@ ARM_MB_NSHST
Definition: arm.h:148
@ ARM_MB_LD
Definition: arm.h:155
@ ARM_MB_RESERVED_0
Definition: arm.h:142
@ ARM_MB_RESERVED_4
Definition: arm.h:146
@ ARM_MB_SY
Definition: arm.h:157
@ ARM_MB_OSHLD
Definition: arm.h:143
@ ARM_MB_NSHLD
Definition: arm.h:147
@ ARM_MB_OSH
Definition: arm.h:145
@ ARM_MB_ISH
Definition: arm.h:153
@ ARM_MB_RESERVED_12
Definition: arm.h:154

References ARM_MB_ISH, ARM_MB_ISHLD, ARM_MB_ISHST, ARM_MB_LD, ARM_MB_NSH, ARM_MB_NSHLD, ARM_MB_NSHST, ARM_MB_OSH, ARM_MB_OSHLD, ARM_MB_OSHST, ARM_MB_RESERVED_0, ARM_MB_RESERVED_12, ARM_MB_RESERVED_4, ARM_MB_RESERVED_8, ARM_MB_ST, ARM_MB_SY, and val.

◆ ARM_PROC_IFlagsToString()

static const char* ARM_PROC_IFlagsToString ( unsigned  val)
inlinestatic

Definition at line 95 of file ARMBaseInfo.h.

96 {
97  switch (val) {
98  case ARM_CPSFLAG_F: return "f";
99  case ARM_CPSFLAG_I: return "i";
100  case ARM_CPSFLAG_A: return "a";
101  default: return "";
102  }
103 }
@ ARM_CPSFLAG_F
Definition: arm.h:189
@ ARM_CPSFLAG_A
Definition: arm.h:191
@ ARM_CPSFLAG_I
Definition: arm.h:190

References ARM_CPSFLAG_A, ARM_CPSFLAG_F, ARM_CPSFLAG_I, and val.

◆ ARM_PROC_IModToString()

static const char* ARM_PROC_IModToString ( unsigned  val)
inlinestatic

Definition at line 105 of file ARMBaseInfo.h.

106 {
107  switch (val) {
108  case ARM_CPSMODE_IE: return "ie";
109  case ARM_CPSMODE_ID: return "id";
110  default: return "";
111  }
112 }
@ ARM_CPSMODE_ID
Definition: arm.h:183
@ ARM_CPSMODE_IE
Definition: arm.h:182

References ARM_CPSMODE_ID, ARM_CPSMODE_IE, and val.

◆ ARMCC_ARMCondCodeToString()

static const char* ARMCC_ARMCondCodeToString ( ARMCC_CondCodes  CC)
inlinestatic

Definition at line 73 of file ARMBaseInfo.h.

74 {
75  switch (CC) {
76  case ARMCC_EQ: return "eq";
77  case ARMCC_NE: return "ne";
78  case ARMCC_HS: return "hs";
79  case ARMCC_LO: return "lo";
80  case ARMCC_MI: return "mi";
81  case ARMCC_PL: return "pl";
82  case ARMCC_VS: return "vs";
83  case ARMCC_VC: return "vc";
84  case ARMCC_HI: return "hi";
85  case ARMCC_LS: return "ls";
86  case ARMCC_GE: return "ge";
87  case ARMCC_LT: return "lt";
88  case ARMCC_GT: return "gt";
89  case ARMCC_LE: return "le";
90  case ARMCC_AL: return "al";
91  default: return "";
92  }
93 }

References ARMCC_AL, ARMCC_EQ, ARMCC_GE, ARMCC_GT, ARMCC_HI, ARMCC_HS, ARMCC_LE, ARMCC_LO, ARMCC_LS, ARMCC_LT, ARMCC_MI, ARMCC_NE, ARMCC_PL, ARMCC_VC, and ARMCC_VS.

◆ ARMCC_getOppositeCondition()

static ARMCC_CondCodes ARMCC_getOppositeCondition ( ARMCC_CondCodes  CC)
inlinestatic

Definition at line 52 of file ARMBaseInfo.h.

53 {
54  switch (CC) {
55  case ARMCC_EQ: return ARMCC_NE;
56  case ARMCC_NE: return ARMCC_EQ;
57  case ARMCC_HS: return ARMCC_LO;
58  case ARMCC_LO: return ARMCC_HS;
59  case ARMCC_MI: return ARMCC_PL;
60  case ARMCC_PL: return ARMCC_MI;
61  case ARMCC_VS: return ARMCC_VC;
62  case ARMCC_VC: return ARMCC_VS;
63  case ARMCC_HI: return ARMCC_LS;
64  case ARMCC_LS: return ARMCC_HI;
65  case ARMCC_GE: return ARMCC_LT;
66  case ARMCC_LT: return ARMCC_GE;
67  case ARMCC_GT: return ARMCC_LE;
68  case ARMCC_LE: return ARMCC_GT;
69  default: return ARMCC_AL;
70  }
71 }

References ARMCC_AL, ARMCC_EQ, ARMCC_GE, ARMCC_GT, ARMCC_HI, ARMCC_HS, ARMCC_LE, ARMCC_LO, ARMCC_LS, ARMCC_LT, ARMCC_MI, ARMCC_NE, ARMCC_PL, ARMCC_VC, and ARMCC_VS.

◆ ARMII_AddrModeToString()

static const char* ARMII_AddrModeToString ( ARMII_AddrMode  addrmode)
inlinestatic

Definition at line 225 of file ARMBaseInfo.h.

226 {
227  switch (addrmode) {
228  case ARMII_AddrModeNone: return "AddrModeNone";
229  case ARMII_AddrMode1: return "AddrMode1";
230  case ARMII_AddrMode2: return "AddrMode2";
231  case ARMII_AddrMode3: return "AddrMode3";
232  case ARMII_AddrMode4: return "AddrMode4";
233  case ARMII_AddrMode5: return "AddrMode5";
234  case ARMII_AddrMode6: return "AddrMode6";
235  case ARMII_AddrModeT1_1: return "AddrModeT1_1";
236  case ARMII_AddrModeT1_2: return "AddrModeT1_2";
237  case ARMII_AddrModeT1_4: return "AddrModeT1_4";
238  case ARMII_AddrModeT1_s: return "AddrModeT1_s";
239  case ARMII_AddrModeT2_i12: return "AddrModeT2_i12";
240  case ARMII_AddrModeT2_i8: return "AddrModeT2_i8";
241  case ARMII_AddrModeT2_so: return "AddrModeT2_so";
242  case ARMII_AddrModeT2_pc: return "AddrModeT2_pc";
243  case ARMII_AddrModeT2_i8s4: return "AddrModeT2_i8s4";
244  case ARMII_AddrMode_i12: return "AddrMode_i12";
245  }
246 }

References ARMII_AddrMode1, ARMII_AddrMode2, ARMII_AddrMode3, ARMII_AddrMode4, ARMII_AddrMode5, ARMII_AddrMode6, ARMII_AddrMode_i12, ARMII_AddrModeNone, ARMII_AddrModeT1_1, ARMII_AddrModeT1_2, ARMII_AddrModeT1_4, ARMII_AddrModeT1_s, ARMII_AddrModeT2_i12, ARMII_AddrModeT2_i8, ARMII_AddrModeT2_i8s4, ARMII_AddrModeT2_pc, and ARMII_AddrModeT2_so.

◆ isARMLowRegister()

static bool isARMLowRegister ( unsigned  Reg)
inlinestatic

isARMLowRegister - Returns true if the register is a low register (r0-r7).

Definition at line 181 of file ARMBaseInfo.h.

182 {
183  //using namespace ARM;
184  switch (Reg) {
185  case ARM_R0: case ARM_R1: case ARM_R2: case ARM_R3:
186  case ARM_R4: case ARM_R5: case ARM_R6: case ARM_R7:
187  return true;
188  default:
189  return false;
190  }
191 }