fixed bug in register pair loading
authorspth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 20 Feb 2008 13:20:39 +0000 (13:20 +0000)
committerspth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 20 Feb 2008 13:20:39 +0000 (13:20 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5027 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/z80/gen.c

index ee588d7e753097ca114b4943da84b1b9e97cac94..6666b1996afb69ef71be1dfb8da9db8c4b4df86b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,13 @@
+2008-02-20 Philipp Klaus Krause <pkk AT spth.de>
+
+       * src/z80/gen.c: fixed bug in register pair loading when swapping register contents,
+          mostly fixes #1596270
+
 2008-02-20 Philipp Klaus Krause <pkk AT spth.de>
 
        * src/z80/peeph.def,
        * src/z80/peeph-z80.def: moved peephole that breaks gbz80 to z80-specific peepholes,
-         fixes #1806565.
+         fixes #1806565
 
 2008-02-20 Maarten Brock <sourceforge.brock AT dse.nl>
 
index db4dcf87768a6c0f9bebfb496baf9896dc9ae4a6..97dfd4106eecbbfa2a9d7dea108afc46e481cc61 100644 (file)
@@ -1508,8 +1508,18 @@ fetchPairLong (PAIR_ID pairId, asmop * aop, iCode *ic, int offset)
           }
         else
           {
-            emit2 ("ld %s,%s", _pairs[pairId].l, aopGet (aop, offset, FALSE));
-            emit2 ("ld %s,%s", _pairs[pairId].h, aopGet (aop, offset + 1, FALSE));
+            /* Swapping register contents within register pair */
+            if(!strcmp(aopGet (aop, offset, FALSE), _pairs[pairId].h))
+              {
+                emit2 ("ld a,%s",aopGet (aop, offset + 1, FALSE));
+                emit2 ("ld %s,%s", _pairs[pairId].l, aopGet (aop, offset, FALSE));
+                emit2 ("ld %s,a", _pairs[pairId].h);
+              }
+            else
+              {
+                emit2 ("ld %s,%s", _pairs[pairId].l, aopGet (aop, offset, FALSE));
+                emit2 ("ld %s,%s", _pairs[pairId].h, aopGet (aop, offset + 1, FALSE));
+              }
           }
         /* PENDING: check? */
         if (pairId == PAIR_HL)