7 #ifndef V8_BASE_ATOMICOPS_INTERNALS_MAC_H_
8 #define V8_BASE_ATOMICOPS_INTERNALS_MAC_H_
10 #include <libkern/OSAtomic.h>
20 if (OSAtomicCompareAndSwap32(old_value, new_value,
25 }
while (prev_value == old_value);
34 }
while (!OSAtomicCompareAndSwap32(old_value, new_value,
41 return OSAtomicAdd32(increment,
const_cast<Atomic32*
>(ptr));
46 return OSAtomicAdd32Barrier(increment,
const_cast<Atomic32*
>(ptr));
58 if (OSAtomicCompareAndSwap32Barrier(old_value, new_value,
63 }
while (prev_value == old_value);
116 Atomic64 new_value) {
119 if (OSAtomicCompareAndSwap64(old_value, new_value,
120 reinterpret_cast<volatile int64_t*
>(ptr))) {
124 }
while (prev_value == old_value);
129 Atomic64 new_value) {
133 }
while (!OSAtomicCompareAndSwap64(old_value, new_value,
134 reinterpret_cast<volatile int64_t*
>(ptr)));
139 Atomic64 increment) {
140 return OSAtomicAdd64(increment,
reinterpret_cast<volatile int64_t*
>(ptr));
144 Atomic64 increment) {
145 return OSAtomicAdd64Barrier(increment,
146 reinterpret_cast<volatile int64_t*
>(ptr));
151 Atomic64 new_value) {
154 if (OSAtomicCompareAndSwap64Barrier(
155 old_value, new_value,
reinterpret_cast<volatile int64_t*
>(ptr))) {
159 }
while (prev_value == old_value);
165 Atomic64 new_value) {
175 inline void Acquire_Store(
volatile Atomic64* ptr, Atomic64 value) {
180 inline void Release_Store(
volatile Atomic64* ptr, Atomic64 value) {
189 inline Atomic64
Acquire_Load(
volatile const Atomic64* ptr) {
190 Atomic64 value = *ptr;
195 inline Atomic64
Release_Load(
volatile const Atomic64* ptr) {
Atomic32 Release_Load(volatile const Atomic32 *ptr)
Atomic32 NoBarrier_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
void Acquire_Store(volatile Atomic32 *ptr, Atomic32 value)
Atomic32 Acquire_Load(volatile const Atomic32 *ptr)
Atomic32 NoBarrier_AtomicIncrement(volatile Atomic32 *ptr, Atomic32 increment)
void Release_Store(volatile Atomic32 *ptr, Atomic32 value)
Atomic32 Barrier_AtomicIncrement(volatile Atomic32 *ptr, Atomic32 increment)
void NoBarrier_Store(volatile Atomic8 *ptr, Atomic8 value)
Atomic32 NoBarrier_AtomicExchange(volatile Atomic32 *ptr, Atomic32 new_value)
Atomic32 Release_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Atomic8 NoBarrier_Load(volatile const Atomic8 *ptr)
Atomic32 Acquire_CompareAndSwap(volatile Atomic32 *ptr, Atomic32 old_value, Atomic32 new_value)
Debugger support for the V8 JavaScript engine.