+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>
}
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)