From: Greg Weeks <greg.weeks@timesys.com>
To: linux-kernel@vger.kernel.org
Subject: [BUG] PPC math-emu multiply problem
Date: Thu, 29 Jul 2004 09:14:45 -0400 [thread overview]
Message-ID: <4108F845.7080305@timesys.com> (raw)
I'm seeing what appears to be a bug in the ppc kernel trap math
emulator. An extreme case for multiplies isn't working the way gcc
soft-float or hardware floating point is. The value in mindble is the
smallest that can be represented in a double. When we try to divide it
by two we should see an underflow and a return value of 0. We see this
when using soft-float in gcc, or when there is HW floating point
support, but it fails when the kernel trap emulator is used.
If anyone can verify this on a PPC other than an 8560 without hardware
floating point I'd appreciate it. I did all of these tests with a 2.6.X
based kernels. The x86 was 2.6.6 vanilla, 8560 is 2.6.6 with lots of
stuff added and support for 8560. The 8260 was 2.6.0 with changes. I
bumped into this with the LSB ldexp test. A simple multiply shows the
problem though.
Greg Weeks
mulbug.c file
------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <math.h>
#include <errno.h>
int main()
{
double x, rtval;
double mindble = 4.9406564584124654418e-324;
x = mindble;
printf("x = %.20g\n", x);
errno = 0;
rtval = ldexp(x, -1);
printf("using ldexp(x, -1) ERRNO = %d - %s, %.20g\n",
errno, strerror(errno), rtval);
printf("using (x * .5) %.20g\n", (x * .5));
exit(0);
}
-----------------------------------------
compile with:
gcc mulbug.c -lm -o mulbug
on an 8260 ppc with HW float.
x = 4.9406564584124654418e-324
using ldexp(x, -1) ERRNO = 34 - Numerical result out of range, 0
using (x * .5) 0
on an x86 with HW float.
x = 4.9406564584124654418e-324
using ldexp(x, -1) ERRNO = 34 - Numerical result out of range, 0
using (x * .5) 0
on an 8560 ppc with kernel trap float emulator.
x = 4.9406564584124654418e-324
using ldexp(x, -1) ERRNO = 0 - Success, 4.9406564584124654418e-324
using (x * .5) 4.9406564584124654418e-324
on an 8260 with soft-float in the gcc
x = 4.9406564584124654418e-324
using ldexp(x, -1) ERRNO = 34 - Numerical result out of range, 0
using (x * .5) 0
next reply other threads:[~2004-07-29 13:14 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-29 13:14 Greg Weeks [this message]
2004-07-29 14:06 ` [BUG] PPC math-emu multiply problem Kumar Gala
2004-07-29 14:26 ` Greg Weeks
2004-07-29 19:22 ` Dan Malek
2004-07-29 19:47 ` La Monte H.P. Yarroll
2004-07-30 14:45 ` Greg Weeks
2004-07-30 15:23 ` Greg Weeks
2004-08-09 16:56 ` Tom Rini
2004-08-09 17:42 ` Dan Malek
2004-08-09 22:18 ` La Monte H.P. Yarroll
2004-08-09 22:23 ` Tom Rini
2004-08-16 13:02 ` Greg Weeks
2004-08-16 14:48 ` Tom Rini
2004-08-16 18:28 ` Greg Weeks
2004-08-16 18:35 ` Tom Rini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4108F845.7080305@timesys.com \
--to=greg.weeks@timesys.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox