* device/lib/pic/libdev/Makefile.in: build device-specific
[fw/sdcc] / device / lib / _fs2schar.c
index 0bf02fe0c8f5794ec2573eccf509210fe19897a5..b9b6ac6d4f6820b70eca2f7ab09b96475cdf3ada 100644 (file)
 #ifdef FLOAT_ASM_MCS51
 
 // char __fs2schar (float x)
-static void dummy(void) _naked
+static void dummy(void) __naked
 {
-       _asm
+       __asm
        .globl  ___fs2schar
 ___fs2schar:
        lcall   ___fs2slong
+       jnz     fs2schar_not_zero
+       mov     a, dpl
+       orl     a, dph
+       orl     a, b
+       jnz     fs2schar_clr_a
+       ret
+fs2schar_clr_a:
+       clr a
+fs2schar_not_zero:
        jnb     sign_a, fs2schar_pos
 fs2schar_neg:
        cpl     a
@@ -59,22 +68,20 @@ fs2schar_pos:
 fs2schar_maxval_pos:
        mov     dpl, #0x7F
        ret
-       _endasm;
+       __endasm;
 }
 
-
 #else
 
-
 /* convert float to signed char */
-signed char __fs2schar (float f) {
+signed char __fs2schar (float f)
+{
   signed long sl=__fs2slong(f);
   if (sl>=CHAR_MAX)
     return CHAR_MAX;
-  if (sl<=CHAR_MIN) 
+  if (sl<=CHAR_MIN)
     return -CHAR_MIN;
   return sl;
 }
 
 #endif
-