summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-01-06 18:18:07 -0800
committerRuss Cox <rsc@golang.org>2010-01-06 18:18:07 -0800
commit3c5bb07866e26c7a11b5374874ab99812a2ef987 (patch)
tree6f39c86626aef617a46bb161d69c5712a8086abc
parent78bff0a89393f4b3a0c740b0850b1ccceb2b9be3 (diff)
downloadgolang-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.c6
-rw-r--r--src/cmd/8c/sgen.c3
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: