diff --git a/sys/src/cmd/6c/peep.c b/sys/src/cmd/6c/peep.c index 64f13b771..7096ce958 100644 --- a/sys/src/cmd/6c/peep.c +++ b/sys/src/cmd/6c/peep.c @@ -100,15 +100,28 @@ loop1: case AMOVQ: case AMOVSS: case AMOVSD: - if(regtyp(&p->to)) + if(!regtyp(&p->to)) + break; if(regtyp(&p->from)) { if(copyprop(r)) { excise(r); t++; - } else + break; + } if(subprop(r) && copyprop(r)) { excise(r); t++; + break; + } + } + if(p->as != AMOVL) + break; + r1 = rnops(uniqs(r)); + if(r1 != R){ + p1 = r1->prog; + if(p1->as == AMOVLQZX && p1->from.type == p->to.type && p1->to.type == p->to.type){ + excise(r1); + t++; } } break;