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();

-- 


Reply via email to