Commit 7aa89ea7 authored by David du Colombier's avatar David du Colombier

[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
parent 2ceca80e
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment