Hi, I am currently having an issue (or a misunderstanding) with sdcc mcs51 with a sbit clearing instruction being erroneously (IMHO) removed.
I am using sdcc-3.0.0 (as shipped in Fedora 14 repository). sdcc -v SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.0 #6037 (Mar 20 2011) (Linux) I have also tested with the svn development version rev 6473. sdcc -v SDCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08 3.0.2 #6470 (Apr 30 2011) (Linux) The code is targeted for a 8051 included in a TI cc1110. The following code is a simplified version of the issue: /* compile with "sdcc -mmcs51 file.c" */ #include <mcs51/cc1110.h> void f1(void) { UTX0IF = 0; U0DBUF = 'X'; while ( !UTX0IF ) ; UTX0IF = 0; } void f2(void) { UTX0IF = 0; U0DBUF = 'X'; while ( !UTX0IF ) { __asm nop __endasm; } UTX0IF = 0; } void f3(void) { IRCON2 &= ~0x02; U0DBUF = 'X'; while ( (IRCON2 & 0x02) == 0 ) ; IRCON2 &= ~0x02; } void main(void) { f1(); f2(); f3(); } /* End of code */ When looking at the assembler code of the f1() function, the second sbit affectation "UTX0IF = 0;" (which should be compiled with a "clr _UTX0IF") has been removed (apparently by the label optimization). The f2() and f3() are alternate versions of f1(). f2() add a NOP into the while() statement. f3() uses the sfr instead of the sbit. These alternate versions are not affected by this issue. As a final note, the instruction is not removed in f1() when the code is compiled with the --nolabelopt option. I would expect that these three functions has the same behavior. Did I miss something or is this some kind of a bug? Thanks, -- Julien Olivain. ------------------------------------------------------------------------------ WhatsUp Gold - Download Free Network Management Software The most intuitive, comprehensive, and cost-effective network management toolset available today. Delivers lowest initial acquisition cost and overall TCO of any competing solution. http://p.sf.net/sfu/whatsupgold-sd _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user