From 622a9887cf6cea26006b5d4047dad450c01faf5a Mon Sep 17 00:00:00 2001 From: epetrich Date: Fri, 22 Jul 2005 22:12:41 +0000 Subject: [PATCH] * src/hc08/gen.c (genMinus): fixed bug #1241835, (genModOneByte): removed needless psha/pula git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3809 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 5 +++++ src/hc08/gen.c | 22 +++++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ff56581..8f6fbbe9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-07-22 Erik Petrich + + * src/hc08/gen.c (genMinus): fixed bug #1241835, + (genModOneByte): removed needless psha/pula + 2005-07-22 Raphael Neider * src/SDCCmain.c (linkEdit): initialized linkerScriptFileName, diff --git a/src/hc08/gen.c b/src/hc08/gen.c index f0e9853e..aab19dea 100644 --- a/src/hc08/gen.c +++ b/src/hc08/gen.c @@ -3440,13 +3440,22 @@ genMinus (iCode * ic) leftOp = AOP(IC_LEFT(ic)); rightOp = AOP(IC_RIGHT(ic)); - sub = "sub"; offset = 0; + + if (IS_AOP_A (rightOp)) + { + loadRegFromAop ( hc08_reg_a, rightOp, offset); + accopWithAop (sub, leftOp, offset); + accopWithMisc ("nega", ""); + storeRegToAop (hc08_reg_a, AOP (IC_RESULT (ic)), offset++); + goto release; + } + while (size--) { loadRegFromAop ( hc08_reg_a, leftOp, offset); - accopWithAop(sub, rightOp, offset); + accopWithAop (sub, rightOp, offset); storeRegToAop (hc08_reg_a, AOP (IC_RESULT (ic)), offset++); sub = "sbc"; } @@ -3913,11 +3922,10 @@ genModOneByte (operand * left, loadRegFromAop (hc08_reg_h, AOP (left), 1); loadRegFromAop (hc08_reg_a, AOP (left), 0); emitcode ("div", ""); - hc08_dirtyReg (hc08_reg_a, FALSE); - hc08_dirtyReg (hc08_reg_h, FALSE); - storeRegToFullAop (hc08_reg_h, AOP (result), FALSE); hc08_freeReg (hc08_reg_a); hc08_freeReg (hc08_reg_x); + hc08_dirtyReg (hc08_reg_h, FALSE); + storeRegToFullAop (hc08_reg_h, AOP (result), FALSE); hc08_freeReg (hc08_reg_h); return; } @@ -3987,8 +3995,8 @@ genModOneByte (operand * left, loadRegFromConst (hc08_reg_h, zero); emitcode ("div", ""); - hc08_dirtyReg (hc08_reg_x, FALSE); - hc08_dirtyReg (hc08_reg_a, FALSE); + hc08_freeReg (hc08_reg_a); + hc08_freeReg (hc08_reg_x); hc08_dirtyReg (hc08_reg_h, FALSE); if (runtimeSign || compiletimeSign) -- 2.30.2