/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */

/*
 * from: @(#)fdlibm.h 5.1 93/09/24
 * $FreeBSD$
 */

#ifndef _MATH_H_
#define	_MATH_H_

#include <sys/cdefs.h>
#include <limits.h>

__BEGIN_DECLS
#pragma GCC visibility push(default)

/*
 * ANSI/POSIX
 */
extern const union __infinity_un {
	unsigned char	__uc[8];
	double		__ud;
} __infinity;

extern const union __nan_un {
	unsigned char	__uc[sizeof(float)];
	float		__uf;
} __nan;

#if __GNUC_PREREQ(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800)
#define	__MATH_BUILTIN_CONSTANTS
#endif

#if __GNUC_PREREQ(3, 0) && !defined(__INTEL_COMPILER)
#define	__MATH_BUILTIN_RELOPS
#endif

#ifdef __MATH_BUILTIN_CONSTANTS
#define	HUGE_VAL	__builtin_huge_val()
#else
#define	HUGE_VAL	(__infinity.__ud)
#endif

#if __ISO_C_VISIBLE >= 1999
#define	FP_ILOGB0	(-INT_MAX) /* Android-changed */
#define	FP_ILOGBNAN	INT_MAX /* Android-changed */

#ifdef __MATH_BUILTIN_CONSTANTS
#define	HUGE_VALF	__builtin_huge_valf()
#define	HUGE_VALL	__builtin_huge_vall()
#define	INFINITY	__builtin_inff()
#define	NAN		__builtin_nanf("")
#else
#define	HUGE_VALF	(float)HUGE_VAL
#define	HUGE_VALL	(long double)HUGE_VAL
#define	INFINITY	HUGE_VALF
#define	NAN		(__nan.__uf)
#endif /* __MATH_BUILTIN_CONSTANTS */

#define	MATH_ERRNO	1
#define	MATH_ERREXCEPT	2
#define	math_errhandling	MATH_ERREXCEPT

#define	FP_FAST_FMAF	1
#ifdef __ia64__
#define	FP_FAST_FMA	1
#define	FP_FAST_FMAL	1
#endif

/* Symbolic constants to classify floating point numbers. */
#define	FP_INFINITE	0x01
#define	FP_NAN		0x02
#define	FP_NORMAL	0x04
#define	FP_SUBNORMAL	0x08
#define	FP_ZERO		0x10
#define	fpclassify(x) \
    ((sizeof (x) == sizeof (float)) ? __fpclassifyf(x) \
    : (sizeof (x) == sizeof (double)) ? __fpclassifyd(x) \
    : __fpclassifyl(x))

#define	isfinite(x)					\
    ((sizeof (x) == sizeof (float)) ? __isfinitef(x)	\
    : (sizeof (x) == sizeof (double)) ? __isfinite(x)	\
    : __isfinitel(x))
#define	isinf(x)					\
    ((sizeof (x) == sizeof (float)) ? __isinff(x)	\
    : (sizeof (x) == sizeof (double)) ? isinf(x)	\
    : __isinfl(x))
#define	isnan(x)					\
    ((sizeof (x) == sizeof (float)) ? __isnanf(x)	\
    : (sizeof (x) == sizeof (double)) ? isnan(x)	\
    : __isnanl(x))
#define	isnormal(x)					\
    ((sizeof (x) == sizeof (float)) ? __isnormalf(x)	\
    : (sizeof (x) == sizeof (double)) ? __isnormal(x)	\
    : __isnormall(x))

#ifdef __MATH_BUILTIN_RELOPS
#define	isgreater(x, y)		__builtin_isgreater((x), (y))
#define	isgreaterequal(x, y)	__builtin_isgreaterequal((x), (y))
#define	isless(x, y)		__builtin_isless((x), (y))
#define	islessequal(x, y)	__builtin_islessequal((x), (y))
#define	islessgreater(x, y)	__builtin_islessgreater((x), (y))
#define	isunordered(x, y)	__builtin_isunordered((x), (y))
#else
#define	isgreater(x, y)		(!isunordered((x), (y)) && (x) > (y))
#define	isgreaterequal(x, y)	(!isunordered((x), (y)) && (x) >= (y))
#define	isless(x, y)		(!isunordered((x), (y)) && (x) < (y))
#define	islessequal(x, y)	(!isunordered((x), (y)) && (x) <= (y))
#define	islessgreater(x, y)	(!isunordered((x), (y)) && \
					((x) > (y) || (y) > (x)))
#define	isunordered(x, y)	(isnan(x) || isnan(y))
#endif /* __MATH_BUILTIN_RELOPS */

#define	signbit(x)					\
    ((sizeof (x) == sizeof (float)) ? __signbitf(x)	\
    : (sizeof (x) == sizeof (double)) ? __signbit(x)	\
    : __signbitl(x))

typedef double __double_t;
typedef __double_t double_t;
typedef float __float_t;
typedef __float_t float_t;
#endif /* __ISO_C_VISIBLE >= 1999 */

