21#include "../all_atomic_load_store.h"
24#include "../ordered_except_wr.h"
27#include "../test_and_set_t_is_char.h"
33 __asm__ __volatile__(
"ldstub %1,%0"
34 :
"=r"(oldval),
"=m"(*addr)
35 :
"m"(*addr) :
"memory");
38#define AO_HAVE_test_and_set_full
42# ifndef AO_GENERALIZE_ASM_BOOL_CAS
47 __asm__ __volatile__ (
"membar #StoreLoad | #LoadLoad\n\t"
48#
if defined(__arch64__)
53 "membar #StoreLoad | #StoreStore\n\t"
59 :
"=r" (ret),
"+r" (new_val)
60 :
"r" (addr),
"0" (old)
64# define AO_HAVE_compare_and_swap_full
69 __asm__ __volatile__ (
"membar #StoreLoad | #LoadLoad\n\t"
70#
if defined(__arch64__)
75 "membar #StoreLoad | #StoreStore\n\t"
77 :
"r" (addr),
"r" (old)
81#define AO_HAVE_fetch_compare_and_swap_full
#define AO_fetch_compare_and_swap_full(addr, old, newval)
AO_INLINE int AO_compare_and_swap_full(volatile AO_t *addr, AO_t old, AO_t new_val)
AO_INLINE AO_TS_VAL_t AO_test_and_set_full(volatile AO_TS_t *addr)