diff options
author | Mark Whiting <khameleon.fadingaway@gmail.com> | 2015-12-14 15:08:05 -0600 |
---|---|---|
committer | Mark Whiting <khameleon.fadingaway@gmail.com> | 2015-12-14 15:08:05 -0600 |
commit | fd1c289886c341af4426873a7214067c245e4bbe (patch) | |
tree | 4a4a5c9a13d7d5e7c1e27c1537b7338818e41086 /src/google | |
parent | dc633398af5c87e1fe1ffcedaebd697c4775c918 (diff) | |
download | protobuf-fd1c289886c341af4426873a7214067c245e4bbe.tar.gz protobuf-fd1c289886c341af4426873a7214067c245e4bbe.tar.bz2 protobuf-fd1c289886c341af4426873a7214067c245e4bbe.zip |
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')
-rw-r--r-- | src/google/protobuf/stubs/atomicops_internals_generic_gcc.h | 18 |
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 |