From 7c4c65d11469d29403d5a88316445ec95cd3c3f8 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Wed, 31 Aug 2022 15:22:50 +0200 Subject: fortran: Add IEEE_SIGNBIT and IEEE_FMA functions The functions are added to the IEEE_ARITHMETIC module, but are entirely expanded in the front-end, using GCC built-ins. 2022-08-31 Francois-Xavier Coudert PR fortran/95644 gcc/fortran/ * f95-lang.cc (gfc_init_builtin_functions): Declare FMA built-ins. * mathbuiltins.def: Declare FMA built-ins. * trans-intrinsic.cc (conv_intrinsic_ieee_fma): New function. (conv_intrinsic_ieee_signbit): New function. (gfc_build_intrinsic_lib_fndecls): Add cases for FMA and SIGNBIT. gcc/testsuite/ * gfortran.dg/ieee/fma_1.f90: New test. * gfortran.dg/ieee/signbit_1.f90: New test. libgfortran/ * ieee/ieee_arithmetic.F90: Add IEEE_SIGNBIT and IEEE_FMA. --- libgfortran/ieee/ieee_arithmetic.F90 | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) (limited to 'libgfortran') diff --git a/libgfortran/ieee/ieee_arithmetic.F90 b/libgfortran/ieee/ieee_arithmetic.F90 index c8ef3e2..4e01aa5 100644 --- a/libgfortran/ieee/ieee_arithmetic.F90 +++ b/libgfortran/ieee/ieee_arithmetic.F90 @@ -343,6 +343,39 @@ UNORDERED_MACRO(4,4) end interface public :: IEEE_UNORDERED + ! IEEE_FMA + + interface + elemental real(kind=4) function _gfortran_ieee_fma_4 (A, B, C) + real(kind=4), intent(in) :: A, B, C + end function + elemental real(kind=8) function _gfortran_ieee_fma_8 (A, B, C) + real(kind=8), intent(in) :: A, B, C + end function +#ifdef HAVE_GFC_REAL_10 + elemental real(kind=10) function _gfortran_ieee_fma_10 (A, B, C) + real(kind=10), intent(in) :: A, B, C + end function +#endif +#ifdef HAVE_GFC_REAL_16 + elemental real(kind=16) function _gfortran_ieee_fma_16 (A, B, C) + real(kind=16), intent(in) :: A, B, C + end function +#endif + end interface + + interface IEEE_FMA + procedure & +#ifdef HAVE_GFC_REAL_16 + _gfortran_ieee_fma_16, & +#endif +#ifdef HAVE_GFC_REAL_10 + _gfortran_ieee_fma_10, & +#endif + _gfortran_ieee_fma_8, _gfortran_ieee_fma_4 + end interface + public :: IEEE_FMA + ! IEEE_LOGB interface @@ -702,6 +735,39 @@ REM_MACRO(4,4,4) end interface public :: IEEE_SCALB + ! IEEE_SIGNBIT + + interface + elemental logical function _gfortran_ieee_signbit_4 (X) + real(kind=4), intent(in) :: X + end function + elemental logical function _gfortran_ieee_signbit_8 (X) + real(kind=8), intent(in) :: X + end function +#ifdef HAVE_GFC_REAL_10 + elemental logical function _gfortran_ieee_signbit_10 (X) + real(kind=10), intent(in) :: X + end function +#endif +#ifdef HAVE_GFC_REAL_16 + elemental logical function _gfortran_ieee_signbit_16 (X) + real(kind=16), intent(in) :: X + end function +#endif + end interface + + interface IEEE_SIGNBIT + procedure & +#ifdef HAVE_GFC_REAL_16 + _gfortran_ieee_signbit_16, & +#endif +#ifdef HAVE_GFC_REAL_10 + _gfortran_ieee_signbit_10, & +#endif + _gfortran_ieee_signbit_8, _gfortran_ieee_signbit_4 + end interface + public :: IEEE_SIGNBIT + ! IEEE_VALUE interface IEEE_VALUE -- cgit v1.1 From 5b3496e2ea632463f4118928a87639454c87a859 Mon Sep 17 00:00:00 2001 From: GCC Administrator Date: Sun, 11 Sep 2022 00:16:56 +0000 Subject: Daily bump. --- libgfortran/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index ad1e03c..51c9f5c 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2022-09-10 Francois-Xavier Coudert + + PR fortran/95644 + * ieee/ieee_arithmetic.F90: Add IEEE_SIGNBIT and IEEE_FMA. + 2022-08-26 Jakub Jelinek PR fortran/106579 -- cgit v1.1