Pin
Classes | Macros | Typedefs | Enumerations | Functions | Variables
REG (specific to the IA-32 and Intel(R) 64 architectures)

Classes

struct  LEVEL_BASE::REGDEF_ENTRY
 

Macros

#define _REGSBIT(regSubClass)   (REG_SUBCLASS_BITS(1) << (regSubClass))
 

Typedefs

typedef UINT64 LEVEL_BASE::REG_CLASS_BITS
 
typedef class REGISTER_SET< REG_FirstInRegset, REG_LastInRegsetLEVEL_CORE::REGSET
 

Enumerations

enum  LEVEL_BASE::REG {
  REG_INVALID_ = 0,
  REG_GR_BASE = REG_RBASE,
  LEVEL_BASE::REG_RDI = REG_GR_BASE,
  LEVEL_BASE::REG_GDI = REG_RDI,
  LEVEL_BASE::REG_RSI,
  LEVEL_BASE::REG_GSI = REG_RSI,
  LEVEL_BASE::REG_RBP,
  LEVEL_BASE::REG_GBP = REG_RBP,
  LEVEL_BASE::REG_RSP,
  LEVEL_BASE::REG_STACK_PTR = REG_RSP,
  LEVEL_BASE::REG_RBX,
  LEVEL_BASE::REG_GBX = REG_RBX,
  LEVEL_BASE::REG_RDX,
  LEVEL_BASE::REG_GDX = REG_RDX,
  LEVEL_BASE::REG_RCX,
  LEVEL_BASE::REG_GCX = REG_RCX,
  LEVEL_BASE::REG_RAX,
  LEVEL_BASE::REG_GAX = REG_RAX,
  REG_R8,
  REG_R9,
  REG_R10,
  REG_R11,
  REG_R12,
  REG_R13,
  REG_R14,
  REG_R15,
  REG_GR_LAST = REG_R15,
  REG_SEG_BASE,
  REG_SEG_CS = REG_SEG_BASE,
  REG_SEG_SS,
  REG_SEG_DS,
  REG_SEG_ES,
  REG_SEG_FS,
  REG_SEG_GS,
  REG_SEG_LAST = REG_SEG_GS,
  REG_RFLAGS,
  REG_GFLAGS =REG_RFLAGS,
  REG_RIP,
  REG_INST_PTR = REG_RIP,
  REG_AL,
  REG_AH,
  REG_AX,
  REG_CL,
  REG_CH,
  REG_CX,
  REG_DL,
  REG_DH,
  REG_DX,
  REG_BL,
  REG_BH,
  REG_BX,
  REG_BP,
  REG_SI,
  REG_DI,
  REG_SP,
  REG_FLAGS,
  REG_IP,
  REG_EDI,
  REG_DIL,
  REG_ESI,
  REG_SIL,
  REG_EBP,
  REG_BPL,
  REG_ESP,
  REG_SPL,
  REG_EBX,
  REG_EDX,
  REG_ECX,
  REG_EAX,
  REG_EFLAGS,
  REG_EIP,
  REG_R8B,
  REG_R8W,
  REG_R8D,
  REG_R9B,
  REG_R9W,
  REG_R9D,
  REG_R10B,
  REG_R10W,
  REG_R10D,
  REG_R11B,
  REG_R11W,
  REG_R11D,
  REG_R12B,
  REG_R12W,
  REG_R12D,
  REG_R13B,
  REG_R13W,
  REG_R13D,
  REG_R14B,
  REG_R14W,
  REG_R14D,
  REG_R15B,
  REG_R15W,
  REG_R15D,
  REG_MM_BASE,
  REG_MM0 = REG_MM_BASE,
  REG_MM1,
  REG_MM2,
  REG_MM3,
  REG_MM4,
  REG_MM5,
  REG_MM6,
  REG_MM7,
  REG_MM_LAST = REG_MM7,
  REG_XMM_BASE,
  REG_FIRST_FP_REG = REG_XMM_BASE,
  REG_XMM0 = REG_XMM_BASE,
  REG_XMM1,
  REG_XMM2,
  REG_XMM3,
  REG_XMM4,
  REG_XMM5,
  REG_XMM6,
  REG_XMM7,
  REG_XMM8,
  REG_XMM9,
  REG_XMM10,
  REG_XMM11,
  REG_XMM12,
  REG_XMM13,
  REG_XMM14,
  REG_XMM15,
  REG_XMM_SSE_LAST = REG_XMM15,
  REG_XMM_AVX_LAST = REG_XMM_SSE_LAST,
  REG_XMM_AVX512_HI16_FIRST,
  REG_XMM16 = REG_XMM_AVX512_HI16_FIRST,
  REG_XMM17,
  REG_XMM18,
  REG_XMM19,
  REG_XMM20,
  REG_XMM21,
  REG_XMM22,
  REG_XMM23,
  REG_XMM24,
  REG_XMM25,
  REG_XMM26,
  REG_XMM27,
  REG_XMM28,
  REG_XMM29,
  REG_XMM30,
  REG_XMM31,
  REG_XMM_AVX512_HI16_LAST = REG_XMM31,
  REG_XMM_AVX512_LAST = REG_XMM_AVX512_HI16_LAST,
  REG_XMM_LAST = REG_XMM_AVX512_LAST,
  REG_YMM_BASE,
  REG_YMM0 = REG_YMM_BASE,
  REG_YMM1,
  REG_YMM2,
  REG_YMM3,
  REG_YMM4,
  REG_YMM5,
  REG_YMM6,
  REG_YMM7,
  REG_YMM8,
  REG_YMM9,
  REG_YMM10,
  REG_YMM11,
  REG_YMM12,
  REG_YMM13,
  REG_YMM14,
  REG_YMM15,
  REG_YMM_AVX_LAST = REG_YMM15,
  REG_YMM_AVX512_HI16_FIRST,
  REG_YMM16 = REG_YMM_AVX512_HI16_FIRST,
  REG_YMM17,
  REG_YMM18,
  REG_YMM19,
  REG_YMM20,
  REG_YMM21,
  REG_YMM22,
  REG_YMM23,
  REG_YMM24,
  REG_YMM25,
  REG_YMM26,
  REG_YMM27,
  REG_YMM28,
  REG_YMM29,
  REG_YMM30,
  REG_YMM31,
  REG_YMM_AVX512_HI16_LAST = REG_YMM31,
  REG_YMM_AVX512_LAST = REG_YMM_AVX512_HI16_LAST,
  REG_YMM_LAST = REG_YMM_AVX512_LAST,
  REG_ZMM_BASE,
  REG_ZMM0 = REG_ZMM_BASE,
  REG_ZMM1,
  REG_ZMM2,
  REG_ZMM3,
  REG_ZMM4,
  REG_ZMM5,
  REG_ZMM6,
  REG_ZMM7,
  REG_ZMM8,
  REG_ZMM9,
  REG_ZMM10,
  REG_ZMM11,
  REG_ZMM12,
  REG_ZMM13,
  REG_ZMM14,
  REG_ZMM15,
  REG_ZMM_AVX512_SPLIT_LAST = REG_ZMM15,
  REG_ZMM_AVX512_HI16_FIRST,
  REG_ZMM16 = REG_ZMM_AVX512_HI16_FIRST,
  REG_ZMM17,
  REG_ZMM18,
  REG_ZMM19,
  REG_ZMM20,
  REG_ZMM21,
  REG_ZMM22,
  REG_ZMM23,
  REG_ZMM24,
  REG_ZMM25,
  REG_ZMM26,
  REG_ZMM27,
  REG_ZMM28,
  REG_ZMM29,
  REG_ZMM30,
  REG_ZMM31,
  REG_ZMM_AVX512_HI16_LAST = REG_ZMM31,
  REG_ZMM_AVX512_LAST = REG_ZMM_AVX512_HI16_LAST,
  REG_ZMM_LAST = REG_ZMM_AVX512_LAST,
  REG_K_BASE,
  REG_K0 = REG_K_BASE,
  REG_IMPLICIT_FULL_MASK = REG_K0,
  REG_K1,
  REG_K2,
  REG_K3,
  REG_K4,
  REG_K5,
  REG_K6,
  REG_K7,
  REG_K_LAST = REG_K7,
  REG_MXCSR,
  REG_MXCSRMASK,
  REG_ORIG_RAX,
  REG_ORIG_GAX = REG_ORIG_RAX,
  REG_FPST_BASE,
  REG_FPSTATUS_BASE = REG_FPST_BASE,
  REG_FPCW = REG_FPSTATUS_BASE,
  REG_FPSW,
  LEVEL_BASE::REG_FPTAG,
  REG_FPIP_OFF,
  REG_FPIP_SEL,
  REG_FPOPCODE,
  REG_FPDP_OFF,
  REG_FPDP_SEL,
  REG_FPSTATUS_LAST = REG_FPDP_SEL,
  LEVEL_BASE::REG_FPTAG_FULL,
  REG_ST_BASE,
  REG_ST0 = REG_ST_BASE,
  REG_ST1,
  REG_ST2,
  REG_ST3,
  REG_ST4,
  REG_ST5,
  REG_ST6,
  REG_ST7,
  REG_ST_LAST = REG_ST7,
  REG_FPST_LAST = REG_ST_LAST,
  REG_DR_BASE,
  REG_DR0 = REG_DR_BASE,
  REG_DR1,
  REG_DR2,
  REG_DR3,
  REG_DR4,
  REG_DR5,
  REG_DR6,
  REG_DR7,
  REG_DR_LAST = REG_DR7,
  REG_CR_BASE,
  REG_CR0 = REG_CR_BASE,
  REG_CR1,
  REG_CR2,
  REG_CR3,
  REG_CR4,
  REG_CR_LAST = REG_CR4,
  REG_TSSR,
  REG_LDTR,
  REG_TR_BASE,
  REG_TR = REG_TR_BASE,
  REG_TR3,
  REG_TR4,
  REG_TR5,
  REG_TR6,
  REG_TR7,
  REG_TR_LAST = REG_TR7,
  LEVEL_BASE::REG_SEG_GS_BASE = REG_TOOL_BASE,
  LEVEL_BASE::REG_SEG_FS_BASE,
  REG_INST_BASE,
  LEVEL_BASE::REG_INST_SCRATCH_BASE = REG_INST_BASE,
  LEVEL_BASE::REG_INST_G0 = REG_INST_SCRATCH_BASE,
  LEVEL_BASE::REG_INST_G1,
  LEVEL_BASE::REG_INST_G2,
  LEVEL_BASE::REG_INST_G3,
  LEVEL_BASE::REG_INST_G4,
  LEVEL_BASE::REG_INST_G5,
  LEVEL_BASE::REG_INST_G6,
  LEVEL_BASE::REG_INST_G7,
  LEVEL_BASE::REG_INST_G8,
  LEVEL_BASE::REG_INST_G9,
  LEVEL_BASE::REG_INST_G10,
  LEVEL_BASE::REG_INST_G11,
  LEVEL_BASE::REG_INST_G12,
  LEVEL_BASE::REG_INST_G13,
  LEVEL_BASE::REG_INST_G14,
  LEVEL_BASE::REG_INST_G15,
  LEVEL_BASE::REG_INST_G16,
  LEVEL_BASE::REG_INST_G17,
  LEVEL_BASE::REG_INST_G18,
  LEVEL_BASE::REG_INST_G19,
  LEVEL_BASE::REG_INST_G20,
  LEVEL_BASE::REG_INST_G21,
  LEVEL_BASE::REG_INST_G22,
  LEVEL_BASE::REG_INST_G23,
  LEVEL_BASE::REG_INST_G24,
  LEVEL_BASE::REG_INST_G25,
  LEVEL_BASE::REG_INST_G26,
  LEVEL_BASE::REG_INST_G27,
  LEVEL_BASE::REG_INST_G28,
  LEVEL_BASE::REG_INST_G29,
  REG_INST_TOOL_FIRST = REG_INST_G0,
  REG_INST_TOOL_LAST = REG_INST_G29,
  REG_BUF_BASE0,
  REG_BUF_BASE1,
  REG_BUF_BASE2,
  REG_BUF_BASE3,
  REG_BUF_BASE4,
  REG_BUF_BASE5,
  REG_BUF_BASE6,
  REG_BUF_BASE7,
  REG_BUF_BASE8,
  REG_BUF_BASE9,
  REG_BUF_BASE_LAST = REG_BUF_BASE9,
  REG_BUF_END0,
  REG_BUF_END1,
  REG_BUF_END2,
  REG_BUF_END3,
  REG_BUF_END4,
  REG_BUF_END5,
  REG_BUF_END6,
  REG_BUF_END7,
  REG_BUF_END8,
  REG_BUF_END9,
  REG_BUF_ENDLAST = REG_BUF_END9,
  REG_BUF_LAST = REG_BUF_ENDLAST,
  REG_INST_SCRATCH_LAST = REG_BUF_LAST,
  LEVEL_BASE::REG_INST_G0D,
  LEVEL_BASE::REG_INST_G1D,
  LEVEL_BASE::REG_INST_G2D,
  LEVEL_BASE::REG_INST_G3D,
  LEVEL_BASE::REG_INST_G4D,
  LEVEL_BASE::REG_INST_G5D,
  LEVEL_BASE::REG_INST_G6D,
  LEVEL_BASE::REG_INST_G7D,
  LEVEL_BASE::REG_INST_G8D,
  LEVEL_BASE::REG_INST_G9D,
  LEVEL_BASE::REG_INST_G10D,
  LEVEL_BASE::REG_INST_G11D,
  LEVEL_BASE::REG_INST_G12D,
  LEVEL_BASE::REG_INST_G13D,
  LEVEL_BASE::REG_INST_G14D,
  LEVEL_BASE::REG_INST_G15D,
  LEVEL_BASE::REG_INST_G16D,
  LEVEL_BASE::REG_INST_G17D,
  LEVEL_BASE::REG_INST_G18D,
  LEVEL_BASE::REG_INST_G19D,
  LEVEL_BASE::REG_INST_G20D,
  LEVEL_BASE::REG_INST_G21D,
  LEVEL_BASE::REG_INST_G22D,
  LEVEL_BASE::REG_INST_G23D,
  LEVEL_BASE::REG_INST_G24D,
  LEVEL_BASE::REG_INST_G25D,
  LEVEL_BASE::REG_INST_G26D,
  LEVEL_BASE::REG_INST_G27D,
  LEVEL_BASE::REG_INST_G28D,
  LEVEL_BASE::REG_INST_G29D,
  REG_TOOL_LAST = REG_INST_G29D,
  REG_LAST
}
 
