X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device%2Flib%2F_fs2sint.c;h=53f2e2d3da6092812068747fe3f8e3a0ffd08b93;hb=ec1a2977db2d0e4b07f61c9c6a9d0b26f63ca698;hp=b79c25ef4c756e5723d86b2565f26145c913a565;hpb=01f44a7ef2bf7ff322423a1239d3c3806846ca15;p=fw%2Fsdcc diff --git a/device/lib/_fs2sint.c b/device/lib/_fs2sint.c index b79c25ef..53f2e2d3 100644 --- a/device/lib/_fs2sint.c +++ b/device/lib/_fs2sint.c @@ -24,12 +24,21 @@ #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 -