* as/link/lkar.h: sgetl and sputl are independent of endianness
[fw/sdcc] / device / lib / _fs2slong.c
index 65d3d9acb2ce1afe615a488ae7b17a87a86d77c2..961bff9cec9010822615830ece7b3182e7c50643 100644 (file)
@@ -24,9 +24,9 @@
 #ifdef FLOAT_ASM_MCS51
 
 // long __fs2slong (float x)
-static void dummy(void) _naked
+static void dummy(void) __naked
 {
-       _asm
+       __asm
        .globl  ___fs2slong
 ___fs2slong:
        lcall   fsgetarg
@@ -54,7 +54,17 @@ fs2slong_neg:
        mov     a, r4
        cpl     a
        addc    a, #0
-       jnb     acc.7, fs2slong_maxval_neg  // x < -0x80000000
+       //Check for zero
+       jnz fs2slong_not_zero
+       mov a, dpl
+       orl a, dph
+       orl a, b
+       jnz fs2slong_clr_a
+       ret
+fs2slong_clr_a:
+       clr a
+fs2slong_not_zero:
+       jnb acc.7, fs2slong_maxval_neg  // x < -0x80000000
        ret
 fs2slong_pos:
        mov     a, r4
@@ -79,14 +89,14 @@ fs2slong_maxval_pos:
        mov     b, a
        mov     a, #0x7F
        ret
-       _endasm;
+       __endasm;
 }
 
 #else
 
-
 /* convert float to signed long */
-signed long __fs2slong (float f) {
+signed long __fs2slong (float f)
+{
 
   if (!f)
     return 0;