Author: marius
Date: Sat Jul 28 15:42:57 2018
New Revision: 336832
URL: https://svnweb.freebsd.org/changeset/base/336832

Log:
  Implement atomic_swap_{32,64,int,long,ptr}(9).

Modified:
  head/sys/sparc64/include/atomic.h

Modified: head/sys/sparc64/include/atomic.h
==============================================================================
--- head/sys/sparc64/include/atomic.h   Sat Jul 28 12:53:10 2018        
(r336831)
+++ head/sys/sparc64/include/atomic.h   Sat Jul 28 15:42:57 2018        
(r336832)
@@ -154,14 +154,15 @@
        e;                                                              \
 })
 
-#define        atomic_st(p, v, sz) do {                                        
\
+#define        atomic_st(p, v, sz) ({                                          
\
        itype(sz) e, r;                                                 \
        for (e = *(volatile itype(sz) *)(p);; e = r) {                  \
                r = atomic_cas((p), e, (v), sz);                        \
                if (r == e)                                             \
                        break;                                          \
        }                                                               \
-} while (0)
+       e;                                                              \
+})
 
 #define        atomic_st_acq(p, v, sz) do {                                    
\
        atomic_st((p), (v), sz);                                        \
@@ -310,6 +311,12 @@ static __inline void                                       
                \
 atomic_store_rel_ ## name(volatile ptype p, vtype v)                   \
 {                                                                      \
        atomic_st_rel((p), (v), sz);                                    \
+}                                                                      \
+                                                                       \
+static __inline vtype                                                  \
+atomic_swap_ ## name(volatile ptype p, vtype v)                                
\
+{                                                                      \
+       return ((vtype)atomic_st((p), (v), sz));                        \
 }
 
 static __inline void
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to