mirror of
https://github.com/Dr-Noob/cpufetch.git
synced 2026-03-25 07:50:40 +01:00
[v1.04][RISCV] First support for parsing multi-letter extensions
This commit is contained in:
@@ -9,6 +9,11 @@
|
|||||||
#include "uarch.h"
|
#include "uarch.h"
|
||||||
#include "soc.h"
|
#include "soc.h"
|
||||||
|
|
||||||
|
#define SET_ISA_EXT_MAP(name, bit) \
|
||||||
|
if(strncmp(multi_letter_extension, name, \
|
||||||
|
multi_letter_extension_len) == 0) \
|
||||||
|
ext->mask |= 1UL << bit; \
|
||||||
|
|
||||||
struct frequency* get_frequency_info(uint32_t core) {
|
struct frequency* get_frequency_info(uint32_t core) {
|
||||||
struct frequency* freq = emalloc(sizeof(struct frequency));
|
struct frequency* freq = emalloc(sizeof(struct frequency));
|
||||||
|
|
||||||
@@ -41,10 +46,27 @@ int parse_multi_letter_extension(struct extensions* ext, char* e) {
|
|||||||
|
|
||||||
int multi_letter_extension_len = multi_letter_extension_end-(e+1);
|
int multi_letter_extension_len = multi_letter_extension_end-(e+1);
|
||||||
|
|
||||||
// TODO: Parse extension and fill ext struct
|
|
||||||
char* multi_letter_extension = emalloc(multi_letter_extension_len);
|
char* multi_letter_extension = emalloc(multi_letter_extension_len);
|
||||||
strncpy(multi_letter_extension, e+1, multi_letter_extension_len);
|
strncpy(multi_letter_extension, e+1, multi_letter_extension_len);
|
||||||
printWarn("Not parsed multi-letter extension: %s", multi_letter_extension);
|
// TODO: Add more extensions
|
||||||
|
// https://en.wikipedia.org/wiki/RISC-V
|
||||||
|
SET_ISA_EXT_MAP("smaia", RISCV_ISA_EXT_SMAIA);
|
||||||
|
SET_ISA_EXT_MAP("ssaia", RISCV_ISA_EXT_SSAIA);
|
||||||
|
SET_ISA_EXT_MAP("sscofpmf", RISCV_ISA_EXT_SSCOFPMF);
|
||||||
|
SET_ISA_EXT_MAP("sstc", RISCV_ISA_EXT_SSTC);
|
||||||
|
SET_ISA_EXT_MAP("svinval", RISCV_ISA_EXT_SVINVAL);
|
||||||
|
SET_ISA_EXT_MAP("svnapot", RISCV_ISA_EXT_SVNAPOT);
|
||||||
|
SET_ISA_EXT_MAP("svpbmt", RISCV_ISA_EXT_SVPBMT);
|
||||||
|
SET_ISA_EXT_MAP("zba", RISCV_ISA_EXT_ZBA);
|
||||||
|
SET_ISA_EXT_MAP("zbb", RISCV_ISA_EXT_ZBB);
|
||||||
|
SET_ISA_EXT_MAP("zbs", RISCV_ISA_EXT_ZBS);
|
||||||
|
SET_ISA_EXT_MAP("zicbom", RISCV_ISA_EXT_ZICBOM);
|
||||||
|
SET_ISA_EXT_MAP("zicboz", RISCV_ISA_EXT_ZICBOZ);
|
||||||
|
SET_ISA_EXT_MAP("zihintpause", RISCV_ISA_EXT_ZIHINTPAUSE);
|
||||||
|
else {
|
||||||
|
printBug("parse_multi_letter_extension: Unknown multi-letter extension: %s", multi_letter_extension);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return multi_letter_extension_len;
|
return multi_letter_extension_len;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,36 @@ static const struct extension extension_list[] = {
|
|||||||
{ 's' - 'a', "(S) Supervisor-level Instructions" }
|
{ 's' - 'a', "(S) Supervisor-level Instructions" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define RISCV_ISA_EXT_MAX 64
|
||||||
|
#define RISCV_ISA_EXT_NAME_LEN_MAX 32
|
||||||
|
#define RISCV_ISA_EXT_BASE 26
|
||||||
|
|
||||||
|
// This enum represent the logical ID for multi-letter RISC-V ISA extensions.
|
||||||
|
// The logical ID should start from RISCV_ISA_EXT_BASE and must not exceed
|
||||||
|
// RISCV_ISA_EXT_MAX.
|
||||||
|
#define RISCV_ISA_EXT_BASE 26
|
||||||
|
|
||||||
|
#define RISCV_ISA_EXT_SSCOFPMF 26
|
||||||
|
#define RISCV_ISA_EXT_SSTC 27
|
||||||
|
#define RISCV_ISA_EXT_SVINVAL 28
|
||||||
|
#define RISCV_ISA_EXT_SVPBMT 29
|
||||||
|
#define RISCV_ISA_EXT_ZBB 30
|
||||||
|
#define RISCV_ISA_EXT_ZICBOM 31
|
||||||
|
#define RISCV_ISA_EXT_ZIHINTPAUSE 32
|
||||||
|
#define RISCV_ISA_EXT_SVNAPOT 33
|
||||||
|
#define RISCV_ISA_EXT_ZICBOZ 34
|
||||||
|
#define RISCV_ISA_EXT_SMAIA 35
|
||||||
|
#define RISCV_ISA_EXT_SSAIA 36
|
||||||
|
#define RISCV_ISA_EXT_ZBA 37
|
||||||
|
#define RISCV_ISA_EXT_ZBS 38
|
||||||
|
#define RISCV_ISA_EXT_ZICNTR 39
|
||||||
|
#define RISCV_ISA_EXT_ZICSR 40
|
||||||
|
#define RISCV_ISA_EXT_ZIFENCEI 41
|
||||||
|
#define RISCV_ISA_EXT_ZIHPM 42
|
||||||
|
|
||||||
|
#define RISCV_ISA_EXT_MAX 64
|
||||||
|
#define RISCV_ISA_EXT_NAME_LEN_MAX 32
|
||||||
|
|
||||||
struct cpuInfo* get_cpu_info(void);
|
struct cpuInfo* get_cpu_info(void);
|
||||||
char* get_str_topology(struct cpuInfo* cpu, struct topology* topo);
|
char* get_str_topology(struct cpuInfo* cpu, struct topology* topo);
|
||||||
char* get_str_extensions(struct cpuInfo* cpu);
|
char* get_str_extensions(struct cpuInfo* cpu);
|
||||||
|
|||||||
Reference in New Issue
Block a user