Commit f400d9aa authored by Rémy Oudompheng's avatar Rémy Oudompheng

cmd/6g: relax constraint on variables that need zeroing.

On amd64p32 pointers are 32-bit-aligned and cannot be assumed to
have an offset multiple of widthreg. Instead check that they are
withptr-aligned.

Also change the threshold for region merging to 2*widthreg
instead of 2*widthptr because performance on amd64 and amd64p32
is expected to be the same.

Fixes #7712.

LGTM=khr
R=rsc, dave, khr, brad, bradfitz
CC=golang-codereviews
https://golang.org/cl/84690044
parent 3d63ec24
...@@ -42,12 +42,12 @@ defframe(Prog *ptxt) ...@@ -42,12 +42,12 @@ defframe(Prog *ptxt)
continue; continue;
if(n->class != PAUTO) if(n->class != PAUTO)
fatal("needzero class %d", n->class); fatal("needzero class %d", n->class);
if(n->type->width % widthreg != 0 || n->xoffset % widthreg != 0 || n->type->width == 0) if(n->type->width % widthptr != 0 || n->xoffset % widthptr != 0 || n->type->width == 0)
fatal("var %lN has size %d offset %d", n, (int)n->type->width, (int)n->xoffset); fatal("var %lN has size %d offset %d", n, (int)n->type->width, (int)n->xoffset);
if(lo != hi && n->xoffset + n->type->width >= lo - 2*widthptr) { if(lo != hi && n->xoffset + n->type->width >= lo - 2*widthreg) {
// merge with range we already have // merge with range we already have
lo = n->xoffset; lo = rnd(n->xoffset, widthreg);
continue; continue;
} }
// zero old range // zero old range
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment