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"
211#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
212#include "sunprofeatures.h"
213#elif defined(__OPEN64__)
214#include "open64features.h"
215#elif defined(__clang__)
216#include "clangfeatures.h"
217#elif defined(__GNUC__)
218#include "gccfeatures.h"
220#include "pgccfeatures.h"
221#elif defined(_MSC_FULL_VER)
222#include "msvcfeatures.h"
224#error "Can't identify compiler. You'll need to add a new xxfeatures.hpp"
228#ifndef R123_USE_CXX11
229#define R123_USE_CXX11 (__cplusplus >= 201103L)
232#ifndef R123_USE_CXX11_UNRESTRICTED_UNIONS
233#define R123_USE_CXX11_UNRESTRICTED_UNIONS R123_USE_CXX11
236#ifndef R123_USE_CXX11_STATIC_ASSERT
237#define R123_USE_CXX11_STATIC_ASSERT R123_USE_CXX11
240#ifndef R123_USE_CXX11_CONSTEXPR
241#define R123_USE_CXX11_CONSTEXPR R123_USE_CXX11
244#ifndef R123_USE_CXX11_EXPLICIT_CONVERSIONS
245#define R123_USE_CXX11_EXPLICIT_CONVERSIONS R123_USE_CXX11
248#ifndef R123_USE_CXX11_RANDOM
249#define R123_USE_CXX11_RANDOM R123_USE_CXX11
252#ifndef R123_USE_CXX11_TYPE_TRAITS
253#define R123_USE_CXX11_TYPE_TRAITS R123_USE_CXX11
256#ifndef R123_USE_CXX11_LONG_LONG
257#define R123_USE_CXX11_LONG_LONG R123_USE_CXX11
260#ifndef R123_USE_CXX11_STD_ARRAY
261#define R123_USE_CXX11_STD_ARRAY R123_USE_CXX11
264#ifndef R123_USE_MULHILO64_C99
265#define R123_USE_MULHILO64_C99 0
268#ifndef R123_USE_MULHILO64_MULHI_INTRIN
269#define R123_USE_MULHILO64_MULHI_INTRIN 0
272#ifndef R123_USE_MULHILO32_MULHI_INTRIN
273#define R123_USE_MULHILO32_MULHI_INTRIN 0
276#ifndef R123_STATIC_ASSERT
277#if R123_USE_CXX11_STATIC_ASSERT
278#define R123_STATIC_ASSERT(expr, msg) static_assert(expr, msg)
281#define R123_STATIC_ASSERT(expr, msg) typedef char static_assertion[(!!(expr))*2-1]
285#ifndef R123_CONSTEXPR
286#if R123_USE_CXX11_CONSTEXPR
287#define R123_CONSTEXPR constexpr
289#define R123_CONSTEXPR
293#ifndef R123_USE_64BIT
294#define R123_USE_64BIT 1
297#ifndef R123_USE_PHILOX_64BIT
298#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))
301#ifndef R123_ULONG_LONG
302#if defined(__cplusplus) && !R123_USE_CXX11_LONG_LONG
307#define R123_ULONG_LONG uint64_t
309#define R123_ULONG_LONG unsigned long long
316#define R123_64BIT(x) UINT64_C(x)
320#define R123_THROW(x) throw (x)
323#ifndef R123_METAL_THREAD_ADDRESS_SPACE
324#define R123_METAL_THREAD_ADDRESS_SPACE
327#ifndef R123_METAL_CONSTANT_ADDRESS_SPACE
328#define R123_METAL_CONSTANT_ADDRESS_SPACE
341#define R123_NO_MACRO_SUBST