diff options
| author | forsyth <forsyth@vitanuova.com> | 2010-04-27 12:51:13 +0100 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2010-04-27 12:51:13 +0100 |
| commit | d67b7dad77bb8aa973dad1f7c3ab0c309b114278 (patch) | |
| tree | 6794120fb327d6de19cf05eed53f80d877781a3e /utils/qc/peep.c | |
| parent | 09da2e137d5eb0c940df35d989e4c31ec0654fc4 (diff) | |
20100427-1251
Diffstat (limited to 'utils/qc/peep.c')
| -rw-r--r-- | utils/qc/peep.c | 87 |
1 files changed, 79 insertions, 8 deletions
diff --git a/utils/qc/peep.c b/utils/qc/peep.c index 69d021be..cf1114f0 100644 --- a/utils/qc/peep.c +++ b/utils/qc/peep.c @@ -167,7 +167,16 @@ loop1: case AORNCC: case AXORCC: case ASUBCC: + case ASUBECC: + case ASUBMECC: + case ASUBZECC: case AADDCC: + case AADDCCC: + case AADDECC: + case AADDMECC: + case AADDZECC: + case ARLWMICC: + case ARLWNMCC: t = p1->as; break; /* don't deal with floating point instructions for now */ @@ -269,6 +278,7 @@ excise(Reg *r) p = r->prog; p->as = ANOP; p->from = zprog.from; + p->from3 = zprog.from3; p->to = zprog.to; p->reg = zprog.reg; /**/ } @@ -309,7 +319,6 @@ uniqs(Reg *r) * if the system forces R0 to be zero, * convert references to $0 to references to R0. */ -int regzer(Adr *a) { if(R0ISZERO) { @@ -324,7 +333,6 @@ regzer(Adr *a) return 0; } -int regtyp(Adr *a) { @@ -376,10 +384,22 @@ subprop(Reg *r0) return 0; case AADD: + case AADDC: + case AADDCC: + case AADDE: + case AADDECC: case ASUB: + case ASUBCC: + case ASUBC: + case ASUBCCC: + case ASUBE: + case ASUBECC: case ASLW: + case ASLWCC: case ASRW: + case ASRWCC: case ASRAW: + case ASRAWCC: case AOR: case AORCC: case AORN: @@ -394,13 +414,17 @@ subprop(Reg *r0) case ANORCC: case AXOR: case AXORCC: + case AMULHW: + case AMULHWU: case AMULLW: case ADIVW: case ADIVWU: case AREM: case AREMU: - case ANEG: - case ANEGCC: + case ARLWNM: + case ARLWNMCC: + case ARLWMI: + case ARLWMICC: case AFADD: case AFADDS: @@ -410,8 +434,6 @@ subprop(Reg *r0) case AFMULS: case AFDIV: case AFDIVS: - case AFNEG: - case AFNEGCC: if(p->to.type == v1->type) if(p->to.reg == v1->reg) { if(p->reg == NREG) @@ -420,6 +442,18 @@ subprop(Reg *r0) } break; + case AADDME: + case AADDMECC: + case AADDZE: + case AADDZECC: + case ASUBME: + case ASUBMECC: + case ASUBZE: + case ASUBZECC: + case ANEG: + case ANEGCC: + case AFNEG: + case AFNEGCC: case AFMOVS: case AFMOVD: case AMOVW: @@ -492,7 +526,6 @@ copyprop(Reg *r0) return copy1(v1, v2, r0->s1, 0); } -int copy1(Adr *v1, Adr *v2, Reg *r, int f) { int t; @@ -585,7 +618,7 @@ copyu(Prog *p, Adr *v, Adr *s) default: if(debug['P']) - print(" (?)"); + print(" (???)"); return 2; @@ -598,6 +631,14 @@ copyu(Prog *p, Adr *v, Adr *s) case ANEG: case ANEGCC: + case AADDME: + case AADDMECC: + case AADDZE: + case AADDZECC: + case ASUBME: + case ASUBMECC: + case ASUBZE: + case ASUBZECC: case AFCTIW: case AFCTIWZ: @@ -626,6 +667,8 @@ copyu(Prog *p, Adr *v, Adr *s) return 0; case AADD: /* read read write */ + case AADDC: + case AADDE: case ASUB: case ASLW: case ASRW: @@ -643,11 +686,17 @@ copyu(Prog *p, Adr *v, Adr *s) case ANOR: case ANORCC: case AXOR: + case AMULHW: + case AMULHWU: case AMULLW: case ADIVW: case ADIVWU: case AREM: case AREMU: + case ARLWMI: + case ARLWMICC: + case ARLWNM: + case ARLWNMCC: case AFADDS: case AFADD: @@ -763,9 +812,25 @@ a2type(Prog *p) switch(p->as) { case AADD: + case AADDC: case AADDCC: + case AADDCCC: + case AADDE: + case AADDECC: + case AADDME: + case AADDMECC: + case AADDZE: + case AADDZECC: case ASUB: + case ASUBC: case ASUBCC: + case ASUBCCC: + case ASUBE: + case ASUBECC: + case ASUBME: + case ASUBMECC: + case ASUBZE: + case ASUBZECC: case ASLW: case ASLWCC: case ASRW: @@ -784,6 +849,8 @@ a2type(Prog *p) case AXORCC: case ANEG: case ANEGCC: + case AMULHW: + case AMULHWU: case AMULLW: case AMULLWCC: case ADIVW: @@ -798,6 +865,10 @@ a2type(Prog *p) case ANANDCC: case ANOR: case ANORCC: + case ARLWMI: + case ARLWMICC: + case ARLWNM: + case ARLWNMCC: return D_REG; case AFADDS: |
