66d9675281d8f5c3421e1f576ddcdb578a5e7a74
[libcds.git] / cds / compiler / icl / compiler_barriers.h
1 //$$CDS-header$$
2
3 #ifndef __CDS_COMPILER_ICL_COMPILER_BARRIERS_H
4 #define __CDS_COMPILER_ICL_COMPILER_BARRIERS_H
5
6 #if defined(_MSC_VER) && _MSC_VER < 1700
7     // VC++ up to vc10
8 #   include <intrin.h>
9
10 #   pragma intrinsic(_ReadWriteBarrier)
11 #   pragma intrinsic(_ReadBarrier)
12 #   pragma intrinsic(_WriteBarrier)
13
14 #   define CDS_COMPILER_RW_BARRIER  _ReadWriteBarrier()
15 #   define CDS_COMPILER_R_BARRIER   _ReadBarrier()
16 #   define CDS_COMPILER_W_BARRIER   _WriteBarrier()
17
18 #else
19     // MS VC11+, linux
20 #   include <atomic>
21
22 #   define CDS_COMPILER_RW_BARRIER  std::atomic_thread_fence( std::memory_order_acq_rel )
23 #   define CDS_COMPILER_R_BARRIER   CDS_COMPILER_RW_BARRIER
24 #   define CDS_COMPILER_W_BARRIER   CDS_COMPILER_RW_BARRIER
25 #endif
26
27 #endif  // #ifndef __CDS_COMPILER_ICL_COMPILER_BARRIERS_H