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