mirror of https://github.com/golang/go.git
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
This commit is contained in:
parent
5d53aab4a2
commit
c475c3071a
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue