1 /* See the import.pl script for potential modifications */ 2 /* 3 * ==================================================== 4 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. 5 * 6 * Developed at SunPro, a Sun Microsystems, Inc. business. 7 * Permission to use, copy, modify, and distribute this 8 * software is freely granted, provided that this notice 9 * is preserved. 10 * ==================================================== 11 */ 12 13 /* 14 * from: @(#)fdlibm.h 5.1 93/09/24 15 */ 16 17 #ifndef _MATH_PRIVATE_H_ 18 #define _MATH_PRIVATE_H_ 19 20 /* import.pl: Skipped the macro definitions, keep only the declarations, converted to use streflop types (aliases or wrappers) */ 21 #include "../streflop_libm_bridge.h" 22 23 namespace streflop_libm { 24 25 #ifdef LIBM_COMPILING_FLT32 26 #define __sqrtf __ieee754_sqrtf 27 #define fabsf __fabsf 28 #define copysignf __copysignf 29 extern Simple __log1pf(Simple x); 30 extern Simple __fabsf(Simple x); 31 extern Simple __atanf(Simple x); 32 extern Simple __expm1f(Simple x); 33 extern int __isinff(Simple x); 34 extern Simple __rintf(Simple x); 35 extern Simple __cosf(Simple x); 36 extern void __sincosf (Simple x, Simple *sinx, Simple *cosx); 37 extern Simple __floorf(Simple x); 38 extern Simple __scalbnf (Simple x, int n); 39 extern Simple __frexpf(Simple x, int *eptr); 40 extern Simple __ldexpf(Simple value, int exp); 41 extern int __finitef(Simple x); 42 #endif 43 44 #ifdef LIBM_COMPILING_DBL64 45 #define __sqrt __ieee754_sqrt 46 #define fabs __fabs 47 #define copysign __copysign 48 extern Double __log1p(Double x); 49 extern Double __fabs(Double x); 50 extern Double atan(Double x); 51 extern Double __expm1(Double x); 52 extern int __isinf(Double x); 53 extern Double __rint(Double x); 54 extern Double __cos(Double x); 55 extern void __sincos (Double x, Double *sinx, Double *cosx); 56 extern Double __floor(Double x); 57 extern Double __scalbn(Double x, int n); 58 extern Double __frexp(Double x, int *eptr); 59 extern Double __ldexp(Double value, int exp); 60 extern int __finite(Double x); 61 #endif 62 63 #ifdef LIBM_COMPILING_LDBL96 64 #if defined(Extended) 65 #define fabsl __fabsl 66 extern Extended __cosl(Extended x); 67 extern Extended __sinl(Extended x); 68 extern Extended __fabsl(Extended x); 69 #endif 70 #endif 71 72 #ifdef LIBM_COMPILING_DBL64 73 extern Double __ieee754_sqrt (Double); 74 extern Double __ieee754_acos (Double); 75 extern Double __ieee754_acosh (Double); 76 extern Double __ieee754_log (Double); 77 extern Double __ieee754_atanh (Double); 78 extern Double __ieee754_asin (Double); 79 extern Double __ieee754_atan2 (Double,Double); 80 extern Double __ieee754_exp (Double); 81 extern Double __ieee754_exp2 (Double); 82 extern Double __ieee754_exp10 (Double); 83 extern Double __ieee754_cosh (Double); 84 extern Double __ieee754_fmod (Double,Double); 85 extern Double __ieee754_pow (Double,Double); 86 extern Double __ieee754_lgamma_r (Double,int *); 87 extern Double __ieee754_gamma_r (Double,int *); 88 extern Double __ieee754_lgamma (Double); 89 extern Double __ieee754_gamma (Double); 90 extern Double __ieee754_log10 (Double); 91 extern Double __ieee754_log2 (Double); 92 extern Double __ieee754_sinh (Double); 93 extern Double __ieee754_hypot (Double,Double); 94 extern Double __ieee754_j0 (Double); 95 extern Double __ieee754_j1 (Double); 96 extern Double __ieee754_y0 (Double); 97 extern Double __ieee754_y1 (Double); 98 extern Double __ieee754_jn (int,Double); 99 extern Double __ieee754_yn (int,Double); 100 extern Double __ieee754_remainder (Double,Double); 101 extern int32_t __ieee754_rem_pio2 (Double,Double*); 102 extern Double __ieee754_scalb (Double,Double); 103 #endif 104 105 /* fdlibm kernel function */ 106 #ifdef LIBM_COMPILING_DBL64 107 extern Double __kernel_standard (Double,Double,int); 108 extern Double __kernel_sin (Double,Double,int); 109 extern Double __kernel_cos (Double,Double); 110 extern Double __kernel_tan (Double,Double,int); 111 extern int __kernel_rem_pio2 (Double*,Double*,int,int,int, const int32_t*); 112 #endif 113 114 /* internal functions. */ 115 #ifdef LIBM_COMPILING_DBL64 116 extern Double __copysign (Double x, Double __y); 117 #endif 118 119 #if 0 120 #ifdef LIBM_COMPILING_DBL64 121 extern inline Double __copysign (Double x, Double y) 122 { return __builtin_copysign (x, y); } 123 #endif 124 #endif 125 126 /* ieee style elementary Simple functions */ 127 #ifdef LIBM_COMPILING_FLT32 128 extern Simple __ieee754_sqrtf (Simple); 129 extern Simple __ieee754_acosf (Simple); 130 extern Simple __ieee754_acoshf (Simple); 131 extern Simple __ieee754_logf (Simple); 132 extern Simple __ieee754_atanhf (Simple); 133 extern Simple __ieee754_asinf (Simple); 134 extern Simple __ieee754_atan2f (Simple,Simple); 135 extern Simple __ieee754_expf (Simple); 136 extern Simple __ieee754_exp2f (Simple); 137 extern Simple __ieee754_exp10f (Simple); 138 extern Simple __ieee754_coshf (Simple); 139 extern Simple __ieee754_fmodf (Simple,Simple); 140 extern Simple __ieee754_powf (Simple,Simple); 141 extern Simple __ieee754_lgammaf_r (Simple,int *); 142 extern Simple __ieee754_gammaf_r (Simple,int *); 143 extern Simple __ieee754_lgammaf (Simple); 144 extern Simple __ieee754_gammaf (Simple); 145 extern Simple __ieee754_log10f (Simple); 146 extern Simple __ieee754_log2f (Simple); 147 extern Simple __ieee754_sinhf (Simple); 148 extern Simple __ieee754_hypotf (Simple,Simple); 149 extern Simple __ieee754_j0f (Simple); 150 extern Simple __ieee754_j1f (Simple); 151 extern Simple __ieee754_y0f (Simple); 152 extern Simple __ieee754_y1f (Simple); 153 extern Simple __ieee754_jnf (int,Simple); 154 extern Simple __ieee754_ynf (int,Simple); 155 extern Simple __ieee754_remainderf (Simple,Simple); 156 extern int32_t __ieee754_rem_pio2f (Simple,Simple*); 157 extern Simple __ieee754_scalbf (Simple,Simple); 158 #endif 159 160 161 /* Simple versions of fdlibm kernel functions */ 162 #ifdef LIBM_COMPILING_FLT32 163 extern Simple __kernel_sinf (Simple,Simple,int); 164 extern Simple __kernel_cosf (Simple,Simple); 165 extern Simple __kernel_tanf (Simple,Simple,int); 166 extern int __kernel_rem_pio2f (Simple*,Simple*,int,int,int, const int32_t*); 167 #endif 168 169 /* internal functions. */ 170 #ifdef LIBM_COMPILING_FLT32 171 extern Simple __copysignf (Simple x, Simple __y); 172 #endif 173 174 #if 0 175 #ifdef LIBM_COMPILING_FLT32 176 extern inline Simple __copysignf (Simple x, Simple y) 177 { return __builtin_copysignf (x, y); } 178 #endif 179 #endif 180 181 #if defined(Extended) 182 /* ieee style elementary Extended functions */ 183 #ifdef LIBM_COMPILING_LDBL96 184 extern Extended __ieee754_sqrtl (Extended); 185 extern Extended __ieee754_acosl (Extended); 186 extern Extended __ieee754_acoshl (Extended); 187 extern Extended __ieee754_logl (Extended); 188 extern Extended __ieee754_atanhl (Extended); 189 extern Extended __ieee754_asinl (Extended); 190 extern Extended __ieee754_atan2l (Extended,Extended); 191 extern Extended __ieee754_expl (Extended); 192 extern Extended __ieee754_exp2l (Extended); 193 extern Extended __ieee754_exp10l (Extended); 194 extern Extended __ieee754_coshl (Extended); 195 extern Extended __ieee754_fmodl (Extended,Extended); 196 extern Extended __ieee754_powl (Extended,Extended); 197 extern Extended __ieee754_lgammal_r (Extended,int *); 198 extern Extended __ieee754_gammal_r (Extended,int *); 199 extern Extended __ieee754_lgammal (Extended); 200 extern Extended __ieee754_gammal (Extended); 201 extern Extended __ieee754_log10l (Extended); 202 extern Extended __ieee754_log2l (Extended); 203 extern Extended __ieee754_sinhl (Extended); 204 extern Extended __ieee754_hypotl (Extended,Extended); 205 extern Extended __ieee754_j0l (Extended); 206 extern Extended __ieee754_j1l (Extended); 207 extern Extended __ieee754_y0l (Extended); 208 extern Extended __ieee754_y1l (Extended); 209 extern Extended __ieee754_jnl (int,Extended); 210 extern Extended __ieee754_ynl (int,Extended); 211 extern Extended __ieee754_remainderl (Extended,Extended); 212 extern int __ieee754_rem_pio2l (Extended,Extended*); 213 extern Extended __ieee754_scalbl (Extended,Extended); 214 #endif 215 216 /* Extended versions of fdlibm kernel functions */ 217 #ifdef LIBM_COMPILING_LDBL96 218 extern Extended __kernel_sinl (Extended,Extended,int); 219 extern Extended __kernel_cosl (Extended,Extended); 220 extern Extended __kernel_tanl (Extended,Extended,int); 221 extern void __kernel_sincosl (Extended,Extended, 222 Extended *,Extended *, int); 223 extern int __kernel_rem_pio2l (Extended*,Extended*,int,int, 224 int,const int*); 225 #endif 226 227 #ifndef NO_LONG_DOUBLE 228 /* prototypes required to compile the ldbl-96 support without warnings */ 229 #ifdef LIBM_COMPILING_LDBL96 230 extern int __finitel (Extended); 231 extern int __ilogbl (Extended); 232 extern int __isinfl (Extended); 233 extern int __isnanl (Extended); 234 extern Extended __atanl (Extended); 235 extern Extended __copysignl (Extended, Extended); 236 extern Extended __expm1l (Extended); 237 extern Extended __floorl (Extended); 238 extern Extended __frexpl (Extended, int *); 239 extern Extended __ldexpl (Extended, int); 240 extern Extended __log1pl (Extended); 241 extern Extended __nanl (const char *); 242 extern Extended __rintl (Extended); 243 extern Extended __scalbnl (Extended, int); 244 extern Extended __sqrtl (Extended x); 245 extern Extended fabsl (Extended x); 246 extern void __sincosl (Extended, Extended *, Extended *); 247 extern Extended __logbl (Extended x); 248 extern Extended __significandl (Extended x); 249 #endif 250 251 #if 0 252 #ifdef LIBM_COMPILING_LDBL96 253 extern inline Extended __copysignl (Extended x, Extended y) 254 { return __builtin_copysignl (x, y); } 255 #endif 256 #endif 257 258 #endif 259 260 #endif 261 262 /* Prototypes for functions of the IBM Accurate Mathematical Library. */ 263 #ifdef LIBM_COMPILING_DBL64 264 extern Double __exp1 (Double __x, Double __xx, Double __error); 265 extern Double __sin (Double __x); 266 extern Double __cos (Double __x); 267 extern int __branred (Double __x, Double *__a, Double *__aa); 268 extern void __doasin (Double __x, Double __dx, Double __v[]); 269 extern void __dubsin (Double __x, Double __dx, Double __v[]); 270 extern void __dubcos (Double __x, Double __dx, Double __v[]); 271 extern Double __halfulp (Double __x, Double __y); 272 extern Double __sin32 (Double __x, Double __res, Double __res1); 273 extern Double __cos32 (Double __x, Double __res, Double __res1); 274 extern Double __mpsin (Double __x, Double __dx); 275 extern Double __mpcos (Double __x, Double __dx); 276 extern Double __mpsin1 (Double __x); 277 extern Double __mpcos1 (Double __x); 278 extern Double __slowexp (Double __x); 279 extern Double __slowpow (Double __x, Double __y, Double __z); 280 extern void __docos (Double __x, Double __dx, Double __v[]); 281 #endif 282 283 } 284 285 #endif /* _MATH_PRIVATE_H_ */ 286