# HG changeset patch # User Stefan Anzinger # Date 1436866736 -7200 # Node ID b068e7d4db13ce9816369098b8866208070bc9da # Parent 5b5b881f4689596ee2c3c3cdeb5ffc9ecd81ef1f [SPARC] Assert certain scratch registers for stack banging/save instruction diff -r 5b5b881f4689 -r b068e7d4db13 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Jul 21 11:30:40 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Jul 14 11:38:56 2015 +0200 @@ -140,6 +140,7 @@ } else { try (ScratchRegister sc = masm.getScratchRegister()) { Register scratch = sc.getRegister(); + assert afterFrameInit || isGlobalRegister(scratch) : "Only global (g1-g7) registers are allowed if the frame was not initialized here. Got register " + scratch; new Setx(address.getDisplacement(), scratch).emit(masm); masm.stx(g0, new SPARCAddress(sp, scratch)); } @@ -175,6 +176,7 @@ } else { try (ScratchRegister sc = masm.getScratchRegister()) { Register scratch = sc.getRegister(); + assert isGlobalRegister(scratch) : "Only global registers are allowed before save. Got register " + scratch; new Setx(stackpoinerChange, scratch).emit(masm); masm.save(sp, scratch, sp); } diff -r 5b5b881f4689 -r b068e7d4db13 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 Tue Jul 21 11:30:40 2015 +0200 +++ b/jvmci/jdk.internal.jvmci.sparc/src/jdk/internal/jvmci/sparc/SPARC.java Tue Jul 14 11:38:56 2015 +0200 @@ -318,6 +318,10 @@ return true; } + public static boolean isGlobalRegister(Register r) { + return isCPURegister(r) && g0.number <= r.number && r.number <= g7.number; + } + public static boolean isSingleFloatRegister(Register r) { return r.name.startsWith("f"); }