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
00190
00191
00192
00193
00194
00195
00196 #if defined(__OPENCL_VERSION__) && __OPENCL_VERSION__ > 0
00197 #include "openclfeatures.h"
00198 #elif defined(__CUDACC__)
00199 #include "nvccfeatures.h"
00200 #elif defined(__ICC)
00201 #include "iccfeatures.h"
00202 #elif defined(__xlC__)
00203 #include "xlcfeatures.h"
00204 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
00205 #include "sunprofeatures.h"
00206 #elif defined(__OPEN64__)
00207 #include "open64features.h"
00208 #elif defined(__clang__)
00209 #include "clangfeatures.h"
00210 #elif defined(__GNUC__)
00211 #include "gccfeatures.h"
00212 #elif defined(__PGI)
00213 #include "pgccfeatures.h"
00214 #elif defined(_MSC_FULL_VER)
00215 #include "msvcfeatures.h"
00216 #else
00217 #error "Can't identify compiler. You'll need to add a new xxfeatures.hpp"
00218 {
00219 #endif
00220
00221 #ifndef R123_USE_CXX11
00222 #define R123_USE_CXX11 (__cplusplus >= 201103L)
00223 #endif
00224
00225 #ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS
00226 #define R123_USE_CXX11_UNRESTRICTED_UNIONS R123_USE_CXX11
00227 #endif
00228
00229 #ifndef R123_USE_CXX11_STATIC_ASSERT
00230 #define R123_USE_CXX11_STATIC_ASSERT R123_USE_CXX11
00231 #endif
00232
00233 #ifndef R123_USE_CXX11_CONSTEXPR
00234 #define R123_USE_CXX11_CONSTEXPR R123_USE_CXX11
00235 #endif
00236
00237 #ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS
00238 #define R123_USE_CXX11_EXPLICIT_CONVERSIONS R123_USE_CXX11
00239 #endif
00240
00241 #ifndef R123_USE_CXX11_RANDOM
00242 #define R123_USE_CXX11_RANDOM R123_USE_CXX11
00243 #endif
00244
00245 #ifndef R123_USE_CXX11_TYPE_TRAITS
00246 #define R123_USE_CXX11_TYPE_TRAITS R123_USE_CXX11
00247 #endif
00248
00249 #ifndef R123_USE_CXX11_LONG_LONG
00250 #define R123_USE_CXX11_LONG_LONG R123_USE_CXX11
00251 #endif
00252
00253 #ifndef R123_USE_MULHILO64_C99
00254 #define R123_USE_MULHILO64_C99 0
00255 #endif
00256
00257 #ifndef R123_USE_MULHILO64_MULHI_INTRIN
00258 #define R123_USE_MULHILO64_MULHI_INTRIN 0
00259 #endif
00260
00261 #ifndef R123_USE_MULHILO32_MULHI_INTRIN
00262 #define R123_USE_MULHILO32_MULHI_INTRIN 0
00263 #endif
00264
00265 #ifndef R123_STATIC_ASSERT
00266 #if R123_USE_CXX11_STATIC_ASSERT
00267 #define R123_STATIC_ASSERT(expr, msg) static_assert(expr, msg)
00268 #else
00269
00270 #define R123_STATIC_ASSERT(expr, msg) typedef char static_assertion[(!!(expr))*2-1]
00271 #endif
00272 #endif
00273
00274 #ifndef R123_CONSTEXPR
00275 #if R123_USE_CXX11_CONSTEXPR
00276 #define R123_CONSTEXPR constexpr
00277 #else
00278 #define R123_CONSTEXPR
00279 #endif
00280 #endif
00281
00282 #ifndef R123_USE_PHILOX_64BIT
00283 #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 || R123_USE_MULHILO64_MULHI_INTRIN)
00284 #endif
00285
00286 #ifndef R123_ULONG_LONG
00287 #if defined(__cplusplus) && !R123_USE_CXX11_LONG_LONG
00288
00289
00290
00291
00292 #define R123_ULONG_LONG uint64_t
00293 #else
00294 #define R123_ULONG_LONG unsigned long long
00295 #endif
00296 #endif
00297
00298
00299
00300 #ifndef R123_64BIT
00301 #define R123_64BIT(x) UINT64_C(x)
00302 #endif
00303
00304 #ifndef R123_THROW
00305 #define R123_THROW(x) throw (x)
00306 #endif
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318 #define R123_NO_MACRO_SUBST
00319