authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-19 23:20:33+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-10-20 02:55:15+02:00
logdff54eecb0b4a49ebbbf4d90a8196c90631b853f
treea1b5da590df527c9aced247791330a28f83c32d6
parentcfec358de1bac861a962731444168a2863e970c9
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

update_cpu_features: omit optional features on some ARM models by default

ARM insist on having these enabled in LLVM's CPU model definitions by default despite them not actually being required, so we have to do this.

2 files changed, 88 insertions(+), 69 deletions(-)

lib/std/Target/arm.zig+2-17
...@@ -2285,12 +2285,10 @@ pub const cpu = struct {...@@ -2285,12 +2285,10 @@ pub const cpu = struct {
2285 .name = "cortex_m52",2285 .name = "cortex_m52",
2286 .llvm_name = "cortex-m52",2286 .llvm_name = "cortex-m52",
2287 .features = featureSet(&[_]Feature{2287 .features = featureSet(&[_]Feature{
2288 .fp_armv8d16,2288 .dsp,
2289 .loop_align,2289 .loop_align,
2290 .mve1beat,2290 .mve1beat,
2291 .mve_fp,
2292 .no_branch_predictor,2291 .no_branch_predictor,
2293 .pacbti,
2294 .slowfpvmlx,2292 .slowfpvmlx,
2295 .use_misched,2293 .use_misched,
2296 .v8_1m_main,2294 .v8_1m_main,
...@@ -2364,16 +2362,13 @@ pub const cpu = struct {...@@ -2364,16 +2362,13 @@ pub const cpu = struct {
2364 .slowfpvfmx,2362 .slowfpvfmx,
2365 .slowfpvmlx,2363 .slowfpvmlx,
2366 .v7r,2364 .v7r,
2367 .vfp3d16,
2368 }),2365 }),
2369 };2366 };
2370 pub const cortex_r52: CpuModel = .{2367 pub const cortex_r52: CpuModel = .{
2371 .name = "cortex_r52",2368 .name = "cortex_r52",
2372 .llvm_name = "cortex-r52",2369 .llvm_name = "cortex-r52",
2373 .features = featureSet(&[_]Feature{2370 .features = featureSet(&[_]Feature{
2374 .fp_armv8,
2375 .fpao,2371 .fpao,
2376 .neon,
2377 .use_misched,2372 .use_misched,
2378 .v8r,2373 .v8r,
2379 }),2374 }),
...@@ -2382,9 +2377,7 @@ pub const cpu = struct {...@@ -2382,9 +2377,7 @@ pub const cpu = struct {
2382 .name = "cortex_r52plus",2377 .name = "cortex_r52plus",
2383 .llvm_name = "cortex-r52plus",2378 .llvm_name = "cortex-r52plus",
2384 .features = featureSet(&[_]Feature{2379 .features = featureSet(&[_]Feature{
2385 .fp_armv8,
2386 .fpao,2380 .fpao,
2387 .neon,
2388 .use_misched,2381 .use_misched,
2389 .v8r,2382 .v8r,
2390 }),2383 }),
...@@ -2394,7 +2387,6 @@ pub const cpu = struct {...@@ -2394,7 +2387,6 @@ pub const cpu = struct {
2394 .llvm_name = "cortex-r7",2387 .llvm_name = "cortex-r7",
2395 .features = featureSet(&[_]Feature{2388 .features = featureSet(&[_]Feature{
2396 .avoid_partial_cpsr,2389 .avoid_partial_cpsr,
2397 .fp16,
2398 .hwdiv_arm,2390 .hwdiv_arm,
2399 .mp,2391 .mp,
2400 .ret_addr_stack,2392 .ret_addr_stack,
...@@ -2402,7 +2394,6 @@ pub const cpu = struct {...@@ -2402,7 +2394,6 @@ pub const cpu = struct {
2402 .slowfpvfmx,2394 .slowfpvfmx,
2403 .slowfpvmlx,2395 .slowfpvmlx,
2404 .v7r,2396 .v7r,
2405 .vfp3d16,
2406 }),2397 }),
2407 };2398 };
2408 pub const cortex_r8: CpuModel = .{2399 pub const cortex_r8: CpuModel = .{
...@@ -2410,7 +2401,6 @@ pub const cpu = struct {...@@ -2410,7 +2401,6 @@ pub const cpu = struct {
2410 .llvm_name = "cortex-r8",2401 .llvm_name = "cortex-r8",
2411 .features = featureSet(&[_]Feature{2402 .features = featureSet(&[_]Feature{
2412 .avoid_partial_cpsr,2403 .avoid_partial_cpsr,
2413 .fp16,
2414 .hwdiv_arm,2404 .hwdiv_arm,
2415 .mp,2405 .mp,
2416 .ret_addr_stack,2406 .ret_addr_stack,
...@@ -2418,7 +2408,6 @@ pub const cpu = struct {...@@ -2418,7 +2408,6 @@ pub const cpu = struct {
2418 .slowfpvfmx,2408 .slowfpvfmx,
2419 .slowfpvmlx,2409 .slowfpvmlx,
2420 .v7r,2410 .v7r,
2421 .vfp3d16,
2422 }),2411 }),
2423 };2412 };
2424 pub const cortex_x1: CpuModel = .{2413 pub const cortex_x1: CpuModel = .{
...@@ -2666,9 +2655,7 @@ pub const cpu = struct {...@@ -2666,9 +2655,7 @@ pub const cpu = struct {
2666 .llvm_name = "star-mc1",2655 .llvm_name = "star-mc1",
2667 .features = featureSet(&[_]Feature{2656 .features = featureSet(&[_]Feature{
2668 .avoid_muls,2657 .avoid_muls,
2669 .dsp,
2670 .fix_cmse_cve_2021_35465,2658 .fix_cmse_cve_2021_35465,
2671 .fp_armv8d16sp,
2672 .loop_align,2659 .loop_align,
2673 .no_branch_predictor,2660 .no_branch_predictor,
2674 .slowfpvfmx,2661 .slowfpvfmx,
...@@ -2681,12 +2668,10 @@ pub const cpu = struct {...@@ -2681,12 +2668,10 @@ pub const cpu = struct {
2681 .name = "star_mc3",2668 .name = "star_mc3",
2682 .llvm_name = "star-mc3",2669 .llvm_name = "star-mc3",
2683 .features = featureSet(&[_]Feature{2670 .features = featureSet(&[_]Feature{
2684 .fp_armv8d16,2671 .dsp,
2685 .loop_align,2672 .loop_align,
2686 .mve1beat,2673 .mve1beat,
2687 .mve_fp,
2688 .no_branch_predictor,2674 .no_branch_predictor,
2689 .pacbti,
2690 .slowfpvmlx,2675 .slowfpvmlx,
2691 .use_misched,2676 .use_misched,
2692 .v8_1m_main,2677 .v8_1m_main,
tools/update_cpu_features.zig+86-52
...@@ -614,87 +614,87 @@ const targets = [_]ArchTarget{...@@ -614,87 +614,87 @@ const targets = [_]ArchTarget{
614 .branch_quota = 10000,614 .branch_quota = 10000,
615 .feature_overrides = &.{615 .feature_overrides = &.{
616 .{616 .{
617 .llvm_name = "exynos",617 .llvm_name = "a5",
618 .flatten = true,618 .flatten = true,
619 },619 },
620 .{620 .{
621 .llvm_name = "cortex-a78",621 .llvm_name = "a7",
622 .flatten = true,622 .flatten = true,
623 },623 },
624 .{624 .{
625 .llvm_name = "cortex-a78ae",625 .llvm_name = "a8",
626 .flatten = true,626 .flatten = true,
627 },627 },
628 .{628 .{
629 .llvm_name = "cortex-a710",629 .llvm_name = "a9",
630 .flatten = true,630 .flatten = true,
631 },631 },
632 .{632 .{
633 .llvm_name = "cortex-m4",633 .llvm_name = "a12",
634 .omit_deps = &.{"vfp4d16sp"},634 .flatten = true,
635 },635 },
636 .{636 .{
637 .llvm_name = "cortex-m7",637 .llvm_name = "a15",
638 .omit_deps = &.{"fp_armv8d16"},638 .flatten = true,
639 },639 },
640 .{640 .{
641 .llvm_name = "cortex-m33",641 .llvm_name = "a17",
642 .omit_deps = &.{ "fp_armv8d16sp", "dsp" },642 .flatten = true,
643 },643 },
644 .{644 .{
645 .llvm_name = "cortex-m35p",645 .llvm_name = "a32",
646 .omit_deps = &.{ "fp_armv8d16sp", "dsp" },646 .flatten = true,
647 },647 },
648 .{648 .{
649 .llvm_name = "cortex-m55",649 .llvm_name = "a35",
650 .omit_deps = &.{ "mve_fp", "fp_armv8d16" },650 .flatten = true,
651 },651 },
652 .{652 .{
653 .llvm_name = "cortex-m85",653 .llvm_name = "a53",
654 .omit_deps = &.{ "mve_fp", "pacbti", "fp_armv8d16" },654 .flatten = true,
655 },655 },
656 .{656 .{
657 .llvm_name = "cortex-x1c",657 .llvm_name = "a55",
658 .flatten = true,658 .flatten = true,
659 },659 },
660 .{660 .{
661 .llvm_name = "r4",661 .llvm_name = "a57",
662 .flatten = true,662 .flatten = true,
663 },663 },
664 .{664 .{
665 .llvm_name = "r52plus",665 .llvm_name = "a72",
666 .flatten = true,666 .flatten = true,
667 },667 },
668 .{668 .{
669 .llvm_name = "r5",669 .llvm_name = "a73",
670 .flatten = true,670 .flatten = true,
671 },671 },
672 .{672 .{
673 .llvm_name = "r52",673 .llvm_name = "a75",
674 .flatten = true,674 .flatten = true,
675 },675 },
676 .{676 .{
677 .llvm_name = "r7",677 .llvm_name = "a76",
678 .flatten = true,678 .flatten = true,
679 },679 },
680 .{680 .{
681 .llvm_name = "m3",681 .llvm_name = "a77",
682 .flatten = true,682 .flatten = true,
683 },683 },
684 .{684 .{
685 .llvm_name = "m7",685 .llvm_name = "a78c",
686 .flatten = true,686 .flatten = true,
687 },687 },
688 .{688 .{
689 .llvm_name = "krait",689 .llvm_name = "cortex-a78",
690 .flatten = true,690 .flatten = true,
691 },691 },
692 .{692 .{
693 .llvm_name = "kryo",693 .llvm_name = "cortex-a78ae",
694 .flatten = true,694 .flatten = true,
695 },695 },
696 .{696 .{
697 .llvm_name = "swift",697 .llvm_name = "cortex-a710",
698 .flatten = true,698 .flatten = true,
699 },699 },
700 .{700 .{
...@@ -702,81 +702,115 @@ const targets = [_]ArchTarget{...@@ -702,81 +702,115 @@ const targets = [_]ArchTarget{
702 .flatten = true,702 .flatten = true,
703 },703 },
704 .{704 .{
705 .llvm_name = "neoverse-v1",705 .llvm_name = "cortex-x1c",
706 .flatten = true,706 .flatten = true,
707 },707 },
708 .{708 .{
709 .llvm_name = "a5",709 .llvm_name = "exynos",
710 .flatten = true,710 .flatten = true,
711 },711 },
712 .{712 .{
713 .llvm_name = "a7",713 .llvm_name = "krait",
714 .flatten = true,714 .flatten = true,
715 },715 },
716 .{716 .{
717 .llvm_name = "a8",717 .llvm_name = "kryo",
718 .flatten = true,718 .flatten = true,
719 },719 },
720 .{720 .{
721 .llvm_name = "a9",721 .llvm_name = "m3",
722 .flatten = true,722 .flatten = true,
723 },723 },
724 .{724 .{
725 .llvm_name = "a12",725 .llvm_name = "m7",
726 .flatten = true,726 .flatten = true,
727 },727 },
728 .{728 .{
729 .llvm_name = "a15",729 .llvm_name = "neoverse-v1",
730 .flatten = true,730 .flatten = true,
731 },731 },
732 .{732 .{
733 .llvm_name = "a17",733 .llvm_name = "r4",
734 .flatten = true,734 .flatten = true,
735 },735 },
736 .{736 .{
737 .llvm_name = "a32",737 .llvm_name = "r5",
738 .flatten = true,738 .flatten = true,
739 },739 },
740 .{740 .{
741 .llvm_name = "a35",741 .llvm_name = "r7",
742 .flatten = true,742 .flatten = true,
743 },743 },
744 .{744 .{
745 .llvm_name = "a53",745 .llvm_name = "r52",
746 .flatten = true,746 .flatten = true,
747 },747 },
748 .{748 .{
749 .llvm_name = "a55",749 .llvm_name = "r52plus",
750 .flatten = true,750 .flatten = true,
751 },751 },
752 .{752 .{
753 .llvm_name = "a57",753 .llvm_name = "swift",
754 .flatten = true,754 .flatten = true,
755 },755 },
756
756 .{757 .{
757 .llvm_name = "a72",758 .llvm_name = "cortex-m4",
758 .flatten = true,759 .omit_deps = &.{"vfp4d16sp"},
759 },760 },
760 .{761 .{
761 .llvm_name = "a73",762 .llvm_name = "cortex-m7",
762 .flatten = true,763 .omit_deps = &.{"fp_armv8d16"},
763 },764 },
764 .{765 .{
765 .llvm_name = "a75",766 .llvm_name = "cortex-m33",
766 .flatten = true,767 .omit_deps = &.{ "dsp", "fp_armv8d16sp" },
767 },768 },
768 .{769 .{
769 .llvm_name = "a76",770 .llvm_name = "cortex-m35p",
770 .flatten = true,771 .omit_deps = &.{ "dsp", "fp_armv8d16sp" },
771 },772 },
772 .{773 .{
773 .llvm_name = "a77",774 .llvm_name = "cortex-m52",
774 .flatten = true,775 .omit_deps = &.{ "fp_armv8d16", "mve_fp", "pacbti" },
775 },776 },
776 .{777 .{
777 .llvm_name = "a78c",778 .llvm_name = "cortex-m55",
778 .flatten = true,779 .omit_deps = &.{ "fp_armv8d16", "mve_fp" },
780 },
781 .{
782 .llvm_name = "cortex-m85",
783 .omit_deps = &.{ "fp_armv8d16", "mve_fp", "pacbti" },
784 },
785 .{
786 .llvm_name = "cortex-r5",
787 .omit_deps = &.{"vfp3d16"},
788 },
789 .{
790 .llvm_name = "cortex-r7",
791 .omit_deps = &.{ "fp16", "vfp3d16" },
792 },
793 .{
794 .llvm_name = "cortex-r8",
795 .omit_deps = &.{ "fp16", "vfp3d16" },
796 },
797 .{
798 .llvm_name = "cortex-r52",
799 .omit_deps = &.{ "fp_armv8", "neon" },
779 },800 },
801 .{
802 .llvm_name = "cortex-r52plus",
803 .omit_deps = &.{ "fp_armv8", "neon" },
804 },
805 .{
806 .llvm_name = "star-mc1",
807 .omit_deps = &.{ "dsp", "fp_armv8d16sp" },
808 },
809 .{
810 .llvm_name = "star-mc3",
811 .omit_deps = &.{ "fp_armv8d16", "mve_fp", "pacbti" },
812 },
813
780 .{814 .{
781 .llvm_name = "armv2",815 .llvm_name = "armv2",
782 .zig_name = "v2",816 .zig_name = "v2",