![]() |
|
Message-ID: <20251021003018.GC3520958@port70.net> Date: Tue, 21 Oct 2025 02:30:18 +0200 From: Szabolcs Nagy <nsz@...t70.net> To: Pincheng Wang <pincheng.plct@...c.iscas.ac.cn> Cc: musl@...ts.openwall.com Subject: Re: [PATCH 1/1] riscv: add Zacas extension support for atomic CAS * Pincheng Wang <pincheng.plct@...c.iscas.ac.cn> [2025-09-19 00:47:20 +0800]: > Add compile-time detection for RISC-V Zacas extension and use > amocas.w.aqrl/amocas.d.aqrl instructions when available. > > When __riscv_zacas is defined, a_cas() and a_cas_p() use single amocas > instructions instead of lr/sc loops. Falls back to existing lr/sc > implementation when Zacas is not available. is this a supported extension? are there users? (implemented on existing cpus with released toolchain versions) what cflags enable the extension? (how to test) i can't review if the instructions have the right semantics, but the code looks ok, with some comments below. > > Signed-off-by: Pincheng Wang <pincheng.plct@...c.iscas.ac.cn> > --- > arch/riscv32/atomic_arch.h | 17 +++++++++++++++++ > arch/riscv64/atomic_arch.h | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 47 insertions(+) > > diff --git a/arch/riscv32/atomic_arch.h b/arch/riscv32/atomic_arch.h > index 4d418f63..64ef05b7 100644 > --- a/arch/riscv32/atomic_arch.h > +++ b/arch/riscv32/atomic_arch.h > } > +#ifdef __riscv_zacas newline before #ifdef > +#else /* Fallback to lr/sc when Zacas is not available */ ... > +#endif /* __riscv_zacas */ > \ No newline at end of file newline after endif i think ifdef comments are not needed in such a simple file. > +++ b/arch/riscv64/atomic_arch.h > @@ -4,6 +4,34 @@ static inline void a_barrier() > __asm__ __volatile__ ("fence rw,rw" : : : "memory"); > } > > +#ifdef __riscv_zacas > + > +#define a_cas a_cas > +static inline int a_cas(volatile int *p, int t, int s) > +{ > + int old = t; > + __asm__ __volatile__ ( > + "amocas.w.aqrl %0, %2, %1" > + : "+r"(old), "+A"(*(volatile int *)p) > + : "r"(s) > + : "memory"); existing cas does not use +A constraint (check git log why and ensure this is ok). the ptr cast should not be needed. (same for rv32)
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.