From f3417b4646589941fb29b59f774b9f161ec6990f Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Tue, 24 Jul 2012 16:45:50 +0000 Subject: [PATCH] [CRT][NTDLL] - Separate some _CI* functions into their own files and export them from ntdll. Patch by Vincenzo Cotugno. See issue #7085 for more details. svn path=/trunk/; revision=56961 --- reactos/dll/ntdll/def/ntdll.spec | 10 ++-- reactos/lib/sdk/crt/crt.cmake | 9 +++- reactos/lib/sdk/crt/include/internal/math.h | 14 ++++++ reactos/lib/sdk/crt/libcntpr.cmake | 5 ++ reactos/lib/sdk/crt/math/i386/ci.c | 55 --------------------- reactos/lib/sdk/crt/math/i386/cicos.c | 10 ++++ reactos/lib/sdk/crt/math/i386/cilog.c | 10 ++++ reactos/lib/sdk/crt/math/i386/cipow.c | 10 ++++ reactos/lib/sdk/crt/math/i386/cisin.c | 10 ++++ reactos/lib/sdk/crt/math/i386/cisqrt.c | 10 ++++ reactos/lib/sdk/crt/msvcrtex.cmake | 5 ++ 11 files changed, 86 insertions(+), 62 deletions(-) create mode 100644 reactos/lib/sdk/crt/math/i386/cicos.c create mode 100644 reactos/lib/sdk/crt/math/i386/cilog.c create mode 100644 reactos/lib/sdk/crt/math/i386/cipow.c create mode 100644 reactos/lib/sdk/crt/math/i386/cisin.c create mode 100644 reactos/lib/sdk/crt/math/i386/cisqrt.c diff --git a/reactos/dll/ntdll/def/ntdll.spec b/reactos/dll/ntdll/def/ntdll.spec index 17012b605fc..30210bb3068 100644 --- a/reactos/dll/ntdll/def/ntdll.spec +++ b/reactos/dll/ntdll/def/ntdll.spec @@ -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) diff --git a/reactos/lib/sdk/crt/crt.cmake b/reactos/lib/sdk/crt/crt.cmake index 5024bc8c1c8..6abd6fe87d2 100644 --- a/reactos/lib/sdk/crt/crt.cmake +++ b/reactos/lib/sdk/crt/crt.cmake @@ -131,11 +131,11 @@ list(APPEND CRT_SOURCE misc/stubs.c misc/tls.c printf/_cprintf.c - printf/_cwprintf.c + printf/_cwprintf.c printf/_snprintf.c printf/_snwprintf.c printf/_vcprintf.c - printf/_vcwprintf.c + printf/_vcwprintf.c printf/_vscprintf.c printf/_vscwprintf.c printf/_vsnprintf.c @@ -377,6 +377,11 @@ if(ARCH MATCHES i386) math/i386/tan_asm.s math/i386/atan2_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 math/i386/exp_asm.s math/i386/fmod_asm.s math/i386/fmodf_asm.s diff --git a/reactos/lib/sdk/crt/include/internal/math.h b/reactos/lib/sdk/crt/include/internal/math.h index 7f743072737..a1bbfebd76a 100644 --- a/reactos/lib/sdk/crt/include/internal/math.h +++ b/reactos/lib/sdk/crt/include/internal/math.h @@ -9,4 +9,18 @@ int _isinf (double); /* not exported */ int _isnanl (long double); /* not exported */ int _isinfl (long double); /* not exported */ +#if defined(__GNUC__) +#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) : ) +#elif defined(_MSC_VER) +#define FPU_DOUBLE(var) double var; \ + __asm { fstp [var] }; __asm { fwait }; +#define FPU_DOUBLES(var1,var2) double var1,var2; \ + __asm { fstp [var1] }; __asm { fwait }; \ + __asm { fstp [var2] }; __asm { fwait }; +#endif + #endif diff --git a/reactos/lib/sdk/crt/libcntpr.cmake b/reactos/lib/sdk/crt/libcntpr.cmake index 5c514147b07..7ff88127485 100644 --- a/reactos/lib/sdk/crt/libcntpr.cmake +++ b/reactos/lib/sdk/crt/libcntpr.cmake @@ -94,6 +94,11 @@ if(ARCH MATCHES i386) 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) diff --git a/reactos/lib/sdk/crt/math/i386/ci.c b/reactos/lib/sdk/crt/math/i386/ci.c index 0aeb0d1379c..8b195d1e28d 100644 --- a/reactos/lib/sdk/crt/math/i386/ci.c +++ b/reactos/lib/sdk/crt/math/i386/ci.c @@ -1,36 +1,5 @@ #include -#include -#if defined(__GNUC__) -#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) : ) -#elif defined(_MSC_VER) -#define FPU_DOUBLE(var) double var; \ - __asm { fstp [var] }; __asm { fwait }; -#define FPU_DOUBLES(var1,var2) double var1,var2; \ - __asm { fstp [var1] }; __asm { fwait }; \ - __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 */ @@ -103,14 +72,6 @@ double CDECL _CIexp(void) FPU_DOUBLE(x); return exp(x); } -/* - * @implemented - */ -double CDECL _CIlog(void) -{ - FPU_DOUBLE(x); - return log(x); -} /* * @implemented */ @@ -119,22 +80,6 @@ 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 */ diff --git a/reactos/lib/sdk/crt/math/i386/cicos.c b/reactos/lib/sdk/crt/math/i386/cicos.c new file mode 100644 index 00000000000..fe5d0006f85 --- /dev/null +++ b/reactos/lib/sdk/crt/math/i386/cicos.c @@ -0,0 +1,10 @@ +#include + +/* + * @implemented + */ +double CDECL _CIcos(void) +{ + FPU_DOUBLE(x); + return cos(x); +} diff --git a/reactos/lib/sdk/crt/math/i386/cilog.c b/reactos/lib/sdk/crt/math/i386/cilog.c new file mode 100644 index 00000000000..26a552acecb --- /dev/null +++ b/reactos/lib/sdk/crt/math/i386/cilog.c @@ -0,0 +1,10 @@ +#include + +/* + * @implemented + */ +double CDECL _CIlog(void) +{ + FPU_DOUBLE(x); + return log(x); +} diff --git a/reactos/lib/sdk/crt/math/i386/cipow.c b/reactos/lib/sdk/crt/math/i386/cipow.c new file mode 100644 index 00000000000..2626f005102 --- /dev/null +++ b/reactos/lib/sdk/crt/math/i386/cipow.c @@ -0,0 +1,10 @@ +#include + +/* + * @implemented + */ +double CDECL _CIpow(void) +{ + FPU_DOUBLES(x, y); + return pow(x, y); +} diff --git a/reactos/lib/sdk/crt/math/i386/cisin.c b/reactos/lib/sdk/crt/math/i386/cisin.c new file mode 100644 index 00000000000..7b8f14563d4 --- /dev/null +++ b/reactos/lib/sdk/crt/math/i386/cisin.c @@ -0,0 +1,10 @@ +#include + +/* + * @implemented + */ +double CDECL _CIsin(void) +{ + FPU_DOUBLE(x); + return sin(x); +} diff --git a/reactos/lib/sdk/crt/math/i386/cisqrt.c b/reactos/lib/sdk/crt/math/i386/cisqrt.c new file mode 100644 index 00000000000..f5515fb971a --- /dev/null +++ b/reactos/lib/sdk/crt/math/i386/cisqrt.c @@ -0,0 +1,10 @@ +#include + +/* + * @implemented + */ +double CDECL _CIsqrt(void) +{ + FPU_DOUBLE(x); + return sqrt(x); +} diff --git a/reactos/lib/sdk/crt/msvcrtex.cmake b/reactos/lib/sdk/crt/msvcrtex.cmake index 60f92066423..68036f5dbaf 100644 --- a/reactos/lib/sdk/crt/msvcrtex.cmake +++ b/reactos/lib/sdk/crt/msvcrtex.cmake @@ -50,6 +50,11 @@ if(ARCH MATCHES i386) 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)