diff options
author | Russ Cox <rsc@golang.org> | 2010-01-06 18:18:07 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-01-06 18:18:07 -0800 |
commit | 3c5bb07866e26c7a11b5374874ab99812a2ef987 (patch) | |
tree | 6f39c86626aef617a46bb161d69c5712a8086abc | |
parent | 78bff0a89393f4b3a0c740b0850b1ccceb2b9be3 (diff) | |
download | golang-3c5bb07866e26c7a11b5374874ab99812a2ef987.tar.gz |
8c: only refer to extern register variables in MOVL instructions
R=ken2
http://codereview.appspot.com/183136
-rw-r--r-- | src/cmd/8c/cgen.c | 6 | ||||
-rw-r--r-- | src/cmd/8c/sgen.c | 3 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/cmd/8c/cgen.c b/src/cmd/8c/cgen.c index 0d147b02f..edb29ad8c 100644 --- a/src/cmd/8c/cgen.c +++ b/src/cmd/8c/cgen.c @@ -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) { diff --git a/src/cmd/8c/sgen.c b/src/cmd/8c/sgen.c index c143c9a80..c4f91987c 100644 --- a/src/cmd/8c/sgen.c +++ b/src/cmd/8c/sgen.c @@ -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: |