diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2016-09-16 13:05:56 -0500 |
---|---|---|
committer | Derek Foreman <derekf@osg.samsung.com> | 2016-09-16 14:10:49 -0500 |
commit | a453599d26336ada2d2e09a86c8baf994b4cae8c (patch) | |
tree | 20572c6a87ab61afec8fdfa1f57b0b50d71d0ca6 | |
parent | 0f98e1c6d324a7d17b6e7bdb7b1b41d3a2db9954 (diff) | |
download | efl-a453599d26336ada2d2e09a86c8baf994b4cae8c.tar.gz |
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.
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/lib/eina/eina_cpu.c | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 924ceaad39..d0b9962823 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 fe3986111b..1de86d8387 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(); |