# HG changeset patch # User Stefan Anzinger # Date 1418799897 -3600 # Node ID 5dcb9fdea75ad832f433ff032205058265c580c4 # Parent 0ce6ee3d7a98d6243469ac94bba3a414d5aecbe0 [SPARC] use now a dedicated scratch register for isMethodHandleReturnOffset value, as o7 may contain valuable information diff -r 0ce6ee3d7a98 -r 5dcb9fdea75a graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerInCallerOp.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerInCallerOp.java Tue Dec 16 19:26:38 2014 -0800 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotJumpToExceptionHandlerInCallerOp.java Wed Dec 17 08:04:57 2014 +0100 @@ -29,10 +29,16 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.sparc.*; -import com.oracle.graal.asm.sparc.SPARCAssembler.*; -import com.oracle.graal.asm.sparc.SPARCMacroAssembler.*; +import com.oracle.graal.asm.sparc.SPARCAssembler.CC; +import com.oracle.graal.asm.sparc.SPARCAssembler.ConditionFlag; +import com.oracle.graal.asm.sparc.SPARCAssembler.Jmpl; +import com.oracle.graal.asm.sparc.SPARCAssembler.Lduw; +import com.oracle.graal.asm.sparc.SPARCAssembler.Movcc; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Cmp; +import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Nop; import com.oracle.graal.lir.*; import com.oracle.graal.lir.asm.*; +import com.oracle.graal.sparc.*; /** * Sets up the arguments for an exception handler in the callers frame, removes the current frame @@ -65,11 +71,13 @@ // Restore SP from L7 if the exception PC is a method handle call site. SPARCAddress dst = new SPARCAddress(thread, isMethodHandleReturnOffset); - new Lduw(dst, o7).emit(masm); - new Cmp(o7, o7).emit(masm); - new Movcc(ConditionFlag.NotZero, CC.Icc, l7, sp).emit(masm); + try (SPARCScratchRegister scratch = SPARCScratchRegister.get()) { + Register scratchReg = scratch.getRegister(); + new Lduw(dst, scratchReg).emit(masm); + new Cmp(scratchReg, scratchReg).emit(masm); + new Movcc(ConditionFlag.NotZero, CC.Icc, l7, sp).emit(masm); + } - new Mov(i7, o7).emit(masm); new Jmpl(asRegister(handlerInCallerPc), 0, g0).emit(masm); new Nop().emit(masm); }