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 <thiago.macieira@intel.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
This commit is contained in:
Allan Sandfeld Jensen 2024-09-13 13:16:32 +02:00
parent aac8372401
commit bbdd20da04
4 changed files with 11 additions and 6 deletions

View File

@ -245,10 +245,10 @@ const char msg2[] = "==Qt=magic=Qt== Sub-architecture:"
#ifdef __IWMMXT__ #ifdef __IWMMXT__
" iwmmxt" " iwmmxt"
#endif #endif
#ifdef __ARM_FEATURE_CRC32 #if defined(__ARM_FEATURE_CRC32) || (defined(_M_ARM64) && __ARM_ARCH >= 800)
" crc32" " crc32"
#endif #endif
#ifdef __ARM_FEATURE_CRYPTO #if defined(__ARM_FEATURE_CRYPTO) || (defined(_M_ARM64) && __ARM_ARCH >= 800)
" crypto" " crypto"
#endif #endif

View File

@ -925,6 +925,7 @@ qt_feature("arm_crypto" PRIVATE
LABEL "AES" LABEL "AES"
CONDITION ( ( TEST_architecture_arch STREQUAL arm ) OR ( TEST_architecture_arch STREQUAL arm64 ) ) AND TEST_arch_${TEST_architecture_arch}_subarch_crypto 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_definition("arm_crypto" "QT_COMPILER_SUPPORTS_AES" VALUE "1")
qt_feature_config("arm_crypto" QMAKE_PRIVATE_CONFIG) qt_feature_config("arm_crypto" QMAKE_PRIVATE_CONFIG)

View File

@ -338,8 +338,9 @@ inline uint32x4_t qvsetq_n_u32(uint32_t a, uint32_t b, uint32_t c, uint32_t d)
} }
#endif #endif
#if defined(Q_PROCESSOR_ARM) && defined(__ARM_FEATURE_CRC32) #if defined(_M_ARM64) && __ARM_ARCH >= 800
# include <arm_acle.h> #define __ARM_FEATURE_CRYPTO 1
#define __ARM_FEATURE_CRC32 1
#endif #endif
#if defined(Q_PROCESSOR_ARM_64) #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) #elif defined(Q_CC_GNU)
#define QT_FUNCTION_TARGET_STRING_AES "+crypto" #define QT_FUNCTION_TARGET_STRING_AES "+crypto"
#define QT_FUNCTION_TARGET_STRING_CRC32 "+crc" #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 #endif
#elif defined(Q_PROCESSOR_ARM_32) #elif defined(Q_PROCESSOR_ARM_32)
#if defined(Q_CC_CLANG) #if defined(Q_CC_CLANG)

View File

@ -715,7 +715,7 @@ static size_t aeshash(const uchar *p, size_t len, size_t seed, size_t seed2) noe
} }
#endif // x86 AESNI #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) QT_FUNCTION_TARGET(AES)
static size_t aeshash(const uchar *p, size_t len, size_t seed, size_t seed2) noexcept 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 #ifdef AESHASH
if (seed && qCpuHasFeature(AES) && qCpuHasFeature(SSE4_2)) if (seed && qCpuHasFeature(AES) && qCpuHasFeature(SSE4_2))
return aeshash(data, size, seed, seed2); 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)) if (seed && qCpuHasFeature(AES))
return aeshash(data, size, seed, seed2); return aeshash(data, size, seed, seed2);
#endif #endif