Author: br
Date: Wed Feb 17 14:32:03 2016
New Revision: 295701
URL: https://svnweb.freebsd.org/changeset/base/295701

Log:
  Add the implementation of atomic_swap_32().

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

Modified: head/sys/riscv/include/atomic.h
==============================================================================
--- head/sys/riscv/include/atomic.h     Wed Feb 17 14:24:25 2016        
(r295700)
+++ head/sys/riscv/include/atomic.h     Wed Feb 17 14:32:03 2016        
(r295701)
@@ -310,6 +310,19 @@ atomic_readandclear_64(volatile uint64_t
        return (ret);
 }
 
+static __inline uint32_t
+atomic_swap_32(volatile uint32_t *p, uint32_t val)
+{
+       uint32_t old;
+
+       __asm __volatile("amoswap.w %0, %2, %1"
+                       : "=&r"(old), "+A" (*p)
+                       : "r" (val)
+                       : "memory");
+
+       return (old);
+}
+
 static __inline uint64_t
 atomic_swap_64(volatile uint64_t *p, uint64_t val)
 {
_______________________________________________
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