summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-08-27 09:50:05 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-08-27 10:31:42 +0200
commit8bf5f93ac13b65da471c24b85262fd8b3e2f225a (patch)
tree6bf747fc316c8bd9b08096fdebd38ab660c26238
parentSLEEPQUEUE(9): Optimize sleepq_set_timeout_sbt() (diff)
downloadrtems-libbsd-8bf5f93ac13b65da471c24b85262fd8b3e2f225a.tar.bz2
atomic.h: Add atomic_load_long()
-rw-r--r--rtemsbsd/include/machine/atomic.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/atomic.h b/rtemsbsd/include/machine/atomic.h
index 347ea2e3..a4b6b488 100644
--- a/rtemsbsd/include/machine/atomic.h
+++ b/rtemsbsd/include/machine/atomic.h
@@ -1478,6 +1478,27 @@ atomic_readandclear_long(volatile long *p)
}
static inline long
+atomic_load_long(volatile long *p)
+{
+ long tmp;
+
+#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC)
+ std::atomic_long *q =
+ reinterpret_cast<std::atomic_long *>(const_cast<long *>(p));
+
+ tmp = q->load(std::memory_order_relaxed);
+#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC)
+ atomic_long *q = (atomic_long *)RTEMS_DEVOLATILE(long *, p);
+
+ tmp = atomic_load_explicit(q, memory_order_relaxed);
+#else
+ tmp = *p;
+#endif
+
+ return (tmp);
+}
+
+static inline long
atomic_load_acq_long(volatile long *p)
{
long tmp;