[PATCH 5/5] x86: Define atomic_compare_and_exchange_{val,bool}_acq using __atomic_compare_exchange_n

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Tue Sep 9 13:01:55 GMT 2025



On 08/09/25 09:38, Uros Bizjak wrote:
> No functional changes.
> 
> Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
> Cc: Florian Weimer <fweimer@redhat.com>
> Cc: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
> Cc: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
> Cc: Collin Funk <collin.funk1@gmail.com>
> Cc: H.J.Lu <hjl.tools@gmail.com>
> Cc: Carlos O'Donell <carlos@redhat.com>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/x86/atomic-machine.h | 18 ++++++++++++++----
>  1 file changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/sysdeps/x86/atomic-machine.h b/sysdeps/x86/atomic-machine.h
> index ebe8e978e5..d055364ddd 100644
> --- a/sysdeps/x86/atomic-machine.h
> +++ b/sysdeps/x86/atomic-machine.h
> @@ -33,10 +33,20 @@
>  
>  #define ATOMIC_EXCHANGE_USES_CAS	0
>  
> -#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
> -  __sync_val_compare_and_swap (mem, oldval, newval)
> -#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
> -  (! __sync_bool_compare_and_swap (mem, oldval, newval))
> +#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)	\
> +  ({									\
> +    typeof (*mem) __oldval = (oldval);					\
> +    __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0,	\
> +				 __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);	\
> +    __oldval;								\
> +  })
> +
> +#define atomic_compare_and_exchange_bool_acq(mem, newval, oldval)	\
> +  ({									\
> +    typeof (*mem) __oldval = (oldval);					\
> +    !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0,	\
> +				  __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);	\
> +  })
>  
>  #define atomic_exchange_acq(mem, newvalue) \
>    __atomic_exchange_n (mem, newvalue, __ATOMIC_ACQUIRE)




More information about the Libc-alpha mailing list