46 lines
1.3 KiB
Diff
46 lines
1.3 KiB
Diff
2013-12-03 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
|
|
|
* config/rs6000/ibm-ldouble.c (__gcc_qadd): Fix add
|
|
of normal number and qNaN to not raise an inexact exception.
|
|
|
|
* gcc.target/powerpc/pr57363.c: New test.
|
|
|
|
Index: libgcc/config/rs6000/ibm-ldouble.c
|
|
===================================================================
|
|
--- libgcc/config/rs6000/ibm-ldouble.c (revision 205644)
|
|
+++ libgcc/config/rs6000/ibm-ldouble.c (revision 205645)
|
|
@@ -104,6 +104,8 @@ __gcc_qadd (double a, double aa, double
|
|
|
|
if (nonfinite (z))
|
|
{
|
|
+ if (fabs (z) != inf())
|
|
+ return z;
|
|
z = cc + aa + c + a;
|
|
if (nonfinite (z))
|
|
return z;
|
|
Index: gcc/testsuite/gcc.target/powerpc/pr57363.c
|
|
===================================================================
|
|
--- gcc/testsuite/gcc.target/powerpc/pr57363.c (revision 0)
|
|
+++ gcc/testsuite/gcc.target/powerpc/pr57363.c (revision 205645)
|
|
@@ -0,0 +1,19 @@
|
|
+/* { dg-do run { target { powerpc*-*-linux* } } } */
|
|
+/* { dg-options "-mlong-double-128" } */
|
|
+
|
|
+/* Check if adding a qNAN and a normal long double does not generate a
|
|
+ inexact exception. */
|
|
+
|
|
+#define _GNU_SOURCE
|
|
+#include <fenv.h>
|
|
+
|
|
+int main(void)
|
|
+{
|
|
+ double x = __builtin_nan ("");
|
|
+ long double y = 1.1L;
|
|
+
|
|
+ feenableexcept (FE_INEXACT);
|
|
+ feclearexcept (FE_ALL_EXCEPT);
|
|
+ x = x + y;
|
|
+ return fetestexcept(FE_INEXACT);
|
|
+}
|
|
|