Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 27 Mar 2016 16:20:18 -0500
From: Bobby Bingham <koorogi@...rogi.info>
To: musl@...ts.openwall.com
Subject: [PATCH 1/2] add 64bit atomics on top of 64bit ll/sc primitives

---
 src/internal/atomic.h | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/internal/atomic.h b/src/internal/atomic.h
index 6f37d25..43a8a00 100644
--- a/src/internal/atomic.h
+++ b/src/internal/atomic.h
@@ -99,6 +99,34 @@ static inline void *a_cas_p(volatile void *p, void *t, void *s)
 
 #endif
 
+#ifdef a_ll_64
+
+#ifndef a_and_64
+#define a_and_64 a_and_64
+static inline void a_and_64(volatile uint64_t *p, uint64_t v)
+{
+	uint64_t old;
+	a_pre_llsc();
+	do old = a_ll_64(p);
+	while (!a_sc_64(p, old & v));
+	a_post_llsc();
+}
+#endif
+
+#ifndef a_or_64
+#define a_or_64 a_or_64
+static inline void a_or_64(volatile uint64_t *p, uint64_t v)
+{
+	uint64_t old;
+	a_pre_llsc();
+	do old = a_ll_64(p);
+	while (!a_sc_64(p, old | v));
+	a_post_llsc();
+}
+#endif
+
+#endif
+
 #ifndef a_cas
 #error missing definition of a_cas
 #endif
-- 
2.7.4

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.