1
0
mirror of https://github.com/golang/go synced 2024-11-22 03:34:40 -07:00

5l: two stack split bugs in one day

An ARM expert could probably phrase the
comparison in fewer instructions, but this works.

R=ken2
CC=golang-dev
https://golang.org/cl/2620041
This commit is contained in:
Russ Cox 2010-10-20 18:11:53 -04:00
parent 10b53867e8
commit 231fcea7e6

View File

@ -37,6 +37,7 @@
enum enum
{ {
StackBig = 4096, StackBig = 4096,
StackSmall = 128,
}; };
static Sym* sym_div; static Sym* sym_div;
@ -305,13 +306,30 @@ noops(void)
p->to.type = D_REG; p->to.type = D_REG;
p->to.reg = 1; p->to.reg = 1;
// CMP R1, $-autosize(SP) if(autosize < StackSmall) {
p = appendp(p); // CMP R1, SP
p->as = ACMP; p = appendp(p);
p->from.type = D_REG; p->as = ACMP;
p->from.reg = 1; p->from.type = D_REG;
p->from.offset = -autosize; p->from.reg = 1;
p->reg = REGSP; p->reg = REGSP;
} else {
// MOVW $-autosize(SP), R2
// CMP R1, R2
p = appendp(p);
p->as = AMOVW;
p->from.type = D_CONST;
p->from.reg = REGSP;
p->from.offset = -autosize;
p->to.type = D_REG;
p->to.reg = 2;
p = appendp(p);
p->as = ACMP;
p->from.type = D_REG;
p->from.reg = 1;
p->reg = 2;
}
// MOVW.LO $autosize, R1 // MOVW.LO $autosize, R1
p = appendp(p); p = appendp(p);