< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp
Print this page
rev 50076 : Fold Partial GC into Traversal GC
*** 134,147 ****
switch (storeval_mode) {
case NONE:
return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, NONE>(src, dst, length, bound);
case READ_BARRIER:
return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, READ_BARRIER>(src, dst, length, bound);
! case WRITE_BARRIER_MAYBE_ENQUEUE:
! return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, WRITE_BARRIER_MAYBE_ENQUEUE>(src, dst, length, bound);
! case WRITE_BARRIER_ALWAYS_ENQUEUE:
! return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, WRITE_BARRIER_ALWAYS_ENQUEUE>(src, dst, length, bound);
default:
ShouldNotReachHere();
return true; // happy compiler
}
}
--- 134,145 ----
switch (storeval_mode) {
case NONE:
return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, NONE>(src, dst, length, bound);
case READ_BARRIER:
return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, READ_BARRIER>(src, dst, length, bound);
! case WRITE_BARRIER:
! return arraycopy_loop<T, CHECKCAST, SATB, MATRIX, WRITE_BARRIER>(src, dst, length, bound);
default:
ShouldNotReachHere();
return true; // happy compiler
}
}
*** 219,247 ****
case NONE:
break;
case READ_BARRIER:
obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
break;
! case WRITE_BARRIER_MAYBE_ENQUEUE:
if (_heap->in_collection_set(obj)) {
oop forw = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
if (oopDesc::unsafe_equals(forw, obj)) {
bool evac;
! forw = _heap->evacuate_object(forw, thread, evac);
! if (evac) {
! enqueue(forw);
! }
! }
! obj = forw;
! }
! break;
! case WRITE_BARRIER_ALWAYS_ENQUEUE:
! if (_heap->in_collection_set(obj)) {
! oop forw = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
! if (oopDesc::unsafe_equals(forw, obj)) {
! bool evac;
! forw = _heap->evacuate_object(forw, thread, evac);
}
obj = forw;
}
enqueue(obj);
break;
--- 217,232 ----
case NONE:
break;
case READ_BARRIER:
obj = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
break;
! case WRITE_BARRIER:
if (_heap->in_collection_set(obj)) {
oop forw = ShenandoahBarrierSet::resolve_forwarded_not_null(obj);
if (oopDesc::unsafe_equals(forw, obj)) {
bool evac;
! forw = _heap->evacuate_object(forw, thread);
}
obj = forw;
}
enqueue(obj);
break;
*** 288,305 ****
size_t dst_offset = pointer_delta((void*) dst, (void*) dst_obj, sizeof(T));
dst_obj = arrayOop(((ShenandoahBarrierSet*) BarrierSet::barrier_set())->write_barrier(dst_obj));
dst = ((T*)(void*) dst_obj) + dst_offset;
}
! bool satb = (ShenandoahSATBBarrier || ShenandoahConditionalSATBBarrier) && heap->is_concurrent_mark_in_progress();
bool checkcast = HasDecorator<decorators, ARRAYCOPY_CHECKCAST>::value;
ArrayCopyStoreValMode storeval_mode;
if (heap->has_forwarded_objects()) {
! if (heap->is_concurrent_partial_in_progress()) {
! storeval_mode = WRITE_BARRIER_MAYBE_ENQUEUE;
! } else if (heap->is_concurrent_traversal_in_progress()) {
! storeval_mode = WRITE_BARRIER_ALWAYS_ENQUEUE;
} else if (heap->is_concurrent_mark_in_progress() || heap->is_update_refs_in_progress()) {
storeval_mode = READ_BARRIER;
} else {
assert(heap->is_idle() || heap->is_evacuation_in_progress(), "must not have anything in progress");
storeval_mode = NONE; // E.g. during evac or outside cycle
--- 273,288 ----
size_t dst_offset = pointer_delta((void*) dst, (void*) dst_obj, sizeof(T));
dst_obj = arrayOop(((ShenandoahBarrierSet*) BarrierSet::barrier_set())->write_barrier(dst_obj));
dst = ((T*)(void*) dst_obj) + dst_offset;
}
! bool satb = ShenandoahSATBBarrier && heap->is_concurrent_mark_in_progress();
bool checkcast = HasDecorator<decorators, ARRAYCOPY_CHECKCAST>::value;
ArrayCopyStoreValMode storeval_mode;
if (heap->has_forwarded_objects()) {
! if (heap->is_concurrent_traversal_in_progress()) {
! storeval_mode = WRITE_BARRIER;
} else if (heap->is_concurrent_mark_in_progress() || heap->is_update_refs_in_progress()) {
storeval_mode = READ_BARRIER;
} else {
assert(heap->is_idle() || heap->is_evacuation_in_progress(), "must not have anything in progress");
storeval_mode = NONE; // E.g. during evac or outside cycle
< prev index next >