public final class SPARCFrameMap extends FrameMap
Base Contents : : ----- caller | incoming overflow argument n | ^ frame : ... : | positive | incoming overflow argument 0 | | offsets +--------------------------------+ | | | | : register save area : | | | | ---------+--------------------------------+--------------------------- | spill slot 0 | | negative ^ ^ : ... : v offsets | | | spill slot n | ----- total | +--------------------------------+ frame | current | alignment padding | size | frame +--------------------------------+ ----- | | | outgoing overflow argument n | ^ | frame : ... : | positive | size | outgoing overflow argument 0 | | offsets | | +--------------------------------+ | | | | return address | | | | +--------------------------------+ | | | | | | | | : callee save area : | | | | | | v v %sp--> +--------------------------------+---------------------------The spill slot area also includes stack allocated memory blocks (ALLOCA blocks). The size of such a block may be greater than the size of a normal spill slot or the word size.
A runtime can reserve space at the beginning of the overflow argument area. The calling
convention can specify that the first overflow stack argument is not at offset 0, but at a
specified offset. Use CodeCacheProvider.getMinimumOutgoingSize()
to make sure that
call-free methods also have this space reserved. Then the VM can use the memory at offset 0
relative to the stack pointer.
FrameMap.ReferenceMapBuilderFactory
initialSpillSize, outgoingSize, spillSize
Constructor and Description |
---|
SPARCFrameMap(CodeCacheProvider codeCache,
RegisterConfig registerConfig,
FrameMap.ReferenceMapBuilderFactory referenceMapFactory) |
Modifier and Type | Method and Description |
---|---|
protected int |
alignFrameSize(int size) |
StackSlot |
allocateDeoptimizationRescueSlot() |
protected StackSlot |
allocateNewSpillSlot(LIRKind kind,
int additionalOffset) |
protected int |
calleeSaveAreaSize() |
int |
currentFrameSize() |
boolean |
frameNeedsAllocating() |
int |
offsetForStackSlot(StackSlot slot) |
int |
offsetToCalleeSaveArea() |
int |
spillSlotSize(LIRKind kind)
In SPARC we have spill slots word aligned.
|
int |
totalFrameSize() |
accessesCallerFrame, addLiveValues, addObjectStackSlot, allocateSpillSlot, allocateStackSlots, callsMethod, finish, frameSize, getRegisterConfig, getTarget, newReferenceMapBuilder, outgoingSize, reserveOutgoing, returnAddressSize, spillSlotRangeSize
public SPARCFrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig, FrameMap.ReferenceMapBuilderFactory referenceMapFactory)
public int totalFrameSize()
totalFrameSize
in class FrameMap
public int currentFrameSize()
currentFrameSize
in class FrameMap
protected int calleeSaveAreaSize()
calleeSaveAreaSize
in class FrameMap
protected int alignFrameSize(int size)
alignFrameSize
in class FrameMap
public int offsetToCalleeSaveArea()
offsetToCalleeSaveArea
in class FrameMap
protected StackSlot allocateNewSpillSlot(LIRKind kind, int additionalOffset)
allocateNewSpillSlot
in class FrameMap
public int spillSlotSize(LIRKind kind)
spillSlotSize
in class FrameMap
public int offsetForStackSlot(StackSlot slot)
offsetForStackSlot
in class FrameMap
public boolean frameNeedsAllocating()
frameNeedsAllocating
in class FrameMap
public StackSlot allocateDeoptimizationRescueSlot()