public class AMD64SaveRegistersOp extends AMD64LIRInstruction implements StandardOp.SaveRegistersOp
LIRInstruction.Alive, LIRInstruction.Def, LIRInstruction.OperandFlag, LIRInstruction.OperandMode, LIRInstruction.State, LIRInstruction.Temp, LIRInstruction.Use
Modifier and Type | Field and Description |
---|---|
protected Register[] |
savedRegisters
The registers (potentially) saved by this operation.
|
protected StackSlotValue[] |
slots
The slots to which the registers are saved.
|
protected boolean |
supportsRemove
Specifies if
remove(Set) should have an effect. |
static LIRInstructionClass<AMD64SaveRegistersOp> |
TYPE |
ADDRESS_FLAGS, ALLOWED_FLAGS
Constructor and Description |
---|
AMD64SaveRegistersOp(LIRInstructionClass<? extends AMD64SaveRegistersOp> c,
Register[] savedRegisters,
StackSlotValue[] savedRegisterLocations,
boolean supportsRemove) |
AMD64SaveRegistersOp(Register[] savedRegisters,
StackSlotValue[] savedRegisterLocations,
boolean supportsRemove) |
Modifier and Type | Method and Description |
---|---|
void |
emitCode(CompilationResultBuilder crb,
AMD64MacroAssembler 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. |
protected void |
saveRegister(CompilationResultBuilder crb,
AMD64MacroAssembler masm,
StackSlot result,
Register register) |
boolean |
supportsRemove()
Determines if the
StandardOp.SaveRegistersOp.remove(Set) operation is supported for this object. |
emitCode
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<AMD64SaveRegistersOp> TYPE
protected final Register[] savedRegisters
protected final StackSlotValue[] slots
protected final boolean supportsRemove
remove(Set)
should have an effect.public AMD64SaveRegistersOp(Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove)
public AMD64SaveRegistersOp(LIRInstructionClass<? extends AMD64SaveRegistersOp> c, Register[] savedRegisters, StackSlotValue[] savedRegisterLocations, boolean supportsRemove)
protected void saveRegister(CompilationResultBuilder crb, AMD64MacroAssembler masm, StackSlot result, Register register)
public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm)
emitCode
in class AMD64LIRInstruction
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