# HG changeset patch # User Stefan Anzinger # Date 1435851442 -7200 # Node ID 7ae8ad7138625356d64732782d41dd5017880977 # Parent 103f53747955fac19bef1a611c3610ef88e25b94 [SPARC] Do not preset SPARCFrameMap.initialSpillsize for register save area; set calleeSaveAreaSize correctly instead diff -r 103f53747955 -r 7ae8ad713862 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java Thu Jul 02 12:42:20 2015 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java Thu Jul 02 17:37:22 2015 +0200 @@ -36,7 +36,7 @@ * *
  *   Base       Contents
- *
+ * 
  *            :                                :  -----
  *   caller   | incoming overflow argument n   |    ^
  *   frame    :     ...                        :    | positive
@@ -106,6 +106,17 @@
         return StackSlot.get(kind, -spillSize + additionalOffset, true);
     }
 
+    @Override
+    public int offsetForStackSlot(StackSlot slot) {
+        // @formatter:off
+        assert (!slot.getRawAddFrameSize() && slot.getRawOffset() <  outgoingSize) ||
+               (slot.getRawAddFrameSize() && slot.getRawOffset()  <  0 && -slot.getRawOffset() <= spillSize) ||
+               (slot.getRawAddFrameSize() && slot.getRawOffset()  >= 0) :
+                   String.format("RawAddFrameSize: %b RawOffset: 0x%x spillSize: 0x%x outgoingSize: 0x%x", slot.getRawAddFrameSize(), slot.getRawOffset(), spillSize, outgoingSize);
+        // @formatter:on
+        return super.offsetForStackSlot(slot);
+    }
+
     /**
      * For non-leaf methods, RBP is preserved in the special stack slot required by the HotSpot
      * runtime for walking/inspecting frames of such methods.
diff -r 103f53747955 -r 7ae8ad713862 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java	Thu Jul 02 12:42:20 2015 +0200
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java	Thu Jul 02 17:37:22 2015 +0200
@@ -78,7 +78,7 @@
     public SPARCFrameMap(CodeCacheProvider codeCache, RegisterConfig registerConfig) {
         super(codeCache, registerConfig);
         // Initial spill size is set to register save area size (SPARC register window)
-        initialSpillSize = 128;
+        initialSpillSize = 0;
         spillSize = initialSpillSize;
     }
 
@@ -89,7 +89,12 @@
 
     @Override
     public int currentFrameSize() {
-        return alignFrameSize(calleeSaveAreaSize() + returnAddressSize() + outgoingSize + spillSize);
+        return alignFrameSize(calleeSaveAreaSize() + outgoingSize + spillSize);
+    }
+
+    @Override
+    protected int calleeSaveAreaSize() {
+        return SPARC.REGISTER_SAFE_AREA_SIZE;
     }
 
     @Override
@@ -115,16 +120,15 @@
         return SPARC.spillSlotSize(getTarget(), kind.getPlatformKind());
     }
 
-    /**
-     * We must add the calleSaveAreaSize() when it is a in or out parameter.
-     */
     @Override
     public int offsetForStackSlot(StackSlot slot) {
-        int offset = super.offsetForStackSlot(slot);
-        if (slot.getRawOffset() >= 0) { // If In or Out parameter
-            offset += calleeSaveAreaSize();
-        }
-        return offset;
+        // @formatter:off
+        assert (!slot.getRawAddFrameSize() && slot.getRawOffset() <  outgoingSize + SPARC.REGISTER_SAFE_AREA_SIZE) ||
+               (slot.getRawAddFrameSize() && slot.getRawOffset()  <  0 && -slot.getRawOffset() <= spillSize) ||
+               (slot.getRawAddFrameSize() && slot.getRawOffset()  >= 0) :
+                   String.format("RawAddFrameSize: %b RawOffset: 0x%x spillSize: 0x%x outgoingSize: 0x%x", slot.getRawAddFrameSize(), slot.getRawOffset(), spillSize, outgoingSize);
+        // @formatter:on
+        return super.offsetForStackSlot(slot);
     }
 
     @Override
diff -r 103f53747955 -r 7ae8ad713862 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMap.java
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMap.java	Thu Jul 02 12:42:20 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMap.java	Thu Jul 02 17:37:22 2015 +0200
@@ -190,12 +190,6 @@
      * @return the offset of the stack slot
      */
     public int offsetForStackSlot(StackSlot slot) {
-        // @formatter:off
-        assert (!slot.getRawAddFrameSize() && slot.getRawOffset() <  outgoingSize) ||
-               (slot.getRawAddFrameSize() && slot.getRawOffset()  <  0 && -slot.getRawOffset() <= spillSize) ||
-               (slot.getRawAddFrameSize() && slot.getRawOffset()  >= 0) :
-                   String.format("RawAddFrameSize: %b RawOffset: 0x%x spillSize: 0x%x outgoingSize: 0x%x", slot.getRawAddFrameSize(), slot.getRawOffset(), spillSize, outgoingSize);
-        // @formatter:on
         if (slot.isInCallerFrame()) {
             accessesCallerFrame = true;
         }
diff -r 103f53747955 -r 7ae8ad713862 jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java
--- a/jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Thu Jul 02 12:42:20 2015 +0200
+++ b/jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java	Thu Jul 02 17:37:22 2015 +0200
@@ -235,7 +235,8 @@
                 // Stack slot is always aligned to its size in bytes but minimum wordsize
                 int typeSize = SPARC.spillSlotSize(target, kind);
                 currentStackOffset = roundUp(currentStackOffset, typeSize);
-                locations[i] = StackSlot.get(target.getLIRKind(kind.getStackKind()), currentStackOffset, !type.out);
+                int slotOffset = currentStackOffset + SPARC.REGISTER_SAFE_AREA_SIZE;
+                locations[i] = StackSlot.get(target.getLIRKind(kind.getStackKind()), slotOffset, !type.out);
                 currentStackOffset += typeSize;
             }
         }
diff -r 103f53747955 -r 7ae8ad713862 jvmci/jdk.internal.jvmci.sparc/src/jdk/internal/jvmci/sparc/SPARC.java
--- a/jvmci/jdk.internal.jvmci.sparc/src/jdk/internal/jvmci/sparc/SPARC.java	Thu Jul 02 12:42:20 2015 +0200
+++ b/jvmci/jdk.internal.jvmci.sparc/src/jdk/internal/jvmci/sparc/SPARC.java	Thu Jul 02 17:37:22 2015 +0200
@@ -244,6 +244,11 @@
 
     public static final int INSTRUCTION_SIZE = 4;
 
+    /**
+     * Size to keep free for flushing the register-window to stack.
+     */
+    public static final int REGISTER_SAFE_AREA_SIZE = 128;
+
     public final Set features;
 
     public SPARC(Set features) {