From f9e215854492482aeee7d24ab3814253e4fac96c Mon Sep 17 00:00:00 2001 From: epetrich Date: Mon, 18 Aug 2003 20:07:35 +0000 Subject: [PATCH] * src/z80/gen.c (isUnsplitable, fetchPairLog): fixed bug #770454 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2837 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 4 ++++ src/z80/gen.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/ChangeLog b/ChangeLog index e534f0fd..949a959a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2003-08-18 Erik Petrich + + * src/z80/gen.c (isUnsplitable, fetchPairLog): fixed bug #770454 + 2003-08-18 Erik Petrich Made bitfield a distinct type from bit so that bitfields diff --git a/src/z80/gen.c b/src/z80/gen.c index 6e791307..9df93337 100644 --- a/src/z80/gen.c +++ b/src/z80/gen.c @@ -585,6 +585,22 @@ isPair (asmop * aop) return (getPairId (aop) != PAIR_INVALID); } +/** Returns TRUE if the registers used in aop cannot be split into high + and low halves */ +bool +isUnsplitable (asmop * aop) +{ + switch (getPairId (aop)) + { + case PAIR_IX: + case PAIR_IY: + return TRUE; + default: + return FALSE; + } + return FALSE; +} + bool isPtrPair (asmop * aop) { @@ -1347,6 +1363,11 @@ fetchPairLong (PAIR_ID pairId, asmop * aop, iCode *ic, int offset) _pop (id); } } + else if (isUnsplitable(aop)) + { + emit2("push %s", _pairs[getPairId(aop)].name); + emit2("pop %s", _pairs[pairId].name); + } else { emit2 ("ld %s,%s", _pairs[pairId].l, aopGet (aop, offset, FALSE)); -- 2.47.2