Go to the documentation of this file.
201 #if defined(__METAL_MACOS__)
202 #include "metalfeatures.h"
203 #elif defined(__OPENCL_VERSION__) && __OPENCL_VERSION__ > 0
204 #include "openclfeatures.h"
205 #elif defined(__CUDACC__)
206 #include "nvccfeatures.h"
208 #include "iccfeatures.h"
209 #elif defined(__xlC__) || defined(__ibmxl__)
210 #include "xlcfeatures.h"
212 #include "pgccfeatures.h"
213 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
214 #include "sunprofeatures.h"
215 #elif defined(__OPEN64__)
216 #include "open64features.h"
217 #elif defined(__clang__) || defined(__bgclang__)
218 #include "clangfeatures.h"
219 #elif defined(__FCC_VERSION) || defined(__FUJITSU)
220 #include "fujitsufeatures.h"
221 #elif defined(__GNUC__)
222 #include "gccfeatures.h"
223 #elif defined(_MSC_FULL_VER)
224 #include "msvcfeatures.h"
226 #error "Can't identify compiler. You'll need to add a new xxfeatures.hpp"
230 #ifndef R123_USE_CXX11
231 #define R123_USE_CXX11 (__cplusplus >= 201103L)
234 #ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS
235 #define R123_USE_CXX11_UNRESTRICTED_UNIONS R123_USE_CXX11
238 #ifndef R123_USE_CXX11_STATIC_ASSERT
239 #define R123_USE_CXX11_STATIC_ASSERT R123_USE_CXX11
242 #ifndef R123_USE_CXX11_CONSTEXPR
243 #define R123_USE_CXX11_CONSTEXPR R123_USE_CXX11
246 #ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS
247 #define R123_USE_CXX11_EXPLICIT_CONVERSIONS R123_USE_CXX11
250 #ifndef R123_USE_CXX11_RANDOM
251 #define R123_USE_CXX11_RANDOM R123_USE_CXX11
254 #ifndef R123_USE_CXX11_TYPE_TRAITS
255 #define R123_USE_CXX11_TYPE_TRAITS R123_USE_CXX11
258 #ifndef R123_USE_CXX11_LONG_LONG
259 #define R123_USE_CXX11_LONG_LONG R123_USE_CXX11
262 #ifndef R123_USE_CXX11_STD_ARRAY
263 #define R123_USE_CXX11_STD_ARRAY R123_USE_CXX11
266 #ifndef R123_USE_MULHILO64_C99
267 #define R123_USE_MULHILO64_C99 0
270 #ifndef R123_USE_MULHILO64_MULHI_INTRIN
271 #define R123_USE_MULHILO64_MULHI_INTRIN 0
274 #ifndef R123_USE_MULHILO32_MULHI_INTRIN
275 #define R123_USE_MULHILO32_MULHI_INTRIN 0
278 #ifndef R123_STATIC_ASSERT
279 #if R123_USE_CXX11_STATIC_ASSERT
280 #define R123_STATIC_ASSERT(expr, msg) static_assert(expr, msg)
283 #define R123_STATIC_ASSERT(expr, msg) typedef char static_assertion[(!!(expr))*2-1]
287 #ifndef R123_CONSTEXPR
288 #if R123_USE_CXX11_CONSTEXPR
289 #define R123_CONSTEXPR constexpr
291 #define R123_CONSTEXPR
295 #ifndef R123_USE_64BIT
296 #define R123_USE_64BIT 1
299 #ifndef R123_USE_PHILOX_64BIT
300 #define R123_USE_PHILOX_64BIT (R123_USE_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))
303 #ifndef R123_ULONG_LONG
304 #if defined(__cplusplus) && !R123_USE_CXX11_LONG_LONG
309 #define R123_ULONG_LONG uint64_t
311 #define R123_ULONG_LONG unsigned long long
318 #define R123_64BIT(x) UINT64_C(x)
322 #define R123_THROW(x) throw (x)
325 #ifndef R123_METAL_THREAD_ADDRESS_SPACE
326 #define R123_METAL_THREAD_ADDRESS_SPACE
329 #ifndef R123_METAL_CONSTANT_ADDRESS_SPACE
330 #define R123_METAL_CONSTANT_ADDRESS_SPACE
343 #define R123_NO_MACRO_SUBST