java.lang.Object | |
↳ | com.pnfsoftware.jeb.core.units.code.asm.type.RoutineIOSlot |
Representation of a storage (input/output) entry used by routines.
Currently, only 3 types of elements are supported:
- stack entries (any slot count)
- platform register (single slot)
- pairs of platform registers (double slot)
Those objects are immutable.
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
enum | RoutineIOSlot.TransformationRule | ||||||||||
enum | RoutineIOSlot.Type |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | collectRegisters(Set<Long> sink) | ||||||||||
static RoutineIOSlot |
createComposite(RoutineIOSlot... items)
Create a composite storage entry.
| ||||||||||
static RoutineIOSlot |
createComposite(Collection<RoutineIOSlot> items)
Create a composite storage entry.
| ||||||||||
static RoutineIOSlot |
createRegister(long regId)
Create a single-register storage entry.
| ||||||||||
static RoutineIOSlot |
createRegisterPair(long regId1, long regId2)
Create a double-register storage entry.
| ||||||||||
static RoutineIOSlot |
createRegisterPairEndianDep(long regId1, long regId2)
Create a double-register storage entry.
| ||||||||||
static RoutineIOSlot | createRegisterQuad(long regId1, long regId2, long regId3, long regId4) | ||||||||||
static RoutineIOSlot | createRegisterQuadEndianDep(long regId1, long regId2, long regId3, long regId4) | ||||||||||
static RoutineIOSlot |
createStackEntry(long slotIndex, int slotCount)
Create a stack storage entry.
| ||||||||||
static RoutineIOSlot |
createStackSlot(long slotIndex)
Create a single-slot stack storage entry.
| ||||||||||
boolean | equals(Object obj) | ||||||||||
String | formatLong(IRegisterBank rbl) | ||||||||||
String | formatParseable(IRegisterBank rbl) | ||||||||||
RoutineIOSlot | getCompositeItem(int index) | ||||||||||
List<RoutineIOSlot> | getCompositeItems() | ||||||||||
Collection<Long> | getRegisters() | ||||||||||
int | getSlotCount() | ||||||||||
RoutineIOSlot.Type | getType() | ||||||||||
long |
getValue()
Get the slot index or native register id, depending on the type of this object.
| ||||||||||
long |
getValue(Endianness endian)
Get the slot index or native register id, depending on the type of this object.
| ||||||||||
long |
getValue2()
For register pairs, retrieve the native register id of the second register of the pair.
| ||||||||||
long |
getValue2(Endianness endian)
For register pairs, retrieve the native register id of the second register of the pair.
| ||||||||||
long |
getValue3()
For register quads, retrieve the native register id of the third register.
| ||||||||||
long |
getValue4()
For register quads, retrieve the native register id of the fourth register.
| ||||||||||
int | getValueAsStackIndex() | ||||||||||
int | hashCode() | ||||||||||
boolean | isRegisterBased() | ||||||||||
boolean | isStackBased() | ||||||||||
int |
nextSlotIndex(int index, int requestedSlotCount)
Calculate the next slot index given the current slot index.
| ||||||||||
RoutineIOSlot | nextStackEntry(int slotcount, int slotalign) | ||||||||||
RoutineIOSlot | nextStackEntry(int slotcount) | ||||||||||
String | toString() | ||||||||||
RoutineIOSlot |
withCount(int count)
Duplicate this STACK entry, and set a custom slot count.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
![]() |
Create a composite storage entry.
items | a 2+ items list of one or more #REGISTER entries, followed by an optional #STACK entry. |
---|
Create a composite storage entry.
items | a 2+ items list of one or more #REGISTER entries, followed by an optional #STACK entry. |
---|
Create a single-register storage entry.
regId | register id (refer to register banks) |
---|
Create a double-register storage entry.
regId1 | low register id (refer to register banks) |
---|---|
regId2 | high register id (refer to register banks) |
Create a double-register storage entry. Register order (which one stores the LSB, which one stores the MSB) depends on external parameters.
regId1 | first register id (refer to register banks) |
---|---|
regId2 | second register id (refer to register banks) |
Create a stack storage entry. Stack entries are relative to the stack pointer at the called routine entry-point.
Create a single-slot stack storage entry. Stack entries are relative to the stack pointer at the called routine entry-point.
Get the slot index or native register id, depending on the type of this object.
Get the slot index or native register id, depending on the type of this object. To be used
for REGISTER_PAIR
over getValue()
which may return the wrong slot
index.
For register pairs, retrieve the native register id of the second register of the pair.
For register pairs, retrieve the native register id of the second register of the pair.
For register quads, retrieve the native register id of the third register.
For register quads, retrieve the native register id of the fourth register.
Calculate the next slot index given the current slot index.
index | slot index provided when the request for storage was made |
---|---|
requestedSlotCount | the amount of slots that were requested to accommodate a value of some type |