--- old/src/hotspot/share/runtime/orderAccess.hpp 2018-06-04 20:53:30.345996533 -0400 +++ new/src/hotspot/share/runtime/orderAccess.hpp 2018-06-04 20:53:29.974962138 -0400 @@ -27,6 +27,7 @@ #include "memory/allocation.hpp" #include "runtime/atomic.hpp" +#include "utilities/macros.hpp" // Memory Access Ordering Model // @@ -311,4 +312,38 @@ } }; +#include OS_CPU_HEADER(orderAccess) + +template<> inline void ScopedFenceGeneral::postfix() { OrderAccess::acquire(); } +template<> inline void ScopedFenceGeneral::prefix() { OrderAccess::release(); } +template<> inline void ScopedFenceGeneral::prefix() { OrderAccess::release(); } +template<> inline void ScopedFenceGeneral::postfix() { OrderAccess::fence(); } + + +template +inline void OrderAccess::ordered_store(volatile FieldType* p, FieldType v) { + ScopedFence f((void*)p); + Atomic::store(v, p); +} + +template +inline FieldType OrderAccess::ordered_load(const volatile FieldType* p) { + ScopedFence f((void*)p); + return Atomic::load(p); +} + +template +inline T OrderAccess::load_acquire(const volatile T* p) { + return LoadImpl >()(p); +} + +template +inline void OrderAccess::release_store(volatile D* p, T v) { + StoreImpl >()(v, p); +} + +template +inline void OrderAccess::release_store_fence(volatile D* p, T v) { + StoreImpl >()(v, p); +} #endif // SHARE_VM_RUNTIME_ORDERACCESS_HPP