From f9df521627c0f3694c7a9aa21d9ad7026b3d1922 Mon Sep 17 00:00:00 2001 From: MaartenBrock Date: Wed, 27 Sep 2006 12:01:50 +0000 Subject: [PATCH] * src/mcs51/peeph.def: renamed rule 257 to 257.a, added 257.b * src/SDCCicode.c(geniCodeMultiply): small optimization git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4389 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 2 ++ src/SDCCicode.c | 14 +++++++++++--- src/mcs51/peeph.def | 17 ++++++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index be3c0449..a3c0ca41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * device/include/mcs51/at89c51snd1c.h: fixed MSK_SREQ definition thanks Weston T. Schmidt for patch 1555221 + * src/mcs51/peeph.def: renamed rule 257 to 257.a, added 257.b + * src/SDCCicode.c(geniCodeMultiply): small optimization 2006-09-26 Maarten Brock diff --git a/src/SDCCicode.c b/src/SDCCicode.c index 4eeeab56..1d4da0df 100644 --- a/src/SDCCicode.c +++ b/src/SDCCicode.c @@ -2130,11 +2130,19 @@ geniCodeMultiply (operand * left, operand * right, RESULT_TYPE resultType) } else { - ic = newiCode ('*', left, right); /* normal multiplication */ /* if the size left or right > 1 then support routine */ if (getSize (ltype) > 1 || getSize (rtype) > 1) - ic->supportRtn = 1; - + { + if (IS_LITERAL (retype)) + ic = newiCode ('*', right, left); /* multiplication by support routine with one literal */ + else + ic = newiCode ('*', left, right); /* multiplication by support routine */ + ic->supportRtn = 1; + } + else + { + ic = newiCode ('*', left, right); /* normal multiplication */ + } } IC_RESULT (ic) = newiTempOperand (resType, 1); diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index 96db036d..8c8f01c8 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -3830,14 +3830,25 @@ replace { // unsigned char i=8; do{ } while(--i != 0); -// this currently only applies if i is kept in a register +// this applies if i is kept in a register replace { dec %1 cjne %1,#0x00,%2 } by { - ; Peephole 257 optimized decrement with compare + ; Peephole 257.a optimized decrement with compare djnz %1,%2 -} if notVolatile %1 +} if notVolatile(%1) + +// unsigned char i=8; do{ } while(--i != 0); +// this applies if i is kept in data memory +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; -- 2.47.2