vSMC
vSMC: Scalable Monte Carlo
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
include
vsmc
internal
compiler
intel.hpp
Go to the documentation of this file.
1
//============================================================================
2
// vSMC/include/vsmc/internal/compiler/intel.hpp
3
//----------------------------------------------------------------------------
4
// vSMC: Scalable Monte Carlo
5
//----------------------------------------------------------------------------
6
// Copyright (c) 2013,2014, Yan Zhou
7
// All rights reserved.
8
//
9
// Redistribution and use in source and binary forms, with or without
10
// modification, are permitted provided that the following conditions are met:
11
//
12
// Redistributions of source code must retain the above copyright notice,
13
// this list of conditions and the following disclaimer.
14
//
15
// Redistributions in binary form must reproduce the above copyright notice,
16
// this list of conditions and the following disclaimer in the documentation
17
// and/or other materials provided with the distribution.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS
20
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
// POSSIBILITY OF SUCH DAMAGE.
30
//============================================================================
31
32
#ifndef VSMC_INTERNAL_COMPILER_INTEL_HPP
33
#define VSMC_INTERNAL_COMPILER_INTEL_HPP
34
35
#define VSMC_INTEL_NONEXIST 0xFFFFFFFFUL
36
37
#define VSMC_INTEL_VERSION __INTEL_COMPILER
38
39
#define VSMC_LIBCPP_NONEXIST 0xFFFFFFFFUL
40
41
#if defined(_LIBCPP_VERSION) && defined(VSMC_MACOSX)
42
#define VSMC_LIBCPP_VERSION _LIBCPP_VERSION
43
#else
44
#define VSMC_LIBCPP_VERSION 0
45
#endif
46
47
#define VSMC_LIBSTDCPP_NONEXIST 0xFFFFFFFFUL
48
49
#if defined(__GLIBCXX__) && defined(__GNUC__) && defined(__linux__)
50
#define VSMC_LIBSTDCPP_VERSION \
51
(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
52
#else
53
#define VSMC_LIBSTDCPP_VERSION 0
54
#endif
55
56
#if VSMC_INTEL_VERSION >= 1100
57
#ifndef VSMC_HAS_CXX11_LONG_LONG
58
#define VSMC_HAS_CXX11_LONG_LONG 1
59
#endif
60
#endif
61
62
#if __cplusplus >= 201103L
63
64
// C++11 language features
65
66
#if VSMC_INTEL_VERSION >= 1210
67
#ifndef VSMC_HAS_CXX11_ACCESS_CONTROL_SFINAE
68
#define VSMC_HAS_CXX11_ACCESS_CONTROL_SFINAE 1
69
#endif
70
#endif
71
72
#if VSMC_INTEL_VERSION >= 1210
73
#ifndef VSMC_HAS_CXX11_ALIAS_TEMPLATES
74
#define VSMC_HAS_CXX11_ALIAS_TEMPLATES 1
75
#endif
76
#endif
77
78
#if VSMC_INTEL_VERSION >= 1500
79
#ifndef VSMC_HAS_CXX11_ALIGNAS
80
#define VSMC_HAS_CXX11_ALIGNAS 1
81
#endif
82
#endif
83
84
#if VSMC_INTEL_VERSION >= 1210
85
#ifndef VSMC_HAS_CXX11_ATTRIBUTES
86
#define VSMC_HAS_CXX11_ATTRIBUTES 1
87
#endif
88
#endif
89
90
#if VSMC_INTEL_VERSION >= 1200
91
#ifndef VSMC_HAS_CXX11_AUTO_TYPE
92
#define VSMC_HAS_CXX11_AUTO_TYPE 1
93
#endif
94
#endif
95
96
#if VSMC_INTEL_VERSION >= 1400
97
#ifndef VSMC_HAS_CXX11_CONSTEXPR
98
#define VSMC_HAS_CXX11_CONSTEXPR 1
99
#endif
100
#endif
101
102
#if VSMC_INTEL_VERSION >= 1200
103
#ifndef VSMC_HAS_CXX11_DECLTYPE
104
#define VSMC_HAS_CXX11_DECLTYPE 1
105
#endif
106
#endif
107
108
#if VSMC_INTEL_VERSION >= 1210
109
#ifndef VSMC_HAS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
110
#define VSMC_HAS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS 1
111
#endif
112
#endif
113
114
#if VSMC_INTEL_VERSION >= 1200
115
#ifndef VSMC_HAS_CXX11_DEFAULTED_FUNCTIONS
116
#define VSMC_HAS_CXX11_DEFAULTED_FUNCTIONS 1
117
#endif
118
#endif
119
120
#if VSMC_INTEL_VERSION >= 1400
121
#ifndef VSMC_HAS_CXX11_DELEGATING_CONSTRUCTORS
122
#define VSMC_HAS_CXX11_DELEGATING_CONSTRUCTORS 1
123
#endif
124
#endif
125
126
#if VSMC_INTEL_VERSION >= 1200
127
#ifndef VSMC_HAS_CXX11_DELETED_FUNCTIONS
128
#define VSMC_HAS_CXX11_DELETED_FUNCTIONS 1
129
#endif
130
#endif
131
132
#if VSMC_INTEL_VERSION >= 1300
133
#ifndef VSMC_HAS_CXX11_EXPLICIT_CONVERSIONS
134
#define VSMC_HAS_CXX11_EXPLICIT_CONVERSIONS 1
135
#endif
136
#endif
137
138
#if VSMC_INTEL_VERSION >= 1400
139
#ifndef VSMC_HAS_CXX11_GENERALIZED_INITIALIZERS
140
#define VSMC_HAS_CXX11_GENERALIZED_INITIALIZERS 1
141
#endif
142
#endif
143
144
#if VSMC_INTEL_VERSION >= 1400
145
#ifndef VSMC_HAS_CXX11_IMPLICIT_MOVES
146
#define VSMC_HAS_CXX11_IMPLICIT_MOVES 1
147
#endif
148
#endif
149
150
#if VSMC_INTEL_VERSION >= 1500
151
#ifndef VSMC_HAS_CXX11_INHERITING_CONSTRUCTORS
152
#define VSMC_HAS_CXX11_INHERITING_CONSTRUCTORS 1
153
#endif
154
#endif
155
156
#if VSMC_INTEL_VERSION >= 1400
157
#ifndef VSMC_HAS_CXX11_INLINE_NAMESPACES
158
#define VSMC_HAS_CXX11_INLINE_NAMESPACES 1
159
#endif
160
#endif
161
162
#if VSMC_INTEL_VERSION >= 1300
163
#ifndef VSMC_HAS_CXX11_LAMBDAS
164
#define VSMC_HAS_CXX11_LAMBDAS 1
165
#endif
166
#endif
167
168
#if VSMC_INTEL_VERSION >= 1200
169
#ifndef VSMC_HAS_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
170
#define VSMC_HAS_CXX11_LOCAL_TYPE_TEMPLATE_ARGS 1
171
#endif
172
#endif
173
174
#if VSMC_INTEL_VERSION >= 1400
175
#ifndef VSMC_HAS_CXX11_NOEXCEPT
176
#define VSMC_HAS_CXX11_NOEXCEPT 1
177
#endif
178
#endif
179
180
#if VSMC_INTEL_VERSION >= 1400
181
#ifndef VSMC_HAS_CXX11_NONSTATIC_MEMBER_INIT
182
#define VSMC_HAS_CXX11_NONSTATIC_MEMBER_INIT 1
183
#endif
184
#endif
185
186
#if VSMC_INTEL_VERSION >= 1210
187
#ifndef VSMC_HAS_CXX11_NULLPTR
188
#define VSMC_HAS_CXX11_NULLPTR 1
189
#endif
190
#endif
191
192
#if VSMC_INTEL_VERSION >= 1400
193
#ifndef VSMC_HAS_CXX11_OVERRIDE_CONTROL
194
#define VSMC_HAS_CXX11_OVERRIDE_CONTROL 1
195
#endif
196
#endif
197
198
#if VSMC_INTEL_VERSION >= 1300
199
#ifndef VSMC_HAS_CXX11_RANGE_FOR
200
#define VSMC_HAS_CXX11_RANGE_FOR 1
201
#endif
202
#endif
203
204
#if VSMC_INTEL_VERSION >= 1400
205
#ifndef VSMC_HAS_CXX11_RAW_STRING_LITERALS
206
#define VSMC_HAS_CXX11_RAW_STRING_LITERALS 1
207
#endif
208
#endif
209
210
#if VSMC_INTEL_VERSION >= 1400
211
#ifndef VSMC_HAS_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
212
#define VSMC_HAS_CXX11_REFERENCE_QUALIFIED_FUNCTIONS 1
213
#endif
214
#endif
215
216
#if VSMC_INTEL_VERSION >= 1200
217
#ifndef VSMC_HAS_CXX11_RVALUE_REFERENCES
218
#define VSMC_HAS_CXX11_RVALUE_REFERENCES 1
219
#endif
220
#endif
221
222
#if VSMC_INTEL_VERSION >= 1100
223
#ifndef VSMC_HAS_CXX11_STATIC_ASSERT
224
#define VSMC_HAS_CXX11_STATIC_ASSERT 1
225
#endif
226
#endif
227
228
#if VSMC_INTEL_VERSION >= 1400
229
#ifndef VSMC_HAS_CXX11_STRONG_ENUMS
230
#define VSMC_HAS_CXX11_STRONG_ENUMS 1
231
#endif
232
#endif
233
234
#if VSMC_INTEL_VERSION >= 1500
235
#ifndef VSMC_HAS_CXX11_THREAD_LOCAL
236
#define VSMC_HAS_CXX11_THREAD_LOCAL 1
237
#endif
238
#endif
239
240
#if VSMC_INTEL_VERSION >= 1200
241
#ifndef VSMC_HAS_CXX11_TRAILING_RETURN
242
#define VSMC_HAS_CXX11_TRAILING_RETURN 1
243
#endif
244
#endif
245
246
#if VSMC_INTEL_VERSION >= 1210
247
#ifndef VSMC_HAS_CXX11_UNICODE_LITERALS
248
#define VSMC_HAS_CXX11_UNICODE_LITERALS 1
249
#endif
250
#endif
251
252
#ifndef _WIN32
253
#if VSMC_INTEL_VERSION >= 1400
254
#ifndef VSMC_HAS_CXX11_UNRESTRICTED_UNIONS
255
#define VSMC_HAS_CXX11_UNRESTRICTED_UNIONS 1
256
#endif
257
#endif
258
#endif
259
260
#if VSMC_INTEL_VERSION >= 1500
261
#ifndef VSMC_HAS_CXX11_USER_LITERALS
262
#define VSMC_HAS_CXX11_USER_LITERALS 1
263
#endif
264
#endif
265
266
#if VSMC_INTEL_VERSION >= 1210
267
#ifndef VSMC_HAS_CXX11_VARIADIC_TEMPLATES
268
#define VSMC_HAS_CXX11_VARIADIC_TEMPLATES 1
269
#endif
270
#endif
271
272
// C++11 library features
273
274
#if VSMC_INTEL_VERSION >= 1500
275
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
276
#ifndef VSMC_HAS_CXX11LIB_CHRONO
277
#define VSMC_HAS_CXX11LIB_CHRONO 1
278
#endif
279
#endif
280
#endif
281
282
#if VSMC_INTEL_VERSION >= 1500
283
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
284
#ifndef VSMC_HAS_CXX11LIB_CMATH
285
#define VSMC_HAS_CXX11LIB_CMATH 1
286
#endif
287
#endif
288
#endif
289
290
#if VSMC_INTEL_VERSION >= 1500
291
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
292
#ifndef VSMC_HAS_CXX11LIB_FUNCTIONAL
293
#define VSMC_HAS_CXX11LIB_FUNCTIONAL 1
294
#endif
295
#endif
296
#endif
297
298
#if VSMC_INTEL_VERSION >= 1500
299
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
300
#ifndef VSMC_HAS_CXX11LIB_FUTURE
301
#define VSMC_HAS_CXX11LIB_FUTURE 1
302
#endif
303
#endif
304
#endif
305
306
#if VSMC_INTEL_VERSION >= 1500
307
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
308
#ifndef VSMC_HAS_CXX11LIB_INITIALIZER_LIST
309
#define VSMC_HAS_CXX11LIB_INITIALIZER_LIST 1
310
#endif
311
#endif
312
#endif
313
314
#if VSMC_INTEL_VERSION >= 1500
315
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
316
#ifndef VSMC_HAS_CXX11LIB_MUTEX
317
#define VSMC_HAS_CXX11LIB_MUTEX 1
318
#endif
319
#endif
320
#endif
321
322
#if VSMC_INTEL_VERSION >= 1500
323
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
324
#ifndef VSMC_HAS_CXX11LIB_RANDOM
325
#define VSMC_HAS_CXX11LIB_RANDOM 1
326
#endif
327
#endif
328
#endif
329
330
#if VSMC_INTEL_VERSION >= 1500
331
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
332
#ifndef VSMC_HAS_CXX11LIB_THREAD
333
#define VSMC_HAS_CXX11LIB_THREAD 1
334
#endif
335
#endif
336
#endif
337
338
#if VSMC_INTEL_VERSION >= 1500
339
#if VSMC_LIBCPP_VERSION >= 1101 || VSMC_LIBSTDCPP_VERSION >= 40900
340
#ifndef VSMC_HAS_CXX11LIB_TUPLE
341
#define VSMC_HAS_CXX11LIB_TUPLE 1
342
#endif
343
#endif
344
#endif
345
346
#endif // __cplusplus >= 201103L
347
348
#if __cplusplus >= 201402L
349
350
// C++14 language features
351
352
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
353
#ifndef VSMC_HAS_CXX14_AGGREGATE_NSDMI
354
#define VSMC_HAS_CXX14_AGGREGATE_NSDMI 1
355
#endif
356
#endif
357
358
#if VSMC_INTEL_VERSION >= 1500
359
#ifndef VSMC_HAS_CXX14_BINARY_LITERALS
360
#define VSMC_HAS_CXX14_BINARY_LITERALS 1
361
#endif
362
#endif
363
364
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
365
#ifndef VSMC_HAS_CXX14_CONTEXTUAL_CONVERSIONS
366
#define VSMC_HAS_CXX14_CONTEXTUAL_CONVERSIONS 1
367
#endif
368
#endif
369
370
#if VSMC_INTEL_VERSION >= 1500
371
#ifndef VSMC_HAS_CXX14_DECLTYPE_AUTO
372
#define VSMC_HAS_CXX14_DECLTYPE_AUTO 1
373
#endif
374
#endif
375
376
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
377
#ifndef VSMC_HAS_CXX14_DIGIT_SEPERATORS
378
#define VSMC_HAS_CXX14_DIGIT_SEPERATORS 1
379
#endif
380
#endif
381
382
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
383
#ifndef VSMC_HAS_CXX14_GENERIC_LAMBDAS
384
#define VSMC_HAS_CXX14_GENERIC_LAMBDAS 1
385
#endif
386
#endif
387
388
#if VSMC_INTEL_VERSION >= 1500
389
#ifndef VSMC_HAS_CXX14_INIT_CAPTURES
390
#define VSMC_HAS_CXX14_INIT_CAPTURES 1
391
#endif
392
#endif
393
394
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
395
#ifndef VSMC_HAS_CXX14_RELAXED_CONSTEXPR
396
#define VSMC_HAS_CXX14_RELAXED_CONSTEXPR 1
397
#endif
398
#endif
399
400
#if VSMC_INTEL_VERSION >= 1500
401
#ifndef VSMC_HAS_CXX14_RETURN_TYPE_DEDUCTION
402
#define VSMC_HAS_CXX14_RETURN_TYPE_DEDUCTION 1
403
#endif
404
#endif
405
406
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
407
#ifndef VSMC_HAS_CXX14_RUNTIME_SIZED_ARRAYS
408
#define VSMC_HAS_CXX14_RUNTIME_SIZED_ARRAYS 1
409
#endif
410
#endif
411
412
#if VSMC_INTEL_VERSION >= VSMC_INTEL_NONEXIST
413
#ifndef VSMC_HAS_CXX14_VARIABLE_TEMPLATES
414
#define VSMC_HAS_CXX14_VARIABLE_TEMPLATES 1
415
#endif
416
#endif
417
418
#endif // __cplusplus >= 201402L
419
420
// C99 library features
421
422
#ifndef VSMC_HAS_C99LIB_MATH
423
#define VSMC_HAS_C99LIB_MATH 1
424
#endif
425
426
// Compiler features
427
428
#ifndef VSMC_INT64
429
#define VSMC_INT64 __int64
430
#endif
431
432
#ifdef __x86_64__
433
#ifndef VSMC_HAS_INT128
434
#define VSMC_HAS_INT128 1
435
#endif
436
#ifndef VSMC_INT128
437
#define VSMC_INT128 __int128
438
#endif
439
#endif
440
441
#ifndef VSMC_HAS_WARNING
442
#define VSMC_HAS_WARNING 1
443
#endif
444
445
#ifndef _WIN32
446
#ifndef VSMC_STRONG_INLINE
447
#define VSMC_STRONG_INLINE __attribute__((always_inline)) inline
448
#endif
449
#endif
450
451
// Target features
452
453
#ifdef __AVX__
454
#define VSMC_HAS_AES_NI 1
455
#endif
456
457
#ifdef __AVX2__
458
#define VSMC_HAS_RDRAND 1
459
#endif
460
461
// Parallelization features
462
463
#if VSMC_INTEL_VERSION >= 1210
464
#ifndef VSMC_HAS_CILK
465
#define VSMC_HAS_CILK 1
466
#endif
467
#endif
468
469
#ifdef _OPENMP
470
#ifndef VSMC_HAS_OMP
471
#define VSMC_HAS_OMP 1
472
#endif
473
#endif
474
475
#endif // VSMC_INTERNAL_COMPILER_INTEL_HPP
Generated by
1.8.9.1