* device/lib/_strlen.c: assembler version for mcs51
[fw/sdcc] / device / lib / _fs2sint.c
index b79c25ef4c756e5723d86b2565f26145c913a565..9da46173bc38bc12e759c43c7f43b6153aaa5744 100644 (file)
@@ -30,6 +30,15 @@ static void dummy(void) _naked
        .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
@@ -66,7 +75,7 @@ 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;
 }