| http://code.google.com/p/iotools/issues/detail?id=2 |
| |
| --- a/misc.c |
| +++ b/misc.c |
| @@ -149,8 +149,16 @@ cpuid_inline(int cpu, int function, int index, uint32_t *data) |
| } |
| |
| asm volatile ( |
| +#ifdef __i386__ |
| + "xchg %%ebx, %%esi;" /* save ebx (for PIC) */ |
| + "cpuid;" |
| + "xchg %%esi, %%ebx;" /* restore ebx & pass to caller */ |
| + : "=S" (data[1]), |
| +#else |
| "cpuid\n\t" |
| - : "=a" (data[0]), "=b" (data[1]), "=c" (data[2]), "=d" (data[3]) |
| + : "=b" (data[1]), |
| +#endif |
| + "=a" (data[0]), "=c" (data[2]), "=d" (data[3]) |
| : "0" (function), "2" (index) |
| : "memory" |
| ); |