From 4938253fd552efc247cdd97d9f0c2457e0629646 Mon Sep 17 00:00:00 2001 From: maartenbrock Date: Wed, 29 Mar 2006 07:21:04 +0000 Subject: [PATCH] * src/SDCCpeeph.c (operandsLiteral): new, added, (callFuncByName): inserted operandsLiteral * src/mcs51/peeph.def: reenabled 132.e, added extra check to 132.x git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4076 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 8 +++++++- src/SDCCpeeph.c | 36 ++++++++++++++++++++++++++++++++++++ src/mcs51/peeph.def | 33 ++++++++++++++++----------------- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index d8ffe228..794f4876 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,15 @@ +2006-03-29 Maarten Brock + + * src/SDCCpeeph.c (operandsLiteral): new, added, + (callFuncByName): inserted operandsLiteral + * src/mcs51/peeph.def: reenabled 132.e, added extra check to 132.x + 2006-03-28 Frieder Ferlemann * doc/sdccman.lyx: added paragraph "Use of SDCC in Education" * src/mcs51/peeph.def: disabled rule 132.e fixing bug #1453093 -2006-03-23 Maarten Brock +2006-03-24 Maarten Brock * src/z80/gen.c (genFunction, genEndFunction): fixed bug 1160666, implemented patch 1120823 Thanks to Willy De la Court (normal diff --git a/src/SDCCpeeph.c b/src/SDCCpeeph.c index b227cf0a..478178c6 100644 --- a/src/SDCCpeeph.c +++ b/src/SDCCpeeph.c @@ -963,6 +963,39 @@ FBYNAME (operandsNotRelated) } +/*-------------------------------------------------------------------*/ +/* operandsLiteral - returns true of the condition's operands are */ +/* literals. */ +/*-------------------------------------------------------------------*/ +FBYNAME (operandsLiteral) +{ + set *operands; + const char *op; + + operands = setFromConditionArgs (cmdLine, vars); + + if (!operands) + { + fprintf (stderr, + "*** internal error: operandsLiteral peephole restriction" + " malformed: %s\n", cmdLine); + return FALSE; + } + + for (op = setFirstItem (operands); op; op = setNextItem (operands)) + { + if (!isdigit(*op)) + { + deleteSet (&operands); + return FALSE; + } + } + + deleteSet (&operands); + return TRUE; +} + + /*-----------------------------------------------------------------*/ /* callFuncByName - calls a function as defined in the table */ /*-----------------------------------------------------------------*/ @@ -1046,6 +1079,9 @@ callFuncByName (char *fname, { "operandsNotRelated", operandsNotRelated }, + { + "operandsLiteral", operandsLiteral + }, { "labelRefCountChange", labelRefCountChange } diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index aff964cc..e0aed8b3 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -684,7 +684,7 @@ replace { mov a,%2 add a,#0xff - %1 mov %3,c -} +} if operandsLiteral(%1) replace { clr c @@ -696,7 +696,7 @@ replace { mov a,%2 add a,#0xff - %1 jnc %5 -} +} if operandsLiteral(%1) replace { clr c @@ -708,7 +708,7 @@ replace { mov a,%2 add a,#0xff - %1 jc %5 -} +} if operandsLiteral(%1) replace { clr c @@ -720,20 +720,19 @@ replace { mov a,#0x100 - %2 add a,%1 mov %3,c -} if operandsNotRelated('0x00' %2) +} if operandsNotRelated('0x00' %2), operandsLiteral(%2) -//This peephole caused bug #1453093 -//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 + 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), operandsLiteral(%2) replace { clr c @@ -745,7 +744,7 @@ replace { mov a,#0x100 - %2 add a,%1 jnc %5 -} if operandsNotRelated('0x00' %2) +} if operandsNotRelated('0x00' %2), operandsLiteral(%2) replace { -- 2.30.2