Hi,

  The following code:

    int a=0,b=0;

    asm(";oops begin...\n");

    float data;
    data = 12.345;
  
    if (data==0.0) {
      a=1;
    } else {
      a=2;
    }
    if (data!=0.0) {
      b=3;
    } else {
      b=4;
    }
  
    asm(";oops end...\n");

  Always returns a=1 and b=3 ... which means there is some bug... the .s
file follows:

/* #APP */
        ;oops begin...

/* #NOAPP */
        mov     #llo(0x4145851f), r10
        mov     #lhi(0x4145851f), r11
        mov     #llo(0x0), r12
        mov     #lhi(0x0), r13
        mov     r10, r14
        mov     r11, r15
        call    #__eqsf2
        tst     r15
        jne     .L89
        mov     #llo(1), r9 
        jmp     .L91
.L89:
        mov     #llo(2), r9 
.L91:
        mov     #llo(0x0), r12
        mov     #lhi(0x0), r13
        mov     r10, r14
        mov     r11, r15
        call    #__nesf2
        tst     r15
        jeq     .L92
        mov     #llo(3), r15 
        jmp     .L94
.L92:
        mov     #llo(4), r15 
.L94:
/* #APP */
        ;oops end...

/* #NOAPP */

   How you can see, both comparisons are wrong.

   I had similar problems with less than "<" comparing floats, but I
don't have a source code now to demonstrate.

   I compiled with:

        msp430-gcc -O -Wall -mmcu=msp430x149 -S -o xxx.s xxx.c

   Thanks,
     Pedro

-- 
  .''`.   Pedro Zorzenon Neto <p...@terra.com.br>
 : :'  :  Debian GNU/Linux | GNU/Hurd: <http://www.debian.org>
 `. `'`   Debian BR: <http://debian-br.cipsga.org.br>
   `-     Be Happy! Be FREE!

Reply via email to