From 1a97dd78fc19ca1dc0fc6d32bbba44280c4d3a65 Mon Sep 17 00:00:00 2001 From: spth Date: Sun, 30 Mar 2008 10:40:52 +0000 Subject: [PATCH 1/1] Implemented #1921450 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5125 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 4 ++++ src/z80/ralloc.c | 14 +++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4367b750..01fc9e6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-03-30 Philipp Klaus Krause + * src/z80/ralloc (serialRegAssign, allocReg, tryAllocatingRegPair): + Implemented #1921450, changed some Debug messages. + 2008-03-30 Borut Razem * Small Device C Compiler 2.8.0 released diff --git a/src/z80/ralloc.c b/src/z80/ralloc.c index df66ab35..aebe825e 100644 --- a/src/z80/ralloc.c +++ b/src/z80/ralloc.c @@ -146,7 +146,7 @@ allocReg (short type) { currFunc->regsUsed = bitVectSetBit (currFunc->regsUsed, i); } - D (D_ALLOC, ("allocReg: alloced %p\n", ®sZ80[i])); + D (D_ALLOC, ("allocReg: alloced %s\n", regsZ80[i].name)); return ®sZ80[i]; } } @@ -1039,11 +1039,11 @@ tryAllocatingRegPair (symbol * sym) currFunc->regsUsed = bitVectSetBit (currFunc->regsUsed, i + 1); } - D (D_ALLOC, ("tryAllocRegPair: succeded for sym %p\n", sym)); + D (D_ALLOC, ("tryAllocatingRegPair: succeded for sym %p\n", sym)); return TRUE; } } - D (D_ALLOC, ("tryAllocRegPair: failed on sym %p\n", sym)); + D (D_ALLOC, ("tryAllocatingRegPair: failed on sym %p\n", sym)); return FALSE; } @@ -1234,6 +1234,14 @@ serialRegAssign (eBBlock ** ebbs, int count) break; } } + /* Make sure we didn't allocate a register pair with bytes swapped */ + if(sym->nRegs == 2 && sym->regs[0] == sym->regs[1] + 1 && sym->regs[0] != ®sZ80[2]) + { + freeReg(sym->regs[0]); + freeReg(sym->regs[1]); + if(!tryAllocatingRegPair(sym)) + wassertl(0, "Failed to swap register pair bytes back."); + } } /* if it shares registers with operands make sure that they are in the same position */ -- 2.30.2