]> Cypherpunks repositories - gostls13.git/commitdiff
fix OINDEX address generation, leftover misunderstanding about
authorKai Backman <kaib@golang.org>
Fri, 16 Oct 2009 05:16:31 +0000 (22:16 -0700)
committerKai Backman <kaib@golang.org>
Fri, 16 Oct 2009 05:16:31 +0000 (22:16 -0700)
how scale works on amd64/386

go/test: passes 85% (294/342)

R=rsc
APPROVED=rsc
DELTA=27  (26 added, 1 deleted, 0 changed)
OCL=35815
CL=35818

src/cmd/5g/cgen.c
src/cmd/5g/gsubr.c
test/arm-pass.txt

index b8556e5618c188eedeeecdf2824d2ea03c071952..a05dcf621c5d1c2c18ac08b0dbc54eac4c6c36f4 100644 (file)
@@ -605,6 +605,14 @@ agen(Node *n, Node *res)
                        n4.op = OADDR;
                        n4.left = &n2;
                        cgen(&n4, &n3);
+                       if (w == 1)
+                               gins(AADD, &n2, &n3);
+                       else if(w == 2)
+                               gshift(AADD, &n2, SHIFT_LL, 1, &n3);
+                       else if(w == 4)
+                               gshift(AADD, &n2, SHIFT_LL, 2, &n3);
+                       else if(w == 8)
+                               gshift(AADD, &n2, SHIFT_LL, 3, &n3);    
                } else {
                        regalloc(&n4, t, N);
                        nodconst(&n1, t, w);
index d22d4b46873bc7c9993e7158703f536a7dc10437..3f8fd3f6897950a2020ccf7ada7336751e47bfb1 100644 (file)
@@ -1709,10 +1709,19 @@ oindex:
                gmove(&n2, reg);
        }
 
+       if (*w == 1)
+               gins(AADD, reg1, reg);
+       else if(*w == 2)
+               gshift(AADD, reg1, SHIFT_LL, 1, reg);
+       else if(*w == 4)
+               gshift(AADD, reg1, SHIFT_LL, 2, reg);
+       else if(*w == 8)
+               gshift(AADD, reg1, SHIFT_LL, 3, reg);
+
        naddr(reg1, a);
-       a->offset = 0;
        a->type = D_OREG;
        a->reg = reg->val.u.reg;
+       a->offset = 0;
 
        goto yes;
 
index b64ab71203d75a97bbb725f5bcbf14f5b40869d0..4953c32a8187fb44e60ef539a5b22097cf6d0705 100644 (file)
@@ -2,6 +2,7 @@
 args.go
 assign.go
 bigalg.go
+blank.go
 blank1.go
 bugs/bug136.go
 bugs/bug162.go
@@ -242,6 +243,8 @@ interface/recursive.go
 interface/returntype.go
 interface/struct.go
 iota.go
+ken/array.go
+ken/complit.go
 ken/divmod.go
 ken/embed.go
 ken/for.go
@@ -251,6 +254,7 @@ ken/intervar.go
 ken/label.go
 ken/mfunc.go
 ken/ptrvar.go
+ken/range.go
 ken/rob1.go
 ken/rob2.go
 ken/robfor.go
@@ -262,6 +266,8 @@ ken/simpfun.go
 ken/simpprint.go
 ken/simpswitch.go
 ken/simpvar.go
+ken/slicearray.go
+ken/sliceslice.go
 ken/string.go
 ken/strvar.go
 method.go
@@ -279,8 +285,10 @@ sieve.go
 sigchld.go
 simassign.go
 string_lit.go
+stringrange.go
 switch.go
 switch1.go
 test0.go
 typeswitch.go
+utf.go
 varinit.go