---
 libavutil/x86/cpu.c |   32 +++++++++++++++++++++-----------
 1 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c
index 9cf68e4..5de6014 100644
--- a/libavutil/x86/cpu.c
+++ b/libavutil/x86/cpu.c
@@ -86,16 +86,14 @@
 
 #endif /* HAVE_INLINE_ASM */
 
-/* Function to test if multimedia instructions are supported...  */
-int ff_get_cpu_flags_x86(void)
-{
-    int rval = 0;
-    int eax, ebx, ecx, edx;
-    int max_std_level, max_ext_level, std_caps = 0, ext_caps = 0;
-    int family = 0, model = 0;
-    union { int i[3]; char c[12]; } vendor;
+#if ARCH_X86_64
+
+#define cpuid_test() 1
 
-#if ARCH_X86_32
+#elif HAVE_INLINE_ASM || HAVE_RWEFLAGS
+
+static int cpuid_test(void)
+{
     x86_reg a, c;
 
     /* Check if CPUID is supported by attempting to toggle the ID bit in
@@ -104,10 +102,22 @@ int ff_get_cpu_flags_x86(void)
     set_eflags(a ^ 0x200000);
     get_eflags(c);
 
-    if (a == c)
-        return 0; /* CPUID not supported */
+    return a != c;
+}
 #endif
 
+/* Function to test if multimedia instructions are supported...  */
+int ff_get_cpu_flags_x86(void)
+{
+    int rval = 0;
+    int eax, ebx, ecx, edx;
+    int max_std_level, max_ext_level, std_caps = 0, ext_caps = 0;
+    int family = 0, model = 0;
+    union { int i[3]; char c[12]; } vendor;
+
+    if (!cpuid_test())
+        return 0; /* CPUID not supported */
+
     cpuid(0, max_std_level, vendor.i[0], vendor.i[2], vendor.i[1]);
 
     if (max_std_level >= 1) {
-- 
1.7.1

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to