From fd1c289886c341af4426873a7214067c245e4bbe Mon Sep 17 00:00:00 2001 From: Mark Whiting Date: Mon, 14 Dec 2015 15:08:05 -0600 Subject: 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. --- .../protobuf/stubs/atomicops_internals_generic_gcc.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 -- cgit v1.2.3