| Index: third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h b/third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
|
| index a0116a60ee796b3300bb412ecbe613ab9b307779..0b0b06ce6cf92be8d69b97730595008c19ff84ef 100644
|
| --- a/third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
|
| +++ b/third_party/protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h
|
| @@ -38,7 +38,7 @@ namespace internal {
|
| inline Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32* ptr,
|
| Atomic32 old_value,
|
| Atomic32 new_value) {
|
| - __atomic_compare_exchange_n(ptr, &old_value, new_value, true,
|
| + __atomic_compare_exchange_n(ptr, &old_value, new_value, false,
|
| __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
| return old_value;
|
| }
|
| @@ -61,7 +61,7 @@ inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr,
|
| inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
|
| Atomic32 old_value,
|
| Atomic32 new_value) {
|
| - __atomic_compare_exchange_n(ptr, &old_value, new_value, true,
|
| + __atomic_compare_exchange_n(ptr, &old_value, new_value, false,
|
| __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE);
|
| return old_value;
|
| }
|
| @@ -69,7 +69,7 @@ inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr,
|
| inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr,
|
| Atomic32 old_value,
|
| Atomic32 new_value) {
|
| - __atomic_compare_exchange_n(ptr, &old_value, new_value, true,
|
| + __atomic_compare_exchange_n(ptr, &old_value, new_value, false,
|
| __ATOMIC_RELEASE, __ATOMIC_ACQUIRE);
|
| return old_value;
|
| }
|
| @@ -78,7 +78,7 @@ inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) {
|
| __atomic_store_n(ptr, value, __ATOMIC_RELAXED);
|
| }
|
|
|
| -inline void MemoryBarrier() {
|
| +inline void MemoryBarrierInternal() {
|
| __sync_synchronize();
|
| }
|
|
|
| @@ -115,7 +115,7 @@ inline Atomic64 Acquire_Load(volatile const Atomic64* ptr) {
|
| inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,
|
| Atomic64 old_value,
|
| Atomic64 new_value) {
|
| - __atomic_compare_exchange_n(ptr, &old_value, new_value, true,
|
| + __atomic_compare_exchange_n(ptr, &old_value, new_value, false,
|
| __ATOMIC_ACQUIRE, __ATOMIC_ACQUIRE);
|
| return old_value;
|
| }
|
| @@ -123,11 +123,29 @@ inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr,
|
| inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr,
|
| Atomic64 old_value,
|
| Atomic64 new_value) {
|
| - __atomic_compare_exchange_n(ptr, &old_value, new_value, true,
|
| + __atomic_compare_exchange_n(ptr, &old_value, new_value, false,
|
| __ATOMIC_RELAXED, __ATOMIC_RELAXED);
|
| 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
|
|
|