X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ryg_rans%2Fplatform.h;fp=ryg_rans%2Fplatform.h;h=5860fc301bc887fb3c7cdb95a9cf23d406fe2f8d;hb=2225f774d8f17f45e93a37f627c5ed450401d06d;hp=0000000000000000000000000000000000000000;hpb=76fd9c6939007519b84264b0721e031551ba464e;p=narabu diff --git a/ryg_rans/platform.h b/ryg_rans/platform.h new file mode 100644 index 0000000..5860fc3 --- /dev/null +++ b/ryg_rans/platform.h @@ -0,0 +1,64 @@ +// Just some platform utilities. +#ifndef PLATFORM_H_INCLUDED +#define PLATFORM_H_INCLUDED + +// x86 intrinsics (__rdtsc etc.) + +#if defined(_MSC_VER) + +#define _CRT_SECURE_NO_DEPRECATE +#include +#define ALIGNSPEC(type,name,alignment) __declspec(align(alignment)) type name + +#elif defined(__GNUC__) + +#include +#define ALIGNSPEC(type,name,alignment) type name __attribute__((aligned(alignment))) + +#else +#error Unknown compiler! +#endif + +// Timer + +#if defined(_WIN32) + +#define WIN32_LEAN_AND_MEAN +#define NOMINMAX +#include + +#define PRIu64 "llu" + +double timer() +{ + LARGE_INTEGER ctr, freq; + QueryPerformanceCounter(&ctr); + QueryPerformanceFrequency(&freq); + return 1.0 * ctr.QuadPart / freq.QuadPart; +} + +#elif defined(__linux__) + +#define __STDC_FORMAT_MACROS +#include +#include +#include + +static inline double timer() +{ + timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 0; + int status = clock_gettime(CLOCK_MONOTONIC, &ts); + assert(status == 0); + return double(ts.tv_sec) + 1.0e-9 * double(ts.tv_nsec); +} + +#else + +#error Unknown platform! + +#endif + +#endif // PLATFORM_H_INCLUDED +