]> git.sesse.net Git - vlc/commitdiff
Check for SSSE3 at build time if possible
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 4 Aug 2012 13:35:19 +0000 (16:35 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 4 Aug 2012 13:37:42 +0000 (16:37 +0300)
include/vlc_cpu.h
modules/codec/avcodec/avcodec.c
modules/codec/avcodec/copy.c
modules/codec/avcodec/encoder.c
modules/stream_out/switcher.c
modules/video_filter/deinterlace/algo_yadif.c
modules/video_filter/gradfun.c
src/misc/cpu.c
src/posix/linux_cpu.c

index 1c2090d79603aba57cc960d6f0ad0f74486990b9..975368771c1ff0593752879eb66497cadf6a2607 100644 (file)
@@ -36,7 +36,7 @@ VLC_API unsigned vlc_CPU(void);
 #  define VLC_CPU_SSE    64
 #  define VLC_CPU_SSE2   128
 #  define VLC_CPU_SSE3   256
-#  define CPU_CAPABILITY_SSSE3   (1<<9)
+#  define VLC_CPU_SSSE3  512
 #  define CPU_CAPABILITY_SSE4_1  (1<<10)
 #  define CPU_CAPABILITY_SSE4_2  (1<<11)
 #  define CPU_CAPABILITY_SSE4A   (1<<12)
@@ -79,6 +79,12 @@ VLC_API unsigned vlc_CPU(void);
 #  define vlc_CPU_SSE3() ((vlc_CPU() & VLC_CPU_SSE3) != 0)
 # endif
 
+# ifdef __SSSE3__
+#  define vlc_CPU_SSSE3() (1)
+# else
+#  define vlc_CPU_SSSE3() ((vlc_CPU() & VLC_CPU_SSSE3) != 0)
+# endif
+
 # elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__)
 #  define HAVE_FPU 1
 #  define VLC_CPU_ALTIVEC 2
index 2c1961cbc05cfab4e760f8d676553b4b09dcc3f0..a4e3d8283fcd9dcbbce2c1879023bae05e08657b 100644 (file)
@@ -347,7 +347,7 @@ static int OpenDecoder( vlc_object_t *p_this )
         p_context->dsp_mask |= AV_CPU_FLAG_SSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSSE3
-    if( !(i_cpu & CPU_CAPABILITY_SSSE3) )
+    if( !vlc_CPU_SSE3() )
         p_context->dsp_mask |= AV_CPU_FLAG_SSSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSE4
index 1573b93a2cafe278e21d4bce0fb6eb1f4c6f5ff9..71758ef1dda380defc7e8cdf8ec86cf0203cdf39 100644 (file)
         store " %%xmm4,   48(%[dst])\n" \
         : : [dst]"r"(dstp), [src]"r"(srcp) : "memory")
 
+#ifndef __SSSE3__
+# undef vlc_CPU_SSSE3
+# define vlc_CPU_SSSE3() ((cpu & VLC_CPU_SSSE3) != 0)
+#endif
+
 /* Execute the instruction op only if SSE2 is supported. */
 #ifdef CAN_COMPILE_SSE2
 # ifdef __SSE2__
