@@ -22,6 +22,23 @@ module iso_fortran_env
2222 compiler_options = > __builtin_compiler_options, &
2323 compiler_version = > __builtin_compiler_version
2424
25+ use iso_fortran_env_impl, only: &
26+ selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, &
27+ safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, &
28+ int8, int16, int32, int64, int128, &
29+ logical8, logical16, logical32, logical64, &
30+ selectedReal16, selectedBfloat16, selectedReal32, &
31+ selectedReal64, selectedReal80, selectedReal64x2, &
32+ selectedReal128, &
33+ safeReal16, safeBfloat16, safeReal32, &
34+ safeReal64, safeReal80, safeReal64x2, &
35+ safeReal128, &
36+ real16, bfloat16, real32, real64, &
37+ real80, real64x2, real128, &
38+ integer_kinds = > __builtin_integer_kinds, &
39+ real_kinds = > __builtin_real_kinds, &
40+ logical_kinds = > __builtin_logical_kinds
41+
2542 implicit none
2643 private
2744
@@ -38,95 +55,22 @@ module iso_fortran_env
3855 pack ([selectedUCS_2], selectedUCS_2 >= 0 ), &
3956 pack ([selectedUnicode], selectedUnicode >= 0 )]
4057
41- integer , parameter :: &
42- selectedInt8 = selected_int_kind (2 ), &
43- selectedInt16 = selected_int_kind (4 ), &
44- selectedInt32 = selected_int_kind (9 ), &
45- selectedInt64 = selected_int_kind (18 ),&
46- selectedInt128 = selected_int_kind (38 ), &
47- safeInt8 = merge (selectedInt8, selected_int_kind (0 ), &
48- selectedInt8 >= 0 ), &
49- safeInt16 = merge (selectedInt16, selected_int_kind (0 ), &
50- selectedInt16 >= 0 ), &
51- safeInt32 = merge (selectedInt32, selected_int_kind (0 ), &
52- selectedInt32 >= 0 ), &
53- safeInt64 = merge (selectedInt64, selected_int_kind (0 ), &
54- selectedInt64 >= 0 ), &
55- safeInt128 = merge (selectedInt128, selected_int_kind (0 ), &
56- selectedInt128 >= 0 )
57- integer , parameter , public :: &
58- int8 = merge (selectedInt8, merge (- 2 , - 1 , selectedInt8 >= 0 ), &
59- digits (int (0 ,kind= safeInt8)) == 7 ), &
60- int16 = merge (selectedInt16, merge (- 2 , - 1 , selectedInt16 >= 0 ), &
61- digits (int (0 ,kind= safeInt16)) == 15 ), &
62- int32 = merge (selectedInt32, merge (- 2 , - 1 , selectedInt32 >= 0 ), &
63- digits (int (0 ,kind= safeInt32)) == 31 ), &
64- int64 = merge (selectedInt64, merge (- 2 , - 1 , selectedInt64 >= 0 ), &
65- digits (int (0 ,kind= safeInt64)) == 63 ), &
66- int128 = merge (selectedInt128, merge (- 2 , - 1 , selectedInt128 >= 0 ), &
67- digits (int (0 ,kind= safeInt128)) == 127 )
68-
69- integer , parameter , public :: integer_kinds(* ) = [ &
70- selected_int_kind (0 ), &
71- [(pack ([selected_int_kind (k)], &
72- selected_int_kind (k) >= 0 .and. &
73- selected_int_kind (k) /= selected_int_kind (k-1 )), &
74- integer :: k= 1 , 39 )]]
58+ public :: selectedInt8, selectedInt16, selectedInt32, selectedInt64, selectedInt128, &
59+ safeInt8, safeInt16, safeInt32, safeInt64, safeInt128, &
60+ int8, int16, int32, int64, int128
7561
76- integer , parameter , public :: &
77- logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64
78- integer , parameter , public :: logical_kinds(* ) = [ &
79- pack ([logical8], logical8 >= 0 ), &
80- pack ([logical16], logical16 >= 0 ), &
81- pack ([logical32], logical32 >= 0 ), &
82- pack ([logical64], logical64 >= 0 )]
62+ public :: logical8, logical16, logical32, logical64
8363
84- integer , parameter :: &
85- selectedReal16 = selected_real_kind (3 , 4 ), & ! IEEE half
86- selectedBfloat16 = selected_real_kind (2 , 37 ), & ! truncated IEEE single
87- selectedReal32 = selected_real_kind (6 , 37 ), & ! IEEE single
88- selectedReal64 = selected_real_kind (15 , 307 ), & ! IEEE double
89- selectedReal80 = selected_real_kind (18 , 4931 ), & ! 80x87 extended
90- selectedReal64x2 = selected_real_kind (31 , 307 ), & ! "double-double"
91- selectedReal128 = selected_real_kind (33 , 4931 ), & ! IEEE quad
92- safeReal16 = merge (selectedReal16, selected_real_kind (0 ,0 ), &
93- selectedReal16 >= 0 ), &
94- safeBfloat16 = merge (selectedBfloat16, selected_real_kind (0 ,0 ), &
95- selectedBfloat16 >= 0 ), &
96- safeReal32 = merge (selectedReal32, selected_real_kind (0 ,0 ), &
97- selectedReal32 >= 0 ), &
98- safeReal64 = merge (selectedReal64, selected_real_kind (0 ,0 ), &
99- selectedReal64 >= 0 ), &
100- safeReal80 = merge (selectedReal80, selected_real_kind (0 ,0 ), &
101- selectedReal80 >= 0 ), &
102- safeReal64x2 = merge (selectedReal64x2, selected_real_kind (0 ,0 ), &
103- selectedReal64x2 >= 0 ), &
104- safeReal128 = merge (selectedReal128, selected_real_kind (0 ,0 ), &
105- selectedReal128 >= 0 )
106- integer , parameter , public :: &
107- real16 = merge (selectedReal16, merge (- 2 , - 1 , selectedReal16 >= 0 ), &
108- digits (real (0 ,kind= safeReal16)) == 11 ), &
109- bfloat16 = merge (selectedBfloat16, merge (- 2 , - 1 , selectedBfloat16 >= 0 ), &
110- digits (real (0 ,kind= safeBfloat16)) == 8 ), &
111- real32 = merge (selectedReal32, merge (- 2 , - 1 , selectedReal32 >= 0 ), &
112- digits (real (0 ,kind= safeReal32)) == 24 ), &
113- real64 = merge (selectedReal64, merge (- 2 , - 1 , selectedReal64 >= 0 ), &
114- digits (real (0 ,kind= safeReal64)) == 53 ), &
115- real80 = merge (selectedReal80, merge (- 2 , - 1 , selectedReal80 >= 0 ), &
116- digits (real (0 ,kind= safeReal80)) == 64 ), &
117- real64x2 = merge (selectedReal64x2, merge (- 2 , - 1 , selectedReal64x2 >= 0 ), &
118- digits (real (0 ,kind= safeReal64x2)) == 106 ), &
119- real128 = merge (selectedReal128, merge (- 2 , - 1 , selectedReal128 >= 0 ), &
120- digits (real (0 ,kind= safeReal128)) == 113 )
121-
122- integer , parameter , public :: real_kinds(* ) = [ &
123- pack ([real16], real16 >= 0 ), &
124- pack ([bfloat16], bfloat16 >= 0 ), &
125- pack ([real32], real32 >= 0 ), &
126- pack ([real64], real64 >= 0 ), &
127- pack ([real80], real80 >= 0 ), &
128- pack ([real64x2], real64x2 >= 0 ), &
129- pack ([real128], real128 >= 0 )]
64+ public :: selectedReal16, selectedBfloat16, selectedReal32, &
65+ selectedReal64, selectedReal80, selectedReal64x2, &
66+ selectedReal128, &
67+ safeReal16, safeBfloat16, safeReal32, &
68+ safeReal64, safeReal80, safeReal64x2, &
69+ safeReal128, &
70+ real16, bfloat16, real32, real64, &
71+ real80, real64x2, real128
72+
73+ public :: integer_kinds, real_kinds, logical_kinds
13074
13175 integer , parameter , public :: current_team = - 1 , &
13276 initial_team = - 2 , &
0 commit comments