Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00189
00190
00191
00192
00193
00194
00195 #if defined(__OPENCL_VERSION__) && __OPENCL_VERSION__ > 0
00196 #include "openclfeatures.h"
00197 #elif defined(__CUDACC__)
00198 #include "nvccfeatures.h"
00199 #elif defined(__ICC)
00200 #include "iccfeatures.h"
00201 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
00202 #include "sunprofeatures.h"
00203 #elif defined(__OPEN64__)
00204 #include "open64features.h"
00205 #elif defined(__llvm__)
00206 #include "clangfeatures.h"
00207 #elif defined(__GNUC__)
00208 #include "gccfeatures.h"
00209 #elif defined(_MSC_FULL_VER)
00210 #include "msvcfeatures.h"
00211 #else
00212 #error "Can't identify compiler. You'll need to add a new xxfeatures.hpp"
00213 {
00214 #endif
00215
00216 #ifndef R123_USE_CXX11
00217 #define R123_USE_CXX11 (__cplusplus >= 201103L)
00218 #endif
00219
00220 #ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS
00221 #define R123_USE_CXX11_UNRESTRICTED_UNIONS R123_USE_CXX11
00222 #endif
00223
00224 #ifndef R123_USE_CXX11_STATIC_ASSERT
00225 #define R123_USE_CXX11_STATIC_ASSERT R123_USE_CXX11
00226 #endif
00227
00228 #ifndef R123_USE_CXX11_CONSTEXPR
00229 #define R123_USE_CXX11_CONSTEXPR R123_USE_CXX11
00230 #endif
00231
00232 #ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS
00233 #define R123_USE_CXX11_EXPLICIT_CONVERSIONS R123_USE_CXX11
00234 #endif
00235
00236 #ifndef R123_USE_CXX11_RANDOM
00237 #define R123_USE_CXX11_RANDOM R123_USE_CXX11
00238 #endif
00239
00240 #ifndef R123_USE_CXX11_TYPE_TRAITS
00241 #define R123_USE_CXX11_TYPE_TRAITS R123_USE_CXX11
00242 #endif
00243
00244 #ifndef R123_USE_CXX11_LONG_LONG
00245 #define R123_USE_CXX11_LONG_LONG R123_USE_CXX11
00246 #endif
00247
00248 #ifndef R123_USE_MULHILO64_C99
00249 #define R123_USE_MULHILO64_C99 0
00250 #endif
00251
00252 #ifndef R123_STATIC_ASSERT
00253 #if R123_USE_CXX11_STATIC_ASSERT
00254 #define R123_STATIC_ASSERT(expr, msg) static_assert(expr, msg)
00255 #else
00256
00257 #define R123_STATIC_ASSERT(expr, msg) typedef char static_assertion[(!!(expr))*2-1]
00258 #endif
00259 #endif
00260
00261 #ifndef R123_CONSTEXPR
00262 #if R123_USE_CXX11_CONSTEXPR
00263 #define R123_CONSTEXPR constexpr
00264 #else
00265 #define R123_CONSTEXPR
00266 #endif
00267 #endif
00268
00269 #ifndef R123_USE_PHILOX_64BIT
00270 #define R123_USE_PHILOX_64BIT (R123_USE_MULHILO64_ASM || R123_USE_MULHILO64_MSVC_INTRIN || R123_USE_MULHILO64_CUDA_INTRIN || R123_USE_GNU_UINT128 || R123_USE_MULHILO64_C99 || R123_USE_MULHILO64_OPENCL_INTRIN)
00271 #endif
00272
00273 #ifndef R123_ULONG_LONG
00274 #if defined(__cplusplus) && !R123_USE_CXX11_LONG_LONG
00275
00276
00277
00278
00279 #define R123_ULONG_LONG uint64_t
00280 #else
00281 #define R123_ULONG_LONG unsigned long long
00282 #endif
00283 #endif
00284
00285
00286
00287 #ifndef R123_64BIT
00288 #define R123_64BIT(x) UINT64_C(x)
00289 #endif
00290
00291 #ifndef R123_THROW
00292 #define R123_THROW(x) throw (x)
00293 #endif
00294
00295 #ifndef R123_USE_U01_DOUBLE
00296 #define R123_USE_U01_DOUBLE 1
00297 #endif
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309 #define R123_NO_MACRO_SUBST
00310