]> git.gag.com Git - fw/sdcc/commitdiff
* src/mcs51/gen.c (genMinus): fix for undetected bug introduced 3 months
authormaartenbrock <maartenbrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 22 Sep 2005 16:43:33 +0000 (16:43 +0000)
committermaartenbrock <maartenbrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 22 Sep 2005 16:43:33 +0000 (16:43 +0000)
  ago by me
* support/regression/tests/addsub.c: added test for the bug

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3896 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/mcs51/gen.c
support/regression/tests/addsub.c

index 2885d07d39937a33ae92314b4cec12ce24a7fc16..9dbe8a17d37a1910bccaaecbf30e55f9b58a089b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-09-22 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/mcs51/gen.c (genMinus): fix for undetected bug introduced 3 months
+         ago by me
+       * support/regression/tests/addsub.c: added test for the bug
+
 2005-09-21 Raphael Neider <rneider AT web.de>
 
        * device/include/pic16/pic18f1220.h,
index 7ae3fa4edbb9078cf84aa7c4cdb2ef5e83cadb0d..317a4b168daa055d2ba0a4f6412d5e1fe275ebac 100644 (file)
@@ -4314,7 +4314,7 @@ release:
 }
 
 /*-----------------------------------------------------------------*/
-/* genMinusDec :- does subtraction with deccrement if possible     */
+/* genMinusDec :- does subtraction with decrement if possible      */
 /*-----------------------------------------------------------------*/
 static bool
 genMinusDec (iCode * ic)
@@ -4527,22 +4527,35 @@ genMinus (iCode * ic)
 
       while (size--)
         {
-          if (useCarry || ((lit >> (offset * 8)) & 0x0FFL)) {
+          if (useCarry || ((lit >> (offset * 8)) & 0x0FFL))
+            {
             MOVA (aopGet (IC_LEFT (ic), offset, FALSE, FALSE));
-            if (!offset && !size && lit== (unsigned long) -1) {
-              emitcode ("dec", "a");
-            } else if (!useCarry) {
-              /* first add without previous c */
-              emitcode ("add", "a,#0x%02x",
-                        (unsigned int) ((lit >> (offset * 8)) & 0x0FFL));
-              useCarry = TRUE;
-            } else {
-              emitcode ("addc", "a,#0x%02x",
-                        (unsigned int) ((lit >> (offset * 8)) & 0x0FFL));
+              if (!offset && !size && lit== (unsigned long) -1)
+                {
+                  emitcode ("dec", "a");
+                }
+              else if (!useCarry)
+                {
+                  /* first add without previous c */
+                  emitcode ("add", "a,#0x%02x",
+                            (unsigned int) ((lit >> (offset * 8)) & 0x0FFL));
+                  useCarry = TRUE;
+                }
+              else
+                {
+                  emitcode ("addc", "a,#0x%02x",
+                            (unsigned int) ((lit >> (offset * 8)) & 0x0FFL));
+                }
+              aopPut (IC_RESULT (ic), "a", offset++, isOperandVolatile (IC_RESULT (ic), FALSE));
             }
-            aopPut (IC_RESULT (ic), "a", offset++, isOperandVolatile (IC_RESULT (ic), FALSE));
-            } else {
+          else
+            {
               /* no need to add zeroes */
+              if (!sameRegs (AOP (IC_RESULT (ic)), AOP (IC_LEFT (ic))))
+                {
+                  aopPut (IC_RESULT (ic), aopGet (IC_LEFT (ic), offset, FALSE, FALSE),
+                          offset, isOperandVolatile (IC_RESULT (ic), FALSE));
+                }
               offset++;
             }
         }
index 641f70987ab9c209934f277fa11d85a5d143bd1a..3fb3dc1afcf682451a4220a88e0d70ccafa70f54 100644 (file)
@@ -67,4 +67,7 @@ testSub(void)
   
   result = left-right;
   ASSERT(result == (-39+20));
+
+  result = left-(signed)0x1200;
+  ASSERT(result == ({type})(-39-(signed)0x1200));
 }