src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp
changeset 58218 0d7877278adf
parent 55679 aa96c53c592b
child 58219 bc0648405d67
equal deleted inserted replaced
58217:b1a394e15ae9 58218:0d7877278adf
    20  * questions.
    20  * questions.
    21  *
    21  *
    22  */
    22  */
    23 
    23 
    24 #include "precompiled.hpp"
    24 #include "precompiled.hpp"
    25 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
    25 #include "gc/shenandoah/shenandoahBarrierSet.inline.hpp"
    26 #include "gc/shenandoah/shenandoahRuntime.hpp"
    26 #include "gc/shenandoah/shenandoahRuntime.hpp"
    27 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
    27 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
    28 #include "runtime/interfaceSupport.inline.hpp"
    28 #include "runtime/interfaceSupport.inline.hpp"
    29 #include "oops/oop.inline.hpp"
    29 #include "oops/oop.inline.hpp"
    30 
    30 
    31 void ShenandoahRuntime::write_ref_array_pre_oop_entry(oop* dst, size_t length) {
    31 void ShenandoahRuntime::write_ref_array_pre_oop_entry(oop* src, oop* dst, size_t length) {
    32   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
    32   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
    33   bs->write_ref_array_pre(dst, length, false);
    33   bs->arraycopy_pre(src, dst, length);
    34 }
    34 }
    35 
    35 
    36 void ShenandoahRuntime::write_ref_array_pre_narrow_oop_entry(narrowOop* dst, size_t length) {
    36 void ShenandoahRuntime::write_ref_array_pre_narrow_oop_entry(narrowOop* src, narrowOop* dst, size_t length) {
    37   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
    37   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
    38   bs->write_ref_array_pre(dst, length, false);
    38   bs->arraycopy_pre(src, dst, length);
    39 }
    39 }
    40 
    40 
    41 void ShenandoahRuntime::write_ref_array_post_entry(HeapWord* dst, size_t length) {
    41 void ShenandoahRuntime::write_ref_array_pre_duinit_oop_entry(oop* src, oop* dst, size_t length) {
    42   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
    42   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
    43   bs->ShenandoahBarrierSet::write_ref_array(dst, length);
    43   bs->arraycopy_update(src, length);
       
    44 }
       
    45 
       
    46 void ShenandoahRuntime::write_ref_array_pre_duinit_narrow_oop_entry(narrowOop* src, narrowOop* dst, size_t length) {
       
    47   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
       
    48   bs->arraycopy_update(src, length);
    44 }
    49 }
    45 
    50 
    46 // Shenandoah pre write barrier slowpath
    51 // Shenandoah pre write barrier slowpath
    47 JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre_entry(oopDesc* orig, JavaThread *thread))
    52 JRT_LEAF(void, ShenandoahRuntime::write_ref_field_pre_entry(oopDesc* orig, JavaThread *thread))
    48   if (orig == NULL) {
    53   if (orig == NULL) {
    60   return (oopDesc*) result;
    65   return (oopDesc*) result;
    61 JRT_END
    66 JRT_END
    62 
    67 
    63 // Shenandoah clone barrier: makes sure that references point to to-space
    68 // Shenandoah clone barrier: makes sure that references point to to-space
    64 // in cloned objects.
    69 // in cloned objects.
    65 JRT_LEAF(void, ShenandoahRuntime::shenandoah_clone_barrier(oopDesc* obj))
    70 JRT_LEAF(void, ShenandoahRuntime::shenandoah_clone_barrier(oopDesc* s, oopDesc* d, size_t length))
    66   ShenandoahBarrierSet::barrier_set()->write_region(MemRegion((HeapWord*) obj, obj->size()));
    71   oop src = oop(s);
       
    72   oop dst = oop(d);
       
    73   shenandoah_assert_correct(NULL, src);
       
    74   shenandoah_assert_correct(NULL, dst);
       
    75   ShenandoahBarrierSet::barrier_set()->clone_barrier(src);
       
    76   RawAccessBarrier<IS_NOT_NULL>::clone(src, dst, length);
    67 JRT_END
    77 JRT_END
    68 
    78 
    69 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_native(oopDesc * src))
    79 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_native(oopDesc * src))
    70   return (oopDesc*) ShenandoahBarrierSet::barrier_set()->oop_load_from_native_barrier(oop(src));
    80   return (oopDesc*) ShenandoahBarrierSet::barrier_set()->oop_load_from_native_barrier(oop(src));
    71 JRT_END
    81 JRT_END