< 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 >