From afa3906c3df1b0c1659c05604b00c1430895c7f2 Mon Sep 17 00:00:00 2001 From: jesusc Date: Mon, 21 Nov 2005 16:57:29 +0000 Subject: [PATCH] Better handling of floats between -1.0 and 0.0 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3969 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 5 +++++ device/lib/_fs2schar.c | 14 +++++++++++++- device/lib/_fs2sint.c | 14 +++++++++++++- device/lib/_fs2slong.c | 16 +++++++++++++++- 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index c1df2a33..c0fb233e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-11-21 Jesus Calvino-Fraga + + * device/lib/_fs2slong.c, device/lib/_fs2sint.c, device/lib/_fs2char.c: + Better handling of floats between -1.0 and 0.0. + 2005-11-20 Frieder Ferlemann * src/mcs51/peeph.def: added missing "if"s as noted by Hubert Sack. diff --git a/device/lib/_fs2schar.c b/device/lib/_fs2schar.c index 1e955eb8..e027d08d 100644 --- a/device/lib/_fs2schar.c +++ b/device/lib/_fs2schar.c @@ -31,6 +31,18 @@ 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 + ret +fs2schar_not_zero: + pop acc jnb sign_a, fs2schar_pos fs2schar_neg: cpl a @@ -45,7 +57,7 @@ fs2schar_neg: jnb acc.7, fs2schar_maxval_neg ret fs2schar_maxval_neg: - mov dpl, #0x00 + mov dpl, #0x80 ret fs2schar_pos: jnz fs2schar_maxval_pos diff --git a/device/lib/_fs2sint.c b/device/lib/_fs2sint.c index b79c25ef..ca9754a7 100644 --- a/device/lib/_fs2sint.c +++ b/device/lib/_fs2sint.c @@ -30,6 +30,18 @@ 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 + ret +fs2sint_not_zero: + pop acc jnb sign_a, fs2sint_pos fs2sint_neg: cpl a @@ -41,7 +53,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 diff --git a/device/lib/_fs2slong.c b/device/lib/_fs2slong.c index 5e944d1b..8be058e3 100644 --- a/device/lib/_fs2slong.c +++ b/device/lib/_fs2slong.c @@ -54,7 +54,20 @@ fs2slong_neg: mov a, r4 cpl a addc a, #0 - jnb acc.7, fs2slong_maxval_neg // x < -0x80000000 + //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 +fs2slong_not_zero: + pop acc + jnb acc.7, fs2slong_maxval_neg // x < -0x80000000 ret fs2slong_pos: mov a, r4 @@ -70,6 +83,7 @@ fs2slong_maxval_neg: mov dpl, a mov dph, a mov b, a + mov a, #0x80 ret fs2slong_maxval_pos: mov a, #0xFF -- 2.30.2