diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-04-21 11:33:44 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2021-05-20 18:31:05 +0000 |
commit | fe6dc9dc8549cd9de7a0ddb04d921fd3263b51df (patch) | |
tree | 88c2121c20c9c6290bd1cbb7b50e1b6c0eb05175 /src/corelib/tools | |
parent | 5b64e5950cf984abb7d47e0802bcb4b5a21e06fa (diff) |
Add runtime ARM64 AES check
Adds runtime CPU detection for Windows and macOS, and switches feature
detection of AES to runtime like for x86,
So far only on ARM64, since gcc doesn't do function versioning on ARM32,
but clang can, so it could be added later.
Change-Id: Ibe5d60f48cdae3e366a8ecd6263534ba2b09b131
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src/corelib/tools')
-rw-r--r-- | src/corelib/tools/qhash.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index 2221de1461..46917cfbe9 100644 --- a/src/corelib/tools/qhash.cpp +++ b/src/corelib/tools/qhash.cpp @@ -527,7 +527,8 @@ lt16: } #endif -#if defined(__ARM_FEATURE_CRYPTO) && !defined(QT_BOOTSTRAPPED) +#if defined(Q_PROCESSOR_ARM) && QT_COMPILER_SUPPORTS_HERE(AES) && !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) noexcept { uint8x16_t key; @@ -669,10 +670,14 @@ size_t qHashBits(const void *p, size_t size, size_t seed) noexcept #ifdef AESHASH if (seed && qCpuHasFeature(AES) && qCpuHasFeature(SSE4_2)) return aeshash(reinterpret_cast<const uchar *>(p), size, seed); -#elif defined(__ARM_FEATURE_CRYPTO) && !defined(QT_BOOTSTRAPPED) - // Do additional runtime check as Yocto hard enables Crypto extension for +#elif defined(Q_PROCESSOR_ARM) && QT_COMPILER_SUPPORTS_HERE(AES) && !defined(QHASH_AES_SANITIZER_BUILD) && !defined(QT_BOOTSTRAPPED) +# if defined(Q_OS_LINUX) + // Do specific runtime-only check as Yocto hard enables Crypto extension for // all armv8 configs if (seed && (qCpuFeatures() & CpuFeatureAES)) +# else + if (seed && qCpuHasFeature(AES)) +# endif return aeshash(reinterpret_cast<const uchar *>(p), size, seed); #endif if (size <= QT_POINTER_SIZE) |