| OLD | NEW |
| 1 // Copyright 2014 Google Inc. All rights reserved. | 1 // Copyright 2014 Google Inc. All rights reserved. |
| 2 // https://developers.google.com/protocol-buffers/ | 2 // https://developers.google.com/protocol-buffers/ |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
| 10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, | 47 inline Atomic32 NoBarrier_AtomicExchange(volatile Atomic32* ptr, |
| 48 Atomic32 new_value) { | 48 Atomic32 new_value) { |
| 49 return (Atomic32)atomic_swap_32((volatile uint32_t*)ptr, (uint32_t)new_value); | 49 return (Atomic32)atomic_swap_32((volatile uint32_t*)ptr, (uint32_t)new_value); |
| 50 } | 50 } |
| 51 | 51 |
| 52 inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, | 52 inline Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32* ptr, |
| 53 Atomic32 increment) { | 53 Atomic32 increment) { |
| 54 return (Atomic32)atomic_add_32_nv((volatile uint32_t*)ptr, (uint32_t)increment
); | 54 return (Atomic32)atomic_add_32_nv((volatile uint32_t*)ptr, (uint32_t)increment
); |
| 55 } | 55 } |
| 56 | 56 |
| 57 inline void MemoryBarrier(void) { | 57 inline void MemoryBarrierInternal(void) { |
| 58 membar_producer(); | 58 membar_producer(); |
| 59 membar_consumer(); | 59 membar_consumer(); |
| 60 } | 60 } |
| 61 | 61 |
| 62 inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, | 62 inline Atomic32 Barrier_AtomicIncrement(volatile Atomic32* ptr, |
| 63 Atomic32 increment) { | 63 Atomic32 increment) { |
| 64 MemoryBarrier(); | 64 MemoryBarrierInternal(); |
| 65 Atomic32 ret = NoBarrier_AtomicIncrement(ptr, increment); | 65 Atomic32 ret = NoBarrier_AtomicIncrement(ptr, increment); |
| 66 MemoryBarrier(); | 66 MemoryBarrierInternal(); |
| 67 | 67 |
| 68 return ret; | 68 return ret; |
| 69 } | 69 } |
| 70 | 70 |
| 71 inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, | 71 inline Atomic32 Acquire_CompareAndSwap(volatile Atomic32* ptr, |
| 72 Atomic32 old_value, | 72 Atomic32 old_value, |
| 73 Atomic32 new_value) { | 73 Atomic32 new_value) { |
| 74 Atomic32 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); | 74 Atomic32 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
| 75 MemoryBarrier(); | 75 MemoryBarrierInternal(); |
| 76 | 76 |
| 77 return ret; | 77 return ret; |
| 78 } | 78 } |
| 79 | 79 |
| 80 inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, | 80 inline Atomic32 Release_CompareAndSwap(volatile Atomic32* ptr, |
| 81 Atomic32 old_value, | 81 Atomic32 old_value, |
| 82 Atomic32 new_value) { | 82 Atomic32 new_value) { |
| 83 MemoryBarrier(); | 83 MemoryBarrierInternal(); |
| 84 return NoBarrier_CompareAndSwap(ptr, old_value, new_value); | 84 return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
| 85 } | 85 } |
| 86 | 86 |
| 87 inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { | 87 inline void NoBarrier_Store(volatile Atomic32* ptr, Atomic32 value) { |
| 88 *ptr = value; | 88 *ptr = value; |
| 89 } | 89 } |
| 90 | 90 |
| 91 inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { | 91 inline void Acquire_Store(volatile Atomic32* ptr, Atomic32 value) { |
| 92 *ptr = value; | 92 *ptr = value; |
| 93 membar_producer(); | 93 membar_producer(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 122 | 122 |
| 123 inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_va
lue) { | 123 inline Atomic64 NoBarrier_AtomicExchange(volatile Atomic64* ptr, Atomic64 new_va
lue) { |
| 124 return atomic_swap_64((volatile uint64_t*)ptr, (uint64_t)new_value); | 124 return atomic_swap_64((volatile uint64_t*)ptr, (uint64_t)new_value); |
| 125 } | 125 } |
| 126 | 126 |
| 127 inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 incre
ment) { | 127 inline Atomic64 NoBarrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 incre
ment) { |
| 128 return atomic_add_64_nv((volatile uint64_t*)ptr, increment); | 128 return atomic_add_64_nv((volatile uint64_t*)ptr, increment); |
| 129 } | 129 } |
| 130 | 130 |
| 131 inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increme
nt) { | 131 inline Atomic64 Barrier_AtomicIncrement(volatile Atomic64* ptr, Atomic64 increme
nt) { |
| 132 MemoryBarrier(); | 132 MemoryBarrierInternal(); |
| 133 Atomic64 ret = atomic_add_64_nv((volatile uint64_t*)ptr, increment); | 133 Atomic64 ret = atomic_add_64_nv((volatile uint64_t*)ptr, increment); |
| 134 MemoryBarrier(); | 134 MemoryBarrierInternal(); |
| 135 return ret; | 135 return ret; |
| 136 } | 136 } |
| 137 | 137 |
| 138 inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, | 138 inline Atomic64 Acquire_CompareAndSwap(volatile Atomic64* ptr, |
| 139 Atomic64 old_value, | 139 Atomic64 old_value, |
| 140 Atomic64 new_value) { | 140 Atomic64 new_value) { |
| 141 Atomic64 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); | 141 Atomic64 ret = NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
| 142 MemoryBarrier(); | 142 MemoryBarrierInternal(); |
| 143 return ret; | 143 return ret; |
| 144 } | 144 } |
| 145 | 145 |
| 146 inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, | 146 inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, |
| 147 Atomic64 old_value, | 147 Atomic64 old_value, |
| 148 Atomic64 new_value) { | 148 Atomic64 new_value) { |
| 149 MemoryBarrier(); | 149 MemoryBarrierInternal(); |
| 150 return NoBarrier_CompareAndSwap(ptr, old_value, new_value); | 150 return NoBarrier_CompareAndSwap(ptr, old_value, new_value); |
| 151 } | 151 } |
| 152 | 152 |
| 153 inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { | 153 inline void NoBarrier_Store(volatile Atomic64* ptr, Atomic64 value) { |
| 154 *ptr = value; | 154 *ptr = value; |
| 155 } | 155 } |
| 156 | 156 |
| 157 inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { | 157 inline void Acquire_Store(volatile Atomic64* ptr, Atomic64 value) { |
| 158 *ptr = value; | 158 *ptr = value; |
| 159 membar_producer(); | 159 membar_producer(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 179 return *ptr; | 179 return *ptr; |
| 180 } | 180 } |
| 181 #endif | 181 #endif |
| 182 | 182 |
| 183 } // namespace internal | 183 } // namespace internal |
| 184 } // namespace protobuf | 184 } // namespace protobuf |
| 185 } // namespace google | 185 } // namespace google |
| 186 | 186 |
| 187 #endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_SPARC_GCC_H_ | 187 #endif // GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_SPARC_GCC_H_ |
| 188 | 188 |
| OLD | NEW |