mirror of https://git.ffmpeg.org/ffmpeg.git
x86: check for AVX support
This adds configure and runtime checks for AVX support on x86 CPUs. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
74d6871d62
commit
87f1355f9b
|
@ -222,6 +222,7 @@ Advanced options (experts only):
|
|||
--disable-mmx2 disable MMX2 optimizations
|
||||
--disable-sse disable SSE optimizations
|
||||
--disable-ssse3 disable SSSE3 optimizations
|
||||
--disable-avx disable AVX optimizations
|
||||
--disable-armv5te disable armv5te optimizations
|
||||
--disable-armv6 disable armv6 optimizations
|
||||
--disable-armv6t2 disable armv6t2 optimizations
|
||||
|
@ -975,6 +976,7 @@ ARCH_EXT_LIST='
|
|||
armv6
|
||||
armv6t2
|
||||
armvfp
|
||||
avx
|
||||
iwmmxt
|
||||
mmi
|
||||
mmx
|
||||
|
@ -1183,6 +1185,7 @@ mmx_deps="x86"
|
|||
mmx2_deps="mmx"
|
||||
sse_deps="mmx"
|
||||
ssse3_deps="sse"
|
||||
avx_deps="ssse3"
|
||||
|
||||
aligned_stack_if_any="ppc x86"
|
||||
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
|
||||
|
@ -2676,6 +2679,7 @@ EOF
|
|||
|
||||
check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
|
||||
die "yasm not found, use --disable-yasm for a crippled build"
|
||||
check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
|
||||
fi
|
||||
|
||||
case "$cpu" in
|
||||
|
|
|
@ -44,7 +44,7 @@ int main(void)
|
|||
int cpu_flags = av_get_cpu_flags();
|
||||
|
||||
printf("cpu_flags = 0x%08X\n", cpu_flags);
|
||||
printf("cpu_flags = %s%s%s%s%s%s%s%s%s%s%s%s\n",
|
||||
printf("cpu_flags = %s%s%s%s%s%s%s%s%s%s%s%s%s\n",
|
||||
#if ARCH_ARM
|
||||
cpu_flags & AV_CPU_FLAG_IWMMXT ? "IWMMXT " : "",
|
||||
#elif ARCH_PPC
|
||||
|
@ -60,6 +60,7 @@ int main(void)
|
|||
cpu_flags & AV_CPU_FLAG_SSSE3 ? "SSSE3 " : "",
|
||||
cpu_flags & AV_CPU_FLAG_SSE4 ? "SSE4.1 " : "",
|
||||
cpu_flags & AV_CPU_FLAG_SSE42 ? "SSE4.2 " : "",
|
||||
cpu_flags & AV_CPU_FLAG_AVX ? "AVX " : "",
|
||||
cpu_flags & AV_CPU_FLAG_3DNOW ? "3DNow " : "",
|
||||
cpu_flags & AV_CPU_FLAG_3DNOWEXT ? "3DNowExt " : "");
|
||||
#endif
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions
|
||||
#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
|
||||
#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
|
||||
#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
|
||||
#define AV_CPU_FLAG_IWMMXT 0x0100 ///< XScale IWMMXT
|
||||
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
|
||||
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
"=c" (ecx), "=d" (edx)\
|
||||
: "0" (index));
|
||||
|
||||
#define xgetbv(index,eax,edx) \
|
||||
__asm__ ("xgetbv" : "=a"(eax), "=d"(edx) : "c" (index))
|
||||
|
||||
/* Function to test if multimedia instructions are supported... */
|
||||
int ff_get_cpu_flags_x86(void)
|
||||
{
|
||||
|
@ -93,6 +96,15 @@ int ff_get_cpu_flags_x86(void)
|
|||
rval |= AV_CPU_FLAG_SSE4;
|
||||
if (ecx & 0x00100000 )
|
||||
rval |= AV_CPU_FLAG_SSE42;
|
||||
#if HAVE_AVX
|
||||
/* Check OXSAVE and AVX bits */
|
||||
if ((ecx & 0x18000000) == 0x18000000) {
|
||||
/* Check for OS support */
|
||||
xgetbv(0, eax, edx);
|
||||
if ((eax & 0x6) == 0x6)
|
||||
rval |= AV_CPU_FLAG_AVX;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue