Backport from mainline
[official-gcc.git] / libgfortran / c99_protos.h
blob45f4e2626667984876dc119634a5989816629e66
1 /* Declarations of various C99 functions
2 Copyright (C) 2004-2015 Free Software Foundation, Inc.
4 This file is part of the GNU Fortran 95 runtime library (libgfortran).
6 Libgfortran is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
11 Libgfortran is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 Under Section 7 of GPL version 3, you are granted additional
17 permissions described in the GCC Runtime Library Exception, version
18 3.1, as published by the Free Software Foundation.
20 You should have received a copy of the GNU General Public License and
21 a copy of the GCC Runtime Library Exception along with this program;
22 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 <http://www.gnu.org/licenses/>. */
25 #ifndef C99_PROTOS_H
26 #define C99_PROTOS_H 1
28 /* float variants of libm functions */
29 #ifndef HAVE_ACOSF
30 #define HAVE_ACOSF 1
31 extern float acosf(float);
32 #endif
34 #if HAVE_ACOSH && !HAVE_ACOSHF
35 #define HAVE_ACOSHF 1
36 extern float acoshf(float);
37 #endif
39 #ifndef HAVE_ASINF
40 #define HAVE_ASINF 1
41 extern float asinf(float);
42 #endif
44 #if HAVE_ASINH && !HAVE_ASINHF
45 #define HAVE_ASINHF 1
46 extern float asinhf(float);
47 #endif
49 #ifndef HAVE_ATAN2F
50 #define HAVE_ATAN2F 1
51 extern float atan2f(float, float);
52 #endif
54 #ifndef HAVE_ATANF
55 #define HAVE_ATANF 1
56 extern float atanf(float);
57 #endif
59 #if HAVE_ATANH && !HAVE_ATANHF
60 #define HAVE_ATANHF 1
61 extern float atanhf(float);
62 #endif
64 #ifndef HAVE_CEILF
65 #define HAVE_CEILF 1
66 extern float ceilf(float);
67 #endif
69 #ifndef HAVE_COPYSIGNF
70 #define HAVE_COPYSIGNF 1
71 extern float copysignf(float, float);
72 #endif
74 #ifndef HAVE_COSF
75 #define HAVE_COSF 1
76 extern float cosf(float);
77 #endif
79 #ifndef HAVE_COSHF
80 #define HAVE_COSHF 1
81 extern float coshf(float);
82 #endif
84 #ifndef HAVE_EXPF
85 #define HAVE_EXPF 1
86 extern float expf(float);
87 #endif
89 #ifndef HAVE_FABSF
90 #define HAVE_FABSF 1
91 extern float fabsf(float);
92 #endif
94 #ifndef HAVE_FLOORF
95 #define HAVE_FLOORF 1
96 extern float floorf(float);
97 #endif
99 #ifndef HAVE_FLOORL
100 #define HAVE_FLOORL 1
101 extern long double floorl (long double x);
102 #endif
104 #ifndef HAVE_FMODF
105 #define HAVE_FMODF 1
106 extern float fmodf (float x, float y);
107 #endif
109 #ifndef HAVE_FMODL
110 #define HAVE_FMODL 1
111 extern long double fmodl (long double x, long double y);
112 #endif
114 #ifndef HAVE_FREXPF
115 #define HAVE_FREXPF 1
116 extern float frexpf(float, int *);
117 #endif
119 #ifndef HAVE_HYPOTF
120 #define HAVE_HYPOTF 1
121 extern float hypotf(float, float);
122 #endif
124 #ifndef HAVE_LOGF
125 #define HAVE_LOGF 1
126 extern float logf(float);
127 #endif
129 #ifndef HAVE_LOG10F
130 #define HAVE_LOG10F 1
131 extern float log10f(float);
132 #endif
134 #ifndef HAVE_SCALBN
135 #define HAVE_SCALBN 1
136 extern double scalbn(double, int);
137 #endif
139 #ifndef HAVE_SCALBNF
140 #define HAVE_SCALBNF 1
141 extern float scalbnf(float, int);
142 #endif
144 #ifndef HAVE_SINF
145 #define HAVE_SINF 1
146 extern float sinf(float);
147 #endif
149 #ifndef HAVE_SINHF
150 #define HAVE_SINHF 1
151 extern float sinhf(float);
152 #endif
154 #ifndef HAVE_SQRTF
155 #define HAVE_SQRTF 1
156 extern float sqrtf(float);
157 #endif
159 #ifndef HAVE_TANF
160 #define HAVE_TANF 1
161 extern float tanf(float);
162 #endif
164 #ifndef HAVE_TANHF
165 #define HAVE_TANHF 1
166 extern float tanhf(float);
167 #endif
169 #ifndef HAVE_TRUNC
170 #define HAVE_TRUNC 1
171 extern double trunc(double);
172 #endif
174 #ifndef HAVE_TRUNCF
175 #define HAVE_TRUNCF 1
176 extern float truncf(float);
177 #endif
179 #ifndef HAVE_NEXTAFTERF
180 #define HAVE_NEXTAFTERF 1
181 extern float nextafterf(float, float);
182 #endif
184 #ifndef HAVE_POWF
185 #define HAVE_POWF 1
186 extern float powf(float, float);
187 #endif
189 #ifndef HAVE_ROUND
190 #define HAVE_ROUND 1
191 extern double round(double);
192 #endif
194 #ifndef HAVE_ROUNDF
195 #define HAVE_ROUNDF 1
196 extern float roundf(float);
197 #endif
199 #if !defined(HAVE_ROUNDL)
200 #define HAVE_ROUNDL 1
201 extern long double roundl(long double);
202 #endif
206 #if !defined(HAVE_LROUNDF) && defined(HAVE_ROUNDF)
207 #define HAVE_LROUNDF 1
208 long int lroundf (float);
209 #endif
211 #if !defined(HAVE_LROUND) && defined(HAVE_ROUND)
212 #define HAVE_LROUND 1
213 long int lround (double);
214 #endif
216 #if !defined(HAVE_LROUNDL) && defined(HAVE_ROUNDL)
217 #define HAVE_LROUNDL 1
218 long int lroundl (long double);
219 #endif
221 #if !defined(HAVE_LLROUNDF) && defined(HAVE_ROUNDF)
222 #define HAVE_LLROUNDF 1
223 long long int llroundf (float);
224 #endif
226 #if !defined(HAVE_LLROUND) && defined(HAVE_ROUND)
227 #define HAVE_LLROUND 1
228 long long int llround (double);
229 #endif
231 #if !defined(HAVE_LLROUNDL) && defined(HAVE_ROUNDL)
232 #define HAVE_LLROUNDL 1
233 long long int llroundl (long double);
234 #endif
236 /* Wrappers for systems without the various C99 single precision Bessel
237 functions. */
239 #if defined(HAVE_J0) && ! defined(HAVE_J0F)
240 #define HAVE_J0F 1
241 extern float j0f (float);
242 #endif
244 #if defined(HAVE_J1) && !defined(HAVE_J1F)
245 #define HAVE_J1F 1
246 extern float j1f (float);
247 #endif
249 #if defined(HAVE_JN) && !defined(HAVE_JNF)
250 #define HAVE_JNF 1
251 extern float jnf (int, float);
252 #endif
254 #if defined(HAVE_Y0) && !defined(HAVE_Y0F)
255 #define HAVE_Y0F 1
256 extern float y0f (float);
257 #endif
259 #if defined(HAVE_Y1) && !defined(HAVE_Y1F)
260 #define HAVE_Y1F 1
261 extern float y1f (float);
262 #endif
264 #if defined(HAVE_YN) && !defined(HAVE_YNF)
265 #define HAVE_YNF 1
266 extern float ynf (int, float);
267 #endif
270 /* Wrappers for systems without the C99 erff() and erfcf() functions. */
272 #if defined(HAVE_ERF) && !defined(HAVE_ERFF)
273 #define HAVE_ERFF 1
274 extern float erff (float);
275 #endif
277 #if defined(HAVE_ERFC) && !defined(HAVE_ERFCF)
278 #define HAVE_ERFCF 1
279 extern float erfcf (float);
280 #endif
284 /* log10l is needed on all platforms for decimal I/O */
285 #ifndef HAVE_LOG10L
286 #define HAVE_LOG10L 1
287 extern long double log10l(long double);
288 #endif
291 /* complex math functions */
293 #if !defined(HAVE_CABSF)
294 #define HAVE_CABSF 1
295 extern float cabsf (float complex);
296 #endif
298 #if !defined(HAVE_CABS)
299 #define HAVE_CABS 1
300 extern double cabs (double complex);
301 #endif
303 #if !defined(HAVE_CABSL) && defined(HAVE_HYPOTL)
304 #define HAVE_CABSL 1
305 extern long double cabsl (long double complex);
306 #endif
309 #if !defined(HAVE_CARGF)
310 #define HAVE_CARGF 1
311 extern float cargf (float complex);
312 #endif
314 #if !defined(HAVE_CARG)
315 #define HAVE_CARG 1
316 extern double carg (double complex);
317 #endif
319 #if !defined(HAVE_CARGL) && defined(HAVE_ATAN2L)
320 #define HAVE_CARGL 1
321 extern long double cargl (long double complex);
322 #endif
325 #if !defined(HAVE_CEXPF)
326 #define HAVE_CEXPF 1
327 extern float complex cexpf (float complex);
328 #endif
330 #if !defined(HAVE_CEXP)
331 #define HAVE_CEXP 1
332 extern double complex cexp (double complex);
333 #endif
335 #if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(EXPL)
336 #define HAVE_CEXPL 1
337 extern long double complex cexpl (long double complex);
338 #endif
341 #if !defined(HAVE_CLOGF)
342 #define HAVE_CLOGF 1
343 extern float complex clogf (float complex);
344 #endif
346 #if !defined(HAVE_CLOG)
347 #define HAVE_CLOG 1
348 extern double complex clog (double complex);
349 #endif
351 #if !defined(HAVE_CLOGL) && defined(HAVE_LOGL) && defined(HAVE_CABSL) && defined(HAVE_CARGL)
352 #define HAVE_CLOGL 1
353 extern long double complex clogl (long double complex);
354 #endif
357 #if !defined(HAVE_CLOG10F)
358 #define HAVE_CLOG10F 1
359 extern float complex clog10f (float complex);
360 #endif
362 #if !defined(HAVE_CLOG10)
363 #define HAVE_CLOG10 1
364 extern double complex clog10 (double complex);
365 #endif
367 #if !defined(HAVE_CLOG10L) && defined(HAVE_LOG10L) && defined(HAVE_CABSL) && defined(HAVE_CARGL)
368 #define HAVE_CLOG10L 1
369 extern long double complex clog10l (long double complex);
370 #endif
373 #if !defined(HAVE_CPOWF)
374 #define HAVE_CPOWF 1
375 extern float complex cpowf (float complex, float complex);
376 #endif
378 #if !defined(HAVE_CPOW)
379 #define HAVE_CPOW 1
380 extern double complex cpow (double complex, double complex);
381 #endif
383 #if !defined(HAVE_CPOWL) && defined(HAVE_CEXPL) && defined(HAVE_CLOGL)
384 #define HAVE_CPOWL 1
385 extern long double complex cpowl (long double complex, long double complex);
386 #endif
389 #if !defined(HAVE_CSQRTF)
390 #define HAVE_CSQRTF 1
391 extern float complex csqrtf (float complex);
392 #endif
394 #if !defined(HAVE_CSQRT)
395 #define HAVE_CSQRT 1
396 extern double complex csqrt (double complex);
397 #endif
399 #if !defined(HAVE_CSQRTL) && defined(HAVE_COPYSIGNL) && defined(HAVE_SQRTL) && defined(HAVE_FABSL) && defined(HAVE_HYPOTL)
400 #define HAVE_CSQRTL 1
401 extern long double complex csqrtl (long double complex);
402 #endif
405 #if !defined(HAVE_CSINHF)
406 #define HAVE_CSINHF 1
407 extern float complex csinhf (float complex);
408 #endif
410 #if !defined(HAVE_CSINH)
411 #define HAVE_CSINH 1
412 extern double complex csinh (double complex);
413 #endif
415 #if !defined(HAVE_CSINHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
416 #define HAVE_CSINHL 1
417 extern long double complex csinhl (long double complex);
418 #endif
421 #if !defined(HAVE_CCOSHF)
422 #define HAVE_CCOSHF 1
423 extern float complex ccoshf (float complex);
424 #endif
426 #if !defined(HAVE_CCOSH)
427 #define HAVE_CCOSH 1
428 extern double complex ccosh (double complex);
429 #endif
431 #if !defined(HAVE_CCOSHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
432 #define HAVE_CCOSHL 1
433 extern long double complex ccoshl (long double complex);
434 #endif
437 #if !defined(HAVE_CTANHF)
438 #define HAVE_CTANHF 1
439 extern float complex ctanhf (float complex);
440 #endif
442 #if !defined(HAVE_CTANH)
443 #define HAVE_CTANH 1
444 extern double complex ctanh (double complex);
445 #endif
447 #if !defined(HAVE_CTANHL) && defined(HAVE_TANL) && defined(HAVE_TANHL)
448 #define HAVE_CTANHL 1
449 extern long double complex ctanhl (long double complex);
450 #endif
453 #if !defined(HAVE_CSINF)
454 #define HAVE_CSINF 1
455 extern float complex csinf (float complex);
456 #endif
458 #if !defined(HAVE_CSIN)
459 #define HAVE_CSIN 1
460 extern double complex csin (double complex);
461 #endif
463 #if !defined(HAVE_CSINL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
464 #define HAVE_CSINL 1
465 extern long double complex csinl (long double complex);
466 #endif
469 #if !defined(HAVE_CCOSF)
470 #define HAVE_CCOSF 1
471 extern float complex ccosf (float complex);
472 #endif
474 #if !defined(HAVE_CCOS)
475 #define HAVE_CCOS 1
476 extern double complex ccos (double complex);
477 #endif
479 #if !defined(HAVE_CCOSL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
480 #define HAVE_CCOSL 1
481 extern long double complex ccosl (long double complex);
482 #endif
485 #if !defined(HAVE_CTANF)
486 #define HAVE_CTANF 1
487 extern float complex ctanf (float complex);
488 #endif
490 #if !defined(HAVE_CTAN)
491 #define HAVE_CTAN 1
492 extern double complex ctan (double complex);
493 #endif
495 #if !defined(HAVE_CTANL) && defined(HAVE_TANL) && defined(HAVE_TANHL)
496 #define HAVE_CTANL 1
497 extern long double complex ctanl (long double complex);
498 #endif
501 /* Complex ACOS. */
503 #if !defined(HAVE_CACOSF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
504 #define HAVE_CACOSF 1
505 extern complex float cacosf (complex float z);
506 #endif
508 #if !defined(HAVE_CACOS) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
509 #define HAVE_CACOS 1
510 extern complex double cacos (complex double z);
511 #endif
513 #if !defined(HAVE_CACOSL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
514 #define HAVE_CACOSL 1
515 extern complex long double cacosl (complex long double z);
516 #endif
519 /* Complex ASIN. */
521 #if !defined(HAVE_CASINF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
522 #define HAVE_CASINF 1
523 extern complex float casinf (complex float z);
524 #endif
526 #if !defined(HAVE_CASIN) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
527 #define HAVE_CASIN 1
528 extern complex double casin (complex double z);
529 #endif
531 #if !defined(HAVE_CASINL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
532 #define HAVE_CASINL 1
533 extern complex long double casinl (complex long double z);
534 #endif
537 /* Complex ATAN. */
539 #if !defined(HAVE_CATANF) && defined(HAVE_CLOGF)
540 #define HAVE_CATANF 1
541 extern complex float catanf (complex float z);
542 #endif
544 #if !defined(HAVE_CATAN) && defined(HAVE_CLOG)
545 #define HAVE_CATAN 1
546 extern complex double catan (complex double z);
547 #endif
549 #if !defined(HAVE_CATANL) && defined(HAVE_CLOGL)
550 #define HAVE_CATANL 1
551 extern complex long double catanl (complex long double z);
552 #endif
555 /* Complex ASINH. */
557 #if !defined(HAVE_CASINHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
558 #define HAVE_CASINHF 1
559 extern complex float casinhf (complex float z);
560 #endif
563 #if !defined(HAVE_CASINH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
564 #define HAVE_CASINH 1
565 extern complex double casinh (complex double z);
566 #endif
568 #if !defined(HAVE_CASINHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
569 #define HAVE_CASINHL 1
570 extern complex long double casinhl (complex long double z);
571 #endif
574 /* Complex ACOSH. */
576 #if !defined(HAVE_CACOSHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
577 #define HAVE_CACOSHF 1
578 extern complex float cacoshf (complex float z);
579 #endif
581 #if !defined(HAVE_CACOSH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
582 #define HAVE_CACOSH 1
583 extern complex double cacosh (complex double z);
584 #endif
586 #if !defined(HAVE_CACOSHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
587 #define HAVE_CACOSHL 1
588 extern complex long double cacoshl (complex long double z);
589 #endif
592 /* Complex ATANH. */
594 #if !defined(HAVE_CATANHF) && defined(HAVE_CLOGF)
595 #define HAVE_CATANHF 1
596 extern complex float catanhf (complex float z);
597 #endif
599 #if !defined(HAVE_CATANH) && defined(HAVE_CLOG)
600 #define HAVE_CATANH 1
601 extern complex double catanh (complex double z);
602 #endif
604 #if !defined(HAVE_CATANHL) && defined(HAVE_CLOGL)
605 #define HAVE_CATANHL 1
606 extern complex long double catanhl (complex long double z);
607 #endif
610 /* Gamma-related prototypes. */
611 #if !defined(HAVE_TGAMMA)
612 #define HAVE_TGAMMA 1
613 extern double tgamma (double);
614 #endif
616 #if !defined(HAVE_LGAMMA)
617 #define HAVE_LGAMMA 1
618 extern double lgamma (double);
619 #endif
621 #if defined(HAVE_TGAMMA) && !defined(HAVE_TGAMMAF)
622 #define HAVE_TGAMMAF 1
623 extern float tgammaf (float);
624 #endif
626 #if defined(HAVE_LGAMMA) && !defined(HAVE_LGAMMAF)
627 #define HAVE_LGAMMAF 1
628 extern float lgammaf (float);
629 #endif
632 #endif /* C99_PROTOS_H */