public class AMD64FrameMap extends FrameMap
Base Contents
: : -----
caller | incoming overflow argument n | ^
frame : ... : | positive
| incoming overflow argument 0 | | offsets
---------+--------------------------------+---------------------
current | return address | | ^
frame +--------------------------------+ | |
| preserved rbp | | |
| (iff AMD64FrameMap.useStandardFrameProlog) | | |
+--------------------------------+ | | -----
| | | | ^
: callee save area : | | |
| | | | |
+--------------------------------+ | | |
| spill slot 0 | | negative | |
: ... : v offsets | |
| spill slot n | ----- total frame
+--------------------------------+ frame size
| alignment padding | size |
+--------------------------------+ ----- | |
| outgoing overflow argument n | ^ | |
: ... : | positive | |
| outgoing overflow argument 0 | | offsets 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.ReferenceMapBuilderFactoryhasOutgoingStackArguments, initialSpillSize, outgoingSize, spillSize| Constructor and Description |
|---|
AMD64FrameMap(CodeCacheProvider codeCache,
RegisterConfig registerConfig,
FrameMap.ReferenceMapBuilderFactory referenceMapFactory,
boolean useStandardFrameProlog) |
| Modifier and Type | Method and Description |
|---|---|
protected int |
alignFrameSize(int size)
Aligns the given frame size to the stack alignment size and return the aligned size.
|
StackSlot |
allocateDeoptimizationRescueSlot() |
int |
currentFrameSize()
Gets the current size of this frame.
|
int |
offsetForStackSlot(StackSlot slot)
Computes the offset of a stack slot relative to the frame register.
|
int |
totalFrameSize()
Gets the total frame size of the compiled frame, including any ABI required storage like the
return address slot or a saved frame pointer. |
boolean |
useStandardFrameProlog() |
accessesCallerFrame, allocateSpillSlot, allocateStackMemory, callsMethod, finish, frameNeedsAllocating, frameSize, getRegisterConfig, getTarget, newReferenceMapBuilder, outgoingSize, reserveOutgoing, returnAddressSize, spillSlotSizepublic AMD64FrameMap(CodeCacheProvider codeCache,
RegisterConfig registerConfig,
FrameMap.ReferenceMapBuilderFactory referenceMapFactory,
boolean useStandardFrameProlog)
public int totalFrameSize()
FrameMapreturn address slot or a saved frame pointer.totalFrameSize in class FrameMappublic int currentFrameSize()
FrameMapFrameMap.frameSize() if FrameMap.finish() were called now.currentFrameSize in class FrameMapprotected int alignFrameSize(int size)
FrameMapalignFrameSize in class FrameMapsize - the initial frame size to be alignedpublic int offsetForStackSlot(StackSlot slot)
FrameMapoffsetForStackSlot in class FrameMapslot - a stack slotpublic StackSlot allocateDeoptimizationRescueSlot()
public boolean useStandardFrameProlog()