From 9d9fef436043b7e6f2d4c04a31a21e5ef3002a1f Mon Sep 17 00:00:00 2001 From: maartenbrock Date: Sun, 6 Nov 2005 19:56:19 +0000 Subject: [PATCH] * support/regression/tests/bug1348008.c: added * 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 | 6 +++++ src/mcs51/gen.c | 38 ++++++++++++++++++++++++--- support/regression/tests/bug1337835.c | 2 +- support/regression/tests/bug1348008.c | 16 +++++++++++ 4 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 support/regression/tests/bug1348008.c diff --git a/ChangeLog b/ChangeLog index b3a8ffe4..56fa798f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-11-06 Maarten Brock + + * 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 * sim/ucsim/error.cc, sim/ucsim/errorcl.h, diff --git a/src/mcs51/gen.c b/src/mcs51/gen.c index 14782781..22904127 100644 --- a/src/mcs51/gen.c +++ b/src/mcs51/gen.c @@ -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 diff --git a/support/regression/tests/bug1337835.c b/support/regression/tests/bug1337835.c index e88ea8a4..f231e460 100644 --- a/support/regression/tests/bug1337835.c +++ b/support/regression/tests/bug1337835.c @@ -1,5 +1,5 @@ /* - bug1057979.c + bug1337835.c */ #include diff --git a/support/regression/tests/bug1348008.c b/support/regression/tests/bug1348008.c new file mode 100644 index 00000000..250e3417 --- /dev/null +++ b/support/regression/tests/bug1348008.c @@ -0,0 +1,16 @@ +/* + bug1348008.c +*/ + +#include + +#ifndef PORT_HOST + +void foo(void) { } + +void IRQ_ISR(void) interrupt +{ + foo(); +} + +#endif -- 2.47.2