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)
Gets a map from the saved registers saved by this operation to the frame slots in which
they are saved.
|
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)
Prunes
doNotSave from the registers saved by this operation. |
boolean |
supportsRemove()
Determines if the
StandardOp.SaveRegistersOp.remove(Set) operation is supported for this object. |
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()
StandardOp.SaveRegistersOp
StandardOp.SaveRegistersOp.remove(Set)
operation is supported for this object.supportsRemove
in interface StandardOp.SaveRegistersOp
public int remove(Set<Register> doNotSave)
StandardOp.SaveRegistersOp
doNotSave
from the registers saved by this operation.remove
in interface StandardOp.SaveRegistersOp
doNotSave
- registers that should not be saved by this operationpublic RegisterSaveLayout getMap(FrameMap frameMap)
StandardOp.SaveRegistersOp
getMap
in interface StandardOp.SaveRegistersOp
frameMap
- used to convert a
virtual slot to a frame slot indexprivate static int indexForStackSlot(FrameMap frameMap, StackSlot slot)
slot
- a stack slot