From: SourceForge.net <no...@so...> - 2003-10-22 07:50:56
|
Bugs item #827883, was opened at 2003-10-22 01:42 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=827883&group_id=599 Category: msc51(8051) target Group: None Status: Open Resolution: None Priority: 5 Submitted By: Josef Pavlik (jetset) Assigned to: Nobody/Anonymous (nobody) Summary: bit literals inside cycle 'for' Initial Comment: hello, Compiling the following simple program you can got buggy result. I try it with sdcc 2.3.5 (Oct 21 2003) (UNIX). You can compile it without any parameters, simply sdcc test.c The bug is following: The bit 'e' is loaded just BEFORE cycle. (but may be never loaded) Another thing, The following is not an bug, but very ugly result: The bits 'a' to 'd' are loaded from values stored in the registers before the cycle, killing a lot of registers and generating a lot of senseless code. Instead of simply setb _a etc. ------------------------------------------------------- bit a,b,c,d,e; main() { int i; a=b=c=d=e=0; for (i=0; i<10; i++) { if (i==11) { a=1; b=1; c=1; d=1; e=1; } } // e==1 at this point but may be 0 } --------------------------------------------------- piece of incorrect output --------------------------------------------------- ;test.c:7: for (i=0; i<10; i++) ; genAssign mov r2,#0x01 ; genAssign mov r3,#0x01 ; genAssign mov r4,#0x01 ; genAssign mov r5,#0x01 ; genAssign setb _e ; genAssign mov r7,#0x0A mov r0,#0x00 00105$: ;test.c:9: if (i==11) ; genMinus ; genMinusDec mov a,r7 add a,#0xff mov r1,a mov a,r0 addc a,#0xff mov r6,a ; genCmpEq ; Peephole 132 changed ljmp to sjmp ; Peephole 198 optimized misc jump sequence cjne r1,#0x0B,00102$ cjne r6,#0x00,00102$ ;00111$: ; Peephole 200 removed redundant sjmp 00112$: ;test.c:11: a=1; ; genAssign mov a,r2 add a,#0xff mov _a,c ;test.c:12: b=1; ; genAssign mov a,r3 add a,#0xff mov _b,c ;test.c:13: c=1; ; genAssign mov a,r4 add a,#0xff mov _c,c ;test.c:14: d=1; ; genAssign mov a,r5 add a,#0xff mov _d,c ;test.c:15: e=1; ; genAssign 00102$: ; genDjnz ; genMinus ; genMinusDec dec r7 cjne r7,#0xff,00113$ dec r0 00113$: ;test.c:7: for (i=0; i<10; i++) ; genIfx mov a,r7 orl a,r0 ; genIfxJump ; Peephole 109 removed ljmp by inverse jump logic jnz 00105$ 00114$: 00106$: ret ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=827883&group_id=599 |