diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-10-24 13:29:03 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-11-09 10:04:32 +0100 |
commit | 71a0436d149858e78377e9dada180dfb28620adc (patch) | |
tree | dee974f37c7df095a74acb84b38f55d43dc08815 /rtemsbsd/include/machine/atomic.h | |
parent | Fix warnings for linker sets (diff) | |
download | rtems-libbsd-71a0436d149858e78377e9dada180dfb28620adc.tar.bz2 |
Add thread fences to <machine/atomic.h>
Diffstat (limited to 'rtemsbsd/include/machine/atomic.h')
-rw-r--r-- | rtemsbsd/include/machine/atomic.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/atomic.h b/rtemsbsd/include/machine/atomic.h index fa2b0053..b95a4b5a 100644 --- a/rtemsbsd/include/machine/atomic.h +++ b/rtemsbsd/include/machine/atomic.h @@ -1399,4 +1399,56 @@ atomic_store_rel_long(volatile long *p, long v) #endif } +static inline void +atomic_thread_fence_acq(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_acquire); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_acquire); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + +static inline void +atomic_thread_fence_rel(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_release); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_release); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + +static inline void +atomic_thread_fence_acq_rel(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_acq_rel); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_acq_rel); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + +static inline void +atomic_thread_fence_seq_cst(void) +{ + +#if defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_ATOMIC) + std::atomic_thread_fence(std::memory_order_seq_cst); +#elif defined(_RTEMS_BSD_MACHINE_ATOMIC_USE_STDATOMIC) + atomic_thread_fence(memory_order_seq_cst); +#else + RTEMS_COMPILER_MEMORY_BARRIER(); +#endif +} + #endif /* _RTEMS_BSD_MACHINE_ATOMIC_H_ */ |