struct timespec timespec;
# ifdef __linux__
clock_gettime(CLOCK_MONOTONIC_RAW, ×pec);
-# elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+# elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD_kernel__)
clock_gettime(CLOCK_UPTIME_FAST, ×pec);
# else
-# warn Using clock_gettime with CLOCK_REALTIME for monotonic clocks
+# warning Using clock_gettime with CLOCK_REALTIME for monotonic clocks
clock_gettime(CLOCK_REALTIME, ×pec);
# endif
return ((timespec.tv_sec * 1000000000UL) + timespec.tv_nsec);
#endif
-#if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
-+#if defined(linux) || defined(__APPLE__) || defined(__MACOSX) || defined(__ANDROID__)
++#if defined(linux) || defined(__APPLE__) || defined(__MACOSX) || defined(__ANDROID__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
#include <alloca.h>
-#include <emmintrin.h>