---

Hopefully good to go now ...

 configure                      |   33 ++++++++++++++++++++++++++++-----
 libavfilter/x86/gradfun.c      |   19 ++++++++-----------
 libavfilter/x86/yadif.c        |   20 ++++++--------------
 libavutil/x86/float_dsp_init.c |    6 ++----
 4 files changed, 44 insertions(+), 34 deletions(-)

diff --git a/configure b/configure
index 3b5a110..3a26a8b 100755
--- a/configure
+++ b/configure
@@ -372,6 +372,12 @@ map(){
     for v; do eval $m; done
 }
 
+add_suffix(){
+    suffix=$1
+    shift
+    for v; do echo ${v}${suffix}; done
+}
+
 set_all(){
     value=$1
     shift
@@ -1098,8 +1104,13 @@ HAVE_LIST_PUB='
     fast_unaligned
 '
 
+ARCH_EXT_LIST_X86_EXTERNAL=$(add_suffix _external  $ARCH_EXT_LIST_X86)
+ARCH_EXT_LIST_X86_INLINE=$(add_suffix _inline $ARCH_EXT_LIST_X86)
+
 HAVE_LIST="
     $ARCH_EXT_LIST
+    $ARCH_EXT_LIST_X86_EXTERNAL
+    $ARCH_EXT_LIST_X86_INLINE
     $HAVE_LIST_PUB
     $THREADS_LIST
     aligned_malloc
@@ -1356,6 +1367,15 @@ sse42_deps="sse4"
 avx_deps="sse42"
 fma4_deps="avx"
 
+mmx_external_deps="mmx yasm"
+mmx_inline_deps="mmx inline_asm"
+
+for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
+    eval dep=\$${ext}_deps
+    eval ${ext}_external_deps='"${dep}_external $ext"'
+    eval ${ext}_inline_deps='"${dep}_inline $ext"'
+done
+
 aligned_stack_if_any="ppc x86"
 fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
 fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
@@ -1894,7 +1914,10 @@ for n in $COMPONENT_LIST; do
     eval ${n}_if_any="\$$v"
 done
 
-enable $ARCH_EXT_LIST $ALL_TESTS
+enable $ARCH_EXT_LIST                   \
+       $ARCH_EXT_LIST_X86_EXTERNAL      \
+       $ARCH_EXT_LIST_X86_INLINE        \
+       $ALL_TESTS                       \
 
 die_unknown(){
     echo "Unknown option \"$1\"."
@@ -2964,8 +2987,8 @@ EOF
     check_inline_asm xmm_clobbers '"":::"%xmm0"'
 
     # check whether binutils is new enough to compile SSSE3/MMXEXT
-    enabled ssse3  && check_inline_asm ssse3  '"pabsw %xmm0, %xmm0"'
-    enabled mmxext && check_inline_asm mmxext '"pmaxub %mm0, %mm1"'
+    check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
+    check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
 
     if ! disabled_any asm mmx yasm; then
         if check_cmd $yasmexe --version; then
@@ -2986,8 +3009,8 @@ EOF
 
         check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
             die "yasm not found, use --disable-yasm for a crippled build"
-        check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
-        check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
+        check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external
+        check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
         check_yasm "CPU amdnop" && enable cpunop
     fi
 
diff --git a/libavfilter/x86/gradfun.c b/libavfilter/x86/gradfun.c
index e7890fe..424a031 100644
--- a/libavfilter/x86/gradfun.c
+++ b/libavfilter/x86/gradfun.c
@@ -29,7 +29,7 @@
 DECLARE_ALIGNED(16, static const uint16_t, pw_7f)[8] = 
{0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F};
 DECLARE_ALIGNED(16, static const uint16_t, pw_ff)[8] = 
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
 
-#if HAVE_MMXEXT
+#if HAVE_MMXEXT_INLINE
 static void gradfun_filter_line_mmx2(uint8_t *dst, uint8_t *src, uint16_t *dc, 
int width, int thresh, const uint16_t *dithers)
 {
     intptr_t x;
@@ -77,7 +77,7 @@ static void gradfun_filter_line_mmx2(uint8_t *dst, uint8_t 
*src, uint16_t *dc, i
 }
 #endif
 
-#if HAVE_SSSE3
+#if HAVE_SSSE3_INLINE
 static void gradfun_filter_line_ssse3(uint8_t *dst, uint8_t *src, uint16_t 
*dc, int width, int thresh, const uint16_t *dithers)
 {
     intptr_t x;
@@ -122,9 +122,9 @@ static void gradfun_filter_line_ssse3(uint8_t *dst, uint8_t 
*src, uint16_t *dc,
         :"memory"
     );
 }
-#endif // HAVE_SSSE3
+#endif /* HAVE_SSSE3_INLINE */
 
-#if HAVE_SSE2
+#if HAVE_SSE2_INLINE
 static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t *buf, uint16_t 
*buf1, uint8_t *src, int src_linesize, int width)
 {
 #define BLURV(load)\
@@ -165,7 +165,7 @@ static void gradfun_blur_line_sse2(uint16_t *dc, uint16_t 
*buf, uint16_t *buf1,
         BLURV("movdqa");
     }
 }
-#endif /* HAVE_SSE2 */
+#endif /* HAVE_SSE2_INLINE */
 
 #endif /* HAVE_INLINE_ASM */
 
@@ -173,19 +173,16 @@ av_cold void ff_gradfun_init_x86(GradFunContext *gf)
 {
     int cpu_flags = av_get_cpu_flags();
 
-#if HAVE_INLINE_ASM
-#if HAVE_MMXEXT
+#if HAVE_MMXEXT_INLINE
     if (cpu_flags & AV_CPU_FLAG_MMXEXT)
         gf->filter_line = gradfun_filter_line_mmx2;
 #endif
-#if HAVE_SSSE3
+#if HAVE_SSSE3_INLINE
     if (cpu_flags & AV_CPU_FLAG_SSSE3)
         gf->filter_line = gradfun_filter_line_ssse3;
 #endif
-
-#if HAVE_SSE2
+#if HAVE_SSE2_INLINE
     if (cpu_flags & AV_CPU_FLAG_SSE2)
         gf->blur_line = gradfun_blur_line_sse2;
 #endif
-#endif /* HAVE_INLINE_ASM */
 }
diff --git a/libavfilter/x86/yadif.c b/libavfilter/x86/yadif.c
index 0907a50..2c8c32d 100644
--- a/libavfilter/x86/yadif.c
+++ b/libavfilter/x86/yadif.c
@@ -31,7 +31,7 @@
 DECLARE_ASM_CONST(16, const xmm_reg, pb_1) = {0x0101010101010101ULL, 
0x0101010101010101ULL};
 DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x0001000100010001ULL, 
0x0001000100010001ULL};
 
-#if HAVE_SSSE3
+#if HAVE_SSSE3_INLINE
 #define COMPILE_TEMPLATE_SSE2 1
 #define COMPILE_TEMPLATE_SSSE3 1
 #undef RENAME
@@ -40,7 +40,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = 
{0x0001000100010001ULL, 0x000100010
 #undef COMPILE_TEMPLATE_SSSE3
 #endif
 
-#if HAVE_SSE2
+#if HAVE_SSE2_INLINE
 #define COMPILE_TEMPLATE_SSE2 1
 #undef RENAME
 #define RENAME(a) a ## _sse2
@@ -48,7 +48,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = 
{0x0001000100010001ULL, 0x000100010
 #undef COMPILE_TEMPLATE_SSE2
 #endif
 
-#if HAVE_MMXEXT
+#if HAVE_MMXEXT_INLINE
 #undef RENAME
 #define RENAME(a) a ## _mmx2
 #include "yadif_template.c"
@@ -60,18 +60,10 @@ av_cold void ff_yadif_init_x86(YADIFContext *yadif)
 {
     int cpu_flags = av_get_cpu_flags();
 
-#if HAVE_INLINE_ASM
-#if HAVE_MMXEXT
-    if (cpu_flags & AV_CPU_FLAG_MMXEXT)
+    if (cpu_flags & AV_CPU_FLAG_MMXEXT && HAVE_MMXEXT_INLINE)
         yadif->filter_line = yadif_filter_line_mmx2;
-#endif
-#if HAVE_SSE2
-    if (cpu_flags & AV_CPU_FLAG_SSE2)
+    if (cpu_flags & AV_CPU_FLAG_SSE2 && HAVE_SSE2_INLINE)
         yadif->filter_line = yadif_filter_line_sse2;
-#endif
-#if HAVE_SSSE3
-    if (cpu_flags & AV_CPU_FLAG_SSSE3)
+    if (cpu_flags & AV_CPU_FLAG_SSSE3 && HAVE_SSSE3_INLINE)
         yadif->filter_line = yadif_filter_line_ssse3;
-#endif
-#endif /* HAVE_INLINE_ASM */
 }
diff --git a/libavutil/x86/float_dsp_init.c b/libavutil/x86/float_dsp_init.c
index d259a36..8ffb845 100644
--- a/libavutil/x86/float_dsp_init.c
+++ b/libavutil/x86/float_dsp_init.c
@@ -33,16 +33,14 @@ extern void ff_vector_fmac_scalar_avx(float *dst, const 
float *src, float mul,
 
 void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp)
 {
-#if HAVE_YASM
     int mm_flags = av_get_cpu_flags();
 
-    if (mm_flags & AV_CPU_FLAG_SSE && HAVE_SSE) {
+    if (mm_flags & AV_CPU_FLAG_SSE && HAVE_SSE_EXTERNAL) {
         fdsp->vector_fmul = ff_vector_fmul_sse;
         fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_sse;
     }
-    if (mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX) {
+    if (mm_flags & AV_CPU_FLAG_AVX && HAVE_AVX_EXTERNAL) {
         fdsp->vector_fmul = ff_vector_fmul_avx;
         fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_avx;
     }
-#endif
 }
-- 
1.7.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to