X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fmcs51%2Fpeeph.def;h=2a35344d1605884f20673db23f4d6669de613ea2;hb=c3a4980b7528b98e1fd39e03a510579e09b2352c;hp=704380cac136d8b5afe50da7b61e3a130d457531;hpb=f25c64745d5b56d568a58eecc3d539e75cdb8efc;p=fw%2Fsdcc diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 704380ca..2a35344d 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -1036,6 +1036,16 @@ replace { mov dptr,#0x0000 } +// saving 3 bytes, 2 cycles +// provided by Bernhard Held +replace { + mov dpl,#%1 + mov dph,#(%1 >> 8) +} by { + ; Peephole 182a use 16 bit load of DPTR + mov dptr,#%1 +} + // saving 3 byte, 2 cycles, return(float_constant) profits here replace { mov dpl,#%1 @@ -1764,11 +1774,331 @@ replace { } replace { - mov dps, #0x00 - mov dp%1,a - mov dps, #0x01 + mov %1,dpl + mov %2,dph + mov dpl,%1 + mov dph,%2 } by { - ; Peephole 222 removed DPS abuse. - mov dp%1,a - mov dps, #0x01 + ; Peephole 223 removed redundant dph/dpl moves + mov %1,dpl + mov %2,dph +} + +replace { + mov %1,dpl + mov (%1 + 1),dph + mov dpl,%1 + mov dph,(%1 + 1) +} by { + ; Peephole 224 removed redundant dph/dpl moves + mov %1,dpl + mov (%1 + 1),dph +} + +replace { + mov a,%1 + movx @dptr,a + mov dpl,%2 + mov dph,%3 + mov b,%4 + mov a,%1 +} by { + ; Peephole 225 removed redundant move to acc + mov a,%1 + movx @dptr,a + mov dpl,%2 + mov dph,%3 + mov b,%4 +} + +replace { + clr a + movx @dptr,a + inc dptr + movx @dptr,a + inc dptr + clr a +} by { + ; Peephole 226 removed unnecessary clr + clr a + movx @dptr,a + inc dptr + movx @dptr,a + inc dptr +} + +replace { + mov dptr,#%1 + clr a + inc dptr + inc dptr + inc dptr + movx @dptr,a + lcall __decdptr + movx @dptr,a + lcall __decdptr + movx @dptr,a + lcall __decdptr + movx @dptr,a +} by { + ; Peephole 227 replaced inefficient 32 bit clear + mov dptr,#%1 + clr a + movx @dptr,a + inc dptr + movx @dptr,a + inc dptr + movx @dptr,a + inc dptr + movx @dptr,a + mov dptr,#%1 +} + +replace { + mov dptr,#%1 + clr a + inc dptr + inc dptr + inc dptr + movx @dptr,a + lcall __decdptr + movx @dptr,a + lcall __decdptr + movx @dptr,a + lcall __decdptr + mov a,#%2 + movx @dptr,a +} by { + ; Peephole 228 replaced inefficient 32 constant + mov dptr,#%1 + mov a, #%2 + movx @dptr,a + inc dptr + clr a + movx @dptr,a + inc dptr + movx @dptr,a + inc dptr + movx @dptr,a + mov dptr,#%1 +} + +replace { + mov dptr,#%1 + clr a + inc dptr + movx @dptr,a + lcall __decdptr + movx @dptr,a +} by { + ; Peephole 229 replaced inefficient 16 bit clear + mov dptr,#%1 + clr a + movx @dptr,a + inc dptr + movx @dptr,a + mov dptr,#%1 +} + +replace { + mov dptr,#%1 + clr a + inc dptr + movx @dptr,a + lcall __decdptr + mov a,#%2 + movx @dptr,a +} by { + ; Peephole 230 replaced inefficient 16 constant + mov dptr,#%1 + mov a,#%2 + movx @dptr,a + inc dptr + clr a + movx @dptr,a + mov dptr,#%1 +} + +// this last peephole often removes the last mov from 227-230 +replace { + mov dptr,#%1 + mov dptr,#%2 +} by { + ; Peephole 231 removed redundant mov to dptr + mov dptr,#%2 +} + +replace { + movx a,@dptr +} by { + ; Peephole 232 using movc to read xdata (--xram-movc) + clr a + movc a,@a+dptr +} if xramMovcOption + +replace { + lcall _gptrget +} by { + ; Peephole 233 using _gptrgetc instead of _gptrget (--xram-movc) + lcall _gptrgetc +} if xramMovcOption + +replace { + mov r%1,a + mov dpl,r%1 +%2: + ret +} by { + ; Peephole 234 loading dpl directly from a(ccumulator) + mov dpl,a +%2: + ret +} + +replace { + mov r%1,a + mov dpl,r%2 + mov dph,r%1 +%3: + ret +} by { + ; Peephole 235 loading dph directly from a(ccumulator) + mov dpl,r%2 + mov dph,a +%3: + ret +} + +// 14 rules by Fiorenzo D. Ramaglia + +replace { + add a,ar%1 +} by { + ; Peephole 236a + add a,r%1 +} + +replace { + addc a,ar%1 +} by { + ; Peephole 236b + addc a,r%1 +} + +replace { + anl a,ar%1 +} by { + ; Peephole 236c + anl a,r%1 +} + +replace { + dec ar%1 +} by { + ; Peephole 236d + dec r%1 +} + +replace { + djnz ar%1,%2 +} by { + ; Peephole 236e + djnz r%1,%2 +} + +replace { + inc ar%1 +} by { + ; Peephole 236f + inc r%1 +} + +replace { + mov a,ar%1 +} by { + ; Peephole 236g + mov a,r%1 +} + +replace { + mov ar%1,#%2 +} by { + ; Peephole 236h + mov r%1,#%2 +} + +replace { + mov ar%1,a +} by { + ; Peephole 236i + mov r%1,a +} + +replace { + mov ar%1,ar%2 +} by { + ; Peephole 236j + mov r%1,ar%2 +} + +replace { + orl a,ar%1 +} by { + ; Peephole 236k + orl a,r%1 +} + +replace { + subb a,ar%1 +} by { + ; Peephole 236l + subb a,r%1 +} + +replace { + xch a,ar%1 +} by { + ; Peephole 236m + xch a,r%1 +} + +replace { + xrl a,ar%1 +} by { + ; Peephole 236n + xrl a,r%1 +} + +replace { + sjmp %1 +%2: + mov %3,%4 +%1: + ret +} by { + ; Peephole 237a removed sjmp to ret + ret +%2: + mov %3,%4 +%1: + ret +} + +replace { + sjmp %1 +%2: + mov %3,%4 + mov dpl,%5 + mov dph,%6 +%1: + ret +} by { + ; Peephole 237b removed sjmp to ret + ret +%2: + mov %3,%4 + mov dpl,%5 + mov dph,%6 +%1: + ret }