mirror of
https://github.com/google/cpu_features.git
synced 2025-04-28 15:33:37 +02:00
Add cache_info data to X86 for list_cpu_features (#105)
* Add cache_info data to X86 for list_cpu_features
This commit is contained in:
parent
e50d7db3b0
commit
5d55aa1efe
@ -282,7 +282,11 @@ static void printTextField(const Node* current) {
|
|||||||
if (current->next) printTextField(current->next);
|
if (current->next) printTextField(current->next);
|
||||||
break;
|
break;
|
||||||
case NT_MAP:
|
case NT_MAP:
|
||||||
if (current->next) printJson(current->next);
|
if (current->next) {
|
||||||
|
printf("{");
|
||||||
|
printJson(current->next);
|
||||||
|
printf("}");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NT_MAP_ENTRY:
|
case NT_MAP_ENTRY:
|
||||||
printf("%-15s : ", current->string);
|
printf("%-15s : ", current->string);
|
||||||
@ -317,11 +321,50 @@ static void showUsage(const char* name) {
|
|||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Node* GetCacheTypeString(CacheType cache_type) {
|
||||||
|
switch (cache_type) {
|
||||||
|
case CPU_FEATURE_CACHE_NULL:
|
||||||
|
return CreateConstantString("null");
|
||||||
|
case CPU_FEATURE_CACHE_DATA:
|
||||||
|
return CreateConstantString("data");
|
||||||
|
case CPU_FEATURE_CACHE_INSTRUCTION:
|
||||||
|
return CreateConstantString("instruction");
|
||||||
|
case CPU_FEATURE_CACHE_UNIFIED:
|
||||||
|
return CreateConstantString("unified");
|
||||||
|
case CPU_FEATURE_CACHE_TLB:
|
||||||
|
return CreateConstantString("tlb");
|
||||||
|
case CPU_FEATURE_CACHE_DTLB:
|
||||||
|
return CreateConstantString("dtlb");
|
||||||
|
case CPU_FEATURE_CACHE_STLB:
|
||||||
|
return CreateConstantString("stlb");
|
||||||
|
case CPU_FEATURE_CACHE_PREFETCH:
|
||||||
|
return CreateConstantString("prefetch");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AddCacheInfo(Node* root, const CacheInfo* cache_info) {
|
||||||
|
Node* array = CreateArray();
|
||||||
|
for (int i = 0; i < cache_info->size; ++i) {
|
||||||
|
CacheLevelInfo info = cache_info->levels[i];
|
||||||
|
Node* map = CreateMap();
|
||||||
|
AddMapEntry(map, "level", CreateInt(info.level));
|
||||||
|
AddMapEntry(map, "cache_type", GetCacheTypeString(info.cache_type));
|
||||||
|
AddMapEntry(map, "cache_size", CreateInt(info.cache_size));
|
||||||
|
AddMapEntry(map, "ways", CreateInt(info.ways));
|
||||||
|
AddMapEntry(map, "line_size", CreateInt(info.line_size));
|
||||||
|
AddMapEntry(map, "tlb_entries", CreateInt(info.tlb_entries));
|
||||||
|
AddMapEntry(map, "partitioning", CreateInt(info.partitioning));
|
||||||
|
AddArrayElement(array, map);
|
||||||
|
}
|
||||||
|
AddMapEntry(root, "cache_info", array);
|
||||||
|
}
|
||||||
|
|
||||||
static Node* CreateTree() {
|
static Node* CreateTree() {
|
||||||
Node* root = CreateMap();
|
Node* root = CreateMap();
|
||||||
#if defined(CPU_FEATURES_ARCH_X86)
|
#if defined(CPU_FEATURES_ARCH_X86)
|
||||||
char brand_string[49];
|
char brand_string[49];
|
||||||
const X86Info info = GetX86Info();
|
const X86Info info = GetX86Info();
|
||||||
|
const CacheInfo cache_info = GetX86CacheInfo();
|
||||||
FillX86BrandString(brand_string);
|
FillX86BrandString(brand_string);
|
||||||
AddMapEntry(root, "arch", CreateString("x86"));
|
AddMapEntry(root, "arch", CreateString("x86"));
|
||||||
AddMapEntry(root, "brand", CreateString(brand_string));
|
AddMapEntry(root, "brand", CreateString(brand_string));
|
||||||
@ -332,6 +375,7 @@ static Node* CreateTree() {
|
|||||||
CreateString(
|
CreateString(
|
||||||
GetX86MicroarchitectureName(GetX86Microarchitecture(&info))));
|
GetX86MicroarchitectureName(GetX86Microarchitecture(&info))));
|
||||||
AddFlags(root, &info.features);
|
AddFlags(root, &info.features);
|
||||||
|
AddCacheInfo(root, &cache_info);
|
||||||
#elif defined(CPU_FEATURES_ARCH_ARM)
|
#elif defined(CPU_FEATURES_ARCH_ARM)
|
||||||
const ArmInfo info = GetArmInfo();
|
const ArmInfo info = GetArmInfo();
|
||||||
AddMapEntry(root, "arch", CreateString("ARM"));
|
AddMapEntry(root, "arch", CreateString("ARM"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user