]> git.sesse.net Git - vlc/commitdiff
Check for ARM NEON at build-time if possible
authorRémi Denis-Courmont <remi@remlab.net>
Wed, 1 Aug 2012 21:19:24 +0000 (00:19 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Wed, 1 Aug 2012 21:20:11 +0000 (00:20 +0300)
configure.ac
include/vlc_cpu.h
modules/arm_neon/audio_format.c
modules/arm_neon/chroma_yuv.c
modules/arm_neon/yuv_rgb.c
modules/codec/libmpeg2.c
modules/video_filter/deinterlace/deinterlace.c
src/misc/cpu.c
src/posix/linux_cpu.c

index 702ae7d360fbb666bb847eb21b841ac681d5a9be..7ac07e47ac00247e6dcb7d8952ebcc5a25750dc8 100644 (file)
@@ -1330,7 +1330,6 @@ asm volatile("ssat r0, #1, r0":::"r0"); /* assume ARMv6 */
   VLC_RESTORE_FLAGS
   AS_IF([test "$ac_cv_neon_inline" != "no"], [
     NEON_CFLAGS="$ac_cv_neon_inline"
-    AC_DEFINE([CAN_COMPILE_NEON], 1, [Define to 1 if NEON (and ARMv6) assembly is available with NEON_CFLAGS.])
   ])
 ], [
   ac_cv_neon_inline="no"
index befe49e7205c78a09b4d1284bbb9f5cd4d1fab2b..bc0b1c16ea86d181a86fda55a1de2d784b7292a3 100644 (file)
@@ -67,7 +67,13 @@ VLC_API unsigned vlc_CPU(void);
 #  else
 #   define HAVE_FPU 0
 #  endif
-#  define CPU_CAPABILITY_NEON    (1<<24)
+#  define VLC_CPU_ARM_NEON 2
+
+#  ifdef __ARM_NEON__
+#   define vlc_CPU_ARM_NEON() (1)
+#  else
+#   define vlc_CPU_ARM_NEON() ((vlc_CPU() & VLC_CPU_ARM_NEON) != 0)
+#  endif
 
 # elif defined (__sparc__)
 #  define HAVE_FPU 1
index 3a76f18321c8cbc59b17f441b19c7d935bb4b3cb..ec331615a84612df33b3c4e389a81d0f7c4fa689 100644 (file)
@@ -45,7 +45,7 @@ static int Open (vlc_object_t *obj)
 {
     filter_t *filter = (filter_t *)obj;
 
-    if (!(vlc_CPU() & CPU_CAPABILITY_NEON))
+    if (!vlc_CPU_ARM_NEON())
         return VLC_EGENERIC;
     if (!AOUT_FMTS_SIMILAR (&filter->fmt_in.audio, &filter->fmt_out.audio))
         return VLC_EGENERIC;
index be9ccb6a6b384f28b38daf70f96608af74704154..957d2fd8b020fe70c64db991c9a47324b67adc17 100644 (file)
@@ -162,7 +162,7 @@ static int Open (vlc_object_t *obj)
 {
     filter_t *filter = (filter_t *)obj;
 
-    if (!(vlc_CPU() & CPU_CAPABILITY_NEON))
+    if (!vlc_CPU_ARM_NEON())
         return VLC_EGENERIC;
     if ((filter->fmt_in.video.i_width != filter->fmt_out.video.i_width)
      || (filter->fmt_in.video.i_height != filter->fmt_out.video.i_height))
index 8b458f40d1d254fd83a73a1d9938c76c40610c06..91e24ae3e4d085b21f56dddce0d7607680a09c9a 100644 (file)
@@ -125,7 +125,7 @@ static int Open (vlc_object_t *obj)
 {
     filter_t *filter = (filter_t *)obj;
 
-    if (!(vlc_CPU() & CPU_CAPABILITY_NEON))
+    if (!vlc_CPU_ARM_NEON())
         return VLC_EGENERIC;
 
     if (((filter->fmt_in.video.i_width | filter->fmt_in.video.i_height) & 1)
index 8365c159fd446879c0294cc7dec6ab97050d5044..4fac95248e0b41846c74033c1738caffca946975 100644 (file)
@@ -208,7 +208,7 @@ static int OpenDecoder( vlc_object_t *p_this )
     i_accel |= MPEG2_ACCEL_ARM;
 # endif
 # ifdef MPEG2_ACCEL_ARM_NEON
-    if( vlc_CPU() & CPU_CAPABILITY_NEON )
+    if( vlc_CPU_ARM_NEON() )
        i_accel |= MPEG2_ACCEL_ARM_NEON;
 # endif
 
index 2762f04a9979f6f2c1fe30144d732119bec686a3..1995afcd6e321d10d471d8eefc40b854850c9b6d 100644 (file)
@@ -660,7 +660,7 @@ int Open( vlc_object_t *p_this )
     else
 #endif
 #if defined __ARM_NEON__ // FIXME: runtime detect support
-    if( chroma->pixel_size == 1 && (vlc_CPU() & CPU_CAPABILITY_NEON) )
+    if( chroma->pixel_size == 1 && vlc_CPU_ARM_NEON() )
     {
         p_sys->pf_merge = MergeNEON;
         p_sys->pf_end_merge = NULL;
index 089f891cd527c1e016695f555927c9d0d89b6f7b..748456293e52eed9ed513dd2ab4c3ec987701fbc 100644 (file)
@@ -317,14 +317,11 @@ out:
 #   endif
 
 #elif defined ( __arm__)
-    #ifdef __ARM_NEON__
-        i_capabilities |= CPU_CAPABILITY_NEON;
-    #elif defined (CAN_COMPILE_NEON)
-        #ifdef __ANDROID__
-            if (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
-                i_capabilities |= CPU_CAPABILITY_NEON;
-        #endif
-    #endif
+# ifdef __ANDROID__
+    if (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
+        i_capabilities |= VLC_CPU_ARM_NEON;
+# endif
+
 #endif
 
     cpu_flags = i_capabilities;
@@ -347,14 +344,14 @@ unsigned vlc_CPU (void)
 
 void vlc_CPU_dump (vlc_object_t *obj)
 {
-    const unsigned flags = vlc_CPU();
     char buf[200], *p = buf;
 
+#if defined (__i386__) || defined (__x86_64__)
+    const unsigned flags = vlc_CPU();
 #define PRINT_CAPABILITY( capability, string ) \
     if (flags & (capability)) \
         p += sprintf (p, "%s ", (string) )
 
-#if defined (__i386__) || defined (__x86_64__)
     PRINT_CAPABILITY(CPU_CAPABILITY_MMX, "MMX");
     PRINT_CAPABILITY(CPU_CAPABILITY_3DNOW, "3DNow!");
     PRINT_CAPABILITY(CPU_CAPABILITY_MMXEXT, "MMXEXT");
@@ -367,13 +364,11 @@ void vlc_CPU_dump (vlc_object_t *obj)
     PRINT_CAPABILITY(CPU_CAPABILITY_SSE4A,  "SSE4A");
 
 #elif defined (__powerpc__) || defined (__ppc__) || defined (__ppc64__)
-    PRINT_CAPABILITY(CPU_CAPABILITY_ALTIVEC, "AltiVec");
+    if (vlc_CPU() & CPU_CAPABILITY_ALTIVEC)
+        p += sprintf (p, "AltiVec");
 
 #elif defined (__arm__)
-    PRINT_CAPABILITY(CPU_CAPABILITY_NEON, "NEONv1");
-
-#else
-    (void) flags;
+    if (vlc_CPU_ARM_NEON()) p += sprintf (p, "ARM_NEON ");
 
 #endif
 
index d24342457277b20d4c4efc0c02eb6e1a63e7d75a..1b7f5d60a84f00ee9266f127c61f3d33345ed3b1 100644 (file)
@@ -63,10 +63,8 @@ static void vlc_CPU_init (void)
         while ((cap = strsep (&p, " ")) != NULL)
         {
 #if defined (__arm__)
-# ifndef __ARM_NEON__
             if (!strcmp (cap, "neon"))
-                core_caps |= CPU_CAPABILITY_NEON;
-# endif
+                core_caps |= VLC_CPU_ARM_NEON;
 
 #elif defined (__i386__) || defined (__x86_64__)
 # ifndef __MMX__
@@ -122,12 +120,7 @@ static void vlc_CPU_init (void)
         all_caps = 0; /* Do not assume any capability! */
 
     /* Always enable capabilities that were forced during compilation */
-#if defined (__arm__)
-# ifdef __ARM_NEON__
-    all_caps |= CPU_CAPABILITY_NEON;
-# endif
-
-#elif defined (__i386__) || defined (__x86_64__)
+#if defined (__i386__) || defined (__x86_64__)
 # ifdef __MMX__
     all_caps |= CPU_CAPABILITY_MMX;
 # endif