diff --git a/reactos/lib/sdk/crt/crt.rbuild b/reactos/lib/sdk/crt/crt.rbuild index bb78b1739bd..56c2e9491ef 100644 --- a/reactos/lib/sdk/crt/crt.rbuild +++ b/reactos/lib/sdk/crt/crt.rbuild @@ -104,6 +104,7 @@ atan2.c + ci.c exp.c fmod.c ldexp.c diff --git a/reactos/lib/sdk/crt/libcntpr.rbuild b/reactos/lib/sdk/crt/libcntpr.rbuild index 97d7d61175f..4884817f55a 100644 --- a/reactos/lib/sdk/crt/libcntpr.rbuild +++ b/reactos/lib/sdk/crt/libcntpr.rbuild @@ -41,6 +41,7 @@ aulldvrm_asm.s aullrem_asm.s aullshr_asm.s + ci.c ceil_asm.s cos_asm.s fabs_asm.s diff --git a/reactos/lib/sdk/crt/math/i386/ci.c b/reactos/lib/sdk/crt/math/i386/ci.c new file mode 100644 index 00000000000..b0a58eb2d5c --- /dev/null +++ b/reactos/lib/sdk/crt/math/i386/ci.c @@ -0,0 +1,137 @@ +#include +#include + +#define FPU_DOUBLE(var) double var; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) +#define FPU_DOUBLES(var1,var2) double var1,var2; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var2) : ); \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var1) : ) + +/* + * @implemented + */ +double CDECL _CIsin(void) +{ + FPU_DOUBLE(x); + return sin(x); +} +/* + * @implemented + */ +double CDECL _CIcos(void) +{ + FPU_DOUBLE(x); + return cos(x); +} +/* + * @implemented + */ +double CDECL _CItan(void) +{ + FPU_DOUBLE(x); + return tan(x); +} +/* + * @implemented + */ +double CDECL _CIsinh(void) +{ + FPU_DOUBLE(x); + return sinh(x); +} +/* + * @implemented + */ +double CDECL _CIcosh(void) +{ + FPU_DOUBLE(x); + return cosh(x); +} +/* + * @implemented + */ +double CDECL _CItanh(void) +{ + FPU_DOUBLE(x); + return tanh(x); +} +/* + * @implemented + */ +double CDECL _CIasin(void) +{ + FPU_DOUBLE(x); + return asin(x); +} +/* + * @implemented + */ +double CDECL _CIacos(void) +{ + FPU_DOUBLE(x); + return acos(x); +} +/* + * @implemented + */ +double CDECL _CIatan(void) +{ + FPU_DOUBLE(x); + return atan(x); +} +/* + * @implemented + */ +double CDECL _CIatan2(void) +{ + FPU_DOUBLES(x, y); + return atan2(x, y); +} +/* + * @implemented + */ +double CDECL _CIexp(void) +{ + FPU_DOUBLE(x); + return exp(x); +} +/* + * @implemented + */ +double CDECL _CIlog(void) +{ + FPU_DOUBLE(x); + return log(x); +} +/* + * @implemented + */ +double CDECL _CIlog10(void) +{ + FPU_DOUBLE(x); + return log10(x); +} +/* + * @implemented + */ +double CDECL _CIpow(void) +{ + FPU_DOUBLES(x, y); + return pow(x, y); +} +/* + * @implemented + */ +double CDECL _CIsqrt(void) +{ + FPU_DOUBLE(x); + return sqrt(x); +} +/* + * @implemented + */ +double CDECL _CIfmod(void) +{ + FPU_DOUBLES(x, y); + return fmod(x, y); +} diff --git a/reactos/lib/sdk/crt/math/stubs.c b/reactos/lib/sdk/crt/math/stubs.c index 58fac7113c0..271807fb9f5 100644 --- a/reactos/lib/sdk/crt/math/stubs.c +++ b/reactos/lib/sdk/crt/math/stubs.c @@ -1,138 +1,134 @@ #include #include -#define FPU_DOUBLE(var) double var; \ - __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) -#define FPU_DOUBLES(var1,var2) double var1,var2; \ - __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var2) : ); \ - __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var1) : ) +double CDECL _CIsin(double x); +double CDECL _CIcos(double x); +double CDECL _CItan(double x); +double CDECL _CIsinh(double x); +double CDECL _CIcosh(double x); +double CDECL _CItanh(double x); +double CDECL _CIasin(double x); +double CDECL _CIacos(double x); +double CDECL _CIatan(double x); +double CDECL _CIatan2(double y, double x); +double CDECL _CIexp(double x); +double CDECL _CIlog(double x); +double CDECL _CIlog10(double x); +double CDECL _CIpow(double x, double y); +double CDECL _CIsqrt(double x); +double CDECL _CIfmod(double x, double y); + /* * @implemented */ -double CDECL _CIsin(void) +double CDECL _CIsin(double x) { - FPU_DOUBLE(x); return sin(x); } /* * @implemented */ -double CDECL _CIcos(void) +double CDECL _CIcos(double x) { - FPU_DOUBLE(x); return cos(x); } /* * @implemented */ -double CDECL _CItan(void) +double CDECL _CItan(double x) { - FPU_DOUBLE(x); return tan(x); } /* * @implemented */ -double CDECL _CIsinh(void) +double CDECL _CIsinh(double x) { - FPU_DOUBLE(x); return sinh(x); } /* * @implemented */ -double CDECL _CIcosh(void) +double CDECL _CIcosh(double x) { - FPU_DOUBLE(x); return cosh(x); } /* * @implemented */ -double CDECL _CItanh(void) +double CDECL _CItanh(double x) { - FPU_DOUBLE(x); return tanh(x); } /* * @implemented */ -double CDECL _CIasin(void) +double CDECL _CIasin(double x) { - FPU_DOUBLE(x); return asin(x); } /* * @implemented */ -double CDECL _CIacos(void) +double CDECL _CIacos(double x) { - FPU_DOUBLE(x); return acos(x); } /* * @implemented */ -double CDECL _CIatan(void) +double CDECL _CIatan(double x) { - FPU_DOUBLE(x); return atan(x); } /* * @implemented */ -double CDECL _CIatan2(void) +double CDECL _CIatan2(double x, double y) { - FPU_DOUBLES(x, y); - return atan2(x, y); + return atan2(y, x); } /* * @implemented */ -double CDECL _CIexp(void) +double CDECL _CIexp(double x) { - FPU_DOUBLE(x); return exp(x); } /* * @implemented */ -double CDECL _CIlog(void) +double CDECL _CIlog(double x) { - FPU_DOUBLE(x); return log(x); } /* * @implemented */ -double CDECL _CIlog10(void) +double CDECL _CIlog10(double x) { - FPU_DOUBLE(x); return log10(x); } /* * @implemented */ -double CDECL _CIpow(void) +double CDECL _CIpow(double x, double y) { - FPU_DOUBLES(x, y); return pow(x, y); } /* * @implemented */ -double CDECL _CIsqrt(void) +double CDECL _CIsqrt(double x) { - FPU_DOUBLE(x); return sqrt(x); } /* * @implemented */ -double CDECL _CIfmod(void) +double CDECL _CIfmod(double x, double y) { - FPU_DOUBLES(x, y); return fmod(x, y); }