equal
deleted
inserted
replaced
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 |