diff options
| author | Uros Bizjak <ubizjak@gmail.com> | 2025-09-08 14:38:23 +0200 |
|---|---|---|
| committer | H.J. Lu <hjl.tools@gmail.com> | 2025-09-09 07:58:52 -0700 |
| commit | b8253693b79fc9242f73aee7ffd75b5e9a4092f5 (patch) | |
| tree | 3787acc47cae860ac29f591324d3c1d10f4e78b0 | |
| parent | 935ee691bce7aa8c957714deea4868e5aefb52c9 (diff) | |
x86: Define atomic_compare_and_exchange_{val, bool}_acq using __atomic_compare_exchange_n
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>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
| -rw-r--r-- | sysdeps/x86/atomic-machine.h | 18 |
1 files 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) |
