changeset 28003:2c3528928d6b

Replace pushf/popf by explicit pushfl/popfl (32 bit) or pushfq/popfq (x86_64), to fix generated code on ICC 11.0. Original FFmpeg patch by Reimar.
author cehoyos
date Tue, 25 Nov 2008 18:36:50 +0000
parents bcb567424fbc
children 694398410b73
files cpudetect.c
diffstat 1 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/cpudetect.c	Tue Nov 25 18:24:23 2008 +0000
+++ b/cpudetect.c	Tue Nov 25 18:36:50 2008 +0000
@@ -57,10 +57,17 @@
 	long a, c;
 
 // code from libavcodec:
+#ifdef ARCH_X86_64
+#define PUSHF "pushfq\n\t"
+#define POPF "popfq\n\t"
+#else
+#define PUSHF "pushfl\n\t"
+#define POPF "popfl\n\t"
+#endif
     __asm__ volatile (
                           /* See if CPUID instruction is supported ... */
                           /* ... Get copies of EFLAGS into eax and ecx */
-                          "pushf\n\t"
+                          PUSHF
                           "pop %0\n\t"
                           "mov %0, %1\n\t"
                           
@@ -68,15 +75,17 @@
                           /*     to the EFLAGS reg */
                           "xor $0x200000, %0\n\t"
                           "push %0\n\t"
-                          "popf\n\t"
+                          POPF
                           
                           /* ... Get the (hopefully modified) EFLAGS */
-                          "pushf\n\t"
+                          PUSHF
                           "pop %0\n\t"
                           : "=a" (a), "=c" (c)
                           :
                           : "cc" 
                           );
+#undef PUSHF
+#undef POPF
 
 	return a != c;
 }