Commit 6f7ffd31 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Check for SSE3 at build-time if possible

parent edfb6e4a
...@@ -35,7 +35,7 @@ VLC_API unsigned vlc_CPU(void); ...@@ -35,7 +35,7 @@ VLC_API unsigned vlc_CPU(void);
# define VLC_CPU_MMXEXT 32 # define VLC_CPU_MMXEXT 32
# define VLC_CPU_SSE 64 # define VLC_CPU_SSE 64
# define VLC_CPU_SSE2 128 # define VLC_CPU_SSE2 128
# define CPU_CAPABILITY_SSE3 (1<<8) # define VLC_CPU_SSE3 256
# define CPU_CAPABILITY_SSSE3 (1<<9) # define CPU_CAPABILITY_SSSE3 (1<<9)
# define CPU_CAPABILITY_SSE4_1 (1<<10) # define CPU_CAPABILITY_SSE4_1 (1<<10)
# define CPU_CAPABILITY_SSE4_2 (1<<11) # define CPU_CAPABILITY_SSE4_2 (1<<11)
...@@ -73,6 +73,12 @@ VLC_API unsigned vlc_CPU(void); ...@@ -73,6 +73,12 @@ VLC_API unsigned vlc_CPU(void);
# define vlc_CPU_SSE2() ((vlc_CPU() & VLC_CPU_SSE2) != 0) # define vlc_CPU_SSE2() ((vlc_CPU() & VLC_CPU_SSE2) != 0)
# endif # endif
# ifdef __SSE3__
# define vlc_CPU_SSE3() (1)
# else
# define vlc_CPU_SSE3() ((vlc_CPU() & VLC_CPU_SSE3) != 0)
# endif
# elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__) # elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__)
# define HAVE_FPU 1 # define HAVE_FPU 1
# define VLC_CPU_ALTIVEC 2 # define VLC_CPU_ALTIVEC 2
......
...@@ -343,7 +343,7 @@ static int OpenDecoder( vlc_object_t *p_this ) ...@@ -343,7 +343,7 @@ static int OpenDecoder( vlc_object_t *p_this )
if( !vlc_CPU_SSE2() ) if( !vlc_CPU_SSE2() )
p_context->dsp_mask |= AV_CPU_FLAG_SSE2; p_context->dsp_mask |= AV_CPU_FLAG_SSE2;
# ifdef AV_CPU_FLAG_SSE3 # ifdef AV_CPU_FLAG_SSE3
if( !(i_cpu & CPU_CAPABILITY_SSE3) ) if( !vlc_CPU_SSE3() )
p_context->dsp_mask |= AV_CPU_FLAG_SSE3; p_context->dsp_mask |= AV_CPU_FLAG_SSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSSE3 # ifdef AV_CPU_FLAG_SSSE3
......
...@@ -337,7 +337,7 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -337,7 +337,7 @@ int OpenEncoder( vlc_object_t *p_this )
if( !vlc_CPU_SSE2() ) if( !vlc_CPU_SSE2() )
p_context->dsp_mask |= AV_CPU_FLAG_SSE2; p_context->dsp_mask |= AV_CPU_FLAG_SSE2;
# ifdef AV_CPU_FLAG_SSE3 # ifdef AV_CPU_FLAG_SSE3
if( !(i_cpu & CPU_CAPABILITY_SSE3) ) if( !vlc_CPU_SSE3() )
p_context->dsp_mask |= AV_CPU_FLAG_SSE3; p_context->dsp_mask |= AV_CPU_FLAG_SSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSSE3 # ifdef AV_CPU_FLAG_SSSE3
......
...@@ -392,7 +392,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -392,7 +392,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
if( !vlc_cpu_SSE2() ) if( !vlc_cpu_SSE2() )
id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE2; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE2;
# ifdef AV_CPU_FLAG_SSE3 # ifdef AV_CPU_FLAG_SSE3
if( !(i_cpu & CPU_CAPABILITY_SSE3) ) if( !vlc_CPU_SSE3() )
id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSSE3 # ifdef AV_CPU_FLAG_SSSE3
...@@ -813,7 +813,7 @@ static mtime_t VideoCommand( sout_stream_t *p_stream, sout_stream_id_t *id ) ...@@ -813,7 +813,7 @@ static mtime_t VideoCommand( sout_stream_t *p_stream, sout_stream_id_t *id )
if( !vlc_CPU_SSE2() ) if( !vlc_CPU_SSE2() )
id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE2; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE2;
# ifdef AV_CPU_FLAG_SSE3 # ifdef AV_CPU_FLAG_SSE3
if( !(i_cpu & CPU_CAPABILITY_SSE3) ) if( !vlc_CPU_SSE3() )
id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSSE3 # ifdef AV_CPU_FLAG_SSSE3
......
...@@ -237,11 +237,9 @@ void vlc_CPU_init (void) ...@@ -237,11 +237,9 @@ void vlc_CPU_init (void)
i_capabilities |= VLC_CPU_SSE2; i_capabilities |= VLC_CPU_SSE2;
# endif # endif
# if defined (__SSE3__) # if defined (CAN_COMPILE_SSE3)
i_capabilities |= CPU_CAPABILITY_SSE3;
# elif defined (CAN_COMPILE_SSE3)
if ((i_ecx & 0x00000001) && vlc_CPU_check ("SSE3", SSE3_test)) if ((i_ecx & 0x00000001) && vlc_CPU_check ("SSE3", SSE3_test))
i_capabilities |= CPU_CAPABILITY_SSE3; i_capabilities |= VLC_CPU_SSE3;
# endif # endif
# if defined (__SSSE3__) # if defined (__SSSE3__)
...@@ -347,7 +345,7 @@ void vlc_CPU_dump (vlc_object_t *obj) ...@@ -347,7 +345,7 @@ void vlc_CPU_dump (vlc_object_t *obj)
if (vlc_CPU_MMXEXT()) p += sprintf (p, "MMXEXT "); if (vlc_CPU_MMXEXT()) p += sprintf (p, "MMXEXT ");
if (vlc_CPU_SSE()) p += sprintf (p, "SSE ");; if (vlc_CPU_SSE()) p += sprintf (p, "SSE ");;
if (vlc_CPU_SSE2()) p += sprintf (p, "SSE2 ");; if (vlc_CPU_SSE2()) p += sprintf (p, "SSE2 ");;
PRINT_CAPABILITY(CPU_CAPABILITY_SSE3, "SSE3"); if (vlc_CPU_SSE3()) p += sprintf (p, "SSE2 ");;
PRINT_CAPABILITY(CPU_CAPABILITY_SSSE3, "SSSE3"); PRINT_CAPABILITY(CPU_CAPABILITY_SSSE3, "SSSE3");
PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_1, "SSE4.1"); PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_1, "SSE4.1");
PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_2, "SSE4.2"); PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_2, "SSE4.2");
......
...@@ -75,10 +75,8 @@ static void vlc_CPU_init (void) ...@@ -75,10 +75,8 @@ static void vlc_CPU_init (void)
core_caps |= VLC_CPU_MMXEXT; core_caps |= VLC_CPU_MMXEXT;
if (!strcmp (cap, "sse2")) if (!strcmp (cap, "sse2"))
core_caps |= VLC_CPU_SSE2; core_caps |= VLC_CPU_SSE2;
# ifndef __SSE3__
if (!strcmp (cap, "pni")) if (!strcmp (cap, "pni"))
core_caps |= CPU_CAPABILITY_SSE3; core_caps |= VLC_CPU_SSE3;
# endif
# ifndef __SSSE3__ # ifndef __SSSE3__
if (!strcmp (cap, "ssse3")) if (!strcmp (cap, "ssse3"))
core_caps |= CPU_CAPABILITY_SSSE3; core_caps |= CPU_CAPABILITY_SSSE3;
...@@ -115,9 +113,6 @@ static void vlc_CPU_init (void) ...@@ -115,9 +113,6 @@ static void vlc_CPU_init (void)
/* Always enable capabilities that were forced during compilation */ /* Always enable capabilities that were forced during compilation */
#if defined (__i386__) || defined (__x86_64__) #if defined (__i386__) || defined (__x86_64__)
# ifdef __SSE3__
all_caps |= CPU_CAPABILITY_SSE3;
# endif
# ifdef __SSSE3__ # ifdef __SSSE3__
all_caps |= CPU_CAPABILITY_SSSE3; all_caps |= CPU_CAPABILITY_SSSE3;
# endif # endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment