Mercurial > hg > truffle
diff src/cpu/sparc/vm/c1_Runtime1_sparc.cpp @ 1564:61b2245abf36
6930772: JSR 292 needs to support SPARC C1
Summary: C1 for SPARC needs to support JSR 292.
Reviewed-by: never, jrose
author | twisti |
---|---|
date | Fri, 21 May 2010 02:59:24 -0700 |
parents | 3cf667df43ef |
children | e9ff18c4ace7 |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Thu May 20 06:34:23 2010 -0700 +++ b/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Fri May 21 02:59:24 2010 -0700 @@ -679,8 +679,15 @@ __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), G2_thread, Oissuing_pc->after_save()); __ verify_not_null_oop(Oexception->after_save()); - __ jmp(O0, 0); - __ delayed()->restore(); + + // Restore SP from L7 if the exception PC is a MethodHandle call site. + __ mov(O0, G5); // Save the target address. + __ lduw(Address(G2_thread, JavaThread::is_method_handle_return_offset()), L0); + __ tst(L0); // Condition codes are preserved over the restore. + __ restore(); + + __ jmp(G5, 0); + __ delayed()->movcc(Assembler::notZero, false, Assembler::icc, L7_mh_SP_save, SP); // Restore SP if required. } break;