summaryrefslogtreecommitdiff
path: root/src/internal/complex_impl.h
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2018-11-29 22:09:53 +0000
committerRich Felker <dalias@aerifal.cx>2019-04-17 13:03:52 -0400
commit2d72b58070bc43a727b580a46746e87215a60a33 (patch)
treee890c9ae3fa3b496e321dcadfec38f3bf8cef959 /src/internal/complex_impl.h
parente980ca7a571465e8a4c887a199491c2cd8d0c0ee (diff)
downloadmusl-2d72b58070bc43a727b580a46746e87215a60a33.tar.gz
math: move complex math out of libm.h
This makes it easier to build musl math code with a compiler that does not support complex types (tcc) and in general more sensible factorization of the internal headers.
Diffstat (limited to 'src/internal/complex_impl.h')
-rw-r--r--src/internal/complex_impl.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/internal/complex_impl.h b/src/internal/complex_impl.h
new file mode 100644
index 00000000..51fb298a
--- /dev/null
+++ b/src/internal/complex_impl.h
@@ -0,0 +1,22 @@
+#ifndef _COMPLEX_IMPL_H
+#define _COMPLEX_IMPL_H
+
+#include <complex.h>
+#include "libm.h"
+
+#undef __CMPLX
+#undef CMPLX
+#undef CMPLXF
+#undef CMPLXL
+
+#define __CMPLX(x, y, t) \
+ ((union { _Complex t __z; t __xy[2]; }){.__xy = {(x),(y)}}.__z)
+
+#define CMPLX(x, y) __CMPLX(x, y, double)
+#define CMPLXF(x, y) __CMPLX(x, y, float)
+#define CMPLXL(x, y) __CMPLX(x, y, long double)
+
+hidden double complex __ldexp_cexp(double complex,int);
+hidden float complex __ldexp_cexpf(float complex,int);
+
+#endif