enum  LEVEL_BASE::REG_ACCESS {
  REG_ACCESS_READ,
  REG_ACCESS_WRITE,
  REG_ACCESS_OVERWRITE
}
 
enum  LEVEL_BASE::REGNAME { REGNAME_LAST }
 
enum  LEVEL_BASE::REGWIDTH {
  REGWIDTH_8 =0,
  REGWIDTH_16 =1,
  REGWIDTH_32 =2,
  REGWIDTH_64 =3,
  REGWIDTH_80,
  REGWIDTH_128,
  REGWIDTH_256,
  REGWIDTH_512,
  REGWIDTH_INVALID,
  REGWIDTH_NATIVE =REGWIDTH_64
}
 
enum  LEVEL_BASE::REG_CLASS {
  REG_CLASS_NONE = 0,
  REG_CLASS_PSEUDO,
  REG_CLASS_GR,
  REG_CLASS_GRU8,
  REG_CLASS_GRL8,
  REG_CLASS_GRH16,
  REG_CLASS_GRH32,
  REG_CLASS_SEG,
  REG_CLASS_MM,
  REG_CLASS_XMM,
  REG_CLASS_YMM,
  REG_CLASS_ZMM,
  REG_CLASS_K,
  REG_CLASS_FPST,
  REG_CLASS_ST,
  REG_CLASS_CR,
  REG_CLASS_DR,
  REG_CLASS_TR,
  REG_CLASS_FLAGS,
  REG_CLASS_FLAGS16,
  REG_CLASS_FLAGS32,
  REG_CLASS_STATUS_FLAGS,
  REG_CLASS_DFLAG,
  REG_CLASS_MXCSR,
  REG_CLASS_MXCSRMASK,
  REG_CLASS_IP,
  REG_CLASS_IP16,
  REG_CLASS_IP32,
  REG_CLASS_ARCH,
  REG_CLASS_PIN_GR,
  REG_CLASS_PIN_GRU8,
  REG_CLASS_PIN_GRL8,
  REG_CLASS_PIN_GRH16,
  REG_CLASS_PIN_GRH32,
  REG_CLASS_PIN_XMM,
  REG_CLASS_PIN_YMM,
  REG_CLASS_PIN_ZMM,
  REG_CLASS_PIN_K,
  REG_CLASS_PIN_MXCSR,
  REG_CLASS_PIN_FLAGS,
  REG_CLASS_PIN_STATUS_FLAGS,
  REG_CLASS_PIN_DFLAG
}
 
