summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShenghou Ma <minux@golang.org>2014-08-13 11:39:07 -0400
committerShenghou Ma <minux@golang.org>2014-08-13 11:39:07 -0400
commit28b121f6edd0262b48d744a9127fd7d6c417d2e3 (patch)
treec259fe82c3213555c65eabd64d3e791b76925712
parent04d3bcd72901222de30ba28a643a386da4a5c0a3 (diff)
downloadgo-28b121f6edd0262b48d744a9127fd7d6c417d2e3.tar.gz
[dev.power64] cmd/9g: do not ignore move instructions even if from and to are samaddr()
Those moves might be significant (e.g. narrowing or widening): on Power64, we don't distinguish between MOVWD and MOVW. This fixes divmode.go and bug447.go. LGTM=rsc R=rsc, iant CC=golang-codereviews https://codereview.appspot.com/125200043 Committer: Russ Cox <rsc@golang.org>
-rw-r--r--src/cmd/9g/gg.h1
-rw-r--r--src/cmd/9g/gsubr.c25
2 files changed, 0 insertions, 26 deletions
diff --git a/src/cmd/9g/gg.h b/src/cmd/9g/gg.h
index 319702200..6aa00117f 100644
--- a/src/cmd/9g/gg.h
+++ b/src/cmd/9g/gg.h
@@ -62,7 +62,6 @@ vlong fieldoffset(Type*, Node*);
void sgen(Node*, Node*, int64);
void gmove(Node*, Node*);
Prog* gins(int, Node*, Node*);
-int samaddr(Node*, Node*);
void naddr(Node*, Addr*, int);
void cgen_aret(Node*, Node*);
int componentgen(Node*, Node*);
diff --git a/src/cmd/9g/gsubr.c b/src/cmd/9g/gsubr.c
index a5ce5f141..d8842796a 100644
--- a/src/cmd/9g/gsubr.c
+++ b/src/cmd/9g/gsubr.c
@@ -1006,21 +1006,6 @@ hard:
return;
}
-int
-samaddr(Node *f, Node *t)
-{
- if(f->op != t->op)
- return 0;
-
- switch(f->op) {
- case OREGISTER:
- if(f->val.u.reg != t->val.u.reg)
- break;
- return 1;
- }
- return 0;
-}
-
/*
* generate one instruction:
* as f, t
@@ -1032,16 +1017,6 @@ gins(int as, Node *f, Node *t)
Prog *p;
Addr af, at;
- switch(as) {
- case AMOVW:
- case AMOVD:
- case AFMOVS:
- case AFMOVD:
- if(f != N && t != N && samaddr(f, t))
- return nil;
- break;
- }
-
memset(&af, 0, sizeof af);
memset(&at, 0, sizeof at);
if(f != N)