X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fpic%2Fpeeph.def;h=8e6df14f6100431cd5e0c267ad197babd481eff0;hb=1e65e3bd5cbff5a1ab4a7a65c2ff68e4b5e5b43c;hp=d6a80a0e98c17d71c130ef1b786c23edbe24353e;hpb=8bad3436d92f6b13ffc24583e3688e23021a62be;p=fw%2Fsdcc diff --git a/src/pic/peeph.def b/src/pic/peeph.def index d6a80a0e..8e6df14f 100644 --- a/src/pic/peeph.def +++ b/src/pic/peeph.def @@ -36,9 +36,9 @@ // clrw //lab1 // -// However, the Rule has wild cards four wild cards. -// The first allows the btfss instruction operate -// on anything, not just the Z bit in status register. +// However, the Rule has four wild cards. +// The first allows the btfss instruction operator +// be anything, not just the Z bit in status register. // The second wild card applies to a label. // The third wild card is for an instruction - any // single instruction can be substituted. @@ -67,56 +67,71 @@ // is smart enough to look more than one instruction past the // target block... // +// Special commands +// +// +// _NOTBITSKIP_ %1 - Creates a wild card instruction that +// will match all instructions except for +// bit skip instructions (btfsc or btfss) +// _BITSKIP_ %1 - Creates a wild card instruction that only +// will match a bit skip instruction (btfsc +// or btfss) +// _INVERTBITSKIP_ %1 - For the wild card instruction %1, invert +// the state of the bit skip. If %1 is not +// a bit skip instruction, then there's an +// error in the peep rule. +// +// // -replace restart { - btfss %1 - goto %2 - %3 -%2: %4 -} by { - ;peep 1 - test/jump to test/skip - btfsc %1 - %3 -%2: %4 -} - -replace restart { - btfsc %1 - goto %2 - %3 -%2: %4 -} by { - ;peep 1a - test/jump to test/skip - btfss %1 - %3 -%2: %4 -} +// Peep 1 +// Converts +// +// btfss reg1,bit +// goto label +// incf reg2,f +//label +// +// Into: +// +// btfsc reg1,bit +// incf reg2,f +//label +// +// Notice that wild cards will allow any instruction +// besides incf to be used in the above. +// +// Also, notice that this snippet is not valid if +// it follows another skip replace restart { - btfss %1 - goto %4 -%2: %3 -%4: %5 + _NOTBITSKIP_ %1 + _BITSKIP_ %2 + goto %3 + %4 +%3: %5 } by { - ;peep 1b - test/jump to test/skip - btfsc %1 -%2: %3 -%4: %5 -} + ; peep 1 - test/jump to test/skip + %1 + _INVERTBITSKIP_ %2 + %4 +%3: %5 +} replace restart { - btfsc %1 - goto %4 -%2: %3 + _NOTBITSKIP_ %1 + _BITSKIP_ %2 + goto %3 %4: %5 +%3: %6 } by { - ;peep 1c - test/jump to test/skip - btfss %1 -%2: %3 + ; peep 1b - test/jump to test/skip + %1 + _INVERTBITSKIP_ %2 %4: %5 -} +%3: %6 +} //bogus test for pcode @@ -141,7 +156,7 @@ replace restart { movwf %1 movf %1,w } by { - ; peep 2 - Removed redundant move + ; peep 2 - Removed redundant move movwf %1 } if NZ @@ -149,10 +164,10 @@ replace restart { replace restart { decf %1,f movf %1,w - btfss status,z + btfss STATUS,z goto %2 } by { - ; peep 3 - decf/mov/skpz to decfsz + ; peep 3 - decf/mov/skpz to decfsz decfsz %1,f goto %2 } @@ -162,7 +177,7 @@ replace restart { movf %1,w movf %1,w } by { - ; peep 8 - Removed redundant move + ; peep 4 - Removed redundant move movf %1,w } @@ -172,7 +187,7 @@ replace restart { movwf %2 movlw %1 } by { - ; peep 10 - Removed redundant move + ; peep 5 - Removed redundant move movlw %1 movwf %2 } @@ -181,6 +196,136 @@ replace restart { movwf %1 movwf %1 } by { - ; peep 11 - Removed redundant move + ; peep 6 - Removed redundant move + movwf %1 +} + +replace restart { + movlw 0 + iorwf %1,w +} by { + ; peep 7 - Removed redundant move + movf %1,w +} + +replace restart { + movf %1,w + movwf %2 + decf %2,f +} by { + ; peep 8 - Removed redundant move + decf %1,w + movwf %2 +} + +replace restart { + movwf %1 + movf %2,w + xorwf %1,w +} by { + ; peep 9a - Removed redundant move + movwf %1 + xorwf %2,w +} + +replace restart { + movwf %1 + movf %2,w + iorwf %1,w +} by { + ; peep 9b - Removed redundant move + movwf %1 + iorwf %2,w +} + +replace restart { + movf %1,w + movwf %2 + movf %2,w +} by { + ; peep 9c - Removed redundant move + movf %1,w + movwf %2 +} + +replace restart { + movwf %1 + movf %1,w + movwf %2 +} by { + ; peep 9d - Removed redundant move movwf %1 + movwf %2 +} if NZ + +// From: Frieder Ferlemann + +replace restart { + iorlw 0 +} by { + ; peep 10a - Removed unnecessary iorlw +} if NZ + +// From: Frieder Ferlemann + +replace restart { + xorlw 0 +} by { + ; peep 10b - Removed unnecessary xorlw +} if NZ + +// From: Frieder Ferlemann + +replace restart { + movf %1,w + movwf %1 +} by { + ; peep 11 - Removed redundant move + movf %1,w +} + +replace restart { + comf %1,w + movwf %1 +} by { + ; peep 12 - Removed redundant move + comf %1,f +} + +replace restart { + clrf %1 + rlf %1,f + movlw 0x01 + xorwf %1,f + movf %1,w + btfss STATUS,2 + goto %2 + +} by { + ; peep 13 - Optimized carry sequence + clrf %1 + incf %1,F + btfss status,C + goto %2 + clrf %1 + +} + +replace restart { + clrf %1 + rlf %1,f + movlw 0x01 + xorwf %1,f + movf %1,w + btfsc STATUS,2 + goto %2 + +} by { + ; peep 13a - Optimized carry sequence + clrf %1 + incf %1,F + btfsc status,C + goto %2 + clrf %1 + }