Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion flang-rt/lib/runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ set(host_sources
ieee_exceptions.f90
ieee_features.f90
iso_c_binding.f90
iso_fortran_env_impl.f90
iso_fortran_env.f90

command.cpp
Expand Down
155 changes: 117 additions & 38 deletions flang-rt/lib/runtime/iso_fortran_env.f90
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

! See Fortran 2023, subclause 16.10.2

#include '../include/flang/Runtime/magic-numbers.h'
#include '../../../flang/include/flang/Runtime/magic-numbers.h'

module iso_fortran_env

Expand All @@ -22,26 +22,6 @@ module iso_fortran_env
compiler_options => __builtin_compiler_options, &
compiler_version => __builtin_compiler_version

use iso_fortran_env_impl, only: &
selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, &
safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, &
int8, int16, int32, int64, int128, &
selectedUInt8, selectedUInt16, selectedUInt32, selectedUInt64, selectedUInt128, &
safeUInt8, safeUInt16, safeUInt32, safeUInt64, safeUInt128, &
uint8, uint16, uint32, uint64, uint128, &
logical8, logical16, logical32, logical64, &
selectedReal16, selectedBfloat16, selectedReal32, &
selectedReal64, selectedReal80, selectedReal64x2, &
selectedReal128, &
safeReal16, safeBfloat16, safeReal32, &
safeReal64, safeReal80, safeReal64x2, &
safeReal128, &
real16, bfloat16, real32, real64, &
real80, real64x2, real128, &
integer_kinds => __builtin_integer_kinds, &
real_kinds => __builtin_real_kinds, &
logical_kinds => __builtin_logical_kinds

implicit none
private

Expand All @@ -58,26 +38,125 @@ module iso_fortran_env
pack([selectedUCS_2], selectedUCS_2 >= 0), &
pack([selectedUnicode], selectedUnicode >= 0)]

public :: selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, &
safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, &
int8, int16, int32, int64, int128

public :: selectedUInt8, selectedUInt16, selectedUInt32, selectedUInt64, selectedUInt128, &
safeUInt8, safeUInt16, safeUInt32, safeUInt64, safeUInt128, &
uint8, uint16, uint32, uint64, uint128
integer, parameter :: &
selectedInt8 = selected_int_kind(2), &
selectedInt16 = selected_int_kind(4), &
selectedInt32 = selected_int_kind(9), &
selectedInt64 = selected_int_kind(18),&
selectedInt128 = selected_int_kind(38), &
safeInt8 = merge(selectedInt8, selected_int_kind(0), &
selectedInt8 >= 0), &
safeInt16 = merge(selectedInt16, selected_int_kind(0), &
selectedInt16 >= 0), &
safeInt32 = merge(selectedInt32, selected_int_kind(0), &
selectedInt32 >= 0), &
safeInt64 = merge(selectedInt64, selected_int_kind(0), &
selectedInt64 >= 0), &
safeInt128 = merge(selectedInt128, selected_int_kind(0), &
selectedInt128 >= 0)
integer, parameter, public :: &
int8 = merge(selectedInt8, merge(-2, -1, selectedInt8 >= 0), &
digits(int(0,kind=safeInt8)) == 7), &
int16 = merge(selectedInt16, merge(-2, -1, selectedInt16 >= 0), &
digits(int(0,kind=safeInt16)) == 15), &
int32 = merge(selectedInt32, merge(-2, -1, selectedInt32 >= 0), &
digits(int(0,kind=safeInt32)) == 31), &
int64 = merge(selectedInt64, merge(-2, -1, selectedInt64 >= 0), &
digits(int(0,kind=safeInt64)) == 63), &
int128 = merge(selectedInt128, merge(-2, -1, selectedInt128 >= 0), &
digits(int(0,kind=safeInt128)) == 127)

! UNSIGNED types
integer, parameter, public :: &
selectedUInt8 = selected_unsigned_kind(2), &
selectedUInt16 = selected_unsigned_kind(4), &
selectedUInt32 = selected_unsigned_kind(9), &
selectedUInt64 = selected_unsigned_kind(18),&
selectedUInt128 = selected_unsigned_kind(38), &
safeUInt8 = merge(selectedUInt8, selected_unsigned_kind(0), &
selectedUInt8 >= 0), &
safeUInt16 = merge(selectedUInt16, selected_unsigned_kind(0), &
selectedUInt16 >= 0), &
safeUInt32 = merge(selectedUInt32, selected_unsigned_kind(0), &
selectedUInt32 >= 0), &
safeUInt64 = merge(selectedUInt64, selected_unsigned_kind(0), &
selectedUInt64 >= 0), &
safeUInt128 = merge(selectedUInt128, selected_unsigned_kind(0), &
selectedUInt128 >= 0)

