diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-08-27 09:50:05 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-08-27 10:31:42 +0200 |
commit | 8bf5f93ac13b65da471c24b85262fd8b3e2f225a (patch) | |
tree | 6bf747fc316c8bd9b08096fdebd38ab660c26238 /rtemsbsd | |
parent | SLEEPQUEUE(9): Optimize sleepq_set_timeout_sbt() (diff) | |
download | rtems-libbsd-8bf5f93ac13b65da471c24b85262fd8b3e2f225a.tar.bz2 |
atomic.h: Add atomic_load_long()
Diffstat (limited to 'rtemsbsd')
-rw-r--r-- | rtemsbsd/include/machine/atomic.h | 21 |
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; |