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.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28037 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
cehoyos 2008-11-25 18:36:50 +00:00
parent 16a685b00c
commit e3bf64337e
1 changed files with 12 additions and 3 deletions

View File

@ -57,10 +57,17 @@ static int has_cpuid(void)
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 @@ static int has_cpuid(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)
:
: "cc"
);
#undef PUSHF
#undef POPF
return a != c;
}