aboutsummaryrefslogtreecommitdiff
path: root/src/common/Utilities/SFMTRand.cpp
diff options
context:
space:
mode:
authordaMaex <damaex@live.de>2020-03-01 20:16:57 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-22 20:50:53 +0100
commit31efaaac4036903783ae9fa285f661a3f3d29012 (patch)
tree62f9e587883ea0c50605a6f2c2b814f1a3321269 /src/common/Utilities/SFMTRand.cpp
parent8ec51bf3b69b2d34607b555f2d52b09f8b73c9e3 (diff)
Core: build on aarch64 with gcc (#24216)
* build on aarch64 with gcc * Core/aarch64: readability on preprocessor macro * Core/aarch64: TC C++ codestyle adjustment (cherry picked from commit ce449f6b5332ab466d935de0077bccfdde716d1b)
Diffstat (limited to 'src/common/Utilities/SFMTRand.cpp')
-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()
{