add.l #4,sp : tst.l D {no_part("sp",D)} -> move.l D,(sp)+ ;
add.l #2,sp : move.w X,-(sp) -> move.w X,(sp) ;
add.l #4,sp : move.l X,-(sp) -> move.l X,(sp) ;
+add.l #4,sp : pea (NUM) -> move.l #NUM,(sp) ;
+add.l #NUM,sp : unlk AREG -> unlk AREG ;
move.w A,X : tst.w A -> move.w A,X ;
move.w X,A : tst.w A -> move.w X,A ;
move.l A,D : tst.l A {no_part(D,A)} -> move.l A,D ;
{reg_subs_allowed(ANY) &&
!is_dreg(A) } -> move.l DREG,A : ANY DREG,X ;
+/* change some compares to tests */
+cmp.w #0,X : beq LAB -> tst.w X : beq LAB ;
+cmp.w #0,X : bne LAB -> tst.w X : bne LAB ;
+cmp.w #0,X : blt LAB -> tst.w X : bgt LAB ;
+cmp.w #0,X : ble LAB -> tst.w X : bge LAB ;
+cmp.w #0,X : bge LAB -> tst.w X : ble LAB ;
+cmp.w #0,X : bgt LAB -> tst.w X : blt LAB ;
+
+cmp.l #0,X : beq LAB -> tst.l X : beq LAB ;
+cmp.l #0,X : bne LAB -> tst.l X : bne LAB ;
+cmp.l #0,X : blt LAB -> tst.l X : bgt LAB ;
+cmp.l #0,X : ble LAB -> tst.l X : bge LAB ;
+cmp.l #0,X : bge LAB -> tst.l X : ble LAB ;
+cmp.l #0,X : bgt LAB -> tst.l X : blt LAB ;
+
+cmp.w X,#0 : beq LAB -> tst.w X : beq LAB ;
+cmp.w X,#0 : bne LAB -> tst.w X : bne LAB ;
+cmp.w X,#0 : blt LAB -> tst.w X : blt LAB ;
+cmp.w X,#0 : ble LAB -> tst.w X : ble LAB ;
+cmp.w X,#0 : bge LAB -> tst.w X : bge LAB ;
+cmp.w X,#0 : bgt LAB -> tst.w X : bgt LAB ;
+
+cmp.l X,#0 : beq LAB -> tst.l X : beq LAB ;
+cmp.l X,#0 : bne LAB -> tst.l X : bne LAB ;
+cmp.l X,#0 : blt LAB -> tst.l X : blt LAB ;
+cmp.l X,#0 : ble LAB -> tst.l X : ble LAB ;
+cmp.l X,#0 : bge LAB -> tst.l X : bge LAB ;
+cmp.l X,#0 : bgt LAB -> tst.l X : bgt LAB ;
+
/* change "cmp" into "add" or "sub" (possibly "addq" or "subq") */
cmp.w #-NUM,DSREG : beq LAB -> add.w #NUM,DSREG : beq LAB ;
cmp.l #-NUM,DSREG : beq LAB -> add.l #NUM,DSREG : beq LAB ;
add.l #4,sp : tst.l D {no_part("sp",D)} -> move.l D,(sp)+ ;
add.l #2,sp : move.w X,-(sp) -> move.w X,(sp) ;
add.l #4,sp : move.l X,-(sp) -> move.l X,(sp) ;
+add.l #4,sp : pea (NUM) -> move.l #NUM,(sp) ;
+add.l #NUM,sp : unlk AREG -> unlk AREG ;
move.w A,X : tst.w A -> move.w A,X ;
move.w X,A : tst.w A -> move.w X,A ;
move.l A,D : tst.l A {no_part(D,A)} -> move.l A,D ;
move.l DREG,AREG: bne LAB ;
/* redundant move */
+move.l DREG,DREG2 : move.l DREG2,DREG -> move.l DREG,DREG2 ;
move.w DREG,DREG2 : move.w DREG2,DREG -> move.w DREG,DREG2 ;
/* register subsumption */
move.w DREG,A : ANY A,X
{reg_subs_allowed(ANY) &&
!is_dreg(A) } -> move.w DREG,A : ANY DREG,X ;
+move.l DREG,A : ANY A,X
+ {reg_subs_allowed(ANY) &&
+ !is_dreg(A) } -> move.l DREG,A : ANY DREG,X ;
+
+/* change some compares to tests */
+cmp.w #0,X : beq LAB -> tst.w X : beq LAB ;
+cmp.w #0,X : bne LAB -> tst.w X : bne LAB ;
+cmp.w #0,X : blt LAB -> tst.w X : bgt LAB ;
+cmp.w #0,X : ble LAB -> tst.w X : bge LAB ;
+cmp.w #0,X : bge LAB -> tst.w X : ble LAB ;
+cmp.w #0,X : bgt LAB -> tst.w X : blt LAB ;
+
+cmp.l #0,X : beq LAB -> tst.l X : beq LAB ;
+cmp.l #0,X : bne LAB -> tst.l X : bne LAB ;
+cmp.l #0,X : blt LAB -> tst.l X : bgt LAB ;
+cmp.l #0,X : ble LAB -> tst.l X : bge LAB ;
+cmp.l #0,X : bge LAB -> tst.l X : ble LAB ;
+cmp.l #0,X : bgt LAB -> tst.l X : blt LAB ;
+
+cmp.w X,#0 : beq LAB -> tst.w X : beq LAB ;
+cmp.w X,#0 : bne LAB -> tst.w X : bne LAB ;
+cmp.w X,#0 : blt LAB -> tst.w X : blt LAB ;
+cmp.w X,#0 : ble LAB -> tst.w X : ble LAB ;
+cmp.w X,#0 : bge LAB -> tst.w X : bge LAB ;
+cmp.w X,#0 : bgt LAB -> tst.w X : bgt LAB ;
+
+cmp.l X,#0 : beq LAB -> tst.l X : beq LAB ;
+cmp.l X,#0 : bne LAB -> tst.l X : bne LAB ;
+cmp.l X,#0 : blt LAB -> tst.l X : blt LAB ;
+cmp.l X,#0 : ble LAB -> tst.l X : ble LAB ;
+cmp.l X,#0 : bge LAB -> tst.l X : bge LAB ;
+cmp.l X,#0 : bgt LAB -> tst.l X : bgt LAB ;
/* change "cmp" into "add" or "sub" (possibly "addq" or "subq") */
cmp.w #-NUM,DSREG : beq LAB -> add.w #NUM,DSREG : beq LAB ;
move.b X,DSREG : and.w #NUM,DSREG :
tst.w DSREG : beq LAB
{ bitno(NUM,BITNO)} -> btst #BITNO,X ;
+move.b X,DSREG : and.l #NUM,DSREG :
+ tst.l DSREG : beq LAB
+ { bitno(NUM,BITNO)} -> btst #BITNO,X ;
/* skip over jump */
beq L1 : bra L2: labdef L1 -> bne L2 : labdef L1 ;