Enable SSE2 intrinsics on MSVC MSVC uses different defines than everyone else for SSE2 Change-Id: I3402b5cc1d06cf5be096b0fcc8c87426d77d361c Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/65876 Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Bob Beck <bbe@google.com> Commit-Queue: Bob Beck <bbe@google.com>
diff --git a/crypto/internal.h b/crypto/internal.h index 25cb106..eaa52c4 100644 --- a/crypto/internal.h +++ b/crypto/internal.h
@@ -235,12 +235,20 @@ #define OPENSSL_FALLTHROUGH #endif +// GCC-like compilers indicate SSE2 with |__SSE2__|. MSVC leaves the caller to +// know that x86_64 has SSE2, and uses _M_IX86_FP to indicate SSE2 on x86. +// https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-170 +#if defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || \ + (defined(_M_IX86_FP) && _M_IX86_FP >= 2) +#define OPENSSL_SSE2 +#endif + // For convenience in testing 64-bit generic code, we allow disabling SSE2 // intrinsics via |OPENSSL_NO_SSE2_FOR_TESTING|. x86_64 always has SSE2 // available, so we would otherwise need to test such code on a non-x86_64 // platform. -#if defined(__SSE2__) && !defined(OPENSSL_NO_SSE2_FOR_TESTING) -#define OPENSSL_SSE2 +#if defined(OPENSSL_SSE2) && defined(OPENSSL_NO_SSE2_FOR_TESTING) +#undef OPENSSL_SSE2 #endif #if defined(__GNUC__) || defined(__clang__)