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

Reply via email to