Commit a02e7bdd by Joseph Myers Committed by Joseph Myers

ibm-ldouble.c (__gcc_qdiv): Scale up arguments in case of small numerator and…

ibm-ldouble.c (__gcc_qdiv): Scale up arguments in case of small numerator and finite nonzero result.

libgcc:
	* config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
	case of small numerator and finite nonzero result.

gcc/testsuite:
	* gcc.target/powerpc/rs6000-ldouble-3.c: New test.

From-SVN: r206310
parent 927734cf
2014-01-02 Joseph Myers <joseph@codesourcery.com>
* gcc.target/powerpc/rs6000-ldouble-3.c: New test.
2014-01-02 Marc Glisse <marc.glisse@inria.fr>
PR c++/59641
......
/* Test accuracy of long double division (glibc bug 15396). */
/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
/* { dg-options "-mlong-double-128" } */
extern void exit (int);
extern void abort (void);
volatile long double a = 0x1p-1024L;
volatile long double b = 0x3p-53L;
volatile long double r;
volatile long double expected = 0x1.55555555555555555555555555p-973L;
int
main (void)
{
r = a / b;
/* Allow error up to 2ulp. */
if (__builtin_fabsl (r - expected) > 0x1p-1073L)
abort ();
exit (0);
}
2014-01-02 Joseph Myers <joseph@codesourcery.com>
* config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
case of small numerator and finite nonzero result.
2014-01-02 Richard Sandiford <rdsandiford@googlemail.com>
Update copyright years
......
......@@ -190,7 +190,16 @@ __gcc_qdiv (double a, double b, double c, double d)
|| nonfinite (t))
return t;
/* Finite nonzero result requires corrections to the highest order term. */
/* Finite nonzero result requires corrections to the highest order
term. These corrections require the low part of c * t to be
exactly represented in double. */
if (fabs (a) <= 0x1p-969)
{
a *= 0x1p106;
b *= 0x1p106;
c *= 0x1p106;
d *= 0x1p106;
}
s = c * t; /* (s,sigma) = c*t exactly. */
w = -(-b + d * t); /* Written to get fnmsub for speed, but not
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment