< 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]: graal

@@ -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 >