aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/Utilities/SFMTRand.cpp36
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()
{