mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-01 07:44:05 +08:00
expr.c (external_spec_function): Add ieee_support_subnormal to list of IEEE inquiry functions.
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org> * expr.c (external_spec_function): Add ieee_support_subnormal to list of IEEE inquiry functions. 2018-12-29 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. 2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org> * gfortran.dg/ieee/ieee_11.F90: New test. From-SVN: r267468
This commit is contained in:
parent
600845521e
commit
ede9dea5c4
@ -1,3 +1,8 @@
|
||||
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
* expr.c (external_spec_function): Add ieee_support_subnormal to list
|
||||
of IEEE inquiry functions.
|
||||
|
||||
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
* cpp.c (gfc_cpp_init): Add pre-defined macros for INTEGER(1)
|
||||
|
@ -3068,6 +3068,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")
|
||||
|
@ -1,3 +1,7 @@
|
||||
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
* gfortran.dg/ieee/ieee_11.F90: New test.
|
||||
|
||||
2018-12-29 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||
|
||||
* gcc.target/msp430/critical-interrupt.c: New test.
|
||||
|
74
gcc/testsuite/gfortran.dg/ieee/ieee_11.F90
Normal file
74
gcc/testsuite/gfortran.dg/ieee/ieee_11.F90
Normal file
@ -0,0 +1,74 @@
|
||||
! { dg-do run }
|
||||
program foo
|
||||
|
||||
use ieee_arithmetic
|
||||
|
||||
implicit none
|
||||
|
||||
call test04
|
||||
call test08
|
||||
call test10
|
||||
call test16
|
||||
|
||||
contains
|
||||
|
||||
subroutine test04
|
||||
real(4) x, y
|
||||
if (ieee_support_subnormal(x)) then
|
||||
x = ieee_value(x, ieee_positive_subnormal)
|
||||
y = ieee_value(y, ieee_positive_denormal)
|
||||
if (x /= y) stop 1
|
||||
x = ieee_value(x, ieee_negative_subnormal)
|
||||
y = ieee_value(y, ieee_negative_denormal)
|
||||
if (x /= y) stop 2
|
||||
end if
|
||||
end subroutine test04
|
||||
|
||||
subroutine test08
|
||||
real(8) x, y
|
||||
if (ieee_support_subnormal(x)) then
|
||||
x = ieee_value(x, ieee_positive_subnormal)
|
||||
y = ieee_value(y, ieee_positive_denormal)
|
||||
if (x /= y) stop 1
|
||||
x = ieee_value(x, ieee_negative_subnormal)
|
||||
y = ieee_value(y, ieee_negative_denormal)
|
||||
if (x /= y) stop 2
|
||||
end if
|
||||
end subroutine test08
|
||||
|
||||
#ifdef __GFC_REAL_10__
|
||||
subroutine test10
|
||||
real(10) x, y
|
||||
if (ieee_support_subnormal(x)) then
|
||||
x = ieee_value(x, ieee_positive_subnormal)
|
||||
y = ieee_value(y, ieee_positive_denormal)
|
||||
if (x /= y) stop 1
|
||||
x = ieee_value(x, ieee_negative_subnormal)
|
||||
y = ieee_value(y, ieee_negative_denormal)
|
||||
if (x /= y) stop 2
|
||||
end if
|
||||
end subroutine test10
|
||||
#else
|
||||
subroutine test10
|
||||
end subroutine test10
|
||||
#endif
|
||||
|
||||
#ifdef __GFC_REAL_16__
|
||||
subroutine test16
|
||||
real(16) x, y
|
||||
if (ieee_support_subnormal(x)) then
|
||||
x = ieee_value(x, ieee_positive_subnormal)
|
||||
y = ieee_value(y, ieee_positive_denormal)
|
||||
if (x /= y) stop 1
|
||||
x = ieee_value(x, ieee_negative_subnormal)
|
||||
y = ieee_value(y, ieee_negative_denormal)
|
||||
if (x /= y) stop 2
|
||||
end if
|
||||
end subroutine test16
|
||||
#else
|
||||
subroutine test16
|
||||
end subroutine test16
|
||||
#endif
|
||||
|
||||
|
||||
end program foo
|
@ -1,3 +1,11 @@
|
||||
2018-12-29 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.
|
||||
|
||||
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/88342
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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)
|
||||
@ -1359,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.)
|
||||
@ -1371,6 +1374,16 @@ 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
|
||||
|
||||
SUPPORTMACRO(IEEE_SUPPORT_DIVIDE,4,.true.)
|
||||
|
@ -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), &
|
||||
|
@ -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) \
|
||||
|
Loading…
Reference in New Issue
Block a user