Blob Blame History Raw
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