From 71a0436d149858e78377e9dada180dfb28620adc Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 24 Oct 2016 13:29:03 +0200 Subject: Add thread fences to --- rtemsbsd/include/machine/atomic.h | 52 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) 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_ */ -- cgit v1.2.3