< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp

Print this page
rev 56289 : 8231086: Shenandoah: Stronger invariant for object-arraycopy

*** 20,48 **** * questions. * */ #include "precompiled.hpp" ! #include "gc/shenandoah/shenandoahBarrierSet.hpp" #include "gc/shenandoah/shenandoahRuntime.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "oops/oop.inline.hpp" ! void ShenandoahRuntime::write_ref_array_pre_oop_entry(oop* dst, size_t length) { ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->write_ref_array_pre(dst, length, false); } ! void ShenandoahRuntime::write_ref_array_pre_narrow_oop_entry(narrowOop* dst, size_t length) { ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->write_ref_array_pre(dst, length, false); } ! void ShenandoahRuntime::write_ref_array_post_entry(HeapWord* dst, size_t length) { ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->ShenandoahBarrierSet::write_ref_array(dst, length); } // Shenandoah pre write barrier slowpath JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre_entry(oopDesc* orig, JavaThread *thread)) if (orig == NULL) { --- 20,53 ---- * questions. * */ #include "precompiled.hpp" ! #include "gc/shenandoah/shenandoahBarrierSet.inline.hpp" #include "gc/shenandoah/shenandoahRuntime.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "oops/oop.inline.hpp" ! void ShenandoahRuntime::write_ref_array_pre_oop_entry(oop* src, oop* dst, size_t length) { ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->arraycopy_pre(src, dst, length); } ! void ShenandoahRuntime::write_ref_array_pre_narrow_oop_entry(narrowOop* src, narrowOop* dst, size_t length) { ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->arraycopy_pre(src, dst, length); } ! void ShenandoahRuntime::write_ref_array_pre_duinit_oop_entry(oop* src, oop* dst, size_t length) { ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->arraycopy_update(src, length); ! } ! ! void ShenandoahRuntime::write_ref_array_pre_duinit_narrow_oop_entry(narrowOop* src, narrowOop* dst, size_t length) { ! ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set(); ! bs->arraycopy_update(src, length); } // Shenandoah pre write barrier slowpath JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre_entry(oopDesc* orig, JavaThread *thread)) if (orig == NULL) {
*** 60,71 **** return (oopDesc*) result; JRT_END // Shenandoah clone barrier: makes sure that references point to to-space // in cloned objects. ! JRT_LEAF(void, ShenandoahRuntime::shenandoah_clone_barrier(oopDesc* obj)) ! ShenandoahBarrierSet::barrier_set()->write_region(MemRegion((HeapWord*) obj, obj->size())); JRT_END JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_native(oopDesc * src)) return (oopDesc*) ShenandoahBarrierSet::barrier_set()->oop_load_from_native_barrier(oop(src)); JRT_END --- 65,81 ---- return (oopDesc*) result; JRT_END // Shenandoah clone barrier: makes sure that references point to to-space // in cloned objects. ! JRT_LEAF(void, ShenandoahRuntime::shenandoah_clone_barrier(oopDesc* s, oopDesc* d, size_t length)) ! oop src = oop(s); ! oop dst = oop(d); ! shenandoah_assert_correct(NULL, src); ! shenandoah_assert_correct(NULL, dst); ! ShenandoahBarrierSet::barrier_set()->clone_barrier(src); ! RawAccessBarrier<IS_NOT_NULL>::clone(src, dst, length); JRT_END JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_native(oopDesc * src)) return (oopDesc*) ShenandoahBarrierSet::barrier_set()->oop_load_from_native_barrier(oop(src)); JRT_END
< prev index next >