From: spth Date: Wed, 20 Feb 2008 13:20:39 +0000 (+0000) Subject: fixed bug in register pair loading X-Git-Url: https://git.gag.com/?p=fw%2Fsdcc;a=commitdiff_plain;h=2b86a75cb18ce89024357c0a9ffdbcef4ec0911d fixed bug in register pair loading git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@5027 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index ee588d7e..6666b199 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,13 @@ +2008-02-20 Philipp Klaus Krause + + * src/z80/gen.c: fixed bug in register pair loading when swapping register contents, + mostly fixes #1596270 + 2008-02-20 Philipp Klaus Krause * 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 diff --git a/src/z80/gen.c b/src/z80/gen.c index db4dcf87..97dfd410 100644 --- a/src/z80/gen.c +++ b/src/z80/gen.c @@ -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)