[PATCH,fortran] Add support for IEEE_SUBNORMAL
Jerry DeLisle
jvdelisle@charter.net
Sat Dec 29 19:16:00 GMT 2018
On 12/28/18 10:44 AM, Steve Kargl wrote:
> Ping.
OK, thanks.
Jerry
>
> On Tue, Dec 25, 2018 at 02:36:40PM -0800, Steve Kargl wrote:
>> Fortran 2018 has added IEEE_SUBNORMAL, IEEE_POSITIVE_SUBNORMAL, and
>> IEEE_NEGATIVE_SUBNORMAL as counterparts the same features with the
>> DENORMAL name. The attached patch allows gfortran to recognize
>> and do the right thing with these featuers. OK to commit?
>>
>> 2018-12-25 Steven G. Kargl <kargl@gcc.gnu.org>
>>
>> * expr.c (external_spec_function): Add ieee_support_subnormal to list
>> of IEEE inquiry functions.
>>
>>
>> 2018-12-25 Steven G. Kargl <kargl@gcc.gnu.org>
>> * gfortran.map: Expose subnormal functions in dynamic
>> library.
>> * ieee/ieee_arithmetic.F90: Add support for IEEE_SUBNORMAL,
>> IEEE_POSITIVE_SUBNORMAL, and IEEE_NEGATIVE_SUBNORMAL.
>> * ieee/ieee_helper.c: Ditto.
>> * ieee/ieee_features.F90: Add IEEE_SUBNORMAL.
>>
>> --
>> Steve
>
>> Index: gcc/fortran/expr.c
>> ===================================================================
>> --- gcc/fortran/expr.c (revision 267418)
>> +++ gcc/fortran/expr.c (working copy)
>> @@ -3061,6 +3061,7 @@ external_spec_function (gfc_expr *e)
>> || !strcmp (f->name, "ieee_support_halting")
>> || !strcmp (f->name, "ieee_support_datatype")
>> || !strcmp (f->name, "ieee_support_denormal")
>> + || !strcmp (f->name, "ieee_support_subnormal")
>> || !strcmp (f->name, "ieee_support_divide")
>> || !strcmp (f->name, "ieee_support_inf")
>> || !strcmp (f->name, "ieee_support_io")
>> Index: libgfortran/gfortran.map
>> ===================================================================
>> --- libgfortran/gfortran.map (revision 267418)
>> +++ libgfortran/gfortran.map (working copy)
>> @@ -1573,4 +1573,9 @@ GFORTRAN_9 {
>> _gfortran_sfindloc2_s1;
>> _gfortran_sfindloc2_s4;
>> _gfortran_st_wait_async;
>> + __ieee_arithmetic_MOD_ieee_support_subnormal_10;
>> + __ieee_arithmetic_MOD_ieee_support_subnormal_16;
>> + __ieee_arithmetic_MOD_ieee_support_subnormal_4;
>> + __ieee_arithmetic_MOD_ieee_support_subnormal_8;
>> + __ieee_arithmetic_MOD_ieee_support_subnormal_noarg;
>> };
>> Index: libgfortran/ieee/ieee_arithmetic.F90
>> ===================================================================
>> --- libgfortran/ieee/ieee_arithmetic.F90 (revision 267418)
>> +++ libgfortran/ieee/ieee_arithmetic.F90 (working copy)
>> @@ -55,9 +55,11 @@ module IEEE_ARITHMETIC
>> IEEE_NEGATIVE_INF = IEEE_CLASS_TYPE(3), &
>> IEEE_NEGATIVE_NORMAL = IEEE_CLASS_TYPE(4), &
>> IEEE_NEGATIVE_DENORMAL = IEEE_CLASS_TYPE(5), &
>> + IEEE_NEGATIVE_SUBNORMAL= IEEE_CLASS_TYPE(5), &
>> IEEE_NEGATIVE_ZERO = IEEE_CLASS_TYPE(6), &
>> IEEE_POSITIVE_ZERO = IEEE_CLASS_TYPE(7), &
>> IEEE_POSITIVE_DENORMAL = IEEE_CLASS_TYPE(8), &
>> + IEEE_POSITIVE_SUBNORMAL= IEEE_CLASS_TYPE(8), &
>> IEEE_POSITIVE_NORMAL = IEEE_CLASS_TYPE(9), &
>> IEEE_POSITIVE_INF = IEEE_CLASS_TYPE(10)
>>
>> @@ -795,6 +797,7 @@ REM_MACRO(4,4,4)
>>
>> SUPPORTGENERIC(IEEE_SUPPORT_DATATYPE)
>> SUPPORTGENERIC(IEEE_SUPPORT_DENORMAL)
>> +SUPPORTGENERIC(IEEE_SUPPORT_SUBNORMAL)
>> SUPPORTGENERIC(IEEE_SUPPORT_DIVIDE)
>> SUPPORTGENERIC(IEEE_SUPPORT_INF)
>> SUPPORTGENERIC(IEEE_SUPPORT_IO)
>> @@ -1243,7 +1362,7 @@ SUPPORTMACRO(IEEE_SUPPORT_DATATYPE,16,.true.)
>> #endif
>> SUPPORTMACRO_NOARG(IEEE_SUPPORT_DATATYPE,.true.)
>>
>> -! IEEE_SUPPORT_DENORMAL
>> +! IEEE_SUPPORT_DENORMAL and IEEE_SUPPORT_SUBNORMAL
>>
>> SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,4,.true.)
>> SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,8,.true.)
>> @@ -1254,6 +1373,16 @@ SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,10,.true.)
>> SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,16,.true.)
>> #endif
>> SUPPORTMACRO_NOARG(IEEE_SUPPORT_DENORMAL,.true.)
>> +
>> +SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,4,.true.)
>> +SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,8,.true.)
>> +#ifdef HAVE_GFC_REAL_10
>> +SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,10,.true.)
>> +#endif
>> +#ifdef HAVE_GFC_REAL_16
>> +SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,16,.true.)
>> +#endif
>> +SUPPORTMACRO_NOARG(IEEE_SUPPORT_SUBNORMAL,.true.)
>>
>> ! IEEE_SUPPORT_DIVIDE
>>
>> Index: libgfortran/ieee/ieee_features.F90
>> ===================================================================
>> --- libgfortran/ieee/ieee_features.F90 (revision 267418)
>> +++ libgfortran/ieee/ieee_features.F90 (working copy)
>> @@ -36,6 +36,7 @@ module IEEE_FEATURES
>> type(IEEE_FEATURES_TYPE), parameter, public :: &
>> IEEE_DATATYPE = IEEE_FEATURES_TYPE(0), &
>> IEEE_DENORMAL = IEEE_FEATURES_TYPE(1), &
>> + IEEE_SUBNORMAL = IEEE_FEATURES_TYPE(1), &
>> IEEE_DIVIDE = IEEE_FEATURES_TYPE(2), &
>> IEEE_HALTING = IEEE_FEATURES_TYPE(3), &
>> IEEE_INEXACT_FLAG = IEEE_FEATURES_TYPE(4), &
>> Index: libgfortran/ieee/ieee_helper.c
>> ===================================================================
>> --- libgfortran/ieee/ieee_helper.c (revision 267418)
>> +++ libgfortran/ieee/ieee_helper.c (working copy)
>> @@ -50,7 +50,8 @@ internal_proto(ieee_class_helper_16);
>> enum { IEEE_OTHER_VALUE = 0, IEEE_SIGNALING_NAN, IEEE_QUIET_NAN,
>> IEEE_NEGATIVE_INF, IEEE_NEGATIVE_NORMAL, IEEE_NEGATIVE_DENORMAL,
>> IEEE_NEGATIVE_ZERO, IEEE_POSITIVE_ZERO, IEEE_POSITIVE_DENORMAL,
>> - IEEE_POSITIVE_NORMAL, IEEE_POSITIVE_INF };
>> + IEEE_POSITIVE_NORMAL, IEEE_POSITIVE_INF, IEEE_SUBNORMAL,
>> + IEEE_NEGATIVE_SUBNORMAL, IEEE_POSITIVE_SUBNORMAL };
>>
>> #define CLASSMACRO(TYPE) \
>> int ieee_class_helper_ ## TYPE (GFC_REAL_ ## TYPE *value) \
>
>
More information about the Fortran
mailing list