authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-03 21:29:06+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-31 23:15:49+02:00
log60e347983bef90ce244123dec1ad270307ee7fc2
treee53768d1a15b86b81fd6a4471d3a3ece50446fe0
parent17acd7cdfebb018bc755894baa94f57127951d46
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.zig.system.x86: add hygon family CPU detection


1 files changed, 14 insertions(+), 0 deletions(-)

lib/std/zig/system/x86.zig+14
...@@ -75,6 +75,7 @@ pub fn detectNativeCpuAndFeatures(arch: Target.Cpu.Arch, os: Target.Os, query: T...@@ -75,6 +75,7 @@ pub fn detectNativeCpuAndFeatures(arch: Target.Cpu.Arch, os: Target.Os, query: T
75 if (switch (vendor) {75 if (switch (vendor) {
76 0x756e6547 => detectIntelProcessor(&cpu, family, model, brand_id),76 0x756e6547 => detectIntelProcessor(&cpu, family, model, brand_id),
77 0x68747541 => detectAmdProcessor(&cpu, family, model),77 0x68747541 => detectAmdProcessor(&cpu, family, model),
78 0x6f677948 => detectHygonProcessor(family, model),
78 else => null,79 else => null,
79 }) |m| b: {80 }) |m| b: {
80 // Some hypervisors are evil liars and will operate in long mode while identifying as a81 // Some hypervisors are evil liars and will operate in long mode while identifying as a
...@@ -218,6 +219,19 @@ fn detectAmdProcessor(cpu: *const Target.Cpu, family: u32, model: u32) ?*const T...@@ -218,6 +219,19 @@ fn detectAmdProcessor(cpu: *const Target.Cpu, family: u32, model: u32) ?*const T
218 };219 };
219}220}
220221
222fn detectHygonProcessor(family: u32, model: u32) ?*const Target.Cpu.Model {
223 return switch (family) {
224 24 => switch (model) {
225 4 => &Target.x86.cpu.c86_4g_m4,
226 6 => &Target.x86.cpu.c86_4g_m6,
227 7 => &Target.x86.cpu.c86_4g_m7,
228 8 => &Target.x86.cpu.c86_4g_m8,
229 else => null,
230 },
231 else => null,
232 };
233}
234
221fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void {235fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void {
222 var leaf = cpuid(0, 0);236 var leaf = cpuid(0, 0);
223237