From: SourceForge.net <no...@so...> - 2009-02-28 19:17:46
|
Bugs item #2646174, was opened at 2009-02-27 19:30 Message generated for change (Comment added) made by arniml You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=2646174&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: 5 Private: No Submitted By: Arnim Läuger (arniml) Assigned to: Nobody/Anonymous (nobody) Summary: dest parameter for memcpy/ldir garbled Initial Comment: I ran into a problem where the compiler generates wrong code when calling memcpy(). It occurs at line 850 in tff.c which is compiled to a series of ld as seen in tff_ref.asm, line 3689 onwards: ;tff.c:850: memcpy(&dir[DIR_Name], fn, 8+3); ld l,-16 (ix) ld h,-15 (ix) -> prepares the dest pointer in hl ld hl,#0x0010 add hl,sp -> overwrites the dest pointer with src pointer ld c,l ld b,h -> set src bc for ldir ex de,hl -> set dest hl for ldir, same as src now! ld l,c ld h,b ld bc,#0x000B ldir -> won't memcpy as expected If fn is replaced with a plain string, everything works fine. The issue was found with sdcc Version 2.8.9 #5361 and is also present in latest Version 2.8.9 #5390 (Feb 27 2009) (UNIX), sdcc-snapshot-i386-unknown-linux2.5-20090227-5390.tar.bz2. It should be reproducible with the attached archive. Unpack and 'make'. Best regards Arnim ---------------------------------------------------------------------- >Comment By: Arnim Läuger (arniml) Date: 2009-02-28 20:17 Message: Is there anything I can do to work around this issue? I'm kind of stuck with the software for this embedded project. Arnim ---------------------------------------------------------------------- Comment By: Philipp Krause (spth) Date: 2009-02-28 16:56 Message: I meant "genAddrOf" instead of "genPointer". ---------------------------------------------------------------------- Comment By: Philipp Krause (spth) Date: 2009-02-28 16:56 Message: As the asm generated using --fverbose-asm shows, the problem is not directly in the (relatively new) implementation of memcpy() as builtin, but more complicated: A genAssign moves dest into hl, but a genPointer immediately overwrites it with src. ;tff.c:850: memcpy(&dir[DIR_Name], fn, 8+3); ; genAssign ; AOP_STK for _f_open_dir_1_1 ld l,-16 (ix) ld h,-15 (ix) ; genAddrOf ld hl,#0x0010 add hl,sp ld c,l ld b,h ; genBuiltIn ; _saveRegsForCall: sendSetSize: 0 deInUse: 0 bcInUse: 0 deSending: 0 ; peephole 81 used ex to load hl into de. ex de,hl ld l,c ld h,b ld bc,#0x000B ldir ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=2646174&group_id=599 |