aboutsummaryrefslogtreecommitdiff
path: root/flang/module/__fortran_builtins.f90
diff options
context:
space:
mode:
Diffstat (limited to 'flang/module/__fortran_builtins.f90')
-rw-r--r--flang/module/__fortran_builtins.f9046
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