< prev index next >
src/hotspot/cpu/x86/gc/shenandoah/shenandoahBarrierSetAssembler_x86.cpp
Print this page
rev 58687 : Shenandoah: New incremental-update mode
rev 58688 : [mq]: JDK-8242054-04.patch
*** 51,61 ****
bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
if (is_reference_type(type)) {
! if ((ShenandoahSATBBarrier && !dest_uninitialized) || ShenandoahLoadRefBarrier) {
#ifdef _LP64
Register thread = r15_thread;
#else
Register thread = rax;
if (thread == src || thread == dst || thread == count) {
--- 51,61 ----
bool dest_uninitialized = (decorators & IS_DEST_UNINITIALIZED) != 0;
if (is_reference_type(type)) {
! if ((ShenandoahSATBBarrier && !dest_uninitialized) || ShenandoahStoreValEnqueueBarrier || ShenandoahLoadRefBarrier) {
#ifdef _LP64
Register thread = r15_thread;
#else
Register thread = rax;
if (thread == src || thread == dst || thread == count) {
*** 77,89 ****
__ testptr(count, count);
__ jcc(Assembler::zero, done);
// Avoid runtime call when not active.
Address gc_state(thread, in_bytes(ShenandoahThreadLocalData::gc_state_offset()));
! int flags = ShenandoahHeap::HAS_FORWARDED;
! if (!dest_uninitialized) {
! flags |= ShenandoahHeap::MARKING;
}
__ testb(gc_state, flags);
__ jcc(Assembler::zero, done);
__ pusha(); // push registers
--- 77,91 ----
__ testptr(count, count);
__ jcc(Assembler::zero, done);
// Avoid runtime call when not active.
Address gc_state(thread, in_bytes(ShenandoahThreadLocalData::gc_state_offset()));
! int flags;
! if (ShenandoahSATBBarrier && dest_uninitialized) {
! flags = ShenandoahHeap::HAS_FORWARDED;
! } else {
! flags = ShenandoahHeap::HAS_FORWARDED | ShenandoahHeap::MARKING;
}
__ testb(gc_state, flags);
__ jcc(Assembler::zero, done);
__ pusha(); // push registers
< prev index next >