Skip to content

Commit 2a343b1

Browse files
Support linux-based NEON instruction set detection
1 parent 2b656bf commit 2a343b1

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

include/xsimd/config/xsimd_cpuid.hpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
#include <algorithm>
66
#include <array>
77

8+
#if defined(__linux__) && (defined(__ARM_NEON) || defined(_M_ARM))
9+
#include <sys/auxv.h>
10+
#include <asm/hwcap.h>
11+
#endif
12+
813
#if defined(_MSC_VER)
914
// Contains the definition of __cpuidex
1015
#include <intrin.h>
@@ -46,12 +51,14 @@ namespace xsimd
4651
neon64 = 1;
4752
best = neon64::version();
4853
#elif defined(__ARM_NEON) || defined(_M_ARM)
49-
// TODO: fix undefined error of AT_HWCAP on arm7
50-
//neon = bool(getauxval(AT_HWCAP) & HWCAP_NEON);
51-
//best = neon::version() * neon;
52-
neon = 1;
54+
#if defined(__linux__)
55+
neon = bool(getauxval(AT_HWCAP) & HWCAP_NEON);
56+
#else
57+
// that's very conservative :-/
58+
neon = 0;
59+
#endif
5360
neon64 = 0;
54-
best = neon::version();
61+
best = neon::version() * neon;
5562

5663
#elif defined(__x86_64__) || defined(__i386__) || defined(_M_AMD64) || defined(_M_IX86)
5764
auto get_cpuid = [](int reg[4], int func_id)

0 commit comments

Comments
 (0)