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 <[email protected]>
: :' : Debian GNU/Linux | GNU/Hurd: <http://www.debian.org>
`. `'` Debian BR: <http://debian-br.cipsga.org.br>
`- Be Happy! Be FREE!