From: frief Date: Sun, 17 Aug 2003 10:14:24 +0000 (+0000) Subject: Added 24 peepholes 246.x - 248.x. The first rules relate to bitfields, the last speed... X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=c1dc5ed999d27118d6fe010b34bc4751eeec7d59;p=fw%2Fsdcc Added 24 peepholes 246.x - 248.x. The first rules relate to bitfields, the last speed up access to xdata mapped I/O devices. Some occurences of RESTART removed git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2832 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 2767ea86..592eafae 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -17,14 +17,14 @@ // // added by Jean Louis VERN for // his shift stuff -replace restart { +replace { xch a,%1 xch a,%1 } by { ; Peephole 2.a removed redundant xch xch } -replace restart { +replace { // saving 2 byte mov %1,#0x00 mov a,#0x00 @@ -34,7 +34,7 @@ replace restart { mov %1,a } -replace restart { +replace { // saving 1 byte mov %1,#0x00 clr a @@ -44,7 +44,7 @@ replace restart { mov %1,a } -replace restart { +replace { // saving 1 byte, loosing 1 cycle but maybe allowing peephole 3.b to start mov %1,#0x00 mov %2,#0x00 @@ -2498,7 +2498,7 @@ replace { mov r%1,a jz %3 } by { - ; Peephole 245.a optimized conditional jump (r%1 and acc not set!) + ; Peephole 245.a optimized conditional jump (r%1 and acc not set!) jc %3 } if labelRefCount %2 1 @@ -2516,6 +2516,508 @@ replace { mov r%1,a jnz %3 } by { - ; Peephole 245.b optimized conditional jump (r%1 and acc not set!) + ; Peephole 245.b optimized conditional jump (r%1 and acc not set!) jnc %3 } if labelRefCount %2 1 + + +// rules 246.x apply to f.e. bitfields.c +replace { + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + anl a,#%3 + movx @dptr,a +} by { + ; Peephole 246.a combined clr/clr + mov dptr,#%1 + movx a,@dptr + anl a,#%2&%3 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + orl a,#%3 + movx @dptr,a +} by { + ; Peephole 246.b combined set/set + mov dptr,#%1 + movx a,@dptr + orl a,#%2|%3 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + anl a,#%3 + movx @dptr,a +} by { + ; Peephole 246.c combined set/clr + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + anl a,#%3 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + orl a,#%3 + movx @dptr,a +} by { + ; Peephole 246.d combined clr/set + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + orl a,#%3 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + anl a,#%3 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + anl a,#%4 + movx @dptr,a +} by { + ; Peephole 246.e combined set/clr/clr + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + anl a,#%3&%4 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + anl a,#%3 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + orl a,#%4 + movx @dptr,a +} by { + ; Peephole 246.f combined set/clr/set + mov dptr,#%1 + movx a,@dptr + orl a,#%2 + anl a,#%3 + orl a,#%4 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + orl a,#%3 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + anl a,#%4 + movx @dptr,a +} by { + ; Peephole 246.g combined clr/set/clr + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + orl a,#%3 + anl a,#%4 + movx @dptr,a +} + +replace { + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + orl a,#%3 + movx @dptr,a + mov dptr,#%1 + movx a,@dptr + orl a,#%4 + movx @dptr,a +} by { + ; Peephole 246.h combined clr/set/set + mov dptr,#%1 + movx a,@dptr + anl a,#%2 + orl a,#%3|%4 + movx @dptr,a +} + + + + +// rules 247.x apply to f.e. bitfields.c +replace { + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + anl a,#%3 + mov @r%5,a +} by { + ; Peephole 247.a combined clr/clr + mov r%5,#%1 + mov a,@r%5 + anl a,#%2&%3 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + orl a,#%3 + mov @r%5,a +} by { + ; Peephole 247.b combined set/set + mov r%5,#%1 + mov a,@r%5 + orl a,#%2|%3 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + anl a,#%3 + mov @r%5,a +} by { + ; Peephole 247.c combined set/clr + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + anl a,#%3 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + orl a,#%3 + mov @r%5,a +} by { + ; Peephole 247.d combined clr/set + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + orl a,#%3 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + anl a,#%3 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + anl a,#%4 + mov @r%5,a +} by { + ; Peephole 247.e combined set/clr/clr + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + anl a,#%3&%4 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + anl a,#%3 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + orl a,#%4 + mov @r%5,a +} by { + ; Peephole 247.f combined set/clr/set + mov r%5,#%1 + mov a,@r%5 + orl a,#%2 + anl a,#%3 + orl a,#%4 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + orl a,#%3 + mov @r%5,a + mov r%5,#%1 + mov a,@r%5 + anl a,#%4 + mov @r%5,a +} by { + ; Peephole 247.g combined clr/set/clr + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + orl a,#%3 + anl a,#%4 + mov @r%5,a +} + +replace { + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + orl a,#%3 + mov @r%5,a + mov r%5,#%1 + mov a,@r%4 + orl a,#%4 + mov @r%5,a +} by { + ; Peephole 247.h combined clr/set/set + mov r%5,#%1 + mov a,@r%5 + anl a,#%2 + orl a,#%3|%4 + mov @r%5,a +} + + +// Peepholes 248.x have to be compatible with the keyword volatile. +// They optimize typical accesses to memory mapped I/O devices: +// volatile xdata char t; t|=0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + mov dptr,%1 + mov a,%3 + orl a,r%2 + movx @dptr,a +} by { + ; Peephole 248.a optimized or to xdata + mov dptr,%1 + movx a,@dptr + mov r%2,a + orl a,%3 + movx @dptr,a +} + +// volatile xdata char t; t&=0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + mov dptr,%1 + mov a,%3 + anl a,r%2 + movx @dptr,a +} by { + ; Peephole 248.b optimized and to xdata + mov dptr,%1 + movx a,@dptr + mov r%2,a + anl a,%3 + movx @dptr,a +} + +// volatile xdata char t; t^=0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + mov dptr,%1 + mov a,%3 + xrl a,r%2 + movx @dptr,a +} by { + ; Peephole 248.c optimized xor to xdata + mov dptr,%1 + movx a,@dptr + mov r%2,a + xrl a,%3 + movx @dptr,a +} + +// volatile xdata char t; t|=0x01; t&=~0x01; t|=0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + orl a,%3 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + anl a,%4 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + orl a,%5 + movx @dptr,a +} by { + ; Peephole 248.d optimized or/and/or to volatile xdata + mov dptr,%1 + movx a,@dptr + orl a,%3 + movx @dptr,a + movx a,@dptr + anl a,%4 + movx @dptr,a + movx a,@dptr + mov r%2,a + orl a,%5 + movx @dptr,a +} + +// volatile xdata char t; t&=~0x01; t|=0x01; t&=~0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + anl a,%3 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + orl a,%4 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + anl a,%5 + movx @dptr,a +} by { + ; Peephole 248.e optimized and/or/and to volatile xdata + mov dptr,%1 + movx a,@dptr + anl a,%3 + movx @dptr,a + movx a,@dptr + orl a,%4 + movx @dptr,a + movx a,@dptr + mov r%2,a + anl a,%5 + movx @dptr,a +} + +// volatile xdata char t; t|=0x01; t&=~0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + orl a,%3 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + anl a,%4 + movx @dptr,a +} by { + ; Peephole 248.f optimized or/and to volatile xdata + mov dptr,%1 + movx a,@dptr + orl a,%3 + movx @dptr,a + movx a,@dptr + mov r%2,a + anl a,%4 + movx @dptr,a +} + +// volatile xdata char t; t&=~0x01; t|=0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + anl a,%3 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + orl a,%4 + movx @dptr,a +} by { + ; Peephole 248.g optimized and/or to volatile xdata + mov dptr,%1 + movx a,@dptr + anl a,%3 + movx @dptr,a + movx a,@dptr + mov r%2,a + orl a,%4 + movx @dptr,a +} + +// volatile xdata char t; t^=0x01; t^=0x01; +replace { + mov dptr,%1 + movx a,@dptr + mov r%2,a + xrl a,%3 + movx @dptr,a + + mov dptr,%1 + movx a,@dptr + mov r%2,a + xrl a,%4 + movx @dptr,a +} by { + ; Peephole 248.h optimized xor/xor to volatile xdata + mov dptr,%1 + movx a,@dptr + xrl a,%3 + movx @dptr,a + movx a,@dptr + mov r%2,a + xrl a,%4 + movx @dptr,a +}