Add missing <complex.h> functions.
FreeBSD doesn't seem interested in having low-quality implementations of
these functions:
cacoshl, cacosl, casinhl, casinl, catanhl, catanl, ccoshl, ccosl, cexpl,
clog, clogf, clogl, cpow, cpowf, cpowl, csinhl, csinl, ctanhl, ctanl.
And they still haven't got round to writing good implementations, so for
now let's just take the NetBSD ones so we have the full set.
Bug: http://b/27555792
Change-Id: I6b72003cf749b1043f006377a01fffe5e1d659bc
diff --git a/libm/include/complex.h b/libm/include/complex.h
index ff6b166..b54d2fc 100644
--- a/libm/include/complex.h
+++ b/libm/include/complex.h
@@ -32,9 +32,6 @@
#include <sys/cdefs.h>
#ifdef __GNUC__
-#if __STDC_VERSION__ < 199901
-#define _Complex __complex__
-#endif
#define _Complex_I ((float _Complex)1.0i)
#endif
@@ -51,7 +48,7 @@
#define CMPLX(x, y) ((double complex){ x, y })
#define CMPLXF(x, y) ((float complex){ x, y })
#define CMPLXL(x, y) ((long double complex){ x, y })
-#elif __GNUC_PREREQ__(4, 7)
+#else
#define CMPLX(x, y) __builtin_complex((double)(x), (double)(y))
#define CMPLXF(x, y) __builtin_complex((float)(x), (float)(y))
#define CMPLXL(x, y) __builtin_complex((long double)(x), (long double)(y))
@@ -61,56 +58,103 @@
__BEGIN_DECLS
#pragma GCC visibility push(default)
-double cabs(double complex);
-float cabsf(float complex);
-long double cabsl(long double complex);
-double complex cacos(double complex);
-float complex cacosf(float complex);
-double complex cacosh(double complex);
-float complex cacoshf(float complex);
-double carg(double complex);
-float cargf(float complex);
-long double cargl(long double complex);
-double complex casin(double complex);
-float complex casinf(float complex);
-double complex casinh(double complex);
-float complex casinhf(float complex);
-double complex catan(double complex);
-float complex catanf(float complex);
-double complex catanh(double complex);
-float complex catanhf(float complex);
-double complex ccos(double complex);
-float complex ccosf(float complex);
-double complex ccosh(double complex);
-float complex ccoshf(float complex);
-double complex cexp(double complex);
-float complex cexpf(float complex);
-double cimag(double complex) __pure2;
-float cimagf(float complex) __pure2;
-long double cimagl(long double complex) __pure2;
-double complex conj(double complex) __pure2;
-float complex conjf(float complex) __pure2;
-long double complex
- conjl(long double complex) __pure2;
-float complex cprojf(float complex) __pure2;
-double complex cproj(double complex) __pure2;
-long double complex
- cprojl(long double complex) __pure2;
-double creal(double complex) __pure2;
-float crealf(float complex) __pure2;
-long double creall(long double complex) __pure2;
-double complex csin(double complex);
-float complex csinf(float complex);
-double complex csinh(double complex);
-float complex csinhf(float complex);
-double complex csqrt(double complex);
-float complex csqrtf(float complex);
-long double complex
- csqrtl(long double complex);
-double complex ctan(double complex);
-float complex ctanf(float complex);
-double complex ctanh(double complex);
-float complex ctanhf(float complex);
+/* 7.3.5 Trigonometric functions */
+/* 7.3.5.1 The cacos functions */
+double complex cacos(double complex);
+float complex cacosf(float complex);
+long double complex cacosl(long double complex);
+/* 7.3.5.2 The casin functions */
+double complex casin(double complex);
+float complex casinf(float complex);
+long double complex casinl(long double complex);
+/* 7.3.5.1 The catan functions */
+double complex catan(double complex);
+float complex catanf(float complex);
+long double complex catanl(long double complex);
+/* 7.3.5.1 The ccos functions */
+double complex ccos(double complex);
+float complex ccosf(float complex);
+long double complex ccosl(long double complex);
+/* 7.3.5.1 The csin functions */
+double complex csin(double complex);
+float complex csinf(float complex);
+long double complex csinl(long double complex);
+/* 7.3.5.1 The ctan functions */
+double complex ctan(double complex);
+float complex ctanf(float complex);
+long double complex ctanl(long double complex);
+
+/* 7.3.6 Hyperbolic functions */
+/* 7.3.6.1 The cacosh functions */
+double complex cacosh(double complex);
+float complex cacoshf(float complex);
+long double complex cacoshl(long double complex);
+/* 7.3.6.2 The casinh functions */
+double complex casinh(double complex);
+float complex casinhf(float complex);
+long double complex casinhl(long double complex);
+/* 7.3.6.3 The catanh functions */
+double complex catanh(double complex);
+float complex catanhf(float complex);
+long double complex catanhl(long double complex);
+/* 7.3.6.4 The ccosh functions */
+double complex ccosh(double complex);
+float complex ccoshf(float complex);
+long double complex ccoshl(long double complex);
+/* 7.3.6.5 The csinh functions */
+double complex csinh(double complex);
+float complex csinhf(float complex);
+long double complex csinhl(long double complex);
+/* 7.3.6.6 The ctanh functions */
+double complex ctanh(double complex);
+float complex ctanhf(float complex);
+long double complex ctanhl(long double complex);
+
+/* 7.3.7 Exponential and logarithmic functions */
+/* 7.3.7.1 The cexp functions */
+double complex cexp(double complex);
+float complex cexpf(float complex);
+long double complex cexpl(long double complex);
+/* 7.3.7.2 The clog functions */
+double complex clog(double complex);
+float complex clogf(float complex);
+long double complex clogl(long double complex);
+
+/* 7.3.8 Power and absolute-value functions */
+/* 7.3.8.1 The cabs functions */
+double cabs(double complex);
+float cabsf(float complex);
+long double cabsl(long double complex);
+/* 7.3.8.2 The cpow functions */
+double complex cpow(double complex, double complex);
+float complex cpowf(float complex, float complex);
+long double complex cpowl(long double complex, long double complex);
+/* 7.3.8.3 The csqrt functions */
+double complex csqrt(double complex);
+float complex csqrtf(float complex);
+long double complex csqrtl(long double complex);
+
+/* 7.3.9 Manipulation functions */
+/* 7.3.9.1 The carg functions */
+double carg(double complex);
+float cargf(float complex);
+long double cargl(long double complex);
+/* 7.3.9.2 The cimag functions */
+double cimag(double complex);
+float cimagf(float complex);
+long double cimagl(long double complex);
+/* 7.3.9.3 The conj functions */
+double complex conj(double complex);
+float complex conjf(float complex);
+long double complex conjl(long double complex);
+/* 7.3.9.4 The cproj functions */
+double complex cproj(double complex);
+float complex cprojf(float complex);
+long double complex cprojl(long double complex);
+/* 7.3.9.5 The creal functions */
+double creal(double complex);
+float crealf(float complex);
+long double creall(long double complex);
#pragma GCC visibility pop
__END_DECLS