From f978f2487e08b133bef6671c063e481c0520fe93 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Tue, 25 Feb 2025 16:17:37 +0000 Subject: [PATCH] feat(userspace/libc): add math stub functions Signed-off-by: EnderIce2 --- Userspace/libc/include/math.h | 28 ++--- Userspace/libc/src/std/math.c | 202 ++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+), 14 deletions(-) create mode 100644 Userspace/libc/src/std/math.c diff --git a/Userspace/libc/include/math.h b/Userspace/libc/include/math.h index 3d654229..a0059231 100644 --- a/Userspace/libc/include/math.h +++ b/Userspace/libc/include/math.h @@ -38,6 +38,8 @@ typedef long double double_t; #error "Unsupported FLT_EVAL_METHOD" #endif + extern int signgam; + double acos(double); float acosf(float); double acosh(double); @@ -68,12 +70,12 @@ typedef long double double_t; double copysign(double, double); float copysignf(float, float); long double copysignl(long double, long double); - double cos(double); - float cosf(float); - double cosh(double); - float coshf(float); - long double coshl(long double); - long double cosl(long double); + double cos(double x); + float cosf(float x); + double cosh(double x); + float coshf(float x); + long double coshl(long double x); + long double cosl(long double x); double erf(double); double erfc(double); float erfcf(float); @@ -192,12 +194,12 @@ typedef long double double_t; double scalbn(double, int); float scalbnf(float, int); long double scalbnl(long double, int); - double sin(double); - float sinf(float); - double sinh(double); - float sinhf(float); - long double sinhl(long double); - long double sinl(long double); + double sin(double x); + float sinf(float x); + double sinh(double x); + float sinhf(float x); + long double sinhl(long double x); + long double sinl(long double x); double sqrt(double); float sqrtf(float); long double sqrtl(long double); @@ -217,8 +219,6 @@ typedef long double double_t; double y1(double); double yn(int, double); - extern int signgam; - #ifdef __cplusplus } #endif // __cplusplus diff --git a/Userspace/libc/src/std/math.c b/Userspace/libc/src/std/math.c new file mode 100644 index 00000000..e86149be --- /dev/null +++ b/Userspace/libc/src/std/math.c @@ -0,0 +1,202 @@ +/* + This file is part of Fennix C Library. + + Fennix C Library is free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + Fennix C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Fennix C Library. If not, see . +*/ + +#include +#include +#include +#include + +export int signgam; + +export double acos(double x); +export float acosf(float x); +export double acosh(double x); +export float acoshf(float x); +export long double acoshl(long double x); +export long double acosl(long double x); +export double asin(double x); +export float asinf(float x); +export double asinh(double x); +export float asinhf(float x); +export long double asinhl(long double x); +export long double asinl(long double x); +export double atan(double x); +export double atan2(double y, double x); +export float atan2f(float y, float x); +export long double atan2l(long double y, long double x); +export float atanf(float); +export double atanh(double); +export float atanhf(float); +export long double atanhl(long double); +export long double atanl(long double); +export double cbrt(double); +export float cbrtf(float); +export long double cbrtl(long double); +export double ceil(double); +export float ceilf(float); +export long double ceill(long double); +export double copysign(double, double); +export float copysignf(float, float); +export long double copysignl(long double, long double); +export double cos(double x); +export float cosf(float x); +export double cosh(double x); +export float coshf(float x); +export long double coshl(long double x); +export long double cosl(long double x); +export double erf(double); +export double erfc(double); +export float erfcf(float); +export long double erfcl(long double); +export float erff(float); +export long double erfl(long double); +export double exp(double); +export double exp2(double); +export float exp2f(float); +export long double exp2l(long double); +export float expf(float); +export long double expl(long double); +export double expm1(double); +export float expm1f(float); +export long double expm1l(long double); +export double fabs(double); +export float fabsf(float); +export long double fabsl(long double); +export double fdim(double, double); +export float fdimf(float, float); +export long double fdiml(long double, long double); +export double floor(double); +export float floorf(float); +export long double floorl(long double); +export double fma(double, double, double); +export float fmaf(float, float, float); +export long double fmal(long double, long double, long double); +export double fmax(double, double); +export float fmaxf(float, float); +export long double fmaxl(long double, long double); +export double fmin(double, double); +export float fminf(float, float); +export long double fminl(long double, long double); +export double fmod(double, double); +export float fmodf(float, float); +export long double fmodl(long double, long double); +export double frexp(double, int *); +export float frexpf(float value, int *); +export long double frexpl(long double value, int *); +export double hypot(double, double); +export float hypotf(float, float); +export long double hypotl(long double, long double); +export int ilogb(double); +export int ilogbf(float); +export int ilogbl(long double); +export double j0(double); +export double j1(double); +export double jn(int, double); +export double ldexp(double, int); +export float ldexpf(float, int); +export long double ldexpl(long double, int); +export double lgamma(double); +export float lgammaf(float); +export long double lgammal(long double); +export long long llrint(double); +export long long llrintf(float); +export long long llrintl(long double); +export long long llround(double); +export long long llroundf(float); +export long long llroundl(long double); +export double log(double); +export double log10(double); +export float log10f(float); +export long double log10l(long double); +export double log1p(double); +export float log1pf(float); +export long double log1pl(long double); +export double log2(double); +export float log2f(float); +export long double log2l(long double); +export double logb(double); +export float logbf(float); +export long double logbl(long double); +export float logf(float); +export long double logl(long double); +export long lrint(double); +export long lrintf(float); +export long lrintl(long double); +export long lround(double); +export long lroundf(float); +export long lroundl(long double); +export double modf(double, double *); +export float modff(float, float *); +export long double modfl(long double, long double *); +export double nan(const char *); +export float nanf(const char *); +export long double nanl(const char *); +export double nearbyint(double); +export float nearbyintf(float); +export long double nearbyintl(long double); +export double nextafter(double, double); +export float nextafterf(float, float); +export long double nextafterl(long double, long double); +export double nexttoward(double, long double); +export float nexttowardf(float, long double); +export long double nexttowardl(long double, long double); +export double pow(double, double); +export float powf(float, float); +export long double powl(long double, long double); +export double remainder(double, double); +export float remainderf(float, float); +export long double remainderl(long double, long double); +export double remquo(double, double, int *); +export float remquof(float, float, int *); +export long double remquol(long double, long double, int *); +export double rint(double); +export float rintf(float); +export long double rintl(long double); +export double round(double); +export float roundf(float); +export long double roundl(long double); +export double scalb(double, double); +export double scalbln(double, long); +export float scalblnf(float, long); +export long double scalblnl(long double, long); +export double scalbn(double, int); +export float scalbnf(float, int); +export long double scalbnl(long double, int); +export double sin(double x); +export float sinf(float x); +export double sinh(double x); +export float sinhf(float x); +export long double sinhl(long double x); +export long double sinl(long double x); +export double sqrt(double); +export float sqrtf(float); +export long double sqrtl(long double); +export double tan(double); +export float tanf(float); +export double tanh(double); +export float tanhf(float); +export long double tanhl(long double); +export long double tanl(long double); +export double tgamma(double); +export float tgammaf(float); +export long double tgammal(long double); +export double trunc(double); +export float truncf(float); +export long double truncl(long double); +export double y0(double); +export double y1(double); +export double yn(int, double);