[smooth] Detect SSE2 with MSVC for x86

MSVC does not set `__SSE2__`. Instead one must check whether `_M_IX86_FP` is
defined and greater than or equal to 2.

* src/smooth/ftgrays.c (FT_SSE2): New macro.
Use it where appropriate.
This commit is contained in:
Ben Wagner 2021-08-26 16:12:22 -04:00 committed by Werner Lemberg
parent 3785393d1a
commit a842a0984b
1 changed files with 13 additions and 6 deletions

View File

@ -999,10 +999,17 @@ typedef ptrdiff_t FT_PtrDist;
* *
* For other cases, using binary splits is actually slightly faster. * For other cases, using binary splits is actually slightly faster.
*/ */
#if defined( __SSE2__ ) || \ #if defined( __SSE2__ ) || \
defined( __x86_64__ ) || \ defined( __x86_64__ ) || \
defined( _M_AMD64 ) || \
( defined( _M_IX86_FP ) && _M_IX86_FP >= 2 )
# define FT_SSE2 1
#else
# define FT_SSE2 0
#endif
#if FT_SSE2 || \
defined( __aarch64__ ) || \ defined( __aarch64__ ) || \
defined( _M_AMD64 ) || \
defined( _M_ARM64 ) defined( _M_ARM64 )
# define BEZIER_USE_DDA 1 # define BEZIER_USE_DDA 1
#else #else
@ -1022,7 +1029,7 @@ typedef ptrdiff_t FT_PtrDist;
#if BEZIER_USE_DDA #if BEZIER_USE_DDA
#ifdef __SSE2__ #if FT_SSE2
# include <emmintrin.h> # include <emmintrin.h>
#endif #endif
@ -1135,7 +1142,7 @@ typedef ptrdiff_t FT_PtrDist;
* = (B << (33 - N)) + (A << (32 - 2*N)) * = (B << (33 - N)) + (A << (32 - 2*N))
*/ */
#ifdef __SSE2__ #if FT_SSE2
/* Experience shows that for small shift values, */ /* Experience shows that for small shift values, */
/* SSE2 is actually slower. */ /* SSE2 is actually slower. */
if ( shift > 2 ) if ( shift > 2 )
@ -1192,7 +1199,7 @@ typedef ptrdiff_t FT_PtrDist;
return; return;
} }
#endif /* __SSE2__ */ #endif /* FT_SSE2 */
rx = LEFT_SHIFT( ax, 33 - 2 * shift ); rx = LEFT_SHIFT( ax, 33 - 2 * shift );
ry = LEFT_SHIFT( ay, 33 - 2 * shift ); ry = LEFT_SHIFT( ay, 33 - 2 * shift );