]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: avoid using %ebx on i386.
authorShenghou Ma <minux.ma@gmail.com>
Sun, 24 Feb 2013 14:45:53 +0000 (22:45 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Sun, 24 Feb 2013 14:45:53 +0000 (22:45 +0800)
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

src/cmd/dist/unix.c

index baf019ef9cd709bdabda70e9141f89271a5c9f75..d8b88893c91e4172d5b85f78295ae0a7e1e91c03 100644 (file)
@@ -770,7 +770,15 @@ sigillhand(int signum)
 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));