diff --git a/crc-simd.cpp b/crc-simd.cpp index bf6f1828..8fa1dcbd 100644 --- a/crc-simd.cpp +++ b/crc-simd.cpp @@ -81,8 +81,11 @@ bool CPU_TryCRC32_ARMV8() } return result; #else +# if defined(__android__) + if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_CRC32) + return true; // https://sourceware.org/ml/libc-help/2017-08/msg00012.html -# if defined(__linux__) && defined(__aarch64__) +# elif defined(__linux__) && defined(__aarch64__) if (getauxval(AT_HWCAP) & HWCAP_CRC32) return true; # elif defined(__linux__) && defined(__aarch32__) diff --git a/gcm-simd.cpp b/gcm-simd.cpp index 57ba9319..01858dc2 100644 --- a/gcm-simd.cpp +++ b/gcm-simd.cpp @@ -214,8 +214,11 @@ bool CPU_TryPMULL_ARMV8() } return result; # else +# if defined(__android__) + if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_PMULL) + return true; // https://sourceware.org/ml/libc-help/2017-08/msg00012.html -# if defined(__linux__) && defined(__aarch64__) +# elif defined(__linux__) && defined(__aarch64__) if (getauxval(AT_HWCAP) & HWCAP_PMULL) return true; # elif defined(__linux__) && defined(__aarch32__) diff --git a/rijndael-simd.cpp b/rijndael-simd.cpp index 7ab393a5..e7e48e94 100644 --- a/rijndael-simd.cpp +++ b/rijndael-simd.cpp @@ -104,8 +104,11 @@ bool CPU_TryAES_ARMV8() } return result; # else +# if defined(__android__) + if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_AES) + return true; // https://sourceware.org/ml/libc-help/2017-08/msg00012.html -# if defined(__linux__) && defined(__aarch64__) +# elif defined(__linux__) && defined(__aarch64__) if (getauxval(AT_HWCAP) & HWCAP_AES) return true; # elif defined(__linux__) && defined(__aarch32__) diff --git a/sha-simd.cpp b/sha-simd.cpp index e7a8708a..18bf3c88 100644 --- a/sha-simd.cpp +++ b/sha-simd.cpp @@ -91,8 +91,11 @@ bool CPU_TrySHA1_ARMV8() } return result; # else +# if defined(__android__) + if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_SHA1) + return true; // https://sourceware.org/ml/libc-help/2017-08/msg00012.html -# if defined(__linux__) && defined(__aarch64__) +# elif defined(__linux__) && defined(__aarch64__) if (getauxval(AT_HWCAP) & HWCAP_SHA1) return true; # elif defined(__linux__) && defined(__aarch32__) @@ -158,11 +161,15 @@ bool CPU_TrySHA2_ARMV8() } return result; #else -# if defined(__linux__) && defined(__aarch64__) +# if defined(__android__) + if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_SHA2) + return true; + // https://sourceware.org/ml/libc-help/2017-08/msg00012.html +# elif defined(__linux__) && defined(__aarch64__) if (getauxval(AT_HWCAP) & HWCAP_SHA2) return true; # elif defined(__linux__) && defined(__aarch32__) - if (getauxval(AT_HWCAP) & HWCAP_SHA2) + if (getauxval(AT_HWCAP2) & HWCAP2_SHA2) return true; # endif