]> git.sesse.net Git - vlc/commitdiff
Added SSSE3/SSE4.1/SSE4.2 support to libvlc.
authorLaurent Aimar <fenrir@videolan.org>
Mon, 23 Nov 2009 20:24:07 +0000 (21:24 +0100)
committerLaurent Aimar <fenrir@videolan.org>
Tue, 24 Nov 2009 18:50:27 +0000 (19:50 +0100)
src/libvlc-module.c
src/libvlc.c
src/misc/cpu.c

index ec901beaa8c135d58e1725c43c94099b9fd2dd3b..00cc63fc69f5037a1fc9bded93f67ec45d94585c 100644 (file)
@@ -1044,6 +1044,20 @@ static const char *const ppsz_clock_descriptions[] =
     "If your processor supports the SSE3 instructions set, VLC can take " \
     "advantage of them.")
 
+#define SSSE3_TEXT N_("Enable CPU SSSE3 support")
+#define SSSE3_LONGTEXT N_( \
+    "If your processor supports the SSSE3 instructions set, VLC can take " \
+    "advantage of them.")
+
+#define SSE4_1_TEXT N_("Enable CPU SSE4.1 support")
+#define SSE4_1_LONGTEXT N_( \
+    "If your processor supports the SSE4.1 instructions set, VLC can take " \
+    "advantage of them.")
+
+#define SSE4_2_TEXT N_("Enable CPU SSE4.2 support")
+#define SSE4_2_LONGTEXT N_( \
+    "If your processor supports the SSE4.2 instructions set, VLC can take " \
+    "advantage of them.")
 
 #define ALTIVEC_TEXT N_("Enable CPU AltiVec support")
 #define ALTIVEC_LONGTEXT N_( \
@@ -1980,6 +1994,12 @@ vlc_module_begin ()
         change_need_restart ()
     add_bool( "sse3", 1, NULL, SSE3_TEXT, SSE3_LONGTEXT, true )
         change_need_restart ()
+    add_bool( "ssse3", 1, NULL, SSSE3_TEXT, SSSE3_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "sse41", 1, NULL, SSE4_1_TEXT, SSE4_1_LONGTEXT, true )
+        change_need_restart ()
+    add_bool( "sse42", 1, NULL, SSE4_2_TEXT, SSE4_2_LONGTEXT, true )
+        change_need_restart ()
 #endif
 #if defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
     add_bool( "altivec", 1, NULL, ALTIVEC_TEXT, ALTIVEC_LONGTEXT, true )
index fcc2f47e77bbb80139bdf89d5ff7e9f25df0c4ad..04eaaf952c3f044f438c6573e5b34064ae616277 100644 (file)
@@ -750,6 +750,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
         cpu_flags &= ~CPU_CAPABILITY_SSE2;
     if( !config_GetInt( p_libvlc, "sse3" ) )
         cpu_flags &= ~CPU_CAPABILITY_SSE3;
+    if( !config_GetInt( p_libvlc, "ssse3" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSSE3;
+    if( !config_GetInt( p_libvlc, "sse41" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSE4_1;
+    if( !config_GetInt( p_libvlc, "sse42" ) )
+        cpu_flags &= ~CPU_CAPABILITY_SSE4_2;
 
     PRINT_CAPABILITY( CPU_CAPABILITY_MMX, "MMX" );
     PRINT_CAPABILITY( CPU_CAPABILITY_3DNOW, "3DNow!" );
@@ -757,6 +763,10 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
     PRINT_CAPABILITY( CPU_CAPABILITY_SSE, "SSE" );
     PRINT_CAPABILITY( CPU_CAPABILITY_SSE2, "SSE2" );
     PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSE3" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE3, "SSSE3" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_1, "SSE4.1" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE4_2, "SSE4.2" );
+    PRINT_CAPABILITY( CPU_CAPABILITY_SSE4A,  "SSE4A" );
 
 #elif defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ )
     if( !config_GetInt( p_libvlc, "altivec" ) )
index 3dfdb0537193633763a490fa670a3d6666952cdb..5b46fa9f789d17a77c5b6fc89fba3db2560315c0 100644 (file)
@@ -201,6 +201,30 @@ uint32_t CPUCapabilities( void )
                           "movsldup %%xmm1, %%xmm0\n" );
 # endif
 
+# if defined (__SSSE3__)
+    i_capabilities |= CPU_CAPABILITY_SSSE3;
+# elif defined (CAN_COMPILE_SSSE3)
+    if( i_ecx & 0x00000200 )
+        check_capability( "SSSE3", CPU_CAPABILITY_SSSE3,
+                          "pabsw %%xmm1, %%xmm0\n" );
+# endif
+
+# if defined (__SSE4_1__)
+    i_capabilities |= CPU_CAPABILITY_SSE4_1;
+# elif defined (CAN_COMPILE_SSE4_1)
+    if( i_ecx & 0x00080000 )
+        check_capability( "SSE4.1", CPU_CAPABILITY_SSE4_1,
+                          "pmaxsb %%xmm1, %%xmm0\n" );
+# endif
+
+# if defined (__SSE4_2__)
+    i_capabilities |= CPU_CAPABILITY_SSE4_2;
+# elif defined (CAN_COMPILE_SSE4_2)
+    if( i_ecx & 0x00100000 )
+        check_capability( "SSE4.2", CPU_CAPABILITY_SSE4_2,
+                          "pcmpgtq %%xmm1, %%xmm0\n" );
+# endif
+
     /* test for additional capabilities */
     cpuid( 0x80000000 );