Rizin
unix-like reverse engineering framework and cli tools
MCRegisterInfo.h File Reference
#include "capstone/platform.h"

Go to the source code of this file.

Classes

struct  MCRegisterClass
 
struct  MCRegisterDesc
 
struct  MCRegisterInfo
 

Typedefs

typedef uint16_t MCPhysReg
 
typedef const MCPhysRegiterator
 
typedef struct MCRegisterClass MCRegisterClass
 
typedef struct MCRegisterDesc MCRegisterDesc
 
typedef struct MCRegisterInfo MCRegisterInfo
 

Functions

void MCRegisterInfo_InitMCRegisterInfo (MCRegisterInfo *RI, const MCRegisterDesc *D, unsigned NR, unsigned RA, unsigned PC, const MCRegisterClass *C, unsigned NC, uint16_t(*RURoots)[2], unsigned NRU, const MCPhysReg *DL, const char *Strings, const uint16_t *SubIndices, unsigned NumIndices, const uint16_t *RET)
 
unsigned MCRegisterInfo_getMatchingSuperReg (const MCRegisterInfo *RI, unsigned Reg, unsigned SubIdx, const MCRegisterClass *RC)
 
unsigned MCRegisterInfo_getSubReg (const MCRegisterInfo *RI, unsigned Reg, unsigned Idx)
 
const MCRegisterClassMCRegisterInfo_getRegClass (const MCRegisterInfo *RI, unsigned i)
 
bool MCRegisterClass_contains (const MCRegisterClass *c, unsigned Reg)
 

Typedef Documentation

◆ iterator

Definition at line 27 of file MCRegisterInfo.h.

◆ MCPhysReg

An unsigned integer type large enough to represent all physical registers, but not necessarily virtual registers.

Definition at line 26 of file MCRegisterInfo.h.

◆ MCRegisterClass

◆ MCRegisterDesc

MCRegisterDesc - This record contains information about a particular register. The SubRegs field is a zero terminated array of registers that are sub-registers of the specific register, e.g. AL, AH are sub-registers of AX. The SuperRegs field is a zero terminated array of registers that are super-registers of the specific register, e.g. RAX, EAX, are super-registers of AX.

◆ MCRegisterInfo

MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc objects that represent all of the machine registers that the target has. As such, we simply have to track a pointer to this array so that we can turn register number into a register descriptor.

Note this class is designed to be a base class of TargetRegisterInfo, which is the interface used by codegen. However, specific targets should never specialize this class. MCRegisterInfo should only contain getters to access TableGen generated physical register data. It must not be extended with virtual methods.

Function Documentation

◆ MCRegisterClass_contains()

bool MCRegisterClass_contains ( const MCRegisterClass c,
unsigned  Reg 
)

Definition at line 134 of file MCRegisterInfo.c.

135 {
136  unsigned InByte = Reg % 8;
137  unsigned Byte = Reg / 8;
138 
139  if (Byte >= c->RegSetSize)
140  return false;
141 
142  return (c->RegSet[Byte] & (1 << InByte)) != 0;
143 }
#define c(i)
Definition: sha256.c:43
unsigned char Byte
Definition: zconf.h:391

References c.

Referenced by MCRegisterInfo_getMatchingSuperReg().

◆ MCRegisterInfo_getMatchingSuperReg()

unsigned MCRegisterInfo_getMatchingSuperReg ( const MCRegisterInfo RI,
unsigned  Reg,
unsigned  SubIdx,
const MCRegisterClass RC 
)

Definition at line 86 of file MCRegisterInfo.c.

