summaryrefslogtreecommitdiffstats
path: root/rtemsbsd/include/machine/atomic.h
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-20 15:53:03 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-09-21 10:29:39 +0200
commit18fa92c2dcc6c52e0bf27d214d80f0c25a89b47d (patch)
treea3020ac5b1f366f2f0920941b589808e435dbcee /rtemsbsd/include/machine/atomic.h
parentUpdate to FreeBSD head 2017-12-01 (diff)
downloadrtems-libbsd-18fa92c2dcc6c52e0bf27d214d80f0c25a89b47d.tar.bz2
Update to FreeBSD head 2018-02-01
Git mirror commit d079ae0442af8fa3cfd6d7ede190d04e64a2c0d4. Update #3472.
Diffstat (limited to 'rtemsbsd/include/machine/atomic.h')
-rw-r--r--rtemsbsd/include/machine/atomic.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/atomic.h b/rtemsbsd/include/machine/atomic.h
index b95a4b5a..f7de4178 100644
--- a/rtemsbsd/include/machine/atomic.h
+++ b/rtemsbsd/include/machine/atomic.h
@@ -492,6 +492,27 @@ atomic_readandclear_int(volatile int *p)
}
static inline int
+atomic_load_int(volatile int *p)
+{
+ int tmp;
+
+#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC)
+ std::atomic_int *q =
+ reinterpret_cast<std::atomic_int *>(const_cast<int *>(p));
+
+ tmp = q->load(std::memory_order_relaxed);
+#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC)
+ atomic_int *q = (atomic_int *)RTEMS_DEVOLATILE(int *, p);
+
+ tmp = atomic_load_explicit(q, memory_order_relaxed);
+#else
+ tmp = *p;
+#endif
+
+ return (tmp);
+}
+
+static inline int
atomic_load_acq_int(volatile int *p)
{
int tmp;
@@ -514,6 +535,23 @@ atomic_load_acq_int(volatile int *p)
}
static inline void
+atomic_store_int(volatile int *p, int v)
+{
+#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC)
+ std::atomic_int *q =
+ reinterpret_cast<std::atomic_int *>(const_cast<int *>(p));
+
+ q->store(v, std::memory_order_relaxed);
+#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC)
+ atomic_int *q = (atomic_int *)RTEMS_DEVOLATILE(int *, p);
+
+ atomic_store_explicit(q, v, memory_order_relaxed);
+#else
+ *p = v;
+#endif
+}
+
+static inline void
atomic_store_rel_int(volatile int *p, int v)
{
#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC)