diff options
Diffstat (limited to 'src/common/Utilities/SFMTRand.cpp')
-rw-r--r-- | src/common/Utilities/SFMTRand.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/common/Utilities/SFMTRand.cpp b/src/common/Utilities/SFMTRand.cpp index eb6e993c856..e409b09a808 100644 --- a/src/common/Utilities/SFMTRand.cpp +++ b/src/common/Utilities/SFMTRand.cpp @@ -20,12 +20,42 @@ #include <array> #include <functional> #include <random> +#include <ctime> + #if defined(__aarch64__) -#include <mm_malloc.h> + #if defined(__clang__) + #include <mm_malloc.h> + #elif defined(__GNUC__) + static __inline__ void *__attribute__((__always_inline__, __nodebug__, __malloc__)) + _mm_malloc(size_t __size, size_t __align) + { + if (__align == 1) + { + return malloc(__size); + } + + if (!(__align & (__align - 1)) && __align < sizeof(void *)) + __align = sizeof(void *); + + void *__mallocedMemory; + + if (posix_memalign(&__mallocedMemory, __align, __size)) + return NULL; + + return __mallocedMemory; + } + + static __inline__ void __attribute__((__always_inline__, __nodebug__)) + _mm_free(void *__p) + { + free(__p); + } + #else + #error aarch64 only on clang and gcc + #endif #else -#include <emmintrin.h> + #include <emmintrin.h> #endif -#include <ctime> SFMTRand::SFMTRand() { |