diff --git a/libc/isystem/tgmath.h b/libc/isystem/tgmath.h index 2f9efe946..8ec254a49 100644 --- a/libc/isystem/tgmath.h +++ b/libc/isystem/tgmath.h @@ -2,6 +2,7 @@ #define LIBC_ISYSTEM_TGMATH_H_ #include "libc/math.h" +#include "libc/complex.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) #if __STDC_VERSION__ + 0 >= 201112 @@ -9,51 +10,356 @@ COSMOPOLITAN_C_START_ /* from https://en.cppreference.com/w/c/numeric/tgmath */ -#define fabs(x) \ - _Generic((x), float : fabsf, default : fabs, long double : fabsl)(x) +#define fabs(x) _Generic((x), \ + float : fabsf, \ + default: fabs, \ + long double : fabsl, \ + complex float : cabsf, \ + complex double : cabs, \ + complex long double : cabsl)(x) -#define exp(x) _Generic((x), float : expf, default : exp, long double : expl)(x) +#define exp(x) _Generic((x), \ + float : expf, \ + default: exp, \ + long double : expl, \ + complex float : cexpf, \ + complex double : cexp, \ + complex long double : cexpl)(x) -#define log(x) _Generic((x), float : logf, default : log, long double : logl)(x) +#define log(x) _Generic((x), \ + float : logf, \ + default : log, \ + long double : logl, \ + complex float : clogf, \ + complex double : clog, \ + complex long double : clogl)(x) -#define pow(x, y) \ - _Generic((x), float : powf, default : pow, long double : powl)(x, y) +#define pow(x, y) _Generic((x), \ + float : powf, \ + default : pow, \ + long double : powl, \ + complex float : cpowf, \ + complex double : cpow, \ + complex long double : cpowl)(x, y) -#define sqrt(x) \ - _Generic((x), float : sqrtf, default : sqrt, long double : sqrtl)(x) +#define sqrt(x) _Generic((x), \ + float : sqrtf, \ + default : sqrt, \ + long double : sqrtl, \ + complex float : csqrtf, \ + complex double : csqrt, \ + complex long double : csqrtl)(x) -#define sin(x) _Generic((x), float : sinf, default : sin, long double : sinl)(x) +#define sin(x) _Generic((x), \ + float : sinf, \ + default : sin, \ + long double : sinl, \ + complex float : csinf, \ + complex double : csin, \ + complex long double : csinl)(x) -#define cos(x) _Generic((x), float : cosf, default : cos, long double : cosl)(x) +#define cos(x) _Generic((x), \ + float : cosf, \ + default : cos, \ + long double : cosl, \ + complex float : ccosf, \ + complex double : ccos, \ + complex long double : ccosl)(x) -#define tan(x) _Generic((x), float : tanf, default : tan, long double : tanl)(x) +#define tan(x) _Generic((x), \ + float : tanf, \ + default : tan, \ + long double : tanl, \ + complex float : ctanf, \ + complex double : ctan, \ + complex long double : ctanl)(x) -#define asin(x) \ - _Generic((x), float : asinf, default : asin, long double : asinl)(x) +#define asin(x) _Generic((x), \ + float : asinf, \ + default : asin, \ + long double : asinl, \ + complex float : casinf, \ + complex double : casin, \ + complex long double : casinl)(x) -#define acos(x) \ - _Generic((x), float : acosf, default : acos, long double : acosl)(x) +#define acos(x) _Generic((x), \ + float : acosf, \ + default : acos, \ + long double : acosl, \ + complex float : cacosf, \ + complex double : cacos, \ + complex long double : cacosl)(x) -#define atan(x) \ - _Generic((x), float : atanf, default : atan, long double : atanl)(x) +#define atan(x) _Generic((x), \ + float : atanf, \ + default : atan, \ + long double : atanl, \ + complex float : catanf, \ + complex double : catan, \ + complex long double : catanl)(x) -#define sinh(x) \ - _Generic((x), float : sinhf, default : sinh, long double : sinhl)(x) +#define sinh(x) _Generic((x), \ + float : sinhf, \ + default : sinh, \ + long double : sinhl, \ + complex float : csinhf, \ + complex double : csinh, \ + complex long double : csinhl)(x) -#define cosh(x) \ - _Generic((x), float : coshf, default : cosh, long double : coshl)(x) +#define cosh(x) _Generic((x), \ + float : coshf, \ + default : cosh, \ + long double : coshl, \ + complex float : ccoshf, \ + complex double : ccosh, \ + complex long double : ccoshl)(x) -#define tanh(x) \ - _Generic((x), float : tanhf, default : tanh, long double : tanhl)(x) +#define tanh(x) _Generic((x), \ + float : tanhf, \ + default : tanh, \ + long double : tanhl, \ + complex float : ctanhf, \ + complex double : ctanh, \ + complex long double : ctanhl)(x) -#define asinh(x) \ - _Generic((x), float : asinhf, default : asinh, long double : asinhl)(x) +#define asinh(x) _Generic((x), \ + float : asinhf, \ + default : asinh, \ + long double : asinhl, \ + complex float : casinhf, \ + complex double : casinh, \ + complex long double : casinhl)(x) -#define acosh(x) \ - _Generic((x), float : acoshf, default : acosh, long double : acoshl)(x) +#define acosh(x) _Generic((x), \ + float : acoshf, \ + default : acosh, \ + long double : acoshl, \ + complex float : cacoshf, \ + complex double : cacosh, \ + complex long double : cacoshl)(x) -#define atanh(x) \ - _Generic((x), float : atanhf, default : atanh, long double : atanhl)(x) +#define atanh(x) _Generic((x), \ + float : atanhf, \ + default : atanh, \ + long double : atanhl, \ + complex float : catanhf, \ + complex double : catanh, \ + complex long double : catanhl)(x) + +#define atan2(x, y) _Generic((x), \ + float : atan2f, \ + default : atan2, \ + long double : atan2l)(x, y) + +#define cbrt(x) _Generic((x), \ + float : cbrtf, \ + default : cbrt, \ + long double : cbrtl)(x) + +#define ceil(x) _Generic((x), \ + float : ceilf, \ + default : ceil, \ + long double : ceill)(x) + +#define copysign(x, y) _Generic((x), \ + float : copysignf, \ + default : copysign, \ + long double : copysignl)(x, y) + +#define erf(x) _Generic((x), \ + float : erff, \ + default : erf, \ + long double : erfl)(x) + +#define erfc(x) _Generic((x), \ + float : erfcf, \ + default : erfc, \ + long double : erfcl)(x) + +#define exp2(x) _Generic((x), \ + float : exp2f, \ + default : exp2, \ + long double : exp2l)(x) + +#define expm1(x) _Generic((x), \ + float : expm1f, \ + default : expm1, \ + long double : expm1l)(x) + +#define fdim(x, y) _Generic((x), \ + float : fdimf, \ + default : fdim, \ + long double : fdiml)(x, y) + +#define floor(x) _Generic((x), \ + float : floorf, \ + default : floor, \ + long double : floorl)(x) + +#define fma(x, y, z) _Generic((x), \ + float : fmaf, \ + default : fma, \ + long double : fmal)(x, y, z) + +#define fmax(x, y) _Generic((x), \ + float : fmaxf, \ + default : fmax, \ + long double : fmaxl)(x, y) + +#define fmin(x, y) _Generic((x), \ + float : fminf, \ + default : fmin, \ + long double : fminl)(x, y) + +#define fmod(x, y) _Generic((x), \ + float : fmodf, \ + default : fmod, \ + long double : fmodl)(x, y) + +#define frexp(x, y) _Generic((x), \ + float : frexpf, \ + default : frexp, \ + long double : frexpl)(x, y) + +#define hypot(x, y) _Generic((x), \ + float : hypotf, \ + default : hypot, \ + long double : hypotl)(x, y) + +#define ilogb(x) _Generic((x), \ + float : ilogbf, \ + default : ilogb, \ + long double : ilogbl)(x) + +#define ldexp(x, y) _Generic((x), \ + float : ldexpf, \ + default : ldexp, \ + long double : ldexpl)(x, y) + +#define lgamma(x) _Generic((x), \ + float : lgammaf, \ + default : lgamma, \ + long double : lgammal)(x) + +#define llrint(x) _Generic((x), \ + float : llrintf, \ + default : llrint, \ + long double : llrintl)(x) + +#define llround(x) _Generic((x), \ + float : llroundf, \ + default : llround, \ + long double : llroundl)(x) + +#define log10(x) _Generic((x), \ + float : log10f, \ + default : log10, \ + long double : log10l)(x) + +#define log1p(x) _Generic((x), \ + float : log1pf, \ + default : log1p, \ + long double : log1pl)(x) + +#define log2(x) _Generic((x), \ + float : log2f, \ + default : log2, \ + long double : log2l)(x) + +#define logb(x) _Generic((x), \ + float : logbf, \ + default : logb, \ + long double : logbl)(x) + +#define lrint(x) _Generic((x), \ + float : lrintf, \ + default : lrint, \ + long double : lrintl)(x) + +#define lround(x) _Generic((x), \ + float : lroundf, \ + default : lround, \ + long double : lroundl)(x) + +#define nearbyint(x) _Generic((x), \ + float : nearbyintf, \ + default : nearbyint, \ + long double : nearbyintl)(x) + +#define nextafter(x, y) _Generic((x), \ + float : nextafterf, \ + default : nextafter, \ + long double : nextafterl)(x, y) + +#define nexttoward(x, y) _Generic((x), \ + float : nexttowardf, \ + default : nexttoward, \ + long double : nexttowardl)(x, y) + +#define remainder(x, y) _Generic((x), \ + float : remainderf, \ + default : remainder, \ + long double : remainderl)(x, y) + +#define remquo(x, y) _Generic((x), \ + float : remquof, \ + default : remquo, \ + long double : remquol)(x, y) + +#define rint(x) _Generic((x), \ + float : rintf, \ + default : rint, \ + long double : rintl)(x) + +#define round(x) _Generic((x), \ + float : roundf, \ + default : round, \ + long double : roundl)(x) + +#define scalbln(x, y) _Generic((x), \ + float : scalblnf, \ + default : scalbln, \ + long double : scalblnl)(x, y) + +#define scalbn(x, y) _Generic((x), \ + float : scalbnf, \ + default : scalbn, \ + long double : scalbnl)(x, y) + +#define tgamma(x) _Generic((x), \ + float : tgammaf, \ + default : tgamma, \ + long double : tgammal)(x) + +#define trunc(x) _Generic((x), \ + float : truncf, \ + default : trunc, \ + long double : truncl)(x) + +#define carg(x) _Generic((x), \ + complex float : cargf, \ + complex default : carg, \ + complex long double : cargl)(x) + +#define conj(x) _Generic((x), \ + complex float : conjf, \ + complex default : conj, \ + complex long double : conjl)(x) + +#define creal(x) _Generic((x), \ + complex float : crealf, \ + complex default : creal, \ + complex long double : creall)(x) + +#define cimag(x) _Generic((x), \ + complex float : cimagf, \ + complex default : cimag, \ + complex long double : cimagl)(x) + +#define cproj(x) _Generic((x), \ + complex float : cprojf, \ + complex default : cproj, \ + complex long double : cprojl)(x) COSMOPOLITAN_C_END_