Mercurial > hg > graal-compiler
changeset 22270:b068e7d4db13
[SPARC] Assert certain scratch registers for stack banging/save instruction
author | Stefan Anzinger <stefan.anzinger@oracle.com> |
---|---|
date | Tue, 14 Jul 2015 11:38:56 +0200 |
parents | 5b5b881f4689 |
children | 75b1506b0e7a |
files | graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java jvmci/jdk.internal.jvmci.sparc/src/jdk/internal/jvmci/sparc/SPARC.java |
diffstat | 2 files changed, 6 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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"); }