Warning: This file is not a C or C++ file. It does not have highlighting.
1 | //===-- include/flang/Runtime/numeric.h -------------------------*- C++ -*-===// |
---|---|
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | // Defines API between compiled code and the implementations of various numeric |
10 | // intrinsic functions in the runtime library. |
11 | |
12 | #ifndef FORTRAN_RUNTIME_NUMERIC_H_ |
13 | #define FORTRAN_RUNTIME_NUMERIC_H_ |
14 | |
15 | #include "flang/Common/float128.h" |
16 | #include "flang/Runtime/cpp-type.h" |
17 | #include "flang/Runtime/entry-names.h" |
18 | |
19 | namespace Fortran::runtime { |
20 | extern "C" { |
21 | |
22 | // CEILING |
23 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling4_1)( |
24 | CppTypeFor<TypeCategory::Real, 4>); |
25 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling4_2)( |
26 | CppTypeFor<TypeCategory::Real, 4>); |
27 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling4_4)( |
28 | CppTypeFor<TypeCategory::Real, 4>); |
29 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling4_8)( |
30 | CppTypeFor<TypeCategory::Real, 4>); |
31 | #ifdef __SIZEOF_INT128__ |
32 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling4_16)( |
33 | CppTypeFor<TypeCategory::Real, 4>); |
34 | #endif |
35 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling8_1)( |
36 | CppTypeFor<TypeCategory::Real, 8>); |
37 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling8_2)( |
38 | CppTypeFor<TypeCategory::Real, 8>); |
39 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling8_4)( |
40 | CppTypeFor<TypeCategory::Real, 8>); |
41 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling8_8)( |
42 | CppTypeFor<TypeCategory::Real, 8>); |
43 | #ifdef __SIZEOF_INT128__ |
44 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling8_16)( |
45 | CppTypeFor<TypeCategory::Real, 8>); |
46 | #endif |
47 | #if LDBL_MANT_DIG == 64 |
48 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling10_1)( |
49 | CppTypeFor<TypeCategory::Real, 10>); |
50 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling10_2)( |
51 | CppTypeFor<TypeCategory::Real, 10>); |
52 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling10_4)( |
53 | CppTypeFor<TypeCategory::Real, 10>); |
54 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling10_8)( |
55 | CppTypeFor<TypeCategory::Real, 10>); |
56 | #ifdef __SIZEOF_INT128__ |
57 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling10_16)( |
58 | CppTypeFor<TypeCategory::Real, 10>); |
59 | #endif |
60 | #endif |
61 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
62 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling16_1)( |
63 | CppTypeFor<TypeCategory::Real, 16>); |
64 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling16_2)( |
65 | CppTypeFor<TypeCategory::Real, 16>); |
66 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling16_4)( |
67 | CppTypeFor<TypeCategory::Real, 16>); |
68 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling16_8)( |
69 | CppTypeFor<TypeCategory::Real, 16>); |
70 | #ifdef __SIZEOF_INT128__ |
71 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling16_16)( |
72 | CppTypeFor<TypeCategory::Real, 16>); |
73 | #endif |
74 | #endif |
75 | |
76 | // EXPONENT is defined to return default INTEGER; support INTEGER(4 & 8) |
77 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent4_4)( |
78 | CppTypeFor<TypeCategory::Real, 4>); |
79 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent4_8)( |
80 | CppTypeFor<TypeCategory::Real, 4>); |
81 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent8_4)( |
82 | CppTypeFor<TypeCategory::Real, 8>); |
83 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent8_8)( |
84 | CppTypeFor<TypeCategory::Real, 8>); |
85 | #if LDBL_MANT_DIG == 64 |
86 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent10_4)( |
87 | CppTypeFor<TypeCategory::Real, 10>); |
88 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent10_8)( |
89 | CppTypeFor<TypeCategory::Real, 10>); |
90 | #endif |
91 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT |
92 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent16_4)( |
93 | CppTypeFor<TypeCategory::Real, 16>); |
94 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent16_8)( |
95 | CppTypeFor<TypeCategory::Real, 16>); |
96 | #endif |
97 | |
98 | // FLOOR |
99 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor4_1)( |
100 | CppTypeFor<TypeCategory::Real, 4>); |
101 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor4_2)( |
102 | CppTypeFor<TypeCategory::Real, 4>); |
103 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor4_4)( |
104 | CppTypeFor<TypeCategory::Real, 4>); |
105 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor4_8)( |
106 | CppTypeFor<TypeCategory::Real, 4>); |
107 | #ifdef __SIZEOF_INT128__ |
108 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor4_16)( |
109 | CppTypeFor<TypeCategory::Real, 4>); |
110 | #endif |
111 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor8_1)( |
112 | CppTypeFor<TypeCategory::Real, 8>); |
113 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor8_2)( |
114 | CppTypeFor<TypeCategory::Real, 8>); |
115 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor8_4)( |
116 | CppTypeFor<TypeCategory::Real, 8>); |
117 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor8_8)( |
118 | CppTypeFor<TypeCategory::Real, 8>); |
119 | #ifdef __SIZEOF_INT128__ |
120 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor8_16)( |
121 | CppTypeFor<TypeCategory::Real, 8>); |
122 | #endif |
123 | #if LDBL_MANT_DIG == 64 |
124 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor10_1)( |
125 | CppTypeFor<TypeCategory::Real, 10>); |
126 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor10_2)( |
127 | CppTypeFor<TypeCategory::Real, 10>); |
128 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor10_4)( |
129 | CppTypeFor<TypeCategory::Real, 10>); |
130 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor10_8)( |
131 | CppTypeFor<TypeCategory::Real, 10>); |
132 | #ifdef __SIZEOF_INT128__ |
133 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor10_16)( |
134 | CppTypeFor<TypeCategory::Real, 10>); |
135 | #endif |
136 | #endif |
137 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
138 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor16_1)( |
139 | CppTypeFor<TypeCategory::Real, 16>); |
140 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor16_2)( |
141 | CppTypeFor<TypeCategory::Real, 16>); |
142 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor16_4)( |
143 | CppTypeFor<TypeCategory::Real, 16>); |
144 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor16_8)( |
145 | CppTypeFor<TypeCategory::Real, 16>); |
146 | #ifdef __SIZEOF_INT128__ |
147 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor16_16)( |
148 | CppTypeFor<TypeCategory::Real, 16>); |
149 | #endif |
150 | #endif |
151 | |
152 | // FRACTION |
153 | CppTypeFor<TypeCategory::Real, 4> RTDECL(Fraction4)( |
154 | CppTypeFor<TypeCategory::Real, 4>); |
155 | CppTypeFor<TypeCategory::Real, 8> RTDECL(Fraction8)( |
156 | CppTypeFor<TypeCategory::Real, 8>); |
157 | #if LDBL_MANT_DIG == 64 |
158 | CppTypeFor<TypeCategory::Real, 10> RTDECL(Fraction10)( |
159 | CppTypeFor<TypeCategory::Real, 10>); |
160 | #endif |
161 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
162 | CppTypeFor<TypeCategory::Real, 16> RTDECL(Fraction16)( |
163 | CppTypeFor<TypeCategory::Real, 16>); |
164 | #endif |
165 | |
166 | // ISNAN / IEEE_IS_NAN |
167 | bool RTDECL(IsNaN4)(CppTypeFor<TypeCategory::Real, 4>); |
168 | bool RTDECL(IsNaN8)(CppTypeFor<TypeCategory::Real, 8>); |
169 | #if LDBL_MANT_DIG == 64 |
170 | bool RTDECL(IsNaN10)(CppTypeFor<TypeCategory::Real, 10>); |
171 | #endif |
172 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
173 | bool RTDECL(IsNaN16)(CppTypeFor<TypeCategory::Real, 16>); |
174 | #endif |
175 | |
176 | // MOD & MODULO |
177 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(ModInteger1)( |
178 | CppTypeFor<TypeCategory::Integer, 1>, CppTypeFor<TypeCategory::Integer, 1>, |
179 | const char *sourceFile = nullptr, int sourceLine = 0); |
180 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(ModInteger2)( |
181 | CppTypeFor<TypeCategory::Integer, 2>, CppTypeFor<TypeCategory::Integer, 2>, |
182 | const char *sourceFile = nullptr, int sourceLine = 0); |
183 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(ModInteger4)( |
184 | CppTypeFor<TypeCategory::Integer, 4>, CppTypeFor<TypeCategory::Integer, 4>, |
185 | const char *sourceFile = nullptr, int sourceLine = 0); |
186 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(ModInteger8)( |
187 | CppTypeFor<TypeCategory::Integer, 8>, CppTypeFor<TypeCategory::Integer, 8>, |
188 | const char *sourceFile = nullptr, int sourceLine = 0); |
189 | #ifdef __SIZEOF_INT128__ |
190 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(ModInteger16)( |
191 | CppTypeFor<TypeCategory::Integer, 16>, |
192 | CppTypeFor<TypeCategory::Integer, 16>, const char *sourceFile = nullptr, |
193 | int sourceLine = 0); |
194 | #endif |
195 | CppTypeFor<TypeCategory::Real, 4> RTDECL(ModReal4)( |
196 | CppTypeFor<TypeCategory::Real, 4>, CppTypeFor<TypeCategory::Real, 4>, |
197 | const char *sourceFile = nullptr, int sourceLine = 0); |
198 | CppTypeFor<TypeCategory::Real, 8> RTDECL(ModReal8)( |
199 | CppTypeFor<TypeCategory::Real, 8>, CppTypeFor<TypeCategory::Real, 8>, |
200 | const char *sourceFile = nullptr, int sourceLine = 0); |
201 | #if LDBL_MANT_DIG == 64 |
202 | CppTypeFor<TypeCategory::Real, 10> RTDECL(ModReal10)( |
203 | CppTypeFor<TypeCategory::Real, 10>, CppTypeFor<TypeCategory::Real, 10>, |
204 | const char *sourceFile = nullptr, int sourceLine = 0); |
205 | #endif |
206 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
207 | CppTypeFor<TypeCategory::Real, 16> RTDECL(ModReal16)( |
208 | CppTypeFor<TypeCategory::Real, 16>, CppTypeFor<TypeCategory::Real, 16>, |
209 | const char *sourceFile = nullptr, int sourceLine = 0); |
210 | #endif |
211 | |
212 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(ModuloInteger1)( |
213 | CppTypeFor<TypeCategory::Integer, 1>, CppTypeFor<TypeCategory::Integer, 1>, |
214 | const char *sourceFile = nullptr, int sourceLine = 0); |
215 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(ModuloInteger2)( |
216 | CppTypeFor<TypeCategory::Integer, 2>, CppTypeFor<TypeCategory::Integer, 2>, |
217 | const char *sourceFile = nullptr, int sourceLine = 0); |
218 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(ModuloInteger4)( |
219 | CppTypeFor<TypeCategory::Integer, 4>, CppTypeFor<TypeCategory::Integer, 4>, |
220 | const char *sourceFile = nullptr, int sourceLine = 0); |
221 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(ModuloInteger8)( |
222 | CppTypeFor<TypeCategory::Integer, 8>, CppTypeFor<TypeCategory::Integer, 8>, |
223 | const char *sourceFile = nullptr, int sourceLine = 0); |
224 | #ifdef __SIZEOF_INT128__ |
225 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(ModuloInteger16)( |
226 | CppTypeFor<TypeCategory::Integer, 16>, |
227 | CppTypeFor<TypeCategory::Integer, 16>, const char *sourceFile = nullptr, |
228 | int sourceLine = 0); |
229 | #endif |
230 | CppTypeFor<TypeCategory::Real, 4> RTDECL(ModuloReal4)( |
231 | CppTypeFor<TypeCategory::Real, 4>, CppTypeFor<TypeCategory::Real, 4>, |
232 | const char *sourceFile = nullptr, int sourceLine = 0); |
233 | CppTypeFor<TypeCategory::Real, 8> RTDECL(ModuloReal8)( |
234 | CppTypeFor<TypeCategory::Real, 8>, CppTypeFor<TypeCategory::Real, 8>, |
235 | const char *sourceFile = nullptr, int sourceLine = 0); |
236 | #if LDBL_MANT_DIG == 64 |
237 | CppTypeFor<TypeCategory::Real, 10> RTDECL(ModuloReal10)( |
238 | CppTypeFor<TypeCategory::Real, 10>, CppTypeFor<TypeCategory::Real, 10>, |
239 | const char *sourceFile = nullptr, int sourceLine = 0); |
240 | #endif |
241 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
242 | CppTypeFor<TypeCategory::Real, 16> RTDECL(ModuloReal16)( |
243 | CppTypeFor<TypeCategory::Real, 16>, CppTypeFor<TypeCategory::Real, 16>, |
244 | const char *sourceFile = nullptr, int sourceLine = 0); |
245 | #endif |
246 | |
247 | // NINT |
248 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint4_1)( |
249 | CppTypeFor<TypeCategory::Real, 4>); |
250 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint4_2)( |
251 | CppTypeFor<TypeCategory::Real, 4>); |
252 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint4_4)( |
253 | CppTypeFor<TypeCategory::Real, 4>); |
254 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint4_8)( |
255 | CppTypeFor<TypeCategory::Real, 4>); |
256 | #ifdef __SIZEOF_INT128__ |
257 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint4_16)( |
258 | CppTypeFor<TypeCategory::Real, 4>); |
259 | #endif |
260 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint8_1)( |
261 | CppTypeFor<TypeCategory::Real, 8>); |
262 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint8_2)( |
263 | CppTypeFor<TypeCategory::Real, 8>); |
264 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint8_4)( |
265 | CppTypeFor<TypeCategory::Real, 8>); |
266 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint8_8)( |
267 | CppTypeFor<TypeCategory::Real, 8>); |
268 | #ifdef __SIZEOF_INT128__ |
269 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint8_16)( |
270 | CppTypeFor<TypeCategory::Real, 8>); |
271 | #endif |
272 | #if LDBL_MANT_DIG == 64 |
273 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint10_1)( |
274 | CppTypeFor<TypeCategory::Real, 10>); |
275 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint10_2)( |
276 | CppTypeFor<TypeCategory::Real, 10>); |
277 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint10_4)( |
278 | CppTypeFor<TypeCategory::Real, 10>); |
279 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint10_8)( |
280 | CppTypeFor<TypeCategory::Real, 10>); |
281 | #ifdef __SIZEOF_INT128__ |
282 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint10_16)( |
283 | CppTypeFor<TypeCategory::Real, 10>); |
284 | #endif |
285 | #endif |
286 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
287 | CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint16_1)( |
288 | CppTypeFor<TypeCategory::Real, 16>); |
289 | CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint16_2)( |
290 | CppTypeFor<TypeCategory::Real, 16>); |
291 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint16_4)( |
292 | CppTypeFor<TypeCategory::Real, 16>); |
293 | CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint16_8)( |
294 | CppTypeFor<TypeCategory::Real, 16>); |
295 | #if defined __SIZEOF_INT128__ |
296 | CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint16_16)( |
297 | CppTypeFor<TypeCategory::Real, 16>); |
298 | #endif |
299 | #endif |
300 | |
301 | // NEAREST |
302 | // The second argument to NEAREST is the result of a comparison |
303 | // to zero (i.e., S > 0) |
304 | CppTypeFor<TypeCategory::Real, 4> RTDECL(Nearest4)( |
305 | CppTypeFor<TypeCategory::Real, 4>, bool positive); |
306 | CppTypeFor<TypeCategory::Real, 8> RTDECL(Nearest8)( |
307 | CppTypeFor<TypeCategory::Real, 8>, bool positive); |
308 | #if LDBL_MANT_DIG == 64 |
309 | CppTypeFor<TypeCategory::Real, 10> RTDECL(Nearest10)( |
310 | CppTypeFor<TypeCategory::Real, 10>, bool positive); |
311 | #endif |
312 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
313 | CppTypeFor<TypeCategory::Real, 16> RTDECL(Nearest16)( |
314 | CppTypeFor<TypeCategory::Real, 16>, bool positive); |
315 | #endif |
316 | |
317 | // RRSPACING |
318 | CppTypeFor<TypeCategory::Real, 4> RTDECL(RRSpacing4)( |
319 | CppTypeFor<TypeCategory::Real, 4>); |
320 | CppTypeFor<TypeCategory::Real, 8> RTDECL(RRSpacing8)( |
321 | CppTypeFor<TypeCategory::Real, 8>); |
322 | #if LDBL_MANT_DIG == 64 |
323 | CppTypeFor<TypeCategory::Real, 10> RTDECL(RRSpacing10)( |
324 | CppTypeFor<TypeCategory::Real, 10>); |
325 | #endif |
326 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
327 | CppTypeFor<TypeCategory::Real, 16> RTDECL(RRSpacing16)( |
328 | CppTypeFor<TypeCategory::Real, 16>); |
329 | #endif |
330 | |
331 | // SET_EXPONENT's I= argument can be any INTEGER kind; upcast it to 64-bit |
332 | CppTypeFor<TypeCategory::Real, 4> RTDECL(SetExponent4)( |
333 | CppTypeFor<TypeCategory::Real, 4>, std::int64_t); |
334 | CppTypeFor<TypeCategory::Real, 8> RTDECL(SetExponent8)( |
335 | CppTypeFor<TypeCategory::Real, 8>, std::int64_t); |
336 | #if LDBL_MANT_DIG == 64 |
337 | CppTypeFor<TypeCategory::Real, 10> RTDECL(SetExponent10)( |
338 | CppTypeFor<TypeCategory::Real, 10>, std::int64_t); |
339 | #endif |
340 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
341 | CppTypeFor<TypeCategory::Real, 16> RTDECL(SetExponent16)( |
342 | CppTypeFor<TypeCategory::Real, 16>, std::int64_t); |
343 | #endif |
344 | |
345 | // SCALE |
346 | CppTypeFor<TypeCategory::Real, 4> RTDECL(Scale4)( |
347 | CppTypeFor<TypeCategory::Real, 4>, std::int64_t); |
348 | CppTypeFor<TypeCategory::Real, 8> RTDECL(Scale8)( |
349 | CppTypeFor<TypeCategory::Real, 8>, std::int64_t); |
350 | #if LDBL_MANT_DIG == 64 |
351 | CppTypeFor<TypeCategory::Real, 10> RTDECL(Scale10)( |
352 | CppTypeFor<TypeCategory::Real, 10>, std::int64_t); |
353 | #endif |
354 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
355 | CppTypeFor<TypeCategory::Real, 16> RTDECL(Scale16)( |
356 | CppTypeFor<TypeCategory::Real, 16>, std::int64_t); |
357 | #endif |
358 | |
359 | // SELECTED_INT_KIND |
360 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedIntKind)( |
361 | const char *, int, void *, int); |
362 | |
363 | // SELECTED_REAL_KIND |
364 | CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedRealKind)( |
365 | const char *, int, void *, int, void *, int, void *, int); |
366 | |
367 | // SPACING |
368 | CppTypeFor<TypeCategory::Real, 4> RTDECL(Spacing4)( |
369 | CppTypeFor<TypeCategory::Real, 4>); |
370 | CppTypeFor<TypeCategory::Real, 8> RTDECL(Spacing8)( |
371 | CppTypeFor<TypeCategory::Real, 8>); |
372 | #if LDBL_MANT_DIG == 64 |
373 | CppTypeFor<TypeCategory::Real, 10> RTDECL(Spacing10)( |
374 | CppTypeFor<TypeCategory::Real, 10>); |
375 | #endif |
376 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
377 | CppTypeFor<TypeCategory::Real, 16> RTDECL(Spacing16)( |
378 | CppTypeFor<TypeCategory::Real, 16>); |
379 | #endif |
380 | |
381 | CppTypeFor<TypeCategory::Real, 4> RTDECL(FPow4i)( |
382 | CppTypeFor<TypeCategory::Real, 4> b, |
383 | CppTypeFor<TypeCategory::Integer, 4> e); |
384 | CppTypeFor<TypeCategory::Real, 8> RTDECL(FPow8i)( |
385 | CppTypeFor<TypeCategory::Real, 8> b, |
386 | CppTypeFor<TypeCategory::Integer, 4> e); |
387 | #if LDBL_MANT_DIG == 64 |
388 | CppTypeFor<TypeCategory::Real, 10> RTDECL(FPow10i)( |
389 | CppTypeFor<TypeCategory::Real, 10> b, |
390 | CppTypeFor<TypeCategory::Integer, 4> e); |
391 | #endif |
392 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
393 | CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16i)( |
394 | CppTypeFor<TypeCategory::Real, 16> b, |
395 | CppTypeFor<TypeCategory::Integer, 4> e); |
396 | #endif |
397 | |
398 | CppTypeFor<TypeCategory::Real, 4> RTDECL(FPow4k)( |
399 | CppTypeFor<TypeCategory::Real, 4> b, |
400 | CppTypeFor<TypeCategory::Integer, 8> e); |
401 | CppTypeFor<TypeCategory::Real, 8> RTDECL(FPow8k)( |
402 | CppTypeFor<TypeCategory::Real, 8> b, |
403 | CppTypeFor<TypeCategory::Integer, 8> e); |
404 | #if LDBL_MANT_DIG == 64 |
405 | CppTypeFor<TypeCategory::Real, 10> RTDECL(FPow10k)( |
406 | CppTypeFor<TypeCategory::Real, 10> b, |
407 | CppTypeFor<TypeCategory::Integer, 8> e); |
408 | #endif |
409 | #if LDBL_MANT_DIG == 113 || HAS_FLOAT128 |
410 | CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16k)( |
411 | CppTypeFor<TypeCategory::Real, 16> b, |
412 | CppTypeFor<TypeCategory::Integer, 8> e); |
413 | #endif |
414 | |
415 | } // extern "C" |
416 | } // namespace Fortran::runtime |
417 | #endif // FORTRAN_RUNTIME_NUMERIC_H_ |
418 |
Warning: This file is not a C or C++ file. It does not have highlighting.