blob: 7fe24b97c52d8bed7c59f5d9279e02ff81264e60 [file] [log] [blame]
Andrew Hsieh6986c6e2013-09-06 18:37:46 +08001/*
2 * ====================================================
3 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
4 *
5 * Developed at SunPro, a Sun Microsystems, Inc. business.
6 * Permission to use, copy, modify, and distribute this
7 * software is freely granted, provided that this notice
8 * is preserved.
9 * ====================================================
10 */
11
12/*
13 * from: @(#)fdlibm.h 5.1 93/09/24
14 * $FreeBSD: src/lib/msun/src/math.h,v 1.61 2005/04/16 21:12:47 das Exp $
15 */
16
17#ifndef _MATH_H_
18#define _MATH_H_
19
20#include <sys/cdefs.h>
21#include <sys/types.h>
22#include <limits.h>
23
24#define __pure2
25
26/*
27 * ANSI/POSIX
28 */
29extern const union __infinity_un {
30 unsigned char __uc[8];
31 double __ud;
32} __infinity;
33
34extern const union __nan_un {
35 unsigned char __uc[sizeof(float)];
36 float __uf;
37} __nan;
38
39/* #if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) */
40#if 1
41#define __MATH_BUILTIN_CONSTANTS
42#endif
43
44/* #if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER) */
45#if 1
46#define __MATH_BUILTIN_RELOPS
47#endif
48
49/* #ifdef __MATH_BUILTIN_CONSTANTS */
50#if 1
51#define HUGE_VAL __builtin_huge_val()
52#else
53#define HUGE_VAL (__infinity.__ud)
54#endif
55
56/* #if __ISO_C_VISIBLE >= 1999 */
57#if 0
58#define FP_ILOGB0 (-__INT_MAX)
59#define FP_ILOGBNAN __INT_MAX
60#else
61#define FP_ILOGB0 (-INT_MAX)
62#define FP_ILOGBNAN INT_MAX
63#endif
64
65#ifdef __MATH_BUILTIN_CONSTANTS
66#define HUGE_VALF __builtin_huge_valf()
67#define HUGE_VALL __builtin_huge_vall()
68#define INFINITY __builtin_inf()
69#define NAN __builtin_nan("")
70#else
71#define HUGE_VALF (float)HUGE_VAL
72#define HUGE_VALL (long double)HUGE_VAL
73#define INFINITY HUGE_VALF
74#define NAN (__nan.__uf)
75#endif /* __MATH_BUILTIN_CONSTANTS */
76
77#define MATH_ERRNO 1
78#define MATH_ERREXCEPT 2
79#define math_errhandling MATH_ERREXCEPT
80
81/* XXX We need a <machine/math.h>. */
82#if defined(__ia64__) || defined(__sparc64__)
83#define FP_FAST_FMA
84#endif
85#ifdef __ia64__
86#define FP_FAST_FMAL
87#endif
88#define FP_FAST_FMAF
89
90/* Symbolic constants to classify floating point numbers. */
91#define FP_INFINITE 0x01
92#define FP_NAN 0x02
93#define FP_NORMAL 0x04
94#define FP_SUBNORMAL 0x08
95#define FP_ZERO 0x10
96#define fpclassify(x) \
97 ((sizeof (x) == sizeof (float)) ? __fpclassifyf(x) \
98 : (sizeof (x) == sizeof (double)) ? __fpclassifyd(x) \
99 : __fpclassifyl(x))
100
101#define isfinite(x) \
102 ((sizeof (x) == sizeof (float)) ? __isfinitef(x) \
103 : (sizeof (x) == sizeof (double)) ? __isfinite(x) \
104 : __isfinitel(x))
105#define isinf(x) \
106 ((sizeof (x) == sizeof (float)) ? __isinff(x) \
107 : (sizeof (x) == sizeof (double)) ? __isinf(x) \
108 : __isinfl(x))
109#define isnan(x) \
110 ((sizeof (x) == sizeof (float)) ? isnanf(x) \
111 : (sizeof (x) == sizeof (double)) ? isnan(x) \
112 : __isnanl(x))
113#define isnormal(x) \
114 ((sizeof (x) == sizeof (float)) ? __isnormalf(x) \
115 : (sizeof (x) == sizeof (double)) ? __isnormal(x) \
116 : __isnormall(x))
117
118#ifdef __MATH_BUILTIN_RELOPS
119#define isgreater(x, y) __builtin_isgreater((x), (y))
120#define isgreaterequal(x, y) __builtin_isgreaterequal((x), (y))
121#define isless(x, y) __builtin_isless((x), (y))
122#define islessequal(x, y) __builtin_islessequal((x), (y))
123#define islessgreater(x, y) __builtin_islessgreater((x), (y))
124#define isunordered(x, y) __builtin_isunordered((x), (y))
125#else
126#define isgreater(x, y) (!isunordered((x), (y)) && (x) > (y))
127#define isgreaterequal(x, y) (!isunordered((x), (y)) && (x) >= (y))
128#define isless(x, y) (!isunordered((x), (y)) && (x) < (y))
129#define islessequal(x, y) (!isunordered((x), (y)) && (x) <= (y))
130#define islessgreater(x, y) (!isunordered((x), (y)) && \
131 ((x) > (y) || (y) > (x)))
132#define isunordered(x, y) (isnan(x) || isnan(y))
133#endif /* __MATH_BUILTIN_RELOPS */
134
135#define signbit(x) \
136 ((sizeof (x) == sizeof (float)) ? __signbitf(x) \
137 : (sizeof (x) == sizeof (double)) ? __signbit(x) \
138 : __signbitl(x))
139
140#if 0
141typedef __double_t double_t;
142typedef __float_t float_t;
143#endif
144/* #endif */ /* __ISO_C_VISIBLE >= 1999 */
145
146/*
147 * XOPEN/SVID
148 */
149/* #if __BSD_VISIBLE || __XSI_VISIBLE */
150#define M_E 2.7182818284590452354 /* e */
151#define M_LOG2E 1.4426950408889634074 /* log 2e */
152#define M_LOG10E 0.43429448190325182765 /* log 10e */
153#define M_LN2 0.69314718055994530942 /* log e2 */
154#define M_LN10 2.30258509299404568402 /* log e10 */
155#define M_PI 3.14159265358979323846 /* pi */
156#define M_PI_2 1.57079632679489661923 /* pi/2 */
157#define M_PI_4 0.78539816339744830962 /* pi/4 */
158#define M_1_PI 0.31830988618379067154 /* 1/pi */
159#define M_2_PI 0.63661977236758134308 /* 2/pi */
160#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
161#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
162#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
163
164#define MAXFLOAT ((float)3.40282346638528860e+38)
165extern int signgam;
166/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */
167
168#if __BSD_VISIBLE
169#if 0
170/* Old value from 4.4BSD-Lite math.h; this is probably better. */
171#define HUGE HUGE_VAL
172#else
173#define HUGE MAXFLOAT
174#endif
175#endif /* __BSD_VISIBLE */
176
177/*
178 * Most of these functions depend on the rounding mode and have the side
179 * effect of raising floating-point exceptions, so they are not declared
180 * as __pure2. In C99, FENV_ACCESS affects the purity of these functions.
181 */
182__BEGIN_DECLS
183/*
184 * ANSI/POSIX
185 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800186int __fpclassifyd(double) __NDK_FPABI_MATH__ __pure2;
187int __fpclassifyf(float) __NDK_FPABI_MATH__ __pure2;
188int __fpclassifyl(long double) __NDK_FPABI_MATH__ __pure2;
189int __isfinitef(float) __NDK_FPABI_MATH__ __pure2;
190int __isfinite(double) __NDK_FPABI_MATH__ __pure2;
191int __isfinitel(long double) __NDK_FPABI_MATH__ __pure2;
192int __isinff(float) __NDK_FPABI_MATH__ __pure2;
193int __isinf(double) __NDK_FPABI_MATH__ __pure2;
194int __isinfl(long double) __NDK_FPABI_MATH__ __pure2;
195int __isnanl(long double) __NDK_FPABI_MATH__ __pure2;
196int __isnormalf(float) __NDK_FPABI_MATH__ __pure2;
197int __isnormal(double) __NDK_FPABI_MATH__ __pure2;
198int __isnormall(long double) __NDK_FPABI_MATH__ __pure2;
199int __signbit(double) __NDK_FPABI_MATH__ __pure2;
200int __signbitf(float) __NDK_FPABI_MATH__ __pure2;
201int __signbitl(long double) __NDK_FPABI_MATH__ __pure2;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800202
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800203double acos(double) __NDK_FPABI_MATH__;
204double asin(double) __NDK_FPABI_MATH__;
205double atan(double) __NDK_FPABI_MATH__;
206double atan2(double, double) __NDK_FPABI_MATH__;
207double cos(double) __NDK_FPABI_MATH__;
208double sin(double) __NDK_FPABI_MATH__;
209double tan(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800210
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800211double cosh(double) __NDK_FPABI_MATH__;
212double sinh(double) __NDK_FPABI_MATH__;
213double tanh(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800214
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800215double exp(double) __NDK_FPABI_MATH__;
216double frexp(double, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
217double ldexp(double, int) __NDK_FPABI_MATH__;
218double log(double) __NDK_FPABI_MATH__;
219double log10(double) __NDK_FPABI_MATH__;
220double modf(double, double *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800221
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800222double pow(double, double) __NDK_FPABI_MATH__;
223double sqrt(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800224
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800225double ceil(double) __NDK_FPABI_MATH__;
226double fabs(double) __NDK_FPABI_MATH__ __pure2;
227double floor(double) __NDK_FPABI_MATH__;
228double fmod(double, double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800229
230/*
231 * These functions are not in C90.
232 */
233/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800234double acosh(double) __NDK_FPABI_MATH__;
235double asinh(double) __NDK_FPABI_MATH__;
236double atanh(double) __NDK_FPABI_MATH__;
237double cbrt(double) __NDK_FPABI_MATH__;
238double erf(double) __NDK_FPABI_MATH__;
239double erfc(double) __NDK_FPABI_MATH__;
240double exp2(double) __NDK_FPABI_MATH__;
241double expm1(double) __NDK_FPABI_MATH__;
242double fma(double, double, double) __NDK_FPABI_MATH__;
243double hypot(double, double) __NDK_FPABI_MATH__;
244int ilogb(double) __NDK_FPABI_MATH__ __pure2;
245/* int (isinf)(double) __NDK_FPABI_MATH__ __pure2; */
246int (isnan)(double) __NDK_FPABI_MATH__ __pure2;
247double lgamma(double) __NDK_FPABI_MATH__;
248long long llrint(double) __NDK_FPABI_MATH__;
249long long llround(double) __NDK_FPABI_MATH__;
250double log1p(double) __NDK_FPABI_MATH__;
251double logb(double) __NDK_FPABI_MATH__;
252long lrint(double) __NDK_FPABI_MATH__;
253long lround(double) __NDK_FPABI_MATH__;
254double nan(const char *) __NDK_FPABI_MATH__ __pure2;
255double nextafter(double, double) __NDK_FPABI_MATH__;
256double remainder(double, double) __NDK_FPABI_MATH__;
257double remquo(double, double, int *) __NDK_FPABI_MATH__;
258double rint(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800259/* #endif */ /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */
260
261/* #if __BSD_VISIBLE || __XSI_VISIBLE */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800262double j0(double) __NDK_FPABI_MATH__;
263double j1(double) __NDK_FPABI_MATH__;
264double jn(int, double) __NDK_FPABI_MATH__;
265double scalb(double, double) __NDK_FPABI_MATH__;
266double y0(double) __NDK_FPABI_MATH__;
267double y1(double) __NDK_FPABI_MATH__;
268double yn(int, double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800269
270/* #if __XSI_VISIBLE <= 500 || __BSD_VISIBLE */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800271double gamma(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800272/* #endif */
273/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */
274
275/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800276double copysign(double, double) __NDK_FPABI_MATH__ __pure2;
277double fdim(double, double) __NDK_FPABI_MATH__;
278double fmax(double, double) __NDK_FPABI_MATH__ __pure2;
279double fmin(double, double) __NDK_FPABI_MATH__ __pure2;
280double nearbyint(double) __NDK_FPABI_MATH__;
281double round(double) __NDK_FPABI_MATH__;
282double scalbln(double, long) __NDK_FPABI_MATH__;
283double scalbn(double, int) __NDK_FPABI_MATH__;
284double tgamma(double) __NDK_FPABI_MATH__;
285double trunc(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800286/* #endif */
287
288/*
289 * BSD math library entry points
290 */
291/* #if __BSD_VISIBLE */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800292double drem(double, double) __NDK_FPABI_MATH__;
293int finite(double) __NDK_FPABI_MATH__ __pure2;
294int isnanf(float) __NDK_FPABI_MATH__ __pure2;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800295
296/*
297 * Reentrant version of gamma & lgamma; passes signgam back by reference
298 * as the second argument; user must allocate space for signgam.
299 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800300double gamma_r(double, int *) __NDK_FPABI_MATH__;
301double lgamma_r(double, int *) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800302
303/*
304 * IEEE Test Vector
305 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800306double significand(double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800307/* #endif */ /* __BSD_VISIBLE */
308
309/* float versions of ANSI/POSIX functions */
310/*#if __ISO_C_VISIBLE >= 1999 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800311float acosf(float) __NDK_FPABI_MATH__;
312float asinf(float) __NDK_FPABI_MATH__;
313float atanf(float) __NDK_FPABI_MATH__;
314float atan2f(float, float) __NDK_FPABI_MATH__;
315float cosf(float) __NDK_FPABI_MATH__;
316float sinf(float) __NDK_FPABI_MATH__;
317float tanf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800318
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800319float coshf(float) __NDK_FPABI_MATH__;
320float sinhf(float) __NDK_FPABI_MATH__;
321float tanhf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800322
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800323float exp2f(float) __NDK_FPABI_MATH__;
324float expf(float) __NDK_FPABI_MATH__;
325float expm1f(float) __NDK_FPABI_MATH__;
326float frexpf(float, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
327int ilogbf(float) __NDK_FPABI_MATH__ __pure2;
328float ldexpf(float, int) __NDK_FPABI_MATH__;
329float log10f(float) __NDK_FPABI_MATH__;
330float log1pf(float) __NDK_FPABI_MATH__;
331float logf(float) __NDK_FPABI_MATH__;
332float modff(float, float *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800333
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800334float powf(float, float) __NDK_FPABI_MATH__;
335float sqrtf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800336
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800337float ceilf(float) __NDK_FPABI_MATH__;
338float fabsf(float) __NDK_FPABI_MATH__ __pure2;
339float floorf(float) __NDK_FPABI_MATH__;
340float fmodf(float, float) __NDK_FPABI_MATH__;
341float roundf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800342
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800343float erff(float) __NDK_FPABI_MATH__;
344float erfcf(float) __NDK_FPABI_MATH__;
345float hypotf(float, float) __NDK_FPABI_MATH__;
346float lgammaf(float) __NDK_FPABI_MATH__;
347float tgammaf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800348
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800349float acoshf(float) __NDK_FPABI_MATH__;
350float asinhf(float) __NDK_FPABI_MATH__;
351float atanhf(float) __NDK_FPABI_MATH__;
352float cbrtf(float) __NDK_FPABI_MATH__;
353float logbf(float) __NDK_FPABI_MATH__;
354float copysignf(float, float) __NDK_FPABI_MATH__ __pure2;
355long long llrintf(float) __NDK_FPABI_MATH__;
356long long llroundf(float) __NDK_FPABI_MATH__;
357long lrintf(float) __NDK_FPABI_MATH__;
358long lroundf(float) __NDK_FPABI_MATH__;
359float nanf(const char *) __NDK_FPABI_MATH__ __pure2;
360float nearbyintf(float) __NDK_FPABI_MATH__;
361float nextafterf(float, float) __NDK_FPABI_MATH__;
362float remainderf(float, float) __NDK_FPABI_MATH__;
363float remquof(float, float, int *) __NDK_FPABI_MATH__;
364float rintf(float) __NDK_FPABI_MATH__;
365float scalblnf(float, long) __NDK_FPABI_MATH__;
366float scalbnf(float, int) __NDK_FPABI_MATH__;
367float truncf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800368
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800369float fdimf(float, float) __NDK_FPABI_MATH__;
370float fmaf(float, float, float) __NDK_FPABI_MATH__;
371float fmaxf(float, float) __NDK_FPABI_MATH__ __pure2;
372float fminf(float, float) __NDK_FPABI_MATH__ __pure2;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800373/* #endif */
374
375/*
376 * float versions of BSD math library entry points
377 */
378/* #if __BSD_VISIBLE */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800379float dremf(float, float) __NDK_FPABI_MATH__;
380int finitef(float) __NDK_FPABI_MATH__ __pure2;
381float gammaf(float) __NDK_FPABI_MATH__;
382float j0f(float) __NDK_FPABI_MATH__;
383float j1f(float) __NDK_FPABI_MATH__;
384float jnf(int, float) __NDK_FPABI_MATH__;
385float scalbf(float, float) __NDK_FPABI_MATH__;
386float y0f(float) __NDK_FPABI_MATH__;
387float y1f(float) __NDK_FPABI_MATH__;
388float ynf(int, float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800389
390/*
391 * Float versions of reentrant version of gamma & lgamma; passes
392 * signgam back by reference as the second argument; user must
393 * allocate space for signgam.
394 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800395float gammaf_r(float, int *) __NDK_FPABI_MATH__;
396float lgammaf_r(float, int *) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800397
398/*
399 * float version of IEEE Test Vector
400 */
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800401float significandf(float) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800402/* #endif */ /* __BSD_VISIBLE */
403
404/*
405 * long double versions of ISO/POSIX math functions
406 */
407/* #if __ISO_C_VISIBLE >= 1999 */
408#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800409long double acoshl(long double) __NDK_FPABI_MATH__;
410long double acosl(long double) __NDK_FPABI_MATH__;
411long double asinhl(long double) __NDK_FPABI_MATH__;
412long double asinl(long double) __NDK_FPABI_MATH__;
413long double atan2l(long double, long double) __NDK_FPABI_MATH__;
414long double atanhl(long double) __NDK_FPABI_MATH__;
415long double atanl(long double) __NDK_FPABI_MATH__;
416long double cbrtl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800417#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800418long double ceill(long double) __NDK_FPABI_MATH__;
419long double copysignl(long double, long double) __NDK_FPABI_MATH__ __pure2;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800420#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800421long double coshl(long double) __NDK_FPABI_MATH__;
422long double cosl(long double) __NDK_FPABI_MATH__;
423long double erfcl(long double) __NDK_FPABI_MATH__;
424long double erfl(long double) __NDK_FPABI_MATH__;
425long double exp2l(long double) __NDK_FPABI_MATH__;
426long double expl(long double) __NDK_FPABI_MATH__;
427long double expm1l(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800428#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800429long double fabsl(long double) __NDK_FPABI_MATH__ __pure2;
430long double fdiml(long double, long double) __NDK_FPABI_MATH__;
431long double floorl(long double) __NDK_FPABI_MATH__;
432long double fmal(long double, long double, long double) __NDK_FPABI_MATH__;
433long double fmaxl(long double, long double) __NDK_FPABI_MATH__ __pure2;
434long double fminl(long double, long double) __NDK_FPABI_MATH__ __pure2;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800435#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800436long double fmodl(long double, long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800437#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800438long double frexpl(long double value, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800439#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800440long double hypotl(long double, long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800441#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800442int ilogbl(long double) __NDK_FPABI_MATH__ __pure2;
443long double ldexpl(long double, int) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800444#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800445long double lgammal(long double) __NDK_FPABI_MATH__;
446long long llrintl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800447#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800448long long llroundl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800449#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800450long double log10l(long double) __NDK_FPABI_MATH__;
451long double log1pl(long double) __NDK_FPABI_MATH__;
452long double log2l(long double) __NDK_FPABI_MATH__;
453long double logbl(long double) __NDK_FPABI_MATH__;
454long double logl(long double) __NDK_FPABI_MATH__;
455long lrintl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800456#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800457long lroundl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800458#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800459long double modfl(long double, long double *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800460#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800461long double nanl(const char *) __NDK_FPABI_MATH__ __pure2;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800462#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800463long double nearbyintl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800464#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800465long double nextafterl(long double, long double) __NDK_FPABI_MATH__;
466double nexttoward(double, long double) __NDK_FPABI_MATH__;
467float nexttowardf(float, long double) __NDK_FPABI_MATH__;
468long double nexttowardl(long double, long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800469#if 0
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800470long double powl(long double, long double) __NDK_FPABI_MATH__;
471long double remainderl(long double, long double) __NDK_FPABI_MATH__;
472long double remquol(long double, long double, int *) __NDK_FPABI_MATH__;
473long double rintl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800474#endif
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800475long double roundl(long double) __NDK_FPABI_MATH__;
476long double scalblnl(long double, long) __NDK_FPABI_MATH__;
477long double scalbnl(long double, int) __NDK_FPABI_MATH__;
478#if 0
479long double sinhl(long double) __NDK_FPABI_MATH__;
480long double sinl(long double) __NDK_FPABI_MATH__;
481long double sqrtl(long double) __NDK_FPABI_MATH__;
482long double tanhl(long double) __NDK_FPABI_MATH__;
483long double tanl(long double) __NDK_FPABI_MATH__;
484long double tgammal(long double) __NDK_FPABI_MATH__;
485#endif
486long double truncl(long double) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800487
488/* BIONIC: GLibc compatibility - required by the ARM toolchain */
489#ifdef _GNU_SOURCE
Andrew Hsiehe02e0422013-11-11 15:54:42 +0800490void sincos(double x, double *sin, double *cos) __NDK_FPABI_MATH__;
491void sincosf(float x, float *sin, float *cos) __NDK_FPABI_MATH__;
492void sincosl(long double x, long double *sin, long double *cos) __NDK_FPABI_MATH__;
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800493#endif
494
Andrew Hsieha1ec2172014-02-05 12:17:02 +0800495/* builtin version of all the above math functions are annotated too */
496
497double __builtin_acos(double) __NDK_FPABI_MATH__;
498double __builtin_asin(double) __NDK_FPABI_MATH__;
499double __builtin_atan(double) __NDK_FPABI_MATH__;
500double __builtin_atan2(double, double) __NDK_FPABI_MATH__;
501double __builtin_cos(double) __NDK_FPABI_MATH__;
502double __builtin_sin(double) __NDK_FPABI_MATH__;
503double __builtin_tan(double) __NDK_FPABI_MATH__;
504double __builtin_cosh(double) __NDK_FPABI_MATH__;
505double __builtin_sinh(double) __NDK_FPABI_MATH__;
506double __builtin_tanh(double) __NDK_FPABI_MATH__;
507double __builtin_exp(double) __NDK_FPABI_MATH__;
508double __builtin_frexp(double, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
509double __builtin_ldexp(double, int) __NDK_FPABI_MATH__;
510double __builtin_log(double) __NDK_FPABI_MATH__;
511double __builtin_log10(double) __NDK_FPABI_MATH__;
512double __builtin_modf(double, double *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
513double __builtin_pow(double, double) __NDK_FPABI_MATH__;
514double __builtin_sqrt(double) __NDK_FPABI_MATH__;
515double __builtin_ceil(double) __NDK_FPABI_MATH__;
516double __builtin_fabs(double) __NDK_FPABI_MATH__ __pure2;
517double __builtin_floor(double) __NDK_FPABI_MATH__;
518double __builtin_fmod(double, double) __NDK_FPABI_MATH__;
519double __builtin_acosh(double) __NDK_FPABI_MATH__;
520double __builtin_asinh(double) __NDK_FPABI_MATH__;
521double __builtin_atanh(double) __NDK_FPABI_MATH__;
522double __builtin_cbrt(double) __NDK_FPABI_MATH__;
523double __builtin_erf(double) __NDK_FPABI_MATH__;
524double __builtin_erfc(double) __NDK_FPABI_MATH__;
525double __builtin_exp2(double) __NDK_FPABI_MATH__;
526double __builtin_expm1(double) __NDK_FPABI_MATH__;
527double __builtin_fma(double, double, double) __NDK_FPABI_MATH__;
528double __builtin_hypot(double, double) __NDK_FPABI_MATH__;
529int __builtin_ilogb(double) __NDK_FPABI_MATH__ __pure2;
530/* int __builtin_isinf(double) __NDK_FPABI_MATH__ __pure2; */
Stephen Hines67300722014-11-26 14:07:50 -0800531#if !defined(__clang__) || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 7)
Andrew Hsieha1ec2172014-02-05 12:17:02 +0800532int __builtin_isnan(double) __NDK_FPABI_MATH__ __pure2;
533#else
Stephen Hines67300722014-11-26 14:07:50 -0800534/* clang < 3.7 has faulty prototype for __builtin_isnan */
Andrew Hsieha1ec2172014-02-05 12:17:02 +0800535#endif
536double __builtin_lgamma(double) __NDK_FPABI_MATH__;
537long long __builtin_llrint(double) __NDK_FPABI_MATH__;
538long long __builtin_llround(double) __NDK_FPABI_MATH__;
539double __builtin_log1p(double) __NDK_FPABI_MATH__;
540double __builtin_logb(double) __NDK_FPABI_MATH__;
541long __builtin_lrint(double) __NDK_FPABI_MATH__;
542long __builtin_lround(double) __NDK_FPABI_MATH__;
543double __builtin_nan(const char *) __NDK_FPABI_MATH__ __pure2;
544double __builtin_nextafter(double, double) __NDK_FPABI_MATH__;
545double __builtin_remainder(double, double) __NDK_FPABI_MATH__;
546double __builtin_remquo(double, double, int *) __NDK_FPABI_MATH__;
547double __builtin_rint(double) __NDK_FPABI_MATH__;
548double __builtin_j0(double) __NDK_FPABI_MATH__;
549double __builtin_j1(double) __NDK_FPABI_MATH__;
550double __builtin_jn(int, double) __NDK_FPABI_MATH__;
551double __builtin_scalb(double, double) __NDK_FPABI_MATH__;
552double __builtin_y0(double) __NDK_FPABI_MATH__;
553double __builtin_y1(double) __NDK_FPABI_MATH__;
554double __builtin_yn(int, double) __NDK_FPABI_MATH__;
555double __builtin_gamma(double) __NDK_FPABI_MATH__;
556double __builtin_copysign(double, double) __NDK_FPABI_MATH__ __pure2;
557double __builtin_fdim(double, double) __NDK_FPABI_MATH__;
558double __builtin_fmax(double, double) __NDK_FPABI_MATH__ __pure2;
559double __builtin_fmin(double, double) __NDK_FPABI_MATH__ __pure2;
560double __builtin_nearbyint(double) __NDK_FPABI_MATH__;
561double __builtin_round(double) __NDK_FPABI_MATH__;
562double __builtin_scalbln(double, long) __NDK_FPABI_MATH__;
563double __builtin_scalbn(double, int) __NDK_FPABI_MATH__;
564double __builtin_tgamma(double) __NDK_FPABI_MATH__;
565double __builtin_trunc(double) __NDK_FPABI_MATH__;
566double __builtin_drem(double, double) __NDK_FPABI_MATH__;
567int __builtin_finite(double) __NDK_FPABI_MATH__ __pure2;
568int __builtin_isnanf(float) __NDK_FPABI_MATH__ __pure2;
569double __builtin_gamma_r(double, int *) __NDK_FPABI_MATH__;
570double __builtin_lgamma_r(double, int *) __NDK_FPABI_MATH__;
571double __builtin_significand(double) __NDK_FPABI_MATH__;
572float __builtin_acosf(float) __NDK_FPABI_MATH__;
573float __builtin_asinf(float) __NDK_FPABI_MATH__;
574float __builtin_atanf(float) __NDK_FPABI_MATH__;
575float __builtin_atan2f(float, float) __NDK_FPABI_MATH__;
576float __builtin_cosf(float) __NDK_FPABI_MATH__;
577float __builtin_sinf(float) __NDK_FPABI_MATH__;
578float __builtin_tanf(float) __NDK_FPABI_MATH__;
579float __builtin_coshf(float) __NDK_FPABI_MATH__;
580float __builtin_sinhf(float) __NDK_FPABI_MATH__;
581float __builtin_tanhf(float) __NDK_FPABI_MATH__;
582float __builtin_exp2f(float) __NDK_FPABI_MATH__;
583float __builtin_expf(float) __NDK_FPABI_MATH__;
584float __builtin_expm1f(float) __NDK_FPABI_MATH__;
585float __builtin_frexpf(float, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
586int __builtin_ilogbf(float) __NDK_FPABI_MATH__ __pure2;
587float __builtin_ldexpf(float, int) __NDK_FPABI_MATH__;
588float __builtin_log10f(float) __NDK_FPABI_MATH__;
589float __builtin_log1pf(float) __NDK_FPABI_MATH__;
590float __builtin_logf(float) __NDK_FPABI_MATH__;
591float __builtin_modff(float, float *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
592float __builtin_powf(float, float) __NDK_FPABI_MATH__;
593float __builtin_sqrtf(float) __NDK_FPABI_MATH__;
594float __builtin_ceilf(float) __NDK_FPABI_MATH__;
595float __builtin_fabsf(float) __NDK_FPABI_MATH__ __pure2;
596float __builtin_floorf(float) __NDK_FPABI_MATH__;
597float __builtin_fmodf(float, float) __NDK_FPABI_MATH__;
598float __builtin_roundf(float) __NDK_FPABI_MATH__;
599float __builtin_erff(float) __NDK_FPABI_MATH__;
600float __builtin_erfcf(float) __NDK_FPABI_MATH__;
601float __builtin_hypotf(float, float) __NDK_FPABI_MATH__;
602float __builtin_lgammaf(float) __NDK_FPABI_MATH__;
603float __builtin_tgammaf(float) __NDK_FPABI_MATH__;
604float __builtin_acoshf(float) __NDK_FPABI_MATH__;
605float __builtin_asinhf(float) __NDK_FPABI_MATH__;
606float __builtin_atanhf(float) __NDK_FPABI_MATH__;
607float __builtin_cbrtf(float) __NDK_FPABI_MATH__;
608float __builtin_logbf(float) __NDK_FPABI_MATH__;
609float __builtin_copysignf(float, float) __NDK_FPABI_MATH__ __pure2;
610long long __builtin_llrintf(float) __NDK_FPABI_MATH__;
611long long __builtin_llroundf(float) __NDK_FPABI_MATH__;
612long __builtin_lrintf(float) __NDK_FPABI_MATH__;
613long __builtin_lroundf(float) __NDK_FPABI_MATH__;
614float __builtin_nanf(const char *) __NDK_FPABI_MATH__ __pure2;
615float __builtin_nearbyintf(float) __NDK_FPABI_MATH__;
616float __builtin_nextafterf(float, float) __NDK_FPABI_MATH__;
617float __builtin_remainderf(float, float) __NDK_FPABI_MATH__;
618float __builtin_remquof(float, float, int *) __NDK_FPABI_MATH__;
619float __builtin_rintf(float) __NDK_FPABI_MATH__;
620float __builtin_scalblnf(float, long) __NDK_FPABI_MATH__;
621float __builtin_scalbnf(float, int) __NDK_FPABI_MATH__;
622float __builtin_truncf(float) __NDK_FPABI_MATH__;
623float __builtin_fdimf(float, float) __NDK_FPABI_MATH__;
624float __builtin_fmaf(float, float, float) __NDK_FPABI_MATH__;
625float __builtin_fmaxf(float, float) __NDK_FPABI_MATH__ __pure2;
626float __builtin_fminf(float, float) __NDK_FPABI_MATH__ __pure2;
627float __builtin_dremf(float, float) __NDK_FPABI_MATH__;
628int __builtin_finitef(float) __NDK_FPABI_MATH__ __pure2;
629float __builtin_gammaf(float) __NDK_FPABI_MATH__;
630float __builtin_j0f(float) __NDK_FPABI_MATH__;
631float __builtin_j1f(float) __NDK_FPABI_MATH__;
632float __builtin_jnf(int, float) __NDK_FPABI_MATH__;
633float __builtin_scalbf(float, float) __NDK_FPABI_MATH__;
634float __builtin_y0f(float) __NDK_FPABI_MATH__;
635float __builtin_y1f(float) __NDK_FPABI_MATH__;
636float __builtin_ynf(int, float) __NDK_FPABI_MATH__;
637float __builtin_gammaf_r(float, int *) __NDK_FPABI_MATH__;
638float __builtin_lgammaf_r(float, int *) __NDK_FPABI_MATH__;
639float __builtin_significandf(float) __NDK_FPABI_MATH__;
640long double __builtin_acoshl(long double) __NDK_FPABI_MATH__;
641long double __builtin_acosl(long double) __NDK_FPABI_MATH__;
642long double __builtin_asinhl(long double) __NDK_FPABI_MATH__;
643long double __builtin_asinl(long double) __NDK_FPABI_MATH__;
644long double __builtin_atan2l(long double, long double) __NDK_FPABI_MATH__;
645long double __builtin_atanhl(long double) __NDK_FPABI_MATH__;
646long double __builtin_atanl(long double) __NDK_FPABI_MATH__;
647long double __builtin_cbrtl(long double) __NDK_FPABI_MATH__;
648long double __builtin_ceill(long double) __NDK_FPABI_MATH__;
649long double __builtin_copysignl(long double, long double) __NDK_FPABI_MATH__ __pure2;
650long double __builtin_coshl(long double) __NDK_FPABI_MATH__;
651long double __builtin_cosl(long double) __NDK_FPABI_MATH__;
652long double __builtin_erfcl(long double) __NDK_FPABI_MATH__;
653long double __builtin_erfl(long double) __NDK_FPABI_MATH__;
654long double __builtin_exp2l(long double) __NDK_FPABI_MATH__;
655long double __builtin_expl(long double) __NDK_FPABI_MATH__;
656long double __builtin_expm1l(long double) __NDK_FPABI_MATH__;
657long double __builtin_fabsl(long double) __NDK_FPABI_MATH__ __pure2;
658long double __builtin_fdiml(long double, long double) __NDK_FPABI_MATH__;
659long double __builtin_floorl(long double) __NDK_FPABI_MATH__;
660long double __builtin_fmal(long double, long double, long double) __NDK_FPABI_MATH__;
661long double __builtin_fmaxl(long double, long double) __NDK_FPABI_MATH__ __pure2;
662long double __builtin_fminl(long double, long double) __NDK_FPABI_MATH__ __pure2;
663long double __builtin_fmodl(long double, long double) __NDK_FPABI_MATH__;
664long double __builtin_frexpl(long double value, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
665long double __builtin_hypotl(long double, long double) __NDK_FPABI_MATH__;
666int __builtin_ilogbl(long double) __NDK_FPABI_MATH__ __pure2;
667long double __builtin_ldexpl(long double, int) __NDK_FPABI_MATH__;
668long double __builtin_lgammal(long double) __NDK_FPABI_MATH__;
669long long __builtin_llrintl(long double) __NDK_FPABI_MATH__;
670long long __builtin_llroundl(long double) __NDK_FPABI_MATH__;
671long double __builtin_log10l(long double) __NDK_FPABI_MATH__;
672long double __builtin_log1pl(long double) __NDK_FPABI_MATH__;
673long double __builtin_log2l(long double) __NDK_FPABI_MATH__;
674long double __builtin_logbl(long double) __NDK_FPABI_MATH__;
675long double __builtin_logl(long double) __NDK_FPABI_MATH__;
676long __builtin_lrintl(long double) __NDK_FPABI_MATH__;
677long __builtin_lroundl(long double) __NDK_FPABI_MATH__;
678long double __builtin_modfl(long double, long double *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
679long double __builtin_nanl(const char *) __NDK_FPABI_MATH__ __pure2;
680long double __builtin_nearbyintl(long double) __NDK_FPABI_MATH__;
681long double __builtin_nextafterl(long double, long double) __NDK_FPABI_MATH__;
682#if !defined(__clang__) || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)
683double __builtin_nexttoward(double, long double) __NDK_FPABI_MATH__;
684float __builtin_nexttowardf(float, long double) __NDK_FPABI_MATH__;
685#else
686/* clang < 3.4 */
687double __builtin_nexttoward(double, double) __NDK_FPABI_MATH__;
688float __builtin_nexttowardf(float, float) __NDK_FPABI_MATH__;
689#endif
690long double __builtin_nexttowardl(long double, long double) __NDK_FPABI_MATH__;
691long double __builtin_powl(long double, long double) __NDK_FPABI_MATH__;
692long double __builtin_remainderl(long double, long double) __NDK_FPABI_MATH__;
693long double __builtin_remquol(long double, long double, int *) __NDK_FPABI_MATH__;
694long double __builtin_rintl(long double) __NDK_FPABI_MATH__;
695long double __builtin_roundl(long double) __NDK_FPABI_MATH__;
696long double __builtin_scalblnl(long double, long) __NDK_FPABI_MATH__;
697long double __builtin_scalbnl(long double, int) __NDK_FPABI_MATH__;
698long double __builtin_sinhl(long double) __NDK_FPABI_MATH__;
699long double __builtin_sinl(long double) __NDK_FPABI_MATH__;
700long double __builtin_sqrtl(long double) __NDK_FPABI_MATH__;
701long double __builtin_tanhl(long double) __NDK_FPABI_MATH__;
702long double __builtin_tanl(long double) __NDK_FPABI_MATH__;
703long double __builtin_tgammal(long double) __NDK_FPABI_MATH__;
704long double __builtin_truncl(long double) __NDK_FPABI_MATH__;
705void __builtin_sincos(double x, double *sin, double *cos) __NDK_FPABI_MATH__;
706void __builtin_sincosf(float x, float *sin, float *cos) __NDK_FPABI_MATH__;
707void __builtin_sincosl(long double x, long double *sin, long double *cos) __NDK_FPABI_MATH__;
708
Andrew Hsieh6986c6e2013-09-06 18:37:46 +0800709/* #endif */ /* __ISO_C_VISIBLE >= 1999 */
710__END_DECLS
711
712#endif /* !_MATH_H_ */