aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2008-11-25 07:34:20 +0000
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2008-11-25 07:34:20 +0000
commit35d0c2173caed6ae52422f3813d5d8334d22b230 (patch)
treea11d964a639f6e4e169846c3e54ae756275ffcaf
parentbd2b6b33bfcb543ef53ec3237bac3b2c834c6f42 (diff)
downloadffmpeg-35d0c2173caed6ae52422f3813d5d8334d22b230.tar.gz
Replace pushf/popf by explicit pushfl/popfl (32 bit) or pushfq/popfq (x86_64),
to fix generated code on ICC 11.0. Originally committed as revision 15935 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/i386/cpuid.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libavcodec/i386/cpuid.c b/libavcodec/i386/cpuid.c
index 2f2a669eee..cd33334ecf 100644
--- a/libavcodec/i386/cpuid.c
+++ b/libavcodec/i386/cpuid.c
@@ -44,10 +44,17 @@ int mm_support(void)
int max_std_level, max_ext_level, std_caps=0, ext_caps=0;
x86_reg a, c;
+#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"
@@ -55,10 +62,10 @@ int mm_support(void)
/* 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)
: