From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/9749 Path: news.gmane.org!not-for-mail From: Bobby Bingham Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH 1/2] add 64bit atomics on top of 64bit ll/sc primitives Date: Sun, 27 Mar 2016 16:20:18 -0500 Message-ID: <1459113619-24090-2-git-send-email-koorogi@koorogi.info> References: <1459113619-24090-1-git-send-email-koorogi@koorogi.info> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1459113681 1909 80.91.229.3 (27 Mar 2016 21:21:21 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sun, 27 Mar 2016 21:21:21 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-9762-gllmg-musl=m.gmane.org@lists.openwall.com Sun Mar 27 23:21:19 2016 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1akI7a-0003mh-HE for gllmg-musl@m.gmane.org; Sun, 27 Mar 2016 23:21:18 +0200 Original-Received: (qmail 17742 invoked by uid 550); 27 Mar 2016 21:21:13 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 17635 invoked from network); 27 Mar 2016 21:21:03 -0000 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1459113619-24090-1-git-send-email-koorogi@koorogi.info> Xref: news.gmane.org gmane.linux.lib.musl.general:9749 Archived-At: --- 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