From 92c02b20c217e7cf8cc20d667816fdc4c71b9e99 Mon Sep 17 00:00:00 2001 From: michaelh Date: Mon, 5 Nov 2001 01:40:22 +0000 Subject: [PATCH] * support/regression/tests/bug-478094.c: Added. * src/z80/gen.c (commitPair): Fixed silly gbz80/z80 commit to static bug. git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1502 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 6 +++++ src/z80/gen.c | 18 +++++++++++--- support/regression/tests/bug-478094.c | 36 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 support/regression/tests/bug-478094.c diff --git a/ChangeLog b/ChangeLog index 6922a4a2..0700abec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-11-04 Michael Hope + + * support/regression/tests/bug-478094.c: Added. + + * src/z80/gen.c (commitPair): Fixed silly gbz80/z80 commit to static bug. + 2001-11-04 Bernhard Held * sdcc/sim/ucsim/s51.src/uc390cl.h: Improvement for ds390 to run regression tests diff --git a/src/z80/gen.c b/src/z80/gen.c index 6c5d5ae7..b9e9569a 100644 --- a/src/z80/gen.c +++ b/src/z80/gen.c @@ -1618,7 +1618,8 @@ aopPut (asmop * aop, const char *s, int offset) static void commitPair (asmop * aop, PAIR_ID id) { - if (id == PAIR_HL && requiresHL (aop)) + /* PENDING: Verify this. */ + if (id == PAIR_HL && requiresHL (aop) && IS_GB) { emit2 ("ld a,l"); emit2 ("ld d,h"); @@ -1627,8 +1628,19 @@ commitPair (asmop * aop, PAIR_ID id) } else { - aopPut (aop, _pairs[id].l, 0); - aopPut (aop, _pairs[id].h, 1); + /* Special cases */ + if (id == PAIR_HL && aop->type == AOP_IY && aop->size == 2) + { + char *l = aopGetLitWordLong (aop, 0, FALSE); + wassert (l); + + emit2 ("ld (%s),%s", l, _pairs[id].name); + } + else + { + aopPut (aop, _pairs[id].l, 0); + aopPut (aop, _pairs[id].h, 1); + } } } diff --git a/support/regression/tests/bug-478094.c b/support/regression/tests/bug-478094.c new file mode 100644 index 00000000..c2de5618 --- /dev/null +++ b/support/regression/tests/bug-478094.c @@ -0,0 +1,36 @@ +/* Tests a commit problem. + */ +#include + + + +int foo = 16; + +extern void f( int x ); + +void g(int bar) +{ + int a = 0; + int b = 0; + + while(1) { + switch(bar) { + case 0: + --foo; + f(foo); + break; + case 1: + ++foo; + f(foo); + break; + case 2: + ++a; + f(a); + break; + case 3: + ++b; + f(b); + break; + } + } +} -- 2.30.2