Pin
Defines | Typedefs | Enumerations | Functions | Variables
REG (specific to the IA-32 and Intel(R) 64 architectures)
REG: Register Object

Defines

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

Typedefs

typedef UINT64 LEVEL_BASE::REG_CLASS_BITS
typedef class REGISTER_SET
< REG_FirstInRegset,
REG_LastInRegset > 
LEVEL_CORE::REGSET

Enumerations

enum  LEVEL_BASE::REG {
  REG_INVALID_ = 0,
  REG_GR_BASE = REG_RBASE,
  REG_EDI = REG_GR_BASE,
  REG_GDI = REG_EDI,
  REG_ESI,
  REG_GSI = REG_ESI,
  REG_EBP,
  REG_GBP = REG_EBP,
  REG_ESP,
  REG_STACK_PTR = REG_ESP,
  REG_EBX,
  REG_GBX = REG_EBX,
  REG_EDX,
  REG_GDX = REG_EDX,
  REG_ECX,
  REG_GCX = REG_ECX,
  REG_EAX,
  REG_GAX = REG_EAX,
  REG_GR_LAST = REG_EAX,
  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_EFLAGS,
  REG_GFLAGS = REG_EFLAGS,
  REG_EIP,
  REG_INST_PTR = REG_EIP,
  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_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_XMM_SSE_LAST = REG_XMM7,
  REG_XMM_AVX_LAST = REG_XMM_SSE_LAST,
  REG_XMM_AVX512_LAST = REG_XMM_AVX_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_YMM_AVX_LAST = REG_YMM7,
  REG_YMM_AVX512_LAST = REG_YMM_AVX_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_ZMM_AVX512_SPLIT_LAST = REG_ZMM7,
  REG_ZMM_AVX512_LAST = REG_ZMM_AVX512_SPLIT_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_EAX,
  REG_ORIG_GAX = REG_ORIG_EAX,
  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,
  REG_TOOL_LAST = REG_BUF_LAST,
  REG_LAST
}
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
}

Functions

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_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)
string LEVEL_CORE::REGSET_StringShort (const REGSET &regset)
string LEVEL_CORE::REGSET_StringList (const REGSET &regset)

Variables

const REGDEF_ENTRY LEVEL_BASE::_regDefTable []
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

Define Documentation

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

Bit flag that represents a REG_SUBCLASS value.


Typedef Documentation

Bit flag that represents a REG_CLASS value.

typedef class REGISTER_SET< REG_FirstInRegset, REG_LastInRegset > LEVEL_CORE::REGSET

A regset type that contains all registers


Enumeration Type Documentation

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_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.

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.

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

Additional classification of register.

x

register widths


Function Documentation

REG LEVEL_BASE::REG_AppFlags ( )
Returns:
the application flags register
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 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 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 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 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 LEVEL_BASE::REG_IdentityCopy ( const REG  reg)
Returns:
the application register that is the counterpart of this Pin reg
BOOL LEVEL_BASE::REG_is_Any8 ( const REG  reg)

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

BOOL LEVEL_BASE::REG_is_any_app_flags ( REG  reg)
Returns:
TRUE iff is Any of the app flag regs
BOOL LEVEL_BASE::REG_is_any_flags_type ( REG  reg)
Returns:
TRUE iff is Any of the flag regs app or pin
BOOL LEVEL_BASE::REG_is_any_mask ( REG  reg)
Returns:
true if reg is a k-mask register or its Pin variant
BOOL LEVEL_BASE::REG_is_any_mxcsr ( REG  reg)
Returns:
true if reg is mxcsr or its Pin variant
BOOL LEVEL_BASE::REG_is_any_pin_flags ( REG  reg)
Returns:
TRUE iff is Any of the pinflag regs
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.
BOOL LEVEL_BASE::REG_is_app_df_flag_type ( REG  reg)
Returns:
TRUE iff is REG_DF_FLAG or PIN_REG_DF_FLAG
BOOL LEVEL_BASE::REG_is_app_status_flags_type ( REG  reg)
Returns:
TRUE iff REG_STATUS_FLAGS
BOOL LEVEL_BASE::REG_is_application ( REG  reg)
Returns:
true if reg is an application register
BOOL LEVEL_BASE::REG_is_avx512_hi16_xmm ( const REG  xmm)
Returns:
true if the given xmm is one of xmm16-xmm31
BOOL LEVEL_BASE::REG_is_avx512_hi16_ymm ( const REG  ymm)
Returns:
true if the given ymm is one of ymm16-ymm31
BOOL LEVEL_BASE::REG_is_buffer ( REG  reg)
Returns:
TRUE iff is app flags
BOOL LEVEL_BASE::REG_is_df_flag ( REG  reg)
Returns:
TRUE iff is app df flag
BOOL LEVEL_BASE::REG_is_df_flag_type ( REG  reg)
Returns:
TRUE iff is REG_DF_FLAG or PIN_REG_DF_FLAG
BOOL LEVEL_BASE::REG_is_flags ( REG  reg)
Returns:
TRUE iff is app flags
BOOL LEVEL_BASE::REG_is_flags_any_size_type ( REG  reg)
Returns:
TRUE iff both app and pin (and redundant for both) flags regs
BOOL LEVEL_BASE::REG_is_flags_type ( REG  reg)
Returns:
TRUE iff both app and pin (and redundant for both) flags regs
BOOL LEVEL_BASE::REG_is_fr_for_get_context ( REG  reg)
Returns:
true if reg is a floating register appropriate for PIN_GetContextReg
BOOL LEVEL_BASE::REG_is_gr_type ( REG  reg)
Returns:
true if it is a gr reg
BOOL LEVEL_BASE::REG_is_Half16 ( const REG  reg)