87 {
89 
90  if (Reg >= RI->NumRegs) {
91  return 0;
92  }
93 
96 
99  if (MCRegisterClass_contains(RC, val) && Reg == MCRegisterInfo_getSubReg(RI, val, SubIdx))
100  return val;
101 
103  }
104 
105  return 0;
106 }
static uint16_t DiffListIterator_getVal(DiffListIterator *d)
static bool DiffListIterator_isValid(DiffListIterator *d)
static void DiffListIterator_init(DiffListIterator *d, MCPhysReg InitVal, const MCPhysReg *DiffList)
bool MCRegisterClass_contains(const MCRegisterClass *c, unsigned Reg)
static bool DiffListIterator_next(DiffListIterator *d)
unsigned MCRegisterInfo_getSubReg(const MCRegisterInfo *RI, unsigned Reg, unsigned Idx)
uint16_t MCPhysReg
ut16 val
Definition: armass64_const.h:6
unsigned short uint16_t
Definition: sftypes.h:30
uint32_t SuperRegs
const MCRegisterDesc * Desc
const MCPhysReg * DiffLists
unsigned NumRegs

References MCRegisterInfo::Desc, DiffListIterator_getVal(), DiffListIterator_init(), DiffListIterator_isValid(), DiffListIterator_next(), MCRegisterInfo::DiffLists, MCRegisterClass_contains(), MCRegisterInfo_getSubReg(), MCRegisterInfo::NumRegs, MCRegisterDesc::SuperRegs, and val.

◆ MCRegisterInfo_getRegClass()

const MCRegisterClass* MCRegisterInfo_getRegClass ( const MCRegisterInfo RI,
unsigned  i 
)

Definition at line 126 of file MCRegisterInfo.c.

127 {
128  //assert(i < getNumRegClasses() && "Register Class ID out of range");
129  if (i >= RI->NumClasses)
130  return 0;
131  return &(RI->Classes[i]);
132 }
lzma_index ** i
Definition: index.h:629
unsigned NumClasses
const MCRegisterClass * Classes

References MCRegisterInfo::Classes, i, and MCRegisterInfo::NumClasses.

◆ MCRegisterInfo_getSubReg()

unsigned MCRegisterInfo_getSubReg ( const MCRegisterInfo RI,
unsigned  Reg,
unsigned  Idx 
)

◆ MCRegisterInfo_InitMCRegisterInfo()

void MCRegisterInfo_InitMCRegisterInfo ( MCRegisterInfo RI,
const MCRegisterDesc D,
unsigned  NR,
unsigned  RA,
unsigned  PC,
const MCRegisterClass C,
unsigned  NC,
uint16_t(*)  RURoots[2],
unsigned  NRU,
const MCPhysReg DL,
const char *  Strings,
const uint16_t SubIndices,
unsigned  NumIndices,
const uint16_t RET 
)

Definition at line 28 of file MCRegisterInfo.c.

37 {
38  RI->Desc = D;
39  RI->NumRegs = NR;
40  RI->RAReg = RA;
41  RI->PCReg = PC;
42  RI->Classes = C;
43  RI->DiffLists = DL;
44  RI->RegStrings = Strings;
45  RI->NumClasses = NC;
46  RI->RegUnitRoots = RURoots;
47  RI->NumRegUnits = NRU;
48  RI->SubRegIndices = SubIndices;
49  RI->NumSubRegIndices = NumIndices;
50  RI->RegEncodingTable = RET;
51 }
#define RET
#define C(x)
Definition: arc.h:167
#define PC(addr, is_thumb)
Definition: arm_il32.c:108
#define D
Definition: block.c:38
#define NC
Definition: utils.h:42
const char * RegStrings
unsigned NumRegUnits
uint16_t(* RegUnitRoots)[2]
unsigned NumSubRegIndices
const uint16_t * RegEncodingTable

References C, MCRegisterInfo::Classes, D, MCRegisterInfo::Desc, MCRegisterInfo::DiffLists, NC, MCRegisterInfo::NumClasses, MCRegisterInfo::NumRegs, MCRegisterInfo::NumRegUnits, MCRegisterInfo::NumSubRegIndices, PC, MCRegisterInfo::PCReg, MCRegisterInfo::RAReg, MCRegisterInfo::RegEncodingTable, MCRegisterInfo::RegStrings, MCRegisterInfo::RegUnitRoots, RET, and MCRegisterInfo::SubRegIndices.