]> Cypherpunks repositories - gostls13.git/commitdiff
8c: only refer to extern register variables in MOVL instructions
authorRuss Cox <rsc@golang.org>
Thu, 7 Jan 2010 02:18:07 +0000 (18:18 -0800)
committerRuss Cox <rsc@golang.org>
Thu, 7 Jan 2010 02:18:07 +0000 (18:18 -0800)
R=ken2
https://golang.org/cl/183136

src/cmd/8c/cgen.c
src/cmd/8c/sgen.c

index 0d147b02fa9e35907a2329bc7fa5f704618635e2..edb29ad8c7b20ff177e77948736eb5206f4fc707 100644 (file)
@@ -55,6 +55,12 @@ cgen(Node *n, Node *nn)
        l = n->left;
        r = n->right;
        o = n->op;
+
+       if(n->op == OEXREG || (nn != Z && nn->op == OEXREG)) {
+               gmove(n, nn);
+               return;
+       }
+
        if(n->addable >= INDEXED) {
                if(nn == Z) {
                        switch(o) {
index c143c9a80044ac040d17c509d9ae51e586e5eea7..c4f91987caf34306951f8642b7c66858bb0703ac 100644 (file)
@@ -98,6 +98,7 @@ indexshift(Node *n)
  *             (20) * (X) ==> 7        multiplier in indexing
  *             (X,7) + (13,1) ==> 8    adder in indexing (addresses)
  *             (8) ==> &9(OINDEX)      index, almost addressable
+ *             100                                     extern register
  *
  *     calculate complexity (number of registers)
  */
@@ -125,7 +126,7 @@ xcom(Node *n)
                break;
 
        case OEXREG:
-               n->addable = 10;
+               n->addable = 0;
                break;
 
        case OREGISTER: