authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-20 04:34:02+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-20 04:34:30+02:00
log4df60441652914d3228bbd1dc3c05f64b8c16191
tree0290da70448b77b664c051a8eea949df6f027f60
parent373ae071132bd80737d02e474230da7ecd865482
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

update_cpu_features: s/cpu/model/g


1 files changed, 57 insertions(+), 57 deletions(-)

tools/update_cpu_features.zig+57-57
...@@ -23,7 +23,7 @@ const FeatureOverride = struct {...@@ -23,7 +23,7 @@ const FeatureOverride = struct {
23 extra_deps: []const []const u8 = &.{},23 extra_deps: []const []const u8 = &.{},
24};24};
2525
26const CpuOverride = struct {26const ModelOverride = struct {
27 llvm_name: []const u8,27 llvm_name: []const u8,
28 /// If true, completely omit the CPU; as if it does not exist.28 /// If true, completely omit the CPU; as if it does not exist.
29 omit: bool = false,29 omit: bool = false,
...@@ -33,7 +33,7 @@ const CpuOverride = struct {...@@ -33,7 +33,7 @@ const CpuOverride = struct {
33 extra_deps: []const []const u8 = &.{},33 extra_deps: []const []const u8 = &.{},
34};34};
3535
36const Cpu = struct {36const Model = struct {
37 llvm_name: ?[]const u8,37 llvm_name: ?[]const u8,
38 zig_name: []const u8,38 zig_name: []const u8,
39 features: []const []const u8,39 features: []const []const u8,
...@@ -55,8 +55,8 @@ const ArchTarget = struct {...@@ -55,8 +55,8 @@ const ArchTarget = struct {
55 },55 },
56 feature_overrides: []const FeatureOverride = &.{},56 feature_overrides: []const FeatureOverride = &.{},
57 extra_features: []const Feature = &.{},57 extra_features: []const Feature = &.{},
58 cpu_overrides: []const CpuOverride = &.{},58 model_overrides: []const ModelOverride = &.{},
59 extra_cpus: []const Cpu = &.{},59 extra_models: []const Model = &.{},
60 branch_quota: ?usize = null,60 branch_quota: ?usize = null,
61};61};
6262
...@@ -442,7 +442,7 @@ const targets = [_]ArchTarget{...@@ -442,7 +442,7 @@ const targets = [_]ArchTarget{
442 .flatten = true,442 .flatten = true,
443 },443 },
444 },444 },
445 .cpu_overrides = &.{445 .model_overrides = &.{
446 .{446 .{
447 // Who thought this alias was a good idea? Upgrade your compiler and suddenly your447 // Who thought this alias was a good idea? Upgrade your compiler and suddenly your
448 // programs SIGILL because this changed meaning. Brilliant.448 // programs SIGILL because this changed meaning. Brilliant.
...@@ -450,7 +450,7 @@ const targets = [_]ArchTarget{...@@ -450,7 +450,7 @@ const targets = [_]ArchTarget{
450 .omit = true,450 .omit = true,
451 },451 },
452 },452 },
453 .extra_cpus = &.{453 .extra_models = &.{
454 .{454 .{
455 .llvm_name = null,455 .llvm_name = null,
456 .zig_name = "exynos_m1",456 .zig_name = "exynos_m1",
...@@ -529,7 +529,7 @@ const targets = [_]ArchTarget{...@@ -529,7 +529,7 @@ const targets = [_]ArchTarget{
529 .deps = &.{},529 .deps = &.{},
530 },530 },
531 },531 },
532 .extra_cpus = &.{532 .extra_models = &.{
533 .{533 .{
534 .llvm_name = null,534 .llvm_name = null,
535 .zig_name = "ev4",535 .zig_name = "ev4",
...@@ -1100,7 +1100,7 @@ const targets = [_]ArchTarget{...@@ -1100,7 +1100,7 @@ const targets = [_]ArchTarget{
1100 .deps = &.{"strict_align"},1100 .deps = &.{"strict_align"},
1101 },1101 },
1102 },1102 },
1103 .cpu_overrides = &.{1103 .model_overrides = &.{
1104 .{1104 .{
1105 .llvm_name = "cortex-m4",1105 .llvm_name = "cortex-m4",
1106 .omit_deps = &.{"vfp4d16sp"},1106 .omit_deps = &.{"vfp4d16sp"},
...@@ -1158,7 +1158,7 @@ const targets = [_]ArchTarget{...@@ -1158,7 +1158,7 @@ const targets = [_]ArchTarget{
1158 .omit_deps = &.{ "fp_armv8d16", "mve_fp", "pacbti" },1158 .omit_deps = &.{ "fp_armv8d16", "mve_fp", "pacbti" },
1159 },1159 },
1160 },1160 },
1161 .extra_cpus = &.{1161 .extra_models = &.{
1162 .{1162 .{
1163 .llvm_name = "generic",1163 .llvm_name = "generic",
1164 .zig_name = "baseline",1164 .zig_name = "baseline",
...@@ -1318,7 +1318,7 @@ const targets = [_]ArchTarget{...@@ -1318,7 +1318,7 @@ const targets = [_]ArchTarget{
1318 .deps = &.{ "max_2", "v1_1" },1318 .deps = &.{ "max_2", "v1_1" },
1319 },1319 },
1320 },1320 },
1321 .extra_cpus = &.{1321 .extra_models = &.{
1322 .{1322 .{
1323 .llvm_name = null,1323 .llvm_name = null,
1324 .zig_name = "ts_1",1324 .zig_name = "ts_1",
...@@ -1454,7 +1454,7 @@ const targets = [_]ArchTarget{...@@ -1454,7 +1454,7 @@ const targets = [_]ArchTarget{
1454 .deps = &.{"v3_2"},1454 .deps = &.{"v3_2"},
1455 },1455 },
1456 },1456 },
1457 .extra_cpus = &.{1457 .extra_models = &.{
1458 .{1458 .{
1459 .llvm_name = null,1459 .llvm_name = null,
1460 .zig_name = "coolidge_v1",1460 .zig_name = "coolidge_v1",
...@@ -1484,7 +1484,7 @@ const targets = [_]ArchTarget{...@@ -1484,7 +1484,7 @@ const targets = [_]ArchTarget{
1484 .name = "LoongArch",1484 .name = "LoongArch",
1485 .td_name = "LoongArch",1485 .td_name = "LoongArch",
1486 },1486 },
1487 .cpu_overrides = &.{1487 .model_overrides = &.{
1488 .{1488 .{
1489 .llvm_name = "generic",1489 .llvm_name = "generic",
1490 .omit = true,1490 .omit = true,
...@@ -1502,7 +1502,7 @@ const targets = [_]ArchTarget{...@@ -1502,7 +1502,7 @@ const targets = [_]ArchTarget{
1502 .omit = true,1502 .omit = true,
1503 },1503 },
1504 },1504 },
1505 .extra_cpus = &.{1505 .extra_models = &.{
1506 .{1506 .{
1507 .llvm_name = null,1507 .llvm_name = null,
1508 .zig_name = "generic_la64",1508 .zig_name = "generic_la64",
...@@ -1581,7 +1581,7 @@ const targets = [_]ArchTarget{...@@ -1581,7 +1581,7 @@ const targets = [_]ArchTarget{
1581 .deps = &.{},1581 .deps = &.{},
1582 },1582 },
1583 },1583 },
1584 .extra_cpus = &.{1584 .extra_models = &.{
1585 .{1585 .{
1586 .llvm_name = null,1586 .llvm_name = null,
1587 .zig_name = "r3000a",1587 .zig_name = "r3000a",
...@@ -1633,13 +1633,13 @@ const targets = [_]ArchTarget{...@@ -1633,13 +1633,13 @@ const targets = [_]ArchTarget{
1633 .omit = true,1633 .omit = true,
1634 },1634 },
1635 },1635 },
1636 .cpu_overrides = &.{1636 .model_overrides = &.{
1637 .{1637 .{
1638 .llvm_name = "ppc32",1638 .llvm_name = "ppc32",
1639 .omit = true,1639 .omit = true,
1640 },1640 },
1641 },1641 },
1642 .extra_cpus = &.{1642 .extra_models = &.{
1643 .{1643 .{
1644 .llvm_name = null,1644 .llvm_name = null,
1645 .zig_name = "cell",1645 .zig_name = "cell",
...@@ -1686,7 +1686,7 @@ const targets = [_]ArchTarget{...@@ -1686,7 +1686,7 @@ const targets = [_]ArchTarget{
1686 .deps = &.{},1686 .deps = &.{},
1687 },1687 },
1688 },1688 },
1689 .extra_cpus = &.{1689 .extra_models = &.{
1690 .{1690 .{
1691 .llvm_name = null,1691 .llvm_name = null,
1692 .zig_name = "p1",1692 .zig_name = "p1",
...@@ -1707,7 +1707,7 @@ const targets = [_]ArchTarget{...@@ -1707,7 +1707,7 @@ const targets = [_]ArchTarget{
1707 },1707 },
1708 .branch_quota = 2000,1708 .branch_quota = 2000,
1709 .extra_features = spirv_extra_features,1709 .extra_features = spirv_extra_features,
1710 .extra_cpus = &.{1710 .extra_models = &.{
1711 .{1711 .{
1712 .llvm_name = null,1712 .llvm_name = null,
1713 .zig_name = "vulkan_v1_2",1713 .zig_name = "vulkan_v1_2",
...@@ -1733,7 +1733,7 @@ const targets = [_]ArchTarget{...@@ -1733,7 +1733,7 @@ const targets = [_]ArchTarget{
1733 .flatten = true,1733 .flatten = true,
1734 },1734 },
1735 },1735 },
1736 .extra_cpus = &.{1736 .extra_models = &.{
1737 .{1737 .{
1738 .llvm_name = null,1738 .llvm_name = null,
1739 .zig_name = "baseline_rv32",1739 .zig_name = "baseline_rv32",
...@@ -1773,13 +1773,13 @@ const targets = [_]ArchTarget{...@@ -1773,13 +1773,13 @@ const targets = [_]ArchTarget{
1773 .deps = &.{},1773 .deps = &.{},
1774 },1774 },
1775 },1775 },
1776 .cpu_overrides = &.{1776 .model_overrides = &.{
1777 .{1777 .{
1778 .llvm_name = "generic",1778 .llvm_name = "generic",
1779 .omit = true,1779 .omit = true,
1780 },1780 },
1781 },1781 },
1782 .extra_cpus = &.{1782 .extra_models = &.{
1783 .{1783 .{
1784 .llvm_name = null,1784 .llvm_name = null,
1785 .zig_name = "ve10",1785 .zig_name = "ve10",
...@@ -1830,7 +1830,7 @@ const targets = [_]ArchTarget{...@@ -1830,7 +1830,7 @@ const targets = [_]ArchTarget{
1830 .deps = &.{"bulk_memory_opt"},1830 .deps = &.{"bulk_memory_opt"},
1831 },1831 },
1832 },1832 },
1833 .cpu_overrides = &.{1833 .model_overrides = &.{
1834 .{1834 .{
1835 .llvm_name = "bleeding-edge",1835 .llvm_name = "bleeding-edge",
1836 .omit = true,1836 .omit = true,
...@@ -1840,7 +1840,7 @@ const targets = [_]ArchTarget{...@@ -1840,7 +1840,7 @@ const targets = [_]ArchTarget{
1840 .omit = true,1840 .omit = true,
1841 },1841 },
1842 },1842 },
1843 .extra_cpus = &.{1843 .extra_models = &.{
1844 .{1844 .{
1845 .llvm_name = null,1845 .llvm_name = null,
1846 .zig_name = "wasm_v1_0",1846 .zig_name = "wasm_v1_0",
...@@ -1951,7 +1951,7 @@ const targets = [_]ArchTarget{...@@ -1951,7 +1951,7 @@ const targets = [_]ArchTarget{
1951 .deps = &.{},1951 .deps = &.{},
1952 },1952 },
1953 },1953 },
1954 .cpu_overrides = &.{1954 .model_overrides = &.{
1955 .{1955 .{
1956 .llvm_name = "amdfam10",1956 .llvm_name = "amdfam10",
1957 .extra_deps = &.{"3dnowa"},1957 .extra_deps = &.{"3dnowa"},
...@@ -2291,7 +2291,7 @@ const targets = [_]ArchTarget{...@@ -2291,7 +2291,7 @@ const targets = [_]ArchTarget{
2291 .omit = true,2291 .omit = true,
2292 },2292 },
2293 },2293 },
2294 .extra_cpus = &.{2294 .extra_models = &.{
2295 .{2295 .{
2296 .llvm_name = null,2296 .llvm_name = null,
2297 .zig_name = "i86",2297 .zig_name = "i86",
...@@ -2327,7 +2327,7 @@ const targets = [_]ArchTarget{...@@ -2327,7 +2327,7 @@ const targets = [_]ArchTarget{
2327 .deps = &.{"xs3"},2327 .deps = &.{"xs3"},
2328 },2328 },
2329 },2329 },
2330 .cpu_overrides = &.{2330 .model_overrides = &.{
2331 .{2331 .{
2332 .llvm_name = "generic",2332 .llvm_name = "generic",
2333 .omit = true,2333 .omit = true,
...@@ -2337,7 +2337,7 @@ const targets = [_]ArchTarget{...@@ -2337,7 +2337,7 @@ const targets = [_]ArchTarget{
2337 .omit = true,2337 .omit = true,
2338 },2338 },
2339 },2339 },
2340 .extra_cpus = &.{2340 .extra_models = &.{
2341 .{2341 .{
2342 .llvm_name = null,2342 .llvm_name = null,
2343 .zig_name = "xs1b",2343 .zig_name = "xs1b",
...@@ -2449,7 +2449,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2449,7 +2449,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {
24492449
2450 var features_table = std.StringHashMap(Feature).init(arena);2450 var features_table = std.StringHashMap(Feature).init(arena);
2451 var all_features = std.array_list.Managed(Feature).init(arena);2451 var all_features = std.array_list.Managed(Feature).init(arena);
2452 var all_cpus = std.array_list.Managed(Cpu).init(arena);2452 var all_models = std.array_list.Managed(Model).init(arena);
24532453
2454 if (target.llvm) |llvm| {2454 if (target.llvm) |llvm| {
2455 const tblgen_progress = progress_node.start("running llvm-tblgen", 0);2455 const tblgen_progress = progress_node.start("running llvm-tblgen", 0);
...@@ -2509,7 +2509,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2509,7 +2509,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2509 llvm: []const u8,2509 llvm: []const u8,
2510 zig: []const u8,2510 zig: []const u8,
2511 };2511 };
2512 var cpu_aliases = std.StringHashMap(std.ArrayList(*Alias)).init(arena);2512 var model_aliases = std.StringHashMap(std.ArrayList(*Alias)).init(arena);
25132513
2514 {2514 {
2515 var it = root_map.iterator();2515 var it = root_map.iterator();
...@@ -2523,7 +2523,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2523,7 +2523,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2523 const llvm_alias = kv.value_ptr.object.get("Name").?.string;2523 const llvm_alias = kv.value_ptr.object.get("Name").?.string;
2524 const llvm_name = kv.value_ptr.object.get("Alias").?.string;2524 const llvm_name = kv.value_ptr.object.get("Alias").?.string;
25252525
2526 const gop = try cpu_aliases.getOrPut(try llvmNameToZigName(arena, llvm_name));2526 const gop = try model_aliases.getOrPut(try llvmNameToZigName(arena, llvm_name));
25272527
2528 if (!gop.found_existing) {2528 if (!gop.found_existing) {
2529 gop.value_ptr.* = .empty;2529 gop.value_ptr.* = .empty;
...@@ -2634,16 +2634,16 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2634,16 +2634,16 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2634 var deps = std.array_list.Managed([]const u8).init(arena);2634 var deps = std.array_list.Managed([]const u8).init(arena);
2635 var omit_deps: []const []const u8 = &.{};2635 var omit_deps: []const []const u8 = &.{};
2636 var extra_deps: []const []const u8 = &.{};2636 var extra_deps: []const []const u8 = &.{};
2637 const omitted = for (target.cpu_overrides) |cpu_override| {2637 const omitted = for (target.model_overrides) |model_override| {
2638 if (mem.eql(u8, llvm_name, cpu_override.llvm_name)) {2638 if (mem.eql(u8, llvm_name, model_override.llvm_name)) {
2639 if (cpu_override.omit) {2639 if (model_override.omit) {
2640 break true;2640 break true;
2641 }2641 }
2642 if (cpu_override.zig_name) |override_name| {2642 if (model_override.zig_name) |override_name| {
2643 zig_name = override_name;2643 zig_name = override_name;
2644 }2644 }
2645 omit_deps = cpu_override.omit_deps;2645 omit_deps = model_override.omit_deps;
2646 extra_deps = cpu_override.extra_deps;2646 extra_deps = model_override.extra_deps;
2647 break false;2647 break false;
2648 }2648 }
2649 } else false;2649 } else false;
...@@ -2681,19 +2681,19 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2681,19 +2681,19 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2681 )) orelse continue;2681 )) orelse continue;
2682 try deps.append(feature_zig_name);2682 try deps.append(feature_zig_name);
2683 }2683 }
2684 try all_cpus.append(.{2684 try all_models.append(.{
2685 .llvm_name = llvm_name,2685 .llvm_name = llvm_name,
2686 .zig_name = zig_name,2686 .zig_name = zig_name,
2687 .features = deps.items,2687 .features = deps.items,
2688 });2688 });
26892689
2690 if (cpu_aliases.get(zig_name)) |aliases| {2690 if (model_aliases.get(zig_name)) |aliases| {
2691 alias_it: for (aliases.items) |alias| {2691 alias_it: for (aliases.items) |alias| {
2692 for (target.cpu_overrides) |cpu_override| {2692 for (target.model_overrides) |model_override| {
2693 if (mem.eql(u8, alias.llvm, cpu_override.llvm_name) and cpu_override.omit) continue :alias_it;2693 if (mem.eql(u8, alias.llvm, model_override.llvm_name) and model_override.omit) continue :alias_it;
2694 }2694 }
26952695
2696 try all_cpus.append(.{2696 try all_models.append(.{
2697 .llvm_name = alias.llvm,2697 .llvm_name = alias.llvm,
2698 .zig_name = alias.zig,2698 .zig_name = alias.zig,
2699 .features = deps.items,2699 .features = deps.items,
...@@ -2711,11 +2711,11 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2711,11 +2711,11 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2711 try features_table.put(extra_feature.zig_name, extra_feature);2711 try features_table.put(extra_feature.zig_name, extra_feature);
2712 try all_features.append(extra_feature);2712 try all_features.append(extra_feature);
2713 }2713 }
2714 for (target.extra_cpus) |extra_cpu| {2714 for (target.extra_models) |extra_model| {
2715 try all_cpus.append(extra_cpu);2715 try all_models.append(extra_model);
2716 }2716 }
2717 mem.sort(Feature, all_features.items, {}, featureLessThan);2717 mem.sort(Feature, all_features.items, {}, featureLessThan);
2718 mem.sort(Cpu, all_cpus.items, {}, cpuLessThan);2718 mem.sort(Model, all_models.items, {}, modelLessThan);
27192719
2720 const render_progress = progress_node.start("rendering Zig code", 0);2720 const render_progress = progress_node.start("rendering Zig code", 0);
27212721
...@@ -2838,29 +2838,29 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2838,29 +2838,29 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2838 \\pub const cpu = struct {2838 \\pub const cpu = struct {
2839 \\2839 \\
2840 );2840 );
2841 for (all_cpus.items) |cpu| {2841 for (all_models.items) |model| {
2842 var deps_set = std.StringHashMap(void).init(arena);2842 var deps_set = std.StringHashMap(void).init(arena);
2843 for (cpu.features) |feature_zig_name| {2843 for (model.features) |feature_zig_name| {
2844 try putDep(&deps_set, features_table, feature_zig_name);2844 try putDep(&deps_set, features_table, feature_zig_name);
2845 }2845 }
2846 try pruneFeatures(arena, features_table, &deps_set);2846 try pruneFeatures(arena, features_table, &deps_set);
2847 var cpu_features = std.array_list.Managed([]const u8).init(arena);2847 var model_features = std.array_list.Managed([]const u8).init(arena);
2848 {2848 {
2849 var it = deps_set.keyIterator();2849 var it = deps_set.keyIterator();
2850 while (it.next()) |key| {2850 while (it.next()) |key| {
2851 try cpu_features.append(key.*);2851 try model_features.append(key.*);
2852 }2852 }
2853 }2853 }
2854 mem.sort([]const u8, cpu_features.items, {}, asciiLessThan);2854 mem.sort([]const u8, model_features.items, {}, asciiLessThan);
2855 if (cpu.llvm_name) |llvm_name| {2855 if (model.llvm_name) |llvm_name| {
2856 try w.print(2856 try w.print(
2857 \\ pub const {f}: CpuModel = .{{2857 \\ pub const {f}: CpuModel = .{{
2858 \\ .name = "{f}",2858 \\ .name = "{f}",
2859 \\ .llvm_name = "{f}",2859 \\ .llvm_name = "{f}",
2860 \\ .features = featureSet(&[_]Feature{{2860 \\ .features = featureSet(&[_]Feature{{
2861 , .{2861 , .{
2862 std.zig.fmtId(cpu.zig_name),2862 std.zig.fmtId(model.zig_name),
2863 std.zig.fmtString(cpu.zig_name),2863 std.zig.fmtString(model.zig_name),
2864 std.zig.fmtString(llvm_name),2864 std.zig.fmtString(llvm_name),
2865 });2865 });
2866 } else {2866 } else {
...@@ -2870,11 +2870,11 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2870,11 +2870,11 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2870 \\ .llvm_name = null,2870 \\ .llvm_name = null,
2871 \\ .features = featureSet(&[_]Feature{{2871 \\ .features = featureSet(&[_]Feature{{
2872 , .{2872 , .{
2873 std.zig.fmtId(cpu.zig_name),2873 std.zig.fmtId(model.zig_name),
2874 std.zig.fmtString(cpu.zig_name),2874 std.zig.fmtString(model.zig_name),
2875 });2875 });
2876 }2876 }
2877 if (cpu_features.items.len == 0) {2877 if (model_features.items.len == 0) {
2878 try w.writeAll(2878 try w.writeAll(
2879 \\}),2879 \\}),
2880 \\ };2880 \\ };
...@@ -2882,7 +2882,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {...@@ -2882,7 +2882,7 @@ fn processOneTargetInner(io: Io, job: Job) !void {
2882 );2882 );
2883 } else {2883 } else {
2884 try w.writeAll("\n");2884 try w.writeAll("\n");
2885 for (cpu_features.items) |feature_zig_name| {2885 for (model_features.items) |feature_zig_name| {
2886 try w.print(" .{f},\n", .{std.zig.fmtIdPU(feature_zig_name)});2886 try w.print(" .{f},\n", .{std.zig.fmtIdPU(feature_zig_name)});
2887 }2887 }
2888 try w.writeAll(2888 try w.writeAll(
...@@ -2920,7 +2920,7 @@ fn featureLessThan(_: void, a: Feature, b: Feature) bool {...@@ -2920,7 +2920,7 @@ fn featureLessThan(_: void, a: Feature, b: Feature) bool {
2920 return std.ascii.lessThanIgnoreCase(a.zig_name, b.zig_name);2920 return std.ascii.lessThanIgnoreCase(a.zig_name, b.zig_name);
2921}2921}
29222922
2923fn cpuLessThan(_: void, a: Cpu, b: Cpu) bool {2923fn modelLessThan(_: void, a: Model, b: Model) bool {
2924 return std.ascii.lessThanIgnoreCase(a.zig_name, b.zig_name);2924 return std.ascii.lessThanIgnoreCase(a.zig_name, b.zig_name);
2925}2925}
29262926