[haiku-commits] haiku: hrev56176 - src/system/libroot/posix/musl/arch/riscv64

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 9 Jun 2022 22:46:30 +0000 (UTC)

hrev56176 adds 1 changeset to branch 'master'
old head: 36ef2106b713c4d5296c28545fe350c2be97d283
new head: 9690b012b467828662af0bcc7d12cdf32f32cfcc
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=9690b012b467+%5E36ef2106b713

----------------------------------------------------------------------------

9690b012b467: libroot/musl: Import riscv64 atomic_arch.h.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev56176
Commit:      9690b012b467828662af0bcc7d12cdf32f32cfcc
URL:         https://git.haiku-os.org/haiku/commit/?id=9690b012b467
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Thu Jun  9 22:46:09 2022 UTC

----------------------------------------------------------------------------

1 file changed, 38 insertions(+)
.../posix/musl/arch/riscv64/atomic_arch.h        | 38 ++++++++++++++++++++

----------------------------------------------------------------------------

diff --git a/src/system/libroot/posix/musl/arch/riscv64/atomic_arch.h 
b/src/system/libroot/posix/musl/arch/riscv64/atomic_arch.h
new file mode 100644
index 0000000000..0c38258868
--- /dev/null
+++ b/src/system/libroot/posix/musl/arch/riscv64/atomic_arch.h
@@ -0,0 +1,38 @@
+#define a_barrier a_barrier
+static inline void a_barrier()
+{
+       __asm__ __volatile__ ("fence rw,rw" : : : "memory");
+}
+
+#define a_cas a_cas
+static inline int a_cas(volatile int *p, int t, int s)
+{
+       int old, tmp;
+       __asm__ __volatile__ (
+               "\n1:   lr.w.aqrl %0, (%2)\n"
+               "       bne %0, %3, 1f\n"
+               "       sc.w.aqrl %1, %4, (%2)\n"
+               "       bnez %1, 1b\n"
+               "1:"
+               : "=&r"(old), "=&r"(tmp)
+               : "r"(p), "r"((long)t), "r"((long)s)
+               : "memory");
+       return old;
+}
+
+#define a_cas_p a_cas_p
+static inline void *a_cas_p(volatile void *p, void *t, void *s)
+{
+       void *old;
+       int tmp;
+       __asm__ __volatile__ (
+               "\n1:   lr.d.aqrl %0, (%2)\n"
+               "       bne %0, %3, 1f\n"
+               "       sc.d.aqrl %1, %4, (%2)\n"
+               "       bnez %1, 1b\n"
+               "1:"
+               : "=&r"(old), "=&r"(tmp)
+               : "r"(p), "r"(t), "r"(s)
+               : "memory");
+       return old;
+}


Other related posts:

  • » [haiku-commits] haiku: hrev56176 - src/system/libroot/posix/musl/arch/riscv64 - waddlesplash