From f400d9aafc961c18e3289a0e701e61b2482a342a Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9my=20Oudompheng?= Date: Wed, 9 Apr 2014 21:23:36 +0200 Subject: [PATCH] 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 --- src/cmd/6g/ggen.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmd/6g/ggen.c b/src/cmd/6g/ggen.c index 2633b19e4d..991783bc57 100644 --- a/src/cmd/6g/ggen.c +++ b/src/cmd/6g/ggen.c @@ -42,12 +42,12 @@ defframe(Prog *ptxt) continue; if(n->class != PAUTO) 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); - 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 - lo = n->xoffset; + lo = rnd(n->xoffset, widthreg); continue; } // zero old range -- 2.50.0