public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug target/57363] New: IBM long double: adding NaN and number raises inexact exception @ 2013-05-21 19:42 azanella at linux dot vnet.ibm.com 2013-07-02 18:43 ` [Bug target/57363] " rth at gcc dot gnu.org ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: azanella at linux dot vnet.ibm.com @ 2013-05-21 19:42 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57363 Bug ID: 57363 Summary: IBM long double: adding NaN and number raises inexact exception Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: azanella at linux dot vnet.ibm.com For IBM long double, adding a normal number to a NaN raises an inexact exception. Adding any number to NaN should not raise any exception. The following testcase triggers the issue (the testcase is meant to run a gnu compatible libc): -------------------------------------------------------------- $ cat gcc_testcase.c #include <math.h> #include <fenv.h> #include <stdio.h> double sum (double x, long double y) { return x + y; } int main () { feenableexcept (FE_INEXACT); double x = __builtin_nan (""); long double y = 1.1L; printf ("%e\n", sum (x, y)); return 0; } $ gcc -O3 -m64 -fno-inline gcc_testcase.c -o gcc_testcase -lm $ ./gcc_testcase Floating point exception (core dumped) -------------------------------------------------------------- The issue is in __gcc_qadd implementation at libgcc/config/rs6000/ibm-ldouble.c, if the number if non finite, there is not check if it a NaN before actually summing all the components. A possible solution would be to add an extra test and return the first sum if the number if not infinity: Index: libgcc/config/rs6000/ibm-ldouble.c =================================================================== --- libgcc/config/rs6000/ibm-ldouble.c (revision 199159) +++ libgcc/config/rs6000/ibm-ldouble.c (working copy) @@ -104,6 +104,8 @@ if (nonfinite (z)) { + if (z != inf()) + return z; z = cc + aa + c + a; if (nonfinite (z)) return z; ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug target/57363] IBM long double: adding NaN and number raises inexact exception 2013-05-21 19:42 [Bug target/57363] New: IBM long double: adding NaN and number raises inexact exception azanella at linux dot vnet.ibm.com @ 2013-07-02 18:43 ` rth at gcc dot gnu.org 2013-07-03 13:43 ` azanella at linux dot vnet.ibm.com ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: rth at gcc dot gnu.org @ 2013-07-02 18:43 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57363 Richard Henderson <rth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rth at gcc dot gnu.org --- Comment #1 from Richard Henderson <rth at gcc dot gnu.org> --- (In reply to Adhemerval Zanella from comment #0) > Adding any number to NaN should not raise any exception. Not quite true -- QNaN should not raise any exception, but SNaN should raise Invalid. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug target/57363] IBM long double: adding NaN and number raises inexact exception 2013-05-21 19:42 [Bug target/57363] New: IBM long double: adding NaN and number raises inexact exception azanella at linux dot vnet.ibm.com 2013-07-02 18:43 ` [Bug target/57363] " rth at gcc dot gnu.org @ 2013-07-03 13:43 ` azanella at linux dot vnet.ibm.com 2013-11-13 20:59 ` uweigand at gcc dot gnu.org 2013-12-03 19:00 ` uweigand at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: azanella at linux dot vnet.ibm.com @ 2013-07-03 13:43 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57363 --- Comment #2 from Adhemerval Zanella <azanella at linux dot vnet.ibm.com> --- You are correct and I meant in my first comment QNaN for the NaN work. And I believe the patch is still correct: for IBM long double SNaN will be represented by first double being the NaN (the second double is ignored) and the first sum (z = a + c) will trigger exception if any. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug target/57363] IBM long double: adding NaN and number raises inexact exception 2013-05-21 19:42 [Bug target/57363] New: IBM long double: adding NaN and number raises inexact exception azanella at linux dot vnet.ibm.com 2013-07-02 18:43 ` [Bug target/57363] " rth at gcc dot gnu.org 2013-07-03 13:43 ` azanella at linux dot vnet.ibm.com @ 2013-11-13 20:59 ` uweigand at gcc dot gnu.org 2013-12-03 19:00 ` uweigand at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: uweigand at gcc dot gnu.org @ 2013-11-13 20:59 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57363 Ulrich Weigand <uweigand at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |uweigand at gcc dot gnu.org --- Comment #3 from Ulrich Weigand <uweigand at gcc dot gnu.org> --- Hi Adhemerval, I'm also seeing that this patch fixes some glibc failures. What's the status of this? Were you planning to submit it for inclusion? B.t.w. I'm wondering if we don't need to use + if (fabs (z) != inf()) + return z; instead; z could still be minus infinity, right? ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug target/57363] IBM long double: adding NaN and number raises inexact exception 2013-05-21 19:42 [Bug target/57363] New: IBM long double: adding NaN and number raises inexact exception azanella at linux dot vnet.ibm.com ` (2 preceding siblings ...) 2013-11-13 20:59 ` uweigand at gcc dot gnu.org @ 2013-12-03 19:00 ` uweigand at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: uweigand at gcc dot gnu.org @ 2013-12-03 19:00 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57363 Ulrich Weigand <uweigand at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |FIXED --- Comment #4 from Ulrich Weigand <uweigand at gcc dot gnu.org> --- Fixed. http://gcc.gnu.org/ml/gcc-cvs/2013-12/msg00087.html ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-12-03 19:00 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-05-21 19:42 [Bug target/57363] New: IBM long double: adding NaN and number raises inexact exception azanella at linux dot vnet.ibm.com 2013-07-02 18:43 ` [Bug target/57363] " rth at gcc dot gnu.org 2013-07-03 13:43 ` azanella at linux dot vnet.ibm.com 2013-11-13 20:59 ` uweigand at gcc dot gnu.org 2013-12-03 19:00 ` uweigand at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).