]> Cypherpunks repositories - gostls13.git/commitdiff
small code improvement to
authorKen Thompson <ken@golang.org>
Wed, 3 Dec 2008 03:54:51 +0000 (19:54 -0800)
committerKen Thompson <ken@golang.org>
Wed, 3 Dec 2008 03:54:51 +0000 (19:54 -0800)
used scaled indexing

R=r
OCL=20308
CL=20310

src/cmd/6g/cgen.c

index de54756de8b2ac7612414421c227c93d16f27ecf..5e3d9ed1899973e4256dc9ae514bfc8286403487 100644 (file)
@@ -476,11 +476,6 @@ agen(Node *n, Node *res)
                        patch(p1, pc);
                }
 
-               if(w != 1) {
-                       nodconst(&n1, t, w);                    // w
-                       gins(optoas(OMUL, t), &n1, &n2);
-               }
-
                if(isptrdarray(nl->type)) {
                        n1 = n3;
                        n1.op = OINDREG;
@@ -488,9 +483,20 @@ agen(Node *n, Node *res)
                        n1.xoffset = offsetof(Array, array);
                        gmove(&n1, &n3);
                }
-               gins(optoas(OADD, types[tptr]), &n2, &n3);
-               gmove(&n3, res);
 
+               if(w == 1 || w == 2 || w == 4 || w == 8) {
+                       p1 = gins(ALEAQ, &n2, &n3);
+                       p1->from.scale = w;
+                       p1->from.index = p1->from.type;
+                       p1->from.type = p1->to.type + D_INDIR;
+               } else {
+                       nodconst(&n1, t, w);
+                       gins(optoas(OMUL, t), &n1, &n2);
+                       gins(optoas(OADD, types[tptr]), &n2, &n3);
+                       gmove(&n3, res);
+               }
+
+               gmove(&n3, res);
                regfree(&n2);
                regfree(&n3);
                break;