summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Wagner <bungeman@chromium.org>2021-08-26 16:12:22 -0400
committerWerner Lemberg <wl@gnu.org>2021-08-27 09:20:26 +0200
commita842a0984b13b7a271d6b4693c96cd354a6b1b81 (patch)
tree3534f5827738ab2183b5f9e094919d171b0ebf3e
parent3785393d1a3c12fb1b4a3995cc0e953a58531cfe (diff)
downloadfreetype2-a842a0984b13b7a271d6b4693c96cd354a6b1b81.tar.gz
[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.
-rw-r--r--src/smooth/ftgrays.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index c550c3303..576dbb325 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -999,10 +999,17 @@ typedef ptrdiff_t FT_PtrDist;
*
* For other cases, using binary splits is actually slightly faster.
*/
-#if defined( __SSE2__ ) || \
- defined( __x86_64__ ) || \
+#if defined( __SSE2__ ) || \
+ 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( _M_AMD64 ) || \
defined( _M_ARM64 )
# define BEZIER_USE_DDA 1
#else
@@ -1022,7 +1029,7 @@ typedef ptrdiff_t FT_PtrDist;
#if BEZIER_USE_DDA
-#ifdef __SSE2__
+#if FT_SSE2
# include <emmintrin.h>
#endif
@@ -1135,7 +1142,7 @@ typedef ptrdiff_t FT_PtrDist;
* = (B << (33 - N)) + (A << (32 - 2*N))
*/
-#ifdef __SSE2__
+#if FT_SSE2
/* Experience shows that for small shift values, */
/* SSE2 is actually slower. */
if ( shift > 2 )
@@ -1192,7 +1199,7 @@ typedef ptrdiff_t FT_PtrDist;
return;
}
-#endif /* __SSE2__ */
+#endif /* FT_SSE2 */
rx = LEFT_SHIFT( ax, 33 - 2 * shift );
ry = LEFT_SHIFT( ay, 33 - 2 * shift );