equal
deleted
inserted
replaced
677 __ add(I7, frame::pc_return_offset, Oissuing_pc->after_save()); |
677 __ add(I7, frame::pc_return_offset, Oissuing_pc->after_save()); |
678 |
678 |
679 __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), |
679 __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address), |
680 G2_thread, Oissuing_pc->after_save()); |
680 G2_thread, Oissuing_pc->after_save()); |
681 __ verify_not_null_oop(Oexception->after_save()); |
681 __ verify_not_null_oop(Oexception->after_save()); |
682 __ jmp(O0, 0); |
682 |
683 __ delayed()->restore(); |
683 // Restore SP from L7 if the exception PC is a MethodHandle call site. |
|
684 __ mov(O0, G5); // Save the target address. |
|
685 __ lduw(Address(G2_thread, JavaThread::is_method_handle_return_offset()), L0); |
|
686 __ tst(L0); // Condition codes are preserved over the restore. |
|
687 __ restore(); |
|
688 |
|
689 __ jmp(G5, 0); |
|
690 __ delayed()->movcc(Assembler::notZero, false, Assembler::icc, L7_mh_SP_save, SP); // Restore SP if required. |
684 } |
691 } |
685 break; |
692 break; |
686 |
693 |
687 case throw_array_store_exception_id: |
694 case throw_array_store_exception_id: |
688 { |
695 { |