From 5080d7617a03197dc7319eaf1a8f76d5288f0a46 Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Tue, 8 Feb 2011 17:30:23 -0800 Subject: [PATCH] cgen64: dont use MVN instruction R=r CC=golang-dev https://golang.org/cl/4154043 --- src/cmd/5g/cgen64.c | 8 ++++++-- src/cmd/5g/peep.c | 36 ++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/cmd/5g/cgen64.c b/src/cmd/5g/cgen64.c index e5604e2394a..4da8db2ae20 100644 --- a/src/cmd/5g/cgen64.c +++ b/src/cmd/5g/cgen64.c @@ -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(); diff --git a/src/cmd/5g/peep.c b/src/cmd/5g/peep.c index 32d5d2bd808..b4421a1b422 100644 --- a/src/cmd/5g/peep.c +++ b/src/cmd/5g/peep.c @@ -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: