37 template<> inline void ScopedFenceGeneral<RELEASE_X_FENCE>::postfix() { OrderAccess::fence(); } 38 39 40 template <typename FieldType, ScopedFenceType FenceType> 41 inline void OrderAccess::ordered_store(volatile FieldType* p, FieldType v) { 42 ScopedFence<FenceType> f((void*)p); 43 Atomic::store(v, p); 44 } 45 46 template <typename FieldType, ScopedFenceType FenceType> 47 inline FieldType OrderAccess::ordered_load(const volatile FieldType* p) { 48 ScopedFence<FenceType> f((void*)p); 49 return Atomic::load(p); 50 } 51 52 template <typename T> 53 inline T OrderAccess::load_acquire(const volatile T* p) { 54 return LoadImpl<T, PlatformOrderedLoad<sizeof(T), X_ACQUIRE> >()(p); 55 } 56 57 inline intptr_t OrderAccess::load_ptr_acquire(const volatile intptr_t* p) { 58 return load_acquire(p); 59 } 60 61 inline void* OrderAccess::load_ptr_acquire(const volatile void* p) { 62 return load_acquire(static_cast<void* const volatile *>(p)); 63 } 64 65 template <typename T, typename D> 66 inline void OrderAccess::release_store(volatile D* p, T v) { 67 StoreImpl<T, D, PlatformOrderedStore<sizeof(D), RELEASE_X> >()(v, p); 68 } 69 70 inline void OrderAccess::release_store_ptr(volatile intptr_t* p, intptr_t v) { release_store(p, v); } 71 inline void OrderAccess::release_store_ptr(volatile void* p, void* v) { release_store(static_cast<void* volatile*>(p), v); } 72 73 template <typename T, typename D> 74 inline void OrderAccess::release_store_fence(volatile D* p, T v) { 75 StoreImpl<T, D, PlatformOrderedStore<sizeof(D), RELEASE_X_FENCE> >()(v, p); 76 } 77 78 inline void OrderAccess::release_store_ptr_fence(volatile intptr_t* p, intptr_t v) { release_store_fence(p, v); } 79 inline void OrderAccess::release_store_ptr_fence(volatile void* p, void* v) { release_store_fence(static_cast<void* volatile*>(p), v); } 80 81 #endif // SHARE_VM_RUNTIME_ORDERACCESS_INLINE_HPP | 37 template<> inline void ScopedFenceGeneral<RELEASE_X_FENCE>::postfix() { OrderAccess::fence(); } 38 39 40 template <typename FieldType, ScopedFenceType FenceType> 41 inline void OrderAccess::ordered_store(volatile FieldType* p, FieldType v) { 42 ScopedFence<FenceType> f((void*)p); 43 Atomic::store(v, p); 44 } 45 46 template <typename FieldType, ScopedFenceType FenceType> 47 inline FieldType OrderAccess::ordered_load(const volatile FieldType* p) { 48 ScopedFence<FenceType> f((void*)p); 49 return Atomic::load(p); 50 } 51 52 template <typename T> 53 inline T OrderAccess::load_acquire(const volatile T* p) { 54 return LoadImpl<T, PlatformOrderedLoad<sizeof(T), X_ACQUIRE> >()(p); 55 } 56 57 template <typename T, typename D> 58 inline void OrderAccess::release_store(volatile D* p, T v) { 59 StoreImpl<T, D, PlatformOrderedStore<sizeof(D), RELEASE_X> >()(v, p); 60 } 61 62 template <typename T, typename D> 63 inline void OrderAccess::release_store_fence(volatile D* p, T v) { 64 StoreImpl<T, D, PlatformOrderedStore<sizeof(D), RELEASE_X_FENCE> >()(v, p); 65 } 66 #endif // SHARE_VM_RUNTIME_ORDERACCESS_INLINE_HPP |