@@ -180,7 +185,8 @@ static void SplitUV(uint8_t *dstu, size_t dstu_pitch,
     "movhpd %%xmm3,  24(%[dst2])\n"
 
 #ifdef CAN_COMPILE_SSSE3
-        if (cpu & CPU_CAPABILITY_SSSE3) {
+        if (vlc_CPU_SSE3())
+        {
             for (x = 0; x < (width & ~31); x += 32) {
                 asm volatile (
                     "movdqu (%[shuffle]), %%xmm7\n"
index 70f98ad543fdaf838bcdabbc9d8cf3946027765b..7101df147077bc313f17ec1158228f3bcc36c879 100644 (file)
@@ -341,7 +341,7 @@ int OpenEncoder( vlc_object_t *p_this )
         p_context->dsp_mask |= AV_CPU_FLAG_SSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSSE3
-    if( !(i_cpu & CPU_CAPABILITY_SSSE3) )
+    if( !vlc_CPU_SSSE3() )
         p_context->dsp_mask |= AV_CPU_FLAG_SSSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSE4
index a52dbc7be095403fff0d0efc1071e546fe6490e9..b6ebf526040a23a4dba9d7a4573fba32dcc33786 100644 (file)
@@ -396,7 +396,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSSE3
-        if( !(i_cpu & CPU_CAPABILITY_SSSE3) )
+        if( !vlc_CPU_SSSE3() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSE4
@@ -817,7 +817,7 @@ static mtime_t VideoCommand( sout_stream_t *p_stream, sout_stream_id_t *id )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSSE3
-        if( !(i_cpu & CPU_CAPABILITY_SSSE3) )
+        if( !vlc_CPU_SSSE3() )
             id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSSE3;
 # endif
 # ifdef AV_CPU_FLAG_SSE4
index 8345d3a87b2b2956ce0e7d0cd945d9a551028106..04b34fa876c37d02b6594e86950a30ec53fa8a6a 100644 (file)
@@ -109,7 +109,7 @@ int RenderYadif( filter_t *p_filter, picture_t *p_dst, picture_t *p_src,
                        int w, int prefs, int mrefs, int parity, int mode);
 
 #if defined(HAVE_YADIF_SSSE3)
-        if( vlc_CPU() & CPU_CAPABILITY_SSSE3 )
+        if( vlc_CPU_SSSE3() )
             filter = yadif_filter_line_ssse3;
         else
 #endif
index 701a119e5f003f2e66ae338d31ffb443585e59a6..3249682d96d37a1e9ef0e1ab5c4cd7e378e9de26 100644 (file)
@@ -141,7 +141,7 @@ static int Open(vlc_object_t *object)
 #endif
         cfg->blur_line   = blur_line_c;
 #if HAVE_SSSE3
-    if (vlc_CPU() & CPU_CAPABILITY_SSSE3)
+    if (vlc_CPU_SSSE3())
         cfg->filter_line = filter_line_ssse3;
     else
 #endif
index c258e94582e1cf8b67b075713582d8b64f1ef8e8..e0ae7b956fb019c8b169eb85cdaed760b7f12873 100644 (file)
@@ -242,11 +242,9 @@ void vlc_CPU_init (void)
         i_capabilities |= VLC_CPU_SSE3;
 # endif
 
-# if defined (__SSSE3__)
-    i_capabilities |= CPU_CAPABILITY_SSSE3;
-# elif defined (CAN_COMPILE_SSSE3)
+# if defined (CAN_COMPILE_SSSE3)
     if ((i_ecx & 0x00000200) && vlc_CPU_check ("SSSE3", SSSE3_test))
-        i_capabilities |= CPU_CAPABILITY_SSSE3;
+        i_capabilities |= VLC_CPU_SSSE3;
 # endif
 
 # if defined (__SSE4_1__)
@@ -346,7 +344,7 @@ void vlc_CPU_dump (vlc_object_t *obj)
     if (vlc_CPU_SSE()) p += sprintf (p, "SSE ");;
     if (vlc_CPU_SSE2()) p += sprintf (p, "SSE2 ");;
     if (vlc_CPU_SSE3()) p += sprintf (p, "SSE2 ");;
-    PRINT_CAPABILITY(CPU_CAPABILITY_SSSE3, "SSSE3");
+    if (vlc_CPU_SSSE3()) p += sprintf (p, "SSSE3 ");;
     PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_1, "SSE4.1");
     PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_2, "SSE4.2");
     PRINT_CAPABILITY(CPU_CAPABILITY_SSE4A,  "SSE4A");
index 5b6ffa3ef1fc4ec1d0507a8a506b9c70e56ece2b..f239d2cb76c52cabb98b93de2e2f6d9f6ddbfc72 100644 (file)
@@ -77,10 +77,8 @@ static void vlc_CPU_init (void)
                 core_caps |= VLC_CPU_SSE2;
             if (!strcmp (cap, "pni"))
                 core_caps |= VLC_CPU_SSE3;
-# ifndef __SSSE3__
             if (!strcmp (cap, "ssse3"))
-                core_caps |= CPU_CAPABILITY_SSSE3;
-# endif
+                core_caps |= VLC_CPU_SSSE3;
 # ifndef __SSE4_1__
             if (!strcmp (cap, "sse4_1"))
                 core_caps |= CPU_CAPABILITY_SSE4_1;
@@ -113,9 +111,6 @@ static void vlc_CPU_init (void)
 
     /* Always enable capabilities that were forced during compilation */
 #if defined (__i386__) || defined (__x86_64__)
-# ifdef __SSSE3__
-    all_caps |= CPU_CAPABILITY_SSSE3;
-# endif
 # ifdef __SSE4_1__
     all_caps |= CPU_CAPABILITY_SSE4_1;
 # endif