3563 3564 __ mov(L7_thread_cache, G2_thread); 3565 3566 __ reset_last_Java_frame(); 3567 3568 // NOTE: we know that only O0/O1 will be reloaded by restore_result_registers 3569 // so this move will survive 3570 3571 __ mov(L0deopt_mode, G4deopt_mode); 3572 3573 __ mov(O0, O2UnrollBlock->after_save()); 3574 3575 RegisterSaver::restore_result_registers(masm); 3576 3577 Label noException; 3578 __ cmp_and_br_short(G4deopt_mode, Deoptimization::Unpack_exception, Assembler::notEqual, Assembler::pt, noException); 3579 3580 // Move the pending exception from exception_oop to Oexception so 3581 // the pending exception will be picked up the interpreter. 3582 __ ld_ptr(G2_thread, in_bytes(JavaThread::exception_oop_offset()), Oexception); 3583 __ st_ptr(G0, G2_thread, in_bytes(JavaThread::exception_oop_offset())); 3584 __ bind(noException); 3585 3586 // deallocate the deoptimization frame taking care to preserve the return values 3587 __ mov(Oreturn0, Oreturn0->after_save()); 3588 __ mov(Oreturn1, Oreturn1->after_save()); 3589 __ mov(O2UnrollBlock, O2UnrollBlock->after_save()); 3590 __ restore(); 3591 3592 // Allocate new interpreter frame(s) and possible c2i adapter frame 3593 3594 make_new_frames(masm, true); 3595 3596 // push a dummy "unpack_frame" taking care of float return values and 3597 // call Deoptimization::unpack_frames to have the unpacker layout 3598 // information in the interpreter frames just created and then return 3599 // to the interpreter entry point 3600 __ save(SP, -frame_size_words*wordSize, SP); 3601 __ stf(FloatRegisterImpl::D, Freturn0, saved_Freturn0_addr); 3602 #if !defined(_LP64) 3603 #if defined(COMPILER2) | 3563 3564 __ mov(L7_thread_cache, G2_thread); 3565 3566 __ reset_last_Java_frame(); 3567 3568 // NOTE: we know that only O0/O1 will be reloaded by restore_result_registers 3569 // so this move will survive 3570 3571 __ mov(L0deopt_mode, G4deopt_mode); 3572 3573 __ mov(O0, O2UnrollBlock->after_save()); 3574 3575 RegisterSaver::restore_result_registers(masm); 3576 3577 Label noException; 3578 __ cmp_and_br_short(G4deopt_mode, Deoptimization::Unpack_exception, Assembler::notEqual, Assembler::pt, noException); 3579 3580 // Move the pending exception from exception_oop to Oexception so 3581 // the pending exception will be picked up the interpreter. 3582 __ ld_ptr(G2_thread, in_bytes(JavaThread::exception_oop_offset()), Oexception); 3583 __ ld_ptr(G2_thread, in_bytes(JavaThread::exception_pc_offset()), Oissuing_pc); 3584 __ st_ptr(G0, G2_thread, in_bytes(JavaThread::exception_oop_offset())); 3585 __ st_ptr(G0, G2_thread, in_bytes(JavaThread::exception_pc_offset())); 3586 __ bind(noException); 3587 3588 // deallocate the deoptimization frame taking care to preserve the return values 3589 __ mov(Oreturn0, Oreturn0->after_save()); 3590 __ mov(Oreturn1, Oreturn1->after_save()); 3591 __ mov(O2UnrollBlock, O2UnrollBlock->after_save()); 3592 __ restore(); 3593 3594 // Allocate new interpreter frame(s) and possible c2i adapter frame 3595 3596 make_new_frames(masm, true); 3597 3598 // push a dummy "unpack_frame" taking care of float return values and 3599 // call Deoptimization::unpack_frames to have the unpacker layout 3600 // information in the interpreter frames just created and then return 3601 // to the interpreter entry point 3602 __ save(SP, -frame_size_words*wordSize, SP); 3603 __ stf(FloatRegisterImpl::D, Freturn0, saved_Freturn0_addr); 3604 #if !defined(_LP64) 3605 #if defined(COMPILER2) |