]> git.gag.com Git - fw/sdcc/commitdiff
Better handling of floats between -1.0 and 0.0
authorjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 21 Nov 2005 16:57:29 +0000 (16:57 +0000)
committerjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 21 Nov 2005 16:57:29 +0000 (16:57 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3969 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
device/lib/_fs2schar.c
device/lib/_fs2sint.c
device/lib/_fs2slong.c

index c1df2a33f95cf33e8bbd19df91e3b7bde21f2cec..c0fb233efa9f81a2d8e92d10f2ad0ec3132bdb46 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-21 Jesus Calvino-Fraga <jesusc AT ece.ubc.ca>
+
+       * 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 <Frieder.Ferlemann AT web.de>
 
        * src/mcs51/peeph.def: added missing "if"s as noted by Hubert Sack.
index 1e955eb86194d63faa65bc3511bf2c3e18598bee..e027d08d5046745a5da0acc5b829ed418c68cf0a 100644 (file)
@@ -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
index b79c25ef4c756e5723d86b2565f26145c913a565..ca9754a7f5770dfe44a8535ad5f55c8d67f79402 100644 (file)
@@ -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
index 5e944d1be4646fd5cb8f8fc549b8ecaddb317239..8be058e3db0d5100432e1c3f7187e8e6b2e1c883 100644 (file)
@@ -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