aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarat Dukhan <marat@fb.com>2017-11-29 15:11:56 -0800
committerMarat Dukhan <marat@fb.com>2017-11-29 15:14:52 -0800
commit63a7a6b48f72e7eef62522240a39d3bd0eb7fb02 (patch)
treecae717ea9e1eed455693edab6d45711b8ed82cdc
parent3708e8f43ef7020168c52bea80213d206d6a562f (diff)
downloadcpuinfo-63a7a6b48f72e7eef62522240a39d3bd0eb7fb02.tar.gz
More robust ISA detection on ARM Linux
-rw-r--r--CMakeLists.txt3
-rw-r--r--README.md3
-rwxr-xr-xconfigure.py1
-rw-r--r--include/cpuinfo-mock.h7
-rw-r--r--jni/Android.mk2
-rw-r--r--src/arm/linux/api.h8
-rw-r--r--src/arm/linux/hwcap.c149
-rw-r--r--src/arm/linux/init.c65
-rw-r--r--test/mock/atm7029b-tablet.cc3
-rw-r--r--test/mock/blu-r1-hd.cc4
-rw-r--r--test/mock/galaxy-a8-2016-duos.cc3
-rw-r--r--test/mock/galaxy-c9-pro.cc6
-rw-r--r--test/mock/galaxy-grand-prime-value-edition.cc3
-rw-r--r--test/mock/galaxy-j7-tmobile.cc6
-rw-r--r--test/mock/galaxy-j7-uae.cc6
-rw-r--r--test/mock/galaxy-s3-us.cc3
-rw-r--r--test/mock/galaxy-s4-us.cc3
-rw-r--r--test/mock/galaxy-s5-global.cc3
-rw-r--r--test/mock/galaxy-s5-us.cc3
-rw-r--r--test/mock/galaxy-s6.cc6
-rw-r--r--test/mock/galaxy-s7-global.cc6
-rw-r--r--test/mock/galaxy-s7-us.cc6
-rw-r--r--test/mock/galaxy-s8-global.cc6
-rw-r--r--test/mock/galaxy-s8-us.cc6
-rw-r--r--test/mock/galaxy-tab-3-7.0.cc3
-rw-r--r--test/mock/galaxy-tab-3-lite.cc3
-rw-r--r--test/mock/galaxy-win-duos.cc3
-rw-r--r--test/mock/huawei-ascend-p7.cc3
-rw-r--r--test/mock/huawei-mate-10.cc6
-rw-r--r--test/mock/huawei-mate-8.cc6
-rw-r--r--test/mock/huawei-mate-9.cc6
-rw-r--r--test/mock/huawei-p9-lite.cc6
-rw-r--r--test/mock/lenovo-a6600-plus.cc4
-rw-r--r--test/mock/lenovo-vibe-x2.cc3
-rw-r--r--test/mock/lg-k10-eu.cc3
-rw-r--r--test/mock/meizu-pro-6.cc6
-rw-r--r--test/mock/meizu-pro-6s.cc6
-rw-r--r--test/mock/meizu-pro-7-plus.cc6
-rw-r--r--test/mock/moto-e-gen1.cc3
-rw-r--r--test/mock/moto-g-gen2.cc3
-rw-r--r--test/mock/moto-g-gen3.cc3
-rw-r--r--test/mock/nexus-s.cc3
-rw-r--r--test/mock/nexus4.cc3
-rw-r--r--test/mock/nexus5x.cc6
-rw-r--r--test/mock/nexus6.cc3
-rw-r--r--test/mock/nexus6p.cc6
-rw-r--r--test/mock/nexus9.cc6
-rw-r--r--test/mock/oppo-r9.cc36
-rw-r--r--test/mock/padcod-10.1.cc3
-rw-r--r--test/mock/pixel-2-xl.cc6
-rw-r--r--test/mock/pixel-c.cc6
-rw-r--r--test/mock/pixel-xl.cc6
-rw-r--r--test/mock/pixel.cc6
-rw-r--r--test/mock/xiaomi-mi-5c.cc6
-rw-r--r--test/mock/xiaomi-redmi-2a.cc3
-rw-r--r--test/mock/xiaomi-redmi-note-3.cc6
-rw-r--r--test/mock/xperia-c4-dual.cc36
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")
diff --git a/README.md b/README.md
index 46d56fc..829a64c 100644
--- a/README.md
+++ b/README.md
@@ -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);