mirror of
https://github.com/openjdk/jdk.git
synced 2026-08-03 06:35:31 +00:00
8388425: [s390] Introduce interface for GC oop verification in the assembler
Reviewed-by: amitkumar, aph
This commit is contained in:
parent
44ef3188ad
commit
da345ec6a4
@ -31,6 +31,7 @@
|
||||
#include "c1/c1_ValueStack.hpp"
|
||||
#include "ci/ciArrayKlass.hpp"
|
||||
#include "ci/ciInstance.hpp"
|
||||
#include "gc/shared/barrierSetAssembler.hpp"
|
||||
#include "gc/shared/collectedHeap.hpp"
|
||||
#include "memory/universe.hpp"
|
||||
#include "nativeInst_s390.hpp"
|
||||
@ -972,7 +973,6 @@ void LIR_Assembler::mem2reg(LIR_Opr src_opr, LIR_Opr dest, BasicType type, LIR_P
|
||||
} else {
|
||||
__ z_lg(dest->as_register(), disp_value, disp_reg, src);
|
||||
}
|
||||
__ verify_oop(dest->as_register(), FILE_AND_LINE);
|
||||
break;
|
||||
}
|
||||
case T_FLOAT:
|
||||
@ -1006,7 +1006,6 @@ void LIR_Assembler::stack2reg(LIR_Opr src, LIR_Opr dest, BasicType type) {
|
||||
if (dest->is_single_cpu()) {
|
||||
if (is_reference_type(type)) {
|
||||
__ mem2reg_opt(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()), true);
|
||||
__ verify_oop(dest->as_register(), FILE_AND_LINE);
|
||||
} else if (type == T_METADATA || type == T_ADDRESS) {
|
||||
__ mem2reg_opt(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()), true);
|
||||
} else {
|
||||
@ -1033,7 +1032,10 @@ void LIR_Assembler::reg2stack(LIR_Opr src, LIR_Opr dest, BasicType type) {
|
||||
if (src->is_single_cpu()) {
|
||||
const Address dst = frame_map()->address_for_slot(dest->single_stack_ix());
|
||||
if (is_reference_type(type)) {
|
||||
__ verify_oop(src->as_register(), FILE_AND_LINE);
|
||||
if (VerifyOops) {
|
||||
BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
|
||||
bs->check_oop(_masm, src->as_register(), FILE_AND_LINE);
|
||||
}
|
||||
__ reg2mem_opt(src->as_register(), dst, true);
|
||||
} else if (type == T_METADATA || type == T_ADDRESS) {
|
||||
__ reg2mem_opt(src->as_register(), dst, true);
|
||||
@ -1129,8 +1131,9 @@ void LIR_Assembler::reg2mem(LIR_Opr from, LIR_Opr dest_opr, BasicType type,
|
||||
|
||||
assert(disp_reg != Z_R0 || Immediate::is_simm20(disp_value), "should have set this up");
|
||||
|
||||
if (is_reference_type(type)) {
|
||||
__ verify_oop(from->as_register(), FILE_AND_LINE);
|
||||
if (is_reference_type(type) && VerifyOops) {
|
||||
BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
|
||||
bs->check_oop(_masm, from->as_register(), FILE_AND_LINE);
|
||||
}
|
||||
|
||||
bool short_disp = Immediate::is_uimm12(disp_value);
|
||||
|
||||
@ -197,6 +197,10 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm) {
|
||||
__ block_comment("} nmethod_entry_barrier (nmethod_entry_barrier)");
|
||||
}
|
||||
|
||||
void BarrierSetAssembler::check_oop(MacroAssembler* masm, Register oop, const char* msg) {
|
||||
__ verify_oop(oop, msg);
|
||||
}
|
||||
|
||||
#ifdef COMPILER2
|
||||
|
||||
OptoReg::Name BarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) const {
|
||||
|
||||
@ -67,6 +67,8 @@ public:
|
||||
|
||||
virtual void barrier_stubs_init() {}
|
||||
|
||||
virtual void check_oop(MacroAssembler* masm, Register oop, const char* msg);
|
||||
|
||||
#ifdef COMPILER2
|
||||
OptoReg::Name refine_register(const Node* node,
|
||||
OptoReg::Name opto_reg) const;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user