---
So here's an RFC for solving finicky issues when inline and standalone
assemblers have different capabilities. It implements the idea Mans
proposed last month.
Note that this is a draft and I am now tired, but the general idea
should be sound. I did some basic tests; both inline and yasm checks
disable extensions as expected. Passing --disable-foo on the configure
command line disables both inline and yasm for foo and up.
issues that will need to be addressed eventually:
- this is just the infrastructure, no code changes yet
- new options exposed on the command line
- several implementation warts remain
configure | 77 ++++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 61 insertions(+), 16 deletions(-)
diff --git a/configure b/configure
index 052b51a..c9554ee 100755
--- a/configure
+++ b/configure
@@ -664,8 +664,8 @@ check_inline_asm(){
name="$1"
code="$2"
shift 2
- disable $name
- check_as "$@" <<EOF && enable $name
+ disable inline_${name}
+ check_as "$@" <<EOF && enable inline_${name}
void foo(void){ __asm__ volatile($code); }
EOF
}
@@ -1048,26 +1048,39 @@ ARCH_LIST='
x86_64
'
-ARCH_EXT_LIST='
- altivec
+ARCH_EXT_LIST_X86='
amd3dnow
amd3dnowext
+ avx
+ fma4
+ mmx
+ mmxext
+ sse
+ sse2
+ sse3
+ sse4
+ sse42
+ ssse3
+'
+
+ARCH_EXT_LIST_X86_INLINE=$(map "echo inline_\${v}" $ARCH_EXT_LIST_X86)
+ARCH_EXT_LIST_X86_YASM=$(map "echo yasm_\${v}" $ARCH_EXT_LIST_X86)
+
+ARCH_EXT_LIST="
+ $ARCH_EXT_LIST_X86
+ $ARCH_EXT_LIST_X86_INLINE
+ $ARCH_EXT_LIST_X86_YASM
+ altivec
armv5te
armv6
armv6t2
armvfp
- avx
- fma4
mmi
- mmx
- mmxext
neon
ppc4xx
- sse
- ssse3
vfpv3
vis
-'
+"
HAVE_LIST_PUB='
bigendian
@@ -1318,15 +1331,47 @@ ppc4xx_deps="ppc"
vis_deps="sparc"
x86_64_suggest="cmov fast_cmov"
+
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
mmx_deps="x86"
mmxext_deps="mmx"
-sse_deps="mmx"
-ssse3_deps="sse"
-avx_deps="ssse3"
+sse_deps="mmxext"
+sse2_deps="sse"
+sse3_deps="sse2"
+ssse3_deps="sse3"
+sse4_deps="ssse3"
+sse42_deps="sse4"
+avx_deps="sse42"
fma4_deps="avx"
+inline_amd3dnow_deps="inline_mmx amd3dnow"
+inline_amd3dnowext_deps="inline_amd3dnow amd3dnowext"
+inline_mmx_deps="inline_asm mmx"
+inline_mmxext_deps="inline_mmx mmxext"
+inline_sse_deps="inline_mmxext sse"
+inline_sse2_deps="inline_sse sse2"
+inline_sse3_deps="inline_sse2 sse3"
+inline_ssse3_deps="inline_sse3 ssse3"
+inline_sse4_deps="inline_ssse3 sse4"
+inline_sse42_deps="inline_sse4 sse42"
+inline_avx_deps="inline_sse42 avx"
+inline_fma4_deps="inline_avx fma4"
+
+yasm_amd3dnow_deps="yasm_mmx amd3dnow"
+yasm_amd3dnowext_deps="yasm_amd3dnow amd3dnowext"
+yasm_mmx_deps="yasm mmx"
+yasm_mmxext_deps="yasm_mmx mmxext"
+yasm_sse_deps="yasm_mmxext sse"
+yasm_sse2_deps="yasm_sse sse2"
+yasm_sse3_deps="yasm_sse2 sse3"
+yasm_ssse3_deps="yasm_sse3 ssse3"
+yasm_sse4_deps="yasm_ssse3 sse4"
+yasm_sse42_deps="yasm_sse4 sse42"
+yasm_avx_deps="yasm_sse42 avx"
+yasm_fma4_deps="yasm_avx fma4"
+
+
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"
@@ -2956,8 +3001,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 yasm_avx
+ check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable yasm_fma4
check_yasm "CPU amdnop" && enable cpunop
fi
--
1.7.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel