Mercurial > hg > graal-jvmci-8
changeset 22144:7ae8ad713862
[SPARC] Do not preset SPARCFrameMap.initialSpillsize for register save area; set calleeSaveAreaSize correctly instead
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Thu, 02 Jul 2015 17:37:22 +0200 |
parents | 103f53747955 |
children | 1bd5caa41faf |
files | graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64FrameMap.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCFrameMap.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/framemap/FrameMap.java jvmci/jdk.internal.jvmci.hotspot.sparc/src/jdk/internal/jvmci/hotspot/sparc/SPARCHotSpotRegisterConfig.java jvmci/jdk.internal.jvmci.sparc/src/jdk/internal/jvmci/sparc/SPARC.java |
diffstat | 5 files changed, 33 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ * * <pre> * 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.
--- 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
--- 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; }
--- 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; } }
--- 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<CPUFeature> features; public SPARC(Set<CPUFeature> features) {