public :: logical8, logical16, logical32, logical64
integer, parameter, public :: &
uint8 = merge(selectedUInt8, merge(-2, -1, selectedUInt8 >= 0), &
digits(uint(0,kind=safeUInt8)) == 8), &
uint16 = merge(selectedUInt16, merge(-2, -1, selectedUInt16 >= 0), &
digits(uint(0,kind=safeUInt16)) == 16), &
uint32 = merge(selectedUInt32, merge(-2, -1, selectedUInt32 >= 0), &
digits(uint(0,kind=safeUInt32)) == 32), &
uint64 = merge(selectedUInt64, merge(-2, -1, selectedUInt64 >= 0), &
digits(uint(0,kind=safeUInt64)) == 64), &
uint128 = merge(selectedUInt128, merge(-2, -1, selectedUInt128 >= 0), &
digits(uint(0,kind=safeUInt128)) == 128)

integer, parameter, public :: integer_kinds(*) = [ &
selected_int_kind(0), &
[(pack([selected_int_kind(k)], &
selected_int_kind(k) >= 0 .and. &
selected_int_kind(k) /= selected_int_kind(k-1)), &
integer :: k=1, 39)]]

public :: selectedReal16, selectedBfloat16, selectedReal32, &
selectedReal64, selectedReal80, selectedReal64x2, &
selectedReal128, &
safeReal16, safeBfloat16, safeReal32, &
safeReal64, safeReal80, safeReal64x2, &
safeReal128, &
real16, bfloat16, real32, real64, &
real80, real64x2, real128
integer, parameter, public :: &
logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64
integer, parameter, public :: logical_kinds(*) = [ &
pack([logical8], logical8 >= 0), &
pack([logical16], logical16 >= 0), &
pack([logical32], logical32 >= 0), &
pack([logical64], logical64 >= 0)]

public :: integer_kinds, real_kinds, logical_kinds
integer, parameter :: &
selectedReal16 = selected_real_kind(3, 4), & ! IEEE half
selectedBfloat16 = selected_real_kind(2, 37), & ! truncated IEEE single
selectedReal32 = selected_real_kind(6, 37), & ! IEEE single
selectedReal64 = selected_real_kind(15, 307), & ! IEEE double
selectedReal80 = selected_real_kind(18, 4931), & ! 80x87 extended
selectedReal64x2 = selected_real_kind(31, 307), & ! "double-double"
selectedReal128 = selected_real_kind(33, 4931), & ! IEEE quad
safeReal16 = merge(selectedReal16, selected_real_kind(0,0), &
selectedReal16 >= 0), &
safeBfloat16 = merge(selectedBfloat16, selected_real_kind(0,0), &
selectedBfloat16 >= 0), &
safeReal32 = merge(selectedReal32, selected_real_kind(0,0), &
selectedReal32 >= 0), &
safeReal64 = merge(selectedReal64, selected_real_kind(0,0), &
selectedReal64 >= 0), &
safeReal80 = merge(selectedReal80, selected_real_kind(0,0), &
selectedReal80 >= 0), &
safeReal64x2 = merge(selectedReal64x2, selected_real_kind(0,0), &
selectedReal64x2 >= 0), &
safeReal128 = merge(selectedReal128, selected_real_kind(0,0), &
selectedReal128 >= 0)
integer, parameter, public :: &
real16 = merge(selectedReal16, merge(-2, -1, selectedReal16 >= 0), &
digits(real(0,kind=safeReal16)) == 11), &
bfloat16 = merge(selectedBfloat16, merge(-2, -1, selectedBfloat16 >= 0), &
digits(real(0,kind=safeBfloat16)) == 8), &
real32 = merge(selectedReal32, merge(-2, -1, selectedReal32 >= 0), &
digits(real(0,kind=safeReal32)) == 24), &
real64 = merge(selectedReal64, merge(-2, -1, selectedReal64 >= 0), &
digits(real(0,kind=safeReal64)) == 53), &
real80 = merge(selectedReal80, merge(-2, -1, selectedReal80 >= 0), &
digits(real(0,kind=safeReal80)) == 64), &
real64x2 = merge(selectedReal64x2, merge(-2, -1, selectedReal64x2 >= 0), &
digits(real(0,kind=safeReal64x2)) == 106), &
real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), &
digits(real(0,kind=safeReal128)) == 113)

integer, parameter, public :: real_kinds(*) = [ &
pack([real16], real16 >= 0), &
pack([bfloat16], bfloat16 >= 0), &
pack([real32], real32 >= 0), &
pack([real64], real64 >= 0), &
pack([real80], real80 >= 0), &
pack([real64x2], real64x2 >= 0), &
pack([real128], real128 >= 0)]

integer, parameter, public :: current_team = -1, &
initial_team = -2, &
Expand Down
144 changes: 0 additions & 144 deletions flang-rt/lib/runtime/iso_fortran_env_impl.f90

This file was deleted.