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
void
regalloc(Node *n, Node *tn, Node *o)
{
- int i, j;
- static int lasti;
+ int i;
switch(tn->type->etype) {
case TCHAR:
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;
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;
}
return;
out:
reg[i]++;
-/* lasti++; *** StrongARM does register forwarding */
- if(lasti >= 5)
- lasti = 0;
nodreg(n, tn, i);
}
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))