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:
parent
394c4d77d2
commit
8b4d077fc9
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user