[vlc-devel] commit: Added SSSE3/SSE4.1/SSE4.2 support to libvlc. (Laurent Aimar )

git version control git at videolan.org
Tue Nov 24 19:53:56 CET 2009


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Mon Nov 23 21:24:07 2009 +0100| [f7ba8bf376b8f418a1c89cce0ac3aba22565e78c] | committer: Laurent Aimar 

Added SSSE3/SSE4.1/SSE4.2 support to libvlc.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f7ba8bf376b8f418a1c89cce0ac3aba22565e78c
---

 src/libvlc-module.c |   20 ++++++++++++++++++++
 src/libvlc.c        |   10 ++++++++++
 src/misc/cpu.c      |   24 ++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/src/libvlc-module.c b/src/libvlc-module.c
index ec901be..00cc63f 100644
--- a/src/libvlc-module.c
+++ b/src/libvlc-module.c
@@ -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 )
diff --git a/src/libvlc.c b/src/libvlc.c
index fcc2f47..04eaaf9 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -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" ) )
diff --git a/src/misc/cpu.c b/src/misc/cpu.c
index 3dfdb05..5b46fa9 100644
--- a/src/misc/cpu.c
+++ b/src/misc/cpu.c
@@ -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 );
 




More information about the vlc-devel mailing list