[dev.cc] cmd/8g: work around "out of fixed registers" on Plan 9

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
This commit is contained in:
David du Colombier 2014-11-16 22:55:07 +01:00
parent 2ceca80e3f
commit 7aa89ea798
1 changed files with 6 additions and 4 deletions

View 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;