#ifdef FLOAT_ASM_MCS51
// char __fs2schar (float x)
-static void dummy(void) _naked
+static void dummy(void) __naked
{
- _asm
- .globl ___fs2schar
+ __asm
+ .globl ___fs2schar
___fs2schar:
- lcall ___fs2slong
- push acc
- jnz fs2schar_not_zero
- mov a, dpl
- jnz fs2schar_not_zero
- mov a, dph
- jnz fs2schar_not_zero
- mov a, b
- jnz fs2schar_not_zero
- pop acc
- ret
+ 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:
- pop acc
- jnb sign_a, fs2schar_pos
+ jnb sign_a, fs2schar_pos
fs2schar_neg:
- cpl a
- jnz fs2schar_maxval_neg
- mov a, b
- cpl a
- jnz fs2schar_maxval_neg
- mov a, dph
- cpl a
- jnz fs2schar_maxval_neg
- mov a, dpl
- jnb acc.7, fs2schar_maxval_neg
- ret
+ cpl a
+ jnz fs2schar_maxval_neg
+ mov a, b
+ cpl a
+ jnz fs2schar_maxval_neg
+ mov a, dph
+ cpl a
+ jnz fs2schar_maxval_neg
+ mov a, dpl
+ jnb acc.7, fs2schar_maxval_neg
+ ret
fs2schar_maxval_neg:
- mov dpl, #0x80
- ret
+ mov dpl, #0x80
+ ret
fs2schar_pos:
- jnz fs2schar_maxval_pos
- mov a, b
- jnz fs2schar_maxval_pos
- mov a, dph
- jnz fs2schar_maxval_pos
- mov a, dpl
- jb acc.7, fs2schar_maxval_pos
- ret
+ jnz fs2schar_maxval_pos
+ mov a, b
+ jnz fs2schar_maxval_pos
+ mov a, dph
+ jnz fs2schar_maxval_pos
+ mov a, dpl
+ jb acc.7, fs2schar_maxval_pos
+ ret
fs2schar_maxval_pos:
- mov dpl, #0x7F
- ret
- _endasm;
+ mov dpl, #0x7F
+ ret
+ __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)
- return -CHAR_MIN;
+ if (sl>=SCHAR_MAX)
+ return SCHAR_MAX;
+ if (sl<=SCHAR_MIN)
+ return -SCHAR_MIN;
return sl;
}
#endif
-