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();
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:
case AMULLU:
case AMULA:
- case AMVN:
+// case AMVN:
case ACMN:
case AADD:
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)
case AMULLU: /* read, read, write, write */
case AMULA:
- case AMVN:
+// case AMVN:
return 2;
case AADD: /* read, read, write */
case AORR:
case AAND:
case AEOR:
- case AMVN:
+// case AMVN:
case AMUL:
case AMULU:
case ADIV: