From: Maarten B. <sou...@ds...> - 2010-09-26 21:15:53
|
Philipp, Have you checked this only applies to hc08? Are at least mcs51 and z80 ok? Greets, Maarten > Bugs item #1715020, was opened at 2007-05-08 15:47 > Message generated for change (Comment added) made by spth > You can respond by visiting: > https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1715020&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: hc08 port > Group: known bugs >>Status: Closed >>Resolution: Fixed > Priority: 5 > Private: No > Submitted By: Cassius Resende Duarte (cassius_duarte) >>Assigned to: Philipp Klaus Krause (spth) > Summary: Cast volatile over literal constant address is ignored. > > Initial Comment: > Cast volatile over literal constant address is ignored, resulting in wrong > instruction elimination done by the peephole optimizer. See the code > bellow: > > char set_and_read(void) { > (*(volatile char*)256) = 0x11; > return (*(volatile char*)256); > } > > At the return value, an extra load from is generated, but eliminated by > the > peephole optimizer. > > _set_and_read: > ;hi_page.c:10: (*(volatile char*)256) = 0x11; > lda #0x11 > ;hi_page.c:11: return (*(volatile char*)256); > ; Peephole 8b - removed redundant lda > sta 0x0100 > 00101$: > rts > > WorkAround(s) > ============= > > 1 - Disable the Peephole optimzer: sdcc -mhc08 --no-peep <file> > 2 - Employ a const pointer or global variable. > > Additional Information > ====================== > Command line for running the example: sdcc -mhc08 hi_page.c > SDCC Version: 2.6.0 > > ---------------------------------------------------------------------- > >>Comment By: Philipp Klaus Krause (spth) > Date: 2010-09-26 14:52 > > Message: > Fixed in sdcc 2.9.8 #5995, by disabling peepholes 8a and 8b. > > Philipp > > > ---------------------------------------------------------------------- > > Comment By: Cassius Resende Duarte (cassius_duarte) > Date: 2007-05-08 15:49 > > Message: > Logged In: YES > user_id=1787323 > Originator: YES > > Futher Analisis > =============== > > The rule 8b (from /src/hc08/peeph.def) also invokes the routine > notVolatileVariable (from /src/SDCCpeeph.c) to check if the optimization > can be > done. However, according to the documentation, the function will return > TRUE for > constants. Maybe the paser process may generate a special symbol for > volatile > constants? > > > Related Bugs > ============ > None that I could find. The closer one was "[ 663539 ] volatile does not > work", > but the issue is with global variables, and the bug is already closed. > > ---------------------------------------------------------------------- > > Comment By: Cassius Resende Duarte (cassius_duarte) > Date: 2007-05-08 15:47 > > Message: > Logged In: YES > user_id=1787323 > Originator: YES > > File Added: hi_page.asm > > ---------------------------------------------------------------------- > > You can respond by visiting: > https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1715020&group_id=599 > > ------------------------------------------------------------------------------ > Start uncovering the many advantages of virtual appliances > and start using them to simplify application deployment and > accelerate your shift to cloud computing. > http://p.sf.net/sfu/novell-sfdev2dev > _______________________________________________ > sdcc-devel mailing list > sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-devel > > |