]> Cypherpunks repositories - gostls13.git/commitdiff
code gen error for *(complex)++
authorKen Thompson <ken@golang.org>
Wed, 20 Oct 2010 20:18:00 +0000 (13:18 -0700)
committerKen Thompson <ken@golang.org>
Wed, 20 Oct 2010 20:18:00 +0000 (13:18 -0700)
includes array[i]++ and slice[i]++

R=rsc
CC=golang-dev
https://golang.org/cl/2614041

src/cmd/5g/ggen.c
src/cmd/5g/gsubr.c

index 55f61694653590a722858b62ed7ace6242e1de6c..d665f6158b7f04811dff6ee33c71a316aeda76a2 100644 (file)
@@ -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);
index 6cccdac25f25fb12908e35666ac3405f89cc9a2b..b96e30cea7959c640fc0b3718dc7c6eee8a1ec4b 100644 (file)
@@ -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;