5252
5353WINE_DEFAULT_DEBUG_CHANNEL (msvcrt );
5454
55+ #ifdef _MSC_VER
56+ #pragma function(abs,labs,div,ldiv)
57+ #endif
58+
5559#undef div
5660#undef ldiv
5761
@@ -699,13 +703,19 @@ intmax_t CDECL imaxabs( intmax_t n )
699703/*********************************************************************
700704 * _abs64 (MSVCRT.@)
701705 */
706+ #ifdef _MSC_VER
707+ #pragma function(_abs64)
708+ #endif
702709__int64 CDECL _abs64 ( __int64 n )
703710{
704711 return n >= 0 ? n : - n ;
705712}
706713
707714#if defined(__i386__ ) || defined(__x86_64__ )
708-
715+ #ifdef _MSC_VER
716+ #define get_mxcsr () _mm_getcsr()
717+ #define set_mxcsr (val ) _mm_setcsr(val)
718+ #else
709719static unsigned int get_mxcsr (void )
710720{
711721 unsigned int ret ;
@@ -727,6 +737,7 @@ static void set_mxcsr( unsigned int val )
727737 __asm__ __volatile__( "ldmxcsr %0" : : "m" (val ) );
728738#endif
729739}
740+ #endif
730741
731742static void _setfp_sse ( unsigned int * cw , unsigned int cw_mask ,
732743 unsigned int * sw , unsigned int sw_mask )
@@ -826,7 +837,7 @@ static void _setfp_sse( unsigned int *cw, unsigned int cw_mask,
826837static void _setfp ( unsigned int * cw , unsigned int cw_mask ,
827838 unsigned int * sw , unsigned int sw_mask )
828839{
829- #if (defined(__GNUC__ ) || defined(__clang__ )) && defined(__i386__ )
840+ #if (defined(__GNUC__ ) || defined(__clang__ ) || defined( _MSC_VER ) ) && defined(__i386__ )
830841 unsigned long oldcw = 0 , newcw = 0 ;
831842 unsigned long oldsw = 0 , newsw = 0 ;
832843 unsigned int flags ;
@@ -836,7 +847,11 @@ static void _setfp( unsigned int *cw, unsigned int cw_mask,
836847
837848 if (sw )
838849 {
850+ #ifdef _MSC_VER
851+ __asm { fstsw newsw }
852+ #else
839853 __asm__ __volatile__( "fstsw %0" : "=m" (newsw ) );
854+ #endif
840855 oldsw = newsw ;
841856
842857 flags = 0 ;
@@ -861,7 +876,11 @@ static void _setfp( unsigned int *cw, unsigned int cw_mask,
861876
862877 if (cw )
863878 {
864- __asm__ __volatile__( "fstcw %0" : "=m" (newcw ) );
879+ #ifdef _MSC_VER
880+ __asm { fstcw newcw }
881+ #else
882+ __asm__ __volatile__( "fstcw %0" : "=m" (newcw ) );
883+ #endif
865884 oldcw = newcw ;
866885
867886 flags = 0 ;
@@ -928,18 +947,34 @@ static void _setfp( unsigned int *cw, unsigned int cw_mask,
928947
929948 assert (cw );
930949
950+ #ifdef _MSC_VER
951+ __asm { fnstenv fenv }
952+ #else
931953 __asm__ __volatile__( "fnstenv %0" : "=m" (fenv ) );
954+ #endif
932955 fenv .control_word = newcw ;
933956 fenv .status_word = newsw ;
957+ #ifdef _MSC_VER
958+ __asm { fldenv fenv }
959+ #else
934960 __asm__ __volatile__( "fldenv %0" : : "m" (fenv ) : "st" , "st(1)" ,
935961 "st(2)" , "st(3)" , "st(4)" , "st(5)" , "st(6)" , "st(7)" );
962+ #endif
936963 return ;
937964 }
938965
939966 if (oldsw != newsw )
967+ #ifdef _MSC_VER
968+ __asm { fnclex }
969+ #else
940970 __asm__ __volatile__( "fnclex" );
971+ #endif
941972 if (oldcw != newcw )
973+ #ifdef _MSC_VER
974+ __asm { fldcw newcw }
975+ #else
942976 __asm__ __volatile__( "fldcw %0" : : "m" (newcw ) );
977+ #endif
943978#elif defined(__x86_64__ )
944979 _setfp_sse (cw , cw_mask , sw , sw_mask );
945980#elif defined(__aarch64__ )
@@ -2012,6 +2047,7 @@ int CDECL _gcvt_s(char *buff, size_t size, double number, int digits)
20122047
20132048#include <stdlib.h> /* div_t, ldiv_t */
20142049
2050+ #ifndef __REACTOS__
20152051/*********************************************************************
20162052 * div (MSVCRT.@)
20172053 * VERSION
@@ -2078,6 +2114,7 @@ ldiv_t CDECL ldiv(__msvcrt_long num, __msvcrt_long denom)
20782114 return ret ;
20792115}
20802116#endif /* ifdef __i386__ */
2117+ #endif /* !__REACTOS__ */
20812118
20822119#if _MSVCR_VER >=100
20832120/*********************************************************************
@@ -2325,6 +2362,7 @@ void _safe_fprem1(void)
23252362 TRACE ("(): stub\n" );
23262363}
23272364
2365+ #ifndef __REACTOS__
23282366/***********************************************************************
23292367 * __libm_sse2_acos (MSVCRT.@)
23302368 */
@@ -2580,6 +2618,7 @@ void __cdecl __libm_sse2_sqrt_precise(void)
25802618 }
25812619 __asm__ __volatile__( "sqrtsd %xmm0, %xmm0" );
25822620}
2621+ #endif /* !__REACTOS__ */
25832622#endif /* __i386__ */
25842623
25852624#if _MSVCR_VER >=120
0 commit comments