1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-07-30 22:43:08 +03:00

Merge pull request #8373 from sergio-nsk/sergio-nsk/8372/1

Backport 2.28: Fix compiling AESNI in Mbed-TLS with clang on Windows
This commit is contained in:
Bence Szépkúti
2023-10-26 15:59:05 +00:00
committed by GitHub
3 changed files with 6 additions and 3 deletions

3
ChangeLog.d/8372.txt Normal file
View File

@ -0,0 +1,3 @@
Features
* AES-NI is now supported in Windows builds with clang and clang-cl.
Resolves #8372.

View File

@ -58,7 +58,7 @@
* macros that may change in future releases. * macros that may change in future releases.
*/ */
#undef MBEDTLS_AESNI_HAVE_INTRINSICS #undef MBEDTLS_AESNI_HAVE_INTRINSICS
#if defined(_MSC_VER) #if defined(_MSC_VER) && !defined(__clang__)
/* Visual Studio supports AESNI intrinsics since VS 2008 SP1. We only support /* Visual Studio supports AESNI intrinsics since VS 2008 SP1. We only support
* VS 2013 and up for other reasons anyway, so no need to check the version. */ * VS 2013 and up for other reasons anyway, so no need to check the version. */
#define MBEDTLS_AESNI_HAVE_INTRINSICS #define MBEDTLS_AESNI_HAVE_INTRINSICS
@ -66,7 +66,7 @@
/* GCC-like compilers: currently, we only support intrinsics if the requisite /* GCC-like compilers: currently, we only support intrinsics if the requisite
* target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2` * target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2`
* or `clang -maes -mpclmul`). */ * or `clang -maes -mpclmul`). */
#if defined(__GNUC__) && defined(__AES__) && defined(__PCLMUL__) #if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__)
#define MBEDTLS_AESNI_HAVE_INTRINSICS #define MBEDTLS_AESNI_HAVE_INTRINSICS
#endif #endif

View File

@ -193,7 +193,7 @@ void mbedtls_aesni_gcm_mult(unsigned char c[16],
const unsigned char a[16], const unsigned char a[16],
const unsigned char b[16]) const unsigned char b[16])
{ {
__m128i aa, bb, cc, dd; __m128i aa = { 0 }, bb = { 0 }, cc, dd;
/* The inputs are in big-endian order, so byte-reverse them */ /* The inputs are in big-endian order, so byte-reverse them */
for (size_t i = 0; i < 16; i++) { for (size_t i = 0; i < 16; i++) {