/*
 * XOPEN/SVID
 */
#if __BSD_VISIBLE || __XSI_VISIBLE
#define	M_E		2.7182818284590452354	/* e */
#define	M_LOG2E		1.4426950408889634074	/* log 2e */
#define	M_LOG10E	0.43429448190325182765	/* log 10e */
#define	M_LN2		0.69314718055994530942	/* log e2 */
#define	M_LN10		2.30258509299404568402	/* log e10 */
#define	M_PI		3.14159265358979323846	/* pi */
#define	M_PI_2		1.57079632679489661923	/* pi/2 */
#define	M_PI_4		0.78539816339744830962	/* pi/4 */
#define	M_1_PI		0.31830988618379067154	/* 1/pi */
#define	M_2_PI		0.63661977236758134308	/* 2/pi */
#define	M_2_SQRTPI	1.12837916709551257390	/* 2/sqrt(pi) */
#define	M_SQRT2		1.41421356237309504880	/* sqrt(2) */
#define	M_SQRT1_2	0.70710678118654752440	/* 1/sqrt(2) */

#define	MAXFLOAT	((float)3.40282346638528860e+38)
extern int signgam;
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */

#if __BSD_VISIBLE
#if 0
/* Old value from 4.4BSD-Lite math.h; this is probably better. */
#define	HUGE		HUGE_VAL
#else
#define	HUGE		MAXFLOAT
#endif
#endif /* __BSD_VISIBLE */

/*
 * Most of these functions depend on the rounding mode and have the side
 * effect of raising floating-point exceptions, so they are not declared
 * as __pure2.  In C99, FENV_ACCESS affects the purity of these functions.
 */

/*
 * ANSI/POSIX
 */
int	__fpclassifyd(double) __NDK_FPABI_MATH__  __pure2;
int	__fpclassifyf(float) __NDK_FPABI_MATH__  __pure2;
int	__fpclassifyl(long double) __NDK_FPABI_MATH__  __pure2;
int	__isfinitef(float) __NDK_FPABI_MATH__  __pure2;
int	__isfinite(double) __NDK_FPABI_MATH__  __pure2;
int	__isfinitel(long double) __NDK_FPABI_MATH__  __pure2;
int	__isinff(float) __NDK_FPABI_MATH__  __pure2;
int	__isinfl(long double) __NDK_FPABI_MATH__  __pure2;
int	__isnanf(float) __NDK_FPABI_MATH__  __pure2;
int	__isnanl(long double) __NDK_FPABI_MATH__  __pure2;
int	__isnormalf(float) __NDK_FPABI_MATH__  __pure2;
int	__isnormal(double) __NDK_FPABI_MATH__  __pure2;
int	__isnormall(long double) __NDK_FPABI_MATH__  __pure2;
int	__signbit(double) __NDK_FPABI_MATH__  __pure2;
int	__signbitf(float) __NDK_FPABI_MATH__  __pure2;
int	__signbitl(long double) __NDK_FPABI_MATH__  __pure2;

double	acos(double) __NDK_FPABI_MATH__;
double	asin(double) __NDK_FPABI_MATH__;
double	atan(double) __NDK_FPABI_MATH__;
double	atan2(double, double) __NDK_FPABI_MATH__;
double	cos(double) __NDK_FPABI_MATH__;
double	sin(double) __NDK_FPABI_MATH__;
double	tan(double) __NDK_FPABI_MATH__;

double	cosh(double) __NDK_FPABI_MATH__;
double	sinh(double) __NDK_FPABI_MATH__;
double	tanh(double) __NDK_FPABI_MATH__;

