Implemented #1921450
authorspth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 30 Mar 2008 10:40:52 +0000 (10:40 +0000)
committerspth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 30 Mar 2008 10:40:52 +0000 (10:40 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5125 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/z80/ralloc.c

index 4367b750aa2b7a63eb766f6f41504f11795de99e..01fc9e6d749753c51925c1791f968489e01577b0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-03-30 Philipp Klaus Krause <pkk AT spth.de>
+       * src/z80/ralloc (serialRegAssign, allocReg, tryAllocatingRegPair):
+         Implemented #1921450, changed some Debug messages.
+
 2008-03-30 Borut Razem <borut.razem AT siol.net>
 
        * Small Device C Compiler 2.8.0 released
index df66ab35324111b9403795f5a61162657406f1fe..aebe825eeddc600a167d0fcc6e015b29b6099a22 100644 (file)
@@ -146,7 +146,7 @@ allocReg (short type)
             {
               currFunc->regsUsed = bitVectSetBit (currFunc->regsUsed, i);
             }
-          D (D_ALLOC, ("allocReg: alloced %p\n", &regsZ80[i]));
+          D (D_ALLOC, ("allocReg: alloced %s\n", regsZ80[i].name));
           return &regsZ80[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] != &regsZ80[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 */