From bae1ba55d40438d14536bc63de419d582ae5227e Mon Sep 17 00:00:00 2001 From: maartenbrock Date: Tue, 22 Nov 2005 10:45:46 +0000 Subject: [PATCH] * device/lib/_fs2schar.c, * device/lib/_fs2sint.c, * device/lib/_fs2slong.c: optimized inline asm git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3970 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 6 ++++++ device/lib/_fs2schar.c | 15 ++++++--------- device/lib/_fs2sint.c | 15 ++++++--------- device/lib/_fs2slong.c | 15 ++++++--------- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index c0fb233e..6f2846e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-11-22 Maarten Brock + + * device/lib/_fs2schar.c, + * device/lib/_fs2sint.c, + * device/lib/_fs2slong.c: optimized inline asm + 2005-11-21 Jesus Calvino-Fraga * device/lib/_fs2slong.c, device/lib/_fs2sint.c, device/lib/_fs2char.c: diff --git a/device/lib/_fs2schar.c b/device/lib/_fs2schar.c index e027d08d..f63d342a 100644 --- a/device/lib/_fs2schar.c +++ b/device/lib/_fs2schar.c @@ -31,18 +31,15 @@ static void dummy(void) _naked .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 + 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 fs2schar_neg: cpl a @@ -83,7 +80,7 @@ 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; } diff --git a/device/lib/_fs2sint.c b/device/lib/_fs2sint.c index ca9754a7..9da46173 100644 --- a/device/lib/_fs2sint.c +++ b/device/lib/_fs2sint.c @@ -30,18 +30,15 @@ static void dummy(void) _naked .globl ___fs2sint ___fs2sint: lcall ___fs2slong - push acc jnz fs2sint_not_zero mov a, dpl - jnz fs2sint_not_zero - mov a, dph - jnz fs2sint_not_zero - mov a, b - jnz fs2sint_not_zero - pop acc + orl a, dph + orl a, b + jnz fs2sint_clr_a ret +fs2sint_clr_a: + clr a fs2sint_not_zero: - pop acc jnb sign_a, fs2sint_pos fs2sint_neg: cpl a @@ -78,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; } diff --git a/device/lib/_fs2slong.c b/device/lib/_fs2slong.c index 8be058e3..87d662df 100644 --- a/device/lib/_fs2slong.c +++ b/device/lib/_fs2slong.c @@ -55,18 +55,15 @@ fs2slong_neg: cpl a addc a, #0 //Check for zero - push acc jnz fs2slong_not_zero mov a, dpl - jnz fs2slong_not_zero - mov a, dph - jnz fs2slong_not_zero - mov a, b - jnz fs2slong_not_zero - pop acc - ret + orl a, dph + orl a, b + jnz fs2slong_clr_a + ret +fs2slong_clr_a: + clr a fs2slong_not_zero: - pop acc jnb acc.7, fs2slong_maxval_neg // x < -0x80000000 ret fs2slong_pos: -- 2.47.2