src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.amd64/src/org/graalvm/compiler/lir/amd64/AMD64FrameMap.java
changeset 52578 7dd81e82d083
parent 50858 2d3e99a72541
child 52910 583fd71c47d6
equal deleted inserted replaced
52577:5b87d3fc1093 52578:7dd81e82d083
    79 public class AMD64FrameMap extends FrameMap {
    79 public class AMD64FrameMap extends FrameMap {
    80 
    80 
    81     private StackSlot rbpSpillSlot;
    81     private StackSlot rbpSpillSlot;
    82 
    82 
    83     public AMD64FrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig, ReferenceMapBuilderFactory referenceMapFactory) {
    83     public AMD64FrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig, ReferenceMapBuilderFactory referenceMapFactory) {
       
    84         this(codeCache, registerConfig, referenceMapFactory, false);
       
    85     }
       
    86 
       
    87     public AMD64FrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig, ReferenceMapBuilderFactory referenceMapFactory, boolean useBasePointer) {
    84         super(codeCache, registerConfig, referenceMapFactory);
    88         super(codeCache, registerConfig, referenceMapFactory);
    85         // (negative) offset relative to sp + total frame size
    89         // (negative) offset relative to sp + total frame size
    86         initialSpillSize = returnAddressSize();
    90         initialSpillSize = returnAddressSize() + (useBasePointer ? getTarget().arch.getWordSize() : 0);
    87         spillSize = initialSpillSize;
    91         spillSize = initialSpillSize;
    88     }
    92     }
    89 
    93 
    90     @Override
    94     @Override
    91     public int totalFrameSize() {
    95     public int totalFrameSize() {
    92         return frameSize() + returnAddressSize();
    96         int result = frameSize() + initialSpillSize;
       
    97         assert result % getTarget().stackAlignment == 0 : "Total frame size not aligned: " + result;
       
    98         return result;
    93     }
    99     }
    94 
   100 
    95     @Override
   101     @Override
    96     public int currentFrameSize() {
   102     public int currentFrameSize() {
    97         return alignFrameSize(outgoingSize + spillSize - returnAddressSize());
   103         return alignFrameSize(outgoingSize + spillSize - initialSpillSize);
    98     }
   104     }
    99 
   105 
   100     @Override
   106     @Override
   101     protected int alignFrameSize(int size) {
   107     protected int alignFrameSize(int size) {
   102         return NumUtil.roundUp(size + returnAddressSize(), getTarget().stackAlignment) - returnAddressSize();
   108         return NumUtil.roundUp(size + initialSpillSize, getTarget().stackAlignment) - initialSpillSize;
   103     }
   109     }
   104 
   110 
   105     @Override
   111     @Override
   106     public int offsetForStackSlot(StackSlot slot) {
   112     public int offsetForStackSlot(StackSlot slot) {
   107         // @formatter:off
   113         // @formatter:off