From: frief Date: Sun, 20 Feb 2005 22:22:39 +0000 (+0000) Subject: Hubert Sack X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=cdeffe45ded73e87ace53897326c9f7e17bf9835;p=fw%2Fsdcc Hubert Sack * src/mcs51/peeph.def: added peepholes 3.h-k and 132.a-f from patch #1121755 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3683 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index 33584dd6..6062189a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-02-20 Hubert Sack + committed by Frieder Ferlemann + + * src/mcs51/peeph.def: added peepholes 3.h-k and 132.a-f from + patch #1121755 + 2004-02-20 Frieder Ferlemann * src/SDCCpeeph.def: new keyword "labelRefCountChange" which allows peepholes diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 4b332b17..0cd59b83 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -117,6 +117,70 @@ replace { ; Peephole 3.g removed redundant clr } +replace { + clr a + mov %1,a + mov %2,a + mov %3,#0x00 +} by { + clr a + mov %1,a + mov %2,a + ; Peephole 3.h changed mov %3,#0x00 to %3,a + mov %3,a +} + +replace { + clr a + mov %1,a + mov %2,a + mov %3,a + mov %4,#0x00 +} by { + clr a + mov %1,a + mov %2,a + mov %3,a + ; Peephole 3.i changed mov %4,#0x00 to %4,a + mov %4,a +} + +replace { + clr a + mov %1,a + mov %2,a + mov %3,a + mov %4,a + mov %5,#0x00 +} by { + clr a + mov %1,a + mov %2,a + mov %3,a + mov %4,a + ; Peephole 3.j changed mov %5,#0x00 to %5,a + mov %5,a +} + +replace { + clr a + mov %1,a + mov %2,a + mov %3,a + mov %4,a + mov %5,a + mov %6,#0x00 +} by { + clr a + mov %1,a + mov %2,a + mov %3,a + mov %4,a + mov %5,a + ; Peephole 3.k changed mov %6,#0x00 to %6,a + mov %6,a +} + replace { mov %1,a mov dptr,#%2 @@ -566,6 +630,80 @@ replace { mov %2,%1 } +// ideally the optimizations of rules 132.x should be done in genCmpXX +replace { + clr c + mov a,#%1 + subb a,%2 + mov %3,c +} by { + ; Peephole 132.a optimized genCmpGt by inverse logic (acc differs) + mov a,%2 + add a,#0xff - %1 + mov %3,c +} + +replace { + clr c + mov a,#%1 + subb a,%2 + jnc %5 +} by { + ; Peephole 132.b optimized genCmpGt by inverse logic (acc differs) + mov a,%2 + add a,#0xff - %1 + jnc %5 +} + +replace { + clr c + mov a,#%1 + subb a,%2 + jc %5 +} by { + ; Peephole 132.c optimized genCmpGt by inverse logic (acc differs) + mov a,%2 + add a,#0xff - %1 + jc %5 +} + +replace { + clr c + mov a,%1 + subb a,#%2 + mov %3,c +} by { + ; Peephole 132.d optimized genCmpGt by inverse logic + mov a,#0x100 - %2 + add a,%1 + mov %3,c +} if operandsNotRelated('0x00' %2) + +replace { + clr c + mov a,%1 + subb a,#%2 + jnc %5 +} by { + ; Peephole 132.e optimized genCmpLt by inverse logic (carry differs) + mov a,#0x100 - %2 + add a,%1 + jc %5 +} if operandsNotRelated('0x00' %2) + +replace { + clr c + mov a,%1 + subb a,#%2 + jc %5 +} by { + ; Peephole 132.f optimized genCmpLt by inverse logic (carry differs) + mov a,#0x100 - %2 + add a,%1 + jnc %5 +} if operandsNotRelated('0x00' %2) + + replace { mov r%1,%2 mov ar%3,@r%1