diff options
author | Marat Dukhan <marat@fb.com> | 2017-11-29 15:11:56 -0800 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2017-11-29 15:14:52 -0800 |
commit | 63a7a6b48f72e7eef62522240a39d3bd0eb7fb02 (patch) | |
tree | cae717ea9e1eed455693edab6d45711b8ed82cdc | |
parent | 3708e8f43ef7020168c52bea80213d206d6a562f (diff) | |
download | cpuinfo-63a7a6b48f72e7eef62522240a39d3bd0eb7fb02.tar.gz |
More robust ISA detection on ARM Linux
57 files changed, 491 insertions, 34 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ca86f60..63e2b20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,8 @@ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7|armv7f|armv7s|armv7k|armv src/arm/linux/cpuinfo.c src/arm/linux/clusters.c src/arm/linux/chipset.c - src/arm/linux/midr.c) + src/arm/linux/midr.c + src/arm/linux/hwcap.c) IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(armv5te|armv7l|armv7-a)$") LIST(APPEND CPUINFO_SRCS src/arm/linux/aarch32-isa.c) IF(CMAKE_SYSTEM_NAME STREQUAL "Android" AND ANDROID_ABI STREQUAL "armeabi") @@ -133,7 +133,8 @@ pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpu_set); - [x] Using `/proc/cpuinfo` on 32-bit ARM EABI (Linux) - [x] Using microarchitecture heuristics on (32-bit ARM) - [x] Using `FPSID` and `WCID` registers (32-bit ARM) - - [ ] Using `getauxval` or `/proc/self/auxv` (Linux) + - [x] Using `getauxval` (Linux/ARM) + - [x] Using `/proc/self/auxv` (Android/ARM) - [ ] Using instruction probing on ARM (Linux) - [ ] Using CPUID registers on ARM64 (Linux) - Cache detection diff --git a/configure.py b/configure.py index 0d8777a..75c508a 100755 --- a/configure.py +++ b/configure.py @@ -44,6 +44,7 @@ def main(args): "arm/linux/clusters.c", "arm/linux/midr.c", "arm/linux/chipset.c", + "arm/linux/hwcap.c", ] if build.target.is_arm: sources.append("arm/linux/aarch32-isa.c") diff --git a/include/cpuinfo-mock.h b/include/cpuinfo-mock.h index 152f93f..845bf05 100644 --- a/include/cpuinfo-mock.h +++ b/include/cpuinfo-mock.h @@ -57,6 +57,13 @@ struct cpuinfo_mock_property { int CPUINFO_ABI cpuinfo_mock_open(const char* path, int oflag); int CPUINFO_ABI cpuinfo_mock_close(int fd); ssize_t CPUINFO_ABI cpuinfo_mock_read(int fd, void* buffer, size_t capacity); + + #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 + void CPUINFO_ABI cpuinfo_set_hwcap(uint32_t hwcap); + #endif + #if CPUINFO_ARCH_ARM + void CPUINFO_ABI cpuinfo_set_hwcap2(uint32_t hwcap2); + #endif #endif #if defined(__ANDROID__) diff --git a/jni/Android.mk b/jni/Android.mk index d5bfac2..38092de 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -20,6 +20,7 @@ LOCAL_SRC_FILES += \ $(LOCAL_PATH)/src/arm/linux/clusters.c \ $(LOCAL_PATH)/src/arm/linux/chipset.c \ $(LOCAL_PATH)/src/arm/linux/midr.c \ + $(LOCAL_PATH)/src/arm/linux/hwcap.c \ $(LOCAL_PATH)/src/arm/android/properties.c ifeq ($(TARGET_ARCH_ABI),armeabi) LOCAL_SRC_FILES += $(LOCAL_PATH)/src/arm/linux/aarch32-isa.c.arm @@ -72,6 +73,7 @@ LOCAL_SRC_FILES += \ $(LOCAL_PATH)/src/arm/linux/clusters.c \ $(LOCAL_PATH)/src/arm/linux/chipset.c \ $(LOCAL_PATH)/src/arm/linux/midr.c \ + $(LOCAL_PATH)/src/arm/linux/hwcap.c \ $(LOCAL_PATH)/src/arm/android/properties.c ifeq ($(TARGET_ARCH_ABI),armeabi) LOCAL_SRC_FILES += $(LOCAL_PATH)/src/arm/linux/aarch32-isa.c.arm diff --git a/src/arm/linux/api.h b/src/arm/linux/api.h index 6764032..7bbdc01 100644 --- a/src/arm/linux/api.h +++ b/src/arm/linux/api.h @@ -246,6 +246,13 @@ bool cpuinfo_arm_linux_parse_proc_cpuinfo( struct cpuinfo_arm_linux_processor processors[restrict static max_processors_count]); #if CPUINFO_ARCH_ARM + bool cpuinfo_arm_linux_hwcap_from_getauxval( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]); + bool cpuinfo_arm_linux_hwcap_from_procfs( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]); + void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( uint32_t features, uint32_t features2, @@ -254,6 +261,7 @@ bool cpuinfo_arm_linux_parse_proc_cpuinfo( uint32_t architecture_flags, struct cpuinfo_arm_isa isa[restrict static 1]); #elif CPUINFO_ARCH_ARM64 + uint32_t cpuinfo_arm_linux_hwcap_from_getauxval(void); void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo( uint32_t features, struct cpuinfo_arm_isa isa[restrict static 1]); diff --git a/src/arm/linux/hwcap.c b/src/arm/linux/hwcap.c new file mode 100644 index 0000000..d60b518 --- /dev/null +++ b/src/arm/linux/hwcap.c @@ -0,0 +1,149 @@ +#include <string.h> + +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/auxv.h> +#include <fcntl.h> +#include <errno.h> +#include <dlfcn.h> +#include <elf.h> + +#if CPUINFO_MOCK + #include <cpuinfo-mock.h> +#endif +#include <cpuinfo.h> +#include <arm/linux/api.h> +#include <log.h> + + +#if CPUINFO_MOCK + static uint32_t mock_hwcap = 0; + void cpuinfo_set_hwcap(uint32_t hwcap) { + mock_hwcap = hwcap; + } + + #if CPUINFO_ARCH_ARM + static uint32_t mock_hwcap2 = 0; + void cpuinfo_set_hwcap2(uint32_t hwcap2) { + mock_hwcap2 = hwcap2; + } + #endif +#endif + + +#if CPUINFO_ARCH_ARM + typedef unsigned long (*getauxval_function_t)(unsigned long); + + bool cpuinfo_arm_linux_hwcap_from_getauxval( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]) + { + #if CPUINFO_MOCK + *hwcap = mock_hwcap; + *hwcap2 = mock_hwcap2; + return true; + #elif defined(__ANDROID__) + /* Android: dynamically check if getauxval is supported */ + void* libc = NULL; + getauxval_function_t getauxval = NULL; + + dlerror(); + libc = dlopen("libc.so", RTLD_LAZY); + if (libc == NULL) { + cpuinfo_log_warning("failed to load libc.so: %s", dlerror()); + goto cleanup; + } + + getauxval = (getauxval_function_t) dlsym(libc, "getauxval"); + if (getauxval == NULL) { + cpuinfo_log_info("failed to locate getauxval in libc.so: %s", dlerror()); + goto cleanup; + } + + *hwcap = getauxval(AT_HWCAP); + *hwcap2 = getauxval(AT_HWCAP2); + + cleanup: + if (libc != NULL) { + dlclose(libc); + libc = NULL; + } + return getauxval != NULL; + #else + /* GNU/Linux: getauxval is always supported */ + *hwcap = getauxval(AT_HWCAP); + *hwcap2 = getauxval(AT_HWCAP2); + return true; + #endif + } + + #ifdef __ANDROID__ + bool cpuinfo_arm_linux_hwcap_from_procfs( + uint32_t hwcap[restrict static 1], + uint32_t hwcap2[restrict static 1]) + { + #if CPUINFO_MOCK + *hwcap = mock_hwcap; + *hwcap2 = mock_hwcap2; + return true; + #else + uint32_t hwcaps[2] = { 0, 0 }; + bool result = false; + int file = -1; + + file = open("/proc/self/auxv", O_RDONLY); + if (file == -1) { + cpuinfo_log_warning("failed to open /proc/self/auxv: %s", strerror(errno)); + goto cleanup; + } + + ssize_t bytes_read; + do { + Elf32_auxv_t elf_auxv; + bytes_read = read(file, &elf_auxv, sizeof(Elf32_auxv_t)); + if (bytes_read < 0) { + cpuinfo_log_warning("failed to read /proc/self/auxv: %s", strerror(errno)); + goto cleanup; + } else if (bytes_read > 0) { + if (bytes_read == sizeof(elf_auxv)) { + switch (elf_auxv.a_type) { + case AT_HWCAP: + hwcaps[0] = (uint32_t) elf_auxv.a_un.a_val; + break; + case AT_HWCAP2: + hwcaps[1] = (uint32_t) elf_auxv.a_un.a_val; + break; + } + } else { + cpuinfo_log_warning( + "failed to read %zu bytes from /proc/self/auxv: %zu bytes available", + sizeof(elf_auxv), (size_t) bytes_read); + goto cleanup; + } + } + } while (bytes_read == sizeof(Elf32_auxv_t)); + + /* Success, commit results */ + *hwcap = hwcaps[0]; + *hwcap2 = hwcaps[1]; + result = true; + + cleanup: + if (file != -1) { + close(file); + file = -1; + } + return result; + #endif + } + #endif /* __ANDROID__ */ +#elif CPUINFO_ARCH_ARM64 + uint32_t cpuinfo_arm_linux_hwcap_from_getauxval(void) { + #if CPUINFO_MOCK + return mock_hwcap; + #else + return (uint32_t) getauxval(AT_HWCAP); + #endif + } +#endif diff --git a/src/arm/linux/init.c b/src/arm/linux/init.c index d7ad54a..cb3d748 100644 --- a/src/arm/linux/init.c +++ b/src/arm/linux/init.c @@ -202,35 +202,56 @@ void cpuinfo_arm_linux_init(void) { } } - /* Detect ISA. If different processors report different ISA features, take the intersection. */ - uint32_t isa_features = 0, processors_with_features = 0; #if CPUINFO_ARCH_ARM - uint32_t isa_features2 = 0; - #endif - for (uint32_t i = 0; i < arm_linux_processors_count; i++) { - if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_MASK_USABLE | CPUINFO_ARM_LINUX_VALID_FEATURES)) { - if (processors_with_features == 0) { - isa_features = arm_linux_processors[i].features; - #if CPUINFO_ARCH_ARM - isa_features2 = arm_linux_processors[i].features2; - #endif - } else { - isa_features &= arm_linux_processors[i].features; - #if CPUINFO_ARCH_ARM - isa_features2 &= arm_linux_processors[i].features2; - #endif + uint32_t isa_features = 0, isa_features2 = 0; + #ifdef __ANDROID__ + /* + * On Android before API 20, libc.so does not provide getauxval function. + * Thus, we try to dynamically find it, or use two fallback mechanisms: + * 1. dlopen libc.so, and try to find getauxval + * 2. Parse /proc/self/auxv procfs file + * 3. Use features reported in /proc/cpuinfo + */ + if (!cpuinfo_arm_linux_hwcap_from_getauxval(&isa_features, &isa_features2)) { + /* getauxval can't be used, fall back to parsing /proc/self/auxv */ + if (!cpuinfo_arm_linux_hwcap_from_procfs(&isa_features, &isa_features2)) { + /* + * Reading /proc/self/auxv failed, probably due to file permissions. + * Use information from /proc/cpuinfo to detect ISA. + * + * If different processors report different ISA features, take the intersection. + */ + uint32_t processors_with_features = 0; + for (uint32_t i = 0; i < arm_linux_processors_count; i++) { + if (bitmask_all(arm_linux_processors[i].flags, CPUINFO_LINUX_MASK_USABLE | CPUINFO_ARM_LINUX_VALID_FEATURES)) { + if (processors_with_features == 0) { + isa_features = arm_linux_processors[i].features; + #if CPUINFO_ARCH_ARM + isa_features2 = arm_linux_processors[i].features2; + #endif + } else { + isa_features &= arm_linux_processors[i].features; + #if CPUINFO_ARCH_ARM + isa_features2 &= arm_linux_processors[i].features2; + #endif + } + processors_with_features += 1; + } + } + } } - processors_with_features += 1; - } - } - #if CPUINFO_ARCH_ARM + #else + /* On GNU/Linux getauxval is always available */ + cpuinfo_arm_linux_hwcap_from_getauxval(&isa_features, &isa_features2); + #endif cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( isa_features, isa_features2, last_midr, last_architecture_version, last_architecture_flags, &cpuinfo_isa); #elif CPUINFO_ARCH_ARM64 - cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo( - isa_features, &cpuinfo_isa); + /* getauxval is always available on ARM64 Android */ + const uint32_t isa_features = cpuinfo_arm_linux_hwcap_from_getauxval(); + cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(isa_features, &cpuinfo_isa); #endif /* Detect min/max frequency and package ID */ diff --git a/test/mock/atm7029b-tablet.cc b/test/mock/atm7029b-tablet.cc index 480aded..3be7a9a 100644 --- a/test/mock/atm7029b-tablet.cc +++ b/test/mock/atm7029b-tablet.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <atm7029b-tablet.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0001B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/blu-r1-hd.cc b/test/mock/blu-r1-hd.cc index 28cec5f..760f2a0 100644 --- a/test/mock/blu-r1-hd.cc +++ b/test/mock/blu-r1-hd.cc @@ -445,6 +445,10 @@ TEST(L4, none) { #include <blu-r1-hd.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x003FB0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x00000008)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-a8-2016-duos.cc b/test/mock/galaxy-a8-2016-duos.cc index 42911a4..1bd0a25 100644 --- a/test/mock/galaxy-a8-2016-duos.cc +++ b/test/mock/galaxy-a8-2016-duos.cc @@ -482,6 +482,9 @@ TEST(L4, none) { #include <galaxy-a8-2016-duos.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x002FB0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-c9-pro.cc b/test/mock/galaxy-c9-pro.cc index 53671ec..6e4164c 100644 --- a/test/mock/galaxy-c9-pro.cc +++ b/test/mock/galaxy-c9-pro.cc @@ -582,6 +582,12 @@ TEST(L4, none) { #include <galaxy-c9-pro.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-grand-prime-value-edition.cc b/test/mock/galaxy-grand-prime-value-edition.cc index 7c1c7c7..2ada9c9 100644 --- a/test/mock/galaxy-grand-prime-value-edition.cc +++ b/test/mock/galaxy-grand-prime-value-edition.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <galaxy-grand-prime-value-edition.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x000FB0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-j7-tmobile.cc b/test/mock/galaxy-j7-tmobile.cc index b8beced..9ac886d 100644 --- a/test/mock/galaxy-j7-tmobile.cc +++ b/test/mock/galaxy-j7-tmobile.cc @@ -503,6 +503,12 @@ TEST(L4, none) { #include <galaxy-j7-tmobile.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-j7-uae.cc b/test/mock/galaxy-j7-uae.cc index 067e053..13fc1ce 100644 --- a/test/mock/galaxy-j7-uae.cc +++ b/test/mock/galaxy-j7-uae.cc @@ -503,6 +503,12 @@ TEST(L4, none) { #include <galaxy-j7-uae.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s3-us.cc b/test/mock/galaxy-s3-us.cc index e4dd834..0192f04 100644 --- a/test/mock/galaxy-s3-us.cc +++ b/test/mock/galaxy-s3-us.cc @@ -443,6 +443,9 @@ TEST(L4, none) { #include <galaxy-s3-us.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0001B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s4-us.cc b/test/mock/galaxy-s4-us.cc index 38ab0e2..956a487 100644 --- a/test/mock/galaxy-s4-us.cc +++ b/test/mock/galaxy-s4-us.cc @@ -443,6 +443,9 @@ TEST(L4, none) { #include <galaxy-s4-us.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0001B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s5-global.cc b/test/mock/galaxy-s5-global.cc index 75da2e9..5184062 100644 --- a/test/mock/galaxy-s5-global.cc +++ b/test/mock/galaxy-s5-global.cc @@ -541,6 +541,9 @@ TEST(L4, none) { #include <galaxy-s5-global.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s5-us.cc b/test/mock/galaxy-s5-us.cc index 992b93a..4546d7e 100644 --- a/test/mock/galaxy-s5-us.cc +++ b/test/mock/galaxy-s5-us.cc @@ -443,6 +443,9 @@ TEST(L4, none) { #include <galaxy-s5-us.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s6.cc b/test/mock/galaxy-s6.cc index cb69b9d..678e09b 100644 --- a/test/mock/galaxy-s6.cc +++ b/test/mock/galaxy-s6.cc @@ -582,6 +582,12 @@ TEST(L4, none) { #include <galaxy-s6.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FB)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s7-global.cc b/test/mock/galaxy-s7-global.cc index 18f91c3..99739f0 100644 --- a/test/mock/galaxy-s7-global.cc +++ b/test/mock/galaxy-s7-global.cc @@ -601,6 +601,12 @@ TEST(L4, none) { #include <galaxy-s7-global.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s7-us.cc b/test/mock/galaxy-s7-us.cc index de81b00..6ccfa7b 100644 --- a/test/mock/galaxy-s7-us.cc +++ b/test/mock/galaxy-s7-us.cc @@ -511,6 +511,12 @@ TEST(L4, none) { #include <galaxy-s7-us.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s8-global.cc b/test/mock/galaxy-s8-global.cc index a2bfc87..81398cf 100644 --- a/test/mock/galaxy-s8-global.cc +++ b/test/mock/galaxy-s8-global.cc @@ -601,6 +601,12 @@ TEST(L4, none) { #include <galaxy-s8-global.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-s8-us.cc b/test/mock/galaxy-s8-us.cc index d636eca..78b028b 100644 --- a/test/mock/galaxy-s8-us.cc +++ b/test/mock/galaxy-s8-us.cc @@ -595,6 +595,12 @@ TEST(L4, none) { #include <galaxy-s8-us.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-tab-3-7.0.cc b/test/mock/galaxy-tab-3-7.0.cc index ff606cf..7318881 100644 --- a/test/mock/galaxy-tab-3-7.0.cc +++ b/test/mock/galaxy-tab-3-7.0.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <galaxy-tab-3-7.0.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0000B8D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-tab-3-lite.cc b/test/mock/galaxy-tab-3-lite.cc index d1d5d88..1da8dc8 100644 --- a/test/mock/galaxy-tab-3-lite.cc +++ b/test/mock/galaxy-tab-3-lite.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <galaxy-tab-3-lite.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/galaxy-win-duos.cc b/test/mock/galaxy-win-duos.cc index b36973f..188166c 100644 --- a/test/mock/galaxy-win-duos.cc +++ b/test/mock/galaxy-win-duos.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <galaxy-win-duos.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0001B8D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/huawei-ascend-p7.cc b/test/mock/huawei-ascend-p7.cc index b86de4e..b2dd81f 100644 --- a/test/mock/huawei-ascend-p7.cc +++ b/test/mock/huawei-ascend-p7.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <huawei-ascend-p7.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x000038D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/huawei-mate-10.cc b/test/mock/huawei-mate-10.cc index 94305d7..94379bd 100644 --- a/test/mock/huawei-mate-10.cc +++ b/test/mock/huawei-mate-10.cc @@ -595,6 +595,12 @@ TEST(L4, none) { #include <huawei-mate-10.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/huawei-mate-8.cc b/test/mock/huawei-mate-8.cc index 5a07f98..66c87d6 100644 --- a/test/mock/huawei-mate-8.cc +++ b/test/mock/huawei-mate-8.cc @@ -582,6 +582,12 @@ TEST(L4, none) { #include <huawei-mate-8.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/huawei-mate-9.cc b/test/mock/huawei-mate-9.cc index 31cda1f..391b35a 100644 --- a/test/mock/huawei-mate-9.cc +++ b/test/mock/huawei-mate-9.cc @@ -595,6 +595,12 @@ TEST(L4, none) { #include <huawei-mate-9.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/huawei-p9-lite.cc b/test/mock/huawei-p9-lite.cc index c47237c..7453606 100644 --- a/test/mock/huawei-p9-lite.cc +++ b/test/mock/huawei-p9-lite.cc @@ -503,6 +503,12 @@ TEST(L4, none) { #include <huawei-p9-lite.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/lenovo-a6600-plus.cc b/test/mock/lenovo-a6600-plus.cc index e71802d..802545d 100644 --- a/test/mock/lenovo-a6600-plus.cc +++ b/test/mock/lenovo-a6600-plus.cc @@ -441,6 +441,10 @@ TEST(L4, none) { #include <lenovo-a6600-plus.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x003FB0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x00000008)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/lenovo-vibe-x2.cc b/test/mock/lenovo-vibe-x2.cc index 6faae6c..e47ab3f 100644 --- a/test/mock/lenovo-vibe-x2.cc +++ b/test/mock/lenovo-vibe-x2.cc @@ -541,6 +541,9 @@ TEST(L4, none) { #include <lenovo-vibe-x2.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B8D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/lg-k10-eu.cc b/test/mock/lg-k10-eu.cc index e37e3b3..64e72e3 100644 --- a/test/mock/lg-k10-eu.cc +++ b/test/mock/lg-k10-eu.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <lg-k10-eu.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x000FB8D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/meizu-pro-6.cc b/test/mock/meizu-pro-6.cc index 89a3d59..63a8e85 100644 --- a/test/mock/meizu-pro-6.cc +++ b/test/mock/meizu-pro-6.cc @@ -621,6 +621,12 @@ TEST(L4, none) { #include <meizu-pro-6.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/meizu-pro-6s.cc b/test/mock/meizu-pro-6s.cc index 8ac0fa7..a76875d 100644 --- a/test/mock/meizu-pro-6s.cc +++ b/test/mock/meizu-pro-6s.cc @@ -621,6 +621,12 @@ TEST(L4, none) { #include <meizu-pro-6s.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/meizu-pro-7-plus.cc b/test/mock/meizu-pro-7-plus.cc index d26b3da..50d24c3 100644 --- a/test/mock/meizu-pro-7-plus.cc +++ b/test/mock/meizu-pro-7-plus.cc @@ -633,6 +633,12 @@ TEST(L4, none) { #include <meizu-pro-7-plus.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/moto-e-gen1.cc b/test/mock/moto-e-gen1.cc index a3e025b..7c54130 100644 --- a/test/mock/moto-e-gen1.cc +++ b/test/mock/moto-e-gen1.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <moto-e-gen1.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/moto-g-gen2.cc b/test/mock/moto-g-gen2.cc index da6b0ac..8b30021 100644 --- a/test/mock/moto-g-gen2.cc +++ b/test/mock/moto-g-gen2.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <moto-g-gen2.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/moto-g-gen3.cc b/test/mock/moto-g-gen3.cc index a59312c..729423f 100644 --- a/test/mock/moto-g-gen3.cc +++ b/test/mock/moto-g-gen3.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <moto-g-gen3.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x002FB0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/nexus-s.cc b/test/mock/nexus-s.cc index db68226..3aad0cf 100644 --- a/test/mock/nexus-s.cc +++ b/test/mock/nexus-s.cc @@ -439,6 +439,9 @@ TEST(L4, none) { #include <nexus-s.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x000038D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/nexus4.cc b/test/mock/nexus4.cc index 22002f9..21a3354 100644 --- a/test/mock/nexus4.cc +++ b/test/mock/nexus4.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <nexus4.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0001B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/nexus5x.cc b/test/mock/nexus5x.cc index 4c333e9..2f9f735 100644 --- a/test/mock/nexus5x.cc +++ b/test/mock/nexus5x.cc @@ -568,6 +568,12 @@ TEST(L4, none) { #include <nexus5x.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/nexus6.cc b/test/mock/nexus6.cc index edbf91b..9dcf952 100644 --- a/test/mock/nexus6.cc +++ b/test/mock/nexus6.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <nexus6.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/nexus6p.cc b/test/mock/nexus6p.cc index e356e14..d67d8c2 100644 --- a/test/mock/nexus6p.cc +++ b/test/mock/nexus6p.cc @@ -582,6 +582,12 @@ TEST(L4, none) { #include <nexus6p.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/nexus9.cc b/test/mock/nexus9.cc index 422293c..d35e050 100644 --- a/test/mock/nexus9.cc +++ b/test/mock/nexus9.cc @@ -469,6 +469,12 @@ TEST(L4, none) { #include <nexus9.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FB)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/oppo-r9.cc b/test/mock/oppo-r9.cc index 2d954b8..fd7a4d7 100644 --- a/test/mock/oppo-r9.cc +++ b/test/mock/oppo-r9.cc @@ -307,23 +307,43 @@ TEST(ISA, fcma) { } TEST(ISA, aes) { - ASSERT_TRUE(cpuinfo_has_arm_aes()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_aes()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_aes()); + #endif } TEST(ISA, sha1) { - ASSERT_TRUE(cpuinfo_has_arm_sha1()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_sha1()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_sha1()); + #endif } TEST(ISA, sha2) { - ASSERT_TRUE(cpuinfo_has_arm_sha2()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_sha2()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_sha2()); + #endif } TEST(ISA, pmull) { - ASSERT_TRUE(cpuinfo_has_arm_pmull()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_pmull()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_pmull()); + #endif } TEST(ISA, crc32) { - ASSERT_TRUE(cpuinfo_has_arm_crc32()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_crc32()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_crc32()); + #endif } TEST(L1I, count) { @@ -503,6 +523,12 @@ TEST(L4, none) { #include <oppo-r9.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x00000000)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FB)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/padcod-10.1.cc b/test/mock/padcod-10.1.cc index cd32366..cc20561 100644 --- a/test/mock/padcod-10.1.cc +++ b/test/mock/padcod-10.1.cc @@ -441,6 +441,9 @@ TEST(L4, none) { #include <padcod-10.1.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B8D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/pixel-2-xl.cc b/test/mock/pixel-2-xl.cc index ddbd794..b6891ec 100644 --- a/test/mock/pixel-2-xl.cc +++ b/test/mock/pixel-2-xl.cc @@ -595,6 +595,12 @@ TEST(L4, none) { #include <pixel-2-xl.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/pixel-c.cc b/test/mock/pixel-c.cc index 2faa49d..a82c62e 100644 --- a/test/mock/pixel-c.cc +++ b/test/mock/pixel-c.cc @@ -469,6 +469,12 @@ TEST(L4, none) { #include <pixel-c.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/pixel-xl.cc b/test/mock/pixel-xl.cc index 0c6d374..2d4549e 100644 --- a/test/mock/pixel-xl.cc +++ b/test/mock/pixel-xl.cc @@ -511,6 +511,12 @@ TEST(L4, none) { #include <pixel-xl.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/pixel.cc b/test/mock/pixel.cc index 2175c85..a46b4b4 100644 --- a/test/mock/pixel.cc +++ b/test/mock/pixel.cc @@ -511,6 +511,12 @@ TEST(L4, none) { #include <pixel.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0037B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/xiaomi-mi-5c.cc b/test/mock/xiaomi-mi-5c.cc index 0dd2a08..f57b878 100644 --- a/test/mock/xiaomi-mi-5c.cc +++ b/test/mock/xiaomi-mi-5c.cc @@ -503,6 +503,12 @@ TEST(L4, none) { #include <xiaomi-mi-5c.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/xiaomi-redmi-2a.cc b/test/mock/xiaomi-redmi-2a.cc index eaf1a4e..5b754ec 100644 --- a/test/mock/xiaomi-redmi-2a.cc +++ b/test/mock/xiaomi-redmi-2a.cc @@ -466,6 +466,9 @@ TEST(L4, none) { #include <xiaomi-redmi-2a.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D7)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/xiaomi-redmi-note-3.cc b/test/mock/xiaomi-redmi-note-3.cc index b801905..f17df4c 100644 --- a/test/mock/xiaomi-redmi-note-3.cc +++ b/test/mock/xiaomi-redmi-note-3.cc @@ -568,6 +568,12 @@ TEST(L4, none) { #include <xiaomi-redmi-note-3.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0027B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x0000001F)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FF)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); diff --git a/test/mock/xperia-c4-dual.cc b/test/mock/xperia-c4-dual.cc index e638765..dd6a458 100644 --- a/test/mock/xperia-c4-dual.cc +++ b/test/mock/xperia-c4-dual.cc @@ -307,23 +307,43 @@ TEST(ISA, fcma) { } TEST(ISA, aes) { - ASSERT_TRUE(cpuinfo_has_arm_aes()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_aes()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_aes()); + #endif } TEST(ISA, sha1) { - ASSERT_TRUE(cpuinfo_has_arm_sha1()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_sha1()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_sha1()); + #endif } TEST(ISA, sha2) { - ASSERT_TRUE(cpuinfo_has_arm_sha2()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_sha2()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_sha2()); + #endif } TEST(ISA, pmull) { - ASSERT_TRUE(cpuinfo_has_arm_pmull()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_pmull()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_pmull()); + #endif } TEST(ISA, crc32) { - ASSERT_TRUE(cpuinfo_has_arm_crc32()); + #if CPUINFO_ARCH_ARM64 + ASSERT_TRUE(cpuinfo_has_arm_crc32()); + #elif CPUINFO_ARCH_ARM + ASSERT_FALSE(cpuinfo_has_arm_crc32()); + #endif } TEST(L1I, count) { @@ -503,6 +523,12 @@ TEST(L4, none) { #include <xperia-c4-dual.h> int main(int argc, char* argv[]) { +#if CPUINFO_ARCH_ARM + cpuinfo_set_hwcap(UINT32_C(0x0007B0D6)); + cpuinfo_set_hwcap2(UINT32_C(0x00000000)); +#elif CPUINFO_ARCH_ARM64 + cpuinfo_set_hwcap(UINT32_C(0x000000FB)); +#endif cpuinfo_mock_filesystem(filesystem); #ifdef __ANDROID__ cpuinfo_mock_android_properties(properties); |