src/cpu/sparc/vm/sharedRuntime_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8026376 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/sharedRuntime_sparc.cpp

Print this page




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)


src/cpu/sparc/vm/sharedRuntime_sparc.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File