Index: dll/ntdll/def/ntdll.spec =================================================================== --- dll/ntdll/def/ntdll.spec (revision 56958) +++ dll/ntdll/def/ntdll.spec (working copy) @@ -1292,11 +1292,11 @@ @ stdcall ZwWriteRequestData(ptr ptr long ptr long ptr) @ stdcall ZwWriteVirtualMemory(long ptr ptr long ptr) @ stdcall ZwYieldExecution() -;@ cdecl _CIcos -;@ cdecl _CIlog -;@ cdecl -private -arch=i386 _CIpow() -;@ cdecl _CIsin -;@ cdecl _CIsqrt +@ cdecl -arch=i386 _CIcos() +@ cdecl -arch=i386 _CIlog() +@ cdecl -arch=i386 _CIpow() +@ cdecl -arch=i386 _CIsin() +@ cdecl -arch=i386 _CIsqrt() @ cdecl -arch=x86_64 __C_specific_handler(ptr long ptr ptr) @ cdecl __isascii(long) @ cdecl __iscsym(long) Index: lib/sdk/crt/libcntpr.cmake =================================================================== --- lib/sdk/crt/libcntpr.cmake (revision 56958) +++ lib/sdk/crt/libcntpr.cmake (working copy) @@ -94,6 +94,11 @@ math/i386/sqrt_asm.s math/i386/tan_asm.s math/i386/ci.c + math/i386/cicos.c + math/i386/cilog.c + math/i386/cipow.c + math/i386/cisin.c + math/i386/cisqrt.c misc/i386/readcr4.S) if(NOT MSVC) list(APPEND LIBCNTPR_SOURCE except/i386/chkstk_ms.s) Index: lib/sdk/crt/math/i386/ci.c =================================================================== --- lib/sdk/crt/math/i386/ci.c (revision 56958) +++ lib/sdk/crt/math/i386/ci.c (working copy) @@ -15,25 +15,10 @@ __asm { fstp [var2] }; __asm { fwait }; #endif + /* * @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); @@ -106,14 +91,6 @@ /* * @implemented */ -double CDECL _CIlog(void) -{ - FPU_DOUBLE(x); - return log(x); -} -/* - * @implemented - */ double CDECL _CIlog10(void) { FPU_DOUBLE(x); @@ -122,22 +99,6 @@ /* * @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); Index: lib/sdk/crt/math/i386/cicos.c =================================================================== --- lib/sdk/crt/math/i386/cicos.c (revision 0) +++ lib/sdk/crt/math/i386/cicos.c (working copy) @@ -0,0 +1,19 @@ +#include +#include + +#if defined(__GNUC__) +#define FPU_DOUBLE(var) double var; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) +#elif defined(_MSC_VER) +#define FPU_DOUBLE(var) double var; \ + __asm { fstp [var] }; __asm { fwait }; +#endif + +/* + * @implemented + */ +double CDECL _CIcos(void) +{ + FPU_DOUBLE(x); + return cos(x); +} Index: lib/sdk/crt/math/i386/cilog.c =================================================================== --- lib/sdk/crt/math/i386/cilog.c (revision 0) +++ lib/sdk/crt/math/i386/cilog.c (working copy) @@ -0,0 +1,19 @@ +#include +#include + +#if defined(__GNUC__) +#define FPU_DOUBLE(var) double var; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) +#elif defined(_MSC_VER) +#define FPU_DOUBLE(var) double var; \ + __asm { fstp [var] }; __asm { fwait }; +#endif + +/* + * @implemented + */ +double CDECL _CIlog(void) +{ + FPU_DOUBLE(x); + return log(x); +} Index: lib/sdk/crt/math/i386/cipow.c =================================================================== --- lib/sdk/crt/math/i386/cipow.c (revision 0) +++ lib/sdk/crt/math/i386/cipow.c (working copy) @@ -0,0 +1,21 @@ +#include +#include + +#if defined(__GNUC__) +#define FPU_DOUBLES(var1,var2) double var1,var2; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var2) : ); \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var1) : ) +#elif defined(_MSC_VER) +#define FPU_DOUBLES(var1,var2) double var1,var2; \ + __asm { fstp [var1] }; __asm { fwait }; \ + __asm { fstp [var2] }; __asm { fwait }; +#endif + +/* + * @implemented + */ +double CDECL _CIpow(void) +{ + FPU_DOUBLES(x, y); + return pow(x, y); +} Index: lib/sdk/crt/math/i386/cisin.c =================================================================== --- lib/sdk/crt/math/i386/cisin.c (revision 0) +++ lib/sdk/crt/math/i386/cisin.c (working copy) @@ -0,0 +1,19 @@ +#include +#include + +#if defined(__GNUC__) +#define FPU_DOUBLE(var) double var; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) +#elif defined(_MSC_VER) +#define FPU_DOUBLE(var) double var; \ + __asm { fstp [var] }; __asm { fwait }; +#endif + +/* + * @implemented + */ +double CDECL _CIsin(void) +{ + FPU_DOUBLE(x); + return sin(x); +} Index: lib/sdk/crt/math/i386/cisqrt.c =================================================================== --- lib/sdk/crt/math/i386/cisqrt.c (revision 0) +++ lib/sdk/crt/math/i386/cisqrt.c (working copy) @@ -0,0 +1,20 @@ +#include +#include + +#if defined(__GNUC__) +#define FPU_DOUBLE(var) double var; \ + __asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : ) +#elif defined(_MSC_VER) +#define FPU_DOUBLE(var) double var; \ + __asm { fstp [var] }; __asm { fwait }; +#endif + +/* + * @implemented + */ +double CDECL _CIsqrt(void) +{ + FPU_DOUBLE(x); + return sqrt(x); +} + Index: lib/sdk/crt/msvcrtex.cmake =================================================================== --- lib/sdk/crt/msvcrtex.cmake (revision 56958) +++ lib/sdk/crt/msvcrtex.cmake (working copy) @@ -50,6 +50,11 @@ except/i386/chkstk_asm.s except/i386/chkstk_ms.s math/i386/ci.c + math/i386/cicos.c + math/i386/cilog.c + math/i386/cipow.c + math/i386/cisin.c + math/i386/cisqrt.c math/i386/ftol2_asm.s math/i386/alldiv_asm.s) elseif(ARCH MATCHES amd64)