< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64FrameMap.java
Print this page
rev 52509 : [mq]: graal2
@@ -79,29 +79,35 @@
public class AMD64FrameMap extends FrameMap {
private StackSlot rbpSpillSlot;
public AMD64FrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig, ReferenceMapBuilderFactory referenceMapFactory) {
+ this(codeCache, registerConfig, referenceMapFactory, false);
+ }
+
+ public AMD64FrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig, ReferenceMapBuilderFactory referenceMapFactory, boolean useBasePointer) {
super(codeCache, registerConfig, referenceMapFactory);
// (negative) offset relative to sp + total frame size
- initialSpillSize = returnAddressSize();
+ initialSpillSize = returnAddressSize() + (useBasePointer ? getTarget().arch.getWordSize() : 0);
spillSize = initialSpillSize;
}
@Override
public int totalFrameSize() {
- return frameSize() + returnAddressSize();
+ int result = frameSize() + initialSpillSize;
+ assert result % getTarget().stackAlignment == 0 : "Total frame size not aligned: " + result;
+ return result;
}
@Override
public int currentFrameSize() {
- return alignFrameSize(outgoingSize + spillSize - returnAddressSize());
+ return alignFrameSize(outgoingSize + spillSize - initialSpillSize);
}
@Override
protected int alignFrameSize(int size) {
- return NumUtil.roundUp(size + returnAddressSize(), getTarget().stackAlignment) - returnAddressSize();
+ return NumUtil.roundUp(size + initialSpillSize, getTarget().stackAlignment) - initialSpillSize;
}
@Override
public int offsetForStackSlot(StackSlot slot) {
// @formatter:off
< prev index next >