From 0c4c170a740b9cd288ee8f43b6ed26a74554aa12 Mon Sep 17 00:00:00 2001
From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
Date: Fri, 20 Jul 2018 23:17:13 -0400
Subject: [PATCH 4/5] Use getauxval to check for NEON on Linux.
Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
---
pyfastnoisesimd/fastnoisesimd/FastNoiseSIMD.cpp | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/pyfastnoisesimd/fastnoisesimd/FastNoiseSIMD.cpp b/pyfastnoisesimd/fastnoisesimd/FastNoiseSIMD.cpp
index 6da16c4..389b3b3 100644
--- a/pyfastnoisesimd/fastnoisesimd/FastNoiseSIMD.cpp
+++ b/pyfastnoisesimd/fastnoisesimd/FastNoiseSIMD.cpp
@@ -71,7 +71,10 @@
#ifdef _WIN32
#include <intrin.h>
#elif defined(FN_ARM)
-#if !defined(__aarch64__) && !defined(FN_IOS)
+#if defined(__linux__) || defined(linux) || defined(__LINUX__) || defined(__linux)
+#include <sys/auxv.h>
+#include <asm/hwcap.h>
+#elif !defined(__aarch64__) && !defined(FN_IOS)
#include "ARM/cpu-features.h"
#endif
#else // 'nix
@@ -88,6 +91,10 @@ int GetFastestSIMD()
{
#if defined(__aarch64__) || defined(FN_IOS)
return FN_NEON;
+#elif defined(__linux__) || defined(linux) || defined(__LINUX__) || defined(__linux)
+ if ((getauxval(AT_HWCAP) & HWCAP_NEON) != 0) {
+ return FN_NEON;
+ }
#else
if (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM)
{
@@ -99,9 +106,9 @@ int GetFastestSIMD()
#endif
return FN_NEON;
}
+#endif
return FN_NO_SIMD_FALLBACK;
-#endif
}
#else
--
2.29.2