GCC inline restrictions were not adequate.

=r was not restrictive enough and the compiler was not returning
ebx correctly.

Change-Id: I7606e384067bd5fb69189802f1ff64ccc5aa02d6
This commit is contained in:
Fritz Koenig 2010-10-12 09:42:03 -07:00
parent 136857475e
commit e50f5d4037

View File

@ -24,12 +24,11 @@
#else
#define cpuid(func,ax,bx,cx,dx)\
__asm__ __volatile__ (\
"pushl %%ebx \n\t" \
"cpuid \n\t" \
"movl %%ebx, %1 \n\t" \
"popl %%ebx \n\t" \
: "=a" (ax), "=r" (bx), "=c" (cx), "=d" (dx) \
: "a" (func));
"mov %%ebx, %%edi \n\t" \
"cpuid \n\t" \
"xchg %%edi, %%ebx \n\t" \
: "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
: "a" (func));
#endif
#else
#if ARCH_X86_64