Remove CDS_CXX11_ATOMIC_SUPPORT
[libcds.git] / cds / compiler / icl / defs.h
1 //$$CDS-header$$
2
3 #ifndef __CDS_COMPILER_ICL_DEFS_H
4 #define __CDS_COMPILER_ICL_DEFS_H
5 //@cond
6
7 // Compiler version
8 #ifdef __ICL
9 #   define CDS_COMPILER_VERSION    __ICL
10 #else
11 #   define CDS_COMPILER_VERSION    __INTEL_COMPILER
12 #endif
13
14 // Compiler name
15 // Supported compilers: MS VC 2008, 2010, 2012
16 //
17 #   define  CDS_COMPILER__NAME  "Intel C++"
18 #   define  CDS_COMPILER__NICK  "icl"
19
20 // OS name
21 #if defined(_WIN64)
22 #   define CDS_OS_INTERFACE CDS_OSI_WINDOWS
23 #   define CDS_OS_TYPE      CDS_OS_WIN64
24 #   define CDS_OS__NAME     "Win64"
25 #   define CDS_OS__NICK     "Win64"
26 #elif defined(_WIN32)
27 #   define CDS_OS_INTERFACE CDS_OSI_WINDOWS
28 #   define CDS_OS_TYPE      CDS_OS_WIN32
29 #   define CDS_OS__NAME     "Win32"
30 #   define CDS_OS__NICK     "Win32"
31 #elif defined( __linux__ )
32 #   define CDS_OS_INTERFACE     CDS_OSI_UNIX
33 #   define CDS_OS_TYPE          CDS_OS_LINUX
34 #   define CDS_OS__NAME         "linux"
35 #   define CDS_OS__NICK         "linux"
36 #endif
37
38 // Processor architecture
39 #if defined(_M_X64) || defined(_M_AMD64)
40 #   define CDS_BUILD_BITS       64
41 #   define CDS_PROCESSOR_ARCH   CDS_PROCESSOR_AMD64
42 #   define CDS_PROCESSOR__NAME  "AMD64"
43 #   define CDS_PROCESSOR__NICK  "amd64"
44 #elif defined(_M_IX86)
45 #   define CDS_BUILD_BITS       32
46 #   define CDS_PROCESSOR_ARCH   CDS_PROCESSOR_X86
47 #   define CDS_PROCESSOR__NAME  "Intel x86"
48 #   define CDS_PROCESSOR__NICK  "x86"
49 #else
50 #   define CDS_BUILD_BITS        -1
51 #   define CDS_PROCESSOR_ARCH    CDS_PROCESSOR_UNKNOWN
52 #   define CDS_PROCESSOR__NAME    "<<Undefined>>"
53 #   error Intel C++ compiler is supported for x86 only
54 #endif
55
56 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
57 #   define  __attribute__( _x )
58 #   define  CDS_STDCALL    __stdcall
59 #else
60 #   if CDS_PROCESSOR_ARCH == CDS_PROCESSOR_X86
61 #       define CDS_STDCALL __attribute__((stdcall))
62 #   else
63 #       define CDS_STDCALL
64 #   endif
65 #endif
66
67 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
68 #   ifdef CDS_BUILD_LIB
69 #       define CDS_EXPORT_API          __declspec(dllexport)
70 #   else
71 #       define CDS_EXPORT_API          __declspec(dllimport)
72 #   endif
73 #endif
74
75 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
76 #   define alignof     __alignof
77 #else
78 #   define alignof __alignof__
79 #endif
80
81 // Memory leaks detection (debug build only)
82 //#ifdef _DEBUG
83 //#   define _CRTDBG_MAP_ALLOC
84 //#   define _CRTDBG_MAPALLOC
85 //#   include <stdlib.h>
86 //#   include <crtdbg.h>
87 //#   define CDS_MSVC_MEMORY_LEAKS_DETECTING_ENABLED
88 //#endif
89
90 #if CDS_COMPILER_VERSION < 1400
91 #   define CDS_CONSTEXPR
92 #   define CDS_CONSTEXPR_CONST const
93 #else
94 #   define CDS_CONSTEXPR    constexpr
95 #   define CDS_CONSTEXPR_CONST constexpr const
96 #endif
97
98 // noexcept is not yet supported
99 #if CDS_COMPILER_VERSION < 1400
100 #   define CDS_NOEXCEPT_SUPPORT
101 #   define CDS_NOEXCEPT_SUPPORT_(expr)
102 #else
103 #   define CDS_NOEXCEPT_SUPPORT        noexcept
104 #   define CDS_NOEXCEPT_SUPPORT_(expr) noexcept(expr)
105 #endif
106
107
108 // Lambda (ICL 12 +)
109 #if CDS_COMPILER_VERSION >= 1200
110 #   define CDS_CXX11_LAMBDA_SUPPORT
111 #endif
112
113 // RValue (ICL 10+)
114 #if CDS_COMPILER_VERSION >= 1200
115 #   define CDS_RVALUE_SUPPORT
116 #   define CDS_MOVE_SEMANTICS_SUPPORT
117 #endif
118
119 // Default template arguments for function templates (ICL 12.1+)
120 #if CDS_COMPILER_VERSION >= 1201
121 #   define CDS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS_SUPPORT
122 #endif
123
124 // C++11 delete definition ( function declaration = delete)
125 #if CDS_COMPILER_VERSION >= 1200
126 #   define CDS_CXX11_DELETE_DEFINITION_SUPPORT
127 #endif
128
129 // C++11 explicitly-defaulted function (= default) [std 8.4.2 [dcl.fct.def.default]]
130 #if CDS_COMPILER_VERSION >= 1200
131 #   define CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT
132 #endif
133
134 // Variadic template support (ICL 12.1+)
135 #if CDS_COMPILER_VERSION >= 1201
136 #   define CDS_CXX11_VARIADIC_TEMPLATE_SUPPORT     1
137 #endif
138
139 // C++11 template alias
140 #if CDS_COMPILER_VERSION >= 1201
141 #   define CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
142 #endif
143
144 // C++11 inline namespace
145 #if CDS_COMPILER_VERSION >= 1400
146 #   define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
147 #endif
148
149 // Explicit conversion operator
150 //#if CDS_COMPILER_VERSION >= 1800
151 //#   define CDS_CXX11_EXPLICIT_CONVERSION_OPERATOR_SUPPORT
152 //#endif
153
154 // Thread support library (thread, mutex, condition variable)
155 #if _MSC_VER >= 1700
156     // MS VC 11+
157 #   define CDS_CXX11_STDLIB_THREAD
158 #   define CDS_CXX11_STDLIB_MUTEX
159 #   define CDS_CXX11_STDLIB_CONDITION_VARIABLE
160 #   define CDS_CXX11_STDLIB_CHRONO
161 #endif
162
163 #if defined( CDS_CXX11_EXPLICITLY_DEFAULTED_FUNCTION_SUPPORT ) && defined(CDS_MOVE_SEMANTICS_SUPPORT) && CDS_COMPILER_VERSION < 1400
164     // Intel C++ bug: move ctor & assignment operator cannot be defaulted
165     // http://software.intel.com/en-us/forums/topic/394395
166 #   define CDS_DISABLE_DEFAULT_MOVE_CTOR
167 #endif
168
169
170 // *************************************************
171 // Alignment macro
172
173 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
174 #   define CDS_TYPE_ALIGNMENT(n)     __declspec( align(n) )
175 #   define CDS_DATA_ALIGNMENT(n)     __declspec( align(n) )
176 #   define CDS_CLASS_ALIGNMENT(n)    __declspec( align(n) )
177 #else
178 #   define CDS_TYPE_ALIGNMENT(n)   __attribute__ ((aligned (n)))
179 #   define CDS_CLASS_ALIGNMENT(n)  __attribute__ ((aligned (n)))
180 #   define CDS_DATA_ALIGNMENT(n)   __attribute__ ((aligned (n)))
181 #endif
182
183 #include <cds/compiler/icl/compiler_barriers.h>
184
185 //@endcond
186 #endif // #ifndef __CDS_COMPILER_VC_DEFS_H