53 void createReplacement(
Funcdata *fd);
54 void initialize(uint4 tp,
Varnode *v,int4 bits,int4 bytes,uintb value);
69 indirect_creation = 4,
70 indirect_creation_possible_out = 8
78 vector<TransformVar *> input;
80 void createReplacement(
Funcdata *fd);
115 void addLaneSize(int4 size) { sizeBitMask |= ((uint4)1 << size); }
116 bool allowedLane(int4 size)
const {
return (((sizeBitMask >> size) & 1) != 0); }
128 vector<int4> laneSize;
129 vector<int4> lanePosition;
134 bool subset(int4 lsbOffset,int4 size);
137 int4
getSize(int4 i)
const {
return laneSize[i]; }
139 int4 getBoundary(int4 bytePos)
const;
140 bool restriction(int4 numLanes,int4 skipLanes,int4 bytePos,int4 size,int4 &resNumLanes,int4 &resSkipLanes)
const;
141 bool extension(int4 numLanes,int4 skipLanes,int4 bytePos,int4 size,int4 &resNumLanes,int4 &resSkipLanes)
const;
152 map<int4,TransformVar *> pieceMap;
153 list<TransformVar> newVarnodes;
154 list<TransformOp> newOps;
157 void createOps(
void);
158 void createVarnodes(vector<TransformVar *> &inputList);
159 void removeOld(
void);
160 void transformInputVarnodes(vector<TransformVar *> &inputList);
161 void placeInputs(
void);
165 virtual bool preserveAddress(
Varnode *vn,int4 bitSize,int4 lsbOffset)
const;
167 void clearVarnodeMarks(
void);
170 TransformVar *newConstant(int4 size,int4 lsbOffset,uintb val);
185 static bool preexistingGuard(int4 slot,
TransformVar *rvn);
197 inline void TransformVar::initialize(uint4 tp,
Varnode *v,int4 bits,int4 bytes,uintb value)
216 rop->input[slot] = rvn;
243 if (slot == 0)
return true;
LanedRegister(void)
Constructor for use with restoreXml.
Definition: transform.hh:110
LanedIterator & operator=(const LanedIterator &op2)
Assignment.
Definition: transform.hh:101
const_iterator end(void) const
Ending iterator over possible lane sizes.
Definition: transform.hh:118
bool allowedLane(int4 size) const
Is size among the allowed lane sizes.
Definition: transform.hh:116
OpCode
The op-code defining a specific p-code operation (PcodeOp)
Definition: opcodes.hh:35
A manager for different address spaces.
Definition: translate.hh:218
bool operator==(const LanedIterator &op2) const
Equal operator.
Definition: transform.hh:102
Container for data structures associated with a single function.
Definition: funcdata.hh:45
void addLaneSize(int4 size)
Add a new size to the allowed list.
Definition: transform.hh:115
bool operator!=(const LanedIterator &op2) const
Not-equal operator.
Definition: transform.hh:103
int4 getPosition(int4 i) const
Get the significance offset of the i-th lane.
Definition: transform.hh:138
Lowest level operation of the p-code language.
Definition: op.hh:58
LanedRegister(int4 sz, uint4 mask)
Constructor.
Definition: transform.hh:111
const_iterator begin(void) const
Starting iterator over possible lane sizes.
Definition: transform.hh:117
A low-level variable or contiguous set of bytes described by an Address and a size.
Definition: varnode.hh:65
An XML element. A node in the DOM tree.
Definition: xml.hh:150
LanedIterator(const LanedRegister *lanedR)
Constructor.
Definition: transform.hh:97
int4 getNumLanes(void) const
Get the total number of lanes.
Definition: transform.hh:135
int4 getSize(int4 i) const
Get the size of the i-th lane.
Definition: transform.hh:137
int4 getWholeSize(void) const
Get the size in bytes of the whole laned register.
Definition: transform.hh:113
int4 getWholeSize(void) const
Get the size of the region being split.
Definition: transform.hh:136
Class for iterating over possible lane sizes.
Definition: transform.hh:92
The Varnode and VarnodeBank classes.
uint4 getSizeBitMask(void) const
Get the bit mask of possible lane sizes.
Definition: transform.hh:114
LanedIterator(void)
Constructor for ending iterator.
Definition: transform.hh:98
Description of logical lanes within a big Varnode.
Definition: transform.hh:126
int4 operator*(void) const
Dereference operator.
Definition: transform.hh:100
LanedIterator & operator++(void)
Preincrement operator.
Definition: transform.hh:99
Describes a (register) storage location and the ways it might be split into lanes.
Definition: transform.hh:88
LanedIterator const_iterator
Iterator over possible lane sizes for this register.
Definition: transform.hh:105