Commit 58dd2253 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Check for SSSE3 at build time if possible

parent 6f7ffd31
...@@ -36,7 +36,7 @@ VLC_API unsigned vlc_CPU(void); ...@@ -36,7 +36,7 @@ VLC_API unsigned vlc_CPU(void);
# define VLC_CPU_SSE 64 # define VLC_CPU_SSE 64
# define VLC_CPU_SSE2 128 # define VLC_CPU_SSE2 128
# define VLC_CPU_SSE3 256 # 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_1 (1<<10)
# define CPU_CAPABILITY_SSE4_2 (1<<11) # define CPU_CAPABILITY_SSE4_2 (1<<11)
# define CPU_CAPABILITY_SSE4A (1<<12) # define CPU_CAPABILITY_SSE4A (1<<12)
...@@ -79,6 +79,12 @@ VLC_API unsigned vlc_CPU(void); ...@@ -79,6 +79,12 @@ VLC_API unsigned vlc_CPU(void);
# define vlc_CPU_SSE3() ((vlc_CPU() & VLC_CPU_SSE3) != 0) # define vlc_CPU_SSE3() ((vlc_CPU() & VLC_CPU_SSE3) != 0)
# endif # 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__) # 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
......
...@@ -347,7 +347,7 @@ static int OpenDecoder( vlc_object_t *p_this ) ...@@ -347,7 +347,7 @@ static int OpenDecoder( vlc_object_t *p_this )
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
if( !(i_cpu & CPU_CAPABILITY_SSSE3) ) if( !vlc_CPU_SSE3() )
p_context->dsp_mask |= AV_CPU_FLAG_SSSE3; p_context->dsp_mask |= AV_CPU_FLAG_SSSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSE4 # ifdef AV_CPU_FLAG_SSE4
......
...@@ -47,6 +47,11 @@ ...@@ -47,6 +47,11 @@
store " %%xmm4, 48(%[dst])\n" \ store " %%xmm4, 48(%[dst])\n" \
: : [dst]"r"(dstp), [src]"r"(srcp) : "memory") : : [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. */ /* Execute the instruction op only if SSE2 is supported. */
#ifdef CAN_COMPILE_SSE2 #ifdef CAN_COMPILE_SSE2
# ifdef __SSE2__ # ifdef __SSE2__
...@@ -180,7 +185,8 @@ static void SplitUV(uint8_t *dstu, size_t dstu_pitch, ...@@ -180,7 +185,8 @@ static void SplitUV(uint8_t *dstu, size_t dstu_pitch,
"movhpd %%xmm3, 24(%[dst2])\n" "movhpd %%xmm3, 24(%[dst2])\n"
#ifdef CAN_COMPILE_SSSE3 #ifdef CAN_COMPILE_SSSE3
if (cpu & CPU_CAPABILITY_SSSE3) { if (vlc_CPU_SSE3())
{
for (x = 0; x < (width & ~31); x += 32) { for (x = 0; x < (width & ~31); x += 32) {
asm volatile ( asm volatile (
"movdqu (%[shuffle]), %%xmm7\n" "movdqu (%[shuffle]), %%xmm7\n"
......
...@@ -341,7 +341,7 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -341,7 +341,7 @@ int OpenEncoder( vlc_object_t *p_this )
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
if( !(i_cpu & CPU_CAPABILITY_SSSE3) ) if( !vlc_CPU_SSSE3() )
p_context->dsp_mask |= AV_CPU_FLAG_SSSE3; p_context->dsp_mask |= AV_CPU_FLAG_SSSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSE4 # ifdef AV_CPU_FLAG_SSE4
......
...@@ -396,7 +396,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -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; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSSE3 # 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; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSE4 # ifdef AV_CPU_FLAG_SSE4
...@@ -817,7 +817,7 @@ static mtime_t VideoCommand( sout_stream_t *p_stream, sout_stream_id_t *id ) ...@@ -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; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSSE3 # 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; id->ff_enc_c->dsp_mask |= AV_CPU_FLAG_SSSE3;
# endif # endif
# ifdef AV_CPU_FLAG_SSE4 # ifdef AV_CPU_FLAG_SSE4
......
...@@ -109,7 +109,7 @@ int RenderYadif( filter_t *p_filter, picture_t *p_dst, picture_t *p_src, ...@@ -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); int w, int prefs, int mrefs, int parity, int mode);
#if defined(HAVE_YADIF_SSSE3) #if defined(HAVE_YADIF_SSSE3)
if( vlc_CPU() & CPU_CAPABILITY_SSSE3 ) if( vlc_CPU_SSSE3() )
filter = yadif_filter_line_ssse3; filter = yadif_filter_line_ssse3;
else else
#endif #endif
......
...@@ -141,7 +141,7 @@ static int Open(vlc_object_t *object) ...@@ -141,7 +141,7 @@ static int Open(vlc_object_t *object)
#endif #endif
cfg->blur_line = blur_line_c; cfg->blur_line = blur_line_c;
#if HAVE_SSSE3 #if HAVE_SSSE3
if (vlc_CPU() & CPU_CAPABILITY_SSSE3) if (vlc_CPU_SSSE3())
cfg->filter_line = filter_line_ssse3; cfg->filter_line = filter_line_ssse3;
else else
#endif #endif
......
...@@ -242,11 +242,9 @@ void vlc_CPU_init (void) ...@@ -242,11 +242,9 @@ void vlc_CPU_init (void)
i_capabilities |= VLC_CPU_SSE3; i_capabilities |= VLC_CPU_SSE3;
# endif # endif
# if defined (__SSSE3__) # if defined (CAN_COMPILE_SSSE3)
i_capabilities |= CPU_CAPABILITY_SSSE3;
# elif defined (CAN_COMPILE_SSSE3)
if ((i_ecx & 0x00000200) && vlc_CPU_check ("SSSE3", SSSE3_test)) if ((i_ecx & 0x00000200) && vlc_CPU_check ("SSSE3", SSSE3_test))
i_capabilities |= CPU_CAPABILITY_SSSE3; i_capabilities |= VLC_CPU_SSSE3;
# endif # endif
# if defined (__SSE4_1__) # if defined (__SSE4_1__)
...@@ -346,7 +344,7 @@ void vlc_CPU_dump (vlc_object_t *obj) ...@@ -346,7 +344,7 @@ void vlc_CPU_dump (vlc_object_t *obj)
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 ");;
if (vlc_CPU_SSE3()) 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_1, "SSE4.1");
PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_2, "SSE4.2"); PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_2, "SSE4.2");
PRINT_CAPABILITY(CPU_CAPABILITY_SSE4A, "SSE4A"); PRINT_CAPABILITY(CPU_CAPABILITY_SSE4A, "SSE4A");
......
...@@ -77,10 +77,8 @@ static void vlc_CPU_init (void) ...@@ -77,10 +77,8 @@ static void vlc_CPU_init (void)
core_caps |= VLC_CPU_SSE2; core_caps |= VLC_CPU_SSE2;
if (!strcmp (cap, "pni")) if (!strcmp (cap, "pni"))
core_caps |= VLC_CPU_SSE3; core_caps |= VLC_CPU_SSE3;
# ifndef __SSSE3__
if (!strcmp (cap, "ssse3")) if (!strcmp (cap, "ssse3"))
core_caps |= CPU_CAPABILITY_SSSE3; core_caps |= VLC_CPU_SSSE3;
# endif
# ifndef __SSE4_1__ # ifndef __SSE4_1__
if (!strcmp (cap, "sse4_1")) if (!strcmp (cap, "sse4_1"))
core_caps |= CPU_CAPABILITY_SSE4_1; core_caps |= CPU_CAPABILITY_SSE4_1;
...@@ -113,9 +111,6 @@ static void vlc_CPU_init (void) ...@@ -113,9 +111,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 __SSSE3__
all_caps |= CPU_CAPABILITY_SSSE3;
# endif
# ifdef __SSE4_1__ # ifdef __SSE4_1__
all_caps |= CPU_CAPABILITY_SSE4_1; all_caps |= CPU_CAPABILITY_SSE4_1;
# 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