You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-05-21 16:47:28 +02:00
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>
(cherry picked from commit 87f1355f9b)
This commit is contained in:
committed by
Michael Niedermayer
parent
91861ce25c
commit
cdeba2de82
+2
-1
@@ -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
|
||||
;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user