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

Uros Bizjak ubizjak@gmail.com
Mon Sep 8 12:38:23 GMT 2025


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>
---
 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)
-- 
2.51.0



More information about the Libc-alpha mailing list