Print this page


Split Close
Expand all
Collapse all
          --- old/src/cpu/x86/vm/c1_Runtime1_x86.cpp
          +++ new/src/cpu/x86/vm/c1_Runtime1_x86.cpp
↓ open down ↓ 774 lines elided ↑ open up ↑
 775  775    __ verify_not_null_oop(exception_oop);
 776  776  
 777  777    // get throwing pc (= return address).
 778  778    // rdx has been destroyed by the call, so it must be set again
 779  779    // the pop is also necessary to simulate the effect of a ret(0)
 780  780    __ pop(exception_pc);
 781  781  
 782  782    // Restore SP from BP if the exception PC is a MethodHandle call site.
 783  783    NOT_LP64(__ get_thread(thread);)
 784  784    __ cmpl(Address(thread, JavaThread::is_method_handle_return_offset()), 0);
 785      -  __ cmovptr(Assembler::notEqual, rsp, rbp);
      785 +  __ cmovptr(Assembler::notEqual, rsp, rbp_mh_SP_save);
 786  786  
 787  787    // continue at exception handler (return address removed)
 788  788    // note: do *not* remove arguments when unwinding the
 789  789    //       activation since the caller assumes having
 790  790    //       all arguments on the stack when entering the
 791  791    //       runtime to determine the exception handler
 792  792    //       (GC happens at call site with arguments!)
 793  793    // rax: exception oop
 794  794    // rdx: throwing pc
 795  795    // rbx: exception handler
↓ open down ↓ 947 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX