src/hotspot/os_cpu/linux_aarch64/orderAccess_linux_aarch64.hpp
changeset 59247 56bf71d64d51
parent 59122 5d73255c2d52
equal deleted inserted replaced
59246:fcad92f425c5 59247:56bf71d64d51
    35 inline void OrderAccess::loadload()   { acquire(); }
    35 inline void OrderAccess::loadload()   { acquire(); }
    36 inline void OrderAccess::storestore() { release(); }
    36 inline void OrderAccess::storestore() { release(); }
    37 inline void OrderAccess::loadstore()  { acquire(); }
    37 inline void OrderAccess::loadstore()  { acquire(); }
    38 inline void OrderAccess::storeload()  { fence(); }
    38 inline void OrderAccess::storeload()  { fence(); }
    39 
    39 
       
    40 #define FULL_MEM_BARRIER  __sync_synchronize()
       
    41 #define READ_MEM_BARRIER  __atomic_thread_fence(__ATOMIC_ACQUIRE);
       
    42 #define WRITE_MEM_BARRIER __atomic_thread_fence(__ATOMIC_RELEASE);
       
    43 
    40 inline void OrderAccess::acquire() {
    44 inline void OrderAccess::acquire() {
    41   READ_MEM_BARRIER;
    45   READ_MEM_BARRIER;
    42 }
    46 }
    43 
    47 
    44 inline void OrderAccess::release() {
    48 inline void OrderAccess::release() {
    49   FULL_MEM_BARRIER;
    53   FULL_MEM_BARRIER;
    50 }
    54 }
    51 
    55 
    52 inline void OrderAccess::cross_modify_fence() { }
    56 inline void OrderAccess::cross_modify_fence() { }
    53 
    57 
    54 template<size_t byte_size>
       
    55 struct OrderAccess::PlatformOrderedLoad<byte_size, X_ACQUIRE>
       
    56 {
       
    57   template <typename T>
       
    58   T operator()(const volatile T* p) const { T data; __atomic_load(const_cast<T*>(p), &data, __ATOMIC_ACQUIRE); return data; }
       
    59 };
       
    60 
       
    61 template<size_t byte_size>
       
    62 struct OrderAccess::PlatformOrderedStore<byte_size, RELEASE_X>
       
    63 {
       
    64   template <typename T>
       
    65   void operator()(T v, volatile T* p) const { __atomic_store(const_cast<T*>(p), &v, __ATOMIC_RELEASE); }
       
    66 };
       
    67 
       
    68 template<size_t byte_size>
       
    69 struct OrderAccess::PlatformOrderedStore<byte_size, RELEASE_X_FENCE>
       
    70 {
       
    71   template <typename T>
       
    72   void operator()(T v, volatile T* p) const { release_store(p, v); fence(); }
       
    73 };
       
    74 
       
    75 #endif // OS_CPU_LINUX_AARCH64_ORDERACCESS_LINUX_AARCH64_HPP
    58 #endif // OS_CPU_LINUX_AARCH64_ORDERACCESS_LINUX_AARCH64_HPP