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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user