summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2010-03-20 21:15:56 +0000
committermarius <marius@FreeBSD.org>2010-03-20 21:15:56 +0000
commitdf7798b6b4b258384c15eff6e06bba4750d36dad (patch)
tree3d3a6c362106fee7540311c3a27f8ce0f2686152 /lib/libc
parent8842ef08884745b9d65614b3a6bcfecbd2722eed (diff)
downloadFreeBSD-src-df7798b6b4b258384c15eff6e06bba4750d36dad.zip
FreeBSD-src-df7798b6b4b258384c15eff6e06bba4750d36dad.tar.gz
Ensure that __fpu_ftox() both returns the high bits and res[1] contains
the low bits also in the default case. PR: 144900 Obtained from: OpenBSD MFC after: 3 days
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/sparc64/fpu/fpu_implode.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/libc/sparc64/fpu/fpu_implode.c b/lib/libc/sparc64/fpu/fpu_implode.c
index 32a0e7c..91e40c1 100644
--- a/lib/libc/sparc64/fpu/fpu_implode.c
+++ b/lib/libc/sparc64/fpu/fpu_implode.c
@@ -248,8 +248,8 @@ __fpu_ftox(fe, fp, res)
sign = fp->fp_sign;
switch (fp->fp_class) {
case FPC_ZERO:
- res[1] = 0;
- return (0);
+ i = 0;
+ goto done;
case FPC_NUM:
/*
@@ -273,15 +273,17 @@ __fpu_ftox(fe, fp, res)
break;
if (sign)
i = -i;
- res[1] = (int)i;
- return (i >> 32);
+ goto done;
default: /* Inf, qNaN, sNaN */
break;
}
/* overflow: replace any inexact exception with invalid */
fe->fe_cx = (fe->fe_cx & ~FSR_NX) | FSR_NV;
- return (0x7fffffffffffffffLL + sign);
+ i = 0x7fffffffffffffffLL + sign;
+done:
+ res[1] = i & 0xffffffff;
+ return (i >> 32);
}
/*
OpenPOWER on IntegriCloud