]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.cc] cmd/8g: work around "out of fixed registers" on Plan 9
authorDavid du Colombier <0intro@gmail.com>
Sun, 16 Nov 2014 21:55:07 +0000 (22:55 +0100)
committerDavid du Colombier <0intro@gmail.com>
Sun, 16 Nov 2014 21:55:07 +0000 (22:55 +0100)
This change works around the "out of fixed registers"
issue with the Plan 9 C compiler on 386, introduced by
the Bits change to uint64 in CL 169060043.

The purpose of this CL is to be able to properly
follow the conversion of the Plan 9 runtime to Go
on the Plan 9 builders.

This CL could be reverted once the Go compilers will
be converted to Go.

Thanks to Nick Owens for investigating this issue.

LGTM=rsc
R=rsc
CC=austin, golang-codereviews, mischief
https://golang.org/cl/177860043

src/cmd/8g/reg.c

index 79d60bed55205b7c2710f60acf99b8be9213fe30..aa39dbd43f50aa73231a7772be3a5b69d566ab7c 100644 (file)
@@ -926,7 +926,7 @@ paint1(Reg *r, int bn)
        Reg *r1;
        Prog *p;
        int z;
-       uint64 bb;
+       uint64 bb, rbz;
 
        z = bn/64;
        bb = 1LL<<(bn%64);
@@ -945,7 +945,8 @@ paint1(Reg *r, int bn)
                r = r1;
        }
 
-       if(LOAD(r) & ~(r->set.b[z]&~(r->use1.b[z]|r->use2.b[z])) & bb) {
+       rbz = ~(r->set.b[z]&~(r->use1.b[z]|r->use2.b[z]));
+       if(LOAD(r) & rbz & bb) {
                change -= CLOAD * r->f.loop;
        }
        for(;;) {
@@ -1053,7 +1054,7 @@ paint3(Reg *r, int bn, uint32 rb, int rn)
        Reg *r1;
        Prog *p;
        int z;
-       uint64 bb;
+       uint64 bb, rbz;
 
        z = bn/64;
        bb = 1LL << (bn%64);
@@ -1072,7 +1073,8 @@ paint3(Reg *r, int bn, uint32 rb, int rn)
                r = r1;
        }
 
-       if(LOAD(r) & ~(r->set.b[z] & ~(r->use1.b[z]|r->use2.b[z])) & bb)
+       rbz = ~(r->set.b[z] & ~(r->use1.b[z]|r->use2.b[z]));
+       if(LOAD(r) & rbz & bb)
                addmove(r, bn, rn, 0);
        for(;;) {
                r->act.b[z] |= bb;