mirror of
https://github.com/mpv-player/mpv
synced 2025-01-19 13:51:14 +00:00
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:
parent
16a685b00c
commit
e3bf64337e
15
cpudetect.c
15
cpudetect.c
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user