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