From: Ken Thompson Date: Wed, 20 Oct 2010 20:18:00 +0000 (-0700) Subject: code gen error for *(complex)++ X-Git-Tag: weekly.2010-10-20~7 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6096fc83cd117b0690c3b3017778757e4389982f;p=gostls13.git code gen error for *(complex)++ includes array[i]++ and slice[i]++ R=rsc CC=golang-dev https://golang.org/cl/2614041 --- diff --git a/src/cmd/5g/ggen.c b/src/cmd/5g/ggen.c index 55f6169465..d665f6158b 100644 --- a/src/cmd/5g/ggen.c +++ b/src/cmd/5g/ggen.c @@ -458,13 +458,14 @@ cgen_asop(Node *n) } if(nr->ullman < UINF) if(sudoaddable(a, nl, &addr, &w)) { + w = optoas(OAS, nl->type); regalloc(&n2, nl->type, N); - p1 = gins(AMOVW, N, &n2); + p1 = gins(w, N, &n2); p1->from = addr; regalloc(&n3, nr->type, N); cgen(nr, &n3); gins(a, &n3, &n2); - p1 = gins(AMOVW, &n2, N); + p1 = gins(w, &n2, N); p1->to = addr; regfree(&n2); regfree(&n3); diff --git a/src/cmd/5g/gsubr.c b/src/cmd/5g/gsubr.c index 6cccdac25f..b96e30cea7 100644 --- a/src/cmd/5g/gsubr.c +++ b/src/cmd/5g/gsubr.c @@ -1835,14 +1835,20 @@ oindex: gmove(&n2, reg); } - if(*w == 1) + switch(*w) { + case 1: gins(AADD, reg1, reg); - else if(*w == 2) + break; + case 2: gshift(AADD, reg1, SHIFT_LL, 1, reg); - else if(*w == 4) + break; + case 4: gshift(AADD, reg1, SHIFT_LL, 2, reg); - else if(*w == 8) + break; + case 8: gshift(AADD, reg1, SHIFT_LL, 3, reg); + break; + } naddr(reg1, a, 1); a->type = D_OREG;