Added some patterns
This commit is contained in:
parent
c52b10c115
commit
8127265043
2 changed files with 69 additions and 0 deletions
|
@ -38,6 +38,8 @@ add.l #2,sp : tst.w X {no_part("sp",X)} -> move.w X,(sp)+ ;
|
|||
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 ;
|
||||
|
@ -63,6 +65,35 @@ 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 ;
|
||||
cmp.l #-NUM,DSREG : beq LAB -> add.l #NUM,DSREG : beq LAB ;
|
||||
|
|
|
@ -38,6 +38,8 @@ add.l #2,sp : tst.w X {no_part("sp",X)} -> move.w X,(sp)+ ;
|
|||
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 ;
|
||||
|
@ -52,12 +54,45 @@ move.l X,AREG : move.l AREG,DREG :
|
|||
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 ;
|
||||
|
@ -81,6 +116,9 @@ sub.l #-NUM,X -> add.l #NUM,X ;
|
|||
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 ;
|
||||
|
|
Loading…
Reference in a new issue