blob: 3fde16c6ca014d3638b70317f448cca240a5e19d [file] [log] [blame]
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"
);