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