Function detectNativeCpuAndFeatures [src]

Prototype

pub fn detectNativeCpuAndFeatures() ?Target.Cpu

Source

pub fn detectNativeCpuAndFeatures() ?Target.Cpu { var cpu_family: std.c.CPUFAMILY = undefined; var len: usize = @sizeOf(std.c.CPUFAMILY); std.posix.sysctlbynameZ("hw.cpufamily", &cpu_family, &len, null, 0) catch |err| switch (err) { error.NameTooLong => unreachable, // constant, known good value error.PermissionDenied => unreachable, // only when setting values, error.SystemResources => unreachable, // memory already on the stack error.UnknownName => unreachable, // constant, known good value error.Unexpected => unreachable, // EFAULT: stack should be safe, EISDIR/ENOTDIR: constant, known good value }; const current_arch = builtin.cpu.arch; switch (current_arch) { .aarch64, .aarch64_be => { const model = switch (cpu_family) { .ARM_EVEREST_SAWTOOTH => &Target.aarch64.cpu.apple_a16, .ARM_BLIZZARD_AVALANCHE => &Target.aarch64.cpu.apple_a15, .ARM_FIRESTORM_ICESTORM => &Target.aarch64.cpu.apple_a14, .ARM_LIGHTNING_THUNDER => &Target.aarch64.cpu.apple_a13, .ARM_VORTEX_TEMPEST => &Target.aarch64.cpu.apple_a12, .ARM_MONSOON_MISTRAL => &Target.aarch64.cpu.apple_a11, .ARM_HURRICANE => &Target.aarch64.cpu.apple_a10, .ARM_TWISTER => &Target.aarch64.cpu.apple_a9, .ARM_TYPHOON => &Target.aarch64.cpu.apple_a8, .ARM_CYCLONE => &Target.aarch64.cpu.cyclone, .ARM_COLL => &Target.aarch64.cpu.apple_a17, .ARM_IBIZA => &Target.aarch64.cpu.apple_m3, // base .ARM_LOBOS => &Target.aarch64.cpu.apple_m3, // pro .ARM_PALMA => &Target.aarch64.cpu.apple_m3, // max .ARM_DONAN => &Target.aarch64.cpu.apple_m4, // base .ARM_BRAVA => &Target.aarch64.cpu.apple_m4, // pro/max else => return null, }; return Target.Cpu{ .arch = current_arch, .model = model, .features = model.features, }; }, else => {}, } return null; }