Or gcc (-fPIC) will complain:
cmd/dist/unix.c: In function ‘cansse2’
cmd/dist/unix.c:774: error: can't find a register in class ‘BREG’ while reloading ‘asm’
cmd/dist/unix.c:774: error: ‘asm’ operand has impossible constraints
This affects bootstrapping on native Darwin/386 where all code is
compiled with -fPIC.
R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/
7394047
static void
__cpuid(int dst[4], int ax)
{
-#if defined(__i386__) || defined(__x86_64__)
+#ifdef __i386__
+ // we need to avoid ebx on i386 (esp. when -fPIC).
+ asm volatile(
+ "mov %%ebx, %%edi\n\t"
+ "cpuid\n\t"
+ "xchgl %%ebx, %%edi"
+ : "=a" (dst[0]), "=D" (dst[1]), "=c" (dst[2]), "=d" (dst[3])
+ : "0" (ax));
+#elif defined(__x86_64__)
asm volatile("cpuid"
: "=a" (dst[0]), "=b" (dst[1]), "=c" (dst[2]), "=d" (dst[3])
: "0" (ax));