diff options
author | daMaex <damaex@live.de> | 2020-03-01 20:16:57 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-22 20:50:53 +0100 |
commit | 31efaaac4036903783ae9fa285f661a3f3d29012 (patch) | |
tree | 62f9e587883ea0c50605a6f2c2b814f1a3321269 /src/common/Utilities/SFMTRand.cpp | |
parent | 8ec51bf3b69b2d34607b555f2d52b09f8b73c9e3 (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.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() { |