Return TRUE if reg is a lower 16-bit register

BOOL LEVEL_BASE::REG_is_Half32 ( const REG  reg)

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

BOOL LEVEL_BASE::REG_is_inst_scratch ( REG  reg)
Returns:
TRUE iff is app flags
BOOL LEVEL_BASE::REG_is_k_mask ( REG  reg)
Returns:
true if reg is a k-mask register
BOOL LEVEL_BASE::REG_is_Lower8 ( const REG  reg)

Return TRUE if reg is a lower 8-bit register

BOOL LEVEL_BASE::REG_is_machine ( REG  reg)
Returns:
true if reg is a machine register
BOOL LEVEL_BASE::REG_is_mm ( REG  reg)
Returns:
true if reg is an mmx register
BOOL LEVEL_BASE::REG_is_mxcsr ( REG  reg)
Returns:
true if reg is the mxcsr
BOOL LEVEL_BASE::REG_is_partialreg ( const REG  reg)

Return TRUE if reg is a partial register

BOOL LEVEL_BASE::REG_is_pin ( REG  reg)
Returns:
true if reg is a pin register
BOOL LEVEL_BASE::REG_is_pin_df_flag ( REG  reg)
Returns:
TRUE iff is pin df flags
BOOL LEVEL_BASE::REG_is_pin_flags ( REG  reg)
Returns:
TRUE iff is pin flags
BOOL LEVEL_BASE::REG_is_pin_gpr ( REG  reg)
Returns:
TRUE iff pin general purpose register
BOOL LEVEL_BASE::REG_is_pin_inst ( REG  reg)
Returns:
TRUE iff is app flags
BOOL LEVEL_BASE::REG_is_pin_k_mask ( REG  reg)
Returns:
true if reg is a pin virtual mask register
BOOL LEVEL_BASE::REG_is_pin_status_flags ( REG  reg)
Returns:
TRUE iff is pin status flag
BOOL LEVEL_BASE::REG_is_pin_tmp ( REG  reg)
Returns:
TRUE iff pin tmp regs
BOOL LEVEL_BASE::REG_is_pin_xmm ( REG  reg)
Returns:
true if reg is a pin virtual sse register
BOOL LEVEL_BASE::REG_is_pin_xmm_ymm_zmm ( REG  reg)
Returns:
true if reg is a Pin xmm, ymm or zmm register
BOOL LEVEL_BASE::REG_is_pin_ymm ( REG  reg)
Returns:
true if reg is a pin virtual ymm register
BOOL LEVEL_BASE::REG_is_pin_zmm ( REG  reg)
Returns:
true if reg is a pin virtual zmm register
BOOL LEVEL_BASE::REG_is_representative_reg ( REG  reg)
Returns:
TRUE iff is representative register for internal purposes
BOOL LEVEL_BASE::REG_is_seg_base ( REG  reg)
Returns:
true if reg is a seg base
BOOL LEVEL_BASE::REG_is_st ( REG  reg)
Returns:
true if reg is a x87 FPU stack register
BOOL LEVEL_BASE::REG_is_stackptr_type ( REG  reg)
Returns:
TRUE both app and pin stack ptrs
BOOL LEVEL_BASE::REG_is_status_flags ( REG  reg)
Returns:
TRUE iff is is app status flags
BOOL LEVEL_BASE::REG_is_status_flags_type ( REG  reg)
Returns:
TRUE iff is REG_STATUS_FLAGS or PIN_REG_STATUS_FLAGS
BOOL LEVEL_BASE::REG_is_subclass_none ( REG  reg)
Returns:
TRUE iff subclass of reg is none
BOOL LEVEL_BASE::REG_is_Upper8 ( const REG  reg)

Return TRUE if reg is a upper 8-bit register

BOOL LEVEL_BASE::REG_is_xmm ( REG  reg)
Returns:
true if reg is an sse register
BOOL LEVEL_BASE::REG_is_xmm_ymm_zmm ( REG  reg)
Returns:
true if reg is an xmm,ymm, or zmm register
BOOL LEVEL_BASE::REG_is_ymm ( REG  reg)
Returns:
true if reg is a ymm register
BOOL LEVEL_BASE::REG_is_zmm ( REG  reg)
Returns:
true if reg is a zmm register
REG LEVEL_BASE::REG_LastSupportedXmm ( )
Returns:
the highest xmm register supported on the current CPU
REG LEVEL_BASE::REG_LastSupportedYmm ( )
Returns:
the highest ymm register supported on the current CPU
REG LEVEL_BASE::REG_LastSupportedZmm ( )
Returns:
the highest zmm register supported on the current CPU
ADDRINT LEVEL_BASE::REG_regDefTable ( )
Returns:
TRUE iff is app flags
ADDRINT LEVEL_BASE::REG_regSubClassBitMapTable ( )
Returns:
TRUE iff is app flags
UINT32 LEVEL_BASE::REG_Size ( REG  reg)

return the register size in bytes

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
REGWIDTH LEVEL_BASE::REG_Width ( REG  reg)

return the register width for all regs.

VOID LEVEL_CORE::REGSET_AddAll ( REGSET &  regset)

Insert all registers into the specified regset

VOID LEVEL_CORE::REGSET_Clear ( REGSET &  regset)

Remove all registers from the specified regset

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

Insert the specified reg into the specified regset

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

Pop the next register from the specified regset

Returns:
the popped register
VOID LEVEL_CORE::REGSET_Remove ( REGSET &  regset,
REG  reg 
)

Remove the specified reg from the specified regset

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

Variable Documentation

const REGDEF_ENTRY LEVEL_BASE::_regDefTable[]

The main register information table

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.

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.

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).

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.

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.

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.

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).

 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator