* device/lib/Makefile.in: reenable floating point in model-xstack-auto
[fw/sdcc] / device / lib / _fs2sint.c
index b79c25ef4c756e5723d86b2565f26145c913a565..53f2e2d3da6092812068747fe3f8e3a0ffd08b93 100644 (file)
 #ifdef FLOAT_ASM_MCS51
 
 // int __fs2sint (float x)
-static void dummy(void) _naked
+static void dummy(void) __naked
 {
-       _asm
+       __asm
        .globl  ___fs2sint
 ___fs2sint:
        lcall   ___fs2slong
+       jnz fs2sint_not_zero
+       mov a, dpl
+       orl a, dph
+       orl a, b
+       jnz fs2sint_clr_a
+       ret
+fs2sint_clr_a:
+       clr a
+fs2sint_not_zero:
        jnb     sign_a, fs2sint_pos
 fs2sint_neg:
        cpl     a
@@ -41,7 +50,7 @@ fs2sint_neg:
        jnb     acc.7, fs2sint_maxval_neg
        ret
 fs2sint_maxval_neg:
-       mov     dptr, #0x0000
+       mov     dptr, #0x8000
        ret
 fs2sint_pos:
        jnz     fs2sint_maxval_pos
@@ -53,23 +62,20 @@ fs2sint_pos:
 fs2sint_maxval_pos:
        mov     dptr, #0x7FFF
        ret
-       _endasm;
+       __endasm;
 }
 
-
 #else
 
-
-
 /* convert float to signed int */
-signed int __fs2sint (float f) {
+signed int __fs2sint (float f)
+{
   signed long sl=__fs2slong(f);
   if (sl>=INT_MAX)
     return INT_MAX;
-  if (sl<=INT_MIN) 
+  if (sl<=INT_MIN)
     return -INT_MIN;
   return sl;
 }
 
 #endif
-