Fortran: allow IEEE_VALUE to correctly return signaling NaNs
commit90045c5df5b3c8853e7740fb72a11aead1c489bb
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Mon, 10 Jan 2022 16:04:34 +0000 (10 17:04 +0100)
committerFrancois-Xavier Coudert <fxcoudert@gmail.com>
Sun, 16 Jan 2022 21:57:45 +0000 (16 22:57 +0100)
tree5a59d689ecb0d21bb9aa1cb3e3a1d2e479a5f07b
parentbca1c431affee41ecadb7f29d8d65142a73e0ebf
Fortran: allow IEEE_VALUE to correctly return signaling NaNs

I moved the library implementation of IEEE_VALUE in libgfortran from
Fortran to C code, which gives us access to GCC's built-ins for NaN generation
(both quiet and signalling). It will be perform better than the current
Fortran implementation.

libgfortran/ChangeLog:

PR fortran/82207
* mk-kinds-h.sh: Add values for TINY.
* ieee/ieee_arithmetic.F90: Call C helper functions for
IEEE_VALUE.
* ieee/ieee_helper.c: New functions ieee_value_helper_N for each
floating-point type.

gcc/testsuite/ChangeLog:

PR fortran/82207
* gfortran.dg/ieee/ieee_10.f90: Do not create signaling NaNs.
* gfortran.dg/ieee/signaling_2.f90: New test.
* gfortran.dg/ieee/signaling_2_c.c: New file.
gcc/testsuite/gfortran.dg/ieee/ieee_10.f90
gcc/testsuite/gfortran.dg/ieee/signaling_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/ieee/signaling_2_c.c [new file with mode: 0644]
libgfortran/ieee/ieee_arithmetic.F90
libgfortran/ieee/ieee_helper.c
libgfortran/mk-kinds-h.sh