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