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) |
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) |
protected void |
saveRegister(CompilationResultBuilder crb,
AMD64MacroAssembler masm,
StackSlot result,
Register register) |
boolean |
supportsRemove() |
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()
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