summaryrefslogtreecommitdiff
path: root/lib/libc/sparc64/fpu/fpu_explode.c
diff options
context:
space:
mode:
authorStefan Farfeleder <stefanf@FreeBSD.org>2005-05-27 10:00:22 +0000
committerStefan Farfeleder <stefanf@FreeBSD.org>2005-05-27 10:00:22 +0000
commit1470d46611f17887e3d93ba90c4beb691f4228c0 (patch)
treef6003ef89e1f08e9ae380f4c2ad6c2037e010ffc /lib/libc/sparc64/fpu/fpu_explode.c
parentd609e438da396bb095406e4f7b1e6b1d679d2bcb (diff)
Notes
Diffstat (limited to 'lib/libc/sparc64/fpu/fpu_explode.c')
-rw-r--r--lib/libc/sparc64/fpu/fpu_explode.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/libc/sparc64/fpu/fpu_explode.c b/lib/libc/sparc64/fpu/fpu_explode.c
index 7c1f3eb5a716..09f8908e1dea 100644
--- a/lib/libc/sparc64/fpu/fpu_explode.c
+++ b/lib/libc/sparc64/fpu/fpu_explode.c
@@ -101,7 +101,14 @@ __fpu_itof(fp, i)
* fpu_norm()'s handling of `supernormals'; see fpu_subr.c.
*/
fp->fp_exp = FP_LG;
- fp->fp_mant[0] = (int)i < 0 ? -i : i;
+ /*
+ * The sign bit decides whether i should be interpreted as
+ * a signed or unsigned entity.
+ */
+ if (fp->fp_sign && (int)i < 0)
+ fp->fp_mant[0] = -i;
+ else
+ fp->fp_mant[0] = i;
fp->fp_mant[1] = 0;
fp->fp_mant[2] = 0;
fp->fp_mant[3] = 0;
@@ -127,7 +134,14 @@ __fpu_xtof(fp, i)
* fpu_norm()'s handling of `supernormals'; see fpu_subr.c.
*/
fp->fp_exp = FP_LG2;
- *((int64_t*)fp->fp_mant) = (int64_t)i < 0 ? -i : i;
+ /*
+ * The sign bit decides whether i should be interpreted as
+ * a signed or unsigned entity.
+ */
+ if (fp->fp_sign && (int64_t)i < 0)
+ *((int64_t*)fp->fp_mant) = -i;
+ else
+ *((int64_t*)fp->fp_mant) = i;
fp->fp_mant[2] = 0;
fp->fp_mant[3] = 0;
__fpu_norm(fp);