* support/regression/tests/bug1348008.c: added
authormaartenbrock <maartenbrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 6 Nov 2005 19:56:19 +0000 (19:56 +0000)
committermaartenbrock <maartenbrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 6 Nov 2005 19:56:19 +0000 (19:56 +0000)
* src/mcs51/gen.c (saveRBank, unsaveRBank): fixed bug 1348008
* support/regression/tests/bug1337835.c: updated comment

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

ChangeLog
src/mcs51/gen.c
support/regression/tests/bug1337835.c
support/regression/tests/bug1348008.c [new file with mode: 0644]

index b3a8ffe48ba444f5aa14c7e70da084d9dd85aac0..56fa798fbc168798376149575e498898b1e8ff88 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-06 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * support/regression/tests/bug1348008.c: added
+       * src/mcs51/gen.c (saveRBank, unsaveRBank): fixed bug 1348008
+       * support/regression/tests/bug1337835.c: updated comment
+
 2005-11-06 Borut Razem <borut.razem AT siol.net>
 
        * sim/ucsim/error.cc, sim/ucsim/errorcl.h,
index 14782781d018aace7ab1684ab7ecd6737f6b6364..22904127c5f20bb55cacf6b8ad69bd3e2a0a5009 100644 (file)
@@ -2412,7 +2412,7 @@ static void
 saveRBank (int bank, iCode * ic, bool pushPsw)
 {
   int i;
-  int count = mcs51_nRegs + (pushPsw ? 1 : 0);
+  int count = 8 + ((mcs51_nRegs > 8) ? 1 : 0) + (pushPsw ? 1 : 0);
   asmop *aop = NULL;
   regs *r = NULL;
 
@@ -2435,7 +2435,7 @@ saveRBank (int bank, iCode * ic, bool pushPsw)
       emitcode ("mov", "%s,a", spname);
     }
 
-  for (i = 0; i < mcs51_nRegs; i++)
+  for (i = 0; i < 8; i++)
     {
       if (options.useXstack)
         {
@@ -2450,6 +2450,22 @@ saveRBank (int bank, iCode * ic, bool pushPsw)
                   regs8051[i].base, 8 * bank + regs8051[i].offset);
     }
 
+  if (mcs51_nRegs > 8)
+    {
+      if (options.useXstack)
+        {
+          emitcode ("mov", "a,bits");
+          emitcode ("movx", "@%s,a", r->name);
+          if (--count)
+            emitcode ("inc", "%s", r->name);
+        }
+      else
+        {
+          emitcode ("push", "bits");
+        }
+      BitBankUsed = 1;
+    }
+
   if (pushPsw)
     {
       if (options.useXstack)
@@ -2516,7 +2532,21 @@ unsaveRBank (int bank, iCode * ic, bool popPsw)
         }
     }
 
-  for (i = (mcs51_nRegs - 1); i >= 0; i--)
+  if (mcs51_nRegs > 8)
+    {
+      if (options.useXstack)
+        {
+          emitcode ("dec", "%s", r->name);
+          emitcode ("movx", "a,@%s", r->name);
+          emitcode ("mov", "bits,a");
+        }
+      else
+        {
+          emitcode ("pop", "bits");
+        }
+    }
+
+  for (i = 7; i >= 0; i--)
     {
       if (options.useXstack)
         {
@@ -8714,7 +8744,7 @@ static void
 shiftRLong (operand * left, int offl,
             operand * result, int sign)
 {
-  int isSameRegs=sameRegs(AOP(left),AOP(result));
+  int isSameRegs = sameRegs (AOP (left), AOP (result));
 
   if (isSameRegs && offl>1) {
     // we are in big trouble, but this shouldn't happen
index e88ea8a4dd1fc2027bfeb9e30b2d54b7d37b0215..f231e46057e976ccd75d253fc7dbbe1449547de6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-   bug1057979.c
+   bug1337835.c
 */
 
 #include <testfwk.h>
diff --git a/support/regression/tests/bug1348008.c b/support/regression/tests/bug1348008.c
new file mode 100644 (file)
index 0000000..250e341
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+   bug1348008.c
+*/
+
+#include <testfwk.h>
+
+#ifndef PORT_HOST
+
+void foo(void) { }
+
+void IRQ_ISR(void) interrupt
+{
+  foo();
+}
+
+#endif