mirror of
https://github.com/golang/go
synced 2024-11-21 14:14:40 -07:00
cgen64: dont use MVN instruction
R=r CC=golang-dev https://golang.org/cl/4154043
This commit is contained in:
parent
dc331e6565
commit
5080d7617a
@ -64,17 +64,21 @@ cgen64(Node *n, Node *res)
|
||||
return;
|
||||
|
||||
case OCOM:
|
||||
regalloc(&t1, lo1.type, N);
|
||||
gmove(ncon(-1), &t1);
|
||||
|
||||
split64(res, &lo2, &hi2);
|
||||
regalloc(&n1, lo1.type, N);
|
||||
|
||||
gins(AMOVW, &lo1, &n1);
|
||||
gins(AMVN, &n1, &n1);
|
||||
gins(AEOR, &t1, &n1);
|
||||
gins(AMOVW, &n1, &lo2);
|
||||
|
||||
gins(AMOVW, &hi1, &n1);
|
||||
gins(AMVN, &n1, &n1);
|
||||
gins(AEOR, &t1, &n1);
|
||||
gins(AMOVW, &n1, &hi2);
|
||||
|
||||
regfree(&t1);
|
||||
regfree(&n1);
|
||||
splitclean();
|
||||
splitclean();
|
||||
|
@ -133,20 +133,20 @@ loop1:
|
||||
switch(p->as) {
|
||||
default:
|
||||
continue;
|
||||
case AEOR:
|
||||
/*
|
||||
* EOR -1,x,y => MVN x,y
|
||||
*/
|
||||
if(isdconst(&p->from) && p->from.offset == -1) {
|
||||
p->as = AMVN;
|
||||
p->from.type = D_REG;
|
||||
if(p->reg != NREG)
|
||||
p->from.reg = p->reg;
|
||||
else
|
||||
p->from.reg = p->to.reg;
|
||||
p->reg = NREG;
|
||||
}
|
||||
continue;
|
||||
// case AEOR:
|
||||
// /*
|
||||
// * EOR -1,x,y => MVN x,y
|
||||
// */
|
||||
// if(isdconst(&p->from) && p->from.offset == -1) {
|
||||
// p->as = AMVN;
|
||||
// p->from.type = D_REG;
|
||||
// if(p->reg != NREG)
|
||||
// p->from.reg = p->reg;
|
||||
// else
|
||||
// p->from.reg = p->to.reg;
|
||||
// p->reg = NREG;
|
||||
// }
|
||||
// continue;
|
||||
case AMOVH:
|
||||
case AMOVHU:
|
||||
case AMOVB:
|
||||
@ -337,7 +337,7 @@ subprop(Reg *r0)
|
||||
|
||||
case AMULLU:
|
||||
case AMULA:
|
||||
case AMVN:
|
||||
// case AMVN:
|
||||
|
||||
case ACMN:
|
||||
case AADD:
|
||||
@ -666,7 +666,7 @@ shiftprop(Reg *r)
|
||||
FAIL("can't swap");
|
||||
if(p1->reg == NREG && p1->to.reg == n)
|
||||
FAIL("shift result used twice");
|
||||
case AMVN:
|
||||
// case AMVN:
|
||||
if(p1->from.type == D_SHIFT)
|
||||
FAIL("shift result used in shift");
|
||||
if(p1->from.type != D_REG || p1->from.reg != n)
|
||||
@ -1018,7 +1018,7 @@ copyu(Prog *p, Adr *v, Adr *s)
|
||||
|
||||
case AMULLU: /* read, read, write, write */
|
||||
case AMULA:
|
||||
case AMVN:
|
||||
// case AMVN:
|
||||
return 2;
|
||||
|
||||
case AADD: /* read, read, write */
|
||||
@ -1176,7 +1176,7 @@ a2type(Prog *p)
|
||||
case AORR:
|
||||
case AAND:
|
||||
case AEOR:
|
||||
case AMVN:
|
||||
// case AMVN:
|
||||
case AMUL:
|
||||
case AMULU:
|
||||
case ADIV:
|
||||
|
Loading…
Reference in New Issue
Block a user