From 79399400404e689c51860ac110273354ae3da5c4 Mon Sep 17 00:00:00 2001 From: maartenbrock Date: Fri, 9 Sep 2005 12:04:58 +0000 Subject: [PATCH] * src/mcs51/peeph.def (241.x): fixed bug when comparing generic pointers git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3889 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 4 + src/mcs51/peeph.def | 211 +++++++++++++++++++++++++++----------------- 2 files changed, 133 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index 89deffd7..389d75db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-09-08 Maarten Brock + + * src/mcs51/peeph.def (241.x): fixed bug when comparing generic pointers + 2005-09-08 Maarten Brock * as/hc08/lkaomf51.c (OutputName): made name unsigned char, diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index d4eea55e..d93dd22d 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -2602,133 +2602,180 @@ replace restart { addc a,%1 } -// peepholes 241.a to 241.c and 241.d to 241.f need to be in order +// peepholes 241.a to 241.d and 241.e to 241.h need to be in order replace { - cjne r%1,#%2,%3 - cjne r%4,#%5,%3 - cjne r%6,#%7,%3 - cjne r%8,#%9,%3 + cjne r%2,#%3,%0 + cjne r%4,#%5,%0 + cjne r%6,#%7,%0 + cjne r%8,#%9,%0 mov a,#0x01 - sjmp %10 -%3: + sjmp %1 +%0: clr a -%10: +%1: } by { ; Peephole 241.a optimized compare clr a - cjne r%1,#%2,%3 - cjne r%4,#%5,%3 - cjne r%6,#%7,%3 - cjne r%8,#%9,%3 + cjne r%2,#%3,%0 + cjne r%4,#%5,%0 + cjne r%6,#%7,%0 + cjne r%8,#%9,%0 inc a -%3: -%10: -} labelRefCountChange(%10 -1) +%0: +%1: +} labelRefCountChange(%1 -1) -// applies to f.e. time.c +// applies to generic pointer compare replace { - cjne r%1,#%2,%3 - cjne r%4,#%5,%3 + cjne r%2,#%3,%0 + cjne r%4,#%5,%0 + cjne r%6,#%7,%0 mov a,#0x01 - sjmp %6 -%3: + sjmp %1 +%0: clr a -%6: +%1: } by { ; Peephole 241.b optimized compare clr a - cjne r%1,#%2,%3 - cjne r%4,#%5,%3 + cjne r%2,#%3,%0 + cjne r%4,#%5,%0 + cjne r%6,#%7,%0 inc a -%3: -%6: -} labelRefCountChange(%6 -1) +%0: +%1: +} labelRefCountChange(%1 -1) -// applies to f.e. malloc.c +// applies to f.e. time.c replace { - cjne r%1,#%2,%3 + cjne r%2,#%3,%0 + cjne r%4,#%5,%0 mov a,#0x01 - sjmp %4 -%3: + sjmp %1 +%0: clr a -%4: +%1: } by { ; Peephole 241.c optimized compare clr a - cjne r%1,#%2,%3 + cjne r%2,#%3,%0 + cjne r%4,#%5,%0 inc a -%3: -%4: -} labelRefCountChange(%4 -1) +%0: +%1: +} labelRefCountChange(%1 -1) + +// applies to f.e. malloc.c +replace { + cjne r%2,#%3,%0 + mov a,#0x01 + sjmp %1 +%0: + clr a +%1: +} by { + ; Peephole 241.d optimized compare + clr a + cjne r%2,#%3,%0 + inc a +%0: +%1: +} labelRefCountChange(%1 -1) // applies to f.e. j = (k!=0x1000); // with volatile idata long k; replace { - cjne @r%1,#%2,%3 - inc r%1 - cjne @r%1,#%4,%3 - inc r%1 - cjne @r%1,#%5,%3 - inc r%1 - cjne @r%1,#%6,%3 + cjne @r%0,#%3,%1 + inc r%0 + cjne @r%0,#%4,%1 + inc r%0 + cjne @r%0,#%5,%1 + inc r%0 + cjne @r%0,#%6,%1 mov a,#0x01 - sjmp %7 -%3: + sjmp %2 +%1: clr a -%7: +%2: } by { - ; Peephole 241.d optimized compare + ; Peephole 241.e optimized compare clr a - cjne @r%1,#%2,%3 - inc r%1 - cjne @r%1,#%4,%3 - inc r%1 - cjne @r%1,#%5,%3 - inc r%1 - cjne @r%1,#%6,%3 + cjne @r%0,#%3,%1 + inc r%0 + cjne @r%0,#%4,%1 + inc r%0 + cjne @r%0,#%5,%1 + inc r%0 + cjne @r%0,#%6,%1 inc a -%3: -%7: -} labelRefCountChange(%7 -1) +%1: +%2: +} labelRefCountChange(%2 -1) + +// applies to f.e. j = (p!=NULL); +// with volatile idata char *p; +replace { + cjne @r%0,#%3,%1 + inc r%0 + cjne @r%0,#%4,%1 + inc r%0 + cjne @r%0,#%5,%1 + mov a,#0x01 + sjmp %2 +%1: + clr a +%2: +} by { + ; Peephole 241.f optimized compare + clr a + cjne @r%0,#%3,%1 + inc r%0 + cjne @r%0,#%4,%1 + inc r%0 + cjne @r%0,#%5,%1 + inc a +%1: +%2: +} labelRefCountChange(%2 -1) // applies to f.e. j = (k!=0x1000); // with volatile idata int k; replace { - cjne @r%1,#%2,%3 - inc r%1 - cjne @r%1,#%4,%3 + cjne @r%0,#%3,%1 + inc r%0 + cjne @r%0,#%4,%1 mov a,#0x01 - sjmp %7 -%3: + sjmp %2 +%1: clr a -%7: +%2: } by { - ; Peephole 241.e optimized compare + ; Peephole 241.g optimized compare clr a - cjne @r%1,#%2,%3 - inc r%1 - cjne @r%1,#%4,%3 + cjne @r%0,#%3,%1 + inc r%0 + cjne @r%0,#%4,%1 inc a -%3: -%7: -} labelRefCountChange(%7 -1) +%1: +%2: +} labelRefCountChange(%2 -1) // applies to f.e. vprintf.asm (--stack-auto) replace { - cjne @r%1,#%2,%3 + cjne @r%0,#%3,%1 mov a,#0x01 - sjmp %7 -%3: + sjmp %2 +%1: clr a -%7: +%2: } by { - ; Peephole 241.f optimized compare + ; Peephole 241.h optimized compare clr a - cjne @r%1,#%2,%3 + cjne @r%0,#%3,%1 inc a -%3: -%7: -} labelRefCountChange(%7 -1) +%1: +%2: +} labelRefCountChange(%2 -1) // applies to f.e. scott-bool1.c replace { @@ -3876,16 +3923,16 @@ replace { mov %1,a } if notVolatile %1 -// Peepholes 259.x rely on the correct labelRefCount. Otherwise they are +// Peepholes 259.x rely on the correct labelRefCount. Otherwise they are // not compatible with peepholes 250.x -// Peepholes 250.x add jumps to a previously unused label. If the +// Peepholes 250.x add jumps to a previously unused label. If the // labelRefCount is not increased, peepholes 259.x are (mistakenly) applied. // (Mail on sdcc-devel 2004-10-25) // // applies to f.e. vprintf.c replace { sjmp %1 -%2: +%2: ret } by { sjmp %1 @@ -3896,7 +3943,7 @@ replace { // applies to f.e. gets.c replace { ljmp %1 -%2: +%2: ret } by { ljmp %1 -- 2.47.2