33 #ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PNACL_H_ 34 #define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PNACL_H_ 52 static_assert(
sizeof(*(AtomicLocation32)
nullptr) ==
sizeof(
Atomic32),
53 "incompatible 32-bit atomic layout");
56 #if defined(__GLIBCXX__) 59 __atomic_thread_fence(std::memory_order_seq_cst);
61 std::atomic_thread_fence(std::memory_order_seq_cst);
69 ->compare_exchange_strong(old_value,
71 std::memory_order_relaxed,
72 std::memory_order_relaxed);
78 return ((AtomicLocation32)ptr)
79 ->exchange(new_value, std::memory_order_relaxed);
86 ->fetch_add(increment, std::memory_order_relaxed);
98 ->compare_exchange_strong(old_value,
100 std::memory_order_acquire,
101 std::memory_order_acquire);
109 ->compare_exchange_strong(old_value,
111 std::memory_order_release,
112 std::memory_order_relaxed);
130 return ((AtomicLocation32)ptr)->load(std::memory_order_relaxed);
134 return ((AtomicLocation32)ptr)->load(std::memory_order_acquire);
139 return ((AtomicLocation32)ptr)->load(std::memory_order_relaxed);
142 #if defined(GOOGLE_PROTOBUF_ARCH_64_BIT) 144 typedef volatile std::atomic<Atomic64>* AtomicLocation64;
145 static_assert(
sizeof(*(AtomicLocation64)
nullptr) ==
sizeof(Atomic64),
146 "incompatible 64-bit atomic layout");
150 Atomic64 new_value) {
151 ((AtomicLocation64)ptr)
152 ->compare_exchange_strong(old_value,
154 std::memory_order_relaxed,
155 std::memory_order_relaxed);
160 Atomic64 new_value) {
161 return ((AtomicLocation64)ptr)
162 ->exchange(new_value, std::memory_order_relaxed);
166 Atomic64 increment) {
168 ((AtomicLocation64)ptr)
169 ->fetch_add(increment, std::memory_order_relaxed);
173 Atomic64 increment) {
174 return increment + ((AtomicLocation64)ptr)->fetch_add(increment);
179 Atomic64 new_value) {
180 ((AtomicLocation64)ptr)
181 ->compare_exchange_strong(old_value,
183 std::memory_order_acquire,
184 std::memory_order_acquire);
190 Atomic64 new_value) {
191 ((AtomicLocation64)ptr)
192 ->compare_exchange_strong(old_value,
194 std::memory_order_release,
195 std::memory_order_relaxed);
200 ((AtomicLocation64)ptr)->store(value, std::memory_order_relaxed);
203 inline void Acquire_Store(
volatile Atomic64* ptr, Atomic64 value) {
204 ((AtomicLocation64)ptr)->store(value, std::memory_order_relaxed);
208 inline void Release_Store(
volatile Atomic64* ptr, Atomic64 value) {
209 ((AtomicLocation64)ptr)->store(value, std::memory_order_release);
213 return ((AtomicLocation64)ptr)->load(std::memory_order_relaxed);
216 inline Atomic64
Acquire_Load(
volatile const Atomic64* ptr) {
217 return ((AtomicLocation64)ptr)->load(std::memory_order_acquire);
220 inline Atomic64
Release_Load(
volatile const Atomic64* ptr) {
222 return ((AtomicLocation64)ptr)->load(std::memory_order_relaxed);
225 #endif // defined(GOOGLE_PROTOBUF_ARCH_64_BIT) 231 #endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PNACL_H_ Atomic32 Acquire_Load(volatile const Atomic32 *ptr)
Definition: atomicops_internals_arm64_gcc.h:167
void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value)
Definition: atomicops_internals_arm64_gcc.h:149
Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Definition: atomicops_internals_arm64_gcc.h:52
volatile std::atomic< Atomic32 > * AtomicLocation32
Definition: atomicops_internals_pnacl.h:51
void Release_Store(volatile Atomic32 *ptr, Atomic32 value)
Definition: atomicops_internals_arm64_gcc.h:154
EGLAttrib * value
Definition: eglext.h:120
Definition: __init__.py:1
Atomic32 Release_Load(volatile const Atomic32 *ptr)
Definition: atomicops_internals_arm64_gcc.h:180
Definition: document.h:393
Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Definition: atomicops_internals_arm64_gcc.h:136
Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr, Atomic32 increment)
Definition: atomicops_internals_arm64_gcc.h:118
Definition: gflags_completions.h:115
Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, Atomic32 increment)
Definition: atomicops_internals_arm64_gcc.h:97
int32 Atomic32
Definition: atomicops.h:75
Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr, Atomic32 new_value)
Definition: atomicops_internals_arm64_gcc.h:77
void NoBarrier_Store(volatile Atomic32 *ptr, Atomic32 value)
Definition: atomicops_internals_arm64_gcc.h:145
Atomic32 NoBarrier_Load(volatile const Atomic32 *ptr)
Definition: atomicops_internals_arm64_gcc.h:163
Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Definition: atomicops_internals_arm64_gcc.h:127
void MemoryBarrier()
Definition: atomicops_internals_arm64_gcc.h:40