mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-16 17:14:41 +02:00
8198285: More consistent Access API for arraycopy
Reviewed-by: eosterlund, shade
This commit is contained in:
parent
9017043b57
commit
482e40cc8c
20 changed files with 357 additions and 149 deletions
|
@ -123,17 +123,23 @@ namespace AccessInternal {
|
|||
template <class GCBarrierType, DecoratorSet decorators>
|
||||
struct PostRuntimeDispatch<GCBarrierType, BARRIER_ARRAYCOPY, decorators>: public AllStatic {
|
||||
template <typename T>
|
||||
static bool access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
|
||||
GCBarrierType::arraycopy_in_heap(src_obj, dst_obj, src, dst, length);
|
||||
static bool access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
|
||||
arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
|
||||
size_t length) {
|
||||
GCBarrierType::arraycopy_in_heap(src_obj, src_offset_in_bytes, src_raw,
|
||||
dst_obj, dst_offset_in_bytes, dst_raw,
|
||||
length);
|
||||
return true;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static bool oop_access_barrier(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length) {
|
||||
static bool oop_access_barrier(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
|
||||
arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
|
||||
size_t length) {
|
||||
typedef typename HeapOopType<decorators>::type OopType;
|
||||
return GCBarrierType::oop_arraycopy_in_heap(src_obj, dst_obj,
|
||||
reinterpret_cast<OopType*>(src),
|
||||
reinterpret_cast<OopType*>(dst), length);
|
||||
return GCBarrierType::oop_arraycopy_in_heap(src_obj, src_offset_in_bytes, reinterpret_cast<OopType*>(src_raw),
|
||||
dst_obj, dst_offset_in_bytes, reinterpret_cast<OopType*>(dst_raw),
|
||||
length);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -337,10 +343,14 @@ namespace AccessInternal {
|
|||
}
|
||||
|
||||
template <DecoratorSet decorators, typename T>
|
||||
bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, arrayOop dst_obj, T *src, T* dst, size_t length) {
|
||||
bool RuntimeDispatch<decorators, T, BARRIER_ARRAYCOPY>::arraycopy_init(arrayOop src_obj, size_t src_offset_in_bytes, T* src_raw,
|
||||
arrayOop dst_obj, size_t dst_offset_in_bytes, T* dst_raw,
|
||||
size_t length) {
|
||||
func_t function = BarrierResolver<decorators, func_t, BARRIER_ARRAYCOPY>::resolve_barrier();
|
||||
_arraycopy_func = function;
|
||||
return function(src_obj, dst_obj, src, dst, length);
|
||||
return function(src_obj, src_offset_in_bytes, src_raw,
|
||||
dst_obj, dst_offset_in_bytes, dst_raw,
|
||||
length);
|
||||
}
|
||||
|
||||
template <DecoratorSet decorators, typename T>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue