diff options
author | Russ Cox <rsc@golang.org> | 2011-06-22 23:22:36 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2011-06-22 23:22:36 -0400 |
commit | c475c3071a615bd6c48918b1ac15a71b8fedb4e8 (patch) | |
tree | 5b06f49c08794b4df66214202c03a30b6804659c | |
parent | 5d53aab4a25d315ef94b31c70d85cb805a8acc2e (diff) | |
download | go-c475c3071a615bd6c48918b1ac15a71b8fedb4e8.tar.gz go-c475c3071a615bd6c48918b1ac15a71b8fedb4e8.zip |
5c: do not use R9 and R10
This program used to use R9 and R10.
Now it fails to compile (out of registers).
I used to know a simpler test but can't remember it.
Learned something new: Rietveld refuses change
list descriptions bigger than 10 kB.
int sum(int x, int y, int z, int w) {
return
(((((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))))%
(((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))))*
((((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))))%
(((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))))))*
(((((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))))%
(((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))))*
((((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))))%
(((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))))/
((((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))|
(((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w))&
((x*y+z*w|x*y+z*w)^
(x*y+z*w|x*y+z*w)))))))
;
}
R=ken2
CC=golang-dev
https://golang.org/cl/4650053
-rw-r--r-- | src/cmd/5c/txt.c | 28 | ||||
-rw-r--r-- | src/pkg/runtime/Makefile | 3 |
2 files changed, 5 insertions, 26 deletions
diff --git a/src/cmd/5c/txt.c b/src/cmd/5c/txt.c index 4be1f6f620..a32387bc1e 100644 --- a/src/cmd/5c/txt.c +++ b/src/cmd/5c/txt.c @@ -292,8 +292,7 @@ tmpreg(void) void regalloc(Node *n, Node *tn, Node *o) { - int i, j; - static int lasti; + int i; switch(tn->type->etype) { case TCHAR: @@ -310,16 +309,9 @@ regalloc(Node *n, Node *tn, Node *o) if(i >= 0 && i < NREG) goto out; } - j = lasti + REGRET+1; - for(i=REGRET+1; i<NREG; i++) { - if(j >= NREG) - j = REGRET+1; - if(reg[j] == 0) { - i = j; + for(i=REGRET+1; i<=REGEXT-2; i++) + if(reg[i] == 0) goto out; - } - j++; - } diag(tn, "out of fixed registers"); goto err; @@ -331,16 +323,9 @@ regalloc(Node *n, Node *tn, Node *o) if(i >= NREG && i < NREG+NFREG) goto out; } - j = 0*2 + NREG; - for(i=NREG; i<NREG+NFREG; i++) { - if(j >= NREG+NFREG) - j = NREG; - if(reg[j] == 0) { - i = j; + for(i=NREG; i<NREG+NFREG; i++) + if(reg[i] == 0) goto out; - } - j++; - } diag(tn, "out of float registers"); goto err; } @@ -350,9 +335,6 @@ err: return; out: reg[i]++; -/* lasti++; *** StrongARM does register forwarding */ - if(lasti >= 5) - lasti = 0; nodreg(n, tn, i); } diff --git a/src/pkg/runtime/Makefile b/src/pkg/runtime/Makefile index b122e05999..79f847e64a 100644 --- a/src/pkg/runtime/Makefile +++ b/src/pkg/runtime/Makefile @@ -12,9 +12,6 @@ SIZE_amd64=64 SIZE_arm=32 SIZE=$(SIZE_$(GOARCH)) -# TODO(kaib): fix register allocation to honor extern register so we -# can enable optimizations again. -CFLAGS_arm=-N CFLAGS_windows=-D__WINDOWS__ CFLAGS=-I$(GOOS) -I$(GOARCH) -I$(GOOS)/$(GOARCH) -wF $(CFLAGS_$(GOARCH)) $(CFLAGS_$(GOOS)) |