REG (specific to the IA-32 and Intel(R) 64 architectures)
[REG: Register Object]


Typedefs

typedef REGISTER_SET< REG_FirstInRegset,
REG_LastInRegset
LEVEL_CORE::REGSET

Enumerations

enum  LEVEL_BASE::REG {
  REG_INVALID_ = 0,
  REG_GR_BASE = REG_RBASE,
  REG_GR_BASE = REG_GBASE,
  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_STACK_PTR = REG_GBASE + 12,
  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_GR_LAST = REG_GROT_LAST,
  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_INST_PTR,
  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_EMM_BASE,
  REG_EMM0 = REG_EMM_BASE,
  REG_EMM1,
  REG_EMM2,
  REG_EMM3,
  REG_EMM4,
  REG_EMM5,
  REG_EMM6,
  REG_EMM7,
  REG_EMM_LAST = REG_EMM7,
  REG_MXT,
  REG_X87,
  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_LAST = REG_XMM7,
  REG_YMM_BASE,
  REG_YMM0 = REG_YMM_BASE,
  REG_YMM1,
  REG_YMM2,
  REG_YMM3,
  REG_YMM4,
  REG_YMM5,
  REG_YMM6,
  REG_YMM7,
  REG_YMM_LAST = REG_YMM7,
  REG_MXCSR,
  REG_MXCSRMASK,
  REG_ORIG_EAX,
  REG_ORIG_GAX = REG_ORIG_EAX,
  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,
  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,
  LEVEL_BASE::REG_SEG_GS_BASE,
  LEVEL_BASE::REG_SEG_FS_BASE,
  REG_INST_BASE,
  REG_INST_BASE,
  LEVEL_BASE::REG_INST_SCRATCH_BASE = REG_INST_BASE,
  REG_INST_SCRATCH_BASE = REG_INST_BASE,
  LEVEL_BASE::REG_INST_G0 = REG_INST_SCRATCH_BASE,
  REG_INST_G0 = REG_INST_SCRATCH_BASE,
  LEVEL_BASE::REG_INST_G1,
  REG_INST_G1,
  LEVEL_BASE::REG_INST_G2,
  REG_INST_G2,
  LEVEL_BASE::REG_INST_G3,
  REG_INST_G3,
  LEVEL_BASE::REG_INST_G4,
  REG_INST_G4,
  LEVEL_BASE::REG_INST_G5,
  REG_INST_G5,
  LEVEL_BASE::REG_INST_G6,
  REG_INST_G6,
  LEVEL_BASE::REG_INST_G7,
  REG_INST_G7,
  LEVEL_BASE::REG_INST_G8,
  REG_INST_G8,
  LEVEL_BASE::REG_INST_G9,
  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,
  REG_INST_TOOL_FIRST = REG_INST_G0,
  REG_INST_TOOL_FIRST = REG_INST_G0,
  REG_INST_TOOL_LAST = REG_INST_G19,
  REG_INST_TOOL_LAST = REG_INST_G9,
  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_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_INST_SCRATCH_LAST = REG_BUF_ENDLAST,
  REG_INST_SCRATCH_LAST = REG_INST_G9,
  REG_LAST,
  REG_LAST
}
enum  LEVEL_BASE::REGNAME {
  REGNAME_LAST,
  REGNAME_LAST
}

Functions

BOOL LEVEL_BASE::REG_is_fr_for_get_context (REG reg)
BOOL LEVEL_BASE::REG_is_fr_or_x87 (REG reg)
BOOL LEVEL_BASE::REG_is_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)
REG LEVEL_BASE::REG_corresponding_ymm_reg (REG reg)
BOOL LEVEL_BASE::REG_is_Half16 (const 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_partialreg (const REG reg)
VOID LEVEL_BASE::SanityCheckPartialRegisters ()
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

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

Typedef Documentation

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

A regset type that contains all registers


Enumeration Type Documentation

enum LEVEL_BASE::REG
 

The x86 register enum (for both IA-32 and Intel(R) 64 architectures)

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.

enum LEVEL_BASE::REGNAME
 

x


Function Documentation

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

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_fr_or_x87 REG  reg  ) 
 

Returns:
true if reg is a floating register

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

BOOL LEVEL_BASE::REG_is_Lower8 const REG  reg  ) 
 

Return TRUE if reg is a lower 8-bit 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 a floating register

BOOL LEVEL_BASE::REG_is_partialreg const REG  reg  ) 
 

Return TRUE if reg is a partial register

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_ymm REG  reg  ) 
 

Returns:
true if reg is a ymm register

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

VOID LEVEL_BASE::SanityCheckPartialRegisters  ) 
 

Ensure that we don't re-create Mantis 1903, where a register was short but not partial. This function checks that the partial register information is internally consistent.

It is called when we have the -slow_asserts flag.


Variable Documentation

GLOBALCONST REG LEVEL_CORE::REG_FirstInRegset = REG_RBASE
 

REG represented by the first bit in the regset vector.

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.


Generated on Tue Nov 22 12:28:40 2011 for Pin by  doxygen 1.4.6