---
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