@@ -118,7 +118,7 @@ inline T RawAccessBarrier<decorators>::oop_atomic_xchg_at(T new_value, oop base,
118118template <DecoratorSet decorators>
119119template <typename T>
120120inline bool RawAccessBarrier<decorators>::oop_arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
121- return arraycopy (src, dst, length);
121+ return arraycopy (src_obj, dst_obj, src, dst, length);
122122}
123123
124124template <DecoratorSet decorators>
@@ -257,7 +257,7 @@ class RawAccessBarrierArrayCopy: public AllStatic {
257257 template <DecoratorSet decorators, typename T>
258258 static inline typename EnableIf<
259259 HasDecorator<decorators, INTERNAL_VALUE_IS_OOP >::value>::type
260- arraycopy (T* src, T* dst, size_t length) {
260+ arraycopy (arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
261261 // We do not check for ARRAYCOPY_ATOMIC for oops, because they are unconditionally always atomic.
262262 if (HasDecorator<decorators, ARRAYCOPY_ARRAYOF >::value) {
263263 AccessInternal::arraycopy_arrayof_conjoint_oops (src, dst, length);
@@ -271,7 +271,7 @@ class RawAccessBarrierArrayCopy: public AllStatic {
271271 template <DecoratorSet decorators, typename T>
272272 static inline typename EnableIf<
273273 !HasDecorator<decorators, INTERNAL_VALUE_IS_OOP >::value>::type
274- arraycopy (T* src, T* dst, size_t length) {
274+ arraycopy (arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
275275 if (HasDecorator<decorators, ARRAYCOPY_ARRAYOF >::value) {
276276 AccessInternal::arraycopy_arrayof_conjoint (src, dst, length);
277277 } else if (HasDecorator<decorators, ARRAYCOPY_DISJOINT >::value && sizeof (T) == HeapWordSize) {
@@ -289,12 +289,23 @@ class RawAccessBarrierArrayCopy: public AllStatic {
289289 }
290290 }
291291 }
292+
293+ template <DecoratorSet decorators>
294+ static inline typename EnableIf<
295+ !HasDecorator<decorators, INTERNAL_VALUE_IS_OOP >::value>::type
296+ arraycopy (arrayOop src_obj, arrayOop dst_obj, void * src, void * dst, size_t length) {
297+ if (HasDecorator<decorators, ARRAYCOPY_ATOMIC >::value) {
298+ AccessInternal::arraycopy_conjoint_atomic (src, dst, length);
299+ } else {
300+ AccessInternal::arraycopy_conjoint (src, dst, length);
301+ }
302+ }
292303};
293304
294305template <DecoratorSet decorators>
295306template <typename T>
296- inline bool RawAccessBarrier<decorators>::arraycopy(T* src, T* dst, size_t length) {
297- RawAccessBarrierArrayCopy::arraycopy<decorators>(src, dst, length);
307+ inline bool RawAccessBarrier<decorators>::arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
308+ RawAccessBarrierArrayCopy::arraycopy<decorators>(src_obj, dst_obj, src, dst, length);
298309 return true ;
299310}
300311
0 commit comments