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