Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/pytorch/cpuinfo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKulin Seth <kulinseth@gmail.com>2022-07-15 19:25:34 +0300
committerGitHub <noreply@github.com>2022-07-15 19:25:34 +0300
commit60324e22653a37778a2c7e8c5281365f83e1ca81 (patch)
treea654fe8859cf51219e6cf6c6303a81c2b401bc5f
parent0c5d43135059ed9386782e12f4499038ca02e2e5 (diff)
Add support for Arm I8MM (#103)
Co-authored-by: Developer-Ecosystem-Engineering <65677710+Developer-Ecosystem-Engineering@users.noreply.github.com>
-rw-r--r--include/cpuinfo.h9
-rw-r--r--src/arm/linux/aarch64-isa.c3
-rw-r--r--src/arm/linux/cpuinfo.c4
-rw-r--r--src/arm/mach/init.c5
4 files changed, 21 insertions, 0 deletions
diff --git a/include/cpuinfo.h b/include/cpuinfo.h
index 7bcb931..e7ce9ed 100644
--- a/include/cpuinfo.h
+++ b/include/cpuinfo.h
@@ -1467,6 +1467,7 @@ static inline bool cpuinfo_has_x86_sha(void) {
bool bf16;
bool sve;
bool sve2;
+ bool i8mm;
#endif
bool rdm;
bool fp16arith;
@@ -1758,6 +1759,14 @@ static inline bool cpuinfo_has_arm_fcma(void) {
#endif
}
+static inline bool cpuinfo_has_arm_i8mm(void) {
+ #if CPUINFO_ARCH_ARM64
+ return cpuinfo_isa.i8mm;
+ #else
+ return false;
+ #endif
+}
+
static inline bool cpuinfo_has_arm_aes(void) {
#if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64
return cpuinfo_isa.aes;
diff --git a/src/arm/linux/aarch64-isa.c b/src/arm/linux/aarch64-isa.c
index 4090d10..9019949 100644
--- a/src/arm/linux/aarch64-isa.c
+++ b/src/arm/linux/aarch64-isa.c
@@ -82,6 +82,9 @@ void cpuinfo_arm64_linux_decode_isa_from_proc_cpuinfo(
break;
}
}
+ if (features2 & CPUINFO_ARM_LINUX_FEATURE2_I8MM) {
+ isa->i8mm = true;
+ }
/*
* Many phones ship with an old kernel configuration that doesn't report UDOT/SDOT instructions.
diff --git a/src/arm/linux/cpuinfo.c b/src/arm/linux/cpuinfo.c
index 90e1631..bc98c14 100644
--- a/src/arm/linux/cpuinfo.c
+++ b/src/arm/linux/cpuinfo.c
@@ -177,6 +177,10 @@ static void parse_features(
#if CPUINFO_ARCH_ARM64
processor->features |= CPUINFO_ARM_LINUX_FEATURE_FCMA;
#endif
+ } else if (memcmp(feature_start, "i8mm", feature_length) == 0) {
+ #if CPUINFO_ARCH_ARM64
+ processor->features2 |= CPUINFO_ARM_LINUX_FEATURE2_I8MM;
+ #endif
#if CPUINFO_ARCH_ARM
} else if (memcmp(feature_start, "half", feature_length) == 0) {
processor->features |= CPUINFO_ARM_LINUX_FEATURE_HALF;
diff --git a/src/arm/mach/init.c b/src/arm/mach/init.c
index ef3aace..1f4780a 100644
--- a/src/arm/mach/init.c
+++ b/src/arm/mach/init.c
@@ -371,6 +371,11 @@ void cpuinfo_arm_mach_init(void) {
cpuinfo_isa.bf16 = true;
}
+ const uint32_t has_FEAT_I8MM = get_sys_info_by_name("hw.optional.arm.FEAT_I8MM");
+ if (has_FEAT_I8MM != 0) {
+ cpuinfo_isa.i8mm = true;
+ }
+
uint32_t num_clusters = 1;
for (uint32_t i = 0; i < mach_topology.cores; i++) {
cores[i] = (struct cpuinfo_core) {