From 2d438c9b47b2a269ac7cf71c8e508ae78ef9057d Mon Sep 17 00:00:00 2001 From: epetrich Date: Sun, 20 Jul 2003 14:44:14 +0000 Subject: [PATCH] fixed bug #771358 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2763 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 4 ++++ src/mcs51/gen.c | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1339f8ef..95c7a756 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2003-07-20 Erik Petrich + + * src/mcs51/gen.c: fixed bug #771358 + 2003-07-20 Bernhard Held * src/pic16/glue.c: minor cleanup by Vangelis diff --git a/src/mcs51/gen.c b/src/mcs51/gen.c index 80c01820..a5dd2d9e 100644 --- a/src/mcs51/gen.c +++ b/src/mcs51/gen.c @@ -4007,6 +4007,7 @@ genCmp (operand * left, operand * right, { int size, offset = 0; unsigned long lit = 0L; + bool rightInB; D(emitcode ("; genCmp","")); @@ -4064,6 +4065,9 @@ genCmp (operand * left, operand * right, CLRC; while (size--) { + rightInB = aopGetUsesAcc(AOP (right), offset); + if (rightInB) + emitcode ("mov", "b,%s", aopGet (AOP (right), offset, FALSE, FALSE)); MOVA (aopGet (AOP (left), offset, FALSE, FALSE)); if (sign && size == 0) { @@ -4077,13 +4081,20 @@ genCmp (operand * left, operand * right, } else { - emitcode ("mov", "b,%s", aopGet (AOP (right), offset++, FALSE, FALSE)); + if (!rightInB) + emitcode ("mov", "b,%s", aopGet (AOP (right), offset, FALSE, FALSE)); emitcode ("xrl", "b,#0x80"); emitcode ("subb", "a,b"); } } else - emitcode ("subb", "a,%s", aopGet (AOP (right), offset++, FALSE, FALSE)); + { + if (rightInB) + emitcode ("subb", "a,b"); + else + emitcode ("subb", "a,%s", aopGet (AOP (right), offset, FALSE, FALSE)); + } + offset++; } } } -- 2.30.2