diff options
Diffstat (limited to 'flang/module/__fortran_builtins.f90')
-rw-r--r-- | flang/module/__fortran_builtins.f90 | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/flang/module/__fortran_builtins.f90 b/flang/module/__fortran_builtins.f90 index 4746ca2..b33d843 100644 --- a/flang/module/__fortran_builtins.f90 +++ b/flang/module/__fortran_builtins.f90 @@ -6,6 +6,8 @@ ! !===------------------------------------------------------------------------===! +include '../include/flang/Runtime/magic-numbers.h' + ! These naming shenanigans prevent names from Fortran intrinsic modules ! from being usable on INTRINSIC statements, and force the program ! to USE the standard intrinsic modules in order to access the @@ -49,6 +51,42 @@ module __fortran_builtins integer(kind=int64), private :: __count end type + type, public :: __builtin_ieee_flag_type + integer(kind=1), private :: flag = 0 + end type + + type(__builtin_ieee_flag_type), parameter, public :: & + __builtin_ieee_invalid = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_INVALID), & + __builtin_ieee_overflow = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_OVERFLOW), & + __builtin_ieee_divide_by_zero = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_DIVIDE_BY_ZERO), & + __builtin_ieee_underflow = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_UNDERFLOW), & + __builtin_ieee_inexact = & + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_INEXACT), & + __builtin_ieee_denorm = & ! extension + __builtin_ieee_flag_type(_FORTRAN_RUNTIME_IEEE_DENORM) + + type, public :: __builtin_ieee_round_type + integer(kind=1), private :: mode = 0 + end type + + type(__builtin_ieee_round_type), parameter, public :: & + __builtin_ieee_to_zero = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_TO_ZERO), & + __builtin_ieee_nearest = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_NEAREST), & + __builtin_ieee_up = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_UP), & + __builtin_ieee_down = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_DOWN), & + __builtin_ieee_away = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_AWAY), & + __builtin_ieee_other = & + __builtin_ieee_round_type(_FORTRAN_RUNTIME_IEEE_OTHER) + type, public :: __builtin_team_type integer(kind=int64), private :: __id end type @@ -74,8 +112,10 @@ module __fortran_builtins intrinsic :: __builtin_ieee_selected_real_kind intrinsic :: __builtin_ieee_support_datatype, & __builtin_ieee_support_denormal, __builtin_ieee_support_divide, & + __builtin_ieee_support_flag, __builtin_ieee_support_halting, & __builtin_ieee_support_inf, __builtin_ieee_support_io, & - __builtin_ieee_support_nan, __builtin_ieee_support_sqrt, & + __builtin_ieee_support_nan, __builtin_ieee_support_rounding, & + __builtin_ieee_support_sqrt, & __builtin_ieee_support_standard, __builtin_ieee_support_subnormal, & __builtin_ieee_support_underflow_control public :: __builtin_fma @@ -87,8 +127,10 @@ module __fortran_builtins public :: __builtin_ieee_selected_real_kind public :: __builtin_ieee_support_datatype, & __builtin_ieee_support_denormal, __builtin_ieee_support_divide, & + __builtin_ieee_support_flag, __builtin_ieee_support_halting, & __builtin_ieee_support_inf, __builtin_ieee_support_io, & - __builtin_ieee_support_nan, __builtin_ieee_support_sqrt, & + __builtin_ieee_support_nan, __builtin_ieee_support_rounding, & + __builtin_ieee_support_sqrt, & __builtin_ieee_support_standard, __builtin_ieee_support_subnormal, & __builtin_ieee_support_underflow_control |