summaryrefslogtreecommitdiff
path: root/utils/qc/peep.c
diff options
context:
space:
mode:
authorforsyth <forsyth@vitanuova.com>2010-04-27 12:51:13 +0100
committerforsyth <forsyth@vitanuova.com>2010-04-27 12:51:13 +0100
commitd67b7dad77bb8aa973dad1f7c3ab0c309b114278 (patch)
tree6794120fb327d6de19cf05eed53f80d877781a3e /utils/qc/peep.c
parent09da2e137d5eb0c940df35d989e4c31ec0654fc4 (diff)
20100427-1251
Diffstat (limited to 'utils/qc/peep.c')
-rw-r--r--utils/qc/peep.c87
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: