src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp
changeset 58339 c7d9df2e470c
parent 58334 f642ad5c655f
child 58405 752bf4d5fbb7
--- a/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp	Wed Sep 25 09:37:18 2019 -0700
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRuntime.cpp	Wed Sep 25 12:21:10 2019 +0200
@@ -28,6 +28,7 @@
 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
 #include "runtime/interfaceSupport.inline.hpp"
 #include "oops/oop.inline.hpp"
+#include "utilities/copy.hpp"
 
 void ShenandoahRuntime::write_ref_array_pre_oop_entry(oop* src, oop* dst, size_t length) {
   ShenandoahBarrierSet *bs = ShenandoahBarrierSet::barrier_set();
@@ -75,13 +76,13 @@
 
 // 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_LEAF(void, ShenandoahRuntime::shenandoah_clone_barrier(oopDesc* src, void* src_ptr, void* dst_ptr, size_t length))
+  oop s = oop(src);
+  shenandoah_assert_correct(NULL, s);
+  ShenandoahBarrierSet::barrier_set()->clone_barrier(s);
+  Copy::conjoint_jlongs_atomic(reinterpret_cast<jlong*>(src_ptr),
+                               reinterpret_cast<jlong*>(dst_ptr),
+                               length);
 JRT_END
 
 JRT_LEAF(oopDesc*, ShenandoahRuntime::load_reference_barrier_native(oopDesc * src))