< prev index next >
src/cpu/x86/vm/c1_LIRAssembler_x86.cpp
Print this page
rev 12152 : [mq]: verification.patch
rev 12153 : imported patch shared_sb_stub.patch
*** 1412,1447 ****
if (op->need_null_check()) {
__ testptr(res, res);
__ jcc(Assembler::zero, done);
}
! // Check for evacuation-in-progress
! Address evacuation_in_progress = Address(r15_thread, in_bytes(JavaThread::evacuation_in_progress_offset()));
! __ cmpb(evacuation_in_progress, 0);
!
! // The read-barrier.
! __ movptr(res, Address(res, BrooksPointer::byte_offset()));
!
! __ jcc(Assembler::equal, done);
!
! // Check for object in collection set.
! __ movptr(tmp1, res);
! __ shrptr(tmp1, ShenandoahHeapRegion::RegionSizeShift);
! __ movptr(tmp2, (intptr_t) ShenandoahHeap::in_cset_fast_test_addr());
! __ movbool(tmp2, Address(tmp2, tmp1, Address::times_1));
! __ testb(tmp2, 0x1);
! __ jcc(Assembler::zero, done);
!
! if (res != rax) {
! __ xchgptr(res, rax); // Move obj into rax and save rax into obj.
! }
!
! __ call(RuntimeAddress(Runtime1::entry_for(Runtime1::shenandoah_write_barrier_slow_id)));
!
! if (res != rax) {
! __ xchgptr(rax, res); // Swap back obj with rax.
! }
__ bind(done);
}
--- 1412,1422 ----
if (op->need_null_check()) {
__ testptr(res, res);
__ jcc(Assembler::zero, done);
}
! __ shenandoah_write_barrier(res);
__ bind(done);
}
< prev index next >