git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3969
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+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.
.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
jnb acc.7, fs2schar_maxval_neg
ret
fs2schar_maxval_neg:
- mov dpl, #0x00
+ mov dpl, #0x80
ret
fs2schar_pos:
jnz fs2schar_maxval_pos
.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
jnb acc.7, fs2sint_maxval_neg
ret
fs2sint_maxval_neg:
- mov dptr, #0x0000
+ mov dptr, #0x8000
ret
fs2sint_pos:
jnz fs2sint_maxval_pos
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
mov dpl, a
mov dph, a
mov b, a
+ mov a, #0x80
ret
fs2slong_maxval_pos:
mov a, #0xFF