double	exp(double) __NDK_FPABI_MATH__;
double	frexp(double, int *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */
double	ldexp(double, int) __NDK_FPABI_MATH__;
double	log(double) __NDK_FPABI_MATH__;
double	log10(double) __NDK_FPABI_MATH__;
double	modf(double, double *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */

double	pow(double, double) __NDK_FPABI_MATH__;
double	sqrt(double) __NDK_FPABI_MATH__;

double	ceil(double) __NDK_FPABI_MATH__;
double	fabs(double) __NDK_FPABI_MATH__ __pure2;
double	floor(double) __NDK_FPABI_MATH__;
double	fmod(double, double) __NDK_FPABI_MATH__;

/*
 * These functions are not in C90.
 */
#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE
double	acosh(double) __NDK_FPABI_MATH__;
double	asinh(double) __NDK_FPABI_MATH__;
double	atanh(double) __NDK_FPABI_MATH__;
double	cbrt(double) __NDK_FPABI_MATH__;
double	erf(double) __NDK_FPABI_MATH__;
double	erfc(double) __NDK_FPABI_MATH__;
double	exp2(double) __NDK_FPABI_MATH__;
double	expm1(double) __NDK_FPABI_MATH__;
double	fma(double, double, double) __NDK_FPABI_MATH__;
double	hypot(double, double) __NDK_FPABI_MATH__;
int	ilogb(double) __NDK_FPABI_MATH__ __pure2;
int	(isinf)(double) __NDK_FPABI_MATH__ __pure2;
int	(isnan)(double) __NDK_FPABI_MATH__ __pure2;
double	lgamma(double) __NDK_FPABI_MATH__;
long long llrint(double) __NDK_FPABI_MATH__;
long long llround(double) __NDK_FPABI_MATH__;
double	log1p(double) __NDK_FPABI_MATH__;
double	log2(double) __NDK_FPABI_MATH__;
double	logb(double) __NDK_FPABI_MATH__;
long	lrint(double) __NDK_FPABI_MATH__;
long	lround(double) __NDK_FPABI_MATH__;
double	nan(const char *) __NDK_FPABI_MATH__ __pure2;
double	nextafter(double, double) __NDK_FPABI_MATH__;
double	remainder(double, double) __NDK_FPABI_MATH__;
double	remquo(double, double, int *) __NDK_FPABI_MATH__;
double	rint(double) __NDK_FPABI_MATH__;
#endif /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */

#if __BSD_VISIBLE || __XSI_VISIBLE
double	j0(double) __NDK_FPABI_MATH__;
double	j1(double) __NDK_FPABI_MATH__;
double	jn(int, double) __NDK_FPABI_MATH__;
double	y0(double) __NDK_FPABI_MATH__;
double	y1(double) __NDK_FPABI_MATH__;
double	yn(int, double) __NDK_FPABI_MATH__;

#if __XSI_VISIBLE <= 500 || __BSD_VISIBLE
double	gamma(double) __NDK_FPABI_MATH__;
#endif

#if __XSI_VISIBLE <= 600 || __BSD_VISIBLE
double	scalb(double, double) __NDK_FPABI_MATH__;
#endif
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */

#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999
double	copysign(double, double) __NDK_FPABI_MATH__ __pure2;
double	fdim(double, double) __NDK_FPABI_MATH__;
double	fmax(double, double) __NDK_FPABI_MATH__ __pure2;
double	fmin(double, double) __NDK_FPABI_MATH__ __pure2;
double	nearbyint(double) __NDK_FPABI_MATH__;
double	round(double) __NDK_FPABI_MATH__;
double	scalbln(double, long) __NDK_FPABI_MATH__;
double	scalbn(double, int) __NDK_FPABI_MATH__;
double	tgamma(double) __NDK_FPABI_MATH__;
double	trunc(double) __NDK_FPABI_MATH__;
#endif

/*
 * BSD math library entry points
 */
#if __BSD_VISIBLE
double	drem(double, double) __NDK_FPABI_MATH__;
int	finite(double) __NDK_FPABI_MATH__ __pure2;
int	isnanf(float) __NDK_FPABI_MATH__ __pure2;
long double significandl(long double) __NDK_FPABI_MATH__;

/*
 * Reentrant version of gamma & lgamma; passes signgam back by reference
 * as the second argument; user must allocate space for signgam.
 */
double	gamma_r(double, int *) __NDK_FPABI_MATH__;
double	lgamma_r(double, int *) __NDK_FPABI_MATH__;

/*
 * IEEE Test Vector
 */
double	significand(double) __NDK_FPABI_MATH__;
#endif /* __BSD_VISIBLE */

/* float versions of ANSI/POSIX functions */
#if __ISO_C_VISIBLE >= 1999
float	acosf(float) __NDK_FPABI_MATH__;
float	asinf(float) __NDK_FPABI_MATH__;
float	atanf(float) __NDK_FPABI_MATH__;
float	atan2f(float, float) __NDK_FPABI_MATH__;
float	cosf(float) __NDK_FPABI_MATH__;
float	sinf(float) __NDK_FPABI_MATH__;
float	tanf(float) __NDK_FPABI_MATH__;

float	coshf(float) __NDK_FPABI_MATH__;
float	sinhf(float) __NDK_FPABI_MATH__;
float	tanhf(float) __NDK_FPABI_MATH__;

float	exp2f(float) __NDK_FPABI_MATH__;
float	expf(float) __NDK_FPABI_MATH__;
float	expm1f(float) __NDK_FPABI_MATH__;
float	frexpf(float, int *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */
int	ilogbf(float) __NDK_FPABI_MATH__ __pure2;
float	ldexpf(float, int) __NDK_FPABI_MATH__;
float	log10f(float) __NDK_FPABI_MATH__;
float	log1pf(float) __NDK_FPABI_MATH__;
float	log2f(float) __NDK_FPABI_MATH__;
float	logf(float) __NDK_FPABI_MATH__;
float	modff(float, float *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */

float	powf(float, float) __NDK_FPABI_MATH__;
float	sqrtf(float) __NDK_FPABI_MATH__;

float	ceilf(float) __NDK_FPABI_MATH__;
float	fabsf(float) __NDK_FPABI_MATH__ __pure2;
float	floorf(float) __NDK_FPABI_MATH__;
float	fmodf(float, float) __NDK_FPABI_MATH__;
float	roundf(float) __NDK_FPABI_MATH__;

float	erff(float) __NDK_FPABI_MATH__;
float	erfcf(float) __NDK_FPABI_MATH__;
float	hypotf(float, float) __NDK_FPABI_MATH__;
float	lgammaf(float) __NDK_FPABI_MATH__;
float	tgammaf(float) __NDK_FPABI_MATH__;

float	acoshf(float) __NDK_FPABI_MATH__;
float	asinhf(float) __NDK_FPABI_MATH__;
float	atanhf(float) __NDK_FPABI_MATH__;
float	cbrtf(float) __NDK_FPABI_MATH__;
float	logbf(float) __NDK_FPABI_MATH__;
float	copysignf(float, float) __NDK_FPABI_MATH__ __pure2;
long long llrintf(float) __NDK_FPABI_MATH__;
long long llroundf(float) __NDK_FPABI_MATH__;
long	lrintf(float) __NDK_FPABI_MATH__;
long	lroundf(float) __NDK_FPABI_MATH__;
float	nanf(const char *) __NDK_FPABI_MATH__ __pure2;
float	nearbyintf(float) __NDK_FPABI_MATH__;
float	nextafterf(float, float) __NDK_FPABI_MATH__;
float	remainderf(float, float) __NDK_FPABI_MATH__;
float	remquof(float, float, int *) __NDK_FPABI_MATH__;
float	rintf(float) __NDK_FPABI_MATH__;
float	scalblnf(float, long) __NDK_FPABI_MATH__;
float	scalbnf(float, int) __NDK_FPABI_MATH__;
float	truncf(float) __NDK_FPABI_MATH__;

float	fdimf(float, float) __NDK_FPABI_MATH__;
float	fmaf(float, float, float) __NDK_FPABI_MATH__;
float	fmaxf(float, float) __NDK_FPABI_MATH__ __pure2;
float	fminf(float, float) __NDK_FPABI_MATH__ __pure2;
#endif

/*
 * float versions of BSD math library entry points
 */
#if __BSD_VISIBLE
float	dremf(float, float) __NDK_FPABI_MATH__;
int	finitef(float) __NDK_FPABI_MATH__ __pure2;
float	gammaf(float) __NDK_FPABI_MATH__;
float	j0f(float) __NDK_FPABI_MATH__;
float	j1f(float) __NDK_FPABI_MATH__;
float	jnf(int, float) __NDK_FPABI_MATH__;
float	scalbf(float, float) __NDK_FPABI_MATH__;
float	y0f(float) __NDK_FPABI_MATH__;
float	y1f(float) __NDK_FPABI_MATH__;
float	ynf(int, float) __NDK_FPABI_MATH__;

/*
 * Float versions of reentrant version of gamma & lgamma; passes
 * signgam back by reference as the second argument; user must
 * allocate space for signgam.
 */
float	gammaf_r(float, int *) __NDK_FPABI_MATH__;
float	lgammaf_r(float, int *) __NDK_FPABI_MATH__;

/*
 * float version of IEEE Test Vector
 */
float	significandf(float) __NDK_FPABI_MATH__;
#endif	/* __BSD_VISIBLE */

/*
 * long double versions of ISO/POSIX math functions
 */
#if __ISO_C_VISIBLE >= 1999
long double	acoshl(long double) __NDK_FPABI_MATH__;
long double	acosl(long double) __NDK_FPABI_MATH__;
long double	asinhl(long double) __NDK_FPABI_MATH__;
long double	asinl(long double) __NDK_FPABI_MATH__;
long double	atan2l(long double, long double) __NDK_FPABI_MATH__;
long double	atanhl(long double) __NDK_FPABI_MATH__;
long double	atanl(long double) __NDK_FPABI_MATH__;
long double	cbrtl(long double) __NDK_FPABI_MATH__;
long double	ceill(long double) __NDK_FPABI_MATH__;
long double	copysignl(long double, long double) __NDK_FPABI_MATH__ __pure2;
long double	coshl(long double) __NDK_FPABI_MATH__;
long double	cosl(long double) __NDK_FPABI_MATH__;
long double	erfcl(long double) __NDK_FPABI_MATH__;
long double	erfl(long double) __NDK_FPABI_MATH__;
long double	exp2l(long double) __NDK_FPABI_MATH__;
long double	expl(long double) __NDK_FPABI_MATH__;
long double	expm1l(long double) __NDK_FPABI_MATH__;
long double	fabsl(long double) __NDK_FPABI_MATH__ __pure2;
long double	fdiml(long double, long double) __NDK_FPABI_MATH__;
long double	floorl(long double) __NDK_FPABI_MATH__;
long double	fmal(long double, long double, long double) __NDK_FPABI_MATH__;
long double	fmaxl(long double, long double) __NDK_FPABI_MATH__ __pure2;
long double	fminl(long double, long double) __NDK_FPABI_MATH__ __pure2;
long double	fmodl(long double, long double) __NDK_FPABI_MATH__;
long double	frexpl(long double value, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
long double	hypotl(long double, long double) __NDK_FPABI_MATH__;
int		ilogbl(long double) __NDK_FPABI_MATH__ __pure2;
long double	ldexpl(long double, int) __NDK_FPABI_MATH__;
long double	lgammal(long double) __NDK_FPABI_MATH__;
long long	llrintl(long double) __NDK_FPABI_MATH__;
long long	llroundl(long double) __NDK_FPABI_MATH__;
long double	log10l(long double) __NDK_FPABI_MATH__;
long double	log1pl(long double) __NDK_FPABI_MATH__;
long double	log2l(long double) __NDK_FPABI_MATH__;
long double	logbl(long double) __NDK_FPABI_MATH__;
long double	logl(long double) __NDK_FPABI_MATH__;
long		lrintl(long double) __NDK_FPABI_MATH__;
long		lroundl(long double) __NDK_FPABI_MATH__;
long double	modfl(long double, long double *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
long double	nanl(const char *) __NDK_FPABI_MATH__ __pure2;
long double	nearbyintl(long double) __NDK_FPABI_MATH__;
long double	nextafterl(long double, long double) __NDK_FPABI_MATH__;
double		nexttoward(double, long double) __NDK_FPABI_MATH__;
float		nexttowardf(float, long double) __NDK_FPABI_MATH__;
long double	nexttowardl(long double, long double) __NDK_FPABI_MATH__;
long double	powl(long double, long double) __NDK_FPABI_MATH__;
long double	remainderl(long double, long double) __NDK_FPABI_MATH__;
long double	remquol(long double, long double, int *) __NDK_FPABI_MATH__;
long double	rintl(long double) __NDK_FPABI_MATH__;
long double	roundl(long double) __NDK_FPABI_MATH__;
long double	scalblnl(long double, long) __NDK_FPABI_MATH__;
long double	scalbnl(long double, int) __NDK_FPABI_MATH__;
long double	sinhl(long double) __NDK_FPABI_MATH__;
long double	sinl(long double) __NDK_FPABI_MATH__;
long double	sqrtl(long double) __NDK_FPABI_MATH__;
long double	tanhl(long double) __NDK_FPABI_MATH__;
long double	tanl(long double) __NDK_FPABI_MATH__;
long double	tgammal(long double) __NDK_FPABI_MATH__;
long double	truncl(long double) __NDK_FPABI_MATH__;

#endif /* __ISO_C_VISIBLE >= 1999 */

#if defined(_GNU_SOURCE)
void sincos(double, double*, double*) __NDK_FPABI_MATH__;
void sincosf(float, float*, float*) __NDK_FPABI_MATH__;
void sincosl(long double, long double*, long double*) __NDK_FPABI_MATH__;
#endif /* _GNU_SOURCE */

/* builtin version of all the above math functions are annotated too */

double	__builtin_acos(double) __NDK_FPABI_MATH__;
double	__builtin_asin(double) __NDK_FPABI_MATH__;
double	__builtin_atan(double) __NDK_FPABI_MATH__;
double	__builtin_atan2(double, double) __NDK_FPABI_MATH__;
double	__builtin_cos(double) __NDK_FPABI_MATH__;
double	__builtin_sin(double) __NDK_FPABI_MATH__;
double	__builtin_tan(double) __NDK_FPABI_MATH__;

double	__builtin_cosh(double) __NDK_FPABI_MATH__;
double	__builtin_sinh(double) __NDK_FPABI_MATH__;
double	__builtin_tanh(double) __NDK_FPABI_MATH__;

double	__builtin_exp(double) __NDK_FPABI_MATH__;
double	__builtin_frexp(double, int *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */
double	__builtin_ldexp(double, int) __NDK_FPABI_MATH__;
double	__builtin_log(double) __NDK_FPABI_MATH__;
double	__builtin_log10(double) __NDK_FPABI_MATH__;
double	__builtin_modf(double, double *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */

double	__builtin_pow(double, double) __NDK_FPABI_MATH__;
double	__builtin_sqrt(double) __NDK_FPABI_MATH__;

double	__builtin_ceil(double) __NDK_FPABI_MATH__;
double	__builtin_fabs(double) __NDK_FPABI_MATH__ __pure2;
double	__builtin_floor(double) __NDK_FPABI_MATH__;
double	__builtin_fmod(double, double) __NDK_FPABI_MATH__;

/*
 * These functions are not in C90.
 */
#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE
double	__builtin_acosh(double) __NDK_FPABI_MATH__;
double	__builtin_asinh(double) __NDK_FPABI_MATH__;
double	__builtin_atanh(double) __NDK_FPABI_MATH__;
double	__builtin_cbrt(double) __NDK_FPABI_MATH__;
double	__builtin_erf(double) __NDK_FPABI_MATH__;
double	__builtin_erfc(double) __NDK_FPABI_MATH__;
double	__builtin_exp2(double) __NDK_FPABI_MATH__;
double	__builtin_expm1(double) __NDK_FPABI_MATH__;
double	__builtin_fma(double, double, double) __NDK_FPABI_MATH__;
double	__builtin_hypot(double, double) __NDK_FPABI_MATH__;
int	__builtin_ilogb(double) __NDK_FPABI_MATH__ __pure2;
#if !defined(__clang__)
/* See upstream bug http://llvm.org/bugs/show_bug.cgi?id=20958 */
int	__builtin_isinf(double) __NDK_FPABI_MATH__ __pure2;
int	__builtin_isnan(double) __NDK_FPABI_MATH__ __pure2;
#endif
double	__builtin_lgamma(double) __NDK_FPABI_MATH__;
long long __builtin_llrint(double) __NDK_FPABI_MATH__;
long long __builtin_llround(double) __NDK_FPABI_MATH__;
double	__builtin_log1p(double) __NDK_FPABI_MATH__;
double	__builtin_log2(double) __NDK_FPABI_MATH__;
double	__builtin_logb(double) __NDK_FPABI_MATH__;
long	__builtin_lrint(double) __NDK_FPABI_MATH__;
long	__builtin_lround(double) __NDK_FPABI_MATH__;
double	__builtin_nan(const char *) __NDK_FPABI_MATH__ __pure2;
double	__builtin_nextafter(double, double) __NDK_FPABI_MATH__;
double	__builtin_remainder(double, double) __NDK_FPABI_MATH__;
double	__builtin_remquo(double, double, int *) __NDK_FPABI_MATH__;
double	__builtin_rint(double) __NDK_FPABI_MATH__;
#endif /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */

#if __BSD_VISIBLE || __XSI_VISIBLE
double	__builtin_j0(double) __NDK_FPABI_MATH__;
double	__builtin_j1(double) __NDK_FPABI_MATH__;
double	__builtin_jn(int, double) __NDK_FPABI_MATH__;
double	__builtin_y0(double) __NDK_FPABI_MATH__;
double	__builtin_y1(double) __NDK_FPABI_MATH__;
double	__builtin_yn(int, double) __NDK_FPABI_MATH__;

#if __XSI_VISIBLE <= 500 || __BSD_VISIBLE
double	__builtin_gamma(double) __NDK_FPABI_MATH__;
#endif

#if __XSI_VISIBLE <= 600 || __BSD_VISIBLE
double	__builtin_scalb(double, double) __NDK_FPABI_MATH__;
#endif
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */

#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999
double	__builtin_copysign(double, double) __NDK_FPABI_MATH__ __pure2;
double	__builtin_fdim(double, double) __NDK_FPABI_MATH__;
double	__builtin_fmax(double, double) __NDK_FPABI_MATH__ __pure2;
double	__builtin_fmin(double, double) __NDK_FPABI_MATH__ __pure2;
double	__builtin_nearbyint(double) __NDK_FPABI_MATH__;
double	__builtin_round(double) __NDK_FPABI_MATH__;
double	__builtin_scalbln(double, long) __NDK_FPABI_MATH__;
double	__builtin_scalbn(double, int) __NDK_FPABI_MATH__;
double	__builtin_tgamma(double) __NDK_FPABI_MATH__;
double	__builtin_trunc(double) __NDK_FPABI_MATH__;
#endif

/*
 * BSD math library entry points
 */
#if __BSD_VISIBLE
double	__builtin_drem(double, double) __NDK_FPABI_MATH__;
int	__builtin_finite(double) __NDK_FPABI_MATH__ __pure2;
int	__builtin_isnanf(float) __NDK_FPABI_MATH__ __pure2;
long double significandl(long double) __NDK_FPABI_MATH__;

/*
 * Reentrant version of gamma & lgamma; passes signgam back by reference
 * as the second argument; user must allocate space for signgam.
 */
double	__builtin_gamma_r(double, int *) __NDK_FPABI_MATH__;
double	__builtin_lgamma_r(double, int *) __NDK_FPABI_MATH__;

/*
 * IEEE Test Vector
 */
double	__builtin_significand(double) __NDK_FPABI_MATH__;
#endif /* __BSD_VISIBLE */

/* float versions of ANSI/POSIX functions */
#if __ISO_C_VISIBLE >= 1999
float	__builtin_acosf(float) __NDK_FPABI_MATH__;
float	__builtin_asinf(float) __NDK_FPABI_MATH__;
float	__builtin_atanf(float) __NDK_FPABI_MATH__;
float	__builtin_atan2f(float, float) __NDK_FPABI_MATH__;
float	__builtin_cosf(float) __NDK_FPABI_MATH__;
float	__builtin_sinf(float) __NDK_FPABI_MATH__;
float	__builtin_tanf(float) __NDK_FPABI_MATH__;

float	__builtin_coshf(float) __NDK_FPABI_MATH__;
float	__builtin_sinhf(float) __NDK_FPABI_MATH__;
float	__builtin_tanhf(float) __NDK_FPABI_MATH__;

float	__builtin_exp2f(float) __NDK_FPABI_MATH__;
float	__builtin_expf(float) __NDK_FPABI_MATH__;
float	__builtin_expm1f(float) __NDK_FPABI_MATH__;
float	__builtin_frexpf(float, int *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */
int	__builtin_ilogbf(float) __NDK_FPABI_MATH__ __pure2;
float	__builtin_ldexpf(float, int) __NDK_FPABI_MATH__;
float	__builtin_log10f(float) __NDK_FPABI_MATH__;
float	__builtin_log1pf(float) __NDK_FPABI_MATH__;
float	__builtin_log2f(float) __NDK_FPABI_MATH__;
float	__builtin_logf(float) __NDK_FPABI_MATH__;
float	__builtin_modff(float, float *) __NDK_FPABI_MATH__;	/* fundamentally !__pure2 */

float	__builtin_powf(float, float) __NDK_FPABI_MATH__;
float	__builtin_sqrtf(float) __NDK_FPABI_MATH__;

float	__builtin_ceilf(float) __NDK_FPABI_MATH__;
float	__builtin_fabsf(float) __NDK_FPABI_MATH__ __pure2;
float	__builtin_floorf(float) __NDK_FPABI_MATH__;
float	__builtin_fmodf(float, float) __NDK_FPABI_MATH__;
float	__builtin_roundf(float) __NDK_FPABI_MATH__;

float	__builtin_erff(float) __NDK_FPABI_MATH__;
float	__builtin_erfcf(float) __NDK_FPABI_MATH__;
float	__builtin_hypotf(float, float) __NDK_FPABI_MATH__;
float	__builtin_lgammaf(float) __NDK_FPABI_MATH__;
float	__builtin_tgammaf(float) __NDK_FPABI_MATH__;

float	__builtin_acoshf(float) __NDK_FPABI_MATH__;
float	__builtin_asinhf(float) __NDK_FPABI_MATH__;
float	__builtin_atanhf(float) __NDK_FPABI_MATH__;
float	__builtin_cbrtf(float) __NDK_FPABI_MATH__;
float	__builtin_logbf(float) __NDK_FPABI_MATH__;
float	__builtin_copysignf(float, float) __NDK_FPABI_MATH__ __pure2;
long long __builtin_llrintf(float) __NDK_FPABI_MATH__;
long long __builtin_llroundf(float) __NDK_FPABI_MATH__;
long	__builtin_lrintf(float) __NDK_FPABI_MATH__;
long	__builtin_lroundf(float) __NDK_FPABI_MATH__;
float	__builtin_nanf(const char *) __NDK_FPABI_MATH__ __pure2;
float	__builtin_nearbyintf(float) __NDK_FPABI_MATH__;
float	__builtin_nextafterf(float, float) __NDK_FPABI_MATH__;
float	__builtin_remainderf(float, float) __NDK_FPABI_MATH__;
float	__builtin_remquof(float, float, int *) __NDK_FPABI_MATH__;
float	__builtin_rintf(float) __NDK_FPABI_MATH__;
float	__builtin_scalblnf(float, long) __NDK_FPABI_MATH__;
float	__builtin_scalbnf(float, int) __NDK_FPABI_MATH__;
float	__builtin_truncf(float) __NDK_FPABI_MATH__;

float	__builtin_fdimf(float, float) __NDK_FPABI_MATH__;
float	__builtin_fmaf(float, float, float) __NDK_FPABI_MATH__;
float	__builtin_fmaxf(float, float) __NDK_FPABI_MATH__ __pure2;
float	__builtin_fminf(float, float) __NDK_FPABI_MATH__ __pure2;
#endif

/*
 * float versions of BSD math library entry points
 */
#if __BSD_VISIBLE
float	__builtin_dremf(float, float) __NDK_FPABI_MATH__;
int	__builtin_finitef(float) __NDK_FPABI_MATH__ __pure2;
float	__builtin_gammaf(float) __NDK_FPABI_MATH__;
float	__builtin_j0f(float) __NDK_FPABI_MATH__;
float	__builtin_j1f(float) __NDK_FPABI_MATH__;
float	__builtin_jnf(int, float) __NDK_FPABI_MATH__;
float	__builtin_scalbf(float, float) __NDK_FPABI_MATH__;
float	__builtin_y0f(float) __NDK_FPABI_MATH__;
float	__builtin_y1f(float) __NDK_FPABI_MATH__;
float	__builtin_ynf(int, float) __NDK_FPABI_MATH__;

/*
 * Float versions of reentrant version of gamma & lgamma; passes
 * signgam back by reference as the second argument; user must
 * allocate space for signgam.
 */
float	__builtin_gammaf_r(float, int *) __NDK_FPABI_MATH__;
float	__builtin_lgammaf_r(float, int *) __NDK_FPABI_MATH__;

/*
 * float version of IEEE Test Vector
 */
float	__builtin_significandf(float) __NDK_FPABI_MATH__;
#endif	/* __BSD_VISIBLE */

/*
 * long double versions of ISO/POSIX math functions
 */
#if __ISO_C_VISIBLE >= 1999
long double	__builtin_acoshl(long double) __NDK_FPABI_MATH__;
long double	__builtin_acosl(long double) __NDK_FPABI_MATH__;
long double	__builtin_asinhl(long double) __NDK_FPABI_MATH__;
long double	__builtin_asinl(long double) __NDK_FPABI_MATH__;
long double	__builtin_atan2l(long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_atanhl(long double) __NDK_FPABI_MATH__;
long double	__builtin_atanl(long double) __NDK_FPABI_MATH__;
long double	__builtin_cbrtl(long double) __NDK_FPABI_MATH__;
long double	__builtin_ceill(long double) __NDK_FPABI_MATH__;
long double	__builtin_copysignl(long double, long double) __NDK_FPABI_MATH__ __pure2;
long double	__builtin_coshl(long double) __NDK_FPABI_MATH__;
long double	__builtin_cosl(long double) __NDK_FPABI_MATH__;
long double	__builtin_erfcl(long double) __NDK_FPABI_MATH__;
long double	__builtin_erfl(long double) __NDK_FPABI_MATH__;
long double	__builtin_exp2l(long double) __NDK_FPABI_MATH__;
long double	__builtin_expl(long double) __NDK_FPABI_MATH__;
long double	__builtin_expm1l(long double) __NDK_FPABI_MATH__;
long double	__builtin_fabsl(long double) __NDK_FPABI_MATH__ __pure2;
long double	__builtin_fdiml(long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_floorl(long double) __NDK_FPABI_MATH__;
long double	__builtin_fmal(long double, long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_fmaxl(long double, long double) __NDK_FPABI_MATH__ __pure2;
long double	__builtin_fminl(long double, long double) __NDK_FPABI_MATH__ __pure2;
long double	__builtin_fmodl(long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_frexpl(long double value, int *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
long double	__builtin_hypotl(long double, long double) __NDK_FPABI_MATH__;
int		__builtin_ilogbl(long double) __NDK_FPABI_MATH__ __pure2;
long double	__builtin_ldexpl(long double, int) __NDK_FPABI_MATH__;
long double	__builtin_lgammal(long double) __NDK_FPABI_MATH__;
long long	__builtin_llrintl(long double) __NDK_FPABI_MATH__;
long long	__builtin_llroundl(long double) __NDK_FPABI_MATH__;
long double	__builtin_log10l(long double) __NDK_FPABI_MATH__;
long double	__builtin_log1pl(long double) __NDK_FPABI_MATH__;
long double	__builtin_log2l(long double) __NDK_FPABI_MATH__;
long double	__builtin_logbl(long double) __NDK_FPABI_MATH__;
long double	__builtin_logl(long double) __NDK_FPABI_MATH__;
long		__builtin_lrintl(long double) __NDK_FPABI_MATH__;
long		__builtin_lroundl(long double) __NDK_FPABI_MATH__;
long double	__builtin_modfl(long double, long double *) __NDK_FPABI_MATH__; /* fundamentally !__pure2 */
long double	__builtin_nanl(const char *) __NDK_FPABI_MATH__ __pure2;
long double	__builtin_nearbyintl(long double) __NDK_FPABI_MATH__;
long double	__builtin_nextafterl(long double, long double) __NDK_FPABI_MATH__;
double		__builtin_nexttoward(double, long double) __NDK_FPABI_MATH__;
float		__builtin_nexttowardf(float, long double) __NDK_FPABI_MATH__;
long double	__builtin_nexttowardl(long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_powl(long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_remainderl(long double, long double) __NDK_FPABI_MATH__;
long double	__builtin_remquol(long double, long double, int *) __NDK_FPABI_MATH__;
long double	__builtin_rintl(long double) __NDK_FPABI_MATH__;
long double	__builtin_roundl(long double) __NDK_FPABI_MATH__;
long double	__builtin_scalblnl(long double, long) __NDK_FPABI_MATH__;
long double	__builtin_scalbnl(long double, int) __NDK_FPABI_MATH__;
long double	__builtin_sinhl(long double) __NDK_FPABI_MATH__;
long double	__builtin_sinl(long double) __NDK_FPABI_MATH__;
long double	__builtin_sqrtl(long double) __NDK_FPABI_MATH__;
long double	__builtin_tanhl(long double) __NDK_FPABI_MATH__;
long double	__builtin_tanl(long double) __NDK_FPABI_MATH__;
long double	__builtin_tgammal(long double) __NDK_FPABI_MATH__;
long double	__builtin_truncl(long double) __NDK_FPABI_MATH__;

#endif /* __ISO_C_VISIBLE >= 1999 */

#if defined(_GNU_SOURCE)
void __builtin_sincos(double, double*, double*) __NDK_FPABI_MATH__;
void __builtin_sincosf(float, float*, float*) __NDK_FPABI_MATH__;
void __builtin_sincosl(long double, long double*, long double*) __NDK_FPABI_MATH__;
#endif /* _GNU_SOURCE */

#pragma GCC visibility pop
__END_DECLS

#endif /* !_MATH_H_ */
