diff --git a/arch/aarch64/atomic_arch.h b/arch/aarch64/atomic_arch.h index 40fefc25..c01a3ab3 100644 --- a/arch/aarch64/atomic_arch.h +++ b/arch/aarch64/atomic_arch.h @@ -2,7 +2,7 @@ static inline int a_ll(volatile int *p) { int v; - __asm__ __volatile__ ("ldaxr %w0,%1" : "=r"(v) : "Q"(*p)); + __asm__ __volatile__ ("ldxr %w0,%1" : "=r"(v) : "Q"(*p)); return v; } @@ -20,25 +20,13 @@ static inline void a_barrier() __asm__ __volatile__ ("dmb ish" : : : "memory"); } -#define a_cas a_cas -static inline int a_cas(volatile int *p, int t, int s) -{ - int old; - do { - old = a_ll(p); - if (old != t) { - a_barrier(); - break; - } - } while (!a_sc(p, s)); - return old; -} +#define a_post_llsc a_barrier #define a_ll_p a_ll_p static inline void *a_ll_p(volatile void *p) { void *v; - __asm__ __volatile__ ("ldaxr %0, %1" : "=r"(v) : "Q"(*(void *volatile *)p)); + __asm__ __volatile__ ("ldxr %0, %1" : "=r"(v) : "Q"(*(void *volatile *)p)); return v; } @@ -50,20 +38,6 @@ static inline int a_sc_p(volatile int *p, void *v) return !r; } -#define a_cas_p a_cas_p -static inline void *a_cas_p(volatile void *p, void *t, void *s) -{ - void *old; - do { - old = a_ll_p(p); - if (old != t) { - a_barrier(); - break; - } - } while (!a_sc_p(p, s)); - return old; -} - #define a_ctz_64 a_ctz_64 static inline int a_ctz_64(uint64_t x) {