< prev index next >

src/hotspot/cpu/x86/c1_Runtime1_x86.cpp

Print this page
rev 51719 : [mq]: 8210676


 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) {


< prev index next >