+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,
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;
emitcode ("mov", "%s,a", spname);
}
- for (i = 0; i < mcs51_nRegs; i++)
+ for (i = 0; i < 8; i++)
{
if (options.useXstack)
{
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)
}
}
- 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)
{
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