3712 // use S7 for fetch_unroll_info returned UnrollBlock |
3712 // use S7 for fetch_unroll_info returned UnrollBlock |
3713 Register unroll = S7; |
3713 Register unroll = S7; |
3714 // Prolog for non exception case! |
3714 // Prolog for non exception case! |
3715 // Correct the return address we were given. |
3715 // Correct the return address we were given. |
3716 //FIXME, return address is on the tos or Ra? |
3716 //FIXME, return address is on the tos or Ra? |
3717 __ addi(RA, RA, - (NativeCall::return_address_offset_short)); |
3717 __ addi(RA, RA, - (NativeCall::return_address_offset_long)); |
3718 // Save everything in sight. |
3718 // Save everything in sight. |
3719 map = RegisterSaver::save_live_registers(masm, additional_words, &frame_size_in_words); |
3719 map = RegisterSaver::save_live_registers(masm, additional_words, &frame_size_in_words); |
3720 // Normal deoptimization |
3720 // Normal deoptimization |
3721 __ move(reason, Deoptimization::Unpack_deopt); |
3721 __ move(reason, Deoptimization::Unpack_deopt); |
3722 __ b(cont); |
3722 __ b(cont); |
3756 |
3756 |
3757 // Return address will be patched later with the throwing pc. The correct value is not |
3757 // Return address will be patched later with the throwing pc. The correct value is not |
3758 // available now because loading it from memory would destroy registers. |
3758 // available now because loading it from memory would destroy registers. |
3759 // Save everything in sight. |
3759 // Save everything in sight. |
3760 // No need to update map as each call to save_live_registers will produce identical oopmap |
3760 // No need to update map as each call to save_live_registers will produce identical oopmap |
3761 __ addi(RA, RA, - (NativeCall::return_address_offset_short)); |
3761 __ addi(RA, RA, - (NativeCall::return_address_offset_long)); |
3762 (void) RegisterSaver::save_live_registers(masm, additional_words, &frame_size_in_words); |
3762 (void) RegisterSaver::save_live_registers(masm, additional_words, &frame_size_in_words); |
3763 |
3763 |
3764 // Now it is safe to overwrite any register |
3764 // Now it is safe to overwrite any register |
3765 // store the correct deoptimization type |
3765 // store the correct deoptimization type |
3766 __ move(reason, Deoptimization::Unpack_exception); |
3766 __ move(reason, Deoptimization::Unpack_exception); |