102 typedef bool (*arraycopy_func_t)(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length); |
102 typedef bool (*arraycopy_func_t)(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length); |
103 typedef void (*clone_func_t)(oop src, oop dst, size_t size); |
103 typedef void (*clone_func_t)(oop src, oop dst, size_t size); |
104 typedef oop (*resolve_func_t)(oop obj); |
104 typedef oop (*resolve_func_t)(oop obj); |
105 }; |
105 }; |
106 |
106 |
|
107 template <DecoratorSet decorators> |
|
108 struct AccessFunctionTypes<decorators, void> { |
|
109 typedef bool (*arraycopy_func_t)(arrayOop src_obj, arrayOop dst_obj, void* src, void* dst, size_t length); |
|
110 }; |
|
111 |
107 template <DecoratorSet decorators, typename T, BarrierType barrier> struct AccessFunction {}; |
112 template <DecoratorSet decorators, typename T, BarrierType barrier> struct AccessFunction {}; |
108 |
113 |
109 #define ACCESS_GENERATE_ACCESS_FUNCTION(bt, func) \ |
114 #define ACCESS_GENERATE_ACCESS_FUNCTION(bt, func) \ |
110 template <DecoratorSet decorators, typename T> \ |
115 template <DecoratorSet decorators, typename T> \ |
111 struct AccessFunction<decorators, T, bt>: AllStatic{ \ |
116 struct AccessFunction<decorators, T, bt>: AllStatic{ \ |
333 static inline T atomic_xchg(T new_value, void* addr) { |
338 static inline T atomic_xchg(T new_value, void* addr) { |
334 return atomic_xchg_maybe_locked<decorators>(new_value, addr); |
339 return atomic_xchg_maybe_locked<decorators>(new_value, addr); |
335 } |
340 } |
336 |
341 |
337 template <typename T> |
342 template <typename T> |
338 static bool arraycopy(T* src, T* dst, size_t length); |
343 static bool arraycopy(arrayOop src_obj, arrayOop dst_obj, T* src, T* dst, size_t length); |
339 |
344 |
340 template <typename T> |
345 template <typename T> |
341 static void oop_store(void* addr, T value); |
346 static void oop_store(void* addr, T value); |
342 template <typename T> |
347 template <typename T> |
343 static void oop_store_at(oop base, ptrdiff_t offset, T value); |
348 static void oop_store_at(oop base, ptrdiff_t offset, T value); |