From: SourceForge.net <no...@so...> - 2007-05-21 08:00:52
|
Bugs item #1722392, was opened at 2007-05-21 01:33 Message generated for change (Comment added) made by tecodev You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1722392&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: pic14 target Group: known bugs Status: Open Resolution: None Priority: 5 Private: No Submitted By: Masaki Shinomiya (shinobar) Assigned to: Raphael Neider (tecodev) Summary: INT plus CHAR makes wrong assembly codes Initial Comment: /*** simple.c for testing ***/ #include <sdcc-lib.h> #include <pic16f84a.h> static signed int x=0; static unsigned char y=1; void main() { x += y; x += y; while (1) {} } /*** source end ***/ SDCC 2.7.0 #4802 (May 21 2007) (UNIX) Two lines of (x += y) makes different assembly codes. It seems the first line turns wrong. Initially, x=0x0000. The first line of (x += y) makes x from 0x0000 to 0x0101 (shoud be 0x0001). Next line makes x from 0x0101 to 0x0102 (correct). 'x += (singed int)y;' makes the same result as above 'x += y'. Next sorce gets correct result (x: 0x0000 --> 0x0001 --> 0x0002). /*** seems correct result ***/ #include <sdcc-lib.h> #include <pic16f84a.h> static signed int x=0, w; static unsigned char y=1; void main() { w = y; x += w; x += w; while (1) {} } /*** source end ***/ ---------------------------------------------------------------------- >Comment By: Raphael Neider (tecodev) Date: 2007-05-21 08:00 Message: Logged In: YES user_id=1115835 Originator: NO OK, here is a patch to fix the pCode optimization, along with a regression test and improvements for the pic testsuite (src/regression). Patch is against SDCC r4806. File Added: pcodeopt.patch ---------------------------------------------------------------------- Comment By: Raphael Neider (tecodev) Date: 2007-05-21 06:45 Message: Logged In: YES user_id=1115835 Originator: NO This bug is caused by the slightly buggy pcode optimization (the contents of WREG is used, but not correctly set up by the `optimized' code). Please compile your code with --no-pcode-opt to disable the optimisation and prevent the bug from surfacing. Of course, this comes at the cost of increased code size... Regards, Raphael I leave this open until I get to fix the optimisation... ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1722392&group_id=599 |