#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
jnb acc.7, fs2sint_maxval_neg
ret
fs2sint_maxval_neg:
- mov dptr, #0x0000
+ mov dptr, #0x8000
ret
fs2sint_pos:
jnz fs2sint_maxval_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
-