From c8f1fc9d94f9c311d382833c3393f12c1acb1991 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Tue, 8 Jun 2021 12:48:43 +0100 Subject: cheri: Implement 128-bit atomics Arm Morello requires 128-bit atomics. --- sysdeps/aarch64/atomic-machine.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'sysdeps/aarch64/atomic-machine.h') diff --git a/sysdeps/aarch64/atomic-machine.h b/sysdeps/aarch64/atomic-machine.h index 52b3fb2047..14e9481392 100644 --- a/sysdeps/aarch64/atomic-machine.h +++ b/sysdeps/aarch64/atomic-machine.h @@ -54,6 +54,13 @@ model, __ATOMIC_RELAXED); \ }) +# define __arch_compare_and_exchange_bool_128_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + # define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \ ({ \ typeof (*mem) __oldval = (oldval); \ @@ -86,6 +93,14 @@ __oldval; \ }) +# define __arch_compare_and_exchange_val_128_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + __oldval; \ + }) + /* Compare and exchange with "acquire" semantics, ie barrier after. */ @@ -118,6 +133,9 @@ # define __arch_exchange_64_int(mem, newval, model) \ __atomic_exchange_n (mem, newval, model) +# define __arch_exchange_128_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + # define atomic_exchange_acq(mem, value) \ __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE) @@ -139,6 +157,9 @@ # define __arch_exchange_and_add_64_int(mem, value, model) \ __atomic_fetch_add (mem, value, model) +# define __arch_exchange_and_add_128_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + # define atomic_exchange_and_add_acq(mem, value) \ __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ __ATOMIC_ACQUIRE) -- cgit 1.4.1