3 #ifndef __CDS_COMPILER_ICL_DEFS_H
4 #define __CDS_COMPILER_ICL_DEFS_H
9 # define CDS_COMPILER_VERSION __ICL
11 # define CDS_COMPILER_VERSION __INTEL_COMPILER
15 // Supported compilers: MS VC 2008, 2010, 2012
17 # define CDS_COMPILER__NAME "Intel C++"
18 # define CDS_COMPILER__NICK "icl"
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"
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"
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"
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
56 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
57 # define __attribute__( _x )
58 # define CDS_STDCALL __stdcall
60 # if CDS_PROCESSOR_ARCH == CDS_PROCESSOR_X86
61 # define CDS_STDCALL __attribute__((stdcall))
67 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
69 # define CDS_EXPORT_API __declspec(dllexport)
71 # define CDS_EXPORT_API __declspec(dllimport)
75 #if CDS_OS_INTERFACE == CDS_OSI_WINDOWS
76 # define alignof __alignof
78 # define alignof __alignof__
81 // Memory leaks detection (debug build only)
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
90 #if CDS_COMPILER_VERSION < 1400
91 # define CDS_CONSTEXPR
92 # define CDS_CONSTEXPR_CONST const
94 # define CDS_CONSTEXPR constexpr
95 # define CDS_CONSTEXPR_CONST constexpr const
98 // noexcept is not yet supported
99 #if CDS_COMPILER_VERSION < 1400
100 # define CDS_NOEXCEPT_SUPPORT
101 # define CDS_NOEXCEPT_SUPPORT_(expr)
103 # define CDS_NOEXCEPT_SUPPORT noexcept
104 # define CDS_NOEXCEPT_SUPPORT_(expr) noexcept(expr)
109 #if CDS_COMPILER_VERSION >= 1200
110 # define CDS_CXX11_LAMBDA_SUPPORT
114 #if CDS_COMPILER_VERSION >= 1200
115 # define CDS_RVALUE_SUPPORT
116 # define CDS_MOVE_SEMANTICS_SUPPORT
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
124 // C++11 delete definition ( function declaration = delete)
125 #if CDS_COMPILER_VERSION >= 1200
126 # define CDS_CXX11_DELETE_DEFINITION_SUPPORT
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
134 // Variadic template support (ICL 12.1+)
135 #if CDS_COMPILER_VERSION >= 1201
136 # define CDS_CXX11_VARIADIC_TEMPLATE_SUPPORT 1
139 // C++11 template alias
140 #if CDS_COMPILER_VERSION >= 1201
141 # define CDS_CXX11_TEMPLATE_ALIAS_SUPPORT
144 // C++11 inline namespace
145 #if CDS_COMPILER_VERSION >= 1400
146 # define CDS_CXX11_INLINE_NAMESPACE_SUPPORT
149 // Explicit conversion operator
150 //#if CDS_COMPILER_VERSION >= 1800
151 //# define CDS_CXX11_EXPLICIT_CONVERSION_OPERATOR_SUPPORT
154 // Thread support library (thread, mutex, condition variable)
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
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
170 // *************************************************
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) )
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)))
183 #include <cds/compiler/icl/compiler_barriers.h>
186 #endif // #ifndef __CDS_COMPILER_VC_DEFS_H