@@ -22,6 +22,23 @@ module iso_fortran_env
22
22
compiler_options = > __builtin_compiler_options, &
23
23
compiler_version = > __builtin_compiler_version
24
24
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
+
25
42
implicit none
26
43
private
27
44
@@ -38,95 +55,22 @@ module iso_fortran_env
38
55
pack ([selectedUCS_2], selectedUCS_2 >= 0 ), &
39
56
pack ([selectedUnicode], selectedUnicode >= 0 )]
40
57
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
75
61
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
83
63
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
130
74
131
75
integer , parameter , public :: current_team = - 1 , &
132
76
initial_team = - 2 , &
0 commit comments