hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
changeset 5687 b862d1f189bd
parent 5046 27e801a857cb
child 5702 201c5cde25bb
equal deleted inserted replaced
5686:5435e77aa3df 5687:b862d1f189bd
   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       {