authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-16 17:25:48-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-12-16 17:25:48-07:00
log8f1408578cb255fbbdc555d746b25cefb331105e
treee11a39bf04e1627ee5db084e82f64a05220a9a56
parentbbb3403b5dff854b01989882a539b29a9e33d732

update the CPU target features and models

Rather than directly pasting the output from the target-details-generator tool, we have to look at the diff line by line and decide how to incorporate the changes. The baseline abstraction is something that Zig provides. The changes to x86 appear to be incorrect. After LLVM commit 3ad09fd03c51823aeb0bcbd7898aada33e9228d6 the CPU features are stored in a different data layout in their tables, and so we need to update the target details extraction tool to match.

17 files changed, 1049 insertions(+), 1364 deletions(-)

lib/std/target.zig+4-4
...@@ -551,7 +551,7 @@ pub const Target = struct {...@@ -551,7 +551,7 @@ pub const Target = struct {
551 pub const Set = struct {551 pub const Set = struct {
552 ints: [usize_count]usize,552 ints: [usize_count]usize,
553553
554 pub const needed_bit_count = 192;554 pub const needed_bit_count = 172;
555 pub const byte_count = (needed_bit_count + 7) / 8;555 pub const byte_count = (needed_bit_count + 7) / 8;
556 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);556 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
557 pub const Index = std.math.Log2Int(std.meta.Int(.unsigned, usize_count * @bitSizeOf(usize)));557 pub const Index = std.math.Log2Int(std.meta.Int(.unsigned, usize_count * @bitSizeOf(usize)));
...@@ -1149,9 +1149,9 @@ pub const Target = struct {...@@ -1149,9 +1149,9 @@ pub const Target = struct {
11491149
1150 pub fn baseline(arch: Arch) *const Model {1150 pub fn baseline(arch: Arch) *const Model {
1151 return switch (arch) {1151 return switch (arch) {
1152 // .arm, .armeb, .thumb, .thumbeb => &arm.cpu.baseline, // TODO removed in LLVM 121152 .arm, .armeb, .thumb, .thumbeb => &arm.cpu.baseline,
1153 // .riscv32 => &riscv.cpu.baseline_rv32, // TODO removed in LLVM 121153 .riscv32 => &riscv.cpu.baseline_rv32,
1154 // .riscv64 => &riscv.cpu.baseline_rv64, // TODO removed in LLVM 121154 .riscv64 => &riscv.cpu.baseline_rv64,
1155 .i386 => &x86.cpu.pentium4,1155 .i386 => &x86.cpu.pentium4,
1156 .nvptx, .nvptx64 => &nvptx.cpu.sm_20,1156 .nvptx, .nvptx64 => &nvptx.cpu.sm_20,
11571157
lib/std/target/aarch64.zig+274-474
...@@ -8,18 +8,9 @@ const CpuFeature = std.Target.Cpu.Feature;...@@ -8,18 +8,9 @@ const CpuFeature = std.Target.Cpu.Feature;
8const CpuModel = std.Target.Cpu.Model;8const CpuModel = std.Target.Cpu.Model;
99
10pub const Feature = enum {10pub const Feature = enum {
11 CONTEXTIDREL2,11 a34,
12 a35,
13 a53,
14 a55,
15 a57,
16 a64fx,
17 a65,12 a65,
18 a72,
19 a73,
20 a75,
21 a76,13 a76,
22 a77,
23 aes,14 aes,
24 aggressive_fma,15 aggressive_fma,
25 alternate_sextload_cvt_f32_pattern,16 alternate_sextload_cvt_f32_pattern,
...@@ -45,14 +36,11 @@ pub const Feature = enum {...@@ -45,14 +36,11 @@ pub const Feature = enum {
45 call_saved_x18,36 call_saved_x18,
46 call_saved_x8,37 call_saved_x8,
47 call_saved_x9,38 call_saved_x9,
48 carmel,
49 ccdp,39 ccdp,
50 ccidx,40 ccidx,
51 ccpp,41 ccpp,
52 complxnum,42 complxnum,
53 cortex_a78,43 context_id_rel2,
54 cortex_r82,
55 cortex_x1,
56 crc,44 crc,
57 crypto,45 crypto,
58 custom_cheap_as_move,46 custom_cheap_as_move,
...@@ -62,11 +50,9 @@ pub const Feature = enum {...@@ -62,11 +50,9 @@ pub const Feature = enum {
62 ecv,50 ecv,
63 ete,51 ete,
64 exynos_cheap_as_move,52 exynos_cheap_as_move,
65 exynosm3,
66 exynosm4,53 exynosm4,
67 f32mm,54 f32mm,
68 f64mm,55 f64mm,
69 falkor,
70 fgt,56 fgt,
71 fmi,57 fmi,
72 force_32bit_jump_tables,58 force_32bit_jump_tables,
...@@ -82,19 +68,18 @@ pub const Feature = enum {...@@ -82,19 +68,18 @@ pub const Feature = enum {
82 fuse_literals,68 fuse_literals,
83 harden_sls_blr,69 harden_sls_blr,
84 harden_sls_retbr,70 harden_sls_retbr,
85 _i8mm,71 i8mm,
86 jsconv,72 jsconv,
87 kryo,
88 lor,73 lor,
89 lse,74 lse,
90 lsl_fast,75 lsl_fast,
91 mpam,76 mpam,
92 mte,77 mte,
93 neon,78 neon,
94 neoversee1,79 neoverse_e1,
95 neoversen1,80 neoverse_n1,
96 neoversen2,81 neoverse_n2,
97 neoversev1,82 neoverse_v1,
98 no_neg_immediates,83 no_neg_immediates,
99 nv,84 nv,
100 outline_atomics,85 outline_atomics,
...@@ -135,7 +120,6 @@ pub const Feature = enum {...@@ -135,7 +120,6 @@ pub const Feature = enum {
135 reserve_x6,120 reserve_x6,
136 reserve_x7,121 reserve_x7,
137 reserve_x9,122 reserve_x9,
138 saphira,
139 sb,123 sb,
140 sel2,124 sel2,
141 sha2,125 sha2,
...@@ -155,12 +139,6 @@ pub const Feature = enum {...@@ -155,12 +139,6 @@ pub const Feature = enum {
155 sve2_sha3,139 sve2_sha3,
156 sve2_sm4,140 sve2_sm4,
157 tagged_globals,141 tagged_globals,
158 thunderx,
159 thunderx2t99,
160 thunderx3t110,
161 thunderxt81,
162 thunderxt83,
163 thunderxt88,
164 tlb_rmi,142 tlb_rmi,
165 tme,143 tme,
166 tpidr_el1,144 tpidr_el1,
...@@ -168,12 +146,12 @@ pub const Feature = enum {...@@ -168,12 +146,12 @@ pub const Feature = enum {
168 tpidr_el3,146 tpidr_el3,
169 tracev8_4,147 tracev8_4,
170 trbe,148 trbe,
171 tsv110,
172 uaops,149 uaops,
173 use_aa,150 use_aa,
174 use_experimental_zeroing_pseudos,151 use_experimental_zeroing_pseudos,
175 use_postra_scheduler,152 use_postra_scheduler,
176 use_reciprocal_square_root,153 use_reciprocal_square_root,
154 v8a,
177 v8_1a,155 v8_1a,
178 v8_2a,156 v8_2a,
179 v8_3a,157 v8_3a,
...@@ -192,87 +170,18 @@ pub const Feature = enum {...@@ -192,87 +170,18 @@ pub const Feature = enum {
192pub usingnamespace CpuFeature.feature_set_fns(Feature);170pub usingnamespace CpuFeature.feature_set_fns(Feature);
193171
194pub const all_features = blk: {172pub const all_features = blk: {
195 @setEvalBranchQuota(10000);173 @setEvalBranchQuota(2000);
196 const len = @typeInfo(Feature).Enum.fields.len;174 const len = @typeInfo(Feature).Enum.fields.len;
197 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);175 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
198 var result: [len]CpuFeature = undefined;176 var result: [len]CpuFeature = undefined;
199 result[@enumToInt(Feature.CONTEXTIDREL2)] = .{177 result[@enumToInt(Feature.a34)] = .{
200 .llvm_name = "CONTEXTIDREL2",
201 .description = "Enable RW operand CONTEXTIDR_EL2",
202 .dependencies = featureSet(&[_]Feature{}),
203 };
204 result[@enumToInt(Feature.a35)] = .{
205 .llvm_name = "a35",178 .llvm_name = "a35",
206 .description = "Cortex-A35 ARM processors",179 .description = "Cortex-A34 ARM processors",
207 .dependencies = featureSet(&[_]Feature{
208 .crc,
209 .crypto,
210 .fp_armv8,
211 .neon,
212 .perfmon,
213 }),
214 };
215 result[@enumToInt(Feature.a53)] = .{
216 .llvm_name = "a53",
217 .description = "Cortex-A53 ARM processors",
218 .dependencies = featureSet(&[_]Feature{
219 .balance_fp_ops,
220 .crc,
221 .crypto,
222 .custom_cheap_as_move,
223 .fp_armv8,
224 .fuse_aes,
225 .neon,
226 .perfmon,
227 .use_aa,
228 .use_postra_scheduler,
229 }),
230 };
231 result[@enumToInt(Feature.a55)] = .{
232 .llvm_name = "a55",
233 .description = "Cortex-A55 ARM processors",
234 .dependencies = featureSet(&[_]Feature{
235 .crypto,
236 .dotprod,
237 .fp_armv8,
238 .fullfp16,
239 .fuse_aes,
240 .neon,
241 .perfmon,
242 .rcpc,
243 .v8_2a,
244 }),
245 };
246 result[@enumToInt(Feature.a57)] = .{
247 .llvm_name = "a57",
248 .description = "Cortex-A57 ARM processors",
249 .dependencies = featureSet(&[_]Feature{180 .dependencies = featureSet(&[_]Feature{
250 .balance_fp_ops,
251 .crc,181 .crc,
252 .crypto,182 .crypto,
253 .custom_cheap_as_move,
254 .fp_armv8,
255 .fuse_aes,
256 .fuse_literals,
257 .neon,
258 .perfmon,
259 .predictable_select_expensive,
260 .use_postra_scheduler,
261 }),
262 };
263 result[@enumToInt(Feature.a64fx)] = .{
264 .llvm_name = "a64fx",
265 .description = "Fujitsu A64FX processors",
266 .dependencies = featureSet(&[_]Feature{
267 .complxnum,
268 .fp_armv8,
269 .fullfp16,
270 .neon,
271 .perfmon,183 .perfmon,
272 .sha2,184 .v8a,
273 .sve,
274 .use_postra_scheduler,
275 .v8_2a,
276 }),185 }),
277 };186 };
278 result[@enumToInt(Feature.a65)] = .{187 result[@enumToInt(Feature.a65)] = .{
...@@ -290,72 +199,18 @@ pub const all_features = blk: {...@@ -290,72 +199,18 @@ pub const all_features = blk: {
290 .v8_2a,199 .v8_2a,
291 }),200 }),
292 };201 };
293 result[@enumToInt(Feature.a72)] = .{
294 .llvm_name = "a72",
295 .description = "Cortex-A72 ARM processors",
296 .dependencies = featureSet(&[_]Feature{
297 .crc,
298 .crypto,
299 .fp_armv8,
300 .fuse_aes,
301 .neon,
302 .perfmon,
303 }),
304 };
305 result[@enumToInt(Feature.a73)] = .{
306 .llvm_name = "a73",
307 .description = "Cortex-A73 ARM processors",
308 .dependencies = featureSet(&[_]Feature{
309 .crc,
310 .crypto,
311 .fp_armv8,
312 .fuse_aes,
313 .neon,
314 .perfmon,
315 }),
316 };
317 result[@enumToInt(Feature.a75)] = .{
318 .llvm_name = "a75",
319 .description = "Cortex-A75 ARM processors",
320 .dependencies = featureSet(&[_]Feature{
321 .crypto,
322 .dotprod,
323 .fp_armv8,
324 .fullfp16,
325 .fuse_aes,
326 .neon,
327 .perfmon,
328 .rcpc,
329 .v8_2a,
330 }),
331 };
332 result[@enumToInt(Feature.a76)] = .{202 result[@enumToInt(Feature.a76)] = .{
333 .llvm_name = "a76",203 .llvm_name = "a76",
334 .description = "Cortex-A76 ARM processors",204 .description = "Cortex-A76 ARM processors",
335 .dependencies = featureSet(&[_]Feature{205 .dependencies = featureSet(&[_]Feature{
336 .crypto,206 .crypto,
337 .dotprod,207 .dotprod,
338 .fp_armv8,
339 .fullfp16,208 .fullfp16,
340 .neon,
341 .rcpc,209 .rcpc,
342 .ssbs,210 .ssbs,
343 .v8_2a,211 .v8_2a,
344 }),212 }),
345 };213 };
346 result[@enumToInt(Feature.a77)] = .{
347 .llvm_name = "a77",
348 .description = "Cortex-A77 ARM processors",
349 .dependencies = featureSet(&[_]Feature{
350 .crypto,
351 .dotprod,
352 .fp_armv8,
353 .fullfp16,
354 .neon,
355 .rcpc,
356 .v8_2a,
357 }),
358 };
359 result[@enumToInt(Feature.aes)] = .{214 result[@enumToInt(Feature.aes)] = .{
360 .llvm_name = "aes",215 .llvm_name = "aes",
361 .description = "Enable AES support",216 .description = "Enable AES support",
...@@ -564,16 +419,6 @@ pub const all_features = blk: {...@@ -564,16 +419,6 @@ pub const all_features = blk: {
564 .description = "Make X9 callee saved.",419 .description = "Make X9 callee saved.",
565 .dependencies = featureSet(&[_]Feature{}),420 .dependencies = featureSet(&[_]Feature{}),
566 };421 };
567 result[@enumToInt(Feature.carmel)] = .{
568 .llvm_name = "carmel",
569 .description = "Nvidia Carmel processors",
570 .dependencies = featureSet(&[_]Feature{
571 .crypto,
572 .fullfp16,
573 .neon,
574 .v8_2a,
575 }),
576 };
577 result[@enumToInt(Feature.ccdp)] = .{422 result[@enumToInt(Feature.ccdp)] = .{
578 .llvm_name = "ccdp",423 .llvm_name = "ccdp",
579 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",424 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
...@@ -596,48 +441,10 @@ pub const all_features = blk: {...@@ -596,48 +441,10 @@ pub const all_features = blk: {
596 .neon,441 .neon,
597 }),442 }),
598 };443 };
599 result[@enumToInt(Feature.cortex_a78)] = .{444 result[@enumToInt(Feature.context_id_rel2)] = .{
600 .llvm_name = "cortex-a78",445 .llvm_name = "CONTEXTIDREL2",
601 .description = "Cortex-A78 ARM processors",446 .description = "Enable RW operand CONTEXTIDR_EL2",
602 .dependencies = featureSet(&[_]Feature{447 .dependencies = featureSet(&[_]Feature{}),
603 .crypto,
604 .dotprod,
605 .fp_armv8,
606 .fullfp16,
607 .fuse_aes,
608 .neon,
609 .perfmon,
610 .rcpc,
611 .spe,
612 .ssbs,
613 .use_postra_scheduler,
614 .v8_2a,
615 }),
616 };
617 result[@enumToInt(Feature.cortex_r82)] = .{
618 .llvm_name = "cortex-r82",
619 .description = "Cortex-R82 ARM Processors",
620 .dependencies = featureSet(&[_]Feature{
621 .use_postra_scheduler,
622 .v8r,
623 }),
624 };
625 result[@enumToInt(Feature.cortex_x1)] = .{
626 .llvm_name = "cortex-x1",
627 .description = "Cortex-X1 ARM processors",
628 .dependencies = featureSet(&[_]Feature{
629 .crypto,
630 .dotprod,
631 .fp_armv8,
632 .fullfp16,
633 .fuse_aes,
634 .neon,
635 .perfmon,
636 .rcpc,
637 .spe,
638 .use_postra_scheduler,
639 .v8_2a,
640 }),
641 };448 };
642 result[@enumToInt(Feature.crc)] = .{449 result[@enumToInt(Feature.crc)] = .{
643 .llvm_name = "crc",450 .llvm_name = "crc",
...@@ -692,25 +499,6 @@ pub const all_features = blk: {...@@ -692,25 +499,6 @@ pub const all_features = blk: {
692 .custom_cheap_as_move,499 .custom_cheap_as_move,
693 }),500 }),
694 };501 };
695 result[@enumToInt(Feature.exynosm3)] = .{
696 .llvm_name = "exynosm3",
697 .description = "Samsung Exynos-M3 processors",
698 .dependencies = featureSet(&[_]Feature{
699 .crc,
700 .crypto,
701 .exynos_cheap_as_move,
702 .force_32bit_jump_tables,
703 .fuse_address,
704 .fuse_aes,
705 .fuse_csel,
706 .fuse_literals,
707 .lsl_fast,
708 .perfmon,
709 .predictable_select_expensive,
710 .use_postra_scheduler,
711 .zcz_fp,
712 }),
713 };
714 result[@enumToInt(Feature.exynosm4)] = .{502 result[@enumToInt(Feature.exynosm4)] = .{
715 .llvm_name = "exynosm4",503 .llvm_name = "exynosm4",
716 .description = "Samsung Exynos-M4 processors",504 .description = "Samsung Exynos-M4 processors",
...@@ -748,24 +536,6 @@ pub const all_features = blk: {...@@ -748,24 +536,6 @@ pub const all_features = blk: {
748 .sve,536 .sve,
749 }),537 }),
750 };538 };
751 result[@enumToInt(Feature.falkor)] = .{
752 .llvm_name = "falkor",
753 .description = "Qualcomm Falkor processors",
754 .dependencies = featureSet(&[_]Feature{
755 .crc,
756 .crypto,
757 .custom_cheap_as_move,
758 .fp_armv8,
759 .lsl_fast,
760 .neon,
761 .perfmon,
762 .predictable_select_expensive,
763 .rdm,
764 .slow_strqro_store,
765 .use_postra_scheduler,
766 .zcz,
767 }),
768 };
769 result[@enumToInt(Feature.fgt)] = .{539 result[@enumToInt(Feature.fgt)] = .{
770 .llvm_name = "fgt",540 .llvm_name = "fgt",
771 .description = "Enable fine grained virtualization traps extension",541 .description = "Enable fine grained virtualization traps extension",
...@@ -845,7 +615,7 @@ pub const all_features = blk: {...@@ -845,7 +615,7 @@ pub const all_features = blk: {
845 .description = "Harden against straight line speculation across RET and BR instructions",615 .description = "Harden against straight line speculation across RET and BR instructions",
846 .dependencies = featureSet(&[_]Feature{}),616 .dependencies = featureSet(&[_]Feature{}),
847 };617 };
848 result[@enumToInt(Feature._i8mm)] = .{618 result[@enumToInt(Feature.i8mm)] = .{
849 .llvm_name = "i8mm",619 .llvm_name = "i8mm",
850 .description = "Enable Matrix Multiply Int8 Extension",620 .description = "Enable Matrix Multiply Int8 Extension",
851 .dependencies = featureSet(&[_]Feature{}),621 .dependencies = featureSet(&[_]Feature{}),
...@@ -857,22 +627,6 @@ pub const all_features = blk: {...@@ -857,22 +627,6 @@ pub const all_features = blk: {
857 .fp_armv8,627 .fp_armv8,
858 }),628 }),
859 };629 };
860 result[@enumToInt(Feature.kryo)] = .{
861 .llvm_name = "kryo",
862 .description = "Qualcomm Kryo processors",
863 .dependencies = featureSet(&[_]Feature{
864 .crc,
865 .crypto,
866 .custom_cheap_as_move,
867 .fp_armv8,
868 .lsl_fast,
869 .neon,
870 .perfmon,
871 .predictable_select_expensive,
872 .use_postra_scheduler,
873 .zcz,
874 }),
875 };
876 result[@enumToInt(Feature.lor)] = .{630 result[@enumToInt(Feature.lor)] = .{
877 .llvm_name = "lor",631 .llvm_name = "lor",
878 .description = "Enables ARM v8.1 Limited Ordering Regions extension",632 .description = "Enables ARM v8.1 Limited Ordering Regions extension",
...@@ -905,7 +659,7 @@ pub const all_features = blk: {...@@ -905,7 +659,7 @@ pub const all_features = blk: {
905 .fp_armv8,659 .fp_armv8,
906 }),660 }),
907 };661 };
908 result[@enumToInt(Feature.neoversee1)] = .{662 result[@enumToInt(Feature.neoverse_e1)] = .{
909 .llvm_name = "neoversee1",663 .llvm_name = "neoversee1",
910 .description = "Neoverse E1 ARM processors",664 .description = "Neoverse E1 ARM processors",
911 .dependencies = featureSet(&[_]Feature{665 .dependencies = featureSet(&[_]Feature{
...@@ -919,7 +673,7 @@ pub const all_features = blk: {...@@ -919,7 +673,7 @@ pub const all_features = blk: {
919 .v8_2a,673 .v8_2a,
920 }),674 }),
921 };675 };
922 result[@enumToInt(Feature.neoversen1)] = .{676 result[@enumToInt(Feature.neoverse_n1)] = .{
923 .llvm_name = "neoversen1",677 .llvm_name = "neoversen1",
924 .description = "Neoverse N1 ARM processors",678 .description = "Neoverse N1 ARM processors",
925 .dependencies = featureSet(&[_]Feature{679 .dependencies = featureSet(&[_]Feature{
...@@ -934,13 +688,13 @@ pub const all_features = blk: {...@@ -934,13 +688,13 @@ pub const all_features = blk: {
934 .v8_2a,688 .v8_2a,
935 }),689 }),
936 };690 };
937 result[@enumToInt(Feature.neoversen2)] = .{691 result[@enumToInt(Feature.neoverse_n2)] = .{
938 .llvm_name = "neoversen2",692 .llvm_name = "neoversen2",
939 .description = "Neoverse N2 ARM processors",693 .description = "Neoverse N2 ARM processors",
940 .dependencies = featureSet(&[_]Feature{694 .dependencies = featureSet(&[_]Feature{
941 .bf16,695 .bf16,
942 .ete,696 .ete,
943 ._i8mm,697 .i8mm,
944 .mte,698 .mte,
945 .sve2,699 .sve2,
946 .sve2_bitperm,700 .sve2_bitperm,
...@@ -948,7 +702,7 @@ pub const all_features = blk: {...@@ -948,7 +702,7 @@ pub const all_features = blk: {
948 .v8_5a,702 .v8_5a,
949 }),703 }),
950 };704 };
951 result[@enumToInt(Feature.neoversev1)] = .{705 result[@enumToInt(Feature.neoverse_v1)] = .{
952 .llvm_name = "neoversev1",706 .llvm_name = "neoversev1",
953 .description = "Neoverse V1 ARM processors",707 .description = "Neoverse V1 ARM processors",
954 .dependencies = featureSet(&[_]Feature{708 .dependencies = featureSet(&[_]Feature{
...@@ -959,7 +713,7 @@ pub const all_features = blk: {...@@ -959,7 +713,7 @@ pub const all_features = blk: {
959 .fp16fml,713 .fp16fml,
960 .fullfp16,714 .fullfp16,
961 .fuse_aes,715 .fuse_aes,
962 ._i8mm,716 .i8mm,
963 .neon,717 .neon,
964 .perfmon,718 .perfmon,
965 .rand,719 .rand,
...@@ -977,7 +731,7 @@ pub const all_features = blk: {...@@ -977,7 +731,7 @@ pub const all_features = blk: {
977 };731 };
978 result[@enumToInt(Feature.nv)] = .{732 result[@enumToInt(Feature.nv)] = .{
979 .llvm_name = "nv",733 .llvm_name = "nv",
980 .description = "Enable v8.4-A Nested Virtualization Enchancement",734 .description = "Enable v8.4-A Nested Virtualization extension",
981 .dependencies = featureSet(&[_]Feature{}),735 .dependencies = featureSet(&[_]Feature{}),
982 };736 };
983 result[@enumToInt(Feature.outline_atomics)] = .{737 result[@enumToInt(Feature.outline_atomics)] = .{
...@@ -1174,23 +928,6 @@ pub const all_features = blk: {...@@ -1174,23 +928,6 @@ pub const all_features = blk: {
1174 .description = "Reserve X9, making it unavailable as a GPR",928 .description = "Reserve X9, making it unavailable as a GPR",
1175 .dependencies = featureSet(&[_]Feature{}),929 .dependencies = featureSet(&[_]Feature{}),
1176 };930 };
1177 result[@enumToInt(Feature.saphira)] = .{
1178 .llvm_name = "saphira",
1179 .description = "Qualcomm Saphira processors",
1180 .dependencies = featureSet(&[_]Feature{
1181 .crypto,
1182 .custom_cheap_as_move,
1183 .fp_armv8,
1184 .lsl_fast,
1185 .neon,
1186 .perfmon,
1187 .predictable_select_expensive,
1188 .spe,
1189 .use_postra_scheduler,
1190 .v8_4a,
1191 .zcz,
1192 }),
1193 };
1194 result[@enumToInt(Feature.sb)] = .{931 result[@enumToInt(Feature.sb)] = .{
1195 .llvm_name = "sb",932 .llvm_name = "sb",
1196 .description = "Enable v8.5 Speculation Barrier",933 .description = "Enable v8.5 Speculation Barrier",
...@@ -1261,9 +998,7 @@ pub const all_features = blk: {...@@ -1261,9 +998,7 @@ pub const all_features = blk: {
1261 result[@enumToInt(Feature.sve)] = .{998 result[@enumToInt(Feature.sve)] = .{
1262 .llvm_name = "sve",999 .llvm_name = "sve",
1263 .description = "Enable Scalable Vector Extension (SVE) instructions",1000 .description = "Enable Scalable Vector Extension (SVE) instructions",
1264 .dependencies = featureSet(&[_]Feature{1001 .dependencies = featureSet(&[_]Feature{}),
1265 .fullfp16,
1266 }),
1267 };1002 };
1268 result[@enumToInt(Feature.sve2)] = .{1003 result[@enumToInt(Feature.sve2)] = .{
1269 .llvm_name = "sve2",1004 .llvm_name = "sve2",
...@@ -1308,104 +1043,15 @@ pub const all_features = blk: {...@@ -1308,104 +1043,15 @@ pub const all_features = blk: {
1308 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits",1043 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits",
1309 .dependencies = featureSet(&[_]Feature{}),1044 .dependencies = featureSet(&[_]Feature{}),
1310 };1045 };
1311 result[@enumToInt(Feature.thunderx)] = .{1046 result[@enumToInt(Feature.tlb_rmi)] = .{
1312 .llvm_name = "thunderx",1047 .llvm_name = "tlb-rmi",
1313 .description = "Cavium ThunderX processors",1048 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1314 .dependencies = featureSet(&[_]Feature{1049 .dependencies = featureSet(&[_]Feature{}),
1315 .crc,
1316 .crypto,
1317 .fp_armv8,
1318 .neon,
1319 .perfmon,
1320 .predictable_select_expensive,
1321 .use_postra_scheduler,
1322 }),
1323 };1050 };
1324 result[@enumToInt(Feature.thunderx2t99)] = .{1051 result[@enumToInt(Feature.tme)] = .{
1325 .llvm_name = "thunderx2t99",1052 .llvm_name = "tme",
1326 .description = "Cavium ThunderX2 processors",1053 .description = "Enable Transactional Memory Extension",
1327 .dependencies = featureSet(&[_]Feature{1054 .dependencies = featureSet(&[_]Feature{}),
1328 .aggressive_fma,
1329 .arith_bcc_fusion,
1330 .crc,
1331 .crypto,
1332 .fp_armv8,
1333 .lse,
1334 .neon,
1335 .predictable_select_expensive,
1336 .use_postra_scheduler,
1337 .v8_1a,
1338 }),
1339 };
1340 result[@enumToInt(Feature.thunderx3t110)] = .{
1341 .llvm_name = "thunderx3t110",
1342 .description = "Marvell ThunderX3 processors",
1343 .dependencies = featureSet(&[_]Feature{
1344 .aggressive_fma,
1345 .arith_bcc_fusion,
1346 .balance_fp_ops,
1347 .crc,
1348 .crypto,
1349 .fp_armv8,
1350 .lse,
1351 .neon,
1352 .pa,
1353 .perfmon,
1354 .predictable_select_expensive,
1355 .strict_align,
1356 .use_aa,
1357 .use_postra_scheduler,
1358 .v8_3a,
1359 }),
1360 };
1361 result[@enumToInt(Feature.thunderxt81)] = .{
1362 .llvm_name = "thunderxt81",
1363 .description = "Cavium ThunderX processors",
1364 .dependencies = featureSet(&[_]Feature{
1365 .crc,
1366 .crypto,
1367 .fp_armv8,
1368 .neon,
1369 .perfmon,
1370 .predictable_select_expensive,
1371 .use_postra_scheduler,
1372 }),
1373 };
1374 result[@enumToInt(Feature.thunderxt83)] = .{
1375 .llvm_name = "thunderxt83",
1376 .description = "Cavium ThunderX processors",
1377 .dependencies = featureSet(&[_]Feature{
1378 .crc,
1379 .crypto,
1380 .fp_armv8,
1381 .neon,
1382 .perfmon,
1383 .predictable_select_expensive,
1384 .use_postra_scheduler,
1385 }),
1386 };
1387 result[@enumToInt(Feature.thunderxt88)] = .{
1388 .llvm_name = "thunderxt88",
1389 .description = "Cavium ThunderX processors",
1390 .dependencies = featureSet(&[_]Feature{
1391 .crc,
1392 .crypto,
1393 .fp_armv8,
1394 .neon,
1395 .perfmon,
1396 .predictable_select_expensive,
1397 .use_postra_scheduler,
1398 }),
1399 };
1400 result[@enumToInt(Feature.tlb_rmi)] = .{
1401 .llvm_name = "tlb-rmi",
1402 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1403 .dependencies = featureSet(&[_]Feature{}),
1404 };
1405 result[@enumToInt(Feature.tme)] = .{
1406 .llvm_name = "tme",
1407 .description = "Enable Transactional Memory Extension",
1408 .dependencies = featureSet(&[_]Feature{}),
1409 };1055 };
1410 result[@enumToInt(Feature.tpidr_el1)] = .{1056 result[@enumToInt(Feature.tpidr_el1)] = .{
1411 .llvm_name = "tpidr-el1",1057 .llvm_name = "tpidr-el1",
...@@ -1432,24 +1078,6 @@ pub const all_features = blk: {...@@ -1432,24 +1078,6 @@ pub const all_features = blk: {
1432 .description = "Enable Trace Buffer Extension",1078 .description = "Enable Trace Buffer Extension",
1433 .dependencies = featureSet(&[_]Feature{}),1079 .dependencies = featureSet(&[_]Feature{}),
1434 };1080 };
1435 result[@enumToInt(Feature.tsv110)] = .{
1436 .llvm_name = "tsv110",
1437 .description = "HiSilicon TS-V110 processors",
1438 .dependencies = featureSet(&[_]Feature{
1439 .crypto,
1440 .custom_cheap_as_move,
1441 .dotprod,
1442 .fp_armv8,
1443 .fp16fml,
1444 .fullfp16,
1445 .fuse_aes,
1446 .neon,
1447 .perfmon,
1448 .spe,
1449 .use_postra_scheduler,
1450 .v8_2a,
1451 }),
1452 };
1453 result[@enumToInt(Feature.uaops)] = .{1081 result[@enumToInt(Feature.uaops)] = .{
1454 .llvm_name = "uaops",1082 .llvm_name = "uaops",
1455 .description = "Enable v8.2 UAO PState",1083 .description = "Enable v8.2 UAO PState",
...@@ -1475,6 +1103,14 @@ pub const all_features = blk: {...@@ -1475,6 +1103,14 @@ pub const all_features = blk: {
1475 .description = "Use the reciprocal square root approximation",1103 .description = "Use the reciprocal square root approximation",
1476 .dependencies = featureSet(&[_]Feature{}),1104 .dependencies = featureSet(&[_]Feature{}),
1477 };1105 };
1106 result[@enumToInt(Feature.v8a)] = .{
1107 .llvm_name = null,
1108 .description = "Support ARM v8a instructions",
1109 .dependencies = featureSet(&[_]Feature{
1110 .fp_armv8,
1111 .neon,
1112 }),
1113 };
1478 result[@enumToInt(Feature.v8_1a)] = .{1114 result[@enumToInt(Feature.v8_1a)] = .{
1479 .llvm_name = "v8.1a",1115 .llvm_name = "v8.1a",
1480 .description = "Support ARM v8.1a instructions",1116 .description = "Support ARM v8.1a instructions",
...@@ -1485,6 +1121,7 @@ pub const all_features = blk: {...@@ -1485,6 +1121,7 @@ pub const all_features = blk: {
1485 .pan,1121 .pan,
1486 .rdm,1122 .rdm,
1487 .vh,1123 .vh,
1124 .v8a,
1488 }),1125 }),
1489 };1126 };
1490 result[@enumToInt(Feature.v8_2a)] = .{1127 result[@enumToInt(Feature.v8_2a)] = .{
...@@ -1551,51 +1188,15 @@ pub const all_features = blk: {...@@ -1551,51 +1188,15 @@ pub const all_features = blk: {
1551 .bf16,1188 .bf16,
1552 .ecv,1189 .ecv,
1553 .fgt,1190 .fgt,
1554 ._i8mm,1191 .i8mm,
1555 .v8_5a,1192 .v8_5a,
1556 }),1193 }),
1557 };1194 };
1558 result[@enumToInt(Feature.v8r)] = .{
1559 .llvm_name = "v8r",
1560 .description = "Support ARM v8r instructions",
1561 .dependencies = featureSet(&[_]Feature{
1562 .CONTEXTIDREL2,
1563 .ccidx,
1564 .ccpp,
1565 .complxnum,
1566 .crc,
1567 .dit,
1568 .dotprod,
1569 .fmi,
1570 .fp16fml,
1571 .fullfp16,
1572 .jsconv,
1573 .lse,
1574 .pa,
1575 .pan,
1576 .pan_rwv,
1577 .perfmon,
1578 .predres,
1579 .ras,
1580 .rcpc,
1581 .rcpc_immo,
1582 .rdm,
1583 .sb,
1584 .sel2,
1585 .sha3,
1586 .sm4,
1587 .specrestrict,
1588 .ssbs,
1589 .tlb_rmi,
1590 .tracev8_4,
1591 .uaops,
1592 }),
1593 };
1594 result[@enumToInt(Feature.vh)] = .{1195 result[@enumToInt(Feature.vh)] = .{
1595 .llvm_name = "vh",1196 .llvm_name = "vh",
1596 .description = "Enables ARM v8.1 Virtual Host extension",1197 .description = "Enables ARM v8.1 Virtual Host extension",
1597 .dependencies = featureSet(&[_]Feature{1198 .dependencies = featureSet(&[_]Feature{
1598 .CONTEXTIDREL2,1199 .context_id_rel2,
1599 }),1200 }),
1600 };1201 };
1601 result[@enumToInt(Feature.zcm)] = .{1202 result[@enumToInt(Feature.zcm)] = .{
...@@ -1639,7 +1240,15 @@ pub const cpu = struct {...@@ -1639,7 +1240,15 @@ pub const cpu = struct {
1639 .name = "a64fx",1240 .name = "a64fx",
1640 .llvm_name = "a64fx",1241 .llvm_name = "a64fx",
1641 .features = featureSet(&[_]Feature{1242 .features = featureSet(&[_]Feature{
1642 .a64fx,1243 .complxnum,
1244 .fp_armv8,
1245 .fullfp16,
1246 .neon,
1247 .perfmon,
1248 .sha2,
1249 .sve,
1250 .use_postra_scheduler,
1251 .v8_2a,
1643 }),1252 }),
1644 };1253 };
1645 pub const apple_a10 = CpuModel{1254 pub const apple_a10 = CpuModel{
...@@ -1716,42 +1325,68 @@ pub const cpu = struct {...@@ -1716,42 +1325,68 @@ pub const cpu = struct {
1716 .name = "carmel",1325 .name = "carmel",
1717 .llvm_name = "carmel",1326 .llvm_name = "carmel",
1718 .features = featureSet(&[_]Feature{1327 .features = featureSet(&[_]Feature{
1719 .carmel,1328 .crypto,
1329 .fullfp16,
1330 .neon,
1331 .v8_2a,
1720 }),1332 }),
1721 };1333 };
1722 pub const cortex_a34 = CpuModel{1334 pub const cortex_a34 = CpuModel{
1723 .name = "cortex_a34",1335 .name = "cortex_a34",
1724 .llvm_name = "cortex-a34",1336 .llvm_name = "cortex-a34",
1725 .features = featureSet(&[_]Feature{1337 .features = featureSet(&[_]Feature{
1726 .a35,1338 .a34,
1727 }),1339 }),
1728 };1340 };
1729 pub const cortex_a35 = CpuModel{1341 pub const cortex_a35 = CpuModel{
1730 .name = "cortex_a35",1342 .name = "cortex_a35",
1731 .llvm_name = "cortex-a35",1343 .llvm_name = "cortex-a35",
1732 .features = featureSet(&[_]Feature{1344 .features = featureSet(&[_]Feature{
1733 .a35,1345 .a34,
1734 }),1346 }),
1735 };1347 };
1736 pub const cortex_a53 = CpuModel{1348 pub const cortex_a53 = CpuModel{
1737 .name = "cortex_a53",1349 .name = "cortex_a53",
1738 .llvm_name = "cortex-a53",1350 .llvm_name = "cortex-a53",
1739 .features = featureSet(&[_]Feature{1351 .features = featureSet(&[_]Feature{
1740 .a53,1352 .balance_fp_ops,
1353 .crc,
1354 .crypto,
1355 .custom_cheap_as_move,
1356 .fuse_aes,
1357 .perfmon,
1358 .use_aa,
1359 .use_postra_scheduler,
1360 .v8a,
1741 }),1361 }),
1742 };1362 };
1743 pub const cortex_a55 = CpuModel{1363 pub const cortex_a55 = CpuModel{
1744 .name = "cortex_a55",1364 .name = "cortex_a55",
1745 .llvm_name = "cortex-a55",1365 .llvm_name = "cortex-a55",
1746 .features = featureSet(&[_]Feature{1366 .features = featureSet(&[_]Feature{
1747 .a55,1367 .crypto,
1368 .dotprod,
1369 .fullfp16,
1370 .fuse_aes,
1371 .perfmon,
1372 .rcpc,
1373 .v8_2a,
1748 }),1374 }),
1749 };1375 };
1750 pub const cortex_a57 = CpuModel{1376 pub const cortex_a57 = CpuModel{
1751 .name = "cortex_a57",1377 .name = "cortex_a57",
1752 .llvm_name = "cortex-a57",1378 .llvm_name = "cortex-a57",
1753 .features = featureSet(&[_]Feature{1379 .features = featureSet(&[_]Feature{
1754 .a57,1380 .balance_fp_ops,
1381 .crc,
1382 .crypto,
1383 .custom_cheap_as_move,
1384 .fuse_aes,
1385 .fuse_literals,
1386 .perfmon,
1387 .predictable_select_expensive,
1388 .use_postra_scheduler,
1389 .v8a,
1755 }),1390 }),
1756 };1391 };
1757 pub const cortex_a65 = CpuModel{1392 pub const cortex_a65 = CpuModel{
...@@ -1772,21 +1407,35 @@ pub const cpu = struct {...@@ -1772,21 +1407,35 @@ pub const cpu = struct {
1772 .name = "cortex_a72",1407 .name = "cortex_a72",
1773 .llvm_name = "cortex-a72",1408 .llvm_name = "cortex-a72",
1774 .features = featureSet(&[_]Feature{1409 .features = featureSet(&[_]Feature{
1775 .a72,1410 .crc,
1411 .crypto,
1412 .fuse_aes,
1413 .perfmon,
1414 .v8a,
1776 }),1415 }),
1777 };1416 };
1778 pub const cortex_a73 = CpuModel{1417 pub const cortex_a73 = CpuModel{
1779 .name = "cortex_a73",1418 .name = "cortex_a73",
1780 .llvm_name = "cortex-a73",1419 .llvm_name = "cortex-a73",
1781 .features = featureSet(&[_]Feature{1420 .features = featureSet(&[_]Feature{
1782 .a73,1421 .crc,
1422 .crypto,
1423 .fuse_aes,
1424 .perfmon,
1425 .v8a,
1783 }),1426 }),
1784 };1427 };
1785 pub const cortex_a75 = CpuModel{1428 pub const cortex_a75 = CpuModel{
1786 .name = "cortex_a75",1429 .name = "cortex_a75",
1787 .llvm_name = "cortex-a75",1430 .llvm_name = "cortex-a75",
1788 .features = featureSet(&[_]Feature{1431 .features = featureSet(&[_]Feature{
1789 .a75,1432 .crypto,
1433 .dotprod,
1434 .fullfp16,
1435 .fuse_aes,
1436 .perfmon,
1437 .rcpc,
1438 .v8_2a,
1790 }),1439 }),
1791 };1440 };
1792 pub const cortex_a76 = CpuModel{1441 pub const cortex_a76 = CpuModel{
...@@ -1807,28 +1456,56 @@ pub const cpu = struct {...@@ -1807,28 +1456,56 @@ pub const cpu = struct {
1807 .name = "cortex_a77",1456 .name = "cortex_a77",
1808 .llvm_name = "cortex-a77",1457 .llvm_name = "cortex-a77",
1809 .features = featureSet(&[_]Feature{1458 .features = featureSet(&[_]Feature{
1810 .a77,1459 .crypto,
1460 .dotprod,
1461 .fp_armv8,
1462 .fullfp16,
1463 .neon,
1464 .rcpc,
1465 .v8_2a,
1811 }),1466 }),
1812 };1467 };
1813 pub const cortex_a78 = CpuModel{1468 pub const cortex_a78 = CpuModel{
1814 .name = "cortex_a78",1469 .name = "cortex_a78",
1815 .llvm_name = "cortex-a78",1470 .llvm_name = "cortex-a78",
1816 .features = featureSet(&[_]Feature{1471 .features = featureSet(&[_]Feature{
1817 .cortex_a78,1472 .crypto,
1473 .dotprod,
1474 .fp_armv8,
1475 .fullfp16,
1476 .fuse_aes,
1477 .neon,
1478 .perfmon,
1479 .rcpc,
1480 .spe,
1481 .ssbs,
1482 .use_postra_scheduler,
1483 .v8_2a,
1818 }),1484 }),
1819 };1485 };
1820 pub const cortex_r82 = CpuModel{1486 pub const cortex_r82 = CpuModel{
1821 .name = "cortex_r82",1487 .name = "cortex_r82",
1822 .llvm_name = "cortex-r82",1488 .llvm_name = "cortex-r82",
1823 .features = featureSet(&[_]Feature{1489 .features = featureSet(&[_]Feature{
1824 .cortex_r82,1490 .use_postra_scheduler,
1491 .v8r,
1825 }),1492 }),
1826 };1493 };
1827 pub const cortex_x1 = CpuModel{1494 pub const cortex_x1 = CpuModel{
1828 .name = "cortex_x1",1495 .name = "cortex_x1",
1829 .llvm_name = "cortex-x1",1496 .llvm_name = "cortex-x1",
1830 .features = featureSet(&[_]Feature{1497 .features = featureSet(&[_]Feature{
1831 .cortex_x1,1498 .crypto,
1499 .dotprod,
1500 .fp_armv8,
1501 .fullfp16,
1502 .fuse_aes,
1503 .neon,
1504 .perfmon,
1505 .rcpc,
1506 .spe,
1507 .use_postra_scheduler,
1508 .v8_2a,
1832 }),1509 }),
1833 };1510 };
1834 pub const cyclone = CpuModel{1511 pub const cyclone = CpuModel{
...@@ -1838,11 +1515,59 @@ pub const cpu = struct {...@@ -1838,11 +1515,59 @@ pub const cpu = struct {
1838 .apple_a7,1515 .apple_a7,
1839 }),1516 }),
1840 };1517 };
1518 pub const exynos_m1 = CpuModel{
1519 .name = "exynos_m1",
1520 .llvm_name = null,
1521 .features = featureSet(&[_]Feature{
1522 .crc,
1523 .crypto,
1524 .exynos_cheap_as_move,
1525 .force_32bit_jump_tables,
1526 .fuse_aes,
1527 .perfmon,
1528 .slow_misaligned_128store,
1529 .slow_paired_128,
1530 .use_postra_scheduler,
1531 .use_reciprocal_square_root,
1532 .v8a,
1533 .zcz_fp,
1534 }),
1535 };
1536 pub const exynos_m2 = CpuModel{
1537 .name = "exynos_m2",
1538 .llvm_name = null,
1539 .features = featureSet(&[_]Feature{
1540 .crc,
1541 .crypto,
1542 .exynos_cheap_as_move,
1543 .force_32bit_jump_tables,
1544 .fuse_aes,
1545 .perfmon,
1546 .slow_misaligned_128store,
1547 .slow_paired_128,
1548 .use_postra_scheduler,
1549 .v8a,
1550 .zcz_fp,
1551 }),
1552 };
1841 pub const exynos_m3 = CpuModel{1553 pub const exynos_m3 = CpuModel{
1842 .name = "exynos_m3",1554 .name = "exynos_m3",
1843 .llvm_name = "exynos-m3",1555 .llvm_name = "exynos-m3",
1844 .features = featureSet(&[_]Feature{1556 .features = featureSet(&[_]Feature{
1845 .exynosm3,1557 .crc,
1558 .crypto,
1559 .exynos_cheap_as_move,
1560 .force_32bit_jump_tables,
1561 .fuse_address,
1562 .fuse_aes,
1563 .fuse_csel,
1564 .fuse_literals,
1565 .lsl_fast,
1566 .perfmon,
1567 .predictable_select_expensive,
1568 .use_postra_scheduler,
1569 .v8a,
1570 .zcz_fp,
1846 }),1571 }),
1847 };1572 };
1848 pub const exynos_m4 = CpuModel{1573 pub const exynos_m4 = CpuModel{
...@@ -1863,7 +1588,17 @@ pub const cpu = struct {...@@ -1863,7 +1588,17 @@ pub const cpu = struct {
1863 .name = "falkor",1588 .name = "falkor",
1864 .llvm_name = "falkor",1589 .llvm_name = "falkor",
1865 .features = featureSet(&[_]Feature{1590 .features = featureSet(&[_]Feature{
1866 .falkor,1591 .crc,
1592 .crypto,
1593 .custom_cheap_as_move,
1594 .lsl_fast,
1595 .perfmon,
1596 .predictable_select_expensive,
1597 .rdm,
1598 .slow_strqro_store,
1599 .use_postra_scheduler,
1600 .v8a,
1601 .zcz,
1867 }),1602 }),
1868 };1603 };
1869 pub const generic = CpuModel{1604 pub const generic = CpuModel{
...@@ -1871,102 +1606,167 @@ pub const cpu = struct {...@@ -1871,102 +1606,167 @@ pub const cpu = struct {
1871 .llvm_name = "generic",1606 .llvm_name = "generic",
1872 .features = featureSet(&[_]Feature{1607 .features = featureSet(&[_]Feature{
1873 .ete,1608 .ete,
1874 .fp_armv8,
1875 .fuse_aes,1609 .fuse_aes,
1876 .neon,
1877 .perfmon,1610 .perfmon,
1878 .use_postra_scheduler,1611 .use_postra_scheduler,
1612 .v8a,
1879 }),1613 }),
1880 };1614 };
1881 pub const kryo = CpuModel{1615 pub const kryo = CpuModel{
1882 .name = "kryo",1616 .name = "kryo",
1883 .llvm_name = "kryo",1617 .llvm_name = "kryo",
1884 .features = featureSet(&[_]Feature{1618 .features = featureSet(&[_]Feature{
1885 .kryo,1619 .crc,
1620 .crypto,
1621 .custom_cheap_as_move,
1622 .lsl_fast,
1623 .perfmon,
1624 .predictable_select_expensive,
1625 .use_postra_scheduler,
1626 .zcz,
1627 .v8a,
1886 }),1628 }),
1887 };1629 };
1888 pub const neoverse_e1 = CpuModel{1630 pub const neoverse_e1 = CpuModel{
1889 .name = "neoverse_e1",1631 .name = "neoverse_e1",
1890 .llvm_name = "neoverse-e1",1632 .llvm_name = "neoverse-e1",
1891 .features = featureSet(&[_]Feature{1633 .features = featureSet(&[_]Feature{
1892 .neoversee1,1634 .neoverse_e1,
1893 }),1635 }),
1894 };1636 };
1895 pub const neoverse_n1 = CpuModel{1637 pub const neoverse_n1 = CpuModel{
1896 .name = "neoverse_n1",1638 .name = "neoverse_n1",
1897 .llvm_name = "neoverse-n1",1639 .llvm_name = "neoverse-n1",
1898 .features = featureSet(&[_]Feature{1640 .features = featureSet(&[_]Feature{
1899 .neoversen1,1641 .neoverse_n1,
1900 }),1642 }),
1901 };1643 };
1902 pub const neoverse_n2 = CpuModel{1644 pub const neoverse_n2 = CpuModel{
1903 .name = "neoverse_n2",1645 .name = "neoverse_n2",
1904 .llvm_name = "neoverse-n2",1646 .llvm_name = "neoverse-n2",
1905 .features = featureSet(&[_]Feature{1647 .features = featureSet(&[_]Feature{
1906 .neoversen2,1648 .neoverse_n2,
1907 }),1649 }),
1908 };1650 };
1909 pub const neoverse_v1 = CpuModel{1651 pub const neoverse_v1 = CpuModel{
1910 .name = "neoverse_v1",1652 .name = "neoverse_v1",
1911 .llvm_name = "neoverse-v1",1653 .llvm_name = "neoverse-v1",
1912 .features = featureSet(&[_]Feature{1654 .features = featureSet(&[_]Feature{
1913 .neoversev1,1655 .neoverse_v1,
1914 }),1656 }),
1915 };1657 };
1916 pub const saphira = CpuModel{1658 pub const saphira = CpuModel{
1917 .name = "saphira",1659 .name = "saphira",
1918 .llvm_name = "saphira",1660 .llvm_name = "saphira",
1919 .features = featureSet(&[_]Feature{1661 .features = featureSet(&[_]Feature{
1920 .saphira,1662 .crypto,
1663 .custom_cheap_as_move,
1664 .lsl_fast,
1665 .perfmon,
1666 .predictable_select_expensive,
1667 .spe,
1668 .use_postra_scheduler,
1669 .v8_4a,
1670 .zcz,
1921 }),1671 }),
1922 };1672 };
1923 pub const thunderx = CpuModel{1673 pub const thunderx = CpuModel{
1924 .name = "thunderx",1674 .name = "thunderx",
1925 .llvm_name = "thunderx",1675 .llvm_name = "thunderx",
1926 .features = featureSet(&[_]Feature{1676 .features = featureSet(&[_]Feature{
1927 .thunderx,1677 .crc,
1678 .crypto,
1679 .perfmon,
1680 .predictable_select_expensive,
1681 .use_postra_scheduler,
1682 .v8a,
1928 }),1683 }),
1929 };1684 };
1930 pub const thunderx2t99 = CpuModel{1685 pub const thunderx2t99 = CpuModel{
1931 .name = "thunderx2t99",1686 .name = "thunderx2t99",
1932 .llvm_name = "thunderx2t99",1687 .llvm_name = "thunderx2t99",
1933 .features = featureSet(&[_]Feature{1688 .features = featureSet(&[_]Feature{
1934 .thunderx2t99,1689 .aggressive_fma,
1690 .arith_bcc_fusion,
1691 .crc,
1692 .crypto,
1693 .lse,
1694 .predictable_select_expensive,
1695 .use_postra_scheduler,
1696 .v8_1a,
1935 }),1697 }),
1936 };1698 };
1937 pub const thunderx3t110 = CpuModel{1699 pub const thunderx3t110 = CpuModel{
1938 .name = "thunderx3t110",1700 .name = "thunderx3t110",
1939 .llvm_name = "thunderx3t110",1701 .llvm_name = "thunderx3t110",
1940 .features = featureSet(&[_]Feature{1702 .features = featureSet(&[_]Feature{
1941 .thunderx3t110,1703 .aggressive_fma,
1704 .arith_bcc_fusion,
1705 .balance_fp_ops,
1706 .crc,
1707 .crypto,
1708 .fp_armv8,
1709 .lse,
1710 .neon,
1711 .pa,
1712 .perfmon,
1713 .predictable_select_expensive,
1714 .strict_align,
1715 .use_aa,
1716 .use_postra_scheduler,
1717 .v8_3a,
1942 }),1718 }),
1943 };1719 };
1944 pub const thunderxt81 = CpuModel{1720 pub const thunderxt81 = CpuModel{
1945 .name = "thunderxt81",1721 .name = "thunderxt81",
1946 .llvm_name = "thunderxt81",1722 .llvm_name = "thunderxt81",
1947 .features = featureSet(&[_]Feature{1723 .features = featureSet(&[_]Feature{
1948 .thunderxt81,1724 .crc,
1725 .crypto,
1726 .perfmon,
1727 .predictable_select_expensive,
1728 .use_postra_scheduler,
1729 .v8a,
1949 }),1730 }),
1950 };1731 };
1951 pub const thunderxt83 = CpuModel{1732 pub const thunderxt83 = CpuModel{
1952 .name = "thunderxt83",1733 .name = "thunderxt83",
1953 .llvm_name = "thunderxt83",1734 .llvm_name = "thunderxt83",
1954 .features = featureSet(&[_]Feature{1735 .features = featureSet(&[_]Feature{
1955 .thunderxt83,1736 .crc,
1737 .crypto,
1738 .perfmon,
1739 .predictable_select_expensive,
1740 .use_postra_scheduler,
1741 .v8a,
1956 }),1742 }),
1957 };1743 };
1958 pub const thunderxt88 = CpuModel{1744 pub const thunderxt88 = CpuModel{
1959 .name = "thunderxt88",1745 .name = "thunderxt88",
1960 .llvm_name = "thunderxt88",1746 .llvm_name = "thunderxt88",
1961 .features = featureSet(&[_]Feature{1747 .features = featureSet(&[_]Feature{
1962 .thunderxt88,1748 .crc,
1749 .crypto,
1750 .perfmon,
1751 .predictable_select_expensive,
1752 .use_postra_scheduler,
1753 .v8a,
1963 }),1754 }),
1964 };1755 };
1965 pub const tsv110 = CpuModel{1756 pub const tsv110 = CpuModel{
1966 .name = "tsv110",1757 .name = "tsv110",
1967 .llvm_name = "tsv110",1758 .llvm_name = "tsv110",
1968 .features = featureSet(&[_]Feature{1759 .features = featureSet(&[_]Feature{
1969 .tsv110,1760 .crypto,
1761 .custom_cheap_as_move,
1762 .dotprod,
1763 .fp16fml,
1764 .fullfp16,
1765 .fuse_aes,
1766 .perfmon,
1767 .spe,
1768 .use_postra_scheduler,
1769 .v8_2a,
1970 }),1770 }),
1971 };1771 };
1972};1772};
lib/std/target/amdgpu.zig+2-9
...@@ -9,7 +9,6 @@ const CpuModel = std.Target.Cpu.Model;...@@ -9,7 +9,6 @@ const CpuModel = std.Target.Cpu.Model;
99
10pub const Feature = enum {10pub const Feature = enum {
11 @"16_bit_insts",11 @"16_bit_insts",
12 DumpCode,
13 a16,12 a16,
14 add_no_carry_insts,13 add_no_carry_insts,
15 aperture_regs,14 aperture_regs,
...@@ -27,7 +26,7 @@ pub const Feature = enum {...@@ -27,7 +26,7 @@ pub const Feature = enum {
27 dpp,26 dpp,
28 dpp8,27 dpp8,
29 ds_src2_insts,28 ds_src2_insts,
30 dumpcode,29 dump_code,
31 enable_ds128,30 enable_ds128,
32 enable_prt_strict_null,31 enable_prt_strict_null,
33 fast_denormal_f32,32 fast_denormal_f32,
...@@ -128,7 +127,6 @@ pub const Feature = enum {...@@ -128,7 +127,6 @@ pub const Feature = enum {
128pub usingnamespace CpuFeature.feature_set_fns(Feature);127pub usingnamespace CpuFeature.feature_set_fns(Feature);
129128
130pub const all_features = blk: {129pub const all_features = blk: {
131 @setEvalBranchQuota(10000);
132 const len = @typeInfo(Feature).Enum.fields.len;130 const len = @typeInfo(Feature).Enum.fields.len;
133 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);131 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
134 var result: [len]CpuFeature = undefined;132 var result: [len]CpuFeature = undefined;
...@@ -137,11 +135,6 @@ pub const all_features = blk: {...@@ -137,11 +135,6 @@ pub const all_features = blk: {
137 .description = "Has i16/f16 instructions",135 .description = "Has i16/f16 instructions",
138 .dependencies = featureSet(&[_]Feature{}),136 .dependencies = featureSet(&[_]Feature{}),
139 };137 };
140 result[@enumToInt(Feature.DumpCode)] = .{
141 .llvm_name = "DumpCode",
142 .description = "Dump MachineInstrs in the CodeEmitter",
143 .dependencies = featureSet(&[_]Feature{}),
144 };
145 result[@enumToInt(Feature.a16)] = .{138 result[@enumToInt(Feature.a16)] = .{
146 .llvm_name = "a16",139 .llvm_name = "a16",
147 .description = "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands",140 .description = "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands",
...@@ -229,7 +222,7 @@ pub const all_features = blk: {...@@ -229,7 +222,7 @@ pub const all_features = blk: {
229 .description = "Has ds_*_src2 instructions",222 .description = "Has ds_*_src2 instructions",
230 .dependencies = featureSet(&[_]Feature{}),223 .dependencies = featureSet(&[_]Feature{}),
231 };224 };
232 result[@enumToInt(Feature.dumpcode)] = .{225 result[@enumToInt(Feature.dump_code)] = .{
233 .llvm_name = "dumpcode",226 .llvm_name = "dumpcode",
234 .description = "Dump MachineInstrs in the CodeEmitter",227 .description = "Dump MachineInstrs in the CodeEmitter",
235 .dependencies = featureSet(&[_]Feature{}),228 .dependencies = featureSet(&[_]Feature{}),
lib/std/target/arm.zig+679-809
...@@ -10,60 +10,10 @@ const CpuModel = std.Target.Cpu.Model;...@@ -10,60 +10,10 @@ const CpuModel = std.Target.Cpu.Model;
10pub const Feature = enum {10pub const Feature = enum {
11 @"32bit",11 @"32bit",
12 @"8msecext",12 @"8msecext",
13 a12,
14 a15,
15 a17,
16 a32,
17 a35,
18 a5,
19 a53,
20 a55,
21 a57,
22 a7,
23 a72,
24 a73,
25 a75,
26 a76,13 a76,
27 a77,
28 a8,
29 a9,
30 aclass,14 aclass,
31 acquire_release,15 acquire_release,
32 aes,16 aes,
33 armv2,
34 armv2a,
35 armv3,
36 armv3m,
37 armv4,
38 armv4t,
39 armv5t,
40 armv5te,
41 armv5tej,
42 armv6,
43 armv6_m,
44 armv6j,
45 armv6k,
46 armv6kz,
47 armv6s_m,
48 armv6t2,
49 armv7_a,
50 armv7_m,
51 armv7_r,
52 armv7e_m,
53 armv7k,
54 armv7s,
55 armv7ve,
56 armv8_a,
57 armv8_m_base,
58 armv8_m_main,
59 armv8_r,
60 armv8_1_a,
61 armv8_1_m_main,
62 armv8_2_a,
63 armv8_3_a,
64 armv8_4_a,
65 armv8_5_a,
66 armv8_6_a,
67 avoid_movs_shop,17 avoid_movs_shop,
68 avoid_partial_cpsr,18 avoid_partial_cpsr,
69 bf16,19 bf16,
...@@ -77,8 +27,6 @@ pub const Feature = enum {...@@ -77,8 +27,6 @@ pub const Feature = enum {
77 cdecp6,27 cdecp6,
78 cdecp7,28 cdecp7,
79 cheap_predicable_cpsr,29 cheap_predicable_cpsr,
80 cortex_a78,
81 cortex_x1,
82 crc,30 crc,
83 crypto,31 crypto,
84 d32,32 d32,
...@@ -91,13 +39,13 @@ pub const Feature = enum {...@@ -91,13 +39,13 @@ pub const Feature = enum {
91 execute_only,39 execute_only,
92 expand_fp_mlx,40 expand_fp_mlx,
93 exynos,41 exynos,
42 fp16,
43 fp16fml,
44 fp64,
94 fp_armv8,45 fp_armv8,
95 fp_armv8d16,46 fp_armv8d16,
96 fp_armv8d16sp,47 fp_armv8d16sp,
97 fp_armv8sp,48 fp_armv8sp,
98 fp16,
99 fp16fml,
100 fp64,
101 fpao,49 fpao,
102 fpregs,50 fpregs,
103 fpregs16,51 fpregs16,
...@@ -105,13 +53,30 @@ pub const Feature = enum {...@@ -105,13 +53,30 @@ pub const Feature = enum {
105 fullfp16,53 fullfp16,
106 fuse_aes,54 fuse_aes,
107 fuse_literals,55 fuse_literals,
56 has_v4t,
57 has_v5t,
58 has_v5te,
59 has_v6,
60 has_v6k,
61 has_v6m,
62 has_v6t2,
63 has_v7,
64 has_v7clrex,
65 has_v8_1a,
66 has_v8_1m_main,
67 has_v8_2a,
68 has_v8_3a,
69 has_v8_4a,
70 has_v8_5a,
71 has_v8_6a,
72 has_v8,
73 has_v8m,
74 has_v8m_main,
108 hwdiv,75 hwdiv,
109 hwdiv_arm,76 hwdiv_arm,
110 _i8mm,77 i8mm,
111 iwmmxt,78 iwmmxt,
112 iwmmxt2,79 iwmmxt2,
113 krait,
114 kryo,
115 lob,80 lob,
116 long_calls,81 long_calls,
117 loop_align,82 loop_align,
...@@ -128,7 +93,6 @@ pub const Feature = enum {...@@ -128,7 +93,6 @@ pub const Feature = enum {
128 neon,93 neon,
129 neon_fpmovs,94 neon_fpmovs,
130 neonfp,95 neonfp,
131 neoverse_v1,
132 no_branch_predictor,96 no_branch_predictor,
133 no_movt,97 no_movt,
134 no_neg_immediates,98 no_neg_immediates,
...@@ -139,9 +103,6 @@ pub const Feature = enum {...@@ -139,9 +103,6 @@ pub const Feature = enum {
139 prefer_vmovsr,103 prefer_vmovsr,
140 prof_unpr,104 prof_unpr,
141 r4,105 r4,
142 r5,
143 r52,
144 r7,
145 ras,106 ras,
146 rclass,107 rclass,
147 read_tp_hard,108 read_tp_hard,
...@@ -160,20 +121,37 @@ pub const Feature = enum {...@@ -160,20 +121,37 @@ pub const Feature = enum {
160 splat_vfp_neon,121 splat_vfp_neon,
161 strict_align,122 strict_align,
162 swift,123 swift,
163 thumb_mode,
164 thumb2,124 thumb2,
125 thumb_mode,
165 trustzone,126 trustzone,
166 use_misched,127 use_misched,
128 v2,
129 v2a,
130 v3,
131 v3m,
132 v4,
167 v4t,133 v4t,
168 v5t,134 v5t,
169 v5te,135 v5te,
136 v5tej,
170 v6,137 v6,
138 v6j,
171 v6k,139 v6k,
140 v6kz,
172 v6m,141 v6m,
142 v6sm,
173 v6t2,143 v6t2,
174 v7,144 v7a,
175 v7clrex,145 v7em,
176 v8,146 v7k,
147 v7m,
148 v7r,
149 v7s,
150 v7ve,
151 v8a,
152 v8m,
153 v8m_main,
154 v8r,
177 v8_1a,155 v8_1a,
178 v8_1m_main,156 v8_1m_main,
179 v8_2a,157 v8_2a,
...@@ -181,8 +159,6 @@ pub const Feature = enum {...@@ -181,8 +159,6 @@ pub const Feature = enum {
181 v8_4a,159 v8_4a,
182 v8_5a,160 v8_5a,
183 v8_6a,161 v8_6a,
184 v8m,
185 v8m_main,
186 vfp2,162 vfp2,
187 vfp2sp,163 vfp2sp,
188 vfp3,164 vfp3,
...@@ -219,91 +195,11 @@ pub const all_features = blk: {...@@ -219,91 +195,11 @@ pub const all_features = blk: {
219 .description = "Enable support for ARMv8-M Security Extensions",195 .description = "Enable support for ARMv8-M Security Extensions",
220 .dependencies = featureSet(&[_]Feature{}),196 .dependencies = featureSet(&[_]Feature{}),
221 };197 };
222 result[@enumToInt(Feature.a12)] = .{
223 .llvm_name = "a12",
224 .description = "Cortex-A12 ARM processors",
225 .dependencies = featureSet(&[_]Feature{}),
226 };
227 result[@enumToInt(Feature.a15)] = .{
228 .llvm_name = "a15",
229 .description = "Cortex-A15 ARM processors",
230 .dependencies = featureSet(&[_]Feature{}),
231 };
232 result[@enumToInt(Feature.a17)] = .{
233 .llvm_name = "a17",
234 .description = "Cortex-A17 ARM processors",
235 .dependencies = featureSet(&[_]Feature{}),
236 };
237 result[@enumToInt(Feature.a32)] = .{
238 .llvm_name = "a32",
239 .description = "Cortex-A32 ARM processors",
240 .dependencies = featureSet(&[_]Feature{}),
241 };
242 result[@enumToInt(Feature.a35)] = .{
243 .llvm_name = "a35",
244 .description = "Cortex-A35 ARM processors",
245 .dependencies = featureSet(&[_]Feature{}),
246 };
247 result[@enumToInt(Feature.a5)] = .{
248 .llvm_name = "a5",
249 .description = "Cortex-A5 ARM processors",
250 .dependencies = featureSet(&[_]Feature{}),
251 };
252 result[@enumToInt(Feature.a53)] = .{
253 .llvm_name = "a53",
254 .description = "Cortex-A53 ARM processors",
255 .dependencies = featureSet(&[_]Feature{}),
256 };
257 result[@enumToInt(Feature.a55)] = .{
258 .llvm_name = "a55",
259 .description = "Cortex-A55 ARM processors",
260 .dependencies = featureSet(&[_]Feature{}),
261 };
262 result[@enumToInt(Feature.a57)] = .{
263 .llvm_name = "a57",
264 .description = "Cortex-A57 ARM processors",
265 .dependencies = featureSet(&[_]Feature{}),
266 };
267 result[@enumToInt(Feature.a7)] = .{
268 .llvm_name = "a7",
269 .description = "Cortex-A7 ARM processors",
270 .dependencies = featureSet(&[_]Feature{}),
271 };
272 result[@enumToInt(Feature.a72)] = .{
273 .llvm_name = "a72",
274 .description = "Cortex-A72 ARM processors",
275 .dependencies = featureSet(&[_]Feature{}),
276 };
277 result[@enumToInt(Feature.a73)] = .{
278 .llvm_name = "a73",
279 .description = "Cortex-A73 ARM processors",
280 .dependencies = featureSet(&[_]Feature{}),
281 };
282 result[@enumToInt(Feature.a75)] = .{
283 .llvm_name = "a75",
284 .description = "Cortex-A75 ARM processors",
285 .dependencies = featureSet(&[_]Feature{}),
286 };
287 result[@enumToInt(Feature.a76)] = .{198 result[@enumToInt(Feature.a76)] = .{
288 .llvm_name = "a76",199 .llvm_name = "a76",
289 .description = "Cortex-A76 ARM processors",200 .description = "Cortex-A76 ARM processors",
290 .dependencies = featureSet(&[_]Feature{}),201 .dependencies = featureSet(&[_]Feature{}),
291 };202 };
292 result[@enumToInt(Feature.a77)] = .{
293 .llvm_name = "a77",
294 .description = "Cortex-A77 ARM processors",
295 .dependencies = featureSet(&[_]Feature{}),
296 };
297 result[@enumToInt(Feature.a8)] = .{
298 .llvm_name = "a8",
299 .description = "Cortex-A8 ARM processors",
300 .dependencies = featureSet(&[_]Feature{}),
301 };
302 result[@enumToInt(Feature.a9)] = .{
303 .llvm_name = "a9",
304 .description = "Cortex-A9 ARM processors",
305 .dependencies = featureSet(&[_]Feature{}),
306 };
307 result[@enumToInt(Feature.aclass)] = .{203 result[@enumToInt(Feature.aclass)] = .{
308 .llvm_name = "aclass",204 .llvm_name = "aclass",
309 .description = "Is application profile ('A' series)",205 .description = "Is application profile ('A' series)",
...@@ -321,387 +217,6 @@ pub const all_features = blk: {...@@ -321,387 +217,6 @@ pub const all_features = blk: {
321 .neon,217 .neon,
322 }),218 }),
323 };219 };
324 result[@enumToInt(Feature.armv2)] = .{
325 .llvm_name = "armv2",
326 .description = "ARMv2 architecture",
327 .dependencies = featureSet(&[_]Feature{}),
328 };
329 result[@enumToInt(Feature.armv2a)] = .{
330 .llvm_name = "armv2a",
331 .description = "ARMv2a architecture",
332 .dependencies = featureSet(&[_]Feature{}),
333 };
334 result[@enumToInt(Feature.armv3)] = .{
335 .llvm_name = "armv3",
336 .description = "ARMv3 architecture",
337 .dependencies = featureSet(&[_]Feature{}),
338 };
339 result[@enumToInt(Feature.armv3m)] = .{
340 .llvm_name = "armv3m",
341 .description = "ARMv3m architecture",
342 .dependencies = featureSet(&[_]Feature{}),
343 };
344 result[@enumToInt(Feature.armv4)] = .{
345 .llvm_name = "armv4",
346 .description = "ARMv4 architecture",
347 .dependencies = featureSet(&[_]Feature{}),
348 };
349 result[@enumToInt(Feature.armv4t)] = .{
350 .llvm_name = "armv4t",
351 .description = "ARMv4t architecture",
352 .dependencies = featureSet(&[_]Feature{
353 .v4t,
354 }),
355 };
356 result[@enumToInt(Feature.armv5t)] = .{
357 .llvm_name = "armv5t",
358 .description = "ARMv5t architecture",
359 .dependencies = featureSet(&[_]Feature{
360 .v5t,
361 }),
362 };
363 result[@enumToInt(Feature.armv5te)] = .{
364 .llvm_name = "armv5te",
365 .description = "ARMv5te architecture",
366 .dependencies = featureSet(&[_]Feature{
367 .v5te,
368 }),
369 };
370 result[@enumToInt(Feature.armv5tej)] = .{
371 .llvm_name = "armv5tej",
372 .description = "ARMv5tej architecture",
373 .dependencies = featureSet(&[_]Feature{
374 .v5te,
375 }),
376 };
377 result[@enumToInt(Feature.armv6)] = .{
378 .llvm_name = "armv6",
379 .description = "ARMv6 architecture",
380 .dependencies = featureSet(&[_]Feature{
381 .dsp,
382 .v6,
383 }),
384 };
385 result[@enumToInt(Feature.armv6_m)] = .{
386 .llvm_name = "armv6-m",
387 .description = "ARMv6m architecture",
388 .dependencies = featureSet(&[_]Feature{
389 .db,
390 .mclass,
391 .noarm,
392 .strict_align,
393 .thumb_mode,
394 .v6m,
395 }),
396 };
397 result[@enumToInt(Feature.armv6j)] = .{
398 .llvm_name = "armv6j",
399 .description = "ARMv7a architecture",
400 .dependencies = featureSet(&[_]Feature{
401 .armv6,
402 }),
403 };
404 result[@enumToInt(Feature.armv6k)] = .{
405 .llvm_name = "armv6k",
406 .description = "ARMv6k architecture",
407 .dependencies = featureSet(&[_]Feature{
408 .v6k,
409 }),
410 };
411 result[@enumToInt(Feature.armv6kz)] = .{
412 .llvm_name = "armv6kz",
413 .description = "ARMv6kz architecture",
414 .dependencies = featureSet(&[_]Feature{
415 .trustzone,
416 .v6k,
417 }),
418 };
419 result[@enumToInt(Feature.armv6s_m)] = .{
420 .llvm_name = "armv6s-m",
421 .description = "ARMv6sm architecture",
422 .dependencies = featureSet(&[_]Feature{
423 .db,
424 .mclass,
425 .noarm,
426 .strict_align,
427 .thumb_mode,
428 .v6m,
429 }),
430 };
431 result[@enumToInt(Feature.armv6t2)] = .{
432 .llvm_name = "armv6t2",
433 .description = "ARMv6t2 architecture",
434 .dependencies = featureSet(&[_]Feature{
435 .dsp,
436 .v6t2,
437 }),
438 };
439 result[@enumToInt(Feature.armv7_a)] = .{
440 .llvm_name = "armv7-a",
441 .description = "ARMv7a architecture",
442 .dependencies = featureSet(&[_]Feature{
443 .aclass,
444 .db,
445 .dsp,
446 .neon,
447 .v7,
448 }),
449 };
450 result[@enumToInt(Feature.armv7_m)] = .{
451 .llvm_name = "armv7-m",
452 .description = "ARMv7m architecture",
453 .dependencies = featureSet(&[_]Feature{
454 .db,
455 .hwdiv,
456 .mclass,
457 .noarm,
458 .thumb_mode,
459 .thumb2,
460 .v7,
461 }),
462 };
463 result[@enumToInt(Feature.armv7_r)] = .{
464 .llvm_name = "armv7-r",
465 .description = "ARMv7r architecture",
466 .dependencies = featureSet(&[_]Feature{
467 .db,
468 .dsp,
469 .hwdiv,
470 .rclass,
471 .v7,
472 }),
473 };
474 result[@enumToInt(Feature.armv7e_m)] = .{
475 .llvm_name = "armv7e-m",
476 .description = "ARMv7em architecture",
477 .dependencies = featureSet(&[_]Feature{
478 .db,
479 .dsp,
480 .hwdiv,
481 .mclass,
482 .noarm,
483 .thumb_mode,
484 .thumb2,
485 .v7,
486 }),
487 };
488 result[@enumToInt(Feature.armv7k)] = .{
489 .llvm_name = "armv7k",
490 .description = "ARMv7a architecture",
491 .dependencies = featureSet(&[_]Feature{
492 .armv7_a,
493 }),
494 };
495 result[@enumToInt(Feature.armv7s)] = .{
496 .llvm_name = "armv7s",
497 .description = "ARMv7a architecture",
498 .dependencies = featureSet(&[_]Feature{
499 .armv7_a,
500 }),
501 };
502 result[@enumToInt(Feature.armv7ve)] = .{
503 .llvm_name = "armv7ve",
504 .description = "ARMv7ve architecture",
505 .dependencies = featureSet(&[_]Feature{
506 .aclass,
507 .db,
508 .dsp,
509 .mp,
510 .neon,
511 .trustzone,
512 .v7,
513 .virtualization,
514 }),
515 };
516 result[@enumToInt(Feature.armv8_a)] = .{
517 .llvm_name = "armv8-a",
518 .description = "ARMv8a architecture",
519 .dependencies = featureSet(&[_]Feature{
520 .aclass,
521 .crc,
522 .crypto,
523 .db,
524 .dsp,
525 .fp_armv8,
526 .mp,
527 .neon,
528 .trustzone,
529 .v8,
530 .virtualization,
531 }),
532 };
533 result[@enumToInt(Feature.armv8_m_base)] = .{
534 .llvm_name = "armv8-m.base",
535 .description = "ARMv8mBaseline architecture",
536 .dependencies = featureSet(&[_]Feature{
537 .@"8msecext",
538 .acquire_release,
539 .db,
540 .hwdiv,
541 .mclass,
542 .noarm,
543 .strict_align,
544 .thumb_mode,
545 .v7clrex,
546 .v8m,
547 }),
548 };
549 result[@enumToInt(Feature.armv8_m_main)] = .{
550 .llvm_name = "armv8-m.main",
551 .description = "ARMv8mMainline architecture",
552 .dependencies = featureSet(&[_]Feature{
553 .@"8msecext",
554 .acquire_release,
555 .db,
556 .hwdiv,
557 .mclass,
558 .noarm,
559 .thumb_mode,
560 .v8m_main,
561 }),
562 };
563 result[@enumToInt(Feature.armv8_r)] = .{
564 .llvm_name = "armv8-r",
565 .description = "ARMv8r architecture",
566 .dependencies = featureSet(&[_]Feature{
567 .crc,
568 .db,
569 .dfb,
570 .dsp,
571 .fp_armv8,
572 .mp,
573 .neon,
574 .rclass,
575 .v8,
576 .virtualization,
577 }),
578 };
579 result[@enumToInt(Feature.armv8_1_a)] = .{
580 .llvm_name = "armv8.1-a",
581 .description = "ARMv81a architecture",
582 .dependencies = featureSet(&[_]Feature{
583 .aclass,
584 .crc,
585 .crypto,
586 .db,
587 .dsp,
588 .fp_armv8,
589 .mp,
590 .neon,
591 .trustzone,
592 .v8_1a,
593 .virtualization,
594 }),
595 };
596 result[@enumToInt(Feature.armv8_1_m_main)] = .{
597 .llvm_name = "armv8.1-m.main",
598 .description = "ARMv81mMainline architecture",
599 .dependencies = featureSet(&[_]Feature{
600 .@"8msecext",
601 .acquire_release,
602 .db,
603 .hwdiv,
604 .lob,
605 .mclass,
606 .noarm,
607 .ras,
608 .thumb_mode,
609 .v8_1m_main,
610 }),
611 };
612 result[@enumToInt(Feature.armv8_2_a)] = .{
613 .llvm_name = "armv8.2-a",
614 .description = "ARMv82a architecture",
615 .dependencies = featureSet(&[_]Feature{
616 .aclass,
617 .crc,
618 .crypto,
619 .db,
620 .dsp,
621 .fp_armv8,
622 .mp,
623 .neon,
624 .ras,
625 .trustzone,
626 .v8_2a,
627 .virtualization,
628 }),
629 };
630 result[@enumToInt(Feature.armv8_3_a)] = .{
631 .llvm_name = "armv8.3-a",
632 .description = "ARMv83a architecture",
633 .dependencies = featureSet(&[_]Feature{
634 .aclass,
635 .crc,
636 .crypto,
637 .db,
638 .dsp,
639 .fp_armv8,
640 .mp,
641 .neon,
642 .ras,
643 .trustzone,
644 .v8_3a,
645 .virtualization,
646 }),
647 };
648 result[@enumToInt(Feature.armv8_4_a)] = .{
649 .llvm_name = "armv8.4-a",
650 .description = "ARMv84a architecture",
651 .dependencies = featureSet(&[_]Feature{
652 .aclass,
653 .crc,
654 .crypto,
655 .db,
656 .dotprod,
657 .dsp,
658 .fp_armv8,
659 .mp,
660 .neon,
661 .ras,
662 .trustzone,
663 .v8_4a,
664 .virtualization,
665 }),
666 };
667 result[@enumToInt(Feature.armv8_5_a)] = .{
668 .llvm_name = "armv8.5-a",
669 .description = "ARMv85a architecture",
670 .dependencies = featureSet(&[_]Feature{
671 .aclass,
672 .crc,
673 .crypto,
674 .db,
675 .dotprod,
676 .dsp,
677 .fp_armv8,
678 .mp,
679 .neon,
680 .ras,
681 .trustzone,
682 .v8_5a,
683 .virtualization,
684 }),
685 };
686 result[@enumToInt(Feature.armv8_6_a)] = .{
687 .llvm_name = "armv8.6-a",
688 .description = "ARMv86a architecture",
689 .dependencies = featureSet(&[_]Feature{
690 .aclass,
691 .crc,
692 .crypto,
693 .db,
694 .dotprod,
695 .dsp,
696 .fp_armv8,
697 .mp,
698 .neon,
699 .ras,
700 .trustzone,
701 .v8_6a,
702 .virtualization,
703 }),
704 };
705 result[@enumToInt(Feature.avoid_movs_shop)] = .{220 result[@enumToInt(Feature.avoid_movs_shop)] = .{
706 .llvm_name = "avoid-movs-shop",221 .llvm_name = "avoid-movs-shop",
707 .description = "Avoid movs instructions with shifter operand",222 .description = "Avoid movs instructions with shifter operand",
...@@ -787,16 +302,6 @@ pub const all_features = blk: {...@@ -787,16 +302,6 @@ pub const all_features = blk: {
787 .description = "Disable +1 predication cost for instructions updating CPSR",302 .description = "Disable +1 predication cost for instructions updating CPSR",
788 .dependencies = featureSet(&[_]Feature{}),303 .dependencies = featureSet(&[_]Feature{}),
789 };304 };
790 result[@enumToInt(Feature.cortex_a78)] = .{
791 .llvm_name = "cortex-a78",
792 .description = "Cortex-A78 ARM processors",
793 .dependencies = featureSet(&[_]Feature{}),
794 };
795 result[@enumToInt(Feature.cortex_x1)] = .{
796 .llvm_name = "cortex-x1",
797 .description = "Cortex-X1 ARM processors",
798 .dependencies = featureSet(&[_]Feature{}),
799 };
800 result[@enumToInt(Feature.crc)] = .{305 result[@enumToInt(Feature.crc)] = .{
801 .llvm_name = "crc",306 .llvm_name = "crc",
802 .description = "Enable support for CRC instructions",307 .description = "Enable support for CRC instructions",
...@@ -881,6 +386,25 @@ pub const all_features = blk: {...@@ -881,6 +386,25 @@ pub const all_features = blk: {
881 .zcz,386 .zcz,
882 }),387 }),
883 };388 };
389 result[@enumToInt(Feature.fp16)] = .{
390 .llvm_name = "fp16",
391 .description = "Enable half-precision floating point",
392 .dependencies = featureSet(&[_]Feature{}),
393 };
394 result[@enumToInt(Feature.fp16fml)] = .{
395 .llvm_name = "fp16fml",
396 .description = "Enable full half-precision floating point fml instructions",
397 .dependencies = featureSet(&[_]Feature{
398 .fullfp16,
399 }),
400 };
401 result[@enumToInt(Feature.fp64)] = .{
402 .llvm_name = "fp64",
403 .description = "Floating point unit supports double precision",
404 .dependencies = featureSet(&[_]Feature{
405 .fpregs64,
406 }),
407 };
884 result[@enumToInt(Feature.fp_armv8)] = .{408 result[@enumToInt(Feature.fp_armv8)] = .{
885 .llvm_name = "fp-armv8",409 .llvm_name = "fp-armv8",
886 .description = "Enable ARMv8 FP",410 .description = "Enable ARMv8 FP",
...@@ -915,66 +439,185 @@ pub const all_features = blk: {...@@ -915,66 +439,185 @@ pub const all_features = blk: {
915 .vfp4sp,439 .vfp4sp,
916 }),440 }),
917 };441 };
918 result[@enumToInt(Feature.fp16)] = .{442 result[@enumToInt(Feature.fpao)] = .{
919 .llvm_name = "fp16",443 .llvm_name = "fpao",
920 .description = "Enable half-precision floating point",444 .description = "Enable fast computation of positive address offsets",
921 .dependencies = featureSet(&[_]Feature{}),445 .dependencies = featureSet(&[_]Feature{}),
922 };446 };
923 result[@enumToInt(Feature.fp16fml)] = .{447 result[@enumToInt(Feature.fpregs)] = .{
924 .llvm_name = "fp16fml",448 .llvm_name = "fpregs",
925 .description = "Enable full half-precision floating point fml instructions",449 .description = "Enable FP registers",
450 .dependencies = featureSet(&[_]Feature{}),
451 };
452 result[@enumToInt(Feature.fpregs16)] = .{
453 .llvm_name = "fpregs16",
454 .description = "Enable 16-bit FP registers",
455 .dependencies = featureSet(&[_]Feature{
456 .fpregs,
457 }),
458 };
459 result[@enumToInt(Feature.fpregs64)] = .{
460 .llvm_name = "fpregs64",
461 .description = "Enable 64-bit FP registers",
462 .dependencies = featureSet(&[_]Feature{
463 .fpregs,
464 }),
465 };
466 result[@enumToInt(Feature.fullfp16)] = .{
467 .llvm_name = "fullfp16",
468 .description = "Enable full half-precision floating point",
469 .dependencies = featureSet(&[_]Feature{
470 .fp_armv8d16sp,
471 .fpregs16,
472 }),
473 };
474 result[@enumToInt(Feature.fuse_aes)] = .{
475 .llvm_name = "fuse-aes",
476 .description = "CPU fuses AES crypto operations",
477 .dependencies = featureSet(&[_]Feature{}),
478 };
479 result[@enumToInt(Feature.fuse_literals)] = .{
480 .llvm_name = "fuse-literals",
481 .description = "CPU fuses literal generation operations",
482 .dependencies = featureSet(&[_]Feature{}),
483 };
484 result[@enumToInt(Feature.has_v4t)] = .{
485 .llvm_name = "v4t",
486 .description = "Support ARM v4T instructions",
487 .dependencies = featureSet(&[_]Feature{}),
488 };
489 result[@enumToInt(Feature.has_v5t)] = .{
490 .llvm_name = "v5t",
491 .description = "Support ARM v5T instructions",
492 .dependencies = featureSet(&[_]Feature{
493 .has_v4t,
494 }),
495 };
496 result[@enumToInt(Feature.has_v5te)] = .{
497 .llvm_name = "v5te",
498 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
499 .dependencies = featureSet(&[_]Feature{
500 .has_v5t,
501 }),
502 };
503 result[@enumToInt(Feature.has_v6)] = .{
504 .llvm_name = "v6",
505 .description = "Support ARM v6 instructions",
506 .dependencies = featureSet(&[_]Feature{
507 .has_v5te,
508 }),
509 };
510 result[@enumToInt(Feature.has_v6k)] = .{
511 .llvm_name = "v6k",
512 .description = "Support ARM v6k instructions",
513 .dependencies = featureSet(&[_]Feature{
514 .has_v6,
515 }),
516 };
517 result[@enumToInt(Feature.has_v6m)] = .{
518 .llvm_name = "v6m",
519 .description = "Support ARM v6M instructions",
520 .dependencies = featureSet(&[_]Feature{
521 .has_v6,
522 }),
523 };
524 result[@enumToInt(Feature.has_v6t2)] = .{
525 .llvm_name = "v6t2",
526 .description = "Support ARM v6t2 instructions",
527 .dependencies = featureSet(&[_]Feature{
528 .thumb2,
529 .has_v6k,
530 .has_v8m,
531 }),
532 };
533 result[@enumToInt(Feature.has_v7)] = .{
534 .llvm_name = "v7",
535 .description = "Support ARM v7 instructions",
536 .dependencies = featureSet(&[_]Feature{
537 .perfmon,
538 .has_v6t2,
539 .has_v7clrex,
540 }),
541 };
542 result[@enumToInt(Feature.has_v7clrex)] = .{
543 .llvm_name = "v7clrex",
544 .description = "Has v7 clrex instruction",
545 .dependencies = featureSet(&[_]Feature{}),
546 };
547 result[@enumToInt(Feature.has_v8)] = .{
548 .llvm_name = "v8",
549 .description = "Support ARM v8 instructions",
550 .dependencies = featureSet(&[_]Feature{
551 .acquire_release,
552 .has_v7,
553 }),
554 };
555 result[@enumToInt(Feature.has_v8_1a)] = .{
556 .llvm_name = "v8.1a",
557 .description = "Support ARM v8.1a instructions",
926 .dependencies = featureSet(&[_]Feature{558 .dependencies = featureSet(&[_]Feature{
927 .fullfp16,559 .has_v8,
928 }),560 }),
929 };561 };
930 result[@enumToInt(Feature.fp64)] = .{562 result[@enumToInt(Feature.has_v8_1m_main)] = .{
931 .llvm_name = "fp64",563 .llvm_name = "v8.1m.main",
932 .description = "Floating point unit supports double precision",564 .description = "Support ARM v8-1M Mainline instructions",
933 .dependencies = featureSet(&[_]Feature{565 .dependencies = featureSet(&[_]Feature{
934 .fpregs64,566 .has_v8m_main,
935 }),567 }),
936 };568 };
937 result[@enumToInt(Feature.fpao)] = .{569 result[@enumToInt(Feature.has_v8_2a)] = .{
938 .llvm_name = "fpao",570 .llvm_name = "v8.2a",
939 .description = "Enable fast computation of positive address offsets",571 .description = "Support ARM v8.2a instructions",
940 .dependencies = featureSet(&[_]Feature{}),572 .dependencies = featureSet(&[_]Feature{
573 .has_v8_1a,
574 }),
941 };575 };
942 result[@enumToInt(Feature.fpregs)] = .{576 result[@enumToInt(Feature.has_v8_3a)] = .{
943 .llvm_name = "fpregs",577 .llvm_name = "v8.3a",
944 .description = "Enable FP registers",578 .description = "Support ARM v8.3a instructions",
945 .dependencies = featureSet(&[_]Feature{}),579 .dependencies = featureSet(&[_]Feature{
580 .has_v8_2a,
581 }),
946 };582 };
947 result[@enumToInt(Feature.fpregs16)] = .{583 result[@enumToInt(Feature.has_v8_4a)] = .{
948 .llvm_name = "fpregs16",584 .llvm_name = "v8.4a",
949 .description = "Enable 16-bit FP registers",585 .description = "Support ARM v8.4a instructions",
950 .dependencies = featureSet(&[_]Feature{586 .dependencies = featureSet(&[_]Feature{
951 .fpregs,587 .dotprod,
588 .has_v8_3a,
952 }),589 }),
953 };590 };
954 result[@enumToInt(Feature.fpregs64)] = .{591 result[@enumToInt(Feature.has_v8_5a)] = .{
955 .llvm_name = "fpregs64",592 .llvm_name = "v8.5a",
956 .description = "Enable 64-bit FP registers",593 .description = "Support ARM v8.5a instructions",
957 .dependencies = featureSet(&[_]Feature{594 .dependencies = featureSet(&[_]Feature{
958 .fpregs,595 .sb,
596 .has_v8_4a,
959 }),597 }),
960 };598 };
961 result[@enumToInt(Feature.fullfp16)] = .{599 result[@enumToInt(Feature.has_v8_6a)] = .{
962 .llvm_name = "fullfp16",600 .llvm_name = "v8.6a",
963 .description = "Enable full half-precision floating point",601 .description = "Support ARM v8.6a instructions",
964 .dependencies = featureSet(&[_]Feature{602 .dependencies = featureSet(&[_]Feature{
965 .fp_armv8d16sp,603 .bf16,
966 .fpregs16,604 .i8mm,
605 .has_v8_5a,
967 }),606 }),
968 };607 };
969 result[@enumToInt(Feature.fuse_aes)] = .{608 result[@enumToInt(Feature.has_v8m)] = .{
970 .llvm_name = "fuse-aes",609 .llvm_name = "v8m",
971 .description = "CPU fuses AES crypto operations",610 .description = "Support ARM v8M Baseline instructions",
972 .dependencies = featureSet(&[_]Feature{}),611 .dependencies = featureSet(&[_]Feature{
612 .has_v6m,
613 }),
973 };614 };
974 result[@enumToInt(Feature.fuse_literals)] = .{615 result[@enumToInt(Feature.has_v8m_main)] = .{
975 .llvm_name = "fuse-literals",616 .llvm_name = "v8m.main",
976 .description = "CPU fuses literal generation operations",617 .description = "Support ARM v8M Mainline instructions",
977 .dependencies = featureSet(&[_]Feature{}),618 .dependencies = featureSet(&[_]Feature{
619 .has_v7,
620 }),
978 };621 };
979 result[@enumToInt(Feature.hwdiv)] = .{622 result[@enumToInt(Feature.hwdiv)] = .{
980 .llvm_name = "hwdiv",623 .llvm_name = "hwdiv",
...@@ -986,7 +629,7 @@ pub const all_features = blk: {...@@ -986,7 +629,7 @@ pub const all_features = blk: {
986 .description = "Enable divide instructions in ARM mode",629 .description = "Enable divide instructions in ARM mode",
987 .dependencies = featureSet(&[_]Feature{}),630 .dependencies = featureSet(&[_]Feature{}),
988 };631 };
989 result[@enumToInt(Feature._i8mm)] = .{632 result[@enumToInt(Feature.i8mm)] = .{
990 .llvm_name = "i8mm",633 .llvm_name = "i8mm",
991 .description = "Enable Matrix Multiply Int8 Extension",634 .description = "Enable Matrix Multiply Int8 Extension",
992 .dependencies = featureSet(&[_]Feature{635 .dependencies = featureSet(&[_]Feature{
...@@ -997,26 +640,16 @@ pub const all_features = blk: {...@@ -997,26 +640,16 @@ pub const all_features = blk: {
997 .llvm_name = "iwmmxt",640 .llvm_name = "iwmmxt",
998 .description = "ARMv5te architecture",641 .description = "ARMv5te architecture",
999 .dependencies = featureSet(&[_]Feature{642 .dependencies = featureSet(&[_]Feature{
1000 .armv5te,643 .has_v5te,
1001 }),644 }),
1002 };645 };
1003 result[@enumToInt(Feature.iwmmxt2)] = .{646 result[@enumToInt(Feature.iwmmxt2)] = .{
1004 .llvm_name = "iwmmxt2",647 .llvm_name = "iwmmxt2",
1005 .description = "ARMv5te architecture",648 .description = "ARMv5te architecture",
1006 .dependencies = featureSet(&[_]Feature{649 .dependencies = featureSet(&[_]Feature{
1007 .armv5te,650 .has_v5te,
1008 }),651 }),
1009 };652 };
1010 result[@enumToInt(Feature.krait)] = .{
1011 .llvm_name = "krait",
1012 .description = "Qualcomm Krait processors",
1013 .dependencies = featureSet(&[_]Feature{}),
1014 };
1015 result[@enumToInt(Feature.kryo)] = .{
1016 .llvm_name = "kryo",
1017 .description = "Qualcomm Kryo processors",
1018 .dependencies = featureSet(&[_]Feature{}),
1019 };
1020 result[@enumToInt(Feature.lob)] = .{653 result[@enumToInt(Feature.lob)] = .{
1021 .llvm_name = "lob",654 .llvm_name = "lob",
1022 .description = "Enable Low Overhead Branch extensions",655 .description = "Enable Low Overhead Branch extensions",
...@@ -1059,7 +692,7 @@ pub const all_features = blk: {...@@ -1059,7 +692,7 @@ pub const all_features = blk: {
1059 .dsp,692 .dsp,
1060 .fpregs16,693 .fpregs16,
1061 .fpregs64,694 .fpregs64,
1062 .v8_1m_main,695 .has_v8_1m_main,
1063 }),696 }),
1064 };697 };
1065 result[@enumToInt(Feature.mve_fp)] = .{698 result[@enumToInt(Feature.mve_fp)] = .{
...@@ -1108,11 +741,6 @@ pub const all_features = blk: {...@@ -1108,11 +741,6 @@ pub const all_features = blk: {
1108 .description = "Use NEON for single precision FP",741 .description = "Use NEON for single precision FP",
1109 .dependencies = featureSet(&[_]Feature{}),742 .dependencies = featureSet(&[_]Feature{}),
1110 };743 };
1111 result[@enumToInt(Feature.neoverse_v1)] = .{
1112 .llvm_name = "neoverse-v1",
1113 .description = "Neoverse-V1 ARM processors",
1114 .dependencies = featureSet(&[_]Feature{}),
1115 };
1116 result[@enumToInt(Feature.no_branch_predictor)] = .{744 result[@enumToInt(Feature.no_branch_predictor)] = .{
1117 .llvm_name = "no-branch-predictor",745 .llvm_name = "no-branch-predictor",
1118 .description = "Has no branch predictor",746 .description = "Has no branch predictor",
...@@ -1163,21 +791,6 @@ pub const all_features = blk: {...@@ -1163,21 +791,6 @@ pub const all_features = blk: {
1163 .description = "Cortex-R4 ARM processors",791 .description = "Cortex-R4 ARM processors",
1164 .dependencies = featureSet(&[_]Feature{}),792 .dependencies = featureSet(&[_]Feature{}),
1165 };793 };
1166 result[@enumToInt(Feature.r5)] = .{
1167 .llvm_name = "r5",
1168 .description = "Cortex-R5 ARM processors",
1169 .dependencies = featureSet(&[_]Feature{}),
1170 };
1171 result[@enumToInt(Feature.r52)] = .{
1172 .llvm_name = "r52",
1173 .description = "Cortex-R52 ARM processors",
1174 .dependencies = featureSet(&[_]Feature{}),
1175 };
1176 result[@enumToInt(Feature.r7)] = .{
1177 .llvm_name = "r7",
1178 .description = "Cortex-R7 ARM processors",
1179 .dependencies = featureSet(&[_]Feature{}),
1180 };
1181 result[@enumToInt(Feature.ras)] = .{794 result[@enumToInt(Feature.ras)] = .{
1182 .llvm_name = "ras",795 .llvm_name = "ras",
1183 .description = "Enable Reliability, Availability and Serviceability extensions",796 .description = "Enable Reliability, Availability and Serviceability extensions",
...@@ -1272,16 +885,16 @@ pub const all_features = blk: {...@@ -1272,16 +885,16 @@ pub const all_features = blk: {
1272 .description = "Swift ARM processors",885 .description = "Swift ARM processors",
1273 .dependencies = featureSet(&[_]Feature{}),886 .dependencies = featureSet(&[_]Feature{}),
1274 };887 };
1275 result[@enumToInt(Feature.thumb_mode)] = .{
1276 .llvm_name = "thumb-mode",
1277 .description = "Thumb mode",
1278 .dependencies = featureSet(&[_]Feature{}),
1279 };
1280 result[@enumToInt(Feature.thumb2)] = .{888 result[@enumToInt(Feature.thumb2)] = .{
1281 .llvm_name = "thumb2",889 .llvm_name = "thumb2",
1282 .description = "Enable Thumb2 instructions",890 .description = "Enable Thumb2 instructions",
1283 .dependencies = featureSet(&[_]Feature{}),891 .dependencies = featureSet(&[_]Feature{}),
1284 };892 };
893 result[@enumToInt(Feature.thumb_mode)] = .{
894 .llvm_name = "thumb-mode",
895 .description = "Thumb mode",
896 .dependencies = featureSet(&[_]Feature{}),
897 };
1285 result[@enumToInt(Feature.trustzone)] = .{898 result[@enumToInt(Feature.trustzone)] = .{
1286 .llvm_name = "trustzone",899 .llvm_name = "trustzone",
1287 .description = "Enable support for TrustZone security extensions",900 .description = "Enable support for TrustZone security extensions",
...@@ -1292,142 +905,399 @@ pub const all_features = blk: {...@@ -1292,142 +905,399 @@ pub const all_features = blk: {
1292 .description = "Use the MachineScheduler",905 .description = "Use the MachineScheduler",
1293 .dependencies = featureSet(&[_]Feature{}),906 .dependencies = featureSet(&[_]Feature{}),
1294 };907 };
908 result[@enumToInt(Feature.v2)] = .{
909 .llvm_name = "armv2",
910 .description = "ARMv2 architecture",
911 .dependencies = featureSet(&[_]Feature{
912 .strict_align,
913 }),
914 };
915 result[@enumToInt(Feature.v2a)] = .{
916 .llvm_name = "armv2a",
917 .description = "ARMv2a architecture",
918 .dependencies = featureSet(&[_]Feature{
919 .strict_align,
920 }),
921 };
922 result[@enumToInt(Feature.v3)] = .{
923 .llvm_name = "armv3",
924 .description = "ARMv3 architecture",
925 .dependencies = featureSet(&[_]Feature{
926 .strict_align,
927 }),
928 };
929 result[@enumToInt(Feature.v3m)] = .{
930 .llvm_name = "armv3m",
931 .description = "ARMv3m architecture",
932 .dependencies = featureSet(&[_]Feature{
933 .strict_align,
934 }),
935 };
936 result[@enumToInt(Feature.v4)] = .{
937 .llvm_name = "armv4",
938 .description = "ARMv4 architecture",
939 .dependencies = featureSet(&[_]Feature{
940 .strict_align,
941 }),
942 };
1295 result[@enumToInt(Feature.v4t)] = .{943 result[@enumToInt(Feature.v4t)] = .{
1296 .llvm_name = "v4t",944 .llvm_name = "armv4t",
1297 .description = "Support ARM v4T instructions",945 .description = "ARMv4t architecture",
1298 .dependencies = featureSet(&[_]Feature{}),946 .dependencies = featureSet(&[_]Feature{
947 .strict_align,
948 .has_v4t,
949 }),
1299 };950 };
1300 result[@enumToInt(Feature.v5t)] = .{951 result[@enumToInt(Feature.v5t)] = .{
1301 .llvm_name = "v5t",952 .llvm_name = "armv5t",
1302 .description = "Support ARM v5T instructions",953 .description = "ARMv5t architecture",
1303 .dependencies = featureSet(&[_]Feature{954 .dependencies = featureSet(&[_]Feature{
1304 .v4t,955 .strict_align,
956 .has_v5t,
1305 }),957 }),
1306 };958 };
1307 result[@enumToInt(Feature.v5te)] = .{959 result[@enumToInt(Feature.v5te)] = .{
1308 .llvm_name = "v5te",960 .llvm_name = "armv5te",
1309 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",961 .description = "ARMv5te architecture",
1310 .dependencies = featureSet(&[_]Feature{962 .dependencies = featureSet(&[_]Feature{
1311 .v5t,963 .strict_align,
964 .has_v5te,
965 }),
966 };
967 result[@enumToInt(Feature.v5tej)] = .{
968 .llvm_name = "armv5tej",
969 .description = "ARMv5tej architecture",
970 .dependencies = featureSet(&[_]Feature{
971 .strict_align,
972 .has_v5te,
1312 }),973 }),
1313 };974 };
1314 result[@enumToInt(Feature.v6)] = .{975 result[@enumToInt(Feature.v6)] = .{
1315 .llvm_name = "v6",976 .llvm_name = "armv6",
1316 .description = "Support ARM v6 instructions",977 .description = "ARMv6 architecture",
1317 .dependencies = featureSet(&[_]Feature{978 .dependencies = featureSet(&[_]Feature{
1318 .v5te,979 .dsp,
980 .has_v6,
1319 }),981 }),
1320 };982 };
1321 result[@enumToInt(Feature.v6k)] = .{983 result[@enumToInt(Feature.v6m)] = .{
1322 .llvm_name = "v6k",984 .llvm_name = "armv6-m",
1323 .description = "Support ARM v6k instructions",985 .description = "ARMv6m architecture",
986 .dependencies = featureSet(&[_]Feature{
987 .db,
988 .mclass,
989 .noarm,
990 .strict_align,
991 .thumb_mode,
992 .has_v6m,
993 }),
994 };
995 result[@enumToInt(Feature.v6j)] = .{
996 .llvm_name = "armv6j",
997 .description = "ARMv7a architecture",
1324 .dependencies = featureSet(&[_]Feature{998 .dependencies = featureSet(&[_]Feature{
1325 .v6,999 .v6,
1326 }),1000 }),
1327 };1001 };
1328 result[@enumToInt(Feature.v6m)] = .{1002 result[@enumToInt(Feature.v6k)] = .{
1329 .llvm_name = "v6m",1003 .llvm_name = "armv6k",
1330 .description = "Support ARM v6M instructions",1004 .description = "ARMv6k architecture",
1005 .dependencies = featureSet(&[_]Feature{
1006 .has_v6k,
1007 }),
1008 };
1009 result[@enumToInt(Feature.v6kz)] = .{
1010 .llvm_name = "armv6kz",
1011 .description = "ARMv6kz architecture",
1012 .dependencies = featureSet(&[_]Feature{
1013 .trustzone,
1014 .has_v6k,
1015 }),
1016 };
1017 result[@enumToInt(Feature.v6sm)] = .{
1018 .llvm_name = "armv6s-m",
1019 .description = "ARMv6sm architecture",
1020 .dependencies = featureSet(&[_]Feature{
1021 .db,
1022 .mclass,
1023 .noarm,
1024 .strict_align,
1025 .thumb_mode,
1026 .has_v6m,
1027 }),
1028 };
1029 result[@enumToInt(Feature.v6t2)] = .{
1030 .llvm_name = "armv6t2",
1031 .description = "ARMv6t2 architecture",
1032 .dependencies = featureSet(&[_]Feature{
1033 .dsp,
1034 .has_v6t2,
1035 }),
1036 };
1037 result[@enumToInt(Feature.v7a)] = .{
1038 .llvm_name = "armv7-a",
1039 .description = "ARMv7a architecture",
1040 .dependencies = featureSet(&[_]Feature{
1041 .aclass,
1042 .db,
1043 .dsp,
1044 .neon,
1045 .has_v7,
1046 }),
1047 };
1048 result[@enumToInt(Feature.v7m)] = .{
1049 .llvm_name = "armv7-m",
1050 .description = "ARMv7m architecture",
1051 .dependencies = featureSet(&[_]Feature{
1052 .db,
1053 .hwdiv,
1054 .mclass,
1055 .noarm,
1056 .thumb_mode,
1057 .thumb2,
1058 .has_v7,
1059 }),
1060 };
1061 result[@enumToInt(Feature.v7r)] = .{
1062 .llvm_name = "armv7-r",
1063 .description = "ARMv7r architecture",
1064 .dependencies = featureSet(&[_]Feature{
1065 .db,
1066 .dsp,
1067 .hwdiv,
1068 .rclass,
1069 .has_v7,
1070 }),
1071 };
1072 result[@enumToInt(Feature.v7em)] = .{
1073 .llvm_name = "armv7e-m",
1074 .description = "ARMv7em architecture",
1075 .dependencies = featureSet(&[_]Feature{
1076 .db,
1077 .dsp,
1078 .hwdiv,
1079 .mclass,
1080 .noarm,
1081 .thumb_mode,
1082 .thumb2,
1083 .has_v7,
1084 }),
1085 };
1086 result[@enumToInt(Feature.v7k)] = .{
1087 .llvm_name = "armv7k",
1088 .description = "ARMv7a architecture",
1089 .dependencies = featureSet(&[_]Feature{
1090 .v7a,
1091 }),
1092 };
1093 result[@enumToInt(Feature.v7s)] = .{
1094 .llvm_name = "armv7s",
1095 .description = "ARMv7a architecture",
1096 .dependencies = featureSet(&[_]Feature{
1097 .v7a,
1098 }),
1099 };
1100 result[@enumToInt(Feature.v7ve)] = .{
1101 .llvm_name = "armv7ve",
1102 .description = "ARMv7ve architecture",
1103 .dependencies = featureSet(&[_]Feature{
1104 .aclass,
1105 .db,
1106 .dsp,
1107 .mp,
1108 .neon,
1109 .trustzone,
1110 .has_v7,
1111 .virtualization,
1112 }),
1113 };
1114 result[@enumToInt(Feature.v8a)] = .{
1115 .llvm_name = "armv8-a",
1116 .description = "ARMv8a architecture",
1331 .dependencies = featureSet(&[_]Feature{1117 .dependencies = featureSet(&[_]Feature{
1332 .v6,1118 .aclass,
1119 .crc,
1120 .crypto,
1121 .db,
1122 .dsp,
1123 .fp_armv8,
1124 .mp,
1125 .neon,
1126 .trustzone,
1127 .has_v8,
1128 .virtualization,
1333 }),1129 }),
1334 };1130 };
1335 result[@enumToInt(Feature.v6t2)] = .{1131 result[@enumToInt(Feature.v8m)] = .{
1336 .llvm_name = "v6t2",1132 .llvm_name = "armv8-m.base",
1337 .description = "Support ARM v6t2 instructions",1133 .description = "ARMv8mBaseline architecture",
1338 .dependencies = featureSet(&[_]Feature{1134 .dependencies = featureSet(&[_]Feature{
1339 .thumb2,1135 .@"8msecext",
1340 .v6k,1136 .acquire_release,
1341 .v8m,1137 .db,
1138 .hwdiv,
1139 .mclass,
1140 .noarm,
1141 .strict_align,
1142 .thumb_mode,
1143 .has_v7clrex,
1144 .has_v8m,
1342 }),1145 }),
1343 };1146 };
1344 result[@enumToInt(Feature.v7)] = .{1147 result[@enumToInt(Feature.v8m_main)] = .{
1345 .llvm_name = "v7",1148 .llvm_name = "armv8-m.main",
1346 .description = "Support ARM v7 instructions",1149 .description = "ARMv8mMainline architecture",
1347 .dependencies = featureSet(&[_]Feature{1150 .dependencies = featureSet(&[_]Feature{
1348 .perfmon,1151 .@"8msecext",
1349 .v6t2,1152 .acquire_release,
1350 .v7clrex,1153 .db,
1154 .hwdiv,
1155 .mclass,
1156 .noarm,
1157 .thumb_mode,
1158 .has_v8m_main,
1351 }),1159 }),
1352 };1160 };
1353 result[@enumToInt(Feature.v7clrex)] = .{1161 result[@enumToInt(Feature.v8r)] = .{
1354 .llvm_name = "v7clrex",1162 .llvm_name = "armv8-r",
1355 .description = "Has v7 clrex instruction",1163 .description = "ARMv8r architecture",
1356 .dependencies = featureSet(&[_]Feature{}),
1357 };
1358 result[@enumToInt(Feature.v8)] = .{
1359 .llvm_name = "v8",
1360 .description = "Support ARM v8 instructions",
1361 .dependencies = featureSet(&[_]Feature{1164 .dependencies = featureSet(&[_]Feature{
1362 .acquire_release,1165 .crc,
1363 .v7,1166 .db,
1167 .dfb,
1168 .dsp,
1169 .fp_armv8,
1170 .mp,
1171 .neon,
1172 .rclass,
1173 .has_v8,
1174 .virtualization,
1364 }),1175 }),
1365 };1176 };
1366 result[@enumToInt(Feature.v8_1a)] = .{1177 result[@enumToInt(Feature.v8_1a)] = .{
1367 .llvm_name = "v8.1a",1178 .llvm_name = "armv8.1-a",
1368 .description = "Support ARM v8.1a instructions",1179 .description = "ARMv81a architecture",
1369 .dependencies = featureSet(&[_]Feature{1180 .dependencies = featureSet(&[_]Feature{
1370 .v8,1181 .aclass,
1182 .crc,
1183 .crypto,
1184 .db,
1185 .dsp,
1186 .fp_armv8,
1187 .mp,
1188 .neon,
1189 .trustzone,
1190 .has_v8_1a,
1191 .virtualization,
1371 }),1192 }),
1372 };1193 };
1373 result[@enumToInt(Feature.v8_1m_main)] = .{1194 result[@enumToInt(Feature.v8_1m_main)] = .{
1374 .llvm_name = "v8.1m.main",1195 .llvm_name = "armv8.1-m.main",
1375 .description = "Support ARM v8-1M Mainline instructions",1196 .description = "ARMv81mMainline architecture",
1376 .dependencies = featureSet(&[_]Feature{1197 .dependencies = featureSet(&[_]Feature{
1377 .v8m_main,1198 .@"8msecext",
1199 .acquire_release,
1200 .db,
1201 .hwdiv,
1202 .lob,
1203 .mclass,
1204 .noarm,
1205 .ras,
1206 .thumb_mode,
1207 .has_v8_1m_main,
1378 }),1208 }),
1379 };1209 };
1380 result[@enumToInt(Feature.v8_2a)] = .{1210 result[@enumToInt(Feature.v8_2a)] = .{
1381 .llvm_name = "v8.2a",1211 .llvm_name = "armv8.2-a",
1382 .description = "Support ARM v8.2a instructions",1212 .description = "ARMv82a architecture",
1383 .dependencies = featureSet(&[_]Feature{1213 .dependencies = featureSet(&[_]Feature{
1384 .v8_1a,1214 .aclass,
1215 .crc,
1216 .crypto,
1217 .db,
1218 .dsp,
1219 .fp_armv8,
1220 .mp,
1221 .neon,
1222 .ras,
1223 .trustzone,
1224 .has_v8_2a,
1225 .virtualization,
1385 }),1226 }),
1386 };1227 };
1387 result[@enumToInt(Feature.v8_3a)] = .{1228 result[@enumToInt(Feature.v8_3a)] = .{
1388 .llvm_name = "v8.3a",1229 .llvm_name = "armv8.3-a",
1389 .description = "Support ARM v8.3a instructions",1230 .description = "ARMv83a architecture",
1390 .dependencies = featureSet(&[_]Feature{1231 .dependencies = featureSet(&[_]Feature{
1391 .v8_2a,1232 .aclass,
1233 .crc,
1234 .crypto,
1235 .db,
1236 .dsp,
1237 .fp_armv8,
1238 .mp,
1239 .neon,
1240 .ras,
1241 .trustzone,
1242 .has_v8_3a,
1243 .virtualization,
1392 }),1244 }),
1393 };1245 };
1394 result[@enumToInt(Feature.v8_4a)] = .{1246 result[@enumToInt(Feature.v8_4a)] = .{
1395 .llvm_name = "v8.4a",1247 .llvm_name = "armv8.4-a",
1396 .description = "Support ARM v8.4a instructions",1248 .description = "ARMv84a architecture",
1397 .dependencies = featureSet(&[_]Feature{1249 .dependencies = featureSet(&[_]Feature{
1250 .aclass,
1251 .crc,
1252 .crypto,
1253 .db,
1398 .dotprod,1254 .dotprod,
1399 .v8_3a,1255 .dsp,
1256 .fp_armv8,
1257 .mp,
1258 .neon,
1259 .ras,
1260 .trustzone,
1261 .has_v8_4a,
1262 .virtualization,
1400 }),1263 }),
1401 };1264 };
1402 result[@enumToInt(Feature.v8_5a)] = .{1265 result[@enumToInt(Feature.v8_5a)] = .{
1403 .llvm_name = "v8.5a",1266 .llvm_name = "armv8.5-a",
1404 .description = "Support ARM v8.5a instructions",1267 .description = "ARMv85a architecture",
1405 .dependencies = featureSet(&[_]Feature{1268 .dependencies = featureSet(&[_]Feature{
1406 .sb,1269 .aclass,
1407 .v8_4a,1270 .crc,
1271 .crypto,
1272 .db,
1273 .dotprod,
1274 .dsp,
1275 .fp_armv8,
1276 .mp,
1277 .neon,
1278 .ras,
1279 .trustzone,
1280 .has_v8_5a,
1281 .virtualization,
1408 }),1282 }),
1409 };1283 };
1410 result[@enumToInt(Feature.v8_6a)] = .{1284 result[@enumToInt(Feature.v8_6a)] = .{
1411 .llvm_name = "v8.6a",1285 .llvm_name = "armv8.6-a",
1412 .description = "Support ARM v8.6a instructions",1286 .description = "ARMv86a architecture",
1413 .dependencies = featureSet(&[_]Feature{
1414 .bf16,
1415 ._i8mm,
1416 .v8_5a,
1417 }),
1418 };
1419 result[@enumToInt(Feature.v8m)] = .{
1420 .llvm_name = "v8m",
1421 .description = "Support ARM v8M Baseline instructions",
1422 .dependencies = featureSet(&[_]Feature{
1423 .v6m,
1424 }),
1425 };
1426 result[@enumToInt(Feature.v8m_main)] = .{
1427 .llvm_name = "v8m.main",
1428 .description = "Support ARM v8M Mainline instructions",
1429 .dependencies = featureSet(&[_]Feature{1287 .dependencies = featureSet(&[_]Feature{
1430 .v7,1288 .aclass,
1289 .crc,
1290 .crypto,
1291 .db,
1292 .dotprod,
1293 .dsp,
1294 .fp_armv8,
1295 .mp,
1296 .neon,
1297 .ras,
1298 .trustzone,
1299 .has_v8_6a,
1300 .virtualization,
1431 }),1301 }),
1432 };1302 };
1433 result[@enumToInt(Feature.vfp2)] = .{1303 result[@enumToInt(Feature.vfp2)] = .{
...@@ -1547,7 +1417,7 @@ pub const all_features = blk: {...@@ -1547,7 +1417,7 @@ pub const all_features = blk: {
1547 .llvm_name = "xscale",1417 .llvm_name = "xscale",
1548 .description = "ARMv5te architecture",1418 .description = "ARMv5te architecture",
1549 .dependencies = featureSet(&[_]Feature{1419 .dependencies = featureSet(&[_]Feature{
1550 .armv5te,1420 .has_v5te,
1551 }),1421 }),
1552 };1422 };
1553 result[@enumToInt(Feature.zcz)] = .{1423 result[@enumToInt(Feature.zcz)] = .{
...@@ -1568,49 +1438,49 @@ pub const cpu = struct {...@@ -1568,49 +1438,49 @@ pub const cpu = struct {
1568 .name = "arm1020e",1438 .name = "arm1020e",
1569 .llvm_name = "arm1020e",1439 .llvm_name = "arm1020e",
1570 .features = featureSet(&[_]Feature{1440 .features = featureSet(&[_]Feature{
1571 .armv5te,1441 .v5te,
1572 }),1442 }),
1573 };1443 };
1574 pub const arm1020t = CpuModel{1444 pub const arm1020t = CpuModel{
1575 .name = "arm1020t",1445 .name = "arm1020t",
1576 .llvm_name = "arm1020t",1446 .llvm_name = "arm1020t",
1577 .features = featureSet(&[_]Feature{1447 .features = featureSet(&[_]Feature{
1578 .armv5t,1448 .v5t,
1579 }),1449 }),
1580 };1450 };
1581 pub const arm1022e = CpuModel{1451 pub const arm1022e = CpuModel{
1582 .name = "arm1022e",1452 .name = "arm1022e",
1583 .llvm_name = "arm1022e",1453 .llvm_name = "arm1022e",
1584 .features = featureSet(&[_]Feature{1454 .features = featureSet(&[_]Feature{
1585 .armv5te,1455 .v5te,
1586 }),1456 }),
1587 };1457 };
1588 pub const arm10e = CpuModel{1458 pub const arm10e = CpuModel{
1589 .name = "arm10e",1459 .name = "arm10e",
1590 .llvm_name = "arm10e",1460 .llvm_name = "arm10e",
1591 .features = featureSet(&[_]Feature{1461 .features = featureSet(&[_]Feature{
1592 .armv5te,1462 .v5te,
1593 }),1463 }),
1594 };1464 };
1595 pub const arm10tdmi = CpuModel{1465 pub const arm10tdmi = CpuModel{
1596 .name = "arm10tdmi",1466 .name = "arm10tdmi",
1597 .llvm_name = "arm10tdmi",1467 .llvm_name = "arm10tdmi",
1598 .features = featureSet(&[_]Feature{1468 .features = featureSet(&[_]Feature{
1599 .armv5t,1469 .v5t,
1600 }),1470 }),
1601 };1471 };
1602 pub const arm1136j_s = CpuModel{1472 pub const arm1136j_s = CpuModel{
1603 .name = "arm1136j_s",1473 .name = "arm1136j_s",
1604 .llvm_name = "arm1136j-s",1474 .llvm_name = "arm1136j-s",
1605 .features = featureSet(&[_]Feature{1475 .features = featureSet(&[_]Feature{
1606 .armv6,1476 .v6,
1607 }),1477 }),
1608 };1478 };
1609 pub const arm1136jf_s = CpuModel{1479 pub const arm1136jf_s = CpuModel{
1610 .name = "arm1136jf_s",1480 .name = "arm1136jf_s",
1611 .llvm_name = "arm1136jf-s",1481 .llvm_name = "arm1136jf-s",
1612 .features = featureSet(&[_]Feature{1482 .features = featureSet(&[_]Feature{
1613 .armv6,1483 .v6,
1614 .slowfpvmlx,1484 .slowfpvmlx,
1615 .vfp2,1485 .vfp2,
1616 }),1486 }),
...@@ -1619,14 +1489,14 @@ pub const cpu = struct {...@@ -1619,14 +1489,14 @@ pub const cpu = struct {
1619 .name = "arm1156t2_s",1489 .name = "arm1156t2_s",
1620 .llvm_name = "arm1156t2-s",1490 .llvm_name = "arm1156t2-s",
1621 .features = featureSet(&[_]Feature{1491 .features = featureSet(&[_]Feature{
1622 .armv6t2,1492 .v6t2,
1623 }),1493 }),
1624 };1494 };
1625 pub const arm1156t2f_s = CpuModel{1495 pub const arm1156t2f_s = CpuModel{
1626 .name = "arm1156t2f_s",1496 .name = "arm1156t2f_s",
1627 .llvm_name = "arm1156t2f-s",1497 .llvm_name = "arm1156t2f-s",
1628 .features = featureSet(&[_]Feature{1498 .features = featureSet(&[_]Feature{
1629 .armv6t2,1499 .v6t2,
1630 .slowfpvmlx,1500 .slowfpvmlx,
1631 .vfp2,1501 .vfp2,
1632 }),1502 }),
...@@ -1635,21 +1505,21 @@ pub const cpu = struct {...@@ -1635,21 +1505,21 @@ pub const cpu = struct {
1635 .name = "arm1176j_s",1505 .name = "arm1176j_s",
1636 .llvm_name = "arm1176j-s",1506 .llvm_name = "arm1176j-s",
1637 .features = featureSet(&[_]Feature{1507 .features = featureSet(&[_]Feature{
1638 .armv6kz,1508 .v6kz,
1639 }),1509 }),
1640 };1510 };
1641 pub const arm1176jz_s = CpuModel{1511 pub const arm1176jz_s = CpuModel{
1642 .name = "arm1176jz_s",1512 .name = "arm1176jz_s",
1643 .llvm_name = "arm1176jz-s",1513 .llvm_name = "arm1176jz-s",
1644 .features = featureSet(&[_]Feature{1514 .features = featureSet(&[_]Feature{
1645 .armv6kz,1515 .v6kz,
1646 }),1516 }),
1647 };1517 };
1648 pub const arm1176jzf_s = CpuModel{1518 pub const arm1176jzf_s = CpuModel{
1649 .name = "arm1176jzf_s",1519 .name = "arm1176jzf_s",
1650 .llvm_name = "arm1176jzf-s",1520 .llvm_name = "arm1176jzf-s",
1651 .features = featureSet(&[_]Feature{1521 .features = featureSet(&[_]Feature{
1652 .armv6kz,1522 .v6kz,
1653 .slowfpvmlx,1523 .slowfpvmlx,
1654 .vfp2,1524 .vfp2,
1655 }),1525 }),
...@@ -1658,127 +1528,133 @@ pub const cpu = struct {...@@ -1658,127 +1528,133 @@ pub const cpu = struct {
1658 .name = "arm710t",1528 .name = "arm710t",
1659 .llvm_name = "arm710t",1529 .llvm_name = "arm710t",
1660 .features = featureSet(&[_]Feature{1530 .features = featureSet(&[_]Feature{
1661 .armv4t,1531 .v4t,
1662 }),1532 }),
1663 };1533 };
1664 pub const arm720t = CpuModel{1534 pub const arm720t = CpuModel{
1665 .name = "arm720t",1535 .name = "arm720t",
1666 .llvm_name = "arm720t",1536 .llvm_name = "arm720t",
1667 .features = featureSet(&[_]Feature{1537 .features = featureSet(&[_]Feature{
1668 .armv4t,1538 .v4t,
1669 }),1539 }),
1670 };1540 };
1671 pub const arm7tdmi = CpuModel{1541 pub const arm7tdmi = CpuModel{
1672 .name = "arm7tdmi",1542 .name = "arm7tdmi",
1673 .llvm_name = "arm7tdmi",1543 .llvm_name = "arm7tdmi",
1674 .features = featureSet(&[_]Feature{1544 .features = featureSet(&[_]Feature{
1675 .armv4t,1545 .v4t,
1676 }),1546 }),
1677 };1547 };
1678 pub const arm7tdmi_s = CpuModel{1548 pub const arm7tdmi_s = CpuModel{
1679 .name = "arm7tdmi_s",1549 .name = "arm7tdmi_s",
1680 .llvm_name = "arm7tdmi-s",1550 .llvm_name = "arm7tdmi-s",
1681 .features = featureSet(&[_]Feature{1551 .features = featureSet(&[_]Feature{
1682 .armv4t,1552 .v4t,
1683 }),1553 }),
1684 };1554 };
1685 pub const arm8 = CpuModel{1555 pub const arm8 = CpuModel{
1686 .name = "arm8",1556 .name = "arm8",
1687 .llvm_name = "arm8",1557 .llvm_name = "arm8",
1688 .features = featureSet(&[_]Feature{1558 .features = featureSet(&[_]Feature{
1689 .armv4,1559 .v4,
1690 }),1560 }),
1691 };1561 };
1692 pub const arm810 = CpuModel{1562 pub const arm810 = CpuModel{
1693 .name = "arm810",1563 .name = "arm810",
1694 .llvm_name = "arm810",1564 .llvm_name = "arm810",
1695 .features = featureSet(&[_]Feature{1565 .features = featureSet(&[_]Feature{
1696 .armv4,1566 .v4,
1697 }),1567 }),
1698 };1568 };
1699 pub const arm9 = CpuModel{1569 pub const arm9 = CpuModel{
1700 .name = "arm9",1570 .name = "arm9",
1701 .llvm_name = "arm9",1571 .llvm_name = "arm9",
1702 .features = featureSet(&[_]Feature{1572 .features = featureSet(&[_]Feature{
1703 .armv4t,1573 .v4t,
1704 }),1574 }),
1705 };1575 };
1706 pub const arm920 = CpuModel{1576 pub const arm920 = CpuModel{
1707 .name = "arm920",1577 .name = "arm920",
1708 .llvm_name = "arm920",1578 .llvm_name = "arm920",
1709 .features = featureSet(&[_]Feature{1579 .features = featureSet(&[_]Feature{
1710 .armv4t,1580 .v4t,
1711 }),1581 }),
1712 };1582 };
1713 pub const arm920t = CpuModel{1583 pub const arm920t = CpuModel{
1714 .name = "arm920t",1584 .name = "arm920t",
1715 .llvm_name = "arm920t",1585 .llvm_name = "arm920t",
1716 .features = featureSet(&[_]Feature{1586 .features = featureSet(&[_]Feature{
1717 .armv4t,1587 .v4t,
1718 }),1588 }),
1719 };1589 };
1720 pub const arm922t = CpuModel{1590 pub const arm922t = CpuModel{
1721 .name = "arm922t",1591 .name = "arm922t",
1722 .llvm_name = "arm922t",1592 .llvm_name = "arm922t",
1723 .features = featureSet(&[_]Feature{1593 .features = featureSet(&[_]Feature{
1724 .armv4t,1594 .v4t,
1725 }),1595 }),
1726 };1596 };
1727 pub const arm926ej_s = CpuModel{1597 pub const arm926ej_s = CpuModel{
1728 .name = "arm926ej_s",1598 .name = "arm926ej_s",
1729 .llvm_name = "arm926ej-s",1599 .llvm_name = "arm926ej-s",
1730 .features = featureSet(&[_]Feature{1600 .features = featureSet(&[_]Feature{
1731 .armv5te,1601 .v5te,
1732 }),1602 }),
1733 };1603 };
1734 pub const arm940t = CpuModel{1604 pub const arm940t = CpuModel{
1735 .name = "arm940t",1605 .name = "arm940t",
1736 .llvm_name = "arm940t",1606 .llvm_name = "arm940t",
1737 .features = featureSet(&[_]Feature{1607 .features = featureSet(&[_]Feature{
1738 .armv4t,1608 .v4t,
1739 }),1609 }),
1740 };1610 };
1741 pub const arm946e_s = CpuModel{1611 pub const arm946e_s = CpuModel{
1742 .name = "arm946e_s",1612 .name = "arm946e_s",
1743 .llvm_name = "arm946e-s",1613 .llvm_name = "arm946e-s",
1744 .features = featureSet(&[_]Feature{1614 .features = featureSet(&[_]Feature{
1745 .armv5te,1615 .v5te,
1746 }),1616 }),
1747 };1617 };
1748 pub const arm966e_s = CpuModel{1618 pub const arm966e_s = CpuModel{
1749 .name = "arm966e_s",1619 .name = "arm966e_s",
1750 .llvm_name = "arm966e-s",1620 .llvm_name = "arm966e-s",
1751 .features = featureSet(&[_]Feature{1621 .features = featureSet(&[_]Feature{
1752 .armv5te,1622 .v5te,
1753 }),1623 }),
1754 };1624 };
1755 pub const arm968e_s = CpuModel{1625 pub const arm968e_s = CpuModel{
1756 .name = "arm968e_s",1626 .name = "arm968e_s",
1757 .llvm_name = "arm968e-s",1627 .llvm_name = "arm968e-s",
1758 .features = featureSet(&[_]Feature{1628 .features = featureSet(&[_]Feature{
1759 .armv5te,1629 .v5te,
1760 }),1630 }),
1761 };1631 };
1762 pub const arm9e = CpuModel{1632 pub const arm9e = CpuModel{
1763 .name = "arm9e",1633 .name = "arm9e",
1764 .llvm_name = "arm9e",1634 .llvm_name = "arm9e",
1765 .features = featureSet(&[_]Feature{1635 .features = featureSet(&[_]Feature{
1766 .armv5te,1636 .v5te,
1767 }),1637 }),
1768 };1638 };
1769 pub const arm9tdmi = CpuModel{1639 pub const arm9tdmi = CpuModel{
1770 .name = "arm9tdmi",1640 .name = "arm9tdmi",
1771 .llvm_name = "arm9tdmi",1641 .llvm_name = "arm9tdmi",
1772 .features = featureSet(&[_]Feature{1642 .features = featureSet(&[_]Feature{
1773 .armv4t,1643 .v4t,
1644 }),
1645 };
1646 pub const baseline = CpuModel{
1647 .name = "baseline",
1648 .llvm_name = "generic",
1649 .features = featureSet(&[_]Feature{
1650 .v7a,
1774 }),1651 }),
1775 };1652 };
1776 pub const cortex_a12 = CpuModel{1653 pub const cortex_a12 = CpuModel{
1777 .name = "cortex_a12",1654 .name = "cortex_a12",
1778 .llvm_name = "cortex-a12",1655 .llvm_name = "cortex-a12",
1779 .features = featureSet(&[_]Feature{1656 .features = featureSet(&[_]Feature{
1780 .a12,1657 .v7a,
1781 .armv7_a,
1782 .avoid_partial_cpsr,1658 .avoid_partial_cpsr,
1783 .mp,1659 .mp,
1784 .ret_addr_stack,1660 .ret_addr_stack,
...@@ -1792,8 +1668,7 @@ pub const cpu = struct {...@@ -1792,8 +1668,7 @@ pub const cpu = struct {
1792 .name = "cortex_a15",1668 .name = "cortex_a15",
1793 .llvm_name = "cortex-a15",1669 .llvm_name = "cortex-a15",
1794 .features = featureSet(&[_]Feature{1670 .features = featureSet(&[_]Feature{
1795 .a15,1671 .v7a,
1796 .armv7_a,
1797 .avoid_partial_cpsr,1672 .avoid_partial_cpsr,
1798 .dont_widen_vmovs,1673 .dont_widen_vmovs,
1799 .mp,1674 .mp,
...@@ -1810,8 +1685,7 @@ pub const cpu = struct {...@@ -1810,8 +1685,7 @@ pub const cpu = struct {
1810 .name = "cortex_a17",1685 .name = "cortex_a17",
1811 .llvm_name = "cortex-a17",1686 .llvm_name = "cortex-a17",
1812 .features = featureSet(&[_]Feature{1687 .features = featureSet(&[_]Feature{
1813 .a17,1688 .v7a,
1814 .armv7_a,
1815 .avoid_partial_cpsr,1689 .avoid_partial_cpsr,
1816 .mp,1690 .mp,
1817 .ret_addr_stack,1691 .ret_addr_stack,
...@@ -1825,31 +1699,29 @@ pub const cpu = struct {...@@ -1825,31 +1699,29 @@ pub const cpu = struct {
1825 .name = "cortex_a32",1699 .name = "cortex_a32",
1826 .llvm_name = "cortex-a32",1700 .llvm_name = "cortex-a32",
1827 .features = featureSet(&[_]Feature{1701 .features = featureSet(&[_]Feature{
1828 .armv8_a,
1829 .crc,1702 .crc,
1830 .crypto,1703 .crypto,
1831 .hwdiv,1704 .hwdiv,
1832 .hwdiv_arm,1705 .hwdiv_arm,
1706 .v8a,
1833 }),1707 }),
1834 };1708 };
1835 pub const cortex_a35 = CpuModel{1709 pub const cortex_a35 = CpuModel{
1836 .name = "cortex_a35",1710 .name = "cortex_a35",
1837 .llvm_name = "cortex-a35",1711 .llvm_name = "cortex-a35",
1838 .features = featureSet(&[_]Feature{1712 .features = featureSet(&[_]Feature{
1839 .a35,
1840 .armv8_a,
1841 .crc,1713 .crc,
1842 .crypto,1714 .crypto,
1843 .hwdiv,1715 .hwdiv,
1844 .hwdiv_arm,1716 .hwdiv_arm,
1717 .v8a,
1845 }),1718 }),
1846 };1719 };
1847 pub const cortex_a5 = CpuModel{1720 pub const cortex_a5 = CpuModel{
1848 .name = "cortex_a5",1721 .name = "cortex_a5",
1849 .llvm_name = "cortex-a5",1722 .llvm_name = "cortex-a5",
1850 .features = featureSet(&[_]Feature{1723 .features = featureSet(&[_]Feature{
1851 .a5,1724 .v7a,
1852 .armv7_a,
1853 .mp,1725 .mp,
1854 .ret_addr_stack,1726 .ret_addr_stack,
1855 .slow_fp_brcc,1727 .slow_fp_brcc,
...@@ -1864,8 +1736,7 @@ pub const cpu = struct {...@@ -1864,8 +1736,7 @@ pub const cpu = struct {
1864 .name = "cortex_a53",1736 .name = "cortex_a53",
1865 .llvm_name = "cortex-a53",1737 .llvm_name = "cortex-a53",
1866 .features = featureSet(&[_]Feature{1738 .features = featureSet(&[_]Feature{
1867 .a53,1739 .v8a,
1868 .armv8_a,
1869 .crc,1740 .crc,
1870 .crypto,1741 .crypto,
1871 .fpao,1742 .fpao,
...@@ -1877,8 +1748,7 @@ pub const cpu = struct {...@@ -1877,8 +1748,7 @@ pub const cpu = struct {
1877 .name = "cortex_a55",1748 .name = "cortex_a55",
1878 .llvm_name = "cortex-a55",1749 .llvm_name = "cortex-a55",
1879 .features = featureSet(&[_]Feature{1750 .features = featureSet(&[_]Feature{
1880 .a55,1751 .v8_2a,
1881 .armv8_2_a,
1882 .dotprod,1752 .dotprod,
1883 .hwdiv,1753 .hwdiv,
1884 .hwdiv_arm,1754 .hwdiv_arm,
...@@ -1888,8 +1758,7 @@ pub const cpu = struct {...@@ -1888,8 +1758,7 @@ pub const cpu = struct {
1888 .name = "cortex_a57",1758 .name = "cortex_a57",
1889 .llvm_name = "cortex-a57",1759 .llvm_name = "cortex-a57",
1890 .features = featureSet(&[_]Feature{1760 .features = featureSet(&[_]Feature{
1891 .a57,1761 .v8a,
1892 .armv8_a,
1893 .avoid_partial_cpsr,1762 .avoid_partial_cpsr,
1894 .cheap_predicable_cpsr,1763 .cheap_predicable_cpsr,
1895 .crc,1764 .crc,
...@@ -1903,8 +1772,7 @@ pub const cpu = struct {...@@ -1903,8 +1772,7 @@ pub const cpu = struct {
1903 .name = "cortex_a7",1772 .name = "cortex_a7",
1904 .llvm_name = "cortex-a7",1773 .llvm_name = "cortex-a7",
1905 .features = featureSet(&[_]Feature{1774 .features = featureSet(&[_]Feature{
1906 .a7,1775 .v7a,
1907 .armv7_a,
1908 .mp,1776 .mp,
1909 .ret_addr_stack,1777 .ret_addr_stack,
1910 .slow_fp_brcc,1778 .slow_fp_brcc,
...@@ -1921,8 +1789,7 @@ pub const cpu = struct {...@@ -1921,8 +1789,7 @@ pub const cpu = struct {
1921 .name = "cortex_a72",1789 .name = "cortex_a72",
1922 .llvm_name = "cortex-a72",1790 .llvm_name = "cortex-a72",
1923 .features = featureSet(&[_]Feature{1791 .features = featureSet(&[_]Feature{
1924 .a72,1792 .v8a,
1925 .armv8_a,
1926 .crc,1793 .crc,
1927 .crypto,1794 .crypto,
1928 .hwdiv,1795 .hwdiv,
...@@ -1933,8 +1800,7 @@ pub const cpu = struct {...@@ -1933,8 +1800,7 @@ pub const cpu = struct {
1933 .name = "cortex_a73",1800 .name = "cortex_a73",
1934 .llvm_name = "cortex-a73",1801 .llvm_name = "cortex-a73",
1935 .features = featureSet(&[_]Feature{1802 .features = featureSet(&[_]Feature{
1936 .a73,1803 .v8a,
1937 .armv8_a,
1938 .crc,1804 .crc,
1939 .crypto,1805 .crypto,
1940 .hwdiv,1806 .hwdiv,
...@@ -1945,8 +1811,7 @@ pub const cpu = struct {...@@ -1945,8 +1811,7 @@ pub const cpu = struct {
1945 .name = "cortex_a75",1811 .name = "cortex_a75",
1946 .llvm_name = "cortex-a75",1812 .llvm_name = "cortex-a75",
1947 .features = featureSet(&[_]Feature{1813 .features = featureSet(&[_]Feature{
1948 .a75,1814 .v8_2a,
1949 .armv8_2_a,
1950 .dotprod,1815 .dotprod,
1951 .hwdiv,1816 .hwdiv,
1952 .hwdiv_arm,1817 .hwdiv_arm,
...@@ -1957,7 +1822,7 @@ pub const cpu = struct {...@@ -1957,7 +1822,7 @@ pub const cpu = struct {
1957 .llvm_name = "cortex-a76",1822 .llvm_name = "cortex-a76",
1958 .features = featureSet(&[_]Feature{1823 .features = featureSet(&[_]Feature{
1959 .a76,1824 .a76,
1960 .armv8_2_a,1825 .v8_2a,
1961 .crc,1826 .crc,
1962 .crypto,1827 .crypto,
1963 .dotprod,1828 .dotprod,
...@@ -1971,7 +1836,7 @@ pub const cpu = struct {...@@ -1971,7 +1836,7 @@ pub const cpu = struct {
1971 .llvm_name = "cortex-a76ae",1836 .llvm_name = "cortex-a76ae",
1972 .features = featureSet(&[_]Feature{1837 .features = featureSet(&[_]Feature{
1973 .a76,1838 .a76,
1974 .armv8_2_a,1839 .v8_2a,
1975 .crc,1840 .crc,
1976 .crypto,1841 .crypto,
1977 .dotprod,1842 .dotprod,
...@@ -1984,8 +1849,7 @@ pub const cpu = struct {...@@ -1984,8 +1849,7 @@ pub const cpu = struct {
1984 .name = "cortex_a77",1849 .name = "cortex_a77",
1985 .llvm_name = "cortex-a77",1850 .llvm_name = "cortex-a77",
1986 .features = featureSet(&[_]Feature{1851 .features = featureSet(&[_]Feature{
1987 .a77,1852 .v8_2a,
1988 .armv8_2_a,
1989 .crc,1853 .crc,
1990 .crypto,1854 .crypto,
1991 .dotprod,1855 .dotprod,
...@@ -1998,8 +1862,7 @@ pub const cpu = struct {...@@ -1998,8 +1862,7 @@ pub const cpu = struct {
1998 .name = "cortex_a78",1862 .name = "cortex_a78",
1999 .llvm_name = "cortex-a78",1863 .llvm_name = "cortex-a78",
2000 .features = featureSet(&[_]Feature{1864 .features = featureSet(&[_]Feature{
2001 .armv8_2_a,1865 .v8_2a,
2002 .cortex_a78,
2003 .crc,1866 .crc,
2004 .crypto,1867 .crypto,
2005 .dotprod,1868 .dotprod,
...@@ -2012,8 +1875,7 @@ pub const cpu = struct {...@@ -2012,8 +1875,7 @@ pub const cpu = struct {
2012 .name = "cortex_a8",1875 .name = "cortex_a8",
2013 .llvm_name = "cortex-a8",1876 .llvm_name = "cortex-a8",
2014 .features = featureSet(&[_]Feature{1877 .features = featureSet(&[_]Feature{
2015 .a8,1878 .v7a,
2016 .armv7_a,
2017 .nonpipelined_vfp,1879 .nonpipelined_vfp,
2018 .ret_addr_stack,1880 .ret_addr_stack,
2019 .slow_fp_brcc,1881 .slow_fp_brcc,
...@@ -2028,8 +1890,7 @@ pub const cpu = struct {...@@ -2028,8 +1890,7 @@ pub const cpu = struct {
2028 .name = "cortex_a9",1890 .name = "cortex_a9",
2029 .llvm_name = "cortex-a9",1891 .llvm_name = "cortex-a9",
2030 .features = featureSet(&[_]Feature{1892 .features = featureSet(&[_]Feature{
2031 .a9,1893 .v7a,
2032 .armv7_a,
2033 .avoid_partial_cpsr,1894 .avoid_partial_cpsr,
2034 .expand_fp_mlx,1895 .expand_fp_mlx,
2035 .fp16,1896 .fp16,
...@@ -2048,28 +1909,28 @@ pub const cpu = struct {...@@ -2048,28 +1909,28 @@ pub const cpu = struct {
2048 .name = "cortex_m0",1909 .name = "cortex_m0",
2049 .llvm_name = "cortex-m0",1910 .llvm_name = "cortex-m0",
2050 .features = featureSet(&[_]Feature{1911 .features = featureSet(&[_]Feature{
2051 .armv6_m,1912 .v6m,
2052 }),1913 }),
2053 };1914 };
2054 pub const cortex_m0plus = CpuModel{1915 pub const cortex_m0plus = CpuModel{
2055 .name = "cortex_m0plus",1916 .name = "cortex_m0plus",
2056 .llvm_name = "cortex-m0plus",1917 .llvm_name = "cortex-m0plus",
2057 .features = featureSet(&[_]Feature{1918 .features = featureSet(&[_]Feature{
2058 .armv6_m,1919 .v6m,
2059 }),1920 }),
2060 };1921 };
2061 pub const cortex_m1 = CpuModel{1922 pub const cortex_m1 = CpuModel{
2062 .name = "cortex_m1",1923 .name = "cortex_m1",
2063 .llvm_name = "cortex-m1",1924 .llvm_name = "cortex-m1",
2064 .features = featureSet(&[_]Feature{1925 .features = featureSet(&[_]Feature{
2065 .armv6_m,1926 .v6m,
2066 }),1927 }),
2067 };1928 };
2068 pub const cortex_m23 = CpuModel{1929 pub const cortex_m23 = CpuModel{
2069 .name = "cortex_m23",1930 .name = "cortex_m23",
2070 .llvm_name = "cortex-m23",1931 .llvm_name = "cortex-m23",
2071 .features = featureSet(&[_]Feature{1932 .features = featureSet(&[_]Feature{
2072 .armv8_m_base,1933 .v8m,
2073 .no_movt,1934 .no_movt,
2074 }),1935 }),
2075 };1936 };
...@@ -2077,7 +1938,7 @@ pub const cpu = struct {...@@ -2077,7 +1938,7 @@ pub const cpu = struct {
2077 .name = "cortex_m3",1938 .name = "cortex_m3",
2078 .llvm_name = "cortex-m3",1939 .llvm_name = "cortex-m3",
2079 .features = featureSet(&[_]Feature{1940 .features = featureSet(&[_]Feature{
2080 .armv7_m,1941 .v7m,
2081 .loop_align,1942 .loop_align,
2082 .m3,1943 .m3,
2083 .no_branch_predictor,1944 .no_branch_predictor,
...@@ -2088,7 +1949,7 @@ pub const cpu = struct {...@@ -2088,7 +1949,7 @@ pub const cpu = struct {
2088 .name = "cortex_m33",1949 .name = "cortex_m33",
2089 .llvm_name = "cortex-m33",1950 .llvm_name = "cortex-m33",
2090 .features = featureSet(&[_]Feature{1951 .features = featureSet(&[_]Feature{
2091 .armv8_m_main,1952 .v8m_main,
2092 .dsp,1953 .dsp,
2093 .fp_armv8d16sp,1954 .fp_armv8d16sp,
2094 .loop_align,1955 .loop_align,
...@@ -2102,7 +1963,7 @@ pub const cpu = struct {...@@ -2102,7 +1963,7 @@ pub const cpu = struct {
2102 .name = "cortex_m35p",1963 .name = "cortex_m35p",
2103 .llvm_name = "cortex-m35p",1964 .llvm_name = "cortex-m35p",
2104 .features = featureSet(&[_]Feature{1965 .features = featureSet(&[_]Feature{
2105 .armv8_m_main,1966 .v8m_main,
2106 .dsp,1967 .dsp,
2107 .fp_armv8d16sp,1968 .fp_armv8d16sp,
2108 .loop_align,1969 .loop_align,
...@@ -2116,7 +1977,7 @@ pub const cpu = struct {...@@ -2116,7 +1977,7 @@ pub const cpu = struct {
2116 .name = "cortex_m4",1977 .name = "cortex_m4",
2117 .llvm_name = "cortex-m4",1978 .llvm_name = "cortex-m4",
2118 .features = featureSet(&[_]Feature{1979 .features = featureSet(&[_]Feature{
2119 .armv7e_m,1980 .v7em,
2120 .loop_align,1981 .loop_align,
2121 .no_branch_predictor,1982 .no_branch_predictor,
2122 .slowfpvfmx,1983 .slowfpvfmx,
...@@ -2129,7 +1990,7 @@ pub const cpu = struct {...@@ -2129,7 +1990,7 @@ pub const cpu = struct {
2129 .name = "cortex_m55",1990 .name = "cortex_m55",
2130 .llvm_name = "cortex-m55",1991 .llvm_name = "cortex-m55",
2131 .features = featureSet(&[_]Feature{1992 .features = featureSet(&[_]Feature{
2132 .armv8_1_m_main,1993 .v8_1m_main,
2133 .dsp,1994 .dsp,
2134 .fp_armv8d16,1995 .fp_armv8d16,
2135 .loop_align,1996 .loop_align,
...@@ -2143,16 +2004,15 @@ pub const cpu = struct {...@@ -2143,16 +2004,15 @@ pub const cpu = struct {
2143 .name = "cortex_m7",2004 .name = "cortex_m7",
2144 .llvm_name = "cortex-m7",2005 .llvm_name = "cortex-m7",
2145 .features = featureSet(&[_]Feature{2006 .features = featureSet(&[_]Feature{
2146 .armv7e_m,2007 .v7em,
2147 .fp_armv8d16,2008 .fp_armv8d16,
2148 .use_misched,
2149 }),2009 }),
2150 };2010 };
2151 pub const cortex_r4 = CpuModel{2011 pub const cortex_r4 = CpuModel{
2152 .name = "cortex_r4",2012 .name = "cortex_r4",
2153 .llvm_name = "cortex-r4",2013 .llvm_name = "cortex-r4",
2154 .features = featureSet(&[_]Feature{2014 .features = featureSet(&[_]Feature{
2155 .armv7_r,2015 .v7r,
2156 .avoid_partial_cpsr,2016 .avoid_partial_cpsr,
2157 .r4,2017 .r4,
2158 .ret_addr_stack,2018 .ret_addr_stack,
...@@ -2162,7 +2022,7 @@ pub const cpu = struct {...@@ -2162,7 +2022,7 @@ pub const cpu = struct {
2162 .name = "cortex_r4f",2022 .name = "cortex_r4f",
2163 .llvm_name = "cortex-r4f",2023 .llvm_name = "cortex-r4f",
2164 .features = featureSet(&[_]Feature{2024 .features = featureSet(&[_]Feature{
2165 .armv7_r,2025 .v7r,
2166 .avoid_partial_cpsr,2026 .avoid_partial_cpsr,
2167 .r4,2027 .r4,
2168 .ret_addr_stack,2028 .ret_addr_stack,
...@@ -2176,10 +2036,9 @@ pub const cpu = struct {...@@ -2176,10 +2036,9 @@ pub const cpu = struct {
2176 .name = "cortex_r5",2036 .name = "cortex_r5",
2177 .llvm_name = "cortex-r5",2037 .llvm_name = "cortex-r5",
2178 .features = featureSet(&[_]Feature{2038 .features = featureSet(&[_]Feature{
2179 .armv7_r,2039 .v7r,
2180 .avoid_partial_cpsr,2040 .avoid_partial_cpsr,
2181 .hwdiv_arm,2041 .hwdiv_arm,
2182 .r5,
2183 .ret_addr_stack,2042 .ret_addr_stack,
2184 .slow_fp_brcc,2043 .slow_fp_brcc,
2185 .slowfpvfmx,2044 .slowfpvfmx,
...@@ -2191,9 +2050,8 @@ pub const cpu = struct {...@@ -2191,9 +2050,8 @@ pub const cpu = struct {
2191 .name = "cortex_r52",2050 .name = "cortex_r52",
2192 .llvm_name = "cortex-r52",2051 .llvm_name = "cortex-r52",
2193 .features = featureSet(&[_]Feature{2052 .features = featureSet(&[_]Feature{
2194 .armv8_r,2053 .v8r,
2195 .fpao,2054 .fpao,
2196 .r52,
2197 .use_misched,2055 .use_misched,
2198 }),2056 }),
2199 };2057 };
...@@ -2201,12 +2059,11 @@ pub const cpu = struct {...@@ -2201,12 +2059,11 @@ pub const cpu = struct {
2201 .name = "cortex_r7",2059 .name = "cortex_r7",
2202 .llvm_name = "cortex-r7",2060 .llvm_name = "cortex-r7",
2203 .features = featureSet(&[_]Feature{2061 .features = featureSet(&[_]Feature{
2204 .armv7_r,2062 .v7r,
2205 .avoid_partial_cpsr,2063 .avoid_partial_cpsr,
2206 .fp16,2064 .fp16,
2207 .hwdiv_arm,2065 .hwdiv_arm,
2208 .mp,2066 .mp,
2209 .r7,
2210 .ret_addr_stack,2067 .ret_addr_stack,
2211 .slow_fp_brcc,2068 .slow_fp_brcc,
2212 .slowfpvfmx,2069 .slowfpvfmx,
...@@ -2218,7 +2075,7 @@ pub const cpu = struct {...@@ -2218,7 +2075,7 @@ pub const cpu = struct {
2218 .name = "cortex_r8",2075 .name = "cortex_r8",
2219 .llvm_name = "cortex-r8",2076 .llvm_name = "cortex-r8",
2220 .features = featureSet(&[_]Feature{2077 .features = featureSet(&[_]Feature{
2221 .armv7_r,2078 .v7r,
2222 .avoid_partial_cpsr,2079 .avoid_partial_cpsr,
2223 .fp16,2080 .fp16,
2224 .hwdiv_arm,2081 .hwdiv_arm,
...@@ -2234,8 +2091,7 @@ pub const cpu = struct {...@@ -2234,8 +2091,7 @@ pub const cpu = struct {
2234 .name = "cortex_x1",2091 .name = "cortex_x1",
2235 .llvm_name = "cortex-x1",2092 .llvm_name = "cortex-x1",
2236 .features = featureSet(&[_]Feature{2093 .features = featureSet(&[_]Feature{
2237 .armv8_2_a,2094 .v8_2a,
2238 .cortex_x1,
2239 .crc,2095 .crc,
2240 .crypto,2096 .crypto,
2241 .dotprod,2097 .dotprod,
...@@ -2248,7 +2104,7 @@ pub const cpu = struct {...@@ -2248,7 +2104,7 @@ pub const cpu = struct {
2248 .name = "cyclone",2104 .name = "cyclone",
2249 .llvm_name = "cyclone",2105 .llvm_name = "cyclone",
2250 .features = featureSet(&[_]Feature{2106 .features = featureSet(&[_]Feature{
2251 .armv8_a,2107 .v8a,
2252 .avoid_movs_shop,2108 .avoid_movs_shop,
2253 .avoid_partial_cpsr,2109 .avoid_partial_cpsr,
2254 .crypto,2110 .crypto,
...@@ -2270,14 +2126,30 @@ pub const cpu = struct {...@@ -2270,14 +2126,30 @@ pub const cpu = struct {
2270 .name = "ep9312",2126 .name = "ep9312",
2271 .llvm_name = "ep9312",2127 .llvm_name = "ep9312",
2272 .features = featureSet(&[_]Feature{2128 .features = featureSet(&[_]Feature{
2273 .armv4t,2129 .v4t,
2130 }),
2131 };
2132 pub const exynos_m1 = CpuModel{
2133 .name = "exynos_m1",
2134 .llvm_name = null,
2135 .features = featureSet(&[_]Feature{
2136 .v8a,
2137 .exynos,
2138 }),
2139 };
2140 pub const exynos_m2 = CpuModel{
2141 .name = "exynos_m2",
2142 .llvm_name = null,
2143 .features = featureSet(&[_]Feature{
2144 .v8a,
2145 .exynos,
2274 }),2146 }),
2275 };2147 };
2276 pub const exynos_m3 = CpuModel{2148 pub const exynos_m3 = CpuModel{
2277 .name = "exynos_m3",2149 .name = "exynos_m3",
2278 .llvm_name = "exynos-m3",2150 .llvm_name = "exynos-m3",
2279 .features = featureSet(&[_]Feature{2151 .features = featureSet(&[_]Feature{
2280 .armv8_a,2152 .v8_2a,
2281 .exynos,2153 .exynos,
2282 }),2154 }),
2283 };2155 };
...@@ -2285,7 +2157,7 @@ pub const cpu = struct {...@@ -2285,7 +2157,7 @@ pub const cpu = struct {
2285 .name = "exynos_m4",2157 .name = "exynos_m4",
2286 .llvm_name = "exynos-m4",2158 .llvm_name = "exynos-m4",
2287 .features = featureSet(&[_]Feature{2159 .features = featureSet(&[_]Feature{
2288 .armv8_2_a,2160 .v8_2a,
2289 .dotprod,2161 .dotprod,
2290 .exynos,2162 .exynos,
2291 .fullfp16,2163 .fullfp16,
...@@ -2295,10 +2167,10 @@ pub const cpu = struct {...@@ -2295,10 +2167,10 @@ pub const cpu = struct {
2295 .name = "exynos_m5",2167 .name = "exynos_m5",
2296 .llvm_name = "exynos-m5",2168 .llvm_name = "exynos-m5",
2297 .features = featureSet(&[_]Feature{2169 .features = featureSet(&[_]Feature{
2298 .armv8_2_a,
2299 .dotprod,2170 .dotprod,
2300 .exynos,2171 .exynos,
2301 .fullfp16,2172 .fullfp16,
2173 .v8_2a,
2302 }),2174 }),
2303 };2175 };
2304 pub const generic = CpuModel{2176 pub const generic = CpuModel{
...@@ -2310,21 +2182,20 @@ pub const cpu = struct {...@@ -2310,21 +2182,20 @@ pub const cpu = struct {
2310 .name = "iwmmxt",2182 .name = "iwmmxt",
2311 .llvm_name = "iwmmxt",2183 .llvm_name = "iwmmxt",
2312 .features = featureSet(&[_]Feature{2184 .features = featureSet(&[_]Feature{
2313 .armv5te,2185 .v5te,
2314 }),2186 }),
2315 };2187 };
2316 pub const krait = CpuModel{2188 pub const krait = CpuModel{
2317 .name = "krait",2189 .name = "krait",
2318 .llvm_name = "krait",2190 .llvm_name = "krait",
2319 .features = featureSet(&[_]Feature{2191 .features = featureSet(&[_]Feature{
2320 .armv7_a,
2321 .avoid_partial_cpsr,2192 .avoid_partial_cpsr,
2322 .fp16,2193 .fp16,
2323 .hwdiv,2194 .hwdiv,
2324 .hwdiv_arm,2195 .hwdiv_arm,
2325 .krait,
2326 .muxed_units,2196 .muxed_units,
2327 .ret_addr_stack,2197 .ret_addr_stack,
2198 .v7a,
2328 .vfp4,2199 .vfp4,
2329 .vldn_align,2200 .vldn_align,
2330 .vmlx_forwarding,2201 .vmlx_forwarding,
...@@ -2334,19 +2205,18 @@ pub const cpu = struct {...@@ -2334,19 +2205,18 @@ pub const cpu = struct {
2334 .name = "kryo",2205 .name = "kryo",
2335 .llvm_name = "kryo",2206 .llvm_name = "kryo",
2336 .features = featureSet(&[_]Feature{2207 .features = featureSet(&[_]Feature{
2337 .armv8_a,
2338 .crc,2208 .crc,
2339 .crypto,2209 .crypto,
2340 .hwdiv,2210 .hwdiv,
2341 .hwdiv_arm,2211 .hwdiv_arm,
2342 .kryo,2212 .v8a,
2343 }),2213 }),
2344 };2214 };
2345 pub const mpcore = CpuModel{2215 pub const mpcore = CpuModel{
2346 .name = "mpcore",2216 .name = "mpcore",
2347 .llvm_name = "mpcore",2217 .llvm_name = "mpcore",
2348 .features = featureSet(&[_]Feature{2218 .features = featureSet(&[_]Feature{
2349 .armv6k,2219 .v6k,
2350 .slowfpvmlx,2220 .slowfpvmlx,
2351 .vfp2,2221 .vfp2,
2352 }),2222 }),
...@@ -2355,14 +2225,14 @@ pub const cpu = struct {...@@ -2355,14 +2225,14 @@ pub const cpu = struct {
2355 .name = "mpcorenovfp",2225 .name = "mpcorenovfp",
2356 .llvm_name = "mpcorenovfp",2226 .llvm_name = "mpcorenovfp",
2357 .features = featureSet(&[_]Feature{2227 .features = featureSet(&[_]Feature{
2358 .armv6k,2228 .v6k,
2359 }),2229 }),
2360 };2230 };
2361 pub const neoverse_n1 = CpuModel{2231 pub const neoverse_n1 = CpuModel{
2362 .name = "neoverse_n1",2232 .name = "neoverse_n1",
2363 .llvm_name = "neoverse-n1",2233 .llvm_name = "neoverse-n1",
2364 .features = featureSet(&[_]Feature{2234 .features = featureSet(&[_]Feature{
2365 .armv8_2_a,2235 .v8_2a,
2366 .crc,2236 .crc,
2367 .crypto,2237 .crypto,
2368 .dotprod,2238 .dotprod,
...@@ -2374,9 +2244,9 @@ pub const cpu = struct {...@@ -2374,9 +2244,9 @@ pub const cpu = struct {
2374 .name = "neoverse_n2",2244 .name = "neoverse_n2",
2375 .llvm_name = "neoverse-n2",2245 .llvm_name = "neoverse-n2",
2376 .features = featureSet(&[_]Feature{2246 .features = featureSet(&[_]Feature{
2377 .armv8_5_a,2247 .v8_5a,
2378 .bf16,2248 .bf16,
2379 ._i8mm,2249 .i8mm,
2380 .perfmon,2250 .perfmon,
2381 }),2251 }),
2382 };2252 };
...@@ -2384,28 +2254,28 @@ pub const cpu = struct {...@@ -2384,28 +2254,28 @@ pub const cpu = struct {
2384 .name = "neoverse_v1",2254 .name = "neoverse_v1",
2385 .llvm_name = "neoverse-v1",2255 .llvm_name = "neoverse-v1",
2386 .features = featureSet(&[_]Feature{2256 .features = featureSet(&[_]Feature{
2387 .armv8_4_a,2257 .v8_4a,
2388 .bf16,2258 .bf16,
2389 .crc,2259 .crc,
2390 .crypto,2260 .crypto,
2391 .fullfp16,2261 .fullfp16,
2392 .hwdiv,2262 .hwdiv,
2393 .hwdiv_arm,2263 .hwdiv_arm,
2394 ._i8mm,2264 .i8mm,
2395 }),2265 }),
2396 };2266 };
2397 pub const sc000 = CpuModel{2267 pub const sc000 = CpuModel{
2398 .name = "sc000",2268 .name = "sc000",
2399 .llvm_name = "sc000",2269 .llvm_name = "sc000",
2400 .features = featureSet(&[_]Feature{2270 .features = featureSet(&[_]Feature{
2401 .armv6_m,2271 .v6m,
2402 }),2272 }),
2403 };2273 };
2404 pub const sc300 = CpuModel{2274 pub const sc300 = CpuModel{
2405 .name = "sc300",2275 .name = "sc300",
2406 .llvm_name = "sc300",2276 .llvm_name = "sc300",
2407 .features = featureSet(&[_]Feature{2277 .features = featureSet(&[_]Feature{
2408 .armv7_m,2278 .v7m,
2409 .m3,2279 .m3,
2410 .no_branch_predictor,2280 .no_branch_predictor,
2411 .use_misched,2281 .use_misched,
...@@ -2415,35 +2285,35 @@ pub const cpu = struct {...@@ -2415,35 +2285,35 @@ pub const cpu = struct {
2415 .name = "strongarm",2285 .name = "strongarm",
2416 .llvm_name = "strongarm",2286 .llvm_name = "strongarm",
2417 .features = featureSet(&[_]Feature{2287 .features = featureSet(&[_]Feature{
2418 .armv4,2288 .v4,
2419 }),2289 }),
2420 };2290 };
2421 pub const strongarm110 = CpuModel{2291 pub const strongarm110 = CpuModel{
2422 .name = "strongarm110",2292 .name = "strongarm110",
2423 .llvm_name = "strongarm110",2293 .llvm_name = "strongarm110",
2424 .features = featureSet(&[_]Feature{2294 .features = featureSet(&[_]Feature{
2425 .armv4,2295 .v4,
2426 }),2296 }),
2427 };2297 };
2428 pub const strongarm1100 = CpuModel{2298 pub const strongarm1100 = CpuModel{
2429 .name = "strongarm1100",2299 .name = "strongarm1100",
2430 .llvm_name = "strongarm1100",2300 .llvm_name = "strongarm1100",
2431 .features = featureSet(&[_]Feature{2301 .features = featureSet(&[_]Feature{
2432 .armv4,2302 .v4,
2433 }),2303 }),
2434 };2304 };
2435 pub const strongarm1110 = CpuModel{2305 pub const strongarm1110 = CpuModel{
2436 .name = "strongarm1110",2306 .name = "strongarm1110",
2437 .llvm_name = "strongarm1110",2307 .llvm_name = "strongarm1110",
2438 .features = featureSet(&[_]Feature{2308 .features = featureSet(&[_]Feature{
2439 .armv4,2309 .v4,
2440 }),2310 }),
2441 };2311 };
2442 pub const swift = CpuModel{2312 pub const swift = CpuModel{
2443 .name = "swift",2313 .name = "swift",
2444 .llvm_name = "swift",2314 .llvm_name = "swift",
2445 .features = featureSet(&[_]Feature{2315 .features = featureSet(&[_]Feature{
2446 .armv7_a,2316 .v7a,
2447 .avoid_movs_shop,2317 .avoid_movs_shop,
2448 .avoid_partial_cpsr,2318 .avoid_partial_cpsr,
2449 .disable_postra_scheduler,2319 .disable_postra_scheduler,
...@@ -2471,7 +2341,7 @@ pub const cpu = struct {...@@ -2471,7 +2341,7 @@ pub const cpu = struct {
2471 .name = "xscale",2341 .name = "xscale",
2472 .llvm_name = "xscale",2342 .llvm_name = "xscale",
2473 .features = featureSet(&[_]Feature{2343 .features = featureSet(&[_]Feature{
2474 .armv5te,2344 .v5te,
2475 }),2345 }),
2476 };2346 };
2477};2347};
lib/std/target/avr.zig+2-2
...@@ -47,7 +47,6 @@ pub const Feature = enum {...@@ -47,7 +47,6 @@ pub const Feature = enum {
47pub usingnamespace CpuFeature.feature_set_fns(Feature);47pub usingnamespace CpuFeature.feature_set_fns(Feature);
4848
49pub const all_features = blk: {49pub const all_features = blk: {
50 @setEvalBranchQuota(10000);
51 const len = @typeInfo(Feature).Enum.fields.len;50 const len = @typeInfo(Feature).Enum.fields.len;
52 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);51 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
53 var result: [len]CpuFeature = undefined;52 var result: [len]CpuFeature = undefined;
...@@ -164,6 +163,7 @@ pub const all_features = blk: {...@@ -164,6 +163,7 @@ pub const all_features = blk: {
164 .dependencies = featureSet(&[_]Feature{163 .dependencies = featureSet(&[_]Feature{
165 .avr0,164 .avr0,
166 .@"break",165 .@"break",
166 .memmappedregs,
167 .sram,167 .sram,
168 .tinyencoding,168 .tinyencoding,
169 }),169 }),
...@@ -1859,7 +1859,7 @@ pub const cpu = struct {...@@ -1859,7 +1859,7 @@ pub const cpu = struct {
1859 .name = "atxmega16e5",1859 .name = "atxmega16e5",
1860 .llvm_name = "atxmega16e5",1860 .llvm_name = "atxmega16e5",
1861 .features = featureSet(&[_]Feature{1861 .features = featureSet(&[_]Feature{
1862 .xmegau,1862 .xmega,
1863 }),1863 }),
1864 };1864 };
1865 pub const atxmega192a3 = CpuModel{1865 pub const atxmega192a3 = CpuModel{
lib/std/target/bpf.zig-1
...@@ -16,7 +16,6 @@ pub const Feature = enum {...@@ -16,7 +16,6 @@ pub const Feature = enum {
16pub usingnamespace CpuFeature.feature_set_fns(Feature);16pub usingnamespace CpuFeature.feature_set_fns(Feature);
1717
18pub const all_features = blk: {18pub const all_features = blk: {
19 @setEvalBranchQuota(10000);
20 const len = @typeInfo(Feature).Enum.fields.len;19 const len = @typeInfo(Feature).Enum.fields.len;
21 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);20 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
22 var result: [len]CpuFeature = undefined;21 var result: [len]CpuFeature = undefined;
lib/std/target/hexagon.zig-1
...@@ -44,7 +44,6 @@ pub const Feature = enum {...@@ -44,7 +44,6 @@ pub const Feature = enum {
44pub usingnamespace CpuFeature.feature_set_fns(Feature);44pub usingnamespace CpuFeature.feature_set_fns(Feature);
4545
46pub const all_features = blk: {46pub const all_features = blk: {
47 @setEvalBranchQuota(10000);
48 const len = @typeInfo(Feature).Enum.fields.len;47 const len = @typeInfo(Feature).Enum.fields.len;
49 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);48 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
50 var result: [len]CpuFeature = undefined;49 var result: [len]CpuFeature = undefined;
lib/std/target/mips.zig-1
...@@ -65,7 +65,6 @@ pub const Feature = enum {...@@ -65,7 +65,6 @@ pub const Feature = enum {
65pub usingnamespace CpuFeature.feature_set_fns(Feature);65pub usingnamespace CpuFeature.feature_set_fns(Feature);
6666
67pub const all_features = blk: {67pub const all_features = blk: {
68 @setEvalBranchQuota(10000);
69 const len = @typeInfo(Feature).Enum.fields.len;68 const len = @typeInfo(Feature).Enum.fields.len;
70 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);69 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
71 var result: [len]CpuFeature = undefined;70 var result: [len]CpuFeature = undefined;
lib/std/target/msp430.zig-1
...@@ -17,7 +17,6 @@ pub const Feature = enum {...@@ -17,7 +17,6 @@ pub const Feature = enum {
17pub usingnamespace CpuFeature.feature_set_fns(Feature);17pub usingnamespace CpuFeature.feature_set_fns(Feature);
1818
19pub const all_features = blk: {19pub const all_features = blk: {
20 @setEvalBranchQuota(10000);
21 const len = @typeInfo(Feature).Enum.fields.len;20 const len = @typeInfo(Feature).Enum.fields.len;
22 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);21 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
23 var result: [len]CpuFeature = undefined;22 var result: [len]CpuFeature = undefined;
lib/std/target/nvptx.zig-1
...@@ -41,7 +41,6 @@ pub const Feature = enum {...@@ -41,7 +41,6 @@ pub const Feature = enum {
41pub usingnamespace CpuFeature.feature_set_fns(Feature);41pub usingnamespace CpuFeature.feature_set_fns(Feature);
4242
43pub const all_features = blk: {43pub const all_features = blk: {
44 @setEvalBranchQuota(10000);
45 const len = @typeInfo(Feature).Enum.fields.len;44 const len = @typeInfo(Feature).Enum.fields.len;
46 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);45 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
47 var result: [len]CpuFeature = undefined;46 var result: [len]CpuFeature = undefined;
lib/std/target/powerpc.zig+62-29
...@@ -62,6 +62,7 @@ pub const Feature = enum {...@@ -62,6 +62,7 @@ pub const Feature = enum {
62 ppc6xx,62 ppc6xx,
63 predictable_select_expensive,63 predictable_select_expensive,
64 prefix_instrs,64 prefix_instrs,
65 qpx,
65 recipprec,66 recipprec,
66 secure_plt,67 secure_plt,
67 slow_popcntd,68 slow_popcntd,
...@@ -75,7 +76,6 @@ pub const Feature = enum {...@@ -75,7 +76,6 @@ pub const Feature = enum {
75pub usingnamespace CpuFeature.feature_set_fns(Feature);76pub usingnamespace CpuFeature.feature_set_fns(Feature);
7677
77pub const all_features = blk: {78pub const all_features = blk: {
78 @setEvalBranchQuota(10000);
79 const len = @typeInfo(Feature).Enum.fields.len;79 const len = @typeInfo(Feature).Enum.fields.len;
80 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);80 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
81 var result: [len]CpuFeature = undefined;81 var result: [len]CpuFeature = undefined;
...@@ -417,6 +417,13 @@ pub const all_features = blk: {...@@ -417,6 +417,13 @@ pub const all_features = blk: {
417 .power9_altivec,417 .power9_altivec,
418 }),418 }),
419 };419 };
420 result[@enumToInt(Feature.qpx)] = .{
421 .llvm_name = null,
422 .description = "Enable QPX instructions",
423 .dependencies = featureSet(&[_]Feature{
424 .fpu,
425 }),
426 };
420 result[@enumToInt(Feature.recipprec)] = .{427 result[@enumToInt(Feature.recipprec)] = .{
421 .llvm_name = "recipprec",428 .llvm_name = "recipprec",
422 .description = "Assume higher precision reciprocal estimates",429 .description = "Assume higher precision reciprocal estimates",
...@@ -472,8 +479,8 @@ pub const all_features = blk: {...@@ -472,8 +479,8 @@ pub const all_features = blk: {
472};479};
473480
474pub const cpu = struct {481pub const cpu = struct {
475 pub const @"440" = CpuModel{482 pub const @"ppc440" = CpuModel{
476 .name = "440",483 .name = "ppc440",
477 .llvm_name = "440",484 .llvm_name = "440",
478 .features = featureSet(&[_]Feature{485 .features = featureSet(&[_]Feature{
479 .booke,486 .booke,
...@@ -484,8 +491,8 @@ pub const cpu = struct {...@@ -484,8 +491,8 @@ pub const cpu = struct {
484 .msync,491 .msync,
485 }),492 }),
486 };493 };
487 pub const @"450" = CpuModel{494 pub const @"ppc450" = CpuModel{
488 .name = "450",495 .name = "ppc450",
489 .llvm_name = "450",496 .llvm_name = "450",
490 .features = featureSet(&[_]Feature{497 .features = featureSet(&[_]Feature{
491 .booke,498 .booke,
...@@ -496,70 +503,70 @@ pub const cpu = struct {...@@ -496,70 +503,70 @@ pub const cpu = struct {
496 .msync,503 .msync,
497 }),504 }),
498 };505 };
499 pub const @"601" = CpuModel{506 pub const @"ppc601" = CpuModel{
500 .name = "601",507 .name = "ppc601",
501 .llvm_name = "601",508 .llvm_name = "601",
502 .features = featureSet(&[_]Feature{509 .features = featureSet(&[_]Feature{
503 .fpu,510 .fpu,
504 }),511 }),
505 };512 };
506 pub const @"602" = CpuModel{513 pub const @"ppc602" = CpuModel{
507 .name = "602",514 .name = "ppc602",
508 .llvm_name = "602",515 .llvm_name = "602",
509 .features = featureSet(&[_]Feature{516 .features = featureSet(&[_]Feature{
510 .fpu,517 .fpu,
511 }),518 }),
512 };519 };
513 pub const @"603" = CpuModel{520 pub const @"ppc603" = CpuModel{
514 .name = "603",521 .name = "ppc603",
515 .llvm_name = "603",522 .llvm_name = "603",
516 .features = featureSet(&[_]Feature{523 .features = featureSet(&[_]Feature{
517 .fres,524 .fres,
518 .frsqrte,525 .frsqrte,
519 }),526 }),
520 };527 };
521 pub const @"603e" = CpuModel{528 pub const @"ppc603e" = CpuModel{
522 .name = "603e",529 .name = "ppc603e",
523 .llvm_name = "603e",530 .llvm_name = "603e",
524 .features = featureSet(&[_]Feature{531 .features = featureSet(&[_]Feature{
525 .fres,532 .fres,
526 .frsqrte,533 .frsqrte,
527 }),534 }),
528 };535 };
529 pub const @"603ev" = CpuModel{536 pub const @"ppc603ev" = CpuModel{
530 .name = "603ev",537 .name = "ppc603ev",
531 .llvm_name = "603ev",538 .llvm_name = "603ev",
532 .features = featureSet(&[_]Feature{539 .features = featureSet(&[_]Feature{
533 .fres,540 .fres,
534 .frsqrte,541 .frsqrte,
535 }),542 }),
536 };543 };
537 pub const @"604" = CpuModel{544 pub const @"ppc604" = CpuModel{
538 .name = "604",545 .name = "ppc604",
539 .llvm_name = "604",546 .llvm_name = "604",
540 .features = featureSet(&[_]Feature{547 .features = featureSet(&[_]Feature{
541 .fres,548 .fres,
542 .frsqrte,549 .frsqrte,
543 }),550 }),
544 };551 };
545 pub const @"604e" = CpuModel{552 pub const @"ppc604e" = CpuModel{
546 .name = "604e",553 .name = "ppc604e",
547 .llvm_name = "604e",554 .llvm_name = "604e",
548 .features = featureSet(&[_]Feature{555 .features = featureSet(&[_]Feature{
549 .fres,556 .fres,
550 .frsqrte,557 .frsqrte,
551 }),558 }),
552 };559 };
553 pub const @"620" = CpuModel{560 pub const @"ppc620" = CpuModel{
554 .name = "620",561 .name = "ppc620",
555 .llvm_name = "620",562 .llvm_name = "620",
556 .features = featureSet(&[_]Feature{563 .features = featureSet(&[_]Feature{
557 .fres,564 .fres,
558 .frsqrte,565 .frsqrte,
559 }),566 }),
560 };567 };
561 pub const @"7400" = CpuModel{568 pub const @"ppc7400" = CpuModel{
562 .name = "7400",569 .name = "ppc7400",
563 .llvm_name = "7400",570 .llvm_name = "7400",
564 .features = featureSet(&[_]Feature{571 .features = featureSet(&[_]Feature{
565 .altivec,572 .altivec,
...@@ -567,8 +574,8 @@ pub const cpu = struct {...@@ -567,8 +574,8 @@ pub const cpu = struct {
567 .frsqrte,574 .frsqrte,
568 }),575 }),
569 };576 };
570 pub const @"7450" = CpuModel{577 pub const @"ppc7450" = CpuModel{
571 .name = "7450",578 .name = "ppc7450",
572 .llvm_name = "7450",579 .llvm_name = "7450",
573 .features = featureSet(&[_]Feature{580 .features = featureSet(&[_]Feature{
574 .altivec,581 .altivec,
...@@ -576,16 +583,16 @@ pub const cpu = struct {...@@ -576,16 +583,16 @@ pub const cpu = struct {
576 .frsqrte,583 .frsqrte,
577 }),584 }),
578 };585 };
579 pub const @"750" = CpuModel{586 pub const @"ppc750" = CpuModel{
580 .name = "750",587 .name = "ppc750",
581 .llvm_name = "750",588 .llvm_name = "750",
582 .features = featureSet(&[_]Feature{589 .features = featureSet(&[_]Feature{
583 .fres,590 .fres,
584 .frsqrte,591 .frsqrte,
585 }),592 }),
586 };593 };
587 pub const @"970" = CpuModel{594 pub const @"ppc970" = CpuModel{
588 .name = "970",595 .name = "ppc970",
589 .llvm_name = "970",596 .llvm_name = "970",
590 .features = featureSet(&[_]Feature{597 .features = featureSet(&[_]Feature{
591 .@"64bit",598 .@"64bit",
...@@ -622,6 +629,32 @@ pub const cpu = struct {...@@ -622,6 +629,32 @@ pub const cpu = struct {
622 .stfiwx,629 .stfiwx,
623 }),630 }),
624 };631 };
632 pub const a2q = CpuModel{
633 .name = "a2q",
634 .llvm_name = "a2q",
635 .features = featureSet(&[_]Feature{
636 .@"64bit",
637 .booke,
638 .cmpb,
639 .fcpsgn,
640 .fpcvt,
641 .fprnd,
642 .fre,
643 .fres,
644 .frsqrte,
645 .frsqrtes,
646 .fsqrt,
647 .icbt,
648 .isel,
649 .ldbrx,
650 .lfiwax,
651 .mfocrf,
652 .qpx,
653 .recipprec,
654 .slow_popcntd,
655 .stfiwx,
656 }),
657 };
625 pub const e500 = CpuModel{658 pub const e500 = CpuModel{
626 .name = "e500",659 .name = "e500",
627 .llvm_name = "e500",660 .llvm_name = "e500",
lib/std/target/riscv.zig+23-1
...@@ -69,7 +69,6 @@ pub const Feature = enum {...@@ -69,7 +69,6 @@ pub const Feature = enum {
69pub usingnamespace CpuFeature.feature_set_fns(Feature);69pub usingnamespace CpuFeature.feature_set_fns(Feature);
7070
71pub const all_features = blk: {71pub const all_features = blk: {
72 @setEvalBranchQuota(10000);
73 const len = @typeInfo(Feature).Enum.fields.len;72 const len = @typeInfo(Feature).Enum.fields.len;
74 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);73 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
75 var result: [len]CpuFeature = undefined;74 var result: [len]CpuFeature = undefined;
...@@ -382,6 +381,29 @@ pub const all_features = blk: {...@@ -382,6 +381,29 @@ pub const all_features = blk: {
382};381};
383382
384pub const cpu = struct {383pub const cpu = struct {
384 pub const baseline_rv32 = CpuModel{
385 .name = "baseline_rv32",
386 .llvm_name = null,
387 .features = featureSet(&[_]Feature{
388 .a,
389 .c,
390 .d,
391 .f,
392 .m,
393 }),
394 };
395 pub const baseline_rv64 = CpuModel{
396 .name = "baseline_rv64",
397 .llvm_name = null,
398 .features = featureSet(&[_]Feature{
399 .@"64bit",
400 .a,
401 .c,
402 .d,
403 .f,
404 .m,
405 }),
406 };
385 pub const generic_rv32 = CpuModel{407 pub const generic_rv32 = CpuModel{
386 .name = "generic_rv32",408 .name = "generic_rv32",
387 .llvm_name = "generic-rv32",409 .llvm_name = "generic-rv32",
lib/std/target/sparc.zig-6
...@@ -32,7 +32,6 @@ pub const Feature = enum {...@@ -32,7 +32,6 @@ pub const Feature = enum {
32pub usingnamespace CpuFeature.feature_set_fns(Feature);32pub usingnamespace CpuFeature.feature_set_fns(Feature);
3333
34pub const all_features = blk: {34pub const all_features = blk: {
35 @setEvalBranchQuota(10000);
36 const len = @typeInfo(Feature).Enum.fields.len;35 const len = @typeInfo(Feature).Enum.fields.len;
37 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);36 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
38 var result: [len]CpuFeature = undefined;37 var result: [len]CpuFeature = undefined;
...@@ -161,11 +160,6 @@ pub const cpu = struct {...@@ -161,11 +160,6 @@ pub const cpu = struct {
161 .llvm_name = "f934",160 .llvm_name = "f934",
162 .features = featureSet(&[_]Feature{}),161 .features = featureSet(&[_]Feature{}),
163 };162 };
164 pub const generic = CpuModel{
165 .name = "generic",
166 .llvm_name = "generic",
167 .features = featureSet(&[_]Feature{}),
168 };
169 pub const gr712rc = CpuModel{163 pub const gr712rc = CpuModel{
170 .name = "gr712rc",164 .name = "gr712rc",
171 .llvm_name = "gr712rc",165 .llvm_name = "gr712rc",
lib/std/target/systemz.zig-1
...@@ -49,7 +49,6 @@ pub const Feature = enum {...@@ -49,7 +49,6 @@ pub const Feature = enum {
49pub usingnamespace CpuFeature.feature_set_fns(Feature);49pub usingnamespace CpuFeature.feature_set_fns(Feature);
5050
51pub const all_features = blk: {51pub const all_features = blk: {
52 @setEvalBranchQuota(10000);
53 const len = @typeInfo(Feature).Enum.fields.len;52 const len = @typeInfo(Feature).Enum.fields.len;
54 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);53 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
55 var result: [len]CpuFeature = undefined;54 var result: [len]CpuFeature = undefined;
lib/std/target/wasm.zig-1
...@@ -24,7 +24,6 @@ pub const Feature = enum {...@@ -24,7 +24,6 @@ pub const Feature = enum {
24pub usingnamespace CpuFeature.feature_set_fns(Feature);24pub usingnamespace CpuFeature.feature_set_fns(Feature);
2525
26pub const all_features = blk: {26pub const all_features = blk: {
27 @setEvalBranchQuota(10000);
28 const len = @typeInfo(Feature).Enum.fields.len;27 const len = @typeInfo(Feature).Enum.fields.len;
29 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);28 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
30 var result: [len]CpuFeature = undefined;29 var result: [len]CpuFeature = undefined;
lib/std/target/x86.zig-20
...@@ -8,12 +8,9 @@ const CpuFeature = std.Target.Cpu.Feature;...@@ -8,12 +8,9 @@ const CpuFeature = std.Target.Cpu.Feature;
8const CpuModel = std.Target.Cpu.Model;8const CpuModel = std.Target.Cpu.Model;
99
10pub const Feature = enum {10pub const Feature = enum {
11 @"16bit_mode",
12 @"32bit_mode",
13 @"3dnow",11 @"3dnow",
14 @"3dnowa",12 @"3dnowa",
15 @"64bit",13 @"64bit",
16 @"64bit_mode",
17 adx,14 adx,
18 aes,15 aes,
19 amx_bf16,16 amx_bf16,
...@@ -154,20 +151,9 @@ pub const Feature = enum {...@@ -154,20 +151,9 @@ pub const Feature = enum {
154pub usingnamespace CpuFeature.feature_set_fns(Feature);151pub usingnamespace CpuFeature.feature_set_fns(Feature);
155152
156pub const all_features = blk: {153pub const all_features = blk: {
157 @setEvalBranchQuota(10000);
158 const len = @typeInfo(Feature).Enum.fields.len;154 const len = @typeInfo(Feature).Enum.fields.len;
159 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);155 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
160 var result: [len]CpuFeature = undefined;156 var result: [len]CpuFeature = undefined;
161 result[@enumToInt(Feature.@"16bit_mode")] = .{
162 .llvm_name = "16bit-mode",
163 .description = "16-bit mode (i8086)",
164 .dependencies = featureSet(&[_]Feature{}),
165 };
166 result[@enumToInt(Feature.@"32bit_mode")] = .{
167 .llvm_name = "32bit-mode",
168 .description = "32-bit mode (80386)",
169 .dependencies = featureSet(&[_]Feature{}),
170 };
171 result[@enumToInt(Feature.@"3dnow")] = .{157 result[@enumToInt(Feature.@"3dnow")] = .{
172 .llvm_name = "3dnow",158 .llvm_name = "3dnow",
173 .description = "Enable 3DNow! instructions",159 .description = "Enable 3DNow! instructions",
...@@ -187,11 +173,6 @@ pub const all_features = blk: {...@@ -187,11 +173,6 @@ pub const all_features = blk: {
187 .description = "Support 64-bit instructions",173 .description = "Support 64-bit instructions",
188 .dependencies = featureSet(&[_]Feature{}),174 .dependencies = featureSet(&[_]Feature{}),
189 };175 };
190 result[@enumToInt(Feature.@"64bit_mode")] = .{
191 .llvm_name = "64bit-mode",
192 .description = "64-bit mode (x86_64)",
193 .dependencies = featureSet(&[_]Feature{}),
194 };
195 result[@enumToInt(Feature.adx)] = .{176 result[@enumToInt(Feature.adx)] = .{
196 .llvm_name = "adx",177 .llvm_name = "adx",
197 .description = "Support ADX instructions",178 .description = "Support ADX instructions",
...@@ -1680,7 +1661,6 @@ pub const cpu = struct {...@@ -1680,7 +1661,6 @@ pub const cpu = struct {
1680 .name = "generic",1661 .name = "generic",
1681 .llvm_name = "generic",1662 .llvm_name = "generic",
1682 .features = featureSet(&[_]Feature{1663 .features = featureSet(&[_]Feature{
1683 .@"64bit",
1684 .cx8,1664 .cx8,
1685 .x87,1665 .x87,
1686 }),1666 }),
src/codegen.zig+3-3
...@@ -1689,7 +1689,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {...@@ -1689,7 +1689,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
16891689
1690 // TODO: add Instruction.supportedOn1690 // TODO: add Instruction.supportedOn
1691 // function for ARM1691 // function for ARM
1692 if (Target.arm.featureSetHas(self.target.cpu.features, .armv5t)) {1692 if (Target.arm.featureSetHas(self.target.cpu.features, .has_v5t)) {
1693 writeInt(u32, try self.code.addManyAsArray(4), Instruction.blx(.al, .lr).toU32());1693 writeInt(u32, try self.code.addManyAsArray(4), Instruction.blx(.al, .lr).toU32());
1694 } else {1694 } else {
1695 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mov(.al, .lr, Instruction.Operand.reg(.pc, Instruction.Operand.Shift.none)).toU32());1695 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mov(.al, .lr, Instruction.Operand.reg(.pc, Instruction.Operand.Shift.none)).toU32());
...@@ -2625,7 +2625,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {...@@ -2625,7 +2625,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
2625 } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| {2625 } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| {
2626 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mvn(.al, reg, op).toU32());2626 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mvn(.al, reg, op).toU32());
2627 } else if (x <= math.maxInt(u16)) {2627 } else if (x <= math.maxInt(u16)) {
2628 if (Target.arm.featureSetHas(self.target.cpu.features, .armv7_a)) {2628 if (Target.arm.featureSetHas(self.target.cpu.features, .has_v7)) {
2629 writeInt(u32, try self.code.addManyAsArray(4), Instruction.movw(.al, reg, @intCast(u16, x)).toU32());2629 writeInt(u32, try self.code.addManyAsArray(4), Instruction.movw(.al, reg, @intCast(u16, x)).toU32());
2630 } else {2630 } else {
2631 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mov(.al, reg, Instruction.Operand.imm(@truncate(u8, x), 0)).toU32());2631 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mov(.al, reg, Instruction.Operand.imm(@truncate(u8, x), 0)).toU32());
...@@ -2634,7 +2634,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {...@@ -2634,7 +2634,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
2634 } else {2634 } else {
2635 // TODO write constant to code and load2635 // TODO write constant to code and load
2636 // relative to pc2636 // relative to pc
2637 if (Target.arm.featureSetHas(self.target.cpu.features, .armv7_a)) {2637 if (Target.arm.featureSetHas(self.target.cpu.features, .has_v7)) {
2638 // immediate: 0xaaaabbbb2638 // immediate: 0xaaaabbbb
2639 // movw reg, #0xbbbb2639 // movw reg, #0xbbbb
2640 // movt reg, #0xaaaa2640 // movt reg, #0xaaaa