From b4e7e32b7bf6e7800ff1e6bc8a245e9c5c654ae6 Mon Sep 17 00:00:00 2001 From: MaartenBrock Date: Fri, 26 Oct 2007 18:07:27 +0000 Subject: [PATCH] * src/mcs51/peeph.def: moved rules 257.x to 253.x and re-enabled 253.b * support/regression/tests/bug1721024.c:new, added git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4941 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 5 +++ src/mcs51/peeph.def | 46 +++++++++++++-------------- support/regression/tests/bug1721024.c | 27 ++++++++++++++++ 3 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 support/regression/tests/bug1721024.c diff --git a/ChangeLog b/ChangeLog index 11b0b2bf..285bc22a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-10-26 Maarten Brock + + * src/mcs51/peeph.def: moved rules 257.x to 253.x and re-enabled 253.b + * support/regression/tests/bug1721024.c:new, added + 2007-10-25 Maarten Brock * support/regression/tests/bug1816470.c: new, added diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 51e25122..66909c94 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -3734,6 +3734,29 @@ replace { mov r%3,a } +// unsigned char i=8; do{ } while(--i != 0); +// this applies if i is kept in a register +replace { + dec %1 + cjne %1,#0x00,%2 +} by { + ; Peephole 253.a optimized decrement with compare + djnz %1,%2 +} if notVolatile(%1) + +// unsigned char i=8; do{ } while(--i != 0); +// this applies if i is kept in data memory +// must come before 256, see bug 1721024 +replace { + dec %1 + mov a,%1 + jnz %2 +} by { + ; Peephole 253.b optimized decrement with compare + djnz %1,%2 +} if notVolatile(%1), operandsNotRelated(%1 '@r0' '@r1') + + // applies to f.e. funptrs.c // saves one byte if %1 is a register or @register replace { @@ -3852,29 +3875,6 @@ replace { } if labelRefCount(%2 0),operandsNotRelated('a' %4 %6 %8) -// unsigned char i=8; do{ } while(--i != 0); -// this applies if i is kept in a register -replace { - dec %1 - cjne %1,#0x00,%2 -} by { - ; Peephole 257.a optimized decrement with compare - djnz %1,%2 -} if notVolatile(%1) - -//// unsigned char i=8; do{ } while(--i != 0); -//// this applies if i is kept in data memory -// Disabled because together with 256.c it causes bug #1721024 -//replace { -// dec %1 -// mov a,%1 -// jnz %2 -//} by { -// ; Peephole 257.b optimized decrement with compare -// djnz %1,%2 -//} if notVolatile(%1), operandsNotRelated(%1 '@r0' '@r1') - - // in_byte<<=1; if(in_bit) in_byte|=1; // helps f.e. reading data on a 3-wire (SPI) bus replace { diff --git a/support/regression/tests/bug1721024.c b/support/regression/tests/bug1721024.c new file mode 100644 index 00000000..1035aa77 --- /dev/null +++ b/support/regression/tests/bug1721024.c @@ -0,0 +1,27 @@ +/* + bug 1721024 +*/ + +#include + +static unsigned char temp1; +static unsigned char temp2; + +void tst(unsigned long acc) +{ + UNUSED(acc); + temp1--; + if (temp1==0) + { + temp2=0; + } +} + +void +testBug(void) +{ + temp1 = 1; + temp2 = 2; + tst(0xFFFFFFFF); //make sure acc!=0 + ASSERT(temp2 == 0); +} -- 2.30.2