diff --git a/include/mbedtls/build_info.h b/include/mbedtls/build_info.h index 842f15c58f..cb2cda76d1 100644 --- a/include/mbedtls/build_info.h +++ b/include/mbedtls/build_info.h @@ -74,6 +74,10 @@ #define MBEDTLS_ARCH_IS_X86 #endif +#if defined(_M_ARM64) || defined(_M_ARM64EC) +#define MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64 +#endif + #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) #define _CRT_SECURE_NO_DEPRECATE 1 #endif diff --git a/library/alignment.h b/library/alignment.h index ff811e34d5..d8c4fb384b 100644 --- a/library/alignment.h +++ b/library/alignment.h @@ -36,7 +36,7 @@ */ #if defined(__ARM_FEATURE_UNALIGNED) \ || defined(MBEDTLS_ARCH_IS_X86) || defined(MBEDTLS_ARCH_IS_X64) \ - || defined(_M_ARM64) || defined(_M_ARM64EC) + || defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) /* * __ARM_FEATURE_UNALIGNED is defined where appropriate by armcc, gcc 7, clang 9 * (and later versions) for Arm v7 and later; all x86 platforms should have diff --git a/library/bignum.c b/library/bignum.c index 7c265e04da..795952ccd0 100644 --- a/library/bignum.c +++ b/library/bignum.c @@ -114,7 +114,8 @@ int mbedtls_mpi_lt_mpi_ct(const mbedtls_mpi *X, * about whether the assignment was made or not. * (Leaking information about the respective sizes of X and Y is ok however.) */ -#if defined(_MSC_VER) && defined(_M_ARM64) && (_MSC_FULL_VER < 193131103) +#if defined(_MSC_VER) && defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) && \ + (_MSC_FULL_VER < 193131103) /* * MSVC miscompiles this function if it's inlined prior to Visual Studio 2022 version 17.1. See: * https://developercommunity.visualstudio.com/t/c-compiler-miscompiles-part-of-mbedtls-library-on/1646989 diff --git a/library/common.h b/library/common.h index 6c65084f46..48fb6d0d73 100644 --- a/library/common.h +++ b/library/common.h @@ -34,9 +34,7 @@ #if defined(__ARM_NEON) #include #define MBEDTLS_HAVE_NEON_INTRINSICS -#endif /* __ARM_NEON */ - -#if defined(_M_ARM64) || defined(_M_ARM64EC) +#elif defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) #include #define MBEDTLS_HAVE_NEON_INTRINSICS #endif diff --git a/library/sha256.c b/library/sha256.c index da6ec180cd..ed47c7c510 100644 --- a/library/sha256.c +++ b/library/sha256.c @@ -108,7 +108,7 @@ # include # endif # endif -#elif !(defined(_M_ARM64) || defined(_M_ARM64EC)) +#elif !defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) # undef MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY # undef MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT #endif @@ -128,7 +128,7 @@ static int mbedtls_a64_crypto_sha256_determine_support(void) { return 1; } -#elif defined(_M_ARM64) || defined(_M_ARM64EC) +#elif defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) #define WIN32_LEAN_AND_MEAN #include #include diff --git a/library/sha512.c b/library/sha512.c index 0e99914dda..05b89408f8 100644 --- a/library/sha512.c +++ b/library/sha512.c @@ -119,12 +119,7 @@ # include # endif # endif -#elif defined(_M_ARM64) -# if defined(MBEDTLS_SHA512_USE_A64_CRYPTO_IF_PRESENT) || \ - defined(MBEDTLS_SHA512_USE_A64_CRYPTO_ONLY) -# include -# endif -#else +#elif !defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) # undef MBEDTLS_SHA512_USE_A64_CRYPTO_ONLY # undef MBEDTLS_SHA512_USE_A64_CRYPTO_IF_PRESENT #endif @@ -152,7 +147,7 @@ static int mbedtls_a64_crypto_sha512_determine_support(void) NULL, 0); return ret == 0 && value != 0; } -#elif defined(_M_ARM64) || defined(_M_ARM64EC) +#elif defined(MBEDTLS_PLATFORM_IS_WINDOWS_ON_ARM64) /* * As of March 2022, there don't appear to be any PF_ARM_V8_* flags * available to pass to IsProcessorFeaturePresent() to check for