derekf pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=a453599d26336ada2d2e09a86c8baf994b4cae8c
commit a453599d26336ada2d2e09a86c8baf994b4cae8c Author: Derek Foreman <der...@osg.samsung.com> Date: Fri Sep 16 13:05:56 2016 -0500 eina_cpu: Detect NEON if available We may have a few conditionals around that think this has actually been set at some point, let's surprise them by actually doing that. --- configure.ac | 2 ++ src/lib/eina/eina_cpu.c | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 924ceaa..d0b9962 100644 --- a/configure.ac +++ b/configure.ac @@ -449,6 +449,8 @@ sys/types.h \ sys/param.h \ sys/mman.h \ netinet/in.h \ +sys/auxv.h \ +asm/hwcap.h \ ]) EFL_CHECK_PATH_MAX diff --git a/src/lib/eina/eina_cpu.c b/src/lib/eina/eina_cpu.c index fe39861..1de86d8 100644 --- a/src/lib/eina/eina_cpu.c +++ b/src/lib/eina/eina_cpu.c @@ -53,6 +53,11 @@ #include "eina_cpu_private.h" +#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) +# include <sys/auxv.h> +# include <asm/hwcap.h> +#endif + /*============================================================================* * Local * *============================================================================*/ @@ -129,6 +134,19 @@ void _x86_simd(Eina_Cpu_Features *features) } #endif +#if defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) +static void +_arm_cpu_features(Eina_Cpu_Features *features) +{ + unsigned long aux; + + aux = getauxval(AT_HWCAP); + + if (aux & HWCAP_NEON) + *features |= EINA_CPU_NEON; +} +#endif + /*============================================================================* * Global * *============================================================================*/ @@ -147,8 +165,9 @@ eina_cpu_init(void) { #if defined(__i386__) || defined(__x86_64__) _x86_simd(&eina_cpu_features); +#elif defined(HAVE_SYS_AUXV_H) && defined(HAVE_ASM_HWCAP_H) && defined(__arm__) && defined(__linux__) + _arm_cpu_features(&eina_cpu_features); #endif - // FIXME: Handle NEON and friends // Figure out the page size for this system _eina_page_size(); --