annotate libgfortran/ieee/ieee_arithmetic.F90 @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! Implementation of the IEEE_ARITHMETIC standard intrinsic module
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 ! Copyright (C) 2013-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 ! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
kono
parents:
diff changeset
4 !
kono
parents:
diff changeset
5 ! This file is part of the GNU Fortran runtime library (libgfortran).
kono
parents:
diff changeset
6 !
kono
parents:
diff changeset
7 ! Libgfortran is free software; you can redistribute it and/or
kono
parents:
diff changeset
8 ! modify it under the terms of the GNU General Public
kono
parents:
diff changeset
9 ! License as published by the Free Software Foundation; either
kono
parents:
diff changeset
10 ! version 3 of the License, or (at your option) any later version.
kono
parents:
diff changeset
11 !
kono
parents:
diff changeset
12 ! Libgfortran is distributed in the hope that it will be useful,
kono
parents:
diff changeset
13 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
14 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
15 ! GNU General Public License for more details.
kono
parents:
diff changeset
16 !
kono
parents:
diff changeset
17 ! Under Section 7 of GPL version 3, you are granted additional
kono
parents:
diff changeset
18 ! permissions described in the GCC Runtime Library Exception, version
kono
parents:
diff changeset
19 ! 3.1, as published by the Free Software Foundation.
kono
parents:
diff changeset
20 !
kono
parents:
diff changeset
21 ! You should have received a copy of the GNU General Public License and
kono
parents:
diff changeset
22 ! a copy of the GCC Runtime Library Exception along with this program;
kono
parents:
diff changeset
23 ! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
kono
parents:
diff changeset
24 ! <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 #include "config.h"
kono
parents:
diff changeset
27 #include "kinds.inc"
kono
parents:
diff changeset
28 #include "c99_protos.inc"
kono
parents:
diff changeset
29 #include "fpu-target.inc"
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 module IEEE_ARITHMETIC
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 use IEEE_EXCEPTIONS
kono
parents:
diff changeset
34 implicit none
kono
parents:
diff changeset
35 private
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 ! Every public symbol from IEEE_EXCEPTIONS must be made public here
kono
parents:
diff changeset
38 public :: IEEE_FLAG_TYPE, IEEE_INVALID, IEEE_OVERFLOW, &
kono
parents:
diff changeset
39 IEEE_DIVIDE_BY_ZERO, IEEE_UNDERFLOW, IEEE_INEXACT, IEEE_USUAL, &
kono
parents:
diff changeset
40 IEEE_ALL, IEEE_STATUS_TYPE, IEEE_GET_FLAG, IEEE_GET_HALTING_MODE, &
kono
parents:
diff changeset
41 IEEE_GET_STATUS, IEEE_SET_FLAG, IEEE_SET_HALTING_MODE, &
kono
parents:
diff changeset
42 IEEE_SET_STATUS, IEEE_SUPPORT_FLAG, IEEE_SUPPORT_HALTING
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 ! Derived types and named constants
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 type, public :: IEEE_CLASS_TYPE
kono
parents:
diff changeset
47 private
kono
parents:
diff changeset
48 integer :: hidden
kono
parents:
diff changeset
49 end type
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 type(IEEE_CLASS_TYPE), parameter, public :: &
kono
parents:
diff changeset
52 IEEE_OTHER_VALUE = IEEE_CLASS_TYPE(0), &
kono
parents:
diff changeset
53 IEEE_SIGNALING_NAN = IEEE_CLASS_TYPE(1), &
kono
parents:
diff changeset
54 IEEE_QUIET_NAN = IEEE_CLASS_TYPE(2), &
kono
parents:
diff changeset
55 IEEE_NEGATIVE_INF = IEEE_CLASS_TYPE(3), &
kono
parents:
diff changeset
56 IEEE_NEGATIVE_NORMAL = IEEE_CLASS_TYPE(4), &
kono
parents:
diff changeset
57 IEEE_NEGATIVE_DENORMAL = IEEE_CLASS_TYPE(5), &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
58 IEEE_NEGATIVE_SUBNORMAL= IEEE_CLASS_TYPE(5), &
111
kono
parents:
diff changeset
59 IEEE_NEGATIVE_ZERO = IEEE_CLASS_TYPE(6), &
kono
parents:
diff changeset
60 IEEE_POSITIVE_ZERO = IEEE_CLASS_TYPE(7), &
kono
parents:
diff changeset
61 IEEE_POSITIVE_DENORMAL = IEEE_CLASS_TYPE(8), &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
62 IEEE_POSITIVE_SUBNORMAL= IEEE_CLASS_TYPE(8), &
111
kono
parents:
diff changeset
63 IEEE_POSITIVE_NORMAL = IEEE_CLASS_TYPE(9), &
kono
parents:
diff changeset
64 IEEE_POSITIVE_INF = IEEE_CLASS_TYPE(10)
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 type, public :: IEEE_ROUND_TYPE
kono
parents:
diff changeset
67 private
kono
parents:
diff changeset
68 integer :: hidden
kono
parents:
diff changeset
69 end type
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 type(IEEE_ROUND_TYPE), parameter, public :: &
kono
parents:
diff changeset
72 IEEE_NEAREST = IEEE_ROUND_TYPE(GFC_FPE_TONEAREST), &
kono
parents:
diff changeset
73 IEEE_TO_ZERO = IEEE_ROUND_TYPE(GFC_FPE_TOWARDZERO), &
kono
parents:
diff changeset
74 IEEE_UP = IEEE_ROUND_TYPE(GFC_FPE_UPWARD), &
kono
parents:
diff changeset
75 IEEE_DOWN = IEEE_ROUND_TYPE(GFC_FPE_DOWNWARD), &
kono
parents:
diff changeset
76 IEEE_OTHER = IEEE_ROUND_TYPE(0)
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 ! Equality operators on the derived types
kono
parents:
diff changeset
80 interface operator (==)
kono
parents:
diff changeset
81 module procedure IEEE_CLASS_TYPE_EQ, IEEE_ROUND_TYPE_EQ
kono
parents:
diff changeset
82 end interface
kono
parents:
diff changeset
83 public :: operator(==)
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 interface operator (/=)
kono
parents:
diff changeset
86 module procedure IEEE_CLASS_TYPE_NE, IEEE_ROUND_TYPE_NE
kono
parents:
diff changeset
87 end interface
kono
parents:
diff changeset
88 public :: operator (/=)
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 ! IEEE_IS_FINITE
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 interface
kono
parents:
diff changeset
94 elemental logical function _gfortran_ieee_is_finite_4(X)
kono
parents:
diff changeset
95 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
96 end function
kono
parents:
diff changeset
97 elemental logical function _gfortran_ieee_is_finite_8(X)
kono
parents:
diff changeset
98 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
99 end function
kono
parents:
diff changeset
100 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
101 elemental logical function _gfortran_ieee_is_finite_10(X)
kono
parents:
diff changeset
102 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
103 end function
kono
parents:
diff changeset
104 #endif
kono
parents:
diff changeset
105 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
106 elemental logical function _gfortran_ieee_is_finite_16(X)
kono
parents:
diff changeset
107 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
108 end function
kono
parents:
diff changeset
109 #endif
kono
parents:
diff changeset
110 end interface
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 interface IEEE_IS_FINITE
kono
parents:
diff changeset
113 procedure &
kono
parents:
diff changeset
114 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
115 _gfortran_ieee_is_finite_16, &
kono
parents:
diff changeset
116 #endif
kono
parents:
diff changeset
117 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
118 _gfortran_ieee_is_finite_10, &
kono
parents:
diff changeset
119 #endif
kono
parents:
diff changeset
120 _gfortran_ieee_is_finite_8, _gfortran_ieee_is_finite_4
kono
parents:
diff changeset
121 end interface
kono
parents:
diff changeset
122 public :: IEEE_IS_FINITE
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 ! IEEE_IS_NAN
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126 interface
kono
parents:
diff changeset
127 elemental logical function _gfortran_ieee_is_nan_4(X)
kono
parents:
diff changeset
128 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
129 end function
kono
parents:
diff changeset
130 elemental logical function _gfortran_ieee_is_nan_8(X)
kono
parents:
diff changeset
131 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
132 end function
kono
parents:
diff changeset
133 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
134 elemental logical function _gfortran_ieee_is_nan_10(X)
kono
parents:
diff changeset
135 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
136 end function
kono
parents:
diff changeset
137 #endif
kono
parents:
diff changeset
138 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
139 elemental logical function _gfortran_ieee_is_nan_16(X)
kono
parents:
diff changeset
140 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
141 end function
kono
parents:
diff changeset
142 #endif
kono
parents:
diff changeset
143 end interface
kono
parents:
diff changeset
144
kono
parents:
diff changeset
145 interface IEEE_IS_NAN
kono
parents:
diff changeset
146 procedure &
kono
parents:
diff changeset
147 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
148 _gfortran_ieee_is_nan_16, &
kono
parents:
diff changeset
149 #endif
kono
parents:
diff changeset
150 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
151 _gfortran_ieee_is_nan_10, &
kono
parents:
diff changeset
152 #endif
kono
parents:
diff changeset
153 _gfortran_ieee_is_nan_8, _gfortran_ieee_is_nan_4
kono
parents:
diff changeset
154 end interface
kono
parents:
diff changeset
155 public :: IEEE_IS_NAN
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 ! IEEE_IS_NEGATIVE
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 interface
kono
parents:
diff changeset
160 elemental logical function _gfortran_ieee_is_negative_4(X)
kono
parents:
diff changeset
161 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
162 end function
kono
parents:
diff changeset
163 elemental logical function _gfortran_ieee_is_negative_8(X)
kono
parents:
diff changeset
164 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
165 end function
kono
parents:
diff changeset
166 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
167 elemental logical function _gfortran_ieee_is_negative_10(X)
kono
parents:
diff changeset
168 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
169 end function
kono
parents:
diff changeset
170 #endif
kono
parents:
diff changeset
171 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
172 elemental logical function _gfortran_ieee_is_negative_16(X)
kono
parents:
diff changeset
173 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
174 end function
kono
parents:
diff changeset
175 #endif
kono
parents:
diff changeset
176 end interface
kono
parents:
diff changeset
177
kono
parents:
diff changeset
178 interface IEEE_IS_NEGATIVE
kono
parents:
diff changeset
179 procedure &
kono
parents:
diff changeset
180 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
181 _gfortran_ieee_is_negative_16, &
kono
parents:
diff changeset
182 #endif
kono
parents:
diff changeset
183 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
184 _gfortran_ieee_is_negative_10, &
kono
parents:
diff changeset
185 #endif
kono
parents:
diff changeset
186 _gfortran_ieee_is_negative_8, _gfortran_ieee_is_negative_4
kono
parents:
diff changeset
187 end interface
kono
parents:
diff changeset
188 public :: IEEE_IS_NEGATIVE
kono
parents:
diff changeset
189
kono
parents:
diff changeset
190 ! IEEE_IS_NORMAL
kono
parents:
diff changeset
191
kono
parents:
diff changeset
192 interface
kono
parents:
diff changeset
193 elemental logical function _gfortran_ieee_is_normal_4(X)
kono
parents:
diff changeset
194 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
195 end function
kono
parents:
diff changeset
196 elemental logical function _gfortran_ieee_is_normal_8(X)
kono
parents:
diff changeset
197 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
198 end function
kono
parents:
diff changeset
199 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
200 elemental logical function _gfortran_ieee_is_normal_10(X)
kono
parents:
diff changeset
201 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
202 end function
kono
parents:
diff changeset
203 #endif
kono
parents:
diff changeset
204 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
205 elemental logical function _gfortran_ieee_is_normal_16(X)
kono
parents:
diff changeset
206 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
207 end function
kono
parents:
diff changeset
208 #endif
kono
parents:
diff changeset
209 end interface
kono
parents:
diff changeset
210
kono
parents:
diff changeset
211 interface IEEE_IS_NORMAL
kono
parents:
diff changeset
212 procedure &
kono
parents:
diff changeset
213 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
214 _gfortran_ieee_is_normal_16, &
kono
parents:
diff changeset
215 #endif
kono
parents:
diff changeset
216 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
217 _gfortran_ieee_is_normal_10, &
kono
parents:
diff changeset
218 #endif
kono
parents:
diff changeset
219 _gfortran_ieee_is_normal_8, _gfortran_ieee_is_normal_4
kono
parents:
diff changeset
220 end interface
kono
parents:
diff changeset
221 public :: IEEE_IS_NORMAL
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 ! IEEE_COPY_SIGN
kono
parents:
diff changeset
224
kono
parents:
diff changeset
225 #define COPYSIGN_MACRO(A,B) \
kono
parents:
diff changeset
226 elemental real(kind = A) function \
kono
parents:
diff changeset
227 _gfortran_ieee_copy_sign_/**/A/**/_/**/B (X,Y) ; \
kono
parents:
diff changeset
228 real(kind = A), intent(in) :: X ; \
kono
parents:
diff changeset
229 real(kind = B), intent(in) :: Y ; \
kono
parents:
diff changeset
230 end function
kono
parents:
diff changeset
231
kono
parents:
diff changeset
232 interface
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
233 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234 COPYSIGN_MACRO(16,16)
111
kono
parents:
diff changeset
235 #ifdef HAVE_GFC_REAL_10
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 COPYSIGN_MACRO(16,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 COPYSIGN_MACRO(10,16)
111
kono
parents:
diff changeset
238 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239 COPYSIGN_MACRO(16,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
240 COPYSIGN_MACRO(16,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
241 COPYSIGN_MACRO(8,16)
111
kono
parents:
diff changeset
242 COPYSIGN_MACRO(4,16)
kono
parents:
diff changeset
243 #endif
kono
parents:
diff changeset
244 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
245 COPYSIGN_MACRO(10,10)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246 COPYSIGN_MACRO(10,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247 COPYSIGN_MACRO(10,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248 COPYSIGN_MACRO(8,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249 COPYSIGN_MACRO(4,10)
111
kono
parents:
diff changeset
250 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 COPYSIGN_MACRO(8,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252 COPYSIGN_MACRO(8,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
253 COPYSIGN_MACRO(4,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
254 COPYSIGN_MACRO(4,4)
111
kono
parents:
diff changeset
255 end interface
kono
parents:
diff changeset
256
kono
parents:
diff changeset
257 interface IEEE_COPY_SIGN
kono
parents:
diff changeset
258 procedure &
kono
parents:
diff changeset
259 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
260 _gfortran_ieee_copy_sign_16_16, &
kono
parents:
diff changeset
261 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
262 _gfortran_ieee_copy_sign_16_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
263 _gfortran_ieee_copy_sign_10_16, &
111
kono
parents:
diff changeset
264 #endif
kono
parents:
diff changeset
265 _gfortran_ieee_copy_sign_16_8, &
kono
parents:
diff changeset
266 _gfortran_ieee_copy_sign_16_4, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
267 _gfortran_ieee_copy_sign_8_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
268 _gfortran_ieee_copy_sign_4_16, &
111
kono
parents:
diff changeset
269 #endif
kono
parents:
diff changeset
270 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
271 _gfortran_ieee_copy_sign_10_10, &
kono
parents:
diff changeset
272 _gfortran_ieee_copy_sign_10_8, &
kono
parents:
diff changeset
273 _gfortran_ieee_copy_sign_10_4, &
kono
parents:
diff changeset
274 _gfortran_ieee_copy_sign_8_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
275 _gfortran_ieee_copy_sign_4_10, &
111
kono
parents:
diff changeset
276 #endif
kono
parents:
diff changeset
277 _gfortran_ieee_copy_sign_8_8, &
kono
parents:
diff changeset
278 _gfortran_ieee_copy_sign_8_4, &
kono
parents:
diff changeset
279 _gfortran_ieee_copy_sign_4_8, &
kono
parents:
diff changeset
280 _gfortran_ieee_copy_sign_4_4
kono
parents:
diff changeset
281 end interface
kono
parents:
diff changeset
282 public :: IEEE_COPY_SIGN
kono
parents:
diff changeset
283
kono
parents:
diff changeset
284 ! IEEE_UNORDERED
kono
parents:
diff changeset
285
kono
parents:
diff changeset
286 #define UNORDERED_MACRO(A,B) \
kono
parents:
diff changeset
287 elemental logical function \
kono
parents:
diff changeset
288 _gfortran_ieee_unordered_/**/A/**/_/**/B (X,Y) ; \
kono
parents:
diff changeset
289 real(kind = A), intent(in) :: X ; \
kono
parents:
diff changeset
290 real(kind = B), intent(in) :: Y ; \
kono
parents:
diff changeset
291 end function
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293 interface
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
294 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
295 UNORDERED_MACRO(16,16)
111
kono
parents:
diff changeset
296 #ifdef HAVE_GFC_REAL_10
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
297 UNORDERED_MACRO(16,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
298 UNORDERED_MACRO(10,16)
111
kono
parents:
diff changeset
299 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
300 UNORDERED_MACRO(16,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
301 UNORDERED_MACRO(16,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
302 UNORDERED_MACRO(8,16)
111
kono
parents:
diff changeset
303 UNORDERED_MACRO(4,16)
kono
parents:
diff changeset
304 #endif
kono
parents:
diff changeset
305 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
306 UNORDERED_MACRO(10,10)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
307 UNORDERED_MACRO(10,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
308 UNORDERED_MACRO(10,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
309 UNORDERED_MACRO(8,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
310 UNORDERED_MACRO(4,10)
111
kono
parents:
diff changeset
311 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
312 UNORDERED_MACRO(8,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
313 UNORDERED_MACRO(8,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
314 UNORDERED_MACRO(4,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
315 UNORDERED_MACRO(4,4)
111
kono
parents:
diff changeset
316 end interface
kono
parents:
diff changeset
317
kono
parents:
diff changeset
318 interface IEEE_UNORDERED
kono
parents:
diff changeset
319 procedure &
kono
parents:
diff changeset
320 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
321 _gfortran_ieee_unordered_16_16, &
kono
parents:
diff changeset
322 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
323 _gfortran_ieee_unordered_16_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
324 _gfortran_ieee_unordered_10_16, &
111
kono
parents:
diff changeset
325 #endif
kono
parents:
diff changeset
326 _gfortran_ieee_unordered_16_8, &
kono
parents:
diff changeset
327 _gfortran_ieee_unordered_16_4, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
328 _gfortran_ieee_unordered_8_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
329 _gfortran_ieee_unordered_4_16, &
111
kono
parents:
diff changeset
330 #endif
kono
parents:
diff changeset
331 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
332 _gfortran_ieee_unordered_10_10, &
kono
parents:
diff changeset
333 _gfortran_ieee_unordered_10_8, &
kono
parents:
diff changeset
334 _gfortran_ieee_unordered_10_4, &
kono
parents:
diff changeset
335 _gfortran_ieee_unordered_8_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
336 _gfortran_ieee_unordered_4_10, &
111
kono
parents:
diff changeset
337 #endif
kono
parents:
diff changeset
338 _gfortran_ieee_unordered_8_8, &
kono
parents:
diff changeset
339 _gfortran_ieee_unordered_8_4, &
kono
parents:
diff changeset
340 _gfortran_ieee_unordered_4_8, &
kono
parents:
diff changeset
341 _gfortran_ieee_unordered_4_4
kono
parents:
diff changeset
342 end interface
kono
parents:
diff changeset
343 public :: IEEE_UNORDERED
kono
parents:
diff changeset
344
kono
parents:
diff changeset
345 ! IEEE_LOGB
kono
parents:
diff changeset
346
kono
parents:
diff changeset
347 interface
kono
parents:
diff changeset
348 elemental real(kind=4) function _gfortran_ieee_logb_4 (X)
kono
parents:
diff changeset
349 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
350 end function
kono
parents:
diff changeset
351 elemental real(kind=8) function _gfortran_ieee_logb_8 (X)
kono
parents:
diff changeset
352 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
353 end function
kono
parents:
diff changeset
354 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
355 elemental real(kind=10) function _gfortran_ieee_logb_10 (X)
kono
parents:
diff changeset
356 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
357 end function
kono
parents:
diff changeset
358 #endif
kono
parents:
diff changeset
359 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
360 elemental real(kind=16) function _gfortran_ieee_logb_16 (X)
kono
parents:
diff changeset
361 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
362 end function
kono
parents:
diff changeset
363 #endif
kono
parents:
diff changeset
364 end interface
kono
parents:
diff changeset
365
kono
parents:
diff changeset
366 interface IEEE_LOGB
kono
parents:
diff changeset
367 procedure &
kono
parents:
diff changeset
368 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
369 _gfortran_ieee_logb_16, &
kono
parents:
diff changeset
370 #endif
kono
parents:
diff changeset
371 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
372 _gfortran_ieee_logb_10, &
kono
parents:
diff changeset
373 #endif
kono
parents:
diff changeset
374 _gfortran_ieee_logb_8, &
kono
parents:
diff changeset
375 _gfortran_ieee_logb_4
kono
parents:
diff changeset
376 end interface
kono
parents:
diff changeset
377 public :: IEEE_LOGB
kono
parents:
diff changeset
378
kono
parents:
diff changeset
379 ! IEEE_NEXT_AFTER
kono
parents:
diff changeset
380
kono
parents:
diff changeset
381 #define NEXT_AFTER_MACRO(A,B) \
kono
parents:
diff changeset
382 elemental real(kind = A) function \
kono
parents:
diff changeset
383 _gfortran_ieee_next_after_/**/A/**/_/**/B (X,Y) ; \
kono
parents:
diff changeset
384 real(kind = A), intent(in) :: X ; \
kono
parents:
diff changeset
385 real(kind = B), intent(in) :: Y ; \
kono
parents:
diff changeset
386 end function
kono
parents:
diff changeset
387
kono
parents:
diff changeset
388 interface
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
389 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
390 NEXT_AFTER_MACRO(16,16)
111
kono
parents:
diff changeset
391 #ifdef HAVE_GFC_REAL_10
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
392 NEXT_AFTER_MACRO(16,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
393 NEXT_AFTER_MACRO(10,16)
111
kono
parents:
diff changeset
394 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
395 NEXT_AFTER_MACRO(16,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
396 NEXT_AFTER_MACRO(16,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
397 NEXT_AFTER_MACRO(8,16)
111
kono
parents:
diff changeset
398 NEXT_AFTER_MACRO(4,16)
kono
parents:
diff changeset
399 #endif
kono
parents:
diff changeset
400 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
401 NEXT_AFTER_MACRO(10,10)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
402 NEXT_AFTER_MACRO(10,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
403 NEXT_AFTER_MACRO(10,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
404 NEXT_AFTER_MACRO(8,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
405 NEXT_AFTER_MACRO(4,10)
111
kono
parents:
diff changeset
406 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
407 NEXT_AFTER_MACRO(8,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
408 NEXT_AFTER_MACRO(8,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
409 NEXT_AFTER_MACRO(4,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
410 NEXT_AFTER_MACRO(4,4)
111
kono
parents:
diff changeset
411 end interface
kono
parents:
diff changeset
412
kono
parents:
diff changeset
413 interface IEEE_NEXT_AFTER
kono
parents:
diff changeset
414 procedure &
kono
parents:
diff changeset
415 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
416 _gfortran_ieee_next_after_16_16, &
kono
parents:
diff changeset
417 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
418 _gfortran_ieee_next_after_16_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
419 _gfortran_ieee_next_after_10_16, &
111
kono
parents:
diff changeset
420 #endif
kono
parents:
diff changeset
421 _gfortran_ieee_next_after_16_8, &
kono
parents:
diff changeset
422 _gfortran_ieee_next_after_16_4, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
423 _gfortran_ieee_next_after_8_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
424 _gfortran_ieee_next_after_4_16, &
111
kono
parents:
diff changeset
425 #endif
kono
parents:
diff changeset
426 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
427 _gfortran_ieee_next_after_10_10, &
kono
parents:
diff changeset
428 _gfortran_ieee_next_after_10_8, &
kono
parents:
diff changeset
429 _gfortran_ieee_next_after_10_4, &
kono
parents:
diff changeset
430 _gfortran_ieee_next_after_8_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
431 _gfortran_ieee_next_after_4_10, &
111
kono
parents:
diff changeset
432 #endif
kono
parents:
diff changeset
433 _gfortran_ieee_next_after_8_8, &
kono
parents:
diff changeset
434 _gfortran_ieee_next_after_8_4, &
kono
parents:
diff changeset
435 _gfortran_ieee_next_after_4_8, &
kono
parents:
diff changeset
436 _gfortran_ieee_next_after_4_4
kono
parents:
diff changeset
437 end interface
kono
parents:
diff changeset
438 public :: IEEE_NEXT_AFTER
kono
parents:
diff changeset
439
kono
parents:
diff changeset
440 ! IEEE_REM
kono
parents:
diff changeset
441
kono
parents:
diff changeset
442 #define REM_MACRO(RES,A,B) \
kono
parents:
diff changeset
443 elemental real(kind = RES) function \
kono
parents:
diff changeset
444 _gfortran_ieee_rem_/**/A/**/_/**/B (X,Y) ; \
kono
parents:
diff changeset
445 real(kind = A), intent(in) :: X ; \
kono
parents:
diff changeset
446 real(kind = B), intent(in) :: Y ; \
kono
parents:
diff changeset
447 end function
kono
parents:
diff changeset
448
kono
parents:
diff changeset
449 interface
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
450 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
451 REM_MACRO(16,16,16)
111
kono
parents:
diff changeset
452 #ifdef HAVE_GFC_REAL_10
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
453 REM_MACRO(16,16,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
454 REM_MACRO(16,10,16)
111
kono
parents:
diff changeset
455 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
456 REM_MACRO(16,16,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
457 REM_MACRO(16,16,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
458 REM_MACRO(16,8,16)
111
kono
parents:
diff changeset
459 REM_MACRO(16,4,16)
kono
parents:
diff changeset
460 #endif
kono
parents:
diff changeset
461 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
462 REM_MACRO(10,10,10)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
463 REM_MACRO(10,10,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
464 REM_MACRO(10,10,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
465 REM_MACRO(10,8,10)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
466 REM_MACRO(10,4,10)
111
kono
parents:
diff changeset
467 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
468 REM_MACRO(8,8,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
469 REM_MACRO(8,8,4)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
470 REM_MACRO(8,4,8)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
471 REM_MACRO(4,4,4)
111
kono
parents:
diff changeset
472 end interface
kono
parents:
diff changeset
473
kono
parents:
diff changeset
474 interface IEEE_REM
kono
parents:
diff changeset
475 procedure &
kono
parents:
diff changeset
476 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
477 _gfortran_ieee_rem_16_16, &
kono
parents:
diff changeset
478 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
479 _gfortran_ieee_rem_16_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
480 _gfortran_ieee_rem_10_16, &
111
kono
parents:
diff changeset
481 #endif
kono
parents:
diff changeset
482 _gfortran_ieee_rem_16_8, &
kono
parents:
diff changeset
483 _gfortran_ieee_rem_16_4, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
484 _gfortran_ieee_rem_8_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
485 _gfortran_ieee_rem_4_16, &
111
kono
parents:
diff changeset
486 #endif
kono
parents:
diff changeset
487 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
488 _gfortran_ieee_rem_10_10, &
kono
parents:
diff changeset
489 _gfortran_ieee_rem_10_8, &
kono
parents:
diff changeset
490 _gfortran_ieee_rem_10_4, &
kono
parents:
diff changeset
491 _gfortran_ieee_rem_8_10, &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
492 _gfortran_ieee_rem_4_10, &
111
kono
parents:
diff changeset
493 #endif
kono
parents:
diff changeset
494 _gfortran_ieee_rem_8_8, &
kono
parents:
diff changeset
495 _gfortran_ieee_rem_8_4, &
kono
parents:
diff changeset
496 _gfortran_ieee_rem_4_8, &
kono
parents:
diff changeset
497 _gfortran_ieee_rem_4_4
kono
parents:
diff changeset
498 end interface
kono
parents:
diff changeset
499 public :: IEEE_REM
kono
parents:
diff changeset
500
kono
parents:
diff changeset
501 ! IEEE_RINT
kono
parents:
diff changeset
502
kono
parents:
diff changeset
503 interface
kono
parents:
diff changeset
504 elemental real(kind=4) function _gfortran_ieee_rint_4 (X)
kono
parents:
diff changeset
505 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
506 end function
kono
parents:
diff changeset
507 elemental real(kind=8) function _gfortran_ieee_rint_8 (X)
kono
parents:
diff changeset
508 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
509 end function
kono
parents:
diff changeset
510 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
511 elemental real(kind=10) function _gfortran_ieee_rint_10 (X)
kono
parents:
diff changeset
512 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
513 end function
kono
parents:
diff changeset
514 #endif
kono
parents:
diff changeset
515 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
516 elemental real(kind=16) function _gfortran_ieee_rint_16 (X)
kono
parents:
diff changeset
517 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
518 end function
kono
parents:
diff changeset
519 #endif
kono
parents:
diff changeset
520 end interface
kono
parents:
diff changeset
521
kono
parents:
diff changeset
522 interface IEEE_RINT
kono
parents:
diff changeset
523 procedure &
kono
parents:
diff changeset
524 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
525 _gfortran_ieee_rint_16, &
kono
parents:
diff changeset
526 #endif
kono
parents:
diff changeset
527 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
528 _gfortran_ieee_rint_10, &
kono
parents:
diff changeset
529 #endif
kono
parents:
diff changeset
530 _gfortran_ieee_rint_8, _gfortran_ieee_rint_4
kono
parents:
diff changeset
531 end interface
kono
parents:
diff changeset
532 public :: IEEE_RINT
kono
parents:
diff changeset
533
kono
parents:
diff changeset
534 ! IEEE_SCALB
kono
parents:
diff changeset
535
kono
parents:
diff changeset
536 interface
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
537 #ifdef HAVE_GFC_INTEGER_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
538 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
539 elemental real(kind=16) function _gfortran_ieee_scalb_16_16 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
540 real(kind=16), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
541 integer(kind=16), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
542 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
543 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
544 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
545 elemental real(kind=10) function _gfortran_ieee_scalb_10_16 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
546 real(kind=10), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
547 integer(kind=16), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
548 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
549 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
550 elemental real(kind=8) function _gfortran_ieee_scalb_8_16 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
551 real(kind=8), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
552 integer(kind=16), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
553 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
554 elemental real(kind=4) function _gfortran_ieee_scalb_4_16 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
555 real(kind=4), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
556 integer(kind=16), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
557 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
558 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
559
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
560 #ifdef HAVE_GFC_INTEGER_8
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
561 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
562 elemental real(kind=16) function _gfortran_ieee_scalb_16_8 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
563 real(kind=16), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
564 integer(kind=8), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
565 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
566 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
567 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
568 elemental real(kind=10) function _gfortran_ieee_scalb_10_8 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
569 real(kind=10), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
570 integer(kind=8), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
571 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
572 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
573 elemental real(kind=8) function _gfortran_ieee_scalb_8_8 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
574 real(kind=8), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
575 integer(kind=8), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
576 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
577 elemental real(kind=4) function _gfortran_ieee_scalb_4_8 (X, I)
111
kono
parents:
diff changeset
578 real(kind=4), intent(in) :: X
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
579 integer(kind=8), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
580 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
581 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
582
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
583 #ifdef HAVE_GFC_INTEGER_2
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
584 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
585 elemental real(kind=16) function _gfortran_ieee_scalb_16_2 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
586 real(kind=16), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
587 integer(kind=2), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
588 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
589 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
590 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
591 elemental real(kind=10) function _gfortran_ieee_scalb_10_2 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
592 real(kind=10), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
593 integer(kind=2), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
594 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
595 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
596 elemental real(kind=8) function _gfortran_ieee_scalb_8_2 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
597 real(kind=8), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
598 integer(kind=2), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
599 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
600 elemental real(kind=4) function _gfortran_ieee_scalb_4_2 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
601 real(kind=4), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
602 integer(kind=2), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
603 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
604 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
605
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
606 #ifdef HAVE_GFC_INTEGER_1
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
607 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
608 elemental real(kind=16) function _gfortran_ieee_scalb_16_1 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
609 real(kind=16), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
610 integer(kind=1), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
611 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
612 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
613 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
614 elemental real(kind=10) function _gfortran_ieee_scalb_10_1 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
615 real(kind=10), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
616 integer(kind=1), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
617 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
618 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
619 elemental real(kind=8) function _gfortran_ieee_scalb_8_1 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
620 real(kind=8), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
621 integer(kind=1), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
622 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
623 elemental real(kind=4) function _gfortran_ieee_scalb_4_1 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
624 real(kind=4), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
625 integer(kind=1), intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
626 end function
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
627 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
628
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
629 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
630 elemental real(kind=16) function _gfortran_ieee_scalb_16_4 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
631 real(kind=16), intent(in) :: X
111
kono
parents:
diff changeset
632 integer, intent(in) :: I
kono
parents:
diff changeset
633 end function
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
634 #endif
111
kono
parents:
diff changeset
635 #ifdef HAVE_GFC_REAL_10
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
636 elemental real(kind=10) function _gfortran_ieee_scalb_10_4 (X, I)
111
kono
parents:
diff changeset
637 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
638 integer, intent(in) :: I
kono
parents:
diff changeset
639 end function
kono
parents:
diff changeset
640 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
641 elemental real(kind=8) function _gfortran_ieee_scalb_8_4 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
642 real(kind=8), intent(in) :: X
111
kono
parents:
diff changeset
643 integer, intent(in) :: I
kono
parents:
diff changeset
644 end function
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
645 elemental real(kind=4) function _gfortran_ieee_scalb_4_4 (X, I)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
646 real(kind=4), intent(in) :: X
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
647 integer, intent(in) :: I
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
648 end function
111
kono
parents:
diff changeset
649 end interface
kono
parents:
diff changeset
650
kono
parents:
diff changeset
651 interface IEEE_SCALB
kono
parents:
diff changeset
652 procedure &
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
653 #ifdef HAVE_GFC_INTEGER_16
111
kono
parents:
diff changeset
654 #ifdef HAVE_GFC_REAL_16
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
655 _gfortran_ieee_scalb_16_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
656 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
657 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
658 _gfortran_ieee_scalb_10_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
659 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
660 _gfortran_ieee_scalb_8_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
661 _gfortran_ieee_scalb_4_16, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
662 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
663 #ifdef HAVE_GFC_INTEGER_8
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
664 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
665 _gfortran_ieee_scalb_16_8, &
111
kono
parents:
diff changeset
666 #endif
kono
parents:
diff changeset
667 #ifdef HAVE_GFC_REAL_10
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
668 _gfortran_ieee_scalb_10_8, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
669 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
670 _gfortran_ieee_scalb_8_8, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
671 _gfortran_ieee_scalb_4_8, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
672 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
673 #ifdef HAVE_GFC_INTEGER_2
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
674 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
675 _gfortran_ieee_scalb_16_2, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
676 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
677 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
678 _gfortran_ieee_scalb_10_2, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
679 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
680 _gfortran_ieee_scalb_8_2, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
681 _gfortran_ieee_scalb_4_2, &
111
kono
parents:
diff changeset
682 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
683 #ifdef HAVE_GFC_INTEGER_1
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
684 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
685 _gfortran_ieee_scalb_16_1, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
686 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
687 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
688 _gfortran_ieee_scalb_10_1, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
689 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
690 _gfortran_ieee_scalb_8_1, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
691 _gfortran_ieee_scalb_4_1, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
692 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
693 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
694 _gfortran_ieee_scalb_16_4, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
695 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
696 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
697 _gfortran_ieee_scalb_10_4, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
698 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
699 _gfortran_ieee_scalb_8_4, &
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
700 _gfortran_ieee_scalb_4_4
111
kono
parents:
diff changeset
701 end interface
kono
parents:
diff changeset
702 public :: IEEE_SCALB
kono
parents:
diff changeset
703
kono
parents:
diff changeset
704 ! IEEE_VALUE
kono
parents:
diff changeset
705
kono
parents:
diff changeset
706 interface IEEE_VALUE
kono
parents:
diff changeset
707 module procedure &
kono
parents:
diff changeset
708 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
709 IEEE_VALUE_16, &
kono
parents:
diff changeset
710 #endif
kono
parents:
diff changeset
711 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
712 IEEE_VALUE_10, &
kono
parents:
diff changeset
713 #endif
kono
parents:
diff changeset
714 IEEE_VALUE_8, IEEE_VALUE_4
kono
parents:
diff changeset
715 end interface
kono
parents:
diff changeset
716 public :: IEEE_VALUE
kono
parents:
diff changeset
717
kono
parents:
diff changeset
718 ! IEEE_CLASS
kono
parents:
diff changeset
719
kono
parents:
diff changeset
720 interface IEEE_CLASS
kono
parents:
diff changeset
721 module procedure &
kono
parents:
diff changeset
722 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
723 IEEE_CLASS_16, &
kono
parents:
diff changeset
724 #endif
kono
parents:
diff changeset
725 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
726 IEEE_CLASS_10, &
kono
parents:
diff changeset
727 #endif
kono
parents:
diff changeset
728 IEEE_CLASS_8, IEEE_CLASS_4
kono
parents:
diff changeset
729 end interface
kono
parents:
diff changeset
730 public :: IEEE_CLASS
kono
parents:
diff changeset
731
kono
parents:
diff changeset
732 ! Public declarations for contained procedures
kono
parents:
diff changeset
733 public :: IEEE_GET_ROUNDING_MODE, IEEE_SET_ROUNDING_MODE
kono
parents:
diff changeset
734 public :: IEEE_GET_UNDERFLOW_MODE, IEEE_SET_UNDERFLOW_MODE
kono
parents:
diff changeset
735 public :: IEEE_SELECTED_REAL_KIND
kono
parents:
diff changeset
736
kono
parents:
diff changeset
737 ! IEEE_SUPPORT_ROUNDING
kono
parents:
diff changeset
738
kono
parents:
diff changeset
739 interface IEEE_SUPPORT_ROUNDING
kono
parents:
diff changeset
740 module procedure IEEE_SUPPORT_ROUNDING_4, IEEE_SUPPORT_ROUNDING_8, &
kono
parents:
diff changeset
741 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
742 IEEE_SUPPORT_ROUNDING_10, &
kono
parents:
diff changeset
743 #endif
kono
parents:
diff changeset
744 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
745 IEEE_SUPPORT_ROUNDING_16, &
kono
parents:
diff changeset
746 #endif
kono
parents:
diff changeset
747 IEEE_SUPPORT_ROUNDING_NOARG
kono
parents:
diff changeset
748 end interface
kono
parents:
diff changeset
749 public :: IEEE_SUPPORT_ROUNDING
kono
parents:
diff changeset
750
kono
parents:
diff changeset
751 ! Interface to the FPU-specific function
kono
parents:
diff changeset
752 interface
kono
parents:
diff changeset
753 pure integer function support_rounding_helper(flag) &
kono
parents:
diff changeset
754 bind(c, name="_gfortrani_support_fpu_rounding_mode")
kono
parents:
diff changeset
755 integer, intent(in), value :: flag
kono
parents:
diff changeset
756 end function
kono
parents:
diff changeset
757 end interface
kono
parents:
diff changeset
758
kono
parents:
diff changeset
759 ! IEEE_SUPPORT_UNDERFLOW_CONTROL
kono
parents:
diff changeset
760
kono
parents:
diff changeset
761 interface IEEE_SUPPORT_UNDERFLOW_CONTROL
kono
parents:
diff changeset
762 module procedure IEEE_SUPPORT_UNDERFLOW_CONTROL_4, &
kono
parents:
diff changeset
763 IEEE_SUPPORT_UNDERFLOW_CONTROL_8, &
kono
parents:
diff changeset
764 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
765 IEEE_SUPPORT_UNDERFLOW_CONTROL_10, &
kono
parents:
diff changeset
766 #endif
kono
parents:
diff changeset
767 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
768 IEEE_SUPPORT_UNDERFLOW_CONTROL_16, &
kono
parents:
diff changeset
769 #endif
kono
parents:
diff changeset
770 IEEE_SUPPORT_UNDERFLOW_CONTROL_NOARG
kono
parents:
diff changeset
771 end interface
kono
parents:
diff changeset
772 public :: IEEE_SUPPORT_UNDERFLOW_CONTROL
kono
parents:
diff changeset
773
kono
parents:
diff changeset
774 ! Interface to the FPU-specific function
kono
parents:
diff changeset
775 interface
kono
parents:
diff changeset
776 pure integer function support_underflow_control_helper(kind) &
kono
parents:
diff changeset
777 bind(c, name="_gfortrani_support_fpu_underflow_control")
kono
parents:
diff changeset
778 integer, intent(in), value :: kind
kono
parents:
diff changeset
779 end function
kono
parents:
diff changeset
780 end interface
kono
parents:
diff changeset
781
kono
parents:
diff changeset
782 ! IEEE_SUPPORT_* generic functions
kono
parents:
diff changeset
783
kono
parents:
diff changeset
784 #if defined(HAVE_GFC_REAL_10) && defined(HAVE_GFC_REAL_16)
kono
parents:
diff changeset
785 # define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_10, NAME/**/_16, NAME/**/_NOARG
kono
parents:
diff changeset
786 #elif defined(HAVE_GFC_REAL_10)
kono
parents:
diff changeset
787 # define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_10, NAME/**/_NOARG
kono
parents:
diff changeset
788 #elif defined(HAVE_GFC_REAL_16)
kono
parents:
diff changeset
789 # define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_16, NAME/**/_NOARG
kono
parents:
diff changeset
790 #else
kono
parents:
diff changeset
791 # define MACRO1(NAME) NAME/**/_4, NAME/**/_8, NAME/**/_NOARG
kono
parents:
diff changeset
792 #endif
kono
parents:
diff changeset
793
kono
parents:
diff changeset
794 #define SUPPORTGENERIC(NAME) \
kono
parents:
diff changeset
795 interface NAME ; module procedure MACRO1(NAME) ; end interface ; \
kono
parents:
diff changeset
796 public :: NAME
kono
parents:
diff changeset
797
kono
parents:
diff changeset
798 SUPPORTGENERIC(IEEE_SUPPORT_DATATYPE)
kono
parents:
diff changeset
799 SUPPORTGENERIC(IEEE_SUPPORT_DENORMAL)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
800 SUPPORTGENERIC(IEEE_SUPPORT_SUBNORMAL)
111
kono
parents:
diff changeset
801 SUPPORTGENERIC(IEEE_SUPPORT_DIVIDE)
kono
parents:
diff changeset
802 SUPPORTGENERIC(IEEE_SUPPORT_INF)
kono
parents:
diff changeset
803 SUPPORTGENERIC(IEEE_SUPPORT_IO)
kono
parents:
diff changeset
804 SUPPORTGENERIC(IEEE_SUPPORT_NAN)
kono
parents:
diff changeset
805 SUPPORTGENERIC(IEEE_SUPPORT_SQRT)
kono
parents:
diff changeset
806 SUPPORTGENERIC(IEEE_SUPPORT_STANDARD)
kono
parents:
diff changeset
807
kono
parents:
diff changeset
808 contains
kono
parents:
diff changeset
809
kono
parents:
diff changeset
810 ! Equality operators for IEEE_CLASS_TYPE and IEEE_ROUNDING_MODE
kono
parents:
diff changeset
811 elemental logical function IEEE_CLASS_TYPE_EQ (X, Y) result(res)
kono
parents:
diff changeset
812 implicit none
kono
parents:
diff changeset
813 type(IEEE_CLASS_TYPE), intent(in) :: X, Y
kono
parents:
diff changeset
814 res = (X%hidden == Y%hidden)
kono
parents:
diff changeset
815 end function
kono
parents:
diff changeset
816
kono
parents:
diff changeset
817 elemental logical function IEEE_CLASS_TYPE_NE (X, Y) result(res)
kono
parents:
diff changeset
818 implicit none
kono
parents:
diff changeset
819 type(IEEE_CLASS_TYPE), intent(in) :: X, Y
kono
parents:
diff changeset
820 res = (X%hidden /= Y%hidden)
kono
parents:
diff changeset
821 end function
kono
parents:
diff changeset
822
kono
parents:
diff changeset
823 elemental logical function IEEE_ROUND_TYPE_EQ (X, Y) result(res)
kono
parents:
diff changeset
824 implicit none
kono
parents:
diff changeset
825 type(IEEE_ROUND_TYPE), intent(in) :: X, Y
kono
parents:
diff changeset
826 res = (X%hidden == Y%hidden)
kono
parents:
diff changeset
827 end function
kono
parents:
diff changeset
828
kono
parents:
diff changeset
829 elemental logical function IEEE_ROUND_TYPE_NE (X, Y) result(res)
kono
parents:
diff changeset
830 implicit none
kono
parents:
diff changeset
831 type(IEEE_ROUND_TYPE), intent(in) :: X, Y
kono
parents:
diff changeset
832 res = (X%hidden /= Y%hidden)
kono
parents:
diff changeset
833 end function
kono
parents:
diff changeset
834
kono
parents:
diff changeset
835
kono
parents:
diff changeset
836 ! IEEE_SELECTED_REAL_KIND
kono
parents:
diff changeset
837
kono
parents:
diff changeset
838 integer function IEEE_SELECTED_REAL_KIND (P, R, RADIX) result(res)
kono
parents:
diff changeset
839 implicit none
kono
parents:
diff changeset
840 integer, intent(in), optional :: P, R, RADIX
kono
parents:
diff changeset
841
kono
parents:
diff changeset
842 ! Currently, if IEEE is supported and this module is built, it means
kono
parents:
diff changeset
843 ! all our floating-point types conform to IEEE. Hence, we simply call
kono
parents:
diff changeset
844 ! SELECTED_REAL_KIND.
kono
parents:
diff changeset
845
kono
parents:
diff changeset
846 res = SELECTED_REAL_KIND (P, R, RADIX)
kono
parents:
diff changeset
847
kono
parents:
diff changeset
848 end function
kono
parents:
diff changeset
849
kono
parents:
diff changeset
850
kono
parents:
diff changeset
851 ! IEEE_CLASS
kono
parents:
diff changeset
852
kono
parents:
diff changeset
853 elemental function IEEE_CLASS_4 (X) result(res)
kono
parents:
diff changeset
854 implicit none
kono
parents:
diff changeset
855 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
856 type(IEEE_CLASS_TYPE) :: res
kono
parents:
diff changeset
857
kono
parents:
diff changeset
858 interface
kono
parents:
diff changeset
859 pure integer function _gfortrani_ieee_class_helper_4(val)
kono
parents:
diff changeset
860 real(kind=4), intent(in) :: val
kono
parents:
diff changeset
861 end function
kono
parents:
diff changeset
862 end interface
kono
parents:
diff changeset
863
kono
parents:
diff changeset
864 res = IEEE_CLASS_TYPE(_gfortrani_ieee_class_helper_4(X))
kono
parents:
diff changeset
865 end function
kono
parents:
diff changeset
866
kono
parents:
diff changeset
867 elemental function IEEE_CLASS_8 (X) result(res)
kono
parents:
diff changeset
868 implicit none
kono
parents:
diff changeset
869 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
870 type(IEEE_CLASS_TYPE) :: res
kono
parents:
diff changeset
871
kono
parents:
diff changeset
872 interface
kono
parents:
diff changeset
873 pure integer function _gfortrani_ieee_class_helper_8(val)
kono
parents:
diff changeset
874 real(kind=8), intent(in) :: val
kono
parents:
diff changeset
875 end function
kono
parents:
diff changeset
876 end interface
kono
parents:
diff changeset
877
kono
parents:
diff changeset
878 res = IEEE_CLASS_TYPE(_gfortrani_ieee_class_helper_8(X))
kono
parents:
diff changeset
879 end function
kono
parents:
diff changeset
880
kono
parents:
diff changeset
881 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
882 elemental function IEEE_CLASS_10 (X) result(res)
kono
parents:
diff changeset
883 implicit none
kono
parents:
diff changeset
884 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
885 type(IEEE_CLASS_TYPE) :: res
kono
parents:
diff changeset
886
kono
parents:
diff changeset
887 interface
kono
parents:
diff changeset
888 pure integer function _gfortrani_ieee_class_helper_10(val)
kono
parents:
diff changeset
889 real(kind=10), intent(in) :: val
kono
parents:
diff changeset
890 end function
kono
parents:
diff changeset
891 end interface
kono
parents:
diff changeset
892
kono
parents:
diff changeset
893 res = IEEE_CLASS_TYPE(_gfortrani_ieee_class_helper_10(X))
kono
parents:
diff changeset
894 end function
kono
parents:
diff changeset
895 #endif
kono
parents:
diff changeset
896
kono
parents:
diff changeset
897 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
898 elemental function IEEE_CLASS_16 (X) result(res)
kono
parents:
diff changeset
899 implicit none
kono
parents:
diff changeset
900 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
901 type(IEEE_CLASS_TYPE) :: res
kono
parents:
diff changeset
902
kono
parents:
diff changeset
903 interface
kono
parents:
diff changeset
904 pure integer function _gfortrani_ieee_class_helper_16(val)
kono
parents:
diff changeset
905 real(kind=16), intent(in) :: val
kono
parents:
diff changeset
906 end function
kono
parents:
diff changeset
907 end interface
kono
parents:
diff changeset
908
kono
parents:
diff changeset
909 res = IEEE_CLASS_TYPE(_gfortrani_ieee_class_helper_16(X))
kono
parents:
diff changeset
910 end function
kono
parents:
diff changeset
911 #endif
kono
parents:
diff changeset
912
kono
parents:
diff changeset
913
kono
parents:
diff changeset
914 ! IEEE_VALUE
kono
parents:
diff changeset
915
kono
parents:
diff changeset
916 elemental real(kind=4) function IEEE_VALUE_4(X, CLASS) result(res)
kono
parents:
diff changeset
917
kono
parents:
diff changeset
918 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
919 type(IEEE_CLASS_TYPE), intent(in) :: CLASS
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
920 logical flag
111
kono
parents:
diff changeset
921
kono
parents:
diff changeset
922 select case (CLASS%hidden)
kono
parents:
diff changeset
923 case (1) ! IEEE_SIGNALING_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
924 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
925 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
926 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
927 end if
111
kono
parents:
diff changeset
928 res = -1
kono
parents:
diff changeset
929 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
930 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
931 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
932 end if
111
kono
parents:
diff changeset
933 case (2) ! IEEE_QUIET_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
934 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
935 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
936 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
937 end if
111
kono
parents:
diff changeset
938 res = -1
kono
parents:
diff changeset
939 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
940 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
941 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
942 end if
111
kono
parents:
diff changeset
943 case (3) ! IEEE_NEGATIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
944 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
945 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
946 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
947 end if
111
kono
parents:
diff changeset
948 res = huge(res)
kono
parents:
diff changeset
949 res = (-res) * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
950 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
951 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
952 end if
111
kono
parents:
diff changeset
953 case (4) ! IEEE_NEGATIVE_NORMAL
kono
parents:
diff changeset
954 res = -42
kono
parents:
diff changeset
955 case (5) ! IEEE_NEGATIVE_DENORMAL
kono
parents:
diff changeset
956 res = -tiny(res)
kono
parents:
diff changeset
957 res = res / 2
kono
parents:
diff changeset
958 case (6) ! IEEE_NEGATIVE_ZERO
kono
parents:
diff changeset
959 res = 0
kono
parents:
diff changeset
960 res = -res
kono
parents:
diff changeset
961 case (7) ! IEEE_POSITIVE_ZERO
kono
parents:
diff changeset
962 res = 0
kono
parents:
diff changeset
963 case (8) ! IEEE_POSITIVE_DENORMAL
kono
parents:
diff changeset
964 res = tiny(res)
kono
parents:
diff changeset
965 res = res / 2
kono
parents:
diff changeset
966 case (9) ! IEEE_POSITIVE_NORMAL
kono
parents:
diff changeset
967 res = 42
kono
parents:
diff changeset
968 case (10) ! IEEE_POSITIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
969 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
970 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
971 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
972 end if
111
kono
parents:
diff changeset
973 res = huge(res)
kono
parents:
diff changeset
974 res = res * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
975 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
976 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
977 end if
111
kono
parents:
diff changeset
978 case default ! IEEE_OTHER_VALUE, should not happen
kono
parents:
diff changeset
979 res = 0
kono
parents:
diff changeset
980 end select
kono
parents:
diff changeset
981 end function
kono
parents:
diff changeset
982
kono
parents:
diff changeset
983 elemental real(kind=8) function IEEE_VALUE_8(X, CLASS) result(res)
kono
parents:
diff changeset
984
kono
parents:
diff changeset
985 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
986 type(IEEE_CLASS_TYPE), intent(in) :: CLASS
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
987 logical flag
111
kono
parents:
diff changeset
988
kono
parents:
diff changeset
989 select case (CLASS%hidden)
kono
parents:
diff changeset
990 case (1) ! IEEE_SIGNALING_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
991 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
992 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
993 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
994 end if
111
kono
parents:
diff changeset
995 res = -1
kono
parents:
diff changeset
996 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
997 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
998 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
999 end if
111
kono
parents:
diff changeset
1000 case (2) ! IEEE_QUIET_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1001 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1002 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1003 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1004 end if
111
kono
parents:
diff changeset
1005 res = -1
kono
parents:
diff changeset
1006 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1007 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1008 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1009 end if
111
kono
parents:
diff changeset
1010 case (3) ! IEEE_NEGATIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1011 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1012 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1013 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1014 end if
111
kono
parents:
diff changeset
1015 res = huge(res)
kono
parents:
diff changeset
1016 res = (-res) * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1017 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1018 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1019 end if
111
kono
parents:
diff changeset
1020 case (4) ! IEEE_NEGATIVE_NORMAL
kono
parents:
diff changeset
1021 res = -42
kono
parents:
diff changeset
1022 case (5) ! IEEE_NEGATIVE_DENORMAL
kono
parents:
diff changeset
1023 res = -tiny(res)
kono
parents:
diff changeset
1024 res = res / 2
kono
parents:
diff changeset
1025 case (6) ! IEEE_NEGATIVE_ZERO
kono
parents:
diff changeset
1026 res = 0
kono
parents:
diff changeset
1027 res = -res
kono
parents:
diff changeset
1028 case (7) ! IEEE_POSITIVE_ZERO
kono
parents:
diff changeset
1029 res = 0
kono
parents:
diff changeset
1030 case (8) ! IEEE_POSITIVE_DENORMAL
kono
parents:
diff changeset
1031 res = tiny(res)
kono
parents:
diff changeset
1032 res = res / 2
kono
parents:
diff changeset
1033 case (9) ! IEEE_POSITIVE_NORMAL
kono
parents:
diff changeset
1034 res = 42
kono
parents:
diff changeset
1035 case (10) ! IEEE_POSITIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1036 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1037 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1038 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1039 end if
111
kono
parents:
diff changeset
1040 res = huge(res)
kono
parents:
diff changeset
1041 res = res * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1042 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1043 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1044 end if
111
kono
parents:
diff changeset
1045 case default ! IEEE_OTHER_VALUE, should not happen
kono
parents:
diff changeset
1046 res = 0
kono
parents:
diff changeset
1047 end select
kono
parents:
diff changeset
1048 end function
kono
parents:
diff changeset
1049
kono
parents:
diff changeset
1050 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1051 elemental real(kind=10) function IEEE_VALUE_10(X, CLASS) result(res)
kono
parents:
diff changeset
1052
kono
parents:
diff changeset
1053 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
1054 type(IEEE_CLASS_TYPE), intent(in) :: CLASS
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1055 logical flag
111
kono
parents:
diff changeset
1056
kono
parents:
diff changeset
1057 select case (CLASS%hidden)
kono
parents:
diff changeset
1058 case (1) ! IEEE_SIGNALING_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1059 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1060 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1061 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1062 end if
111
kono
parents:
diff changeset
1063 res = -1
kono
parents:
diff changeset
1064 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1065 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1066 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1067 end if
111
kono
parents:
diff changeset
1068 case (2) ! IEEE_QUIET_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1069 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1070 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1071 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1072 end if
111
kono
parents:
diff changeset
1073 res = -1
kono
parents:
diff changeset
1074 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1075 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1076 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1077 end if
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1078 case (3) ! IEEE_NEGATIVE_INF
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1079 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1080 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1081 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1082 end if
111
kono
parents:
diff changeset
1083 res = huge(res)
kono
parents:
diff changeset
1084 res = (-res) * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1085 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1086 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1087 end if
111
kono
parents:
diff changeset
1088 case (4) ! IEEE_NEGATIVE_NORMAL
kono
parents:
diff changeset
1089 res = -42
kono
parents:
diff changeset
1090 case (5) ! IEEE_NEGATIVE_DENORMAL
kono
parents:
diff changeset
1091 res = -tiny(res)
kono
parents:
diff changeset
1092 res = res / 2
kono
parents:
diff changeset
1093 case (6) ! IEEE_NEGATIVE_ZERO
kono
parents:
diff changeset
1094 res = 0
kono
parents:
diff changeset
1095 res = -res
kono
parents:
diff changeset
1096 case (7) ! IEEE_POSITIVE_ZERO
kono
parents:
diff changeset
1097 res = 0
kono
parents:
diff changeset
1098 case (8) ! IEEE_POSITIVE_DENORMAL
kono
parents:
diff changeset
1099 res = tiny(res)
kono
parents:
diff changeset
1100 res = res / 2
kono
parents:
diff changeset
1101 case (9) ! IEEE_POSITIVE_NORMAL
kono
parents:
diff changeset
1102 res = 42
kono
parents:
diff changeset
1103 case (10) ! IEEE_POSITIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1104 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1105 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1106 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1107 end if
111
kono
parents:
diff changeset
1108 res = huge(res)
kono
parents:
diff changeset
1109 res = res * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1110 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1111 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1112 end if
111
kono
parents:
diff changeset
1113 case default ! IEEE_OTHER_VALUE, should not happen
kono
parents:
diff changeset
1114 res = 0
kono
parents:
diff changeset
1115 end select
kono
parents:
diff changeset
1116 end function
kono
parents:
diff changeset
1117
kono
parents:
diff changeset
1118 #endif
kono
parents:
diff changeset
1119
kono
parents:
diff changeset
1120 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1121 elemental real(kind=16) function IEEE_VALUE_16(X, CLASS) result(res)
kono
parents:
diff changeset
1122
kono
parents:
diff changeset
1123 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
1124 type(IEEE_CLASS_TYPE), intent(in) :: CLASS
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1125 logical flag
111
kono
parents:
diff changeset
1126
kono
parents:
diff changeset
1127 select case (CLASS%hidden)
kono
parents:
diff changeset
1128 case (1) ! IEEE_SIGNALING_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1129 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1130 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1131 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1132 end if
111
kono
parents:
diff changeset
1133 res = -1
kono
parents:
diff changeset
1134 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1135 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1136 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1137 end if
111
kono
parents:
diff changeset
1138 case (2) ! IEEE_QUIET_NAN
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1139 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1140 call ieee_get_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1141 call ieee_set_halting_mode(ieee_invalid, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1142 end if
111
kono
parents:
diff changeset
1143 res = -1
kono
parents:
diff changeset
1144 res = sqrt(res)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1145 if (ieee_support_halting(ieee_invalid)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1146 call ieee_set_halting_mode(ieee_invalid, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1147 end if
111
kono
parents:
diff changeset
1148 case (3) ! IEEE_NEGATIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1149 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1150 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1151 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1152 end if
111
kono
parents:
diff changeset
1153 res = huge(res)
kono
parents:
diff changeset
1154 res = (-res) * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1155 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1156 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1157 end if
111
kono
parents:
diff changeset
1158 case (4) ! IEEE_NEGATIVE_NORMAL
kono
parents:
diff changeset
1159 res = -42
kono
parents:
diff changeset
1160 case (5) ! IEEE_NEGATIVE_DENORMAL
kono
parents:
diff changeset
1161 res = -tiny(res)
kono
parents:
diff changeset
1162 res = res / 2
kono
parents:
diff changeset
1163 case (6) ! IEEE_NEGATIVE_ZERO
kono
parents:
diff changeset
1164 res = 0
kono
parents:
diff changeset
1165 res = -res
kono
parents:
diff changeset
1166 case (7) ! IEEE_POSITIVE_ZERO
kono
parents:
diff changeset
1167 res = 0
kono
parents:
diff changeset
1168 case (8) ! IEEE_POSITIVE_DENORMAL
kono
parents:
diff changeset
1169 res = tiny(res)
kono
parents:
diff changeset
1170 res = res / 2
kono
parents:
diff changeset
1171 case (9) ! IEEE_POSITIVE_NORMAL
kono
parents:
diff changeset
1172 res = 42
kono
parents:
diff changeset
1173 case (10) ! IEEE_POSITIVE_INF
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1174 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1175 call ieee_get_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1176 call ieee_set_halting_mode(ieee_overflow, .false.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1177 end if
111
kono
parents:
diff changeset
1178 res = huge(res)
kono
parents:
diff changeset
1179 res = res * res
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1180 if (ieee_support_halting(ieee_overflow)) then
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1181 call ieee_set_halting_mode(ieee_overflow, flag)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1182 end if
111
kono
parents:
diff changeset
1183 case default ! IEEE_OTHER_VALUE, should not happen
kono
parents:
diff changeset
1184 res = 0
kono
parents:
diff changeset
1185 end select
kono
parents:
diff changeset
1186 end function
kono
parents:
diff changeset
1187 #endif
kono
parents:
diff changeset
1188
kono
parents:
diff changeset
1189
kono
parents:
diff changeset
1190 ! IEEE_GET_ROUNDING_MODE
kono
parents:
diff changeset
1191
kono
parents:
diff changeset
1192 subroutine IEEE_GET_ROUNDING_MODE (ROUND_VALUE)
kono
parents:
diff changeset
1193 implicit none
kono
parents:
diff changeset
1194 type(IEEE_ROUND_TYPE), intent(out) :: ROUND_VALUE
kono
parents:
diff changeset
1195
kono
parents:
diff changeset
1196 interface
kono
parents:
diff changeset
1197 integer function helper() &
kono
parents:
diff changeset
1198 bind(c, name="_gfortrani_get_fpu_rounding_mode")
kono
parents:
diff changeset
1199 end function
kono
parents:
diff changeset
1200 end interface
kono
parents:
diff changeset
1201
kono
parents:
diff changeset
1202 ROUND_VALUE = IEEE_ROUND_TYPE(helper())
kono
parents:
diff changeset
1203 end subroutine
kono
parents:
diff changeset
1204
kono
parents:
diff changeset
1205
kono
parents:
diff changeset
1206 ! IEEE_SET_ROUNDING_MODE
kono
parents:
diff changeset
1207
kono
parents:
diff changeset
1208 subroutine IEEE_SET_ROUNDING_MODE (ROUND_VALUE)
kono
parents:
diff changeset
1209 implicit none
kono
parents:
diff changeset
1210 type(IEEE_ROUND_TYPE), intent(in) :: ROUND_VALUE
kono
parents:
diff changeset
1211
kono
parents:
diff changeset
1212 interface
kono
parents:
diff changeset
1213 subroutine helper(val) &
kono
parents:
diff changeset
1214 bind(c, name="_gfortrani_set_fpu_rounding_mode")
kono
parents:
diff changeset
1215 integer, value :: val
kono
parents:
diff changeset
1216 end subroutine
kono
parents:
diff changeset
1217 end interface
kono
parents:
diff changeset
1218
kono
parents:
diff changeset
1219 call helper(ROUND_VALUE%hidden)
kono
parents:
diff changeset
1220 end subroutine
kono
parents:
diff changeset
1221
kono
parents:
diff changeset
1222
kono
parents:
diff changeset
1223 ! IEEE_GET_UNDERFLOW_MODE
kono
parents:
diff changeset
1224
kono
parents:
diff changeset
1225 subroutine IEEE_GET_UNDERFLOW_MODE (GRADUAL)
kono
parents:
diff changeset
1226 implicit none
kono
parents:
diff changeset
1227 logical, intent(out) :: GRADUAL
kono
parents:
diff changeset
1228
kono
parents:
diff changeset
1229 interface
kono
parents:
diff changeset
1230 integer function helper() &
kono
parents:
diff changeset
1231 bind(c, name="_gfortrani_get_fpu_underflow_mode")
kono
parents:
diff changeset
1232 end function
kono
parents:
diff changeset
1233 end interface
kono
parents:
diff changeset
1234
kono
parents:
diff changeset
1235 GRADUAL = (helper() /= 0)
kono
parents:
diff changeset
1236 end subroutine
kono
parents:
diff changeset
1237
kono
parents:
diff changeset
1238
kono
parents:
diff changeset
1239 ! IEEE_SET_UNDERFLOW_MODE
kono
parents:
diff changeset
1240
kono
parents:
diff changeset
1241 subroutine IEEE_SET_UNDERFLOW_MODE (GRADUAL)
kono
parents:
diff changeset
1242 implicit none
kono
parents:
diff changeset
1243 logical, intent(in) :: GRADUAL
kono
parents:
diff changeset
1244
kono
parents:
diff changeset
1245 interface
kono
parents:
diff changeset
1246 subroutine helper(val) &
kono
parents:
diff changeset
1247 bind(c, name="_gfortrani_set_fpu_underflow_mode")
kono
parents:
diff changeset
1248 integer, value :: val
kono
parents:
diff changeset
1249 end subroutine
kono
parents:
diff changeset
1250 end interface
kono
parents:
diff changeset
1251
kono
parents:
diff changeset
1252 call helper(merge(1, 0, GRADUAL))
kono
parents:
diff changeset
1253 end subroutine
kono
parents:
diff changeset
1254
kono
parents:
diff changeset
1255 ! IEEE_SUPPORT_ROUNDING
kono
parents:
diff changeset
1256
kono
parents:
diff changeset
1257 pure logical function IEEE_SUPPORT_ROUNDING_4 (ROUND_VALUE, X) result(res)
kono
parents:
diff changeset
1258 implicit none
kono
parents:
diff changeset
1259 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
1260 type(IEEE_ROUND_TYPE), intent(in) :: ROUND_VALUE
kono
parents:
diff changeset
1261 res = (support_rounding_helper(ROUND_VALUE%hidden) /= 0)
kono
parents:
diff changeset
1262 end function
kono
parents:
diff changeset
1263
kono
parents:
diff changeset
1264 pure logical function IEEE_SUPPORT_ROUNDING_8 (ROUND_VALUE, X) result(res)
kono
parents:
diff changeset
1265 implicit none
kono
parents:
diff changeset
1266 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
1267 type(IEEE_ROUND_TYPE), intent(in) :: ROUND_VALUE
kono
parents:
diff changeset
1268 res = (support_rounding_helper(ROUND_VALUE%hidden) /= 0)
kono
parents:
diff changeset
1269 end function
kono
parents:
diff changeset
1270
kono
parents:
diff changeset
1271 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1272 pure logical function IEEE_SUPPORT_ROUNDING_10 (ROUND_VALUE, X) result(res)
kono
parents:
diff changeset
1273 implicit none
kono
parents:
diff changeset
1274 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
1275 type(IEEE_ROUND_TYPE), intent(in) :: ROUND_VALUE
kono
parents:
diff changeset
1276 res = (support_rounding_helper(ROUND_VALUE%hidden) /= 0)
kono
parents:
diff changeset
1277 end function
kono
parents:
diff changeset
1278 #endif
kono
parents:
diff changeset
1279
kono
parents:
diff changeset
1280 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1281 pure logical function IEEE_SUPPORT_ROUNDING_16 (ROUND_VALUE, X) result(res)
kono
parents:
diff changeset
1282 implicit none
kono
parents:
diff changeset
1283 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
1284 type(IEEE_ROUND_TYPE), intent(in) :: ROUND_VALUE
kono
parents:
diff changeset
1285 res = (support_rounding_helper(ROUND_VALUE%hidden) /= 0)
kono
parents:
diff changeset
1286 end function
kono
parents:
diff changeset
1287 #endif
kono
parents:
diff changeset
1288
kono
parents:
diff changeset
1289 pure logical function IEEE_SUPPORT_ROUNDING_NOARG (ROUND_VALUE) result(res)
kono
parents:
diff changeset
1290 implicit none
kono
parents:
diff changeset
1291 type(IEEE_ROUND_TYPE), intent(in) :: ROUND_VALUE
kono
parents:
diff changeset
1292 res = (support_rounding_helper(ROUND_VALUE%hidden) /= 0)
kono
parents:
diff changeset
1293 end function
kono
parents:
diff changeset
1294
kono
parents:
diff changeset
1295 ! IEEE_SUPPORT_UNDERFLOW_CONTROL
kono
parents:
diff changeset
1296
kono
parents:
diff changeset
1297 pure logical function IEEE_SUPPORT_UNDERFLOW_CONTROL_4 (X) result(res)
kono
parents:
diff changeset
1298 implicit none
kono
parents:
diff changeset
1299 real(kind=4), intent(in) :: X
kono
parents:
diff changeset
1300 res = (support_underflow_control_helper(4) /= 0)
kono
parents:
diff changeset
1301 end function
kono
parents:
diff changeset
1302
kono
parents:
diff changeset
1303 pure logical function IEEE_SUPPORT_UNDERFLOW_CONTROL_8 (X) result(res)
kono
parents:
diff changeset
1304 implicit none
kono
parents:
diff changeset
1305 real(kind=8), intent(in) :: X
kono
parents:
diff changeset
1306 res = (support_underflow_control_helper(8) /= 0)
kono
parents:
diff changeset
1307 end function
kono
parents:
diff changeset
1308
kono
parents:
diff changeset
1309 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1310 pure logical function IEEE_SUPPORT_UNDERFLOW_CONTROL_10 (X) result(res)
kono
parents:
diff changeset
1311 implicit none
kono
parents:
diff changeset
1312 real(kind=10), intent(in) :: X
kono
parents:
diff changeset
1313 res = (support_underflow_control_helper(10) /= 0)
kono
parents:
diff changeset
1314 end function
kono
parents:
diff changeset
1315 #endif
kono
parents:
diff changeset
1316
kono
parents:
diff changeset
1317 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1318 pure logical function IEEE_SUPPORT_UNDERFLOW_CONTROL_16 (X) result(res)
kono
parents:
diff changeset
1319 implicit none
kono
parents:
diff changeset
1320 real(kind=16), intent(in) :: X
kono
parents:
diff changeset
1321 res = (support_underflow_control_helper(16) /= 0)
kono
parents:
diff changeset
1322 end function
kono
parents:
diff changeset
1323 #endif
kono
parents:
diff changeset
1324
kono
parents:
diff changeset
1325 pure logical function IEEE_SUPPORT_UNDERFLOW_CONTROL_NOARG () result(res)
kono
parents:
diff changeset
1326 implicit none
kono
parents:
diff changeset
1327 res = (support_underflow_control_helper(4) /= 0 &
kono
parents:
diff changeset
1328 .and. support_underflow_control_helper(8) /= 0 &
kono
parents:
diff changeset
1329 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1330 .and. support_underflow_control_helper(10) /= 0 &
kono
parents:
diff changeset
1331 #endif
kono
parents:
diff changeset
1332 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1333 .and. support_underflow_control_helper(16) /= 0 &
kono
parents:
diff changeset
1334 #endif
kono
parents:
diff changeset
1335 )
kono
parents:
diff changeset
1336 end function
kono
parents:
diff changeset
1337
kono
parents:
diff changeset
1338 ! IEEE_SUPPORT_* functions
kono
parents:
diff changeset
1339
kono
parents:
diff changeset
1340 #define SUPPORTMACRO(NAME, INTKIND, VALUE) \
kono
parents:
diff changeset
1341 pure logical function NAME/**/_/**/INTKIND (X) result(res) ; \
kono
parents:
diff changeset
1342 implicit none ; \
kono
parents:
diff changeset
1343 real(INTKIND), intent(in) :: X(..) ; \
kono
parents:
diff changeset
1344 res = VALUE ; \
kono
parents:
diff changeset
1345 end function
kono
parents:
diff changeset
1346
kono
parents:
diff changeset
1347 #define SUPPORTMACRO_NOARG(NAME, VALUE) \
kono
parents:
diff changeset
1348 pure logical function NAME/**/_NOARG () result(res) ; \
kono
parents:
diff changeset
1349 implicit none ; \
kono
parents:
diff changeset
1350 res = VALUE ; \
kono
parents:
diff changeset
1351 end function
kono
parents:
diff changeset
1352
kono
parents:
diff changeset
1353 ! IEEE_SUPPORT_DATATYPE
kono
parents:
diff changeset
1354
kono
parents:
diff changeset
1355 SUPPORTMACRO(IEEE_SUPPORT_DATATYPE,4,.true.)
kono
parents:
diff changeset
1356 SUPPORTMACRO(IEEE_SUPPORT_DATATYPE,8,.true.)
kono
parents:
diff changeset
1357 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1358 SUPPORTMACRO(IEEE_SUPPORT_DATATYPE,10,.true.)
kono
parents:
diff changeset
1359 #endif
kono
parents:
diff changeset
1360 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1361 SUPPORTMACRO(IEEE_SUPPORT_DATATYPE,16,.true.)
kono
parents:
diff changeset
1362 #endif
kono
parents:
diff changeset
1363 SUPPORTMACRO_NOARG(IEEE_SUPPORT_DATATYPE,.true.)
kono
parents:
diff changeset
1364
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1365 ! IEEE_SUPPORT_DENORMAL and IEEE_SUPPORT_SUBNORMAL
111
kono
parents:
diff changeset
1366
kono
parents:
diff changeset
1367 SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,4,.true.)
kono
parents:
diff changeset
1368 SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,8,.true.)
kono
parents:
diff changeset
1369 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1370 SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,10,.true.)
kono
parents:
diff changeset
1371 #endif
kono
parents:
diff changeset
1372 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1373 SUPPORTMACRO(IEEE_SUPPORT_DENORMAL,16,.true.)
kono
parents:
diff changeset
1374 #endif
kono
parents:
diff changeset
1375 SUPPORTMACRO_NOARG(IEEE_SUPPORT_DENORMAL,.true.)
kono
parents:
diff changeset
1376
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1377 SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,4,.true.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1378 SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,8,.true.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1379 #ifdef HAVE_GFC_REAL_10
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1380 SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,10,.true.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1381 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1382 #ifdef HAVE_GFC_REAL_16
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1383 SUPPORTMACRO(IEEE_SUPPORT_SUBNORMAL,16,.true.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1384 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1385 SUPPORTMACRO_NOARG(IEEE_SUPPORT_SUBNORMAL,.true.)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1386
111
kono
parents:
diff changeset
1387 ! IEEE_SUPPORT_DIVIDE
kono
parents:
diff changeset
1388
kono
parents:
diff changeset
1389 SUPPORTMACRO(IEEE_SUPPORT_DIVIDE,4,.true.)
kono
parents:
diff changeset
1390 SUPPORTMACRO(IEEE_SUPPORT_DIVIDE,8,.true.)
kono
parents:
diff changeset
1391 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1392 SUPPORTMACRO(IEEE_SUPPORT_DIVIDE,10,.true.)
kono
parents:
diff changeset
1393 #endif
kono
parents:
diff changeset
1394 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1395 SUPPORTMACRO(IEEE_SUPPORT_DIVIDE,16,.true.)
kono
parents:
diff changeset
1396 #endif
kono
parents:
diff changeset
1397 SUPPORTMACRO_NOARG(IEEE_SUPPORT_DIVIDE,.true.)
kono
parents:
diff changeset
1398
kono
parents:
diff changeset
1399 ! IEEE_SUPPORT_INF
kono
parents:
diff changeset
1400
kono
parents:
diff changeset
1401 SUPPORTMACRO(IEEE_SUPPORT_INF,4,.true.)
kono
parents:
diff changeset
1402 SUPPORTMACRO(IEEE_SUPPORT_INF,8,.true.)
kono
parents:
diff changeset
1403 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1404 SUPPORTMACRO(IEEE_SUPPORT_INF,10,.true.)
kono
parents:
diff changeset
1405 #endif
kono
parents:
diff changeset
1406 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1407 SUPPORTMACRO(IEEE_SUPPORT_INF,16,.true.)
kono
parents:
diff changeset
1408 #endif
kono
parents:
diff changeset
1409 SUPPORTMACRO_NOARG(IEEE_SUPPORT_INF,.true.)
kono
parents:
diff changeset
1410
kono
parents:
diff changeset
1411 ! IEEE_SUPPORT_IO
kono
parents:
diff changeset
1412
kono
parents:
diff changeset
1413 SUPPORTMACRO(IEEE_SUPPORT_IO,4,.true.)
kono
parents:
diff changeset
1414 SUPPORTMACRO(IEEE_SUPPORT_IO,8,.true.)
kono
parents:
diff changeset
1415 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1416 SUPPORTMACRO(IEEE_SUPPORT_IO,10,.true.)
kono
parents:
diff changeset
1417 #endif
kono
parents:
diff changeset
1418 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1419 SUPPORTMACRO(IEEE_SUPPORT_IO,16,.true.)
kono
parents:
diff changeset
1420 #endif
kono
parents:
diff changeset
1421 SUPPORTMACRO_NOARG(IEEE_SUPPORT_IO,.true.)
kono
parents:
diff changeset
1422
kono
parents:
diff changeset
1423 ! IEEE_SUPPORT_NAN
kono
parents:
diff changeset
1424
kono
parents:
diff changeset
1425 SUPPORTMACRO(IEEE_SUPPORT_NAN,4,.true.)
kono
parents:
diff changeset
1426 SUPPORTMACRO(IEEE_SUPPORT_NAN,8,.true.)
kono
parents:
diff changeset
1427 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1428 SUPPORTMACRO(IEEE_SUPPORT_NAN,10,.true.)
kono
parents:
diff changeset
1429 #endif
kono
parents:
diff changeset
1430 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1431 SUPPORTMACRO(IEEE_SUPPORT_NAN,16,.true.)
kono
parents:
diff changeset
1432 #endif
kono
parents:
diff changeset
1433 SUPPORTMACRO_NOARG(IEEE_SUPPORT_NAN,.true.)
kono
parents:
diff changeset
1434
kono
parents:
diff changeset
1435 ! IEEE_SUPPORT_SQRT
kono
parents:
diff changeset
1436
kono
parents:
diff changeset
1437 SUPPORTMACRO(IEEE_SUPPORT_SQRT,4,.true.)
kono
parents:
diff changeset
1438 SUPPORTMACRO(IEEE_SUPPORT_SQRT,8,.true.)
kono
parents:
diff changeset
1439 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1440 SUPPORTMACRO(IEEE_SUPPORT_SQRT,10,.true.)
kono
parents:
diff changeset
1441 #endif
kono
parents:
diff changeset
1442 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1443 SUPPORTMACRO(IEEE_SUPPORT_SQRT,16,.true.)
kono
parents:
diff changeset
1444 #endif
kono
parents:
diff changeset
1445 SUPPORTMACRO_NOARG(IEEE_SUPPORT_SQRT,.true.)
kono
parents:
diff changeset
1446
kono
parents:
diff changeset
1447 ! IEEE_SUPPORT_STANDARD
kono
parents:
diff changeset
1448
kono
parents:
diff changeset
1449 SUPPORTMACRO(IEEE_SUPPORT_STANDARD,4,.true.)
kono
parents:
diff changeset
1450 SUPPORTMACRO(IEEE_SUPPORT_STANDARD,8,.true.)
kono
parents:
diff changeset
1451 #ifdef HAVE_GFC_REAL_10
kono
parents:
diff changeset
1452 SUPPORTMACRO(IEEE_SUPPORT_STANDARD,10,.true.)
kono
parents:
diff changeset
1453 #endif
kono
parents:
diff changeset
1454 #ifdef HAVE_GFC_REAL_16
kono
parents:
diff changeset
1455 SUPPORTMACRO(IEEE_SUPPORT_STANDARD,16,.true.)
kono
parents:
diff changeset
1456 #endif
kono
parents:
diff changeset
1457 SUPPORTMACRO_NOARG(IEEE_SUPPORT_STANDARD,.true.)
kono
parents:
diff changeset
1458
kono
parents:
diff changeset
1459 end module IEEE_ARITHMETIC