diff -r 5b87d3fc1093 -r 7dd81e82d083 src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64FrameMap.java --- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64FrameMap.java Thu Nov 15 21:05:47 2018 +0100 +++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64FrameMap.java Thu Nov 15 09:04:07 2018 -0800 @@ -81,25 +81,31 @@ 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