Ping. 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 <ka...@gcc.gnu.org> > > * expr.c (external_spec_function): Add ieee_support_subnormal to list > of IEEE inquiry functions. > > > 2018-12-25 Steven G. Kargl <ka...@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) \ -- Steve 20170425 https://www.youtube.com/watch?v=VWUpyCsUKR4 20161221 https://www.youtube.com/watch?v=IbCHE-hONow