src/cpu/x86/vm/runtime_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6893081 Cdiff src/cpu/x86/vm/runtime_x86_32.cpp

src/cpu/x86/vm/runtime_x86_32.cpp

Print this page
rev 1081 : imported patch indy-cleanup-6893081.patch

*** 41,55 **** // for the nmethod. // // This code is entered with a jmp. // // Arguments: ! // rax,: exception oop // rdx: exception pc // // Results: ! // rax,: exception oop // rdx: exception pc in caller or ??? // destination: exception handler of caller // // Note: the exception pc MUST be at a call (precise debug information) // Only register rax, rdx, rcx are not callee saved. --- 41,55 ---- // for the nmethod. // // This code is entered with a jmp. // // Arguments: ! // rax: exception oop // rdx: exception pc // // Results: ! // rax: exception oop // rdx: exception pc in caller or ??? // destination: exception handler of caller // // Note: the exception pc MUST be at a call (precise debug information) // Only register rax, rdx, rcx are not callee saved.
*** 111,131 **** __ movptr(rbp, Address(rsp, rbp_off * wordSize)); __ addptr(rsp, return_off * wordSize); // Epilog! __ pop(rdx); // Exception pc ! // rax,: exception handler for given <exception oop/exception pc> // We have a handler in rax, (could be deopt blob) // rdx - throwing pc, deopt blob will need it. __ push(rax); - // rcx contains handler address - - __ get_thread(rcx); // TLS // Get the exception __ movptr(rax, Address(rcx, JavaThread::exception_oop_offset())); // Get the exception pc in case we are deoptimized __ movptr(rdx, Address(rcx, JavaThread::exception_pc_offset())); #ifdef ASSERT --- 111,131 ---- __ movptr(rbp, Address(rsp, rbp_off * wordSize)); __ addptr(rsp, return_off * wordSize); // Epilog! __ pop(rdx); // Exception pc + // rax: exception handler for given <exception oop/exception pc> ! // Restore SP from BP if the exception PC is a MethodHandle call. ! __ cmpl(Address(rcx, JavaThread::is_method_handle_exception_offset()), 0); ! __ cmovptr(Assembler::notEqual, rsp, rbp); // We have a handler in rax, (could be deopt blob) // rdx - throwing pc, deopt blob will need it. __ push(rax); // Get the exception __ movptr(rax, Address(rcx, JavaThread::exception_oop_offset())); // Get the exception pc in case we are deoptimized __ movptr(rdx, Address(rcx, JavaThread::exception_pc_offset())); #ifdef ASSERT
*** 135,145 **** // Clear the exception oop so GC no longer processes it as a root. __ movptr(Address(rcx, JavaThread::exception_oop_offset()), NULL_WORD); __ pop(rcx); ! // rax,: exception oop // rcx: exception handler // rdx: exception pc __ jmp (rcx); // ------------- --- 135,145 ---- // Clear the exception oop so GC no longer processes it as a root. __ movptr(Address(rcx, JavaThread::exception_oop_offset()), NULL_WORD); __ pop(rcx); ! // rax: exception oop // rcx: exception handler // rdx: exception pc __ jmp (rcx); // -------------
src/cpu/x86/vm/runtime_x86_32.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File