]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/6c, cmd/6g: avoid address-as-constant in amd64 instructions
authorRuss Cox <rsc@golang.org>
Tue, 12 Aug 2014 23:53:11 +0000 (19:53 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 12 Aug 2014 23:53:11 +0000 (19:53 -0400)
This allows implementing address-of-global
as a pc-relative address instead of as a
32-bit integer constant.

LGTM=rminnich, iant
R=golang-codereviews, rminnich, iant
CC=golang-codereviews
https://golang.org/cl/128070045

src/cmd/6c/sgen.c
src/cmd/6g/cgen.c
src/cmd/6g/gsubr.c

index ba1c1f652d070909ade418cbb408e086ebfd0882..c048e784d45b637ad394914b4740259e59c88b16 100644 (file)
@@ -124,10 +124,7 @@ xcom(Node *n)
                break;
 
        case ONAME:
-               if(flag_largemodel)
-                       n->addable = 9;
-               else
-                       n->addable = 10;
+               n->addable = 9;
                if(n->class == CPARAM || n->class == CAUTO)
                        n->addable = 11;
                break;
index 4dd505b086d76813d8a92b7951b035d7ce988af3..bff2350621783212191cf66f4c58616b8f687951 100644 (file)
@@ -752,12 +752,7 @@ agenr(Node *n, Node *a, Node *res)
                        regalloc(&n3, types[tptr], res);
                        p1 = gins(ALEAQ, N, &n3);
                        datastring(nl->val.u.sval->s, nl->val.u.sval->len, &p1->from);
-                       if(flag_largemodel) {
-                               gins(AADDQ, &n2, &n3);
-                       } else {
-                               p1->from.scale = 1;
-                               p1->from.index = n2.val.u.reg;
-                       }
+                       gins(AADDQ, &n2, &n3);
                        goto indexdone;
                }
 
index f3464b7e1cf4be1e968618d9386a7c860bc55247..4ac2e9207957000e7109eec09ce699e1072d9fa5 100644 (file)
@@ -598,11 +598,8 @@ ismem(Node *n)
        case ONAME:
        case OPARAM:
        case OCLOSUREVAR:
-               return 1;
        case OADDR:
-               if(flag_largemodel)
-                       return 1;
-               break;
+               return 1;
        }
        return 0;
 }