From: SourceForge.net <no...@so...> - 2011-11-28 17:19:18
|
Bugs item #3444293, was opened at 2011-11-28 09:19 Message generated for change (Tracker Item Submitted) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3444293&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: z80 port Group: None Status: Open Resolution: None Priority: 7 Private: No Submitted By: Philipp Klaus Krause (spth) Assigned to: Nobody/Anonymous (nobody) Summary: Pointer to global variable Initial Comment: sdcc generates wrong code when accessing a pointer to a global variable that is bigger than a byte subsequently: The following void *s[2]; void f(void) { s[0] = 0; s[1] = 0; } is compiled inot _f_start:: _f: ;bug.c:5: s[0] = 0; ld hl,#_s xor a, a ld (hl), a inc hl ld (hl), a ;bug.c:6: s[1] = 0; inc hl inc hl xor a, a ld (hl), a inc hl ld (hl), a ret by current sdcc -mz80 #7083. The older sdcc #6659 would generate correct ;bug.c:5: s[0] = 0; ld hl,#_s xor a, a ld (hl), a inc hl ld (hl), a ;bug.c:6: s[1] = 0; ld hl,#_s + 2 xor a, a ld (hl), a inc hl ld (hl), a ret Assigning a higher-than-default priority, since bad code is generated silently. Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3444293&group_id=599 |
From: SourceForge.net <no...@so...> - 2011-11-29 10:08:22
|
Bugs item #3444293, was opened at 2011-11-28 09:19 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3444293&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: z80 port Group: None >Status: Closed >Resolution: Fixed Priority: 7 Private: No Submitted By: Philipp Klaus Krause (spth) >Assigned to: Philipp Klaus Krause (spth) Summary: Pointer to global variable Initial Comment: sdcc generates wrong code when accessing a pointer to a global variable that is bigger than a byte subsequently: The following void *s[2]; void f(void) { s[0] = 0; s[1] = 0; } is compiled inot _f_start:: _f: ;bug.c:5: s[0] = 0; ld hl,#_s xor a, a ld (hl), a inc hl ld (hl), a ;bug.c:6: s[1] = 0; inc hl inc hl xor a, a ld (hl), a inc hl ld (hl), a ret by current sdcc -mz80 #7083. The older sdcc #6659 would generate correct ;bug.c:5: s[0] = 0; ld hl,#_s xor a, a ld (hl), a inc hl ld (hl), a ;bug.c:6: s[1] = 0; ld hl,#_s + 2 xor a, a ld (hl), a inc hl ld (hl), a ret Assigning a higher-than-default priority, since bad code is generated silently. Philipp ---------------------------------------------------------------------- >Comment By: Philipp Klaus Krause (spth) Date: 2011-11-29 02:08 Message: Fixed in sdcc revision #7086. Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=3444293&group_id=599 |