gcc 3.4.3 preversions do not appreciate invalid instruction and operand combinations anymore patch by (Aurelien Jacobs <aurel at gnuage dot org>)

Originally committed as revision 3604 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Aurelien Jacobs 2004-10-17 20:27:11 +00:00 committed by Michael Niedermayer
parent 394c4d77d2
commit 8b4d077fc9

View File

@ -27,29 +27,30 @@ int mm_support(void)
{ {
int rval; int rval;
int eax, ebx, ecx, edx; int eax, ebx, ecx, edx;
long a, c;
__asm__ __volatile__ ( __asm__ __volatile__ (
/* See if CPUID instruction is supported ... */ /* See if CPUID instruction is supported ... */
/* ... Get copies of EFLAGS into eax and ecx */ /* ... Get copies of EFLAGS into eax and ecx */
"pushf\n\t" "pushf\n\t"
"pop %0\n\t" "pop %0\n\t"
"movl %0, %1\n\t" "mov %0, %1\n\t"
/* ... Toggle the ID bit in one copy and store */ /* ... Toggle the ID bit in one copy and store */
/* to the EFLAGS reg */ /* to the EFLAGS reg */
"xorl $0x200000, %0\n\t" "xor $0x200000, %0\n\t"
"push %0\n\t" "push %0\n\t"
"popf\n\t" "popf\n\t"
/* ... Get the (hopefully modified) EFLAGS */ /* ... Get the (hopefully modified) EFLAGS */
"pushf\n\t" "pushf\n\t"
"pop %0\n\t" "pop %0\n\t"
: "=a" (eax), "=c" (ecx) : "=a" (a), "=c" (c)
: :
: "cc" : "cc"
); );
if (eax == ecx) if (a == c)
return 0; /* CPUID not supported */ return 0; /* CPUID not supported */
cpuid(0, eax, ebx, ecx, edx); cpuid(0, eax, ebx, ecx, edx);