--- old/src/hotspot/cpu/x86/macroAssembler_x86.cpp 2018-05-14 21:06:27.549293931 +0200 +++ new/src/hotspot/cpu/x86/macroAssembler_x86.cpp 2018-05-14 21:06:27.226297842 +0200 @@ -118,14 +118,24 @@ cmp_literal32(src1, (int32_t)obj, metadata_Relocation::spec_for_immediate()); } -void MacroAssembler::cmpoop(Address src1, jobject obj) { +void MacroAssembler::cmpoop_raw(Address src1, jobject obj) { cmp_literal32(src1, (int32_t)obj, oop_Relocation::spec_for_immediate()); } -void MacroAssembler::cmpoop(Register src1, jobject obj) { +void MacroAssembler::cmpoop_raw(Register src1, jobject obj) { cmp_literal32(src1, (int32_t)obj, oop_Relocation::spec_for_immediate()); } +void MacroAssembler::cmpoop(Address src1, jobject obj) { + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->obj_equals(this, IN_HEAP, src1, obj); +} + +void MacroAssembler::cmpoop(Register src1, jobject obj) { + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->obj_equals(this, IN_HEAP, src1, obj); +} + void MacroAssembler::extend_sign(Register hi, Register lo) { // According to Intel Doc. AP-526, "Integer Divide", p.18. if (VM_Version::is_P6() && hi == rdx && lo == rax) { @@ -2785,17 +2795,20 @@ } void MacroAssembler::cmpoop(Register src1, Register src2) { - cmpptr(src1, src2); + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->obj_equals(this, IN_HEAP, src1, src2); } void MacroAssembler::cmpoop(Register src1, Address src2) { - cmpptr(src1, src2); + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->obj_equals(this, IN_HEAP, src1, src2); } #ifdef _LP64 void MacroAssembler::cmpoop(Register src1, jobject src2) { movoop(rscratch1, src2); - cmpptr(src1, rscratch1); + BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); + bs->obj_equals(this, IN_HEAP, src1, rscratch1); } #endif