aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
diff options
context:
space:
mode:
authorGravatar Mark Whiting <khameleon.fadingaway@gmail.com>2015-12-14 15:08:05 -0600
committerGravatar Mark Whiting <khameleon.fadingaway@gmail.com>2015-12-14 15:08:05 -0600
commitfd1c289886c341af4426873a7214067c245e4bbe (patch)
tree4a4a5c9a13d7d5e7c1e27c1537b7338818e41086 /src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
parentdc633398af5c87e1fe1ffcedaebd697c4775c918 (diff)
Adding missing generic gcc 64-bit atomicops.
When building for 64-bit big endian MIPS I was getting undefined references to the following four functions during linking. NoBarrier_AtomicIncrement NoBarrier_Store NoBarrier_AtomicExchange NoBarrier_Load Adding 64-bit versions of them to atomicops_internals_generic_gcc.h fixed the compilation issues.
Diffstat (limited to 'src/google/protobuf/stubs/atomicops_internals_generic_gcc.h')
-rw-r--r--src/google/protobuf/stubs/atomicops_internals_generic_gcc.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h b/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
index a0116a60..7314ee4f 100644
--- a/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
+++ b/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
@@ -128,6 +128,24 @@ inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,
return old_value;
}
+inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr,
+ Atomic64 increment) {
+ return __atomic_add_fetch(ptr, increment, __ATOMIC_RELAXED);
+}
+
+inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) {
+ __atomic_store_n(ptr, value, __ATOMIC_RELAXED);
+}
+
+inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr,
+ Atomic64 new_value) {
+ return __atomic_exchange_n(ptr, new_value, __ATOMIC_RELAXED);
+}
+
+inline Atomic64 NoBarrier_Load(volatile const Atomic64* ptr) {
+ return __atomic_load_n(ptr, __ATOMIC_RELAXED);
+}
+
#endif // defined(__LP64__)
} // namespace internal