diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index ba588f9f56b..9b3ebe87766 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1394,7 +1394,7 @@ @ cdecl -arch=i386 _libm_sse2_log_precise() msvcrt.__libm_sse2_log @ cdecl -arch=i386 _libm_sse2_pow_precise() msvcrt.__libm_sse2_pow @ cdecl -arch=i386 _libm_sse2_sin_precise() msvcrt.__libm_sse2_sin -@ stub -arch=i386 _libm_sse2_sqrt_precise +@ cdecl -arch=i386 _libm_sse2_sqrt_precise() msvcrt.__libm_sse2_sqrt_precise @ cdecl -arch=i386 _libm_sse2_tan_precise() msvcrt.__libm_sse2_tan @ cdecl _loaddll(str) msvcrt._loaddll @ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 6bcc2b7db4f..6af8776797e 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -2185,4 +2185,13 @@ void __cdecl __libm_sse2_tanf(void) __asm__ __volatile__( "movd %0,%%xmm0" : : "g" (f) ); } +/* __libm_sse2_sqrt_precise */ +void __cdecl __libm_sse2_sqrt_precise(void) +{ + double d; + __asm__ __volatile__( "movd %%xmm0,%0" : "=m" (d) ); + d = sqrt( d ); + __asm__ __volatile__( "movd %0,%%xmm0" : : "m" (d) ); +} + #endif /* __i386__ */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index e4827843413..fa458a4b49b 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1538,3 +1538,4 @@ @ cdecl _fstat32(long ptr) @ cdecl _fstat64i32(long ptr) @ cdecl _is_exception_typeof(ptr ptr) +@ cdecl -arch=i386 __libm_sse2_sqrt_precise()