Move libcds 1.6.0 from SVN
[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 _MSC_VER > 0
7 #   if _MSC_VER < 1700
8         // VC++ up to vc10
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 #endif
29
30 #endif  // #ifndef __CDS_COMPILER_ICL_COMPILER_BARRIERS_H