]> git.gag.com Git - fw/sdcc/commitdiff
fixed bug #771358
authorepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 20 Jul 2003 14:44:14 +0000 (14:44 +0000)
committerepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 20 Jul 2003 14:44:14 +0000 (14:44 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2763 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/mcs51/gen.c

index 1339f8efad9807a6fd54bd49d520968a74477c01..95c7a756e2bf9e5f3aaf11a9d5fd9448305f4447 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2003-07-20  Erik Petrich <epetrich@ivorytower.norman.ok.us>
+
+       * src/mcs51/gen.c: fixed bug #771358
+
 2003-07-20  Bernhard Held <bernhard@bernhardheld.de>
 
         * src/pic16/glue.c: minor cleanup by Vangelis
index 80c01820113ab5c82d85047a1ff74eff3bbe0a02..a5dd2d9e4c1851e52907de215cebfe64a14833d3 100644 (file)
@@ -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++;
            }
        }
     }