[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