enum  LEVEL_BASE::REG_SUBCLASS {
  REG_SUBCLASS_NONE = 0,
  REG_SUBCLASS_REX,
  REG_SUBCLASS_FULL_STACKPTR,
  REG_SUBCLASS_PIN_FULL_STACKPTR,
  REG_SUBCLASS_PIN_TMP,
  REG_SUBCLASS_PIN_INST_GR,
  REG_SUBCLASS_PIN_INST_GR_H32,
  REG_SUBCLASS_PIN_INST_BUF,
  REG_SUBCLASS_PIN_INST_COND
}
 
enum  LEVEL_BASE::REG_ALLOC_TYPE {
  REG_ALLOC_NONE = 0,
  REG_ALLOC_PART,
  REG_ALLOC_ANY_GR,
  REG_ALLOC_IDENT,
  REG_ALLOC_CR = REG_ALLOC_IDENT,
  REG_ALLOC_DR = REG_ALLOC_IDENT,
  REG_ALLOC_TR = REG_ALLOC_IDENT,
  REG_ALLOC_ST = REG_ALLOC_IDENT,
  REG_ALLOC_MM = REG_ALLOC_IDENT,
  REG_ALLOC_XMM = REG_ALLOC_IDENT,
  REG_ALLOC_YMM = REG_ALLOC_IDENT,
  REG_ALLOC_ZMM = REG_ALLOC_IDENT,
  REG_ALLOC_K = REG_ALLOC_IDENT,
  REG_ALLOC_SEG = REG_ALLOC_IDENT,
  REG_ALLOC_STACK_PTR = REG_ALLOC_IDENT,
  REG_ALLOC_X87 = REG_ALLOC_IDENT,
  REG_ALLOC_FLAGS = REG_ALLOC_IDENT,
  REG_ALLOC_STATUS_FLAGS = REG_ALLOC_IDENT,
  REG_ALLOC_DFLAG = REG_ALLOC_IDENT
}
 

Functions

VOID LEVEL_BASE::InitRegTables ()
 
BOOL LEVEL_BASE::REG_is_fr_for_get_context (REG reg)
 
BOOL LEVEL_BASE::REG_is_mxcsr (REG reg)
 
BOOL LEVEL_BASE::REG_is_any_mxcsr (REG reg)
 
BOOL LEVEL_BASE::REG_is_mm (REG reg)
 
BOOL LEVEL_BASE::REG_is_xmm (REG reg)
 
BOOL LEVEL_BASE::REG_is_ymm (REG reg)
 
BOOL LEVEL_BASE::REG_is_zmm (REG reg)
 
BOOL LEVEL_BASE::REG_is_xmm_ymm_zmm (REG reg)
 
BOOL LEVEL_BASE::REG_is_any_vector_reg (REG reg)
 
BOOL LEVEL_BASE::REG_is_k_mask (REG reg)
 
BOOL LEVEL_BASE::REG_is_any_mask (REG reg)
 
REG LEVEL_BASE::REG_corresponding_ymm_reg (REG reg)
 
REG LEVEL_BASE::REG_corresponding_zmm_reg (REG reg)
 
BOOL LEVEL_BASE::REG_is_st (REG reg)
 
BOOL LEVEL_BASE::REG_is_machine (REG reg)
 
