# HG changeset patch # User Stefan Anzinger # Date 1406346956 25200 # Node ID 0a9ed7b4f8fdbce053ee701cf9b5ccebae9a675f # Parent 8c70d65ec04a746fb25fb6fc840867406c8677dc [SPARC] Fix issues, with looking up information for exception handling, (Return PC is after the delay slot) diff -r 8c70d65ec04a -r 0a9ed7b4f8fd graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java Fri Jul 25 20:54:28 2014 -0700 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java Fri Jul 25 20:55:56 2014 -0700 @@ -160,10 +160,10 @@ } else { new Call(0).emit(masm); } + new Nop().emit(masm); // delay slot int after = masm.position(); crb.recordDirectCall(before, after, callTarget, info); crb.recordExceptionHandlers(after, info); - new Nop().emit(masm); // delay slot masm.ensureUniquePC(); } @@ -171,19 +171,19 @@ int before = masm.position(); new Sethix(0L, dst, true).emit(masm); new Jmp(new SPARCAddress(dst, 0)).emit(masm); + new Nop().emit(masm); // delay slot int after = masm.position(); crb.recordIndirectCall(before, after, target, null); - new Nop().emit(masm); // delay slot masm.ensureUniquePC(); } public static void indirectCall(CompilationResultBuilder crb, SPARCMacroAssembler masm, Register dst, InvokeTarget callTarget, LIRFrameState info) { int before = masm.position(); new Jmpl(dst, 0, o7).emit(masm); + new Nop().emit(masm); // delay slot int after = masm.position(); crb.recordIndirectCall(before, after, callTarget, info); crb.recordExceptionHandlers(after, info); - new Nop().emit(masm); // delay slot masm.ensureUniquePC(); } }