3760 lgr_if_needed(Rcard_addr, Rcard_addr_x); // copy back asap. push_frame will destroy Z_R0_scratch!
3761
3762 // VM call need frame to access(write) O register.
3763 if (needs_frame) {
3764 save_return_pc();
3765 push_frame_abi160(0); // Will use Z_R0 as tmp on old CPUs.
3766 }
3767
3768 // Save the live input values.
3769 call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), Rcard_addr, Z_thread);
3770
3771 if (needs_frame) {
3772 pop_frame();
3773 restore_return_pc();
3774 }
3775
3776 bind(filtered);
3777
3778 BLOCK_COMMENT("} g1_write_barrier_post");
3779 }
3780 #endif // INCLUDE_ALL_GCS
3781
3782 // Last_Java_sp must comply to the rules in frame_s390.hpp.
3783 void MacroAssembler::set_last_Java_frame(Register last_Java_sp, Register last_Java_pc, bool allow_relocation) {
3784 BLOCK_COMMENT("set_last_Java_frame {");
3785
3786 // Always set last_Java_pc and flags first because once last_Java_sp
3787 // is visible has_last_Java_frame is true and users will look at the
3788 // rest of the fields. (Note: flags should always be zero before we
3789 // get here so doesn't need to be set.)
3790
3791 // Verify that last_Java_pc was zeroed on return to Java.
3792 if (allow_relocation) {
3793 asm_assert_mem8_is_zero(in_bytes(JavaThread::last_Java_pc_offset()),
3794 Z_thread,
3795 "last_Java_pc not zeroed before leaving Java",
3796 0x200);
3797 } else {
3798 asm_assert_mem8_is_zero_static(in_bytes(JavaThread::last_Java_pc_offset()),
3799 Z_thread,
|
3760 lgr_if_needed(Rcard_addr, Rcard_addr_x); // copy back asap. push_frame will destroy Z_R0_scratch!
3761
3762 // VM call need frame to access(write) O register.
3763 if (needs_frame) {
3764 save_return_pc();
3765 push_frame_abi160(0); // Will use Z_R0 as tmp on old CPUs.
3766 }
3767
3768 // Save the live input values.
3769 call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), Rcard_addr, Z_thread);
3770
3771 if (needs_frame) {
3772 pop_frame();
3773 restore_return_pc();
3774 }
3775
3776 bind(filtered);
3777
3778 BLOCK_COMMENT("} g1_write_barrier_post");
3779 }
3780
3781 // Called from init_globals() after universe_init() and before interpreter_init()
3782 void g1_barrier_stubs_init() {
3783 // G1 barrier stubs currently only generated on SPARC
3784 }
3785 #endif // INCLUDE_ALL_GCS
3786
3787 // Last_Java_sp must comply to the rules in frame_s390.hpp.
3788 void MacroAssembler::set_last_Java_frame(Register last_Java_sp, Register last_Java_pc, bool allow_relocation) {
3789 BLOCK_COMMENT("set_last_Java_frame {");
3790
3791 // Always set last_Java_pc and flags first because once last_Java_sp
3792 // is visible has_last_Java_frame is true and users will look at the
3793 // rest of the fields. (Note: flags should always be zero before we
3794 // get here so doesn't need to be set.)
3795
3796 // Verify that last_Java_pc was zeroed on return to Java.
3797 if (allow_relocation) {
3798 asm_assert_mem8_is_zero(in_bytes(JavaThread::last_Java_pc_offset()),
3799 Z_thread,
3800 "last_Java_pc not zeroed before leaving Java",
3801 0x200);
3802 } else {
3803 asm_assert_mem8_is_zero_static(in_bytes(JavaThread::last_Java_pc_offset()),
3804 Z_thread,
|