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
19namespace Fortran::runtime {
20extern "C" {
21
22// CEILING
23CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling4_1)(
24 CppTypeFor<TypeCategory::Real, 4>);
25CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling4_2)(
26 CppTypeFor<TypeCategory::Real, 4>);
27CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling4_4)(
28 CppTypeFor<TypeCategory::Real, 4>);
29CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling4_8)(
30 CppTypeFor<TypeCategory::Real, 4>);
31#ifdef __SIZEOF_INT128__
32CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling4_16)(
33 CppTypeFor<TypeCategory::Real, 4>);
34#endif
35CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling8_1)(
36 CppTypeFor<TypeCategory::Real, 8>);
37CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling8_2)(
38 CppTypeFor<TypeCategory::Real, 8>);
39CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling8_4)(
40 CppTypeFor<TypeCategory::Real, 8>);
41CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling8_8)(
42 CppTypeFor<TypeCategory::Real, 8>);
43#ifdef __SIZEOF_INT128__
44CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling8_16)(
45 CppTypeFor<TypeCategory::Real, 8>);
46#endif
47#if LDBL_MANT_DIG == 64
48CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling10_1)(
49 CppTypeFor<TypeCategory::Real, 10>);
50CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling10_2)(
51 CppTypeFor<TypeCategory::Real, 10>);
52CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling10_4)(
53 CppTypeFor<TypeCategory::Real, 10>);
54CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling10_8)(
55 CppTypeFor<TypeCategory::Real, 10>);
56#ifdef __SIZEOF_INT128__
57CppTypeFor<TypeCategory::Integer, 16> RTDECL(Ceiling10_16)(
58 CppTypeFor<TypeCategory::Real, 10>);
59#endif
60#endif
61#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
62CppTypeFor<TypeCategory::Integer, 1> RTDECL(Ceiling16_1)(
63 CppTypeFor<TypeCategory::Real, 16>);
64CppTypeFor<TypeCategory::Integer, 2> RTDECL(Ceiling16_2)(
65 CppTypeFor<TypeCategory::Real, 16>);
66CppTypeFor<TypeCategory::Integer, 4> RTDECL(Ceiling16_4)(
67 CppTypeFor<TypeCategory::Real, 16>);
68CppTypeFor<TypeCategory::Integer, 8> RTDECL(Ceiling16_8)(
69 CppTypeFor<TypeCategory::Real, 16>);
70#ifdef __SIZEOF_INT128__
71CppTypeFor<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)
77CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent4_4)(
78 CppTypeFor<TypeCategory::Real, 4>);
79CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent4_8)(
80 CppTypeFor<TypeCategory::Real, 4>);
81CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent8_4)(
82 CppTypeFor<TypeCategory::Real, 8>);
83CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent8_8)(
84 CppTypeFor<TypeCategory::Real, 8>);
85#if LDBL_MANT_DIG == 64
86CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent10_4)(
87 CppTypeFor<TypeCategory::Real, 10>);
88CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent10_8)(
89 CppTypeFor<TypeCategory::Real, 10>);
90#endif
91#if LDBL_MANT_DIG == 113 || HAS_FLOAT
92CppTypeFor<TypeCategory::Integer, 4> RTDECL(Exponent16_4)(
93 CppTypeFor<TypeCategory::Real, 16>);
94CppTypeFor<TypeCategory::Integer, 8> RTDECL(Exponent16_8)(
95 CppTypeFor<TypeCategory::Real, 16>);
96#endif
97
98// FLOOR
99CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor4_1)(
100 CppTypeFor<TypeCategory::Real, 4>);
101CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor4_2)(
102 CppTypeFor<TypeCategory::Real, 4>);
103CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor4_4)(
104 CppTypeFor<TypeCategory::Real, 4>);
105CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor4_8)(
106 CppTypeFor<TypeCategory::Real, 4>);
107#ifdef __SIZEOF_INT128__
108CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor4_16)(
109 CppTypeFor<TypeCategory::Real, 4>);
110#endif
111CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor8_1)(
112 CppTypeFor<TypeCategory::Real, 8>);
113CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor8_2)(
114 CppTypeFor<TypeCategory::Real, 8>);
115CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor8_4)(
116 CppTypeFor<TypeCategory::Real, 8>);
117CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor8_8)(
118 CppTypeFor<TypeCategory::Real, 8>);
119#ifdef __SIZEOF_INT128__
120CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor8_16)(
121 CppTypeFor<TypeCategory::Real, 8>);
122#endif
123#if LDBL_MANT_DIG == 64
124CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor10_1)(
125 CppTypeFor<TypeCategory::Real, 10>);
126CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor10_2)(
127 CppTypeFor<TypeCategory::Real, 10>);
128CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor10_4)(
129 CppTypeFor<TypeCategory::Real, 10>);
130CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor10_8)(
131 CppTypeFor<TypeCategory::Real, 10>);
132#ifdef __SIZEOF_INT128__
133CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor10_16)(
134 CppTypeFor<TypeCategory::Real, 10>);
135#endif
136#endif
137#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
138CppTypeFor<TypeCategory::Integer, 1> RTDECL(Floor16_1)(
139 CppTypeFor<TypeCategory::Real, 16>);
140CppTypeFor<TypeCategory::Integer, 2> RTDECL(Floor16_2)(
141 CppTypeFor<TypeCategory::Real, 16>);
142CppTypeFor<TypeCategory::Integer, 4> RTDECL(Floor16_4)(
143 CppTypeFor<TypeCategory::Real, 16>);
144CppTypeFor<TypeCategory::Integer, 8> RTDECL(Floor16_8)(
145 CppTypeFor<TypeCategory::Real, 16>);
146#ifdef __SIZEOF_INT128__
147CppTypeFor<TypeCategory::Integer, 16> RTDECL(Floor16_16)(
148 CppTypeFor<TypeCategory::Real, 16>);
149#endif
150#endif
151
152// FRACTION
153CppTypeFor<TypeCategory::Real, 4> RTDECL(Fraction4)(
154 CppTypeFor<TypeCategory::Real, 4>);
155CppTypeFor<TypeCategory::Real, 8> RTDECL(Fraction8)(
156 CppTypeFor<TypeCategory::Real, 8>);
157#if LDBL_MANT_DIG == 64
158CppTypeFor<TypeCategory::Real, 10> RTDECL(Fraction10)(
159 CppTypeFor<TypeCategory::Real, 10>);
160#endif
161#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
162CppTypeFor<TypeCategory::Real, 16> RTDECL(Fraction16)(
163 CppTypeFor<TypeCategory::Real, 16>);
164#endif
165
166// ISNAN / IEEE_IS_NAN
167bool RTDECL(IsNaN4)(CppTypeFor<TypeCategory::Real, 4>);
168bool RTDECL(IsNaN8)(CppTypeFor<TypeCategory::Real, 8>);
169#if LDBL_MANT_DIG == 64
170bool RTDECL(IsNaN10)(CppTypeFor<TypeCategory::Real, 10>);
171#endif
172#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
173bool RTDECL(IsNaN16)(CppTypeFor<TypeCategory::Real, 16>);
174#endif
175
176// MOD & MODULO
177CppTypeFor<TypeCategory::Integer, 1> RTDECL(ModInteger1)(
178 CppTypeFor<TypeCategory::Integer, 1>, CppTypeFor<TypeCategory::Integer, 1>,
179 const char *sourceFile = nullptr, int sourceLine = 0);
180CppTypeFor<TypeCategory::Integer, 2> RTDECL(ModInteger2)(
181 CppTypeFor<TypeCategory::Integer, 2>, CppTypeFor<TypeCategory::Integer, 2>,
182 const char *sourceFile = nullptr, int sourceLine = 0);
183CppTypeFor<TypeCategory::Integer, 4> RTDECL(ModInteger4)(
184 CppTypeFor<TypeCategory::Integer, 4>, CppTypeFor<TypeCategory::Integer, 4>,
185 const char *sourceFile = nullptr, int sourceLine = 0);
186CppTypeFor<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__
190CppTypeFor<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
195CppTypeFor<TypeCategory::Real, 4> RTDECL(ModReal4)(
196 CppTypeFor<TypeCategory::Real, 4>, CppTypeFor<TypeCategory::Real, 4>,
197 const char *sourceFile = nullptr, int sourceLine = 0);
198CppTypeFor<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
202CppTypeFor<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
207CppTypeFor<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
212CppTypeFor<TypeCategory::Integer, 1> RTDECL(ModuloInteger1)(
213 CppTypeFor<TypeCategory::Integer, 1>, CppTypeFor<TypeCategory::Integer, 1>,
214 const char *sourceFile = nullptr, int sourceLine = 0);
215CppTypeFor<TypeCategory::Integer, 2> RTDECL(ModuloInteger2)(
216 CppTypeFor<TypeCategory::Integer, 2>, CppTypeFor<TypeCategory::Integer, 2>,
217 const char *sourceFile = nullptr, int sourceLine = 0);
218CppTypeFor<TypeCategory::Integer, 4> RTDECL(ModuloInteger4)(
219 CppTypeFor<TypeCategory::Integer, 4>, CppTypeFor<TypeCategory::Integer, 4>,
220 const char *sourceFile = nullptr, int sourceLine = 0);
221CppTypeFor<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__
225CppTypeFor<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
230CppTypeFor<TypeCategory::Real, 4> RTDECL(ModuloReal4)(
231 CppTypeFor<TypeCategory::Real, 4>, CppTypeFor<TypeCategory::Real, 4>,
232 const char *sourceFile = nullptr, int sourceLine = 0);
233CppTypeFor<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
237CppTypeFor<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
242CppTypeFor<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
248CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint4_1)(
249 CppTypeFor<TypeCategory::Real, 4>);
250CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint4_2)(
251 CppTypeFor<TypeCategory::Real, 4>);
252CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint4_4)(
253 CppTypeFor<TypeCategory::Real, 4>);
254CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint4_8)(
255 CppTypeFor<TypeCategory::Real, 4>);
256#ifdef __SIZEOF_INT128__
257CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint4_16)(
258 CppTypeFor<TypeCategory::Real, 4>);
259#endif
260CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint8_1)(
261 CppTypeFor<TypeCategory::Real, 8>);
262CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint8_2)(
263 CppTypeFor<TypeCategory::Real, 8>);
264CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint8_4)(
265 CppTypeFor<TypeCategory::Real, 8>);
266CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint8_8)(
267 CppTypeFor<TypeCategory::Real, 8>);
268#ifdef __SIZEOF_INT128__
269CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint8_16)(
270 CppTypeFor<TypeCategory::Real, 8>);
271#endif
272#if LDBL_MANT_DIG == 64
273CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint10_1)(
274 CppTypeFor<TypeCategory::Real, 10>);
275CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint10_2)(
276 CppTypeFor<TypeCategory::Real, 10>);
277CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint10_4)(
278 CppTypeFor<TypeCategory::Real, 10>);
279CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint10_8)(
280 CppTypeFor<TypeCategory::Real, 10>);
281#ifdef __SIZEOF_INT128__
282CppTypeFor<TypeCategory::Integer, 16> RTDECL(Nint10_16)(
283 CppTypeFor<TypeCategory::Real, 10>);
284#endif
285#endif
286#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
287CppTypeFor<TypeCategory::Integer, 1> RTDECL(Nint16_1)(
288 CppTypeFor<TypeCategory::Real, 16>);
289CppTypeFor<TypeCategory::Integer, 2> RTDECL(Nint16_2)(
290 CppTypeFor<TypeCategory::Real, 16>);
291CppTypeFor<TypeCategory::Integer, 4> RTDECL(Nint16_4)(
292 CppTypeFor<TypeCategory::Real, 16>);
293CppTypeFor<TypeCategory::Integer, 8> RTDECL(Nint16_8)(
294 CppTypeFor<TypeCategory::Real, 16>);
295#if defined __SIZEOF_INT128__
296CppTypeFor<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)
304CppTypeFor<TypeCategory::Real, 4> RTDECL(Nearest4)(
305 CppTypeFor<TypeCategory::Real, 4>, bool positive);
306CppTypeFor<TypeCategory::Real, 8> RTDECL(Nearest8)(
307 CppTypeFor<TypeCategory::Real, 8>, bool positive);
308#if LDBL_MANT_DIG == 64
309CppTypeFor<TypeCategory::Real, 10> RTDECL(Nearest10)(
310 CppTypeFor<TypeCategory::Real, 10>, bool positive);
311#endif
312#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
313CppTypeFor<TypeCategory::Real, 16> RTDECL(Nearest16)(
314 CppTypeFor<TypeCategory::Real, 16>, bool positive);
315#endif
316
317// RRSPACING
318CppTypeFor<TypeCategory::Real, 4> RTDECL(RRSpacing4)(
319 CppTypeFor<TypeCategory::Real, 4>);
320CppTypeFor<TypeCategory::Real, 8> RTDECL(RRSpacing8)(
321 CppTypeFor<TypeCategory::Real, 8>);
322#if LDBL_MANT_DIG == 64
323CppTypeFor<TypeCategory::Real, 10> RTDECL(RRSpacing10)(
324 CppTypeFor<TypeCategory::Real, 10>);
325#endif
326#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
327CppTypeFor<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
332CppTypeFor<TypeCategory::Real, 4> RTDECL(SetExponent4)(
333 CppTypeFor<TypeCategory::Real, 4>, std::int64_t);
334CppTypeFor<TypeCategory::Real, 8> RTDECL(SetExponent8)(
335 CppTypeFor<TypeCategory::Real, 8>, std::int64_t);
336#if LDBL_MANT_DIG == 64
337CppTypeFor<TypeCategory::Real, 10> RTDECL(SetExponent10)(
338 CppTypeFor<TypeCategory::Real, 10>, std::int64_t);
339#endif
340#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
341CppTypeFor<TypeCategory::Real, 16> RTDECL(SetExponent16)(
342 CppTypeFor<TypeCategory::Real, 16>, std::int64_t);
343#endif
344
345// SCALE
346CppTypeFor<TypeCategory::Real, 4> RTDECL(Scale4)(
347 CppTypeFor<TypeCategory::Real, 4>, std::int64_t);
348CppTypeFor<TypeCategory::Real, 8> RTDECL(Scale8)(
349 CppTypeFor<TypeCategory::Real, 8>, std::int64_t);
350#if LDBL_MANT_DIG == 64
351CppTypeFor<TypeCategory::Real, 10> RTDECL(Scale10)(
352 CppTypeFor<TypeCategory::Real, 10>, std::int64_t);
353#endif
354#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
355CppTypeFor<TypeCategory::Real, 16> RTDECL(Scale16)(
356 CppTypeFor<TypeCategory::Real, 16>, std::int64_t);
357#endif
358
359// SELECTED_INT_KIND
360CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedIntKind)(
361 const char *, int, void *, int);
362
363// SELECTED_REAL_KIND
364CppTypeFor<TypeCategory::Integer, 4> RTDECL(SelectedRealKind)(
365 const char *, int, void *, int, void *, int, void *, int);
366
367// SPACING
368CppTypeFor<TypeCategory::Real, 4> RTDECL(Spacing4)(
369 CppTypeFor<TypeCategory::Real, 4>);
370CppTypeFor<TypeCategory::Real, 8> RTDECL(Spacing8)(
371 CppTypeFor<TypeCategory::Real, 8>);
372#if LDBL_MANT_DIG == 64
373CppTypeFor<TypeCategory::Real, 10> RTDECL(Spacing10)(
374 CppTypeFor<TypeCategory::Real, 10>);
375#endif
376#if LDBL_MANT_DIG == 113 || HAS_FLOAT128
377CppTypeFor<TypeCategory::Real, 16> RTDECL(Spacing16)(
378 CppTypeFor<TypeCategory::Real, 16>);
379#endif
380
381CppTypeFor<TypeCategory::Real, 4> RTDECL(FPow4i)(
382 CppTypeFor<TypeCategory::Real, 4> b,
383 CppTypeFor<TypeCategory::Integer, 4> e);
384CppTypeFor<TypeCategory::Real, 8> RTDECL(FPow8i)(
385 CppTypeFor<TypeCategory::Real, 8> b,
386 CppTypeFor<TypeCategory::Integer, 4> e);
387#if LDBL_MANT_DIG == 64
388CppTypeFor<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
393CppTypeFor<TypeCategory::Real, 16> RTDECL(FPow16i)(
394 CppTypeFor<TypeCategory::Real, 16> b,
395 CppTypeFor<TypeCategory::Integer, 4> e);
396#endif
397
398CppTypeFor<TypeCategory::Real, 4> RTDECL(FPow4k)(
399 CppTypeFor<TypeCategory::Real, 4> b,
400 CppTypeFor<TypeCategory::Integer, 8> e);
401CppTypeFor<TypeCategory::Real, 8> RTDECL(FPow8k)(
402 CppTypeFor<TypeCategory::Real, 8> b,
403 CppTypeFor<TypeCategory::Integer, 8> e);
404#if LDBL_MANT_DIG == 64
405CppTypeFor<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
410CppTypeFor<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.

source code of flang/include/flang/Runtime/numeric.h