Lines Matching refs:addr
61 // Reads the 64-bit value at "addr" without tearing.
62 static int64_t Read64(volatile const int64_t* addr) {
66 value = *addr;
74 : "m" (*addr));
80 : "Q" (*addr));
86 : "m" (*addr));
93 return SwapMutexRead64(addr);
97 // Writes to the 64-bit value at "addr" without tearing.
98 static void Write64(volatile int64_t* addr, int64_t value) {
101 *addr = value;
108 : "=m"(*addr)
118 : "=&r" (prev), "=&r" (status), "+Q"(*addr)
126 : "=m" (*addr)
133 SwapMutexWrite64(addr, value);
137 // Atomically compare the value at "addr" to "old_value", if equal replace it with "new_value"
142 // at some point during the execution of Cas64, *addr was not equal to
144 static bool Cas64(int64_t old_value, int64_t new_value, volatile int64_t* addr) {
146 return __sync_bool_compare_and_swap(addr, old_value, new_value);
148 return SwapMutexCas64(old_value, new_value, addr);
178 static Mutex* GetSwapMutex(const volatile int64_t* addr);
179 static int64_t SwapMutexRead64(volatile const int64_t* addr);
180 static void SwapMutexWrite64(volatile int64_t* addr, int64_t val);
181 static bool SwapMutexCas64(int64_t old_value, int64_t new_value, volatile int64_t* addr);