aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Backman <kaib@golang.org>2010-02-10 22:42:05 -0800
committerKai Backman <kaib@golang.org>2010-02-10 22:42:05 -0800
commit494bcc80e488112bb1439eec8362ac7b49985629 (patch)
tree68d108439daeb66e66fef16c7d1e9d91b82a898a
parent22a7f2a14d8fd870913942707dd3f30a30bb1eeb (diff)
downloadgo-494bcc80e488112bb1439eec8362ac7b49985629.tar.gz
go-494bcc80e488112bb1439eec8362ac7b49985629.zip
stop the 5c optimizer from clobbering extern static registers.
R=rsc, ken2 CC=golang-dev https://golang.org/cl/204064
-rw-r--r--src/cmd/5c/reg.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/cmd/5c/reg.c b/src/cmd/5c/reg.c
index a1508b91aa..f2d38d5196 100644
--- a/src/cmd/5c/reg.c
+++ b/src/cmd/5c/reg.c
@@ -79,6 +79,10 @@ regopt(Prog *p)
Reg* p;
} log5[6], *lp;
+ // TODO(kaib): optimizer disabled because it smashes R8 when running out of registers
+ // the disable is unconventionally here because the call is in common code shared by 5c/6c/8c
+ return;
+
firstr = R;
lastr = R;
nvar = 0;
@@ -1147,7 +1151,7 @@ int32
RtoB(int r)
{
- if(r < 2 || r >= REGTMP)
+ if(r < 2 || r >= REGTMP-2) // excluded R9 and R10 for m and g
return 0;
return 1L << r;
}
@@ -1155,7 +1159,7 @@ RtoB(int r)
int
BtoR(int32 b)
{
- b &= 0x07fcL;
+ b &= 0x01fcL; // excluded R9 and R10 for m and g
if(b == 0)
return 0;
return bitno(b);