mirror of https://github.com/golang/go.git
[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://golang.org/cl/125200043
This commit is contained in:
parent
b6d6eb21ec
commit
f285537b7f
|
|
@ -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*);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue