public class SPARCSaveRegistersOp extends SPARCLIRInstruction implements StandardOp.SaveRegistersOp
SPARCLIRInstruction.SizeEstimate
LIRInstruction.Alive, LIRInstruction.Def, LIRInstruction.OperandFlag, LIRInstruction.OperandMode, LIRInstruction.State, LIRInstruction.Temp, LIRInstruction.Use
Modifier and Type | Field and Description |
---|---|
static Register |
RETURN_REGISTER_STORAGE |
protected Register[] |
savedRegisters
The registers (potentially) saved by this operation.
|
static SPARCLIRInstruction.SizeEstimate |
SIZE |
protected StackSlotValue[] |
slots
The slots to which the registers are saved.
|
protected boolean |
supportsRemove
Specifies if
remove(Set) should have an effect. |
static LIRInstructionClass<SPARCSaveRegistersOp> |
TYPE |
delayedControlTransfer
ADDRESS_FLAGS, ALLOWED_FLAGS
Constructor and Description |
---|
SPARCSaveRegistersOp(Register[] savedRegisters,
StackSlotValue[] savedRegisterLocations,
boolean supportsRemove) |
Modifier and Type | Method and Description |
---|---|
void |
emitCode(CompilationResultBuilder crb,
SPARCMacroAssembler masm) |
RegisterSaveLayout |
getMap(FrameMap frameMap) |
StackSlotValue[] |
getSlots() |
private static int |
indexForStackSlot(FrameMap frameMap,
StackSlot slot)
Computes the index of a stack slot relative to slot 0.
|
(package private) static int |
prune(Set<Register> toRemove,
Register[] registers) |
int |
remove(Set<Register> doNotSave) |
boolean |
supportsRemove() |
emitCode, estimateSize, leavesRegisterWindow, setDelayedControlTransfer
destroysCallerSavedRegisters, forEachAlive, forEachAlive, forEachInput, forEachInput, forEachOutput, forEachOutput, forEachRegisterHint, forEachRegisterHint, forEachState, forEachState, forEachState, forEachState, forEachTemp, forEachTemp, getLIRInstructionClass, hasOperands, hasState, id, name, setId, toString, toStringWithIdPrefix, verify, visitEachAlive, visitEachAlive, visitEachInput, visitEachInput, visitEachOutput, visitEachOutput, visitEachState, visitEachState, visitEachTemp, visitEachTemp
public static final LIRInstructionClass<SPARCSaveRegistersOp> TYPE
public static final Register RETURN_REGISTER_STORAGE
public static final SPARCLIRInstruction.SizeEstimate SIZE
protected final Register[] savedRegisters
protected final StackSlotValue[] slots
protected final boolean supportsRemove
remove(Set)
should have an effect.public SPARCSaveRegistersOp(Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove)
public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm)
emitCode
in class SPARCLIRInstruction
public StackSlotValue[] getSlots()
public boolean supportsRemove()
supportsRemove
in interface StandardOp.SaveRegistersOp
public int remove(Set<Register> doNotSave)
remove
in interface StandardOp.SaveRegistersOp
public RegisterSaveLayout getMap(FrameMap frameMap)
getMap
in interface StandardOp.SaveRegistersOp
private static int indexForStackSlot(FrameMap frameMap, StackSlot slot)
slot
- a stack slot