summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <[email protected]>2024-09-13 13:16:32 +0200
committerAllan Sandfeld Jensen <[email protected]>2024-09-17 15:47:43 +0200
commitbbdd20da04dd9d7a9a3250aef005e4549999a312 (patch)
tree5062729d98337cb4d33f74aa94f5030d786f2424
parentaac83724013a1f226d2bf4b923447eb1b0e5c493 (diff)
Fix compile-time CRYPTO detection, and detection on MSVC ARM64
We had a mismatch of the naming of the Qt and compiler defines. Matched the qt defines to the compiler define, and added detection support for MSVC (ARM64). Pick-to: 6.8 Change-Id: I9abfbe8a96bc8c800e86dac3ab9a7abf9c1f7f9f Reviewed-by: Thiago Macieira <[email protected]> Reviewed-by: Oliver Wolff <[email protected]>
-rw-r--r--config.tests/arch/arch.cpp4
-rw-r--r--configure.cmake1
-rw-r--r--src/corelib/global/qsimd_p.h8
-rw-r--r--src/corelib/tools/qhash.cpp4
4 files changed, 11 insertions, 6 deletions
diff --git a/config.tests/arch/arch.cpp b/config.tests/arch/arch.cpp
index 334e48f30d3..ad9ef34039c 100644
--- a/config.tests/arch/arch.cpp
+++ b/config.tests/arch/arch.cpp
@@ -245,10 +245,10 @@ const char msg2[] = "==Qt=magic=Qt== Sub-architecture:"
#ifdef __IWMMXT__
" iwmmxt"
#endif
-#ifdef __ARM_FEATURE_CRC32
+#if defined(__ARM_FEATURE_CRC32) || (defined(_M_ARM64) && __ARM_ARCH >= 800)
" crc32"
#endif
-#ifdef __ARM_FEATURE_CRYPTO
+#if defined(__ARM_FEATURE_CRYPTO) || (defined(_M_ARM64) && __ARM_ARCH >= 800)
" crypto"
#endif
diff --git a/configure.cmake b/configure.cmake
index d752b564ee1..0c77640598f 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -925,6 +925,7 @@ qt_feature("arm_crypto" PRIVATE
LABEL "AES"
CONDITION ( ( TEST_architecture_arch STREQUAL arm ) OR ( TEST_architecture_arch STREQUAL arm64 ) ) AND TEST_arch_${TEST_architecture_arch}_subarch_crypto
)
+qt_feature_definition("arm_crypto" "QT_COMPILER_SUPPORTS_CRYPTO" VALUE "1")
qt_feature_definition("arm_crypto" "QT_COMPILER_SUPPORTS_AES" VALUE "1")
qt_feature_config("arm_crypto" QMAKE_PRIVATE_CONFIG)
diff --git a/src/corelib/global/qsimd_p.h b/src/corelib/global/qsimd_p.h
index a5dc6487c3b..b613e04985e 100644
--- a/src/corelib/global/qsimd_p.h
+++ b/src/corelib/global/qsimd_p.h
@@ -338,8 +338,9 @@ inline uint32x4_t qvsetq_n_u32(uint32_t a, uint32_t b, uint32_t c, uint32_t d)
}
#endif
-#if defined(Q_PROCESSOR_ARM) && defined(__ARM_FEATURE_CRC32)
-# include <arm_acle.h>
+#if defined(_M_ARM64) && __ARM_ARCH >= 800
+#define __ARM_FEATURE_CRYPTO 1
+#define __ARM_FEATURE_CRC32 1
#endif
#if defined(Q_PROCESSOR_ARM_64)
@@ -349,6 +350,9 @@ inline uint32x4_t qvsetq_n_u32(uint32_t a, uint32_t b, uint32_t c, uint32_t d)
#elif defined(Q_CC_GNU)
#define QT_FUNCTION_TARGET_STRING_AES "+crypto"
#define QT_FUNCTION_TARGET_STRING_CRC32 "+crc"
+#elif defined(Q_CC_MSVC)
+#define QT_FUNCTION_TARGET_STRING_AES
+#define QT_FUNCTION_TARGET_STRING_CRC32
#endif
#elif defined(Q_PROCESSOR_ARM_32)
#if defined(Q_CC_CLANG)
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index 9456c423e2a..6db4314b5ca 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -715,7 +715,7 @@ static size_t aeshash(const uchar *p, size_t len, size_t seed, size_t seed2) noe
}
#endif // x86 AESNI
-#if defined(Q_PROCESSOR_ARM) && QT_COMPILER_SUPPORTS_HERE(AES) && !defined(QHASH_AES_SANITIZER_BUILD) && !defined(QT_BOOTSTRAPPED)
+#if defined(Q_PROCESSOR_ARM) && QT_COMPILER_SUPPORTS_HERE(CRYPTO) && !defined(QHASH_AES_SANITIZER_BUILD) && !defined(QT_BOOTSTRAPPED)
QT_FUNCTION_TARGET(AES)
static size_t aeshash(const uchar *p, size_t len, size_t seed, size_t seed2) noexcept
{
@@ -864,7 +864,7 @@ size_t qHashBits(const void *p, size_t size, size_t seed) noexcept
#ifdef AESHASH
if (seed && qCpuHasFeature(AES) && qCpuHasFeature(SSE4_2))
return aeshash(data, size, seed, seed2);
-#elif defined(Q_PROCESSOR_ARM) && QT_COMPILER_SUPPORTS_HERE(AES) && !defined(QHASH_AES_SANITIZER_BUILD) && !defined(QT_BOOTSTRAPPED)
+#elif defined(Q_PROCESSOR_ARM) && QT_COMPILER_SUPPORTS_HERE(CRYPTO) && !defined(QHASH_AES_SANITIZER_BUILD) && !defined(QT_BOOTSTRAPPED)
if (seed && qCpuHasFeature(AES))
return aeshash(data, size, seed, seed2);
#endif