vSMC
vSMC: Scalable Monte Carlo
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
include
vsmc
internal
compiler.hpp
Go to the documentation of this file.
1
//============================================================================
2
// vSMC/include/vsmc/internal/compiler.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_HPP
33
#define VSMC_INTERNAL_COMPILER_HPP
34
35
// Compiler feature check macros
36
37
#ifndef __has_attribute
38
#define __has_attribute(x) 0
39
#endif
40
41
#ifndef __has_builtin
42
#define __has_builtin(x) 0
43
#endif
44
45
#ifndef __has_cpp_attribute
46
#define __has_cpp_attribute(x) 0
47
#endif
48
49
#ifndef __has_extension
50
#define __has_extension(x) 0
51
#endif
52
53
#ifndef __has_feature
54
#define __has_feature(x) 0
55
#endif
56
57
#include <cstddef>
58
59
#if defined(__APPLE__) || defined(__MACOSX)
60
#define VSMC_MACOSX
61
#include <Availability.h>
62
#define VSMC_MAC_10_0 __MAC_10_0
63
#define VSMC_MAC_10_1 __MAC_10_1
64
#define VSMC_MAC_10_2 __MAC_10_2
65
#define VSMC_MAC_10_3 __MAC_10_3
66
#define VSMC_MAC_10_4 __MAC_10_4
67
#define VSMC_MAC_10_5 __MAC_10_5
68
#define VSMC_MAC_10_6 __MAC_10_6
69
#define VSMC_MAC_10_7 __MAC_10_7
70
#define VSMC_MAC_10_8 __MAC_10_8
71
#define VSMC_MAC_10_9 __MAC_10_9
72
#define VSMC_MAC_10_10 __MAC_10_10
73
#define VSMC_MAC_VERSION __MAC_OS_X_VERSION_MIN_REQUIRED
74
#define VSMC_MAC_VERSION_MIN_REQUIRED(ver) VSMC_MAC_VERSION >= ver
75
#else
76
#define VSMC_MAC_VERSION_MIN_REQUIRED(ver) 0
77
#endif
78
79
#ifdef VSMC_MACOSX
80
#if VSMC_MAC_VERSION_MIN_REQUIRED(VSMC_MAC_10_5)
81
#ifndef VSMC_HAS_POSIX
82
#define VSMC_HAS_POSIX 1
83
#endif
84
#endif
85
#else // VSMC_MACOSX
86
#include <stdlib.h>
87
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L
88
#ifndef VSMC_HAS_POSIX
89
#define VSMC_HAS_POSIX 1
90
#endif
91
#endif // _POSIX_C_SOURCE >= 200112L
92
#if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600
93
#ifndef VSMC_HAS_POSIX
94
#define VSMC_HAS_POSIX 1
95
#endif
96
#endif // _XOPEN_SOURCE >= 600
97
#endif // VSMC_MACOSX
98
99
#ifndef VSMC_HAS_POSIX
100
#define VSMC_HAS_POSIX 0
101
#endif
102
103
#if defined(__INTEL_COMPILER)
104
#define VSMC_INTEL
105
#include <
vsmc/internal/compiler/intel.hpp
>
106
#elif defined(__clang__)
107
#define VSMC_CLANG
108
#include <
vsmc/internal/compiler/clang.hpp
>
109
#elif defined(__GNUC__)
110
#define VSMC_GCC
111
#include <
vsmc/internal/compiler/gcc.hpp
>
112
#elif defined(_MSC_VER)
113
#define VSMC_MSVC
114
#include <
vsmc/internal/compiler/msvc.hpp
>
115
#endif
116
117
// C++11 language features
118
119
#ifndef VSMC_HAS_CXX11_LONG_LONG
120
#define VSMC_HAS_CXX11_LONG_LONG 0
121
#endif
122
123
#ifndef VSMC_HAS_CXX11_ACCESS_CONTROL_SFINAE
124
#define VSMC_HAS_CXX11_ACCESS_CONTROL_SFINAE 0
125
#endif
126
127
#ifndef VSMC_HAS_CXX11_ALIAS_TEMPLATES
128
#define VSMC_HAS_CXX11_ALIAS_TEMPLATES 0
129
#endif
130
131
#ifndef VSMC_HAS_CXX11_ALIGNAS
132
#define VSMC_HAS_CXX11_ALIGNAS 0
133
#endif
134
135
#ifndef VSMC_HAS_CXX11_ATTRIBUTES
136
#define VSMC_HAS_CXX11_ATTRIBUTES 0
137
#endif
138
139
#ifndef VSMC_HAS_CXX11_AUTO_TYPE
140
#define VSMC_HAS_CXX11_AUTO_TYPE 0
141
#endif
142
143
#ifndef VSMC_HAS_CXX11_CONSTEXPR
144
#define VSMC_HAS_CXX11_CONSTEXPR 0
145
#endif
146
147
#ifndef VSMC_HAS_CXX11_DECLTYPE
148
#define VSMC_HAS_CXX11_DECLTYPE 0
149
#endif
150
151
#ifndef VSMC_HAS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS
152
#define VSMC_HAS_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS 0
153
#endif
154
155
#ifndef VSMC_HAS_CXX11_DEFAULTED_FUNCTIONS
156
#define VSMC_HAS_CXX11_DEFAULTED_FUNCTIONS 0
157
#endif
158
159
#ifndef VSMC_HAS_CXX11_DELEGATING_CONSTRUCTORS
160
#define VSMC_HAS_CXX11_DELEGATING_CONSTRUCTORS 0
161
#endif
162
163
#ifndef VSMC_HAS_CXX11_DELETED_FUNCTIONS
164
#define VSMC_HAS_CXX11_DELETED_FUNCTIONS 0
165
#endif
166
167
#ifndef VSMC_HAS_CXX11_EXPLICIT_CONVERSIONS
168
#define VSMC_HAS_CXX11_EXPLICIT_CONVERSIONS 0
169
#endif
170
171
#ifndef VSMC_HAS_CXX11_GENERALIZED_INITIALIZERS
172
#define VSMC_HAS_CXX11_GENERALIZED_INITIALIZERS 0
173
#endif
174
175
#ifndef VSMC_HAS_CXX11_IMPLICIT_MOVES
176
#define VSMC_HAS_CXX11_IMPLICIT_MOVES 0
177
#endif
178
179
#ifndef VSMC_HAS_CXX11_INHERITING_CONSTRUCTORS
180
#define VSMC_HAS_CXX11_INHERITING_CONSTRUCTORS 0
181
#endif
182
183
#ifndef VSMC_HAS_CXX11_INLINE_NAMESPACES
184
#define VSMC_HAS_CXX11_INLINE_NAMESPACES 0
185
#endif
186
187
#ifndef VSMC_HAS_CXX11_LAMBDAS
188
#define VSMC_HAS_CXX11_LAMBDAS 0
189
#endif
190
191
#ifndef VSMC_HAS_CXX11_LOCAL_TYPE_TEMPLATE_ARGS
192
#define VSMC_HAS_CXX11_LOCAL_TYPE_TEMPLATE_ARGS 0
193
#endif
194
195
#ifndef VSMC_HAS_CXX11_NOEXCEPT
196
#define VSMC_HAS_CXX11_NOEXCEPT 0
197
#endif
198
199
#ifndef VSMC_HAS_CXX11_NONSTATIC_MEMBER_INIT
200
#define VSMC_HAS_CXX11_NONSTATIC_MEMBER_INIT 0
201
#endif
202
203
#ifndef VSMC_HAS_CXX11_NULLPTR
204
#define VSMC_HAS_CXX11_NULLPTR 0
205
#endif
206
207
#ifndef VSMC_HAS_CXX11_OVERRIDE_CONTROL
208
#define VSMC_HAS_CXX11_OVERRIDE_CONTROL 0
209
#endif
210
211
#ifndef VSMC_HAS_CXX11_RANGE_FOR
212
#define VSMC_HAS_CXX11_RANGE_FOR 0
213
#endif
214
215
#ifndef VSMC_HAS_CXX11_RAW_STRING_LITERALS
216
#define VSMC_HAS_CXX11_RAW_STRING_LITERALS 0
217
#endif
218
219
#ifndef VSMC_HAS_CXX11_REFERENCE_QUALIFIED_FUNCTIONS
220
#define VSMC_HAS_CXX11_REFERENCE_QUALIFIED_FUNCTIONS 0
221
#endif
222
223
#ifndef VSMC_HAS_CXX11_RVALUE_REFERENCES
224
#define VSMC_HAS_CXX11_RVALUE_REFERENCES 0
225
#endif
226
227
#ifndef VSMC_HAS_CXX11_STATIC_ASSERT
228
#define VSMC_HAS_CXX11_STATIC_ASSERT 0
229
#endif
230
231
#ifndef VSMC_HAS_CXX11_STRONG_ENUMS
232
#define VSMC_HAS_CXX11_STRONG_ENUMS 0
233
#endif
234
235
#ifndef VSMC_HAS_CXX11_THREAD_LOCAL
236
#define VSMC_HAS_CXX11_THREAD_LOCAL 0
237
#endif
238
239
#ifndef VSMC_HAS_CXX11_TRAILING_RETURN
240
#define VSMC_HAS_CXX11_TRAILING_RETURN 0
241
#endif
242
243
#ifndef VSMC_HAS_CXX11_UNICODE_LITERALS
244
#define VSMC_HAS_CXX11_UNICODE_LITERALS 0
245
#endif
246
247
#ifndef VSMC_HAS_CXX11_UNRESTRICTED_UNIONS
248
#define VSMC_HAS_CXX11_UNRESTRICTED_UNIONS 0
249
#endif
250
251
#ifndef VSMC_HAS_CXX11_USER_LITERALS
252
#define VSMC_HAS_CXX11_USER_LITERALS 0
253
#endif
254
255
#ifndef VSMC_HAS_CXX11_VARIADIC_TEMPLATES
256
#define VSMC_HAS_CXX11_VARIADIC_TEMPLATES 0
257
#endif
258
259
// C++11 library features
260
261
#ifndef VSMC_HAS_CXX11LIB_ALGORITHM
262
#define VSMC_HAS_CXX11LIB_ALGORITHM 0
263
#endif
264
265
#ifndef VSMC_HAS_CXX11LIB_CHRONO
266
#define VSMC_HAS_CXX11LIB_CHRONO 0
267
#endif
268
269
#ifndef VSMC_HAS_CXX11LIB_CMATH
270
#define VSMC_HAS_CXX11LIB_CMATH 0
271
#endif
272
273
#ifndef VSMC_HAS_CXX11LIB_FUNCTIONAL
274
#define VSMC_HAS_CXX11LIB_FUNCTIONAL 0
275
#endif
276
277
#ifndef VSMC_HAS_CXX11LIB_FUTURE
278
#define VSMC_HAS_CXX11LIB_FUTURE 0
279
#endif
280
281
#ifndef VSMC_HAS_CXX11LIB_INITIALIZER_LIST
282
#define VSMC_HAS_CXX11LIB_INITIALIZER_LIST 0
283
#endif
284
285
#ifndef VSMC_HAS_CXX11LIB_MUTEX
286
#define VSMC_HAS_CXX11LIB_MUTEX 0
287
#endif
288
289
#ifndef VSMC_HAS_CXX11LIB_RANDOM
290
#define VSMC_HAS_CXX11LIB_RANDOM 0
291
#endif
292
293
#ifndef VSMC_HAS_CXX11LIB_THREAD
294
#define VSMC_HAS_CXX11LIB_THREAD 0
295
#endif
296
297
#ifndef VSMC_HAS_CXX11LIB_TUPLE
298
#define VSMC_HAS_CXX11LIB_TUPLE 0
299
#endif
300
301
// C++14 language features
302
303
#ifndef VSMC_HAS_CXX14_AGGREGATE_NSDMI
304
#define VSMC_HAS_CXX14_AGGREGATE_NSDMI 0
305
#endif
306
307
#ifndef VSMC_HAS_CXX14_BINARY_LITERALS
308
#define VSMC_HAS_CXX14_BINARY_LITERALS 0
309
#endif
310
311
#ifndef VSMC_HAS_CXX14_CONTEXTUAL_CONVERSIONS
312
#define VSMC_HAS_CXX14_CONTEXTUAL_CONVERSIONS 0
313
#endif
314
315
#ifndef VSMC_HAS_CXX14_DECLTYPE_AUTO
316
#define VSMC_HAS_CXX14_DECLTYPE_AUTO 0
317
#endif
318
319
#ifndef VSMC_HAS_CXX14_DIGIT_SEPERATORS
320
#define VSMC_HAS_CXX14_DIGIT_SEPERATORS 0
321
#endif
322
323
#ifndef VSMC_HAS_CXX14_GENERIC_LAMBDAS
324
#define VSMC_HAS_CXX14_GENERIC_LAMBDAS 0
325
#endif
326
327
#ifndef VSMC_HAS_CXX14_INIT_CAPTURES
328
#define VSMC_HAS_CXX14_INIT_CAPTURES 0
329
#endif
330
331
#ifndef VSMC_HAS_CXX14_RELAXED_CONSTEXPR
332
#define VSMC_HAS_CXX14_RELAXED_CONSTEXPR 0
333
#endif
334
335
#ifndef VSMC_HAS_CXX14_RETURN_TYPE_DEDUCTION
336
#define VSMC_HAS_CXX14_RETURN_TYPE_DEDUCTION 0
337
#endif
338
339
#ifndef VSMC_HAS_CXX14_RUNTIME_SIZED_ARRAYS
340
#define VSMC_HAS_CXX14_RUNTIME_SIZED_ARRAYS 0
341
#endif
342
343
#ifndef VSMC_HAS_CXX14_VARIABLE_TEMPLATES
344
#define VSMC_HAS_CXX14_VARIABLE_TEMPLATES 0
345
#endif
346
347
// C99 library features
348
349
#ifndef VSMC_HAS_C99LIB_MATH
350
#define VSMC_HAS_C99LIB_MATH 0
351
#endif
352
353
// Compiler features
354
355
#ifndef VSMC_INT64
356
#define VSMC_INT64 long long
357
#endif
358
359
#ifndef VSMC_HAS_INT128
360
#define VSMC_HAS_INT128 0
361
#endif
362
363
#ifndef VSMC_HAS_WARNING
364
#define VSMC_HAS_WARNING 0
365
#endif
366
367
#ifndef VSMC_STRONG_INLINE
368
#define VSMC_STRONG_INLINE inline
369
#endif
370
371
// Target features
372
373
#ifndef VSMC_HAS_AES_NI
374
#define VSMC_HAS_AES_NI 0
375
#endif
376
377
#ifndef VSMC_HAS_RDRAND
378
#define VSMC_HAS_RDRAND 0
379
#endif
380
381
#ifndef VSMC_HAS_AVX2
382
#ifdef __AVX2__
383
#define VSMC_HAS_AVX2 1
384
#else
385
#define VSMC_HAS_AVX2 0
386
#endif
387
#endif
388
389
#ifndef VSMC_HAS_AVX
390
#ifdef __AVX__
391
#define VSMC_HAS_AVX 1
392
#else
393
#define VSMC_HAS_AVX VSMC_HAS_AVX2
394
#endif
395
#endif
396
397
#ifndef VSMC_HAS_SSE4_2
398
#ifdef __SSE4_2__
399
#define VSMC_HAS_SSE4_2 1
400
#else
401
#define VSMC_HAS_SSE4_2 VSMC_HAS_AVX
402
#endif
403
#endif
404
405
#ifndef VSMC_HAS_SSE4_1
406
#ifdef __SSE4_1__
407
#define VSMC_HAS_SSE4_1 1
408
#else
409
#define VSMC_HAS_SSE4_1 AVX_HAS_SSE4_2
410
#endif
411
#endif
412
413
#ifndef VSMC_HAS_SSSE3
414
#ifdef __SSSE3__
415
#define VSMC_HAS_SSSE3 1
416
#else
417
#define VSMC_HAS_SSSE3 VSMC_HAS_SSE4_1
418
#endif
419
#endif
420
421
#ifndef VSMC_HAS_SSE3
422
#ifdef __SSE3__
423
#define VSMC_HAS_SSE3 1
424
#else
425
#define VSMC_HAS_SSE3 VSMC_HAS_SSSE3
426
#endif
427
#endif
428
429
#ifndef VSMC_HAS_SSE2
430
#ifdef __SSE2__
431
#define VSMC_HAS_SSE2 1
432
#else
433
#define VSMC_HAS_SSE2 VSMC_HAS_SSE3
434
#endif
435
#endif
436
437
#ifndef VSMC_HAS_X86
438
#if defined(__x86__) || (__x86_64__)
439
#define VSMC_HAS_X86 1
440
#else
441
#define VSMC_HAS_X86 VSMC_HAS_SSE2
442
#endif
443
#endif
444
445
// OS features
446
447
#if VSMC_MAC_VERSION_MIN_REQUIRED(VSMC_MAC_10_7)
448
#ifndef VSMC_HAS_GCD_LION
449
#define VSMC_HAS_GCD_LION 1
450
#endif
451
#endif
452
453
#endif // VSMC_INTERNAL_COMPILER_HPP
intel.hpp
clang.hpp
gcc.hpp
msvc.hpp
Generated by
1.8.9.1