(root)/
gcc-13.2.0/
libgfortran/
c99_protos.h
       1  /* Declarations of various C99 functions 
       2     Copyright (C) 2004-2023 Free Software Foundation, Inc.
       3  
       4  This file is part of the GNU Fortran 95 runtime library (libgfortran).
       5  
       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.
      10  
      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.
      15  
      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.
      19  
      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/>.  */
      24  
      25  #ifndef C99_PROTOS_H
      26  #define C99_PROTOS_H 1
      27  
      28  /* float variants of libm functions */
      29  #ifndef HAVE_ACOSF
      30  #define HAVE_ACOSF 1
      31  extern float acosf(float);
      32  #endif
      33  
      34  #if HAVE_ACOSH && !HAVE_ACOSHF
      35  #define HAVE_ACOSHF 1
      36  extern float acoshf(float);
      37  #endif
      38  
      39  #ifndef HAVE_ASINF
      40  #define HAVE_ASINF 1
      41  extern float asinf(float);
      42  #endif
      43  
      44  #if HAVE_ASINH && !HAVE_ASINHF
      45  #define HAVE_ASINHF 1
      46  extern float asinhf(float);
      47  #endif
      48  
      49  #ifndef HAVE_ATAN2F
      50  #define HAVE_ATAN2F 1
      51  extern float atan2f(float, float);
      52  #endif
      53  
      54  #ifndef HAVE_ATANF
      55  #define HAVE_ATANF 1
      56  extern float atanf(float);
      57  #endif
      58  
      59  #if HAVE_ATANH && !HAVE_ATANHF
      60  #define HAVE_ATANHF 1
      61  extern float atanhf(float);
      62  #endif
      63  
      64  #ifndef HAVE_CEILF
      65  #define HAVE_CEILF 1
      66  extern float ceilf(float);
      67  #endif
      68  
      69  #ifndef HAVE_COPYSIGNF
      70  #define HAVE_COPYSIGNF 1
      71  extern float copysignf(float, float);
      72  #endif
      73  
      74  #if !defined(HAVE_COPYSIGN) && defined(HAVE_INLINE_BUILTIN_COPYSIGN)
      75  #define HAVE_COPYSIGN 1
      76  extern double copysign(double, double);
      77  #endif
      78  
      79  #if !defined(HAVE_COPYSIGNL) && defined(HAVE_INLINE_BUILTIN_COPYSIGNL)
      80  #define HAVE_COPYSIGNL 1
      81  extern long double copysignl(long double, long double);
      82  #endif
      83  
      84  #ifndef HAVE_COSF
      85  #define HAVE_COSF 1
      86  extern float cosf(float);
      87  #endif
      88  
      89  #ifndef HAVE_COSHF
      90  #define HAVE_COSHF 1
      91  extern float coshf(float);
      92  #endif
      93  
      94  #ifndef HAVE_EXPF
      95  #define HAVE_EXPF 1
      96  extern float expf(float);
      97  #endif
      98  
      99  #ifndef HAVE_FABSF
     100  #define HAVE_FABSF 1
     101  extern float fabsf(float);
     102  #endif
     103  
     104  #if !defined(HAVE_FABS) && defined(HAVE_INLINE_BUILTIN_FABS)
     105  #define HAVE_FABS 1
     106  extern double fabs(double);
     107  #endif
     108  
     109  #if !defined(HAVE_FABSL) && defined(HAVE_INLINE_BUILTIN_FABSL)
     110  #define HAVE_FABSL 1
     111  extern long double fabsl(long double);
     112  #endif
     113  
     114  #ifndef HAVE_FLOORF
     115  #define HAVE_FLOORF 1
     116  extern float floorf(float);
     117  #endif
     118  
     119  #ifndef HAVE_FLOORL
     120  #define HAVE_FLOORL 1
     121  extern long double floorl (long double x);
     122  #endif
     123  
     124  #ifndef HAVE_FMODF
     125  #define HAVE_FMODF 1
     126  extern float fmodf (float x, float y);
     127  #endif
     128  
     129  #ifndef HAVE_FMODL
     130  #define HAVE_FMODL 1
     131  extern long double fmodl (long double x, long double y);
     132  #endif
     133  
     134  #ifndef HAVE_FREXPF
     135  #define HAVE_FREXPF 1
     136  extern float frexpf(float, int *);
     137  #endif
     138  
     139  #ifndef HAVE_HYPOTF
     140  #define HAVE_HYPOTF 1
     141  extern float hypotf(float, float);
     142  #endif
     143  
     144  #ifndef HAVE_LOGF
     145  #define HAVE_LOGF 1
     146  extern float logf(float);
     147  #endif
     148  
     149  #ifndef HAVE_LOG10F
     150  #define HAVE_LOG10F 1
     151  extern float log10f(float);
     152  #endif
     153  
     154  #ifndef HAVE_SCALBN
     155  #define HAVE_SCALBN 1
     156  extern double scalbn(double, int);
     157  #endif
     158  
     159  #ifndef HAVE_SCALBNF
     160  #define HAVE_SCALBNF 1
     161  extern float scalbnf(float, int);
     162  #endif
     163  
     164  #ifndef HAVE_SINF
     165  #define HAVE_SINF 1
     166  extern float sinf(float);
     167  #endif
     168  
     169  #ifndef HAVE_SINHF
     170  #define HAVE_SINHF 1
     171  extern float sinhf(float);
     172  #endif
     173  
     174  #ifndef HAVE_SQRTF
     175  #define HAVE_SQRTF 1
     176  extern float sqrtf(float);
     177  #endif
     178  
     179  #ifndef HAVE_TANF
     180  #define HAVE_TANF 1
     181  extern float tanf(float);
     182  #endif
     183  
     184  #ifndef HAVE_TANHF
     185  #define HAVE_TANHF 1
     186  extern float tanhf(float);
     187  #endif
     188  
     189  #ifndef HAVE_TRUNC
     190  #define HAVE_TRUNC 1
     191  extern double trunc(double);
     192  #endif
     193  
     194  #ifndef HAVE_TRUNCF
     195  #define HAVE_TRUNCF 1
     196  extern float truncf(float);
     197  #endif
     198  
     199  #ifndef HAVE_NEXTAFTERF
     200  #define HAVE_NEXTAFTERF 1
     201  extern float nextafterf(float, float);
     202  #endif
     203  
     204  #ifndef HAVE_POWF
     205  #define HAVE_POWF 1
     206  extern float powf(float, float);
     207  #endif
     208  
     209  #ifndef HAVE_ROUND
     210  #define HAVE_ROUND 1
     211  extern double round(double);
     212  #endif
     213  
     214  #ifndef HAVE_ROUNDF
     215  #define HAVE_ROUNDF 1
     216  extern float roundf(float);
     217  #endif
     218  
     219  #if !defined(HAVE_ROUNDL)
     220  #define HAVE_ROUNDL 1
     221  extern long double roundl(long double);
     222  #endif
     223  
     224  
     225  
     226  #if !defined(HAVE_LROUNDF) && defined(HAVE_ROUNDF)
     227  #define HAVE_LROUNDF 1
     228  long int lroundf (float);
     229  #endif
     230  
     231  #if !defined(HAVE_LROUND) && defined(HAVE_ROUND)
     232  #define HAVE_LROUND 1
     233  long int lround (double);
     234  #endif
     235  
     236  #if !defined(HAVE_LROUNDL) && defined(HAVE_ROUNDL)
     237  #define HAVE_LROUNDL 1
     238  long int lroundl (long double);
     239  #endif
     240  
     241  #if !defined(HAVE_LLROUNDF) && defined(HAVE_ROUNDF)
     242  #define HAVE_LLROUNDF 1
     243  long long int llroundf (float);
     244  #endif
     245  
     246  #if !defined(HAVE_LLROUND) && defined(HAVE_ROUND)
     247  #define HAVE_LLROUND 1
     248  long long int llround (double);
     249  #endif
     250  
     251  #if !defined(HAVE_LLROUNDL) && defined(HAVE_ROUNDL)
     252  #define HAVE_LLROUNDL 1
     253  long long int llroundl (long double);
     254  #endif
     255  
     256  /* Wrappers for systems without the various C99 single precision Bessel
     257     functions.  */
     258  
     259  #if defined(HAVE_J0) && ! defined(HAVE_J0F)
     260  #define HAVE_J0F 1
     261  extern float j0f (float);
     262  #endif
     263  
     264  #if defined(HAVE_J1) && !defined(HAVE_J1F)
     265  #define HAVE_J1F 1
     266  extern float j1f (float);
     267  #endif
     268  
     269  #if defined(HAVE_JN) && !defined(HAVE_JNF)
     270  #define HAVE_JNF 1
     271  extern float jnf (int, float);
     272  #endif
     273  
     274  #if defined(HAVE_Y0) && !defined(HAVE_Y0F)
     275  #define HAVE_Y0F 1
     276  extern float y0f (float);
     277  #endif
     278  
     279  #if defined(HAVE_Y1) && !defined(HAVE_Y1F)
     280  #define HAVE_Y1F 1
     281  extern float y1f (float);
     282  #endif
     283  
     284  #if defined(HAVE_YN) && !defined(HAVE_YNF)
     285  #define HAVE_YNF 1
     286  extern float ynf (int, float);
     287  #endif
     288  
     289  
     290  /* Wrappers for systems without the C99 erff() and erfcf() functions.  */
     291  
     292  #if defined(HAVE_ERF) && !defined(HAVE_ERFF)
     293  #define HAVE_ERFF 1
     294  extern float erff (float);
     295  #endif
     296  
     297  #if defined(HAVE_ERFC) && !defined(HAVE_ERFCF)
     298  #define HAVE_ERFCF 1
     299  extern float erfcf (float);
     300  #endif
     301  
     302  
     303  
     304  /* log10l is needed on all platforms for decimal I/O */
     305  #ifndef HAVE_LOG10L
     306  #define HAVE_LOG10L 1
     307  extern long double log10l(long double);
     308  #endif
     309  
     310  
     311  /* complex math functions */
     312  
     313  #if !defined(HAVE_CABSF)
     314  #define HAVE_CABSF 1
     315  extern float cabsf (float complex);
     316  #endif
     317  
     318  #if !defined(HAVE_CABS)
     319  #define HAVE_CABS 1
     320  extern double cabs (double complex);
     321  #endif
     322  
     323  #if !defined(HAVE_CABSL) && defined(HAVE_HYPOTL)
     324  #define HAVE_CABSL 1
     325  extern long double cabsl (long double complex);
     326  #endif
     327  
     328  
     329  #if !defined(HAVE_CARGF)
     330  #define HAVE_CARGF 1
     331  extern float cargf (float complex);
     332  #endif
     333  
     334  #if !defined(HAVE_CARG)
     335  #define HAVE_CARG 1
     336  extern double carg (double complex);
     337  #endif
     338  
     339  #if !defined(HAVE_CARGL) && defined(HAVE_ATAN2L)
     340  #define HAVE_CARGL 1
     341  extern long double cargl (long double complex);
     342  #endif
     343  
     344  
     345  #if !defined(HAVE_CEXPF)
     346  #define HAVE_CEXPF 1
     347  extern float complex cexpf (float complex);
     348  #endif
     349  
     350  #if !defined(HAVE_CEXP)
     351  #define HAVE_CEXP 1
     352  extern double complex cexp (double complex);
     353  #endif
     354  
     355  #if !defined(HAVE_CEXPL) && defined(HAVE_COSL) && defined(HAVE_SINL) && defined(HAVE_EXPL)
     356  #define HAVE_CEXPL 1
     357  extern long double complex cexpl (long double complex);
     358  #endif
     359  
     360  
     361  #if !defined(HAVE_CLOGF)
     362  #define HAVE_CLOGF 1
     363  extern float complex clogf (float complex);
     364  #endif
     365  
     366  #if !defined(HAVE_CLOG)
     367  #define HAVE_CLOG 1
     368  extern double complex clog (double complex);
     369  #endif
     370  
     371  #if !defined(HAVE_CLOGL) && defined(HAVE_LOGL) && defined(HAVE_CABSL) && defined(HAVE_CARGL)
     372  #define HAVE_CLOGL 1
     373  extern long double complex clogl (long double complex);
     374  #endif
     375  
     376  
     377  #if !defined(HAVE_CLOG10F)
     378  #define HAVE_CLOG10F 1
     379  extern float complex clog10f (float complex);
     380  #endif
     381  
     382  #if !defined(HAVE_CLOG10)
     383  #define HAVE_CLOG10 1
     384  extern double complex clog10 (double complex);
     385  #endif
     386  
     387  #if !defined(HAVE_CLOG10L) && defined(HAVE_LOG10L) && defined(HAVE_CABSL) && defined(HAVE_CARGL)
     388  #define HAVE_CLOG10L 1
     389  extern long double complex clog10l (long double complex);
     390  #endif
     391  
     392  
     393  #if !defined(HAVE_CPOWF)
     394  #define HAVE_CPOWF 1
     395  extern float complex cpowf (float complex, float complex);
     396  #endif
     397  
     398  #if !defined(HAVE_CPOW)
     399  #define HAVE_CPOW 1
     400  extern double complex cpow (double complex, double complex);
     401  #endif
     402  
     403  #if !defined(HAVE_CPOWL) && defined(HAVE_CEXPL) && defined(HAVE_CLOGL)
     404  #define HAVE_CPOWL 1
     405  extern long double complex cpowl (long double complex, long double complex);
     406  #endif
     407  
     408  
     409  #if !defined(HAVE_CSQRTF)
     410  #define HAVE_CSQRTF 1 
     411  extern float complex csqrtf (float complex);
     412  #endif
     413  
     414  #if !defined(HAVE_CSQRT)
     415  #define HAVE_CSQRT 1
     416  extern double complex csqrt (double complex);
     417  #endif
     418  
     419  #if !defined(HAVE_CSQRTL) && defined(HAVE_COPYSIGNL) && defined(HAVE_SQRTL) && defined(HAVE_FABSL) && defined(HAVE_HYPOTL)
     420  #define HAVE_CSQRTL 1
     421  extern long double complex csqrtl (long double complex);
     422  #endif
     423  
     424  
     425  #if !defined(HAVE_CSINHF)
     426  #define HAVE_CSINHF 1
     427  extern float complex csinhf (float complex);
     428  #endif
     429  
     430  #if !defined(HAVE_CSINH)
     431  #define HAVE_CSINH 1
     432  extern double complex csinh (double complex);
     433  #endif
     434  
     435  #if !defined(HAVE_CSINHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
     436  #define HAVE_CSINHL 1
     437  extern long double complex csinhl (long double complex);
     438  #endif
     439  
     440  
     441  #if !defined(HAVE_CCOSHF)
     442  #define HAVE_CCOSHF 1
     443  extern float complex ccoshf (float complex);
     444  #endif
     445  
     446  #if !defined(HAVE_CCOSH)
     447  #define HAVE_CCOSH 1
     448  extern double complex ccosh (double complex);
     449  #endif
     450  
     451  #if !defined(HAVE_CCOSHL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
     452  #define HAVE_CCOSHL 1
     453  extern long double complex ccoshl (long double complex);
     454  #endif
     455  
     456  
     457  #if !defined(HAVE_CTANHF)
     458  #define HAVE_CTANHF 1
     459  extern float complex ctanhf (float complex);
     460  #endif
     461  
     462  #if !defined(HAVE_CTANH)
     463  #define HAVE_CTANH 1
     464  extern double complex ctanh (double complex);
     465  #endif
     466  
     467  #if !defined(HAVE_CTANHL) && defined(HAVE_TANL) && defined(HAVE_TANHL)
     468  #define HAVE_CTANHL 1
     469  extern long double complex ctanhl (long double complex);
     470  #endif
     471  
     472  
     473  #if !defined(HAVE_CSINF)
     474  #define HAVE_CSINF 1
     475  extern float complex csinf (float complex);
     476  #endif
     477  
     478  #if !defined(HAVE_CSIN)
     479  #define HAVE_CSIN 1
     480  extern double complex csin (double complex);
     481  #endif
     482  
     483  #if !defined(HAVE_CSINL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
     484  #define HAVE_CSINL 1
     485  extern long double complex csinl (long double complex);
     486  #endif
     487  
     488  
     489  #if !defined(HAVE_CCOSF)
     490  #define HAVE_CCOSF 1
     491  extern float complex ccosf (float complex);
     492  #endif
     493  
     494  #if !defined(HAVE_CCOS)
     495  #define HAVE_CCOS 1
     496  extern double complex ccos (double complex);
     497  #endif
     498  
     499  #if !defined(HAVE_CCOSL) && defined(HAVE_COSL) && defined(HAVE_COSHL) && defined(HAVE_SINL) && defined(HAVE_SINHL)
     500  #define HAVE_CCOSL 1
     501  extern long double complex ccosl (long double complex);
     502  #endif
     503  
     504  
     505  #if !defined(HAVE_CTANF)
     506  #define HAVE_CTANF 1
     507  extern float complex ctanf (float complex);
     508  #endif
     509  
     510  #if !defined(HAVE_CTAN)
     511  #define HAVE_CTAN 1
     512  extern double complex ctan (double complex);
     513  #endif
     514  
     515  #if !defined(HAVE_CTANL) && defined(HAVE_TANL) && defined(HAVE_TANHL)
     516  #define HAVE_CTANL 1
     517  extern long double complex ctanl (long double complex);
     518  #endif
     519  
     520  
     521  /* Complex ACOS.  */
     522  
     523  #if !defined(HAVE_CACOSF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
     524  #define HAVE_CACOSF 1
     525  extern complex float cacosf (complex float z);
     526  #endif
     527  
     528  #if !defined(HAVE_CACOS) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
     529  #define HAVE_CACOS 1
     530  extern complex double cacos (complex double z);
     531  #endif
     532  
     533  #if !defined(HAVE_CACOSL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
     534  #define HAVE_CACOSL 1
     535  extern complex long double cacosl (complex long double z);
     536  #endif
     537  
     538  
     539  /* Complex ASIN.  */
     540  
     541  #if !defined(HAVE_CASINF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
     542  #define HAVE_CASINF 1
     543  extern complex float casinf (complex float z);
     544  #endif
     545  
     546  #if !defined(HAVE_CASIN) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
     547  #define HAVE_CASIN 1
     548  extern complex double casin (complex double z);
     549  #endif
     550  
     551  #if !defined(HAVE_CASINL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
     552  #define HAVE_CASINL 1
     553  extern complex long double casinl (complex long double z);
     554  #endif
     555  
     556  
     557  /* Complex ATAN.  */
     558  
     559  #if !defined(HAVE_CATANF) && defined(HAVE_CLOGF)
     560  #define HAVE_CATANF 1
     561  extern complex float catanf (complex float z);
     562  #endif
     563  
     564  #if !defined(HAVE_CATAN) && defined(HAVE_CLOG)
     565  #define HAVE_CATAN 1
     566  extern complex double catan (complex double z);
     567  #endif
     568  
     569  #if !defined(HAVE_CATANL) && defined(HAVE_CLOGL)
     570  #define HAVE_CATANL 1
     571  extern complex long double catanl (complex long double z);
     572  #endif
     573  
     574  
     575  /* Complex ASINH.  */
     576  
     577  #if !defined(HAVE_CASINHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
     578  #define HAVE_CASINHF 1
     579  extern complex float casinhf (complex float z);
     580  #endif
     581  
     582  
     583  #if !defined(HAVE_CASINH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
     584  #define HAVE_CASINH 1
     585  extern complex double casinh (complex double z);
     586  #endif
     587  
     588  #if !defined(HAVE_CASINHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
     589  #define HAVE_CASINHL 1
     590  extern complex long double casinhl (complex long double z);
     591  #endif
     592  
     593  
     594  /* Complex ACOSH.  */
     595  
     596  #if !defined(HAVE_CACOSHF) && defined(HAVE_CLOGF) && defined(HAVE_CSQRTF)
     597  #define HAVE_CACOSHF 1
     598  extern complex float cacoshf (complex float z);
     599  #endif
     600  
     601  #if !defined(HAVE_CACOSH) && defined(HAVE_CLOG) && defined(HAVE_CSQRT)
     602  #define HAVE_CACOSH 1
     603  extern complex double cacosh (complex double z);
     604  #endif
     605  
     606  #if !defined(HAVE_CACOSHL) && defined(HAVE_CLOGL) && defined(HAVE_CSQRTL)
     607  #define HAVE_CACOSHL 1
     608  extern complex long double cacoshl (complex long double z);
     609  #endif
     610  
     611  
     612  /* Complex ATANH.  */
     613  
     614  #if !defined(HAVE_CATANHF) && defined(HAVE_CLOGF)
     615  #define HAVE_CATANHF 1
     616  extern complex float catanhf (complex float z);
     617  #endif
     618  
     619  #if !defined(HAVE_CATANH) && defined(HAVE_CLOG)
     620  #define HAVE_CATANH 1
     621  extern complex double catanh (complex double z);
     622  #endif
     623  
     624  #if !defined(HAVE_CATANHL) && defined(HAVE_CLOGL)
     625  #define HAVE_CATANHL 1
     626  extern complex long double catanhl (complex long double z);
     627  #endif
     628  
     629  
     630  /* Gamma-related prototypes.  */
     631  #if !defined(HAVE_TGAMMA)
     632  #define HAVE_TGAMMA 1
     633  extern double tgamma (double);
     634  #endif
     635  
     636  #if !defined(HAVE_LGAMMA)
     637  #define HAVE_LGAMMA 1
     638  extern double lgamma (double);
     639  #endif
     640  
     641  #if defined(HAVE_TGAMMA) && !defined(HAVE_TGAMMAF)
     642  #define HAVE_TGAMMAF 1
     643  extern float tgammaf (float);
     644  #endif
     645  
     646  #if defined(HAVE_LGAMMA) && !defined(HAVE_LGAMMAF)
     647  #define HAVE_LGAMMAF 1
     648  extern float lgammaf (float);
     649  #endif
     650  
     651  #ifndef HAVE_FMA
     652  #define HAVE_FMA 1
     653  extern double fma(double, double, double);
     654  #endif
     655  
     656  #ifndef HAVE_FMAF
     657  #define HAVE_FMAF 1
     658  extern float fmaf(float, float, float);
     659  #endif
     660  
     661  #ifndef HAVE_FMAL
     662  #define HAVE_FMAL 1
     663  extern long double fmal(long double, long double, long double);
     664  #endif
     665  
     666  #endif  /* C99_PROTOS_H  */
     667