mirror of
https://github.com/golang/go
synced 2024-11-26 04:37:59 -07:00
cmd/gc: fix stkptrsize calculation
I moved the pointer block from one end of the frame to the other toward the end of working on the last CL, and of course that made the optimization no longer work. Now it works again: 0030 (bug361.go:12) DATA gclocals·0+0(SB)/4,$4 0030 (bug361.go:12) DATA gclocals·0+4(SB)/4,$3 0030 (bug361.go:12) GLOBL gclocals·0+0(SB),8,$8 Fixes arm build (this time for sure!). TBR=golang-dev CC=cshapiro, golang-dev, iant https://golang.org/cl/12627044
This commit is contained in:
parent
f91e682cca
commit
390656affd
@ -341,7 +341,7 @@ dumpgclocals(Node* fn, Sym *sym)
|
||||
node = ll->n;
|
||||
if(node->class == PAUTO && node->op == ONAME) {
|
||||
if(haspointers(node->type)) {
|
||||
xoffset = node->xoffset + stksize;
|
||||
xoffset = node->xoffset + stkptrsize;
|
||||
walktype1(node->type, &xoffset, bv);
|
||||
}
|
||||
}
|
||||
@ -397,7 +397,6 @@ allocauto(Prog* ptxt)
|
||||
NodeList *ll;
|
||||
Node* n;
|
||||
vlong w;
|
||||
vlong ptrlimit;
|
||||
|
||||
if(curfn->dcl == nil) {
|
||||
stksize = 0;
|
||||
@ -437,7 +436,7 @@ allocauto(Prog* ptxt)
|
||||
|
||||
// Reassign stack offsets of the locals that are still there.
|
||||
stksize = 0;
|
||||
ptrlimit = -1;
|
||||
stkptrsize = 0;
|
||||
for(ll = curfn->dcl; ll != nil; ll=ll->next) {
|
||||
n = ll->n;
|
||||
if (n->class != PAUTO || n->op != ONAME)
|
||||
@ -449,8 +448,8 @@ allocauto(Prog* ptxt)
|
||||
fatal("bad width");
|
||||
stksize += w;
|
||||
stksize = rnd(stksize, n->type->align);
|
||||
if(ptrlimit < 0 && haspointers(n->type))
|
||||
ptrlimit = stksize - w;
|
||||
if(haspointers(n->type))
|
||||
stkptrsize = stksize;
|
||||
if(thechar == '5')
|
||||
stksize = rnd(stksize, widthptr);
|
||||
if(stksize >= (1ULL<<31)) {
|
||||
@ -460,11 +459,6 @@ allocauto(Prog* ptxt)
|
||||
n->stkdelta = -stksize - n->xoffset;
|
||||
}
|
||||
stksize = rnd(stksize, widthptr);
|
||||
|
||||
if(ptrlimit < 0)
|
||||
stkptrsize = 0;
|
||||
else
|
||||
stkptrsize = stksize - ptrlimit;
|
||||
stkptrsize = rnd(stkptrsize, widthptr);
|
||||
|
||||
fixautoused(ptxt);
|
||||
|
Loading…
Reference in New Issue
Block a user