940 __ movptr(Address(thread, JavaThread::exception_pc_offset()), rdx);
941
942 restore_live_registers(sasm);
943
944 __ leave();
945 __ addptr(rsp, BytesPerWord); // remove return address from stack
946
947 // Forward the exception directly to deopt blob. We can blow no
948 // registers and must leave throwing pc on the stack. A patch may
949 // have values live in registers so the entry point with the
950 // exception in tls.
951 __ jump(RuntimeAddress(deopt_blob->unpack_with_exception_in_tls()));
952
953 __ bind(L);
954 }
955
956
957 // Runtime will return true if the nmethod has been deoptimized during
958 // the patching process. In that case we must do a deopt reexecute instead.
959
960 Label reexecuteEntry, cont;
961
962 __ testptr(rax, rax); // have we deoptimized?
963 __ jcc(Assembler::equal, cont); // no
964
965 // Will reexecute. Proper return address is already on the stack we just restore
966 // registers, pop all of our frame but the return address and jump to the deopt blob
967 restore_live_registers(sasm);
968 __ leave();
969 __ jump(RuntimeAddress(deopt_blob->unpack_with_reexecution()));
970
971 __ bind(cont);
972 restore_live_registers(sasm);
973 __ leave();
974 __ ret(0);
975
976 return oop_maps;
977 }
978
979
980 OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|
940 __ movptr(Address(thread, JavaThread::exception_pc_offset()), rdx);
941
942 restore_live_registers(sasm);
943
944 __ leave();
945 __ addptr(rsp, BytesPerWord); // remove return address from stack
946
947 // Forward the exception directly to deopt blob. We can blow no
948 // registers and must leave throwing pc on the stack. A patch may
949 // have values live in registers so the entry point with the
950 // exception in tls.
951 __ jump(RuntimeAddress(deopt_blob->unpack_with_exception_in_tls()));
952
953 __ bind(L);
954 }
955
956
957 // Runtime will return true if the nmethod has been deoptimized during
958 // the patching process. In that case we must do a deopt reexecute instead.
959
960 Label cont;
961
962 __ testptr(rax, rax); // have we deoptimized?
963 __ jcc(Assembler::equal, cont); // no
964
965 // Will reexecute. Proper return address is already on the stack we just restore
966 // registers, pop all of our frame but the return address and jump to the deopt blob
967 restore_live_registers(sasm);
968 __ leave();
969 __ jump(RuntimeAddress(deopt_blob->unpack_with_reexecution()));
970
971 __ bind(cont);
972 restore_live_registers(sasm);
973 __ leave();
974 __ ret(0);
975
976 return oop_maps;
977 }
978
979
980 OopMapSet* Runtime1::generate_code_for(StubID id, StubAssembler* sasm) {
|