BOOL LEVEL_BASE::REG_is_application (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin (REG reg)
 
BOOL LEVEL_BASE::REG_is_subclass_none (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_gpr (REG reg)
 
BOOL LEVEL_BASE::REG_is_seg_base (REG reg)
 
BOOL LEVEL_BASE::REG_is_gs_or_fs (REG reg)
 
BOOL LEVEL_BASE::REG_valid_for_iarg_reg_value (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_xmm (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_ymm (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_zmm (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_xmm_ymm_zmm (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_k_mask (REG reg)
 
BOOL LEVEL_BASE::REG_is_avx512_hi16_xmm (const REG xmm)
 
BOOL LEVEL_BASE::REG_is_avx512_hi16_ymm (const REG ymm)
 
BOOL LEVEL_BASE::REG_is_gr_type (REG reg)
 
REG LEVEL_BASE::REG_AppFlags ()
 
BOOL LEVEL_BASE::REG_is_flags (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_flags (REG reg)
 
BOOL LEVEL_BASE::REG_is_status_flags (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_status_flags (REG reg)
 
BOOL LEVEL_BASE::REG_is_df_flag (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_df_flag (REG reg)
 
BOOL LEVEL_BASE::REG_is_flags_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_flags_any_size_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_status_flags_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_app_status_flags_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_df_flag_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_app_df_flag_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_any_flags_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_any_pin_flags (REG reg)
 
BOOL LEVEL_BASE::REG_is_any_app_flags (REG reg)
 
REG LEVEL_BASE::REG_get_status_flags_reg_of_type (REG reg)
 
REG LEVEL_BASE::REG_get_df_flag_reg_of_type (REG reg)
 
REG LEVEL_BASE::REG_get_full_flags_reg_of_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_stackptr_type (REG reg)
 
BOOL LEVEL_BASE::REG_is_representative_reg (REG reg)
 
BOOL LEVEL_BASE::REG_is_pin_inst (REG reg)
 
BOOL LEVEL_BASE::REG_is_buffer (REG reg)
 
BOOL LEVEL_BASE::REG_is_inst_scratch (REG reg)
 
ADDRINT LEVEL_BASE::REG_regSubClassBitMapTable ()
 
ADDRINT LEVEL_BASE::REG_regDefTable ()
 
BOOL LEVEL_BASE::REG_is_pin_tmp (REG reg)
 
REG LEVEL_BASE::REG_LastSupportedXmm ()
 
REG LEVEL_BASE::REG_LastSupportedYmm ()
 
REG LEVEL_BASE::REG_LastSupportedZmm ()
 
UINT32 LEVEL_BASE::REG_Size (REG reg)
 
REG LEVEL_BASE::REG_IdentityCopy (const REG reg)
 
BOOL LEVEL_BASE::REG_is_Half16 (const REG reg)
 
REGWIDTH LEVEL_BASE::REG_Width (REG reg)
 
BOOL LEVEL_BASE::REG_is_Half32 (const REG reg)
 
BOOL LEVEL_BASE::REG_is_Lower8 (const REG reg)
 
BOOL LEVEL_BASE::REG_is_Upper8 (const REG reg)
 
BOOL LEVEL_BASE::REG_is_Any8 (const REG reg)
 
BOOL LEVEL_BASE::REG_is_partialreg (const REG reg)
 
BOOL LEVEL_CORE::REGSET_Contains (const REGSET &regset, REG reg)
 
VOID LEVEL_CORE::REGSET_Insert (REGSET &regset, REG reg)
 
VOID LEVEL_CORE::REGSET_Remove (REGSET &regset, REG reg)
 
VOID LEVEL_CORE::REGSET_Clear (REGSET &regset)
 
VOID LEVEL_CORE::REGSET_AddAll (REGSET &regset)
 
REG LEVEL_CORE::REGSET_PopNext (REGSET &regset)
 
UINT32 LEVEL_CORE::REGSET_PopCount (const REGSET &regset)
 
BOOL LEVEL_CORE::REGSET_PopCountIsZero (const REGSET &regset)
 
std::string LEVEL_CORE::REGSET_StringShort (const REGSET &regset)
 

Variables

const REGDEF_ENTRY LEVEL_BASE::_regDefTable []
 
UINT64 LEVEL_BASE::_regClassBitMapTable [REG_LAST]
 
UINT64 LEVEL_BASE::_regSubClassBitMapTable [REG_LAST]
 
UINT32 LEVEL_BASE::_regSpillSizeTable [REG_LAST]
 
REGWIDTH LEVEL_BASE::_regWidthTable [REG_LAST]
 
REG_ALLOC_TYPE LEVEL_BASE::_regAllocTypeTable [REG_LAST]
 
REG LEVEL_BASE::_regFullNameTable [REG_LAST]
 
REG LEVEL_BASE::_regMachineNameTable [REG_LAST]
 
REG LEVEL_BASE::_regPinNameTable [REG_LAST]
 
INT32 LEVEL_BASE::_regWidthToBitWidth []
 
GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_APP_ALL
 
GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_PIN_ALL
 
GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_ALL_REGS = REGCBIT_APP_ALL | REGCBIT_PIN_ALL
 
GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_APP_FLAGS
 
GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_PIN_FLAGS
 
GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_PARTIAL
 
GLOBALCONST REG_SUBCLASS_BITS LEVEL_BASE::REGSBIT_PIN_INST_ALL
 
GLOBALCONST REG_SUBCLASS_BITS LEVEL_BASE::REGSBIT_PIN_SCRATCH_ALL
 
GLOBALCONST REG_SUBCLASS_BITS LEVEL_BASE::REGSBIT_STACKPTR_ALL
 
GLOBALCONST REG LEVEL_CORE::REG_FirstInRegset = REG_RBASE
 
GLOBALCONST REG LEVEL_CORE::REG_LastInRegset = REG(REG_LAST-1)
 

Detailed Description

Availability:
Mode: JIT & Probe
O/S: Linux & Windows
CPU: IA-32 and Intel(R) 64 architectures

Macro Definition Documentation

◆ _REGSBIT

#define _REGSBIT (   regSubClass)    (REG_SUBCLASS_BITS(1) << (regSubClass))

Bit flag that represents a REG_SUBCLASS value.

Typedef Documentation

◆ REG_CLASS_BITS

Bit flag that represents a REG_CLASS value.

◆ REGSET

A regset type that contains all registers

Enumeration Type Documentation

◆ REG

The x86 register enum (for both IA-32 and Intel(R) 64 architectures) Note that each register added to this enum, must have a row in the _regDefTable. Note also that the _regDefTable is defined separately for Intel64 and for IA-32.

Enumerator
REG_RDI 

rdi

REG_GDI 

edi on a 32 bit machine, rdi on 64

REG_RSI 

rsi

REG_GSI 

esi on a 32 bit machine, rsi on 64

REG_RBP 

rbp

REG_GBP 

ebp on a 32 bit machine, rbp on 64

REG_RSP 

rsp

REG_STACK_PTR 

esp on a 32 bit machine, rsp on 64

REG_RBX 

rbx

REG_GBX 

ebx on a 32 bit machine, rbx on 64

REG_RDX 

rdx

REG_GDX 

edx on a 32 bit machine, rdx on 64

REG_RCX 

rcx

REG_GCX 

ecx on a 32 bit machine, rcx on 64

REG_RAX 

rax

REG_GAX 

eax on a 32 bit machine, rax on 64

REG_FPTAG 

Abridged 8-bit version of x87 tag register.

REG_FPTAG_FULL 

Full 16-bit version of x87 tag register.

REG_SEG_GS_BASE 

Base address for GS segment.

*** Segment registers (FS/GS) handling in Pin ***

Background about segment virtualization support in Pin: Segment virtualization was introduced in Pin in the past in order to support Pin on OS's which didn't contain old (without segment usage) libc in a standard installation. Application and Pin were using 2 different TLS's, however access to them was done through segment registers (Also known as thread-self-pointer registers) (actually through their matching segment descriptor which contain the segment base address). Segment register (selector) can have one value at a time. Changing segment register value back and forth (from application to Pin and the other way around) is very costly performance wise (involve system calls). Also there may have been other limitations. Therefore it was decided to emulate application instructions which use segments registers. This is done by saving segment selector value and segment base address in the spill area (i.e REG_PIN_SEG_GS_VAL and REG_SEG_GS_BASE ) for each thread and performing all segment related instruction (of the application) using their values (by emulating instructions that set these registers and translate instructions that are accessing the memory using fs or gs prefix - we call this virtualizing segment). (This also help when passing effective address of memory operands to analysis routines) In Linux 32 bit the segment base address changes every time we write to a segment register (every time we load GS/FS, the hidden part is also loaded with the segment base address - it's kind of a cache for optimization, to save bus cycles) In order to support this beside emulating these in instructions we also tracked GDT/LDT tables (We store these tables inside Pin and update them every time needed).

Today we have PinCRT which doesn't use segment registers, therefore we don't have to virtualize application segment usage and just let application execute these instructions in their original form (without modifying them or without emulating them).

Linux In Linux we no longer virtualize application handling of segments: application instructions which uses segments or segments prefix now runs in their original form. In Linux 64 bits we now only track segment base address virtual register by emulating the system call which changes the segment base address (track application segment base address inside a virtual register in addition to updating the application one). In Linux 32 bits it's more complicated: It's hard to track the segment address without fully emulating all writes to segment registers + tracking the GDT/LDT which is a lot of work. Instead we're using GsBaseAddress()/FsBaseAddress() where needed including in PrecomputeSegBaseAddressIfNeeded() which is called from SetupArgumentEa() when needing to compute REG_SEG_FS_BASE/REG_SEG_GS_BASE value (holds the segment base address)

macOS In macOS, PIN still use (at least) the system loader which uses the GS segment register, therefore segment virtualization is still used.

Windows In Windows we compute segment base address at the beginning (assume it doens't change) and use its value when needed. REG_PIN_SEG_GS_VAL and REG_PIN_SEG_FS_VAL are unused in this platform

REG_SEG_FS_BASE 

Base address for FS segment.

REG_INST_SCRATCH_BASE 

First available scratch register.

REG_INST_G0 

Scratch register used in pintools.

REG_INST_G1 

Scratch register used in pintools.

REG_INST_G2 

Scratch register used in pintools.

REG_INST_G3 

Scratch register used in pintools.

REG_INST_G4 

Scratch register used in pintools.

REG_INST_G5 

Scratch register used in pintools.

REG_INST_G6 

Scratch register used in pintools.

REG_INST_G7 

Scratch register used in pintools.

REG_INST_G8 

Scratch register used in pintools.

REG_INST_G9 

Scratch register used in pintools.

REG_INST_G10 

Scratch register used in pintools.

REG_INST_G11 

Scratch register used in pintools.

REG_INST_G12 

Scratch register used in pintools.

REG_INST_G13 

Scratch register used in pintools.

REG_INST_G14 

Scratch register used in pintools.

REG_INST_G15 

Scratch register used in pintools.

REG_INST_G16 

Scratch register used in pintools.

REG_INST_G17 

Scratch register used in pintools.

REG_INST_G18 

Scratch register used in pintools.

REG_INST_G19 

Scratch register used in pintools.

REG_INST_G20 

Scratch register used in pintools.

REG_INST_G21 

Scratch register used in pintools.

REG_INST_G22 

Scratch register used in pintools.

REG_INST_G23 

Scratch register used in pintools.

REG_INST_G24 

Scratch register used in pintools.

REG_INST_G25 

Scratch register used in pintools.

REG_INST_G26 

Scratch register used in pintools.

REG_INST_G27 

Scratch register used in pintools.

REG_INST_G28 

Scratch register used in pintools.

REG_INST_G29 

Scratch register used in pintools.

REG_INST_G0D 

Scratch register used in pintools.

REG_INST_G1D 

Scratch register used in pintools.

REG_INST_G2D 

Scratch register used in pintools.

REG_INST_G3D 

Scratch register used in pintools.

REG_INST_G4D 

Scratch register used in pintools.

REG_INST_G5D 

Scratch register used in pintools.

REG_INST_G6D 

Scratch register used in pintools.

REG_INST_G7D 

Scratch register used in pintools.

REG_INST_G8D 

Scratch register used in pintools.

REG_INST_G9D 

Scratch register used in pintools.

REG_INST_G10D 

Scratch register used in pintools.

REG_INST_G11D 

Scratch register used in pintools.

REG_INST_G12D 

Scratch register used in pintools.

REG_INST_G13D 

Scratch register used in pintools.

REG_INST_G14D 

Scratch register used in pintools.

REG_INST_G15D 

Scratch register used in pintools.

REG_INST_G16D 

Scratch register used in pintools.

REG_INST_G17D 

Scratch register used in pintools.

REG_INST_G18D 

Scratch register used in pintools.

REG_INST_G19D 

Scratch register used in pintools.

REG_INST_G20D 

Scratch register used in pintools.

REG_INST_G21D 

Scratch register used in pintools.

REG_INST_G22D 

Scratch register used in pintools.

REG_INST_G23D 

Scratch register used in pintools.

REG_INST_G24D 

Scratch register used in pintools.

REG_INST_G25D 

Scratch register used in pintools.

REG_INST_G26D 

Scratch register used in pintools.

REG_INST_G27D 

Scratch register used in pintools.

REG_INST_G28D 

Scratch register used in pintools.

REG_INST_G29D 

Scratch register used in pintools.

◆ REG_ACCESS

Registers access type in context via GetContextReg/SetContextReg

◆ REG_ALLOC_TYPE

Classification of registers under register allocation. Registers of the same allocation type can replace each other during register re-allocation.

◆ REG_CLASS

Enumeration of register classes. Each register belongs to one and only one class.

◆ REG_SUBCLASS

Additional classification of register.

◆ REGNAME

x

◆ REGWIDTH

register widths

Function Documentation

◆ REG_AppFlags()

REG LEVEL_BASE::REG_AppFlags ( )
Returns
the application flags register

◆ REG_corresponding_ymm_reg()

REG LEVEL_BASE::REG_corresponding_ymm_reg ( REG  reg)
Returns
the corresponding ymm reg to an xmm reg: e.g. if reg is xmm4 return ymm4 ASSUMES that REG_is_xmm returns TRUE on reg

◆ REG_corresponding_zmm_reg()

REG LEVEL_BASE::REG_corresponding_zmm_reg ( REG  reg)
Returns
the corresponding zmm reg to an xmm reg: e.g. if reg is xmm4 return zmm4 ASSUMES that REG_is_xmm returns TRUE on reg

◆ REG_get_df_flag_reg_of_type()

REG LEVEL_BASE::REG_get_df_flag_reg_of_type ( REG  reg)
Returns
TGiven that reg is either REG_GFLAGS or REG_PIN_FLAGS, return the corresponding *_DF_FLAG reg

◆ REG_get_full_flags_reg_of_type()

REG LEVEL_BASE::REG_get_full_flags_reg_of_type ( REG  reg)
Returns
the full flags reg of either the app or pin reg - depending on what type of reg reg is

◆ REG_get_status_flags_reg_of_type()

REG LEVEL_BASE::REG_get_status_flags_reg_of_type ( REG  reg)
Returns
Given that reg is either REG_GFLAGS or REG_PIN_FLAGS, return the corresponding *_STATUS_FLAGS reg

◆ REG_IdentityCopy()

REG LEVEL_BASE::REG_IdentityCopy ( const REG  reg)
Returns
the application register that is the counterpart of this Pin reg

◆ REG_is_Any8()

BOOL LEVEL_BASE::REG_is_Any8 ( const REG  reg)

Return TRUE if reg is a upper or lower 8-bit register

◆ REG_is_any_app_flags()

BOOL LEVEL_BASE::REG_is_any_app_flags ( REG  reg)
Returns
TRUE iff is Any of the app flag regs

◆ REG_is_any_flags_type()

BOOL LEVEL_BASE::REG_is_any_flags_type ( REG  reg)
Returns
TRUE iff is Any of the flag regs app or pin

◆ REG_is_any_mask()

BOOL LEVEL_BASE::REG_is_any_mask ( REG  reg)
Returns
true if reg is a k-mask register or its Pin variant

◆ REG_is_any_mxcsr()

BOOL LEVEL_BASE::REG_is_any_mxcsr ( REG  reg)
Returns
true if reg is mxcsr or its Pin variant

◆ REG_is_any_pin_flags()

BOOL LEVEL_BASE::REG_is_any_pin_flags ( REG  reg)
Returns
TRUE iff is Any of the pinflag regs

◆ REG_is_any_vector_reg()

BOOL LEVEL_BASE::REG_is_any_vector_reg ( REG  reg)
Returns
true if reg is an xmm,ymm, or zmm register, or their Pin variants.

◆ REG_is_app_df_flag_type()

BOOL LEVEL_BASE::REG_is_app_df_flag_type ( REG  reg)
Returns
TRUE iff is REG_DF_FLAG or PIN_REG_DF_FLAG

◆ REG_is_app_status_flags_type()

BOOL LEVEL_BASE::REG_is_app_status_flags_type ( REG  reg)
Returns
TRUE iff REG_STATUS_FLAGS

◆ REG_is_application()

BOOL LEVEL_BASE::REG_is_application ( REG  reg)
Returns
true if reg is an application register

◆ REG_is_avx512_hi16_xmm()

BOOL LEVEL_BASE::REG_is_avx512_hi16_xmm ( const REG  xmm)
Returns
true if the given xmm is one of xmm16-xmm31

◆ REG_is_avx512_hi16_ymm()

BOOL LEVEL_BASE::REG_is_avx512_hi16_ymm ( const REG  ymm)
Returns
true if the given ymm is one of ymm16-ymm31

◆ REG_is_buffer()

BOOL LEVEL_BASE::REG_is_buffer ( REG  reg)
Returns
TRUE iff is app flags

◆ REG_is_df_flag()

BOOL LEVEL_BASE::REG_is_df_flag ( REG  reg)
Returns
TRUE iff is app df flag

◆ REG_is_df_flag_type()

BOOL LEVEL_BASE::REG_is_df_flag_type ( REG  reg)
Returns
TRUE iff is REG_DF_FLAG or PIN_REG_DF_FLAG

◆ REG_is_flags()

BOOL LEVEL_BASE::REG_is_flags ( REG  reg)
Returns
TRUE iff is app flags

◆ REG_is_flags_any_size_type()

BOOL LEVEL_BASE::REG_is_flags_any_size_type ( REG  reg)
Returns
TRUE iff both app and pin (and redundant for both) flags regs

◆ REG_is_flags_type()

BOOL LEVEL_BASE::REG_is_flags_type ( REG  reg)
Returns
TRUE iff both app and pin (and redundant for both) flags regs

◆ REG_is_fr_for_get_context()

BOOL LEVEL_BASE::REG_is_fr_for_get_context ( REG  reg)
Returns
true if reg is a floating register appropriate for PIN_GetContextReg

◆ REG_is_gr_type()

BOOL LEVEL_BASE::REG_is_gr_type ( REG  reg)
Returns
true if it is a gr reg

◆ REG_is_gs_or_fs()

BOOL LEVEL_BASE::REG_is_gs_or_fs ( REG  reg)

Return TRUE if the register a GS or FS register

◆ REG_is_Half16()

BOOL LEVEL_BASE::REG_is_Half16 ( const REG  reg)

Return TRUE if reg is a lower 16-bit register

◆ REG_is_Half32()

BOOL LEVEL_BASE::REG_is_Half32 ( const REG  reg)

Return TRUE if reg is a lower 32-bit register, actually any 32 bit register

◆ REG_is_inst_scratch()

BOOL LEVEL_BASE::REG_is_inst_scratch ( REG  reg)
Returns
TRUE iff is app flags

◆ REG_is_k_mask()

BOOL LEVEL_BASE::REG_is_k_mask ( REG  reg)
Returns
true if reg is a k-mask register

◆ REG_is_Lower8()

BOOL LEVEL_BASE::REG_is_Lower8 ( const REG  reg)

Return TRUE if reg is a lower 8-bit register

◆ REG_is_machine()

BOOL LEVEL_BASE::REG_is_machine ( REG  reg)
Returns
true if reg is a machine register

◆ REG_is_mm()

BOOL LEVEL_BASE::REG_is_mm ( REG  reg)
Returns
true if reg is an mmx register

◆ REG_is_mxcsr()

BOOL LEVEL_BASE::REG_is_mxcsr ( REG  reg)
Returns
true if reg is the mxcsr

◆ REG_is_partialreg()

BOOL LEVEL_BASE::REG_is_partialreg ( const REG  reg)

Return TRUE if reg is a partial register

◆ REG_is_pin()

BOOL LEVEL_BASE::REG_is_pin ( REG  reg)
Returns
true if reg is a pin register

◆ REG_is_pin_df_flag()

BOOL LEVEL_BASE::REG_is_pin_df_flag ( REG  reg)
Returns
TRUE iff is pin df flags

◆ REG_is_pin_flags()

BOOL LEVEL_BASE::REG_is_pin_flags ( REG  reg)
Returns
TRUE iff is pin flags

◆ REG_is_pin_gpr()

BOOL LEVEL_BASE::REG_is_pin_gpr ( REG  reg)
Returns
TRUE iff pin general purpose register

◆ REG_is_pin_inst()

BOOL LEVEL_BASE::REG_is_pin_inst ( REG  reg)
Returns
TRUE iff is app flags

◆ REG_is_pin_k_mask()

BOOL LEVEL_BASE::REG_is_pin_k_mask ( REG  reg)
Returns
true if reg is a pin virtual mask register

◆ REG_is_pin_status_flags()

BOOL LEVEL_BASE::REG_is_pin_status_flags ( REG  reg)
Returns
TRUE iff is pin status flag

◆ REG_is_pin_tmp()

BOOL LEVEL_BASE::REG_is_pin_tmp ( REG  reg)
Returns
TRUE iff pin tmp regs

◆ REG_is_pin_xmm()

BOOL LEVEL_BASE::REG_is_pin_xmm ( REG  reg)
Returns
true if reg is a pin virtual sse register

◆ REG_is_pin_xmm_ymm_zmm()

BOOL LEVEL_BASE::REG_is_pin_xmm_ymm_zmm ( REG  reg)
Returns
true if reg is a Pin xmm, ymm or zmm register

◆ REG_is_pin_ymm()

BOOL LEVEL_BASE::REG_is_pin_ymm ( REG  reg)
Returns
true if reg is a pin virtual ymm register

◆ REG_is_pin_zmm()

BOOL LEVEL_BASE::REG_is_pin_zmm ( REG  reg)
Returns
true if reg is a pin virtual zmm register

◆ REG_is_representative_reg()

BOOL LEVEL_BASE::REG_is_representative_reg ( REG  reg)
Returns
TRUE iff is representative register for internal purposes

◆ REG_is_seg_base()

BOOL LEVEL_BASE::REG_is_seg_base ( REG  reg)
Returns
true if reg is a segment base address virtual register (REG_SEG_GS_BASE/REG_SEG_FS_BASE)

◆ REG_is_st()

BOOL LEVEL_BASE::REG_is_st ( REG  reg)
Returns
true if reg is a x87 FPU stack register

◆ REG_is_stackptr_type()

BOOL LEVEL_BASE::REG_is_stackptr_type ( REG  reg)
Returns
TRUE both app and pin stack ptrs

◆ REG_is_status_flags()

BOOL LEVEL_BASE::REG_is_status_flags ( REG  reg)
Returns
TRUE iff is is app status flags

◆ REG_is_status_flags_type()

BOOL LEVEL_BASE::REG_is_status_flags_type ( REG  reg)
Returns
TRUE iff is REG_STATUS_FLAGS or PIN_REG_STATUS_FLAGS

◆ REG_is_subclass_none()

BOOL LEVEL_BASE::REG_is_subclass_none ( REG  reg)
Returns
TRUE iff subclass of reg is none

◆ REG_is_Upper8()

BOOL LEVEL_BASE::REG_is_Upper8 ( const REG  reg)

Return TRUE if reg is a upper 8-bit register

◆ REG_is_xmm()

BOOL LEVEL_BASE::REG_is_xmm ( REG  reg)
Returns
true if reg is an sse register

◆ REG_is_xmm_ymm_zmm()

BOOL LEVEL_BASE::REG_is_xmm_ymm_zmm ( REG  reg)
Returns
true if reg is an xmm,ymm, or zmm register

◆ REG_is_ymm()

BOOL LEVEL_BASE::REG_is_ymm ( REG  reg)
Returns
true if reg is a ymm register

◆ REG_is_zmm()

BOOL LEVEL_BASE::REG_is_zmm ( REG  reg)
Returns
true if reg is a zmm register

◆ REG_LastSupportedXmm()

REG LEVEL_BASE::REG_LastSupportedXmm ( )
Returns
the highest xmm register supported on the current CPU

◆ REG_LastSupportedYmm()

REG LEVEL_BASE::REG_LastSupportedYmm ( )
Returns
the highest ymm register supported on the current CPU

◆ REG_LastSupportedZmm()

REG LEVEL_BASE::REG_LastSupportedZmm ( )
Returns
the highest zmm register supported on the current CPU

◆ REG_regDefTable()

ADDRINT LEVEL_BASE::REG_regDefTable ( )
Returns
TRUE iff is app flags

◆ REG_regSubClassBitMapTable()

ADDRINT LEVEL_BASE::REG_regSubClassBitMapTable ( )
Returns
TRUE iff is app flags

◆ REG_Size()

UINT32 LEVEL_BASE::REG_Size ( REG  reg)

return the register size in bytes

◆ REG_valid_for_iarg_reg_value()

BOOL LEVEL_BASE::REG_valid_for_iarg_reg_value ( REG  reg)
Returns
true if reg value of reg can be requested by IARG_REG_VALUE

◆ REG_Width()

REGWIDTH LEVEL_BASE::REG_Width ( REG  reg)

return the register width for all regs.

◆ REGSET_AddAll()

VOID LEVEL_CORE::REGSET_AddAll ( REGSET regset)

Insert all registers into the specified regset

◆ REGSET_Clear()

VOID LEVEL_CORE::REGSET_Clear ( REGSET regset)

Remove all registers from the specified regset

◆ REGSET_Contains()

BOOL LEVEL_CORE::REGSET_Contains ( const REGSET regset,
REG  reg 
)
Returns
TRUE if the specified reg is contained in the specified regset

◆ REGSET_Insert()

VOID LEVEL_CORE::REGSET_Insert ( REGSET regset,
REG  reg 
)

Insert the specified reg into the specified regset

◆ REGSET_PopCount()

UINT32 LEVEL_CORE::REGSET_PopCount ( const REGSET regset)
Returns
the number of registers in the specified regset

◆ REGSET_PopCountIsZero()

BOOL LEVEL_CORE::REGSET_PopCountIsZero ( const REGSET regset)
Returns
TRUE if the number of registers in the specified regset is zero

◆ REGSET_PopNext()

REG LEVEL_CORE::REGSET_PopNext ( REGSET regset)

Pop the next register from the specified regset

Returns
the popped register

◆ REGSET_Remove()

VOID LEVEL_CORE::REGSET_Remove ( REGSET regset,
REG  reg 
)

Remove the specified reg from the specified regset

◆ REGSET_StringShort()

std::string LEVEL_CORE::REGSET_StringShort ( const REGSET regset)
Returns
a string with the names of all registers is the specified regset

Variable Documentation

◆ _regDefTable

const REGDEF_ENTRY LEVEL_BASE::_regDefTable[]

The main register information table

◆ _regWidthToBitWidth

INT32 LEVEL_BASE::_regWidthToBitWidth[]
Initial value:
=
{
8,
16,
32,
64,
80,
128,
256,
512,
REG_X87_SIZE,
0
}

◆ REG_LastInRegset

GLOBALCONST REG LEVEL_CORE::REG_LastInRegset = REG(REG_LAST-1)

REG represented by the last bit in the regset vector. Most of the code assumes that REG_LAST is not an actual register, so we should not include it in the set. We use REG_LAST-1 for the last registers.

◆ REGCBIT_ALL_REGS

GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_ALL_REGS = REGCBIT_APP_ALL | REGCBIT_PIN_ALL

Mask of REG_CLASS_BITS values for all valid registers.xx

◆ REGCBIT_APP_ALL

GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_APP_ALL
Initial value:
=
_REGCBIT(REG_CLASS_PSEUDO) |
(_REGCBIT(REG_CLASS_GR) )|
(_REGCBIT(REG_CLASS_GRU8) )|
(_REGCBIT(REG_CLASS_GRL8) )|
(_REGCBIT(REG_CLASS_GRH16) )|
(_REGCBIT(REG_CLASS_GRH32) )|
(_REGCBIT(REG_CLASS_SEG) )|
(_REGCBIT(REG_CLASS_MM) )|
(_REGCBIT(REG_CLASS_XMM) )|
(_REGCBIT(REG_CLASS_YMM) )|
(_REGCBIT(REG_CLASS_ZMM) )|
(_REGCBIT(REG_CLASS_K) )|
(_REGCBIT(REG_CLASS_FPST) )|
(_REGCBIT(REG_CLASS_ST) )|
(_REGCBIT(REG_CLASS_CR) )|
(_REGCBIT(REG_CLASS_DR) )|
(_REGCBIT(REG_CLASS_TR) )|
(_REGCBIT(REG_CLASS_FLAGS) )|
(_REGCBIT(REG_CLASS_FLAGS16) )|
(_REGCBIT(REG_CLASS_FLAGS32) )|
(_REGCBIT(REG_CLASS_STATUS_FLAGS) )|
(_REGCBIT(REG_CLASS_DFLAG) )|
(_REGCBIT(REG_CLASS_X87) )|
(_REGCBIT(REG_CLASS_MXCSR) )|
(_REGCBIT(REG_CLASS_MXCSRMASK) )|
(_REGCBIT(REG_CLASS_IP) )|
(_REGCBIT(REG_CLASS_IP16) )|
(_REGCBIT(REG_CLASS_IP32) )|
(_REGCBIT(REG_CLASS_ARCH))

Mask of REG_CLASS_BITS values for all application registers.

◆ REGCBIT_APP_FLAGS

GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_APP_FLAGS
Initial value:
=
(_REGCBIT(REG_CLASS_FLAGS) )|
(_REGCBIT(REG_CLASS_STATUS_FLAGS) )|
(_REGCBIT(REG_CLASS_DFLAG))

Mask of REG_CLASS_BITS values for all application flag registers.

◆ REGCBIT_PARTIAL

GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_PARTIAL
Initial value:
=
(_REGCBIT(REG_CLASS_GRU8) )|
(_REGCBIT(REG_CLASS_GRL8) )|
(_REGCBIT(REG_CLASS_GRH16) )|
(_REGCBIT(REG_CLASS_GRH32) )|
(_REGCBIT(REG_CLASS_FLAGS16) )|
(_REGCBIT(REG_CLASS_FLAGS32) )|
(_REGCBIT(REG_CLASS_IP16) )|
(_REGCBIT(REG_CLASS_IP32) )|
(_REGCBIT(REG_CLASS_PIN_GRU8) )|
(_REGCBIT(REG_CLASS_PIN_GRL8) )|
(_REGCBIT(REG_CLASS_PIN_GRH16) )|
(_REGCBIT(REG_CLASS_PIN_GRH32))

Mask of REG_CLASS_BITS values for partial registers (excluding XMM, even if AVX is present).

◆ REGCBIT_PIN_ALL

GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_PIN_ALL
Initial value:
=
(_REGCBIT(REG_CLASS_PIN_GR) )|
(_REGCBIT(REG_CLASS_PIN_GRU8) )|
(_REGCBIT(REG_CLASS_PIN_GRL8) )|
(_REGCBIT(REG_CLASS_PIN_GRH16) )|
(_REGCBIT(REG_CLASS_PIN_GRH32) )|
(_REGCBIT(REG_CLASS_PIN_XMM) )|
(_REGCBIT(REG_CLASS_PIN_YMM) )|
(_REGCBIT(REG_CLASS_PIN_ZMM) )|
(_REGCBIT(REG_CLASS_PIN_K) )|
(_REGCBIT(REG_CLASS_PIN_X87) )|
(_REGCBIT(REG_CLASS_PIN_MXCSR) )|
(_REGCBIT(REG_CLASS_PIN_FLAGS) )|
(_REGCBIT(REG_CLASS_PIN_STATUS_FLAGS) )|
(_REGCBIT(REG_CLASS_PIN_DFLAG))

Mask of REG_CLASS_BITS values for all Pin registers.

◆ REGCBIT_PIN_FLAGS

GLOBALCONST REG_CLASS_BITS LEVEL_BASE::REGCBIT_PIN_FLAGS
Initial value:
=
(_REGCBIT(REG_CLASS_PIN_FLAGS) )|
(_REGCBIT(REG_CLASS_PIN_STATUS_FLAGS) )|
(_REGCBIT(REG_CLASS_PIN_DFLAG))

Mask of REG_CLASS_BITS values for all Pin flag registers.

◆ REGSBIT_PIN_INST_ALL

GLOBALCONST REG_SUBCLASS_BITS LEVEL_BASE::REGSBIT_PIN_INST_ALL
Initial value:
=
(_REGCBIT(REG_SUBCLASS_PIN_INST_GR) )|
(_REGCBIT(REG_SUBCLASS_PIN_INST_GR_H32) )|
(_REGCBIT(REG_SUBCLASS_PIN_INST_BUF) )|
(_REGCBIT(REG_SUBCLASS_PIN_INST_COND))

Combination of REG_SUBCLASS_BITS flags of all instrumentation registers.

◆ REGSBIT_PIN_SCRATCH_ALL

GLOBALCONST REG_SUBCLASS_BITS LEVEL_BASE::REGSBIT_PIN_SCRATCH_ALL
Initial value:
=
(_REGCBIT(REG_SUBCLASS_PIN_INST_GR) )|
(_REGCBIT(REG_SUBCLASS_PIN_INST_BUF))

Combination of REG_SUBCLASS_BITS flags of all instrumentation scratch registers.

◆ REGSBIT_STACKPTR_ALL

GLOBALCONST REG_SUBCLASS_BITS LEVEL_BASE::REGSBIT_STACKPTR_ALL
Initial value:
=
(_REGCBIT(REG_SUBCLASS_FULL_STACKPTR) )|
(_REGCBIT(REG_SUBCLASS_PIN_FULL_STACKPTR))

Combination of REG_SUBCLASS_BITS flags of stack registers (both app and pin).