package An official xmake package repository
https://xrepo.xmake.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.9 KiB
69 lines
1.9 KiB
1 year ago
|
diff --git a/library/aesni.c b/library/aesni.c
|
||
|
index 59bcd3d92..b92c73c29 100644
|
||
|
--- a/library/aesni.c
|
||
|
+++ b/library/aesni.c
|
||
|
@@ -21,14 +21,27 @@
|
||
|
#if defined(MBEDTLS_AESNI_HAVE_CODE)
|
||
|
|
||
|
#if MBEDTLS_AESNI_HAVE_CODE == 2
|
||
|
-#if !defined(_WIN32)
|
||
|
+#if defined(__GNUC__)
|
||
|
#include <cpuid.h>
|
||
|
-#else
|
||
|
+#elif defined(_MSC_VER)
|
||
|
#include <intrin.h>
|
||
|
+#else
|
||
|
+#error "`__cpuid` required by MBEDTLS_AESNI_C is not supported by the compiler"
|
||
|
#endif
|
||
|
#include <immintrin.h>
|
||
|
#endif
|
||
|
|
||
|
+#if defined(MBEDTLS_ARCH_IS_X86)
|
||
|
+#if defined(MBEDTLS_COMPILER_IS_GCC)
|
||
|
+#pragma GCC push_options
|
||
|
+#pragma GCC target ("pclmul,sse2,aes")
|
||
|
+#define MBEDTLS_POP_TARGET_PRAGMA
|
||
|
+#elif defined(__clang__)
|
||
|
+#pragma clang attribute push (__attribute__((target("pclmul,sse2,aes"))), apply_to=function)
|
||
|
+#define MBEDTLS_POP_TARGET_PRAGMA
|
||
|
+#endif
|
||
|
+#endif
|
||
|
+
|
||
|
#if !defined(MBEDTLS_AES_USE_HARDWARE_ONLY)
|
||
|
/*
|
||
|
* AES-NI support detection routine
|
||
|
@@ -40,7 +53,7 @@ int mbedtls_aesni_has_support(unsigned int what)
|
||
|
|
||
|
if (!done) {
|
||
|
#if MBEDTLS_AESNI_HAVE_CODE == 2
|
||
|
- static unsigned info[4] = { 0, 0, 0, 0 };
|
||
|
+ static int info[4] = { 0, 0, 0, 0 };
|
||
|
#if defined(_MSC_VER)
|
||
|
__cpuid(info, 1);
|
||
|
#else
|
||
|
@@ -175,7 +188,7 @@ void mbedtls_aesni_gcm_mult(unsigned char c[16],
|
||
|
const unsigned char a[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 */
|
||
|
for (size_t i = 0; i < 16; i++) {
|
||
|
@@ -384,6 +397,15 @@ static void aesni_setkey_enc_256(unsigned char *rk_bytes,
|
||
|
}
|
||
|
#endif /* !MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH */
|
||
|
|
||
|
+#if defined(MBEDTLS_POP_TARGET_PRAGMA)
|
||
|
+#if defined(__clang__)
|
||
|
+#pragma clang attribute pop
|
||
|
+#elif defined(__GNUC__)
|
||
|
+#pragma GCC pop_options
|
||
|
+#endif
|
||
|
+#undef MBEDTLS_POP_TARGET_PRAGMA
|
||
|
+#endif
|
||
|
+
|
||
|
#else /* MBEDTLS_AESNI_HAVE_CODE == 1 */
|
||
|
|
||
|
#if defined(__has_feature)
|