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 {
551551 pub const Set = struct {
552552 ints: [usize_count]usize,
553553
554 pub const needed_bit_count = 192;
554 pub const needed_bit_count = 172;
555555 pub const byte_count = (needed_bit_count + 7) / 8;
556556 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
557557 pub const Index = std.math.Log2Int(std.meta.Int(.unsigned, usize_count * @bitSizeOf(usize)));
......@@ -1149,9 +1149,9 @@ pub const Target = struct {
11491149
11501150 pub fn baseline(arch: Arch) *const Model {
11511151 return switch (arch) {
1152 // .arm, .armeb, .thumb, .thumbeb => &arm.cpu.baseline, // TODO removed in LLVM 12
1153 // .riscv32 => &riscv.cpu.baseline_rv32, // TODO removed in LLVM 12
1154 // .riscv64 => &riscv.cpu.baseline_rv64, // TODO removed in LLVM 12
1152 .arm, .armeb, .thumb, .thumbeb => &arm.cpu.baseline,
1153 .riscv32 => &riscv.cpu.baseline_rv32,
1154 .riscv64 => &riscv.cpu.baseline_rv64,
11551155 .i386 => &x86.cpu.pentium4,
11561156 .nvptx, .nvptx64 => &nvptx.cpu.sm_20,
11571157
lib/std/target/aarch64.zig+274-474
......@@ -8,18 +8,9 @@ const CpuFeature = std.Target.Cpu.Feature;
88const CpuModel = std.Target.Cpu.Model;
99
1010pub const Feature = enum {
11 CONTEXTIDREL2,
12 a35,
13 a53,
14 a55,
15 a57,
16 a64fx,
11 a34,
1712 a65,
18 a72,
19 a73,
20 a75,
2113 a76,
22 a77,
2314 aes,
2415 aggressive_fma,
2516 alternate_sextload_cvt_f32_pattern,
......@@ -45,14 +36,11 @@ pub const Feature = enum {
4536 call_saved_x18,
4637 call_saved_x8,
4738 call_saved_x9,
48 carmel,
4939 ccdp,
5040 ccidx,
5141 ccpp,
5242 complxnum,
53 cortex_a78,
54 cortex_r82,
55 cortex_x1,
43 context_id_rel2,
5644 crc,
5745 crypto,
5846 custom_cheap_as_move,
......@@ -62,11 +50,9 @@ pub const Feature = enum {
6250 ecv,
6351 ete,
6452 exynos_cheap_as_move,
65 exynosm3,
6653 exynosm4,
6754 f32mm,
6855 f64mm,
69 falkor,
7056 fgt,
7157 fmi,
7258 force_32bit_jump_tables,
......@@ -82,19 +68,18 @@ pub const Feature = enum {
8268 fuse_literals,
8369 harden_sls_blr,
8470 harden_sls_retbr,
85 _i8mm,
71 i8mm,
8672 jsconv,
87 kryo,
8873 lor,
8974 lse,
9075 lsl_fast,
9176 mpam,
9277 mte,
9378 neon,
94 neoversee1,
95 neoversen1,
96 neoversen2,
97 neoversev1,
79 neoverse_e1,
80 neoverse_n1,
81 neoverse_n2,
82 neoverse_v1,
9883 no_neg_immediates,
9984 nv,
10085 outline_atomics,
......@@ -135,7 +120,6 @@ pub const Feature = enum {
135120 reserve_x6,
136121 reserve_x7,
137122 reserve_x9,
138 saphira,
139123 sb,
140124 sel2,
141125 sha2,
......@@ -155,12 +139,6 @@ pub const Feature = enum {
155139 sve2_sha3,
156140 sve2_sm4,
157141 tagged_globals,
158 thunderx,
159 thunderx2t99,
160 thunderx3t110,
161 thunderxt81,
162 thunderxt83,
163 thunderxt88,
164142 tlb_rmi,
165143 tme,
166144 tpidr_el1,
......@@ -168,12 +146,12 @@ pub const Feature = enum {
168146 tpidr_el3,
169147 tracev8_4,
170148 trbe,
171 tsv110,
172149 uaops,
173150 use_aa,
174151 use_experimental_zeroing_pseudos,
175152 use_postra_scheduler,
176153 use_reciprocal_square_root,
154 v8a,
177155 v8_1a,
178156 v8_2a,
179157 v8_3a,
......@@ -192,87 +170,18 @@ pub const Feature = enum {
192170pub usingnamespace CpuFeature.feature_set_fns(Feature);
193171
194172pub const all_features = blk: {
195 @setEvalBranchQuota(10000);
173 @setEvalBranchQuota(2000);
196174 const len = @typeInfo(Feature).Enum.fields.len;
197175 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
198176 var result: [len]CpuFeature = undefined;
199 result[@enumToInt(Feature.CONTEXTIDREL2)] = .{
200 .llvm_name = "CONTEXTIDREL2",
201 .description = "Enable RW operand CONTEXTIDR_EL2",
202 .dependencies = featureSet(&[_]Feature{}),
203 };
204 result[@enumToInt(Feature.a35)] = .{
177 result[@enumToInt(Feature.a34)] = .{
205178 .llvm_name = "a35",
206 .description = "Cortex-A35 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",
179 .description = "Cortex-A34 ARM processors",
249180 .dependencies = featureSet(&[_]Feature{
250 .balance_fp_ops,
251181 .crc,
252182 .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,
271183 .perfmon,
272 .sha2,
273 .sve,
274 .use_postra_scheduler,
275 .v8_2a,
184 .v8a,
276185 }),
277186 };
278187 result[@enumToInt(Feature.a65)] = .{
......@@ -290,72 +199,18 @@ pub const all_features = blk: {
290199 .v8_2a,
291200 }),
292201 };
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 };
332202 result[@enumToInt(Feature.a76)] = .{
333203 .llvm_name = "a76",
334204 .description = "Cortex-A76 ARM processors",
335205 .dependencies = featureSet(&[_]Feature{
336206 .crypto,
337207 .dotprod,
338 .fp_armv8,
339208 .fullfp16,
340 .neon,
341209 .rcpc,
342210 .ssbs,
343211 .v8_2a,
344212 }),
345213 };
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 };
359214 result[@enumToInt(Feature.aes)] = .{
360215 .llvm_name = "aes",
361216 .description = "Enable AES support",
......@@ -564,16 +419,6 @@ pub const all_features = blk: {
564419 .description = "Make X9 callee saved.",
565420 .dependencies = featureSet(&[_]Feature{}),
566421 };
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 };
577422 result[@enumToInt(Feature.ccdp)] = .{
578423 .llvm_name = "ccdp",
579424 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
......@@ -596,48 +441,10 @@ pub const all_features = blk: {
596441 .neon,
597442 }),
598443 };
599 result[@enumToInt(Feature.cortex_a78)] = .{
600 .llvm_name = "cortex-a78",
601 .description = "Cortex-A78 ARM processors",
602 .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 }),
444 result[@enumToInt(Feature.context_id_rel2)] = .{
445 .llvm_name = "CONTEXTIDREL2",
446 .description = "Enable RW operand CONTEXTIDR_EL2",
447 .dependencies = featureSet(&[_]Feature{}),
641448 };
642449 result[@enumToInt(Feature.crc)] = .{
643450 .llvm_name = "crc",
......@@ -692,25 +499,6 @@ pub const all_features = blk: {
692499 .custom_cheap_as_move,
693500 }),
694501 };
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 };
714502 result[@enumToInt(Feature.exynosm4)] = .{
715503 .llvm_name = "exynosm4",
716504 .description = "Samsung Exynos-M4 processors",
......@@ -748,24 +536,6 @@ pub const all_features = blk: {
748536 .sve,
749537 }),
750538 };
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 };
769539 result[@enumToInt(Feature.fgt)] = .{
770540 .llvm_name = "fgt",
771541 .description = "Enable fine grained virtualization traps extension",
......@@ -845,7 +615,7 @@ pub const all_features = blk: {
845615 .description = "Harden against straight line speculation across RET and BR instructions",
846616 .dependencies = featureSet(&[_]Feature{}),
847617 };
848 result[@enumToInt(Feature._i8mm)] = .{
618 result[@enumToInt(Feature.i8mm)] = .{
849619 .llvm_name = "i8mm",
850620 .description = "Enable Matrix Multiply Int8 Extension",
851621 .dependencies = featureSet(&[_]Feature{}),
......@@ -857,22 +627,6 @@ pub const all_features = blk: {
857627 .fp_armv8,
858628 }),
859629 };
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 };
876630 result[@enumToInt(Feature.lor)] = .{
877631 .llvm_name = "lor",
878632 .description = "Enables ARM v8.1 Limited Ordering Regions extension",
......@@ -905,7 +659,7 @@ pub const all_features = blk: {
905659 .fp_armv8,
906660 }),
907661 };
908 result[@enumToInt(Feature.neoversee1)] = .{
662 result[@enumToInt(Feature.neoverse_e1)] = .{
909663 .llvm_name = "neoversee1",
910664 .description = "Neoverse E1 ARM processors",
911665 .dependencies = featureSet(&[_]Feature{
......@@ -919,7 +673,7 @@ pub const all_features = blk: {
919673 .v8_2a,
920674 }),
921675 };
922 result[@enumToInt(Feature.neoversen1)] = .{
676 result[@enumToInt(Feature.neoverse_n1)] = .{
923677 .llvm_name = "neoversen1",
924678 .description = "Neoverse N1 ARM processors",
925679 .dependencies = featureSet(&[_]Feature{
......@@ -934,13 +688,13 @@ pub const all_features = blk: {
934688 .v8_2a,
935689 }),
936690 };
937 result[@enumToInt(Feature.neoversen2)] = .{
691 result[@enumToInt(Feature.neoverse_n2)] = .{
938692 .llvm_name = "neoversen2",
939693 .description = "Neoverse N2 ARM processors",
940694 .dependencies = featureSet(&[_]Feature{
941695 .bf16,
942696 .ete,
943 ._i8mm,
697 .i8mm,
944698 .mte,
945699 .sve2,
946700 .sve2_bitperm,
......@@ -948,7 +702,7 @@ pub const all_features = blk: {
948702 .v8_5a,
949703 }),
950704 };
951 result[@enumToInt(Feature.neoversev1)] = .{
705 result[@enumToInt(Feature.neoverse_v1)] = .{
952706 .llvm_name = "neoversev1",
953707 .description = "Neoverse V1 ARM processors",
954708 .dependencies = featureSet(&[_]Feature{
......@@ -959,7 +713,7 @@ pub const all_features = blk: {
959713 .fp16fml,
960714 .fullfp16,
961715 .fuse_aes,
962 ._i8mm,
716 .i8mm,
963717 .neon,
964718 .perfmon,
965719 .rand,
......@@ -977,7 +731,7 @@ pub const all_features = blk: {
977731 };
978732 result[@enumToInt(Feature.nv)] = .{
979733 .llvm_name = "nv",
980 .description = "Enable v8.4-A Nested Virtualization Enchancement",
734 .description = "Enable v8.4-A Nested Virtualization extension",
981735 .dependencies = featureSet(&[_]Feature{}),
982736 };
983737 result[@enumToInt(Feature.outline_atomics)] = .{
......@@ -1174,23 +928,6 @@ pub const all_features = blk: {
1174928 .description = "Reserve X9, making it unavailable as a GPR",
1175929 .dependencies = featureSet(&[_]Feature{}),
1176930 };
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 };
1194931 result[@enumToInt(Feature.sb)] = .{
1195932 .llvm_name = "sb",
1196933 .description = "Enable v8.5 Speculation Barrier",
......@@ -1261,9 +998,7 @@ pub const all_features = blk: {
1261998 result[@enumToInt(Feature.sve)] = .{
1262999 .llvm_name = "sve",
12631000 .description = "Enable Scalable Vector Extension (SVE) instructions",
1264 .dependencies = featureSet(&[_]Feature{
1265 .fullfp16,
1266 }),
1001 .dependencies = featureSet(&[_]Feature{}),
12671002 };
12681003 result[@enumToInt(Feature.sve2)] = .{
12691004 .llvm_name = "sve2",
......@@ -1308,104 +1043,15 @@ pub const all_features = blk: {
13081043 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits",
13091044 .dependencies = featureSet(&[_]Feature{}),
13101045 };
1311 result[@enumToInt(Feature.thunderx)] = .{
1312 .llvm_name = "thunderx",
1313 .description = "Cavium ThunderX processors",
1314 .dependencies = featureSet(&[_]Feature{
1315 .crc,
1316 .crypto,
1317 .fp_armv8,
1318 .neon,
1319 .perfmon,
1320 .predictable_select_expensive,
1321 .use_postra_scheduler,
1322 }),
1046 result[@enumToInt(Feature.tlb_rmi)] = .{
1047 .llvm_name = "tlb-rmi",
1048 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1049 .dependencies = featureSet(&[_]Feature{}),
13231050 };
1324 result[@enumToInt(Feature.thunderx2t99)] = .{
1325 .llvm_name = "thunderx2t99",
1326 .description = "Cavium ThunderX2 processors",
1327 .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{}),
1051 result[@enumToInt(Feature.tme)] = .{
1052 .llvm_name = "tme",
1053 .description = "Enable Transactional Memory Extension",
1054 .dependencies = featureSet(&[_]Feature{}),
14091055 };
14101056 result[@enumToInt(Feature.tpidr_el1)] = .{
14111057 .llvm_name = "tpidr-el1",
......@@ -1432,24 +1078,6 @@ pub const all_features = blk: {
14321078 .description = "Enable Trace Buffer Extension",
14331079 .dependencies = featureSet(&[_]Feature{}),
14341080 };
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 };
14531081 result[@enumToInt(Feature.uaops)] = .{
14541082 .llvm_name = "uaops",
14551083 .description = "Enable v8.2 UAO PState",
......@@ -1475,6 +1103,14 @@ pub const all_features = blk: {
14751103 .description = "Use the reciprocal square root approximation",
14761104 .dependencies = featureSet(&[_]Feature{}),
14771105 };
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 };
14781114 result[@enumToInt(Feature.v8_1a)] = .{
14791115 .llvm_name = "v8.1a",
14801116 .description = "Support ARM v8.1a instructions",
......@@ -1485,6 +1121,7 @@ pub const all_features = blk: {
14851121 .pan,
14861122 .rdm,
14871123 .vh,
1124 .v8a,
14881125 }),
14891126 };
14901127 result[@enumToInt(Feature.v8_2a)] = .{
......@@ -1551,51 +1188,15 @@ pub const all_features = blk: {
15511188 .bf16,
15521189 .ecv,
15531190 .fgt,
1554 ._i8mm,
1191 .i8mm,
15551192 .v8_5a,
15561193 }),
15571194 };
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 };
15941195 result[@enumToInt(Feature.vh)] = .{
15951196 .llvm_name = "vh",
15961197 .description = "Enables ARM v8.1 Virtual Host extension",
15971198 .dependencies = featureSet(&[_]Feature{
1598 .CONTEXTIDREL2,
1199 .context_id_rel2,
15991200 }),
16001201 };
16011202 result[@enumToInt(Feature.zcm)] = .{
......@@ -1639,7 +1240,15 @@ pub const cpu = struct {
16391240 .name = "a64fx",
16401241 .llvm_name = "a64fx",
16411242 .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,
16431252 }),
16441253 };
16451254 pub const apple_a10 = CpuModel{
......@@ -1716,42 +1325,68 @@ pub const cpu = struct {
17161325 .name = "carmel",
17171326 .llvm_name = "carmel",
17181327 .features = featureSet(&[_]Feature{
1719 .carmel,
1328 .crypto,
1329 .fullfp16,
1330 .neon,
1331 .v8_2a,
17201332 }),
17211333 };
17221334 pub const cortex_a34 = CpuModel{
17231335 .name = "cortex_a34",
17241336 .llvm_name = "cortex-a34",
17251337 .features = featureSet(&[_]Feature{
1726 .a35,
1338 .a34,
17271339 }),
17281340 };
17291341 pub const cortex_a35 = CpuModel{
17301342 .name = "cortex_a35",
17311343 .llvm_name = "cortex-a35",
17321344 .features = featureSet(&[_]Feature{
1733 .a35,
1345 .a34,
17341346 }),
17351347 };
17361348 pub const cortex_a53 = CpuModel{
17371349 .name = "cortex_a53",
17381350 .llvm_name = "cortex-a53",
17391351 .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,
17411361 }),
17421362 };
17431363 pub const cortex_a55 = CpuModel{
17441364 .name = "cortex_a55",
17451365 .llvm_name = "cortex-a55",
17461366 .features = featureSet(&[_]Feature{
1747 .a55,
1367 .crypto,
1368 .dotprod,
1369 .fullfp16,
1370 .fuse_aes,
1371 .perfmon,
1372 .rcpc,
1373 .v8_2a,
17481374 }),
17491375 };
17501376 pub const cortex_a57 = CpuModel{
17511377 .name = "cortex_a57",
17521378 .llvm_name = "cortex-a57",
17531379 .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,
17551390 }),
17561391 };
17571392 pub const cortex_a65 = CpuModel{
......@@ -1772,21 +1407,35 @@ pub const cpu = struct {
17721407 .name = "cortex_a72",
17731408 .llvm_name = "cortex-a72",
17741409 .features = featureSet(&[_]Feature{
1775 .a72,
1410 .crc,
1411 .crypto,
1412 .fuse_aes,
1413 .perfmon,
1414 .v8a,
17761415 }),
17771416 };
17781417 pub const cortex_a73 = CpuModel{
17791418 .name = "cortex_a73",
17801419 .llvm_name = "cortex-a73",
17811420 .features = featureSet(&[_]Feature{
1782 .a73,
1421 .crc,
1422 .crypto,
1423 .fuse_aes,
1424 .perfmon,
1425 .v8a,
17831426 }),
17841427 };
17851428 pub const cortex_a75 = CpuModel{
17861429 .name = "cortex_a75",
17871430 .llvm_name = "cortex-a75",
17881431 .features = featureSet(&[_]Feature{
1789 .a75,
1432 .crypto,
1433 .dotprod,
1434 .fullfp16,
1435 .fuse_aes,
1436 .perfmon,
1437 .rcpc,
1438 .v8_2a,
17901439 }),
17911440 };
17921441 pub const cortex_a76 = CpuModel{
......@@ -1807,28 +1456,56 @@ pub const cpu = struct {
18071456 .name = "cortex_a77",
18081457 .llvm_name = "cortex-a77",
18091458 .features = featureSet(&[_]Feature{
1810 .a77,
1459 .crypto,
1460 .dotprod,
1461 .fp_armv8,
1462 .fullfp16,
1463 .neon,
1464 .rcpc,
1465 .v8_2a,
18111466 }),
18121467 };
18131468 pub const cortex_a78 = CpuModel{
18141469 .name = "cortex_a78",
18151470 .llvm_name = "cortex-a78",
18161471 .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,
18181484 }),
18191485 };
18201486 pub const cortex_r82 = CpuModel{
18211487 .name = "cortex_r82",
18221488 .llvm_name = "cortex-r82",
18231489 .features = featureSet(&[_]Feature{
1824 .cortex_r82,
1490 .use_postra_scheduler,
1491 .v8r,
18251492 }),
18261493 };
18271494 pub const cortex_x1 = CpuModel{
18281495 .name = "cortex_x1",
18291496 .llvm_name = "cortex-x1",
18301497 .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,
18321509 }),
18331510 };
18341511 pub const cyclone = CpuModel{
......@@ -1838,11 +1515,59 @@ pub const cpu = struct {
18381515 .apple_a7,
18391516 }),
18401517 };
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 };
18411553 pub const exynos_m3 = CpuModel{
18421554 .name = "exynos_m3",
18431555 .llvm_name = "exynos-m3",
18441556 .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,
18461571 }),
18471572 };
18481573 pub const exynos_m4 = CpuModel{
......@@ -1863,7 +1588,17 @@ pub const cpu = struct {
18631588 .name = "falkor",
18641589 .llvm_name = "falkor",
18651590 .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,
18671602 }),
18681603 };
18691604 pub const generic = CpuModel{
......@@ -1871,102 +1606,167 @@ pub const cpu = struct {
18711606 .llvm_name = "generic",
18721607 .features = featureSet(&[_]Feature{
18731608 .ete,
1874 .fp_armv8,
18751609 .fuse_aes,
1876 .neon,
18771610 .perfmon,
18781611 .use_postra_scheduler,
1612 .v8a,
18791613 }),
18801614 };
18811615 pub const kryo = CpuModel{
18821616 .name = "kryo",
18831617 .llvm_name = "kryo",
18841618 .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,
18861628 }),
18871629 };
18881630 pub const neoverse_e1 = CpuModel{
18891631 .name = "neoverse_e1",
18901632 .llvm_name = "neoverse-e1",
18911633 .features = featureSet(&[_]Feature{
1892 .neoversee1,
1634 .neoverse_e1,
18931635 }),
18941636 };
18951637 pub const neoverse_n1 = CpuModel{
18961638 .name = "neoverse_n1",
18971639 .llvm_name = "neoverse-n1",
18981640 .features = featureSet(&[_]Feature{
1899 .neoversen1,
1641 .neoverse_n1,
19001642 }),
19011643 };
19021644 pub const neoverse_n2 = CpuModel{
19031645 .name = "neoverse_n2",
19041646 .llvm_name = "neoverse-n2",
19051647 .features = featureSet(&[_]Feature{
1906 .neoversen2,
1648 .neoverse_n2,
19071649 }),
19081650 };
19091651 pub const neoverse_v1 = CpuModel{
19101652 .name = "neoverse_v1",
19111653 .llvm_name = "neoverse-v1",
19121654 .features = featureSet(&[_]Feature{
1913 .neoversev1,
1655 .neoverse_v1,
19141656 }),
19151657 };
19161658 pub const saphira = CpuModel{
19171659 .name = "saphira",
19181660 .llvm_name = "saphira",
19191661 .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,
19211671 }),
19221672 };
19231673 pub const thunderx = CpuModel{
19241674 .name = "thunderx",
19251675 .llvm_name = "thunderx",
19261676 .features = featureSet(&[_]Feature{
1927 .thunderx,
1677 .crc,
1678 .crypto,
1679 .perfmon,
1680 .predictable_select_expensive,
1681 .use_postra_scheduler,
1682 .v8a,
19281683 }),
19291684 };
19301685 pub const thunderx2t99 = CpuModel{
19311686 .name = "thunderx2t99",
19321687 .llvm_name = "thunderx2t99",
19331688 .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,
19351697 }),
19361698 };
19371699 pub const thunderx3t110 = CpuModel{
19381700 .name = "thunderx3t110",
19391701 .llvm_name = "thunderx3t110",
19401702 .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,
19421718 }),
19431719 };
19441720 pub const thunderxt81 = CpuModel{
19451721 .name = "thunderxt81",
19461722 .llvm_name = "thunderxt81",
19471723 .features = featureSet(&[_]Feature{
1948 .thunderxt81,
1724 .crc,
1725 .crypto,
1726 .perfmon,
1727 .predictable_select_expensive,
1728 .use_postra_scheduler,
1729 .v8a,
19491730 }),
19501731 };
19511732 pub const thunderxt83 = CpuModel{
19521733 .name = "thunderxt83",
19531734 .llvm_name = "thunderxt83",
19541735 .features = featureSet(&[_]Feature{
1955 .thunderxt83,
1736 .crc,
1737 .crypto,
1738 .perfmon,
1739 .predictable_select_expensive,
1740 .use_postra_scheduler,
1741 .v8a,
19561742 }),
19571743 };
19581744 pub const thunderxt88 = CpuModel{
19591745 .name = "thunderxt88",
19601746 .llvm_name = "thunderxt88",
19611747 .features = featureSet(&[_]Feature{
1962 .thunderxt88,
1748 .crc,
1749 .crypto,
1750 .perfmon,
1751 .predictable_select_expensive,
1752 .use_postra_scheduler,
1753 .v8a,
19631754 }),
19641755 };
19651756 pub const tsv110 = CpuModel{
19661757 .name = "tsv110",
19671758 .llvm_name = "tsv110",
19681759 .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,
19701770 }),
19711771 };
19721772};
lib/std/target/amdgpu.zig+2-9
......@@ -9,7 +9,6 @@ const CpuModel = std.Target.Cpu.Model;
99
1010pub const Feature = enum {
1111 @"16_bit_insts",
12 DumpCode,
1312 a16,
1413 add_no_carry_insts,
1514 aperture_regs,
......@@ -27,7 +26,7 @@ pub const Feature = enum {
2726 dpp,
2827 dpp8,
2928 ds_src2_insts,
30 dumpcode,
29 dump_code,
3130 enable_ds128,
3231 enable_prt_strict_null,
3332 fast_denormal_f32,
......@@ -128,7 +127,6 @@ pub const Feature = enum {
128127pub usingnamespace CpuFeature.feature_set_fns(Feature);
129128
130129pub const all_features = blk: {
131 @setEvalBranchQuota(10000);
132130 const len = @typeInfo(Feature).Enum.fields.len;
133131 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
134132 var result: [len]CpuFeature = undefined;
......@@ -137,11 +135,6 @@ pub const all_features = blk: {
137135 .description = "Has i16/f16 instructions",
138136 .dependencies = featureSet(&[_]Feature{}),
139137 };
140 result[@enumToInt(Feature.DumpCode)] = .{
141 .llvm_name = "DumpCode",
142 .description = "Dump MachineInstrs in the CodeEmitter",
143 .dependencies = featureSet(&[_]Feature{}),
144 };
145138 result[@enumToInt(Feature.a16)] = .{
146139 .llvm_name = "a16",
147140 .description = "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands",
......@@ -229,7 +222,7 @@ pub const all_features = blk: {
229222 .description = "Has ds_*_src2 instructions",
230223 .dependencies = featureSet(&[_]Feature{}),
231224 };
232 result[@enumToInt(Feature.dumpcode)] = .{
225 result[@enumToInt(Feature.dump_code)] = .{
233226 .llvm_name = "dumpcode",
234227 .description = "Dump MachineInstrs in the CodeEmitter",
235228 .dependencies = featureSet(&[_]Feature{}),
lib/std/target/arm.zig+679-809
......@@ -10,60 +10,10 @@ const CpuModel = std.Target.Cpu.Model;
1010pub const Feature = enum {
1111 @"32bit",
1212 @"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,
2613 a76,
27 a77,
28 a8,
29 a9,
3014 aclass,
3115 acquire_release,
3216 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,
6717 avoid_movs_shop,
6818 avoid_partial_cpsr,
6919 bf16,
......@@ -77,8 +27,6 @@ pub const Feature = enum {
7727 cdecp6,
7828 cdecp7,
7929 cheap_predicable_cpsr,
80 cortex_a78,
81 cortex_x1,
8230 crc,
8331 crypto,
8432 d32,
......@@ -91,13 +39,13 @@ pub const Feature = enum {
9139 execute_only,
9240 expand_fp_mlx,
9341 exynos,
42 fp16,
43 fp16fml,
44 fp64,
9445 fp_armv8,
9546 fp_armv8d16,
9647 fp_armv8d16sp,
9748 fp_armv8sp,
98 fp16,
99 fp16fml,
100 fp64,
10149 fpao,
10250 fpregs,
10351 fpregs16,
......@@ -105,13 +53,30 @@ pub const Feature = enum {
10553 fullfp16,
10654 fuse_aes,
10755 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,
10875 hwdiv,
10976 hwdiv_arm,
110 _i8mm,
77 i8mm,
11178 iwmmxt,
11279 iwmmxt2,
113 krait,
114 kryo,
11580 lob,
11681 long_calls,
11782 loop_align,
......@@ -128,7 +93,6 @@ pub const Feature = enum {
12893 neon,
12994 neon_fpmovs,
13095 neonfp,
131 neoverse_v1,
13296 no_branch_predictor,
13397 no_movt,
13498 no_neg_immediates,
......@@ -139,9 +103,6 @@ pub const Feature = enum {
139103 prefer_vmovsr,
140104 prof_unpr,
141105 r4,
142 r5,
143 r52,
144 r7,
145106 ras,
146107 rclass,
147108 read_tp_hard,
......@@ -160,20 +121,37 @@ pub const Feature = enum {
160121 splat_vfp_neon,
161122 strict_align,
162123 swift,
163 thumb_mode,
164124 thumb2,
125 thumb_mode,
165126 trustzone,
166127 use_misched,
128 v2,
129 v2a,
130 v3,
131 v3m,
132 v4,
167133 v4t,
168134 v5t,
169135 v5te,
136 v5tej,
170137 v6,
138 v6j,
171139 v6k,
140 v6kz,
172141 v6m,
142 v6sm,
173143 v6t2,
174 v7,
175 v7clrex,
176 v8,
144 v7a,
145 v7em,
146 v7k,
147 v7m,
148 v7r,
149 v7s,
150 v7ve,
151 v8a,
152 v8m,
153 v8m_main,
154 v8r,
177155 v8_1a,
178156 v8_1m_main,
179157 v8_2a,
......@@ -181,8 +159,6 @@ pub const Feature = enum {
181159 v8_4a,
182160 v8_5a,
183161 v8_6a,
184 v8m,
185 v8m_main,
186162 vfp2,
187163 vfp2sp,
188164 vfp3,
......@@ -219,91 +195,11 @@ pub const all_features = blk: {
219195 .description = "Enable support for ARMv8-M Security Extensions",
220196 .dependencies = featureSet(&[_]Feature{}),
221197 };
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 };
287198 result[@enumToInt(Feature.a76)] = .{
288199 .llvm_name = "a76",
289200 .description = "Cortex-A76 ARM processors",
290201 .dependencies = featureSet(&[_]Feature{}),
291202 };
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 };
307203 result[@enumToInt(Feature.aclass)] = .{
308204 .llvm_name = "aclass",
309205 .description = "Is application profile ('A' series)",
......@@ -321,387 +217,6 @@ pub const all_features = blk: {
321217 .neon,
322218 }),
323219 };
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 };
705220 result[@enumToInt(Feature.avoid_movs_shop)] = .{
706221 .llvm_name = "avoid-movs-shop",
707222 .description = "Avoid movs instructions with shifter operand",
......@@ -787,16 +302,6 @@ pub const all_features = blk: {
787302 .description = "Disable +1 predication cost for instructions updating CPSR",
788303 .dependencies = featureSet(&[_]Feature{}),
789304 };
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 };
800305 result[@enumToInt(Feature.crc)] = .{
801306 .llvm_name = "crc",
802307 .description = "Enable support for CRC instructions",
......@@ -881,6 +386,25 @@ pub const all_features = blk: {
881386 .zcz,
882387 }),
883388 };
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 };
884408 result[@enumToInt(Feature.fp_armv8)] = .{
885409 .llvm_name = "fp-armv8",
886410 .description = "Enable ARMv8 FP",
......@@ -915,66 +439,185 @@ pub const all_features = blk: {
915439 .vfp4sp,
916440 }),
917441 };
918 result[@enumToInt(Feature.fp16)] = .{
919 .llvm_name = "fp16",
920 .description = "Enable half-precision floating point",
442 result[@enumToInt(Feature.fpao)] = .{
443 .llvm_name = "fpao",
444 .description = "Enable fast computation of positive address offsets",
921445 .dependencies = featureSet(&[_]Feature{}),
922446 };
923 result[@enumToInt(Feature.fp16fml)] = .{
924 .llvm_name = "fp16fml",
925 .description = "Enable full half-precision floating point fml instructions",
447 result[@enumToInt(Feature.fpregs)] = .{
448 .llvm_name = "fpregs",
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",
926558 .dependencies = featureSet(&[_]Feature{
927 .fullfp16,
559 .has_v8,
928560 }),
929561 };
930 result[@enumToInt(Feature.fp64)] = .{
931 .llvm_name = "fp64",
932 .description = "Floating point unit supports double precision",
562 result[@enumToInt(Feature.has_v8_1m_main)] = .{
563 .llvm_name = "v8.1m.main",
564 .description = "Support ARM v8-1M Mainline instructions",
933565 .dependencies = featureSet(&[_]Feature{
934 .fpregs64,
566 .has_v8m_main,
935567 }),
936568 };
937 result[@enumToInt(Feature.fpao)] = .{
938 .llvm_name = "fpao",
939 .description = "Enable fast computation of positive address offsets",
940 .dependencies = featureSet(&[_]Feature{}),
569 result[@enumToInt(Feature.has_v8_2a)] = .{
570 .llvm_name = "v8.2a",
571 .description = "Support ARM v8.2a instructions",
572 .dependencies = featureSet(&[_]Feature{
573 .has_v8_1a,
574 }),
941575 };
942 result[@enumToInt(Feature.fpregs)] = .{
943 .llvm_name = "fpregs",
944 .description = "Enable FP registers",
945 .dependencies = featureSet(&[_]Feature{}),
576 result[@enumToInt(Feature.has_v8_3a)] = .{
577 .llvm_name = "v8.3a",
578 .description = "Support ARM v8.3a instructions",
579 .dependencies = featureSet(&[_]Feature{
580 .has_v8_2a,
581 }),
946582 };
947 result[@enumToInt(Feature.fpregs16)] = .{
948 .llvm_name = "fpregs16",
949 .description = "Enable 16-bit FP registers",
583 result[@enumToInt(Feature.has_v8_4a)] = .{
584 .llvm_name = "v8.4a",
585 .description = "Support ARM v8.4a instructions",
950586 .dependencies = featureSet(&[_]Feature{
951 .fpregs,
587 .dotprod,
588 .has_v8_3a,
952589 }),
953590 };
954 result[@enumToInt(Feature.fpregs64)] = .{
955 .llvm_name = "fpregs64",
956 .description = "Enable 64-bit FP registers",
591 result[@enumToInt(Feature.has_v8_5a)] = .{
592 .llvm_name = "v8.5a",
593 .description = "Support ARM v8.5a instructions",
957594 .dependencies = featureSet(&[_]Feature{
958 .fpregs,
595 .sb,
596 .has_v8_4a,
959597 }),
960598 };
961 result[@enumToInt(Feature.fullfp16)] = .{
962 .llvm_name = "fullfp16",
963 .description = "Enable full half-precision floating point",
599 result[@enumToInt(Feature.has_v8_6a)] = .{
600 .llvm_name = "v8.6a",
601 .description = "Support ARM v8.6a instructions",
964602 .dependencies = featureSet(&[_]Feature{
965 .fp_armv8d16sp,
966 .fpregs16,
603 .bf16,
604 .i8mm,
605 .has_v8_5a,
967606 }),
968607 };
969 result[@enumToInt(Feature.fuse_aes)] = .{
970 .llvm_name = "fuse-aes",
971 .description = "CPU fuses AES crypto operations",
972 .dependencies = featureSet(&[_]Feature{}),
608 result[@enumToInt(Feature.has_v8m)] = .{
609 .llvm_name = "v8m",
610 .description = "Support ARM v8M Baseline instructions",
611 .dependencies = featureSet(&[_]Feature{
612 .has_v6m,
613 }),
973614 };
974 result[@enumToInt(Feature.fuse_literals)] = .{
975 .llvm_name = "fuse-literals",
976 .description = "CPU fuses literal generation operations",
977 .dependencies = featureSet(&[_]Feature{}),
615 result[@enumToInt(Feature.has_v8m_main)] = .{
616 .llvm_name = "v8m.main",
617 .description = "Support ARM v8M Mainline instructions",
618 .dependencies = featureSet(&[_]Feature{
619 .has_v7,
620 }),
978621 };
979622 result[@enumToInt(Feature.hwdiv)] = .{
980623 .llvm_name = "hwdiv",
......@@ -986,7 +629,7 @@ pub const all_features = blk: {
986629 .description = "Enable divide instructions in ARM mode",
987630 .dependencies = featureSet(&[_]Feature{}),
988631 };
989 result[@enumToInt(Feature._i8mm)] = .{
632 result[@enumToInt(Feature.i8mm)] = .{
990633 .llvm_name = "i8mm",
991634 .description = "Enable Matrix Multiply Int8 Extension",
992635 .dependencies = featureSet(&[_]Feature{
......@@ -997,26 +640,16 @@ pub const all_features = blk: {
997640 .llvm_name = "iwmmxt",
998641 .description = "ARMv5te architecture",
999642 .dependencies = featureSet(&[_]Feature{
1000 .armv5te,
643 .has_v5te,
1001644 }),
1002645 };
1003646 result[@enumToInt(Feature.iwmmxt2)] = .{
1004647 .llvm_name = "iwmmxt2",
1005648 .description = "ARMv5te architecture",
1006649 .dependencies = featureSet(&[_]Feature{
1007 .armv5te,
650 .has_v5te,
1008651 }),
1009652 };
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 };
1020653 result[@enumToInt(Feature.lob)] = .{
1021654 .llvm_name = "lob",
1022655 .description = "Enable Low Overhead Branch extensions",
......@@ -1059,7 +692,7 @@ pub const all_features = blk: {
1059692 .dsp,
1060693 .fpregs16,
1061694 .fpregs64,
1062 .v8_1m_main,
695 .has_v8_1m_main,
1063696 }),
1064697 };
1065698 result[@enumToInt(Feature.mve_fp)] = .{
......@@ -1108,11 +741,6 @@ pub const all_features = blk: {
1108741 .description = "Use NEON for single precision FP",
1109742 .dependencies = featureSet(&[_]Feature{}),
1110743 };
1111 result[@enumToInt(Feature.neoverse_v1)] = .{
1112 .llvm_name = "neoverse-v1",
1113 .description = "Neoverse-V1 ARM processors",
1114 .dependencies = featureSet(&[_]Feature{}),
1115 };
1116744 result[@enumToInt(Feature.no_branch_predictor)] = .{
1117745 .llvm_name = "no-branch-predictor",
1118746 .description = "Has no branch predictor",
......@@ -1163,21 +791,6 @@ pub const all_features = blk: {
1163791 .description = "Cortex-R4 ARM processors",
1164792 .dependencies = featureSet(&[_]Feature{}),
1165793 };
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 };
1181794 result[@enumToInt(Feature.ras)] = .{
1182795 .llvm_name = "ras",
1183796 .description = "Enable Reliability, Availability and Serviceability extensions",
......@@ -1272,16 +885,16 @@ pub const all_features = blk: {
1272885 .description = "Swift ARM processors",
1273886 .dependencies = featureSet(&[_]Feature{}),
1274887 };
1275 result[@enumToInt(Feature.thumb_mode)] = .{
1276 .llvm_name = "thumb-mode",
1277 .description = "Thumb mode",
1278 .dependencies = featureSet(&[_]Feature{}),
1279 };
1280888 result[@enumToInt(Feature.thumb2)] = .{
1281889 .llvm_name = "thumb2",
1282890 .description = "Enable Thumb2 instructions",
1283891 .dependencies = featureSet(&[_]Feature{}),
1284892 };
893 result[@enumToInt(Feature.thumb_mode)] = .{
894 .llvm_name = "thumb-mode",
895 .description = "Thumb mode",
896 .dependencies = featureSet(&[_]Feature{}),
897 };
1285898 result[@enumToInt(Feature.trustzone)] = .{
1286899 .llvm_name = "trustzone",
1287900 .description = "Enable support for TrustZone security extensions",
......@@ -1292,142 +905,399 @@ pub const all_features = blk: {
1292905 .description = "Use the MachineScheduler",
1293906 .dependencies = featureSet(&[_]Feature{}),
1294907 };
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 };
1295943 result[@enumToInt(Feature.v4t)] = .{
1296 .llvm_name = "v4t",
1297 .description = "Support ARM v4T instructions",
1298 .dependencies = featureSet(&[_]Feature{}),
944 .llvm_name = "armv4t",
945 .description = "ARMv4t architecture",
946 .dependencies = featureSet(&[_]Feature{
947 .strict_align,
948 .has_v4t,
949 }),
1299950 };
1300951 result[@enumToInt(Feature.v5t)] = .{
1301 .llvm_name = "v5t",
1302 .description = "Support ARM v5T instructions",
952 .llvm_name = "armv5t",
953 .description = "ARMv5t architecture",
1303954 .dependencies = featureSet(&[_]Feature{
1304 .v4t,
955 .strict_align,
956 .has_v5t,
1305957 }),
1306958 };
1307959 result[@enumToInt(Feature.v5te)] = .{
1308 .llvm_name = "v5te",
1309 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
960 .llvm_name = "armv5te",
961 .description = "ARMv5te architecture",
1310962 .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,
1312973 }),
1313974 };
1314975 result[@enumToInt(Feature.v6)] = .{
1315 .llvm_name = "v6",
1316 .description = "Support ARM v6 instructions",
976 .llvm_name = "armv6",
977 .description = "ARMv6 architecture",
1317978 .dependencies = featureSet(&[_]Feature{
1318 .v5te,
979 .dsp,
980 .has_v6,
1319981 }),
1320982 };
1321 result[@enumToInt(Feature.v6k)] = .{
1322 .llvm_name = "v6k",
1323 .description = "Support ARM v6k instructions",
983 result[@enumToInt(Feature.v6m)] = .{
984 .llvm_name = "armv6-m",
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",
1324998 .dependencies = featureSet(&[_]Feature{
1325999 .v6,
13261000 }),
13271001 };
1328 result[@enumToInt(Feature.v6m)] = .{
1329 .llvm_name = "v6m",
1330 .description = "Support ARM v6M instructions",
1002 result[@enumToInt(Feature.v6k)] = .{
1003 .llvm_name = "armv6k",
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",
13311117 .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,
13331129 }),
13341130 };
1335 result[@enumToInt(Feature.v6t2)] = .{
1336 .llvm_name = "v6t2",
1337 .description = "Support ARM v6t2 instructions",
1131 result[@enumToInt(Feature.v8m)] = .{
1132 .llvm_name = "armv8-m.base",
1133 .description = "ARMv8mBaseline architecture",
13381134 .dependencies = featureSet(&[_]Feature{
1339 .thumb2,
1340 .v6k,
1341 .v8m,
1135 .@"8msecext",
1136 .acquire_release,
1137 .db,
1138 .hwdiv,
1139 .mclass,
1140 .noarm,
1141 .strict_align,
1142 .thumb_mode,
1143 .has_v7clrex,
1144 .has_v8m,
13421145 }),
13431146 };
1344 result[@enumToInt(Feature.v7)] = .{
1345 .llvm_name = "v7",
1346 .description = "Support ARM v7 instructions",
1147 result[@enumToInt(Feature.v8m_main)] = .{
1148 .llvm_name = "armv8-m.main",
1149 .description = "ARMv8mMainline architecture",
13471150 .dependencies = featureSet(&[_]Feature{
1348 .perfmon,
1349 .v6t2,
1350 .v7clrex,
1151 .@"8msecext",
1152 .acquire_release,
1153 .db,
1154 .hwdiv,
1155 .mclass,
1156 .noarm,
1157 .thumb_mode,
1158 .has_v8m_main,
13511159 }),
13521160 };
1353 result[@enumToInt(Feature.v7clrex)] = .{
1354 .llvm_name = "v7clrex",
1355 .description = "Has v7 clrex instruction",
1356 .dependencies = featureSet(&[_]Feature{}),
1357 };
1358 result[@enumToInt(Feature.v8)] = .{
1359 .llvm_name = "v8",
1360 .description = "Support ARM v8 instructions",
1161 result[@enumToInt(Feature.v8r)] = .{
1162 .llvm_name = "armv8-r",
1163 .description = "ARMv8r architecture",
13611164 .dependencies = featureSet(&[_]Feature{
1362 .acquire_release,
1363 .v7,
1165 .crc,
1166 .db,
1167 .dfb,
1168 .dsp,
1169 .fp_armv8,
1170 .mp,
1171 .neon,
1172 .rclass,
1173 .has_v8,
1174 .virtualization,
13641175 }),
13651176 };
13661177 result[@enumToInt(Feature.v8_1a)] = .{
1367 .llvm_name = "v8.1a",
1368 .description = "Support ARM v8.1a instructions",
1178 .llvm_name = "armv8.1-a",
1179 .description = "ARMv81a architecture",
13691180 .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,
13711192 }),
13721193 };
13731194 result[@enumToInt(Feature.v8_1m_main)] = .{
1374 .llvm_name = "v8.1m.main",
1375 .description = "Support ARM v8-1M Mainline instructions",
1195 .llvm_name = "armv8.1-m.main",
1196 .description = "ARMv81mMainline architecture",
13761197 .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,
13781208 }),
13791209 };
13801210 result[@enumToInt(Feature.v8_2a)] = .{
1381 .llvm_name = "v8.2a",
1382 .description = "Support ARM v8.2a instructions",
1211 .llvm_name = "armv8.2-a",
1212 .description = "ARMv82a architecture",
13831213 .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,
13851226 }),
13861227 };
13871228 result[@enumToInt(Feature.v8_3a)] = .{
1388 .llvm_name = "v8.3a",
1389 .description = "Support ARM v8.3a instructions",
1229 .llvm_name = "armv8.3-a",
1230 .description = "ARMv83a architecture",
13901231 .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,
13921244 }),
13931245 };
13941246 result[@enumToInt(Feature.v8_4a)] = .{
1395 .llvm_name = "v8.4a",
1396 .description = "Support ARM v8.4a instructions",
1247 .llvm_name = "armv8.4-a",
1248 .description = "ARMv84a architecture",
13971249 .dependencies = featureSet(&[_]Feature{
1250 .aclass,
1251 .crc,
1252 .crypto,
1253 .db,
13981254 .dotprod,
1399 .v8_3a,
1255 .dsp,
1256 .fp_armv8,
1257 .mp,
1258 .neon,
1259 .ras,
1260 .trustzone,
1261 .has_v8_4a,
1262 .virtualization,
14001263 }),
14011264 };
14021265 result[@enumToInt(Feature.v8_5a)] = .{
1403 .llvm_name = "v8.5a",
1404 .description = "Support ARM v8.5a instructions",
1266 .llvm_name = "armv8.5-a",
1267 .description = "ARMv85a architecture",
14051268 .dependencies = featureSet(&[_]Feature{
1406 .sb,
1407 .v8_4a,
1269 .aclass,
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,
14081282 }),
14091283 };
14101284 result[@enumToInt(Feature.v8_6a)] = .{
1411 .llvm_name = "v8.6a",
1412 .description = "Support ARM v8.6a instructions",
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",
1285 .llvm_name = "armv8.6-a",
1286 .description = "ARMv86a architecture",
14291287 .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,
14311301 }),
14321302 };
14331303 result[@enumToInt(Feature.vfp2)] = .{
......@@ -1547,7 +1417,7 @@ pub const all_features = blk: {
15471417 .llvm_name = "xscale",
15481418 .description = "ARMv5te architecture",
15491419 .dependencies = featureSet(&[_]Feature{
1550 .armv5te,
1420 .has_v5te,
15511421 }),
15521422 };
15531423 result[@enumToInt(Feature.zcz)] = .{
......@@ -1568,49 +1438,49 @@ pub const cpu = struct {
15681438 .name = "arm1020e",
15691439 .llvm_name = "arm1020e",
15701440 .features = featureSet(&[_]Feature{
1571 .armv5te,
1441 .v5te,
15721442 }),
15731443 };
15741444 pub const arm1020t = CpuModel{
15751445 .name = "arm1020t",
15761446 .llvm_name = "arm1020t",
15771447 .features = featureSet(&[_]Feature{
1578 .armv5t,
1448 .v5t,
15791449 }),
15801450 };
15811451 pub const arm1022e = CpuModel{
15821452 .name = "arm1022e",
15831453 .llvm_name = "arm1022e",
15841454 .features = featureSet(&[_]Feature{
1585 .armv5te,
1455 .v5te,
15861456 }),
15871457 };
15881458 pub const arm10e = CpuModel{
15891459 .name = "arm10e",
15901460 .llvm_name = "arm10e",
15911461 .features = featureSet(&[_]Feature{
1592 .armv5te,
1462 .v5te,
15931463 }),
15941464 };
15951465 pub const arm10tdmi = CpuModel{
15961466 .name = "arm10tdmi",
15971467 .llvm_name = "arm10tdmi",
15981468 .features = featureSet(&[_]Feature{
1599 .armv5t,
1469 .v5t,
16001470 }),
16011471 };
16021472 pub const arm1136j_s = CpuModel{
16031473 .name = "arm1136j_s",
16041474 .llvm_name = "arm1136j-s",
16051475 .features = featureSet(&[_]Feature{
1606 .armv6,
1476 .v6,
16071477 }),
16081478 };
16091479 pub const arm1136jf_s = CpuModel{
16101480 .name = "arm1136jf_s",
16111481 .llvm_name = "arm1136jf-s",
16121482 .features = featureSet(&[_]Feature{
1613 .armv6,
1483 .v6,
16141484 .slowfpvmlx,
16151485 .vfp2,
16161486 }),
......@@ -1619,14 +1489,14 @@ pub const cpu = struct {
16191489 .name = "arm1156t2_s",
16201490 .llvm_name = "arm1156t2-s",
16211491 .features = featureSet(&[_]Feature{
1622 .armv6t2,
1492 .v6t2,
16231493 }),
16241494 };
16251495 pub const arm1156t2f_s = CpuModel{
16261496 .name = "arm1156t2f_s",
16271497 .llvm_name = "arm1156t2f-s",
16281498 .features = featureSet(&[_]Feature{
1629 .armv6t2,
1499 .v6t2,
16301500 .slowfpvmlx,
16311501 .vfp2,
16321502 }),
......@@ -1635,21 +1505,21 @@ pub const cpu = struct {
16351505 .name = "arm1176j_s",
16361506 .llvm_name = "arm1176j-s",
16371507 .features = featureSet(&[_]Feature{
1638 .armv6kz,
1508 .v6kz,
16391509 }),
16401510 };
16411511 pub const arm1176jz_s = CpuModel{
16421512 .name = "arm1176jz_s",
16431513 .llvm_name = "arm1176jz-s",
16441514 .features = featureSet(&[_]Feature{
1645 .armv6kz,
1515 .v6kz,
16461516 }),
16471517 };
16481518 pub const arm1176jzf_s = CpuModel{
16491519 .name = "arm1176jzf_s",
16501520 .llvm_name = "arm1176jzf-s",
16511521 .features = featureSet(&[_]Feature{
1652 .armv6kz,
1522 .v6kz,
16531523 .slowfpvmlx,
16541524 .vfp2,
16551525 }),
......@@ -1658,127 +1528,133 @@ pub const cpu = struct {
16581528 .name = "arm710t",
16591529 .llvm_name = "arm710t",
16601530 .features = featureSet(&[_]Feature{
1661 .armv4t,
1531 .v4t,
16621532 }),
16631533 };
16641534 pub const arm720t = CpuModel{
16651535 .name = "arm720t",
16661536 .llvm_name = "arm720t",
16671537 .features = featureSet(&[_]Feature{
1668 .armv4t,
1538 .v4t,
16691539 }),
16701540 };
16711541 pub const arm7tdmi = CpuModel{
16721542 .name = "arm7tdmi",
16731543 .llvm_name = "arm7tdmi",
16741544 .features = featureSet(&[_]Feature{
1675 .armv4t,
1545 .v4t,
16761546 }),
16771547 };
16781548 pub const arm7tdmi_s = CpuModel{
16791549 .name = "arm7tdmi_s",
16801550 .llvm_name = "arm7tdmi-s",
16811551 .features = featureSet(&[_]Feature{
1682 .armv4t,
1552 .v4t,
16831553 }),
16841554 };
16851555 pub const arm8 = CpuModel{
16861556 .name = "arm8",
16871557 .llvm_name = "arm8",
16881558 .features = featureSet(&[_]Feature{
1689 .armv4,
1559 .v4,
16901560 }),
16911561 };
16921562 pub const arm810 = CpuModel{
16931563 .name = "arm810",
16941564 .llvm_name = "arm810",
16951565 .features = featureSet(&[_]Feature{
1696 .armv4,
1566 .v4,
16971567 }),
16981568 };
16991569 pub const arm9 = CpuModel{
17001570 .name = "arm9",
17011571 .llvm_name = "arm9",
17021572 .features = featureSet(&[_]Feature{
1703 .armv4t,
1573 .v4t,
17041574 }),
17051575 };
17061576 pub const arm920 = CpuModel{
17071577 .name = "arm920",
17081578 .llvm_name = "arm920",
17091579 .features = featureSet(&[_]Feature{
1710 .armv4t,
1580 .v4t,
17111581 }),
17121582 };
17131583 pub const arm920t = CpuModel{
17141584 .name = "arm920t",
17151585 .llvm_name = "arm920t",
17161586 .features = featureSet(&[_]Feature{
1717 .armv4t,
1587 .v4t,
17181588 }),
17191589 };
17201590 pub const arm922t = CpuModel{
17211591 .name = "arm922t",
17221592 .llvm_name = "arm922t",
17231593 .features = featureSet(&[_]Feature{
1724 .armv4t,
1594 .v4t,
17251595 }),
17261596 };
17271597 pub const arm926ej_s = CpuModel{
17281598 .name = "arm926ej_s",
17291599 .llvm_name = "arm926ej-s",
17301600 .features = featureSet(&[_]Feature{
1731 .armv5te,
1601 .v5te,
17321602 }),
17331603 };
17341604 pub const arm940t = CpuModel{
17351605 .name = "arm940t",
17361606 .llvm_name = "arm940t",
17371607 .features = featureSet(&[_]Feature{
1738 .armv4t,
1608 .v4t,
17391609 }),
17401610 };
17411611 pub const arm946e_s = CpuModel{
17421612 .name = "arm946e_s",
17431613 .llvm_name = "arm946e-s",
17441614 .features = featureSet(&[_]Feature{
1745 .armv5te,
1615 .v5te,
17461616 }),
17471617 };
17481618 pub const arm966e_s = CpuModel{
17491619 .name = "arm966e_s",
17501620 .llvm_name = "arm966e-s",
17511621 .features = featureSet(&[_]Feature{
1752 .armv5te,
1622 .v5te,
17531623 }),
17541624 };
17551625 pub const arm968e_s = CpuModel{
17561626 .name = "arm968e_s",
17571627 .llvm_name = "arm968e-s",
17581628 .features = featureSet(&[_]Feature{
1759 .armv5te,
1629 .v5te,
17601630 }),
17611631 };
17621632 pub const arm9e = CpuModel{
17631633 .name = "arm9e",
17641634 .llvm_name = "arm9e",
17651635 .features = featureSet(&[_]Feature{
1766 .armv5te,
1636 .v5te,
17671637 }),
17681638 };
17691639 pub const arm9tdmi = CpuModel{
17701640 .name = "arm9tdmi",
17711641 .llvm_name = "arm9tdmi",
17721642 .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,
17741651 }),
17751652 };
17761653 pub const cortex_a12 = CpuModel{
17771654 .name = "cortex_a12",
17781655 .llvm_name = "cortex-a12",
17791656 .features = featureSet(&[_]Feature{
1780 .a12,
1781 .armv7_a,
1657 .v7a,
17821658 .avoid_partial_cpsr,
17831659 .mp,
17841660 .ret_addr_stack,
......@@ -1792,8 +1668,7 @@ pub const cpu = struct {
17921668 .name = "cortex_a15",
17931669 .llvm_name = "cortex-a15",
17941670 .features = featureSet(&[_]Feature{
1795 .a15,
1796 .armv7_a,
1671 .v7a,
17971672 .avoid_partial_cpsr,
17981673 .dont_widen_vmovs,
17991674 .mp,
......@@ -1810,8 +1685,7 @@ pub const cpu = struct {
18101685 .name = "cortex_a17",
18111686 .llvm_name = "cortex-a17",
18121687 .features = featureSet(&[_]Feature{
1813 .a17,
1814 .armv7_a,
1688 .v7a,
18151689 .avoid_partial_cpsr,
18161690 .mp,
18171691 .ret_addr_stack,
......@@ -1825,31 +1699,29 @@ pub const cpu = struct {
18251699 .name = "cortex_a32",
18261700 .llvm_name = "cortex-a32",
18271701 .features = featureSet(&[_]Feature{
1828 .armv8_a,
18291702 .crc,
18301703 .crypto,
18311704 .hwdiv,
18321705 .hwdiv_arm,
1706 .v8a,
18331707 }),
18341708 };
18351709 pub const cortex_a35 = CpuModel{
18361710 .name = "cortex_a35",
18371711 .llvm_name = "cortex-a35",
18381712 .features = featureSet(&[_]Feature{
1839 .a35,
1840 .armv8_a,
18411713 .crc,
18421714 .crypto,
18431715 .hwdiv,
18441716 .hwdiv_arm,
1717 .v8a,
18451718 }),
18461719 };
18471720 pub const cortex_a5 = CpuModel{
18481721 .name = "cortex_a5",
18491722 .llvm_name = "cortex-a5",
18501723 .features = featureSet(&[_]Feature{
1851 .a5,
1852 .armv7_a,
1724 .v7a,
18531725 .mp,
18541726 .ret_addr_stack,
18551727 .slow_fp_brcc,
......@@ -1864,8 +1736,7 @@ pub const cpu = struct {
18641736 .name = "cortex_a53",
18651737 .llvm_name = "cortex-a53",
18661738 .features = featureSet(&[_]Feature{
1867 .a53,
1868 .armv8_a,
1739 .v8a,
18691740 .crc,
18701741 .crypto,
18711742 .fpao,
......@@ -1877,8 +1748,7 @@ pub const cpu = struct {
18771748 .name = "cortex_a55",
18781749 .llvm_name = "cortex-a55",
18791750 .features = featureSet(&[_]Feature{
1880 .a55,
1881 .armv8_2_a,
1751 .v8_2a,
18821752 .dotprod,
18831753 .hwdiv,
18841754 .hwdiv_arm,
......@@ -1888,8 +1758,7 @@ pub const cpu = struct {
18881758 .name = "cortex_a57",
18891759 .llvm_name = "cortex-a57",
18901760 .features = featureSet(&[_]Feature{
1891 .a57,
1892 .armv8_a,
1761 .v8a,
18931762 .avoid_partial_cpsr,
18941763 .cheap_predicable_cpsr,
18951764 .crc,
......@@ -1903,8 +1772,7 @@ pub const cpu = struct {
19031772 .name = "cortex_a7",
19041773 .llvm_name = "cortex-a7",
19051774 .features = featureSet(&[_]Feature{
1906 .a7,
1907 .armv7_a,
1775 .v7a,
19081776 .mp,
19091777 .ret_addr_stack,
19101778 .slow_fp_brcc,
......@@ -1921,8 +1789,7 @@ pub const cpu = struct {
19211789 .name = "cortex_a72",
19221790 .llvm_name = "cortex-a72",
19231791 .features = featureSet(&[_]Feature{
1924 .a72,
1925 .armv8_a,
1792 .v8a,
19261793 .crc,
19271794 .crypto,
19281795 .hwdiv,
......@@ -1933,8 +1800,7 @@ pub const cpu = struct {
19331800 .name = "cortex_a73",
19341801 .llvm_name = "cortex-a73",
19351802 .features = featureSet(&[_]Feature{
1936 .a73,
1937 .armv8_a,
1803 .v8a,
19381804 .crc,
19391805 .crypto,
19401806 .hwdiv,
......@@ -1945,8 +1811,7 @@ pub const cpu = struct {
19451811 .name = "cortex_a75",
19461812 .llvm_name = "cortex-a75",
19471813 .features = featureSet(&[_]Feature{
1948 .a75,
1949 .armv8_2_a,
1814 .v8_2a,
19501815 .dotprod,
19511816 .hwdiv,
19521817 .hwdiv_arm,
......@@ -1957,7 +1822,7 @@ pub const cpu = struct {
19571822 .llvm_name = "cortex-a76",
19581823 .features = featureSet(&[_]Feature{
19591824 .a76,
1960 .armv8_2_a,
1825 .v8_2a,
19611826 .crc,
19621827 .crypto,
19631828 .dotprod,
......@@ -1971,7 +1836,7 @@ pub const cpu = struct {
19711836 .llvm_name = "cortex-a76ae",
19721837 .features = featureSet(&[_]Feature{
19731838 .a76,
1974 .armv8_2_a,
1839 .v8_2a,
19751840 .crc,
19761841 .crypto,
19771842 .dotprod,
......@@ -1984,8 +1849,7 @@ pub const cpu = struct {
19841849 .name = "cortex_a77",
19851850 .llvm_name = "cortex-a77",
19861851 .features = featureSet(&[_]Feature{
1987 .a77,
1988 .armv8_2_a,
1852 .v8_2a,
19891853 .crc,
19901854 .crypto,
19911855 .dotprod,
......@@ -1998,8 +1862,7 @@ pub const cpu = struct {
19981862 .name = "cortex_a78",
19991863 .llvm_name = "cortex-a78",
20001864 .features = featureSet(&[_]Feature{
2001 .armv8_2_a,
2002 .cortex_a78,
1865 .v8_2a,
20031866 .crc,
20041867 .crypto,
20051868 .dotprod,
......@@ -2012,8 +1875,7 @@ pub const cpu = struct {
20121875 .name = "cortex_a8",
20131876 .llvm_name = "cortex-a8",
20141877 .features = featureSet(&[_]Feature{
2015 .a8,
2016 .armv7_a,
1878 .v7a,
20171879 .nonpipelined_vfp,
20181880 .ret_addr_stack,
20191881 .slow_fp_brcc,
......@@ -2028,8 +1890,7 @@ pub const cpu = struct {
20281890 .name = "cortex_a9",
20291891 .llvm_name = "cortex-a9",
20301892 .features = featureSet(&[_]Feature{
2031 .a9,
2032 .armv7_a,
1893 .v7a,
20331894 .avoid_partial_cpsr,
20341895 .expand_fp_mlx,
20351896 .fp16,
......@@ -2048,28 +1909,28 @@ pub const cpu = struct {
20481909 .name = "cortex_m0",
20491910 .llvm_name = "cortex-m0",
20501911 .features = featureSet(&[_]Feature{
2051 .armv6_m,
1912 .v6m,
20521913 }),
20531914 };
20541915 pub const cortex_m0plus = CpuModel{
20551916 .name = "cortex_m0plus",
20561917 .llvm_name = "cortex-m0plus",
20571918 .features = featureSet(&[_]Feature{
2058 .armv6_m,
1919 .v6m,
20591920 }),
20601921 };
20611922 pub const cortex_m1 = CpuModel{
20621923 .name = "cortex_m1",
20631924 .llvm_name = "cortex-m1",
20641925 .features = featureSet(&[_]Feature{
2065 .armv6_m,
1926 .v6m,
20661927 }),
20671928 };
20681929 pub const cortex_m23 = CpuModel{
20691930 .name = "cortex_m23",
20701931 .llvm_name = "cortex-m23",
20711932 .features = featureSet(&[_]Feature{
2072 .armv8_m_base,
1933 .v8m,
20731934 .no_movt,
20741935 }),
20751936 };
......@@ -2077,7 +1938,7 @@ pub const cpu = struct {
20771938 .name = "cortex_m3",
20781939 .llvm_name = "cortex-m3",
20791940 .features = featureSet(&[_]Feature{
2080 .armv7_m,
1941 .v7m,
20811942 .loop_align,
20821943 .m3,
20831944 .no_branch_predictor,
......@@ -2088,7 +1949,7 @@ pub const cpu = struct {
20881949 .name = "cortex_m33",
20891950 .llvm_name = "cortex-m33",
20901951 .features = featureSet(&[_]Feature{
2091 .armv8_m_main,
1952 .v8m_main,
20921953 .dsp,
20931954 .fp_armv8d16sp,
20941955 .loop_align,
......@@ -2102,7 +1963,7 @@ pub const cpu = struct {
21021963 .name = "cortex_m35p",
21031964 .llvm_name = "cortex-m35p",
21041965 .features = featureSet(&[_]Feature{
2105 .armv8_m_main,
1966 .v8m_main,
21061967 .dsp,
21071968 .fp_armv8d16sp,
21081969 .loop_align,
......@@ -2116,7 +1977,7 @@ pub const cpu = struct {
21161977 .name = "cortex_m4",
21171978 .llvm_name = "cortex-m4",
21181979 .features = featureSet(&[_]Feature{
2119 .armv7e_m,
1980 .v7em,
21201981 .loop_align,
21211982 .no_branch_predictor,
21221983 .slowfpvfmx,
......@@ -2129,7 +1990,7 @@ pub const cpu = struct {
21291990 .name = "cortex_m55",
21301991 .llvm_name = "cortex-m55",
21311992 .features = featureSet(&[_]Feature{
2132 .armv8_1_m_main,
1993 .v8_1m_main,
21331994 .dsp,
21341995 .fp_armv8d16,
21351996 .loop_align,
......@@ -2143,16 +2004,15 @@ pub const cpu = struct {
21432004 .name = "cortex_m7",
21442005 .llvm_name = "cortex-m7",
21452006 .features = featureSet(&[_]Feature{
2146 .armv7e_m,
2007 .v7em,
21472008 .fp_armv8d16,
2148 .use_misched,
21492009 }),
21502010 };
21512011 pub const cortex_r4 = CpuModel{
21522012 .name = "cortex_r4",
21532013 .llvm_name = "cortex-r4",
21542014 .features = featureSet(&[_]Feature{
2155 .armv7_r,
2015 .v7r,
21562016 .avoid_partial_cpsr,
21572017 .r4,
21582018 .ret_addr_stack,
......@@ -2162,7 +2022,7 @@ pub const cpu = struct {
21622022 .name = "cortex_r4f",
21632023 .llvm_name = "cortex-r4f",
21642024 .features = featureSet(&[_]Feature{
2165 .armv7_r,
2025 .v7r,
21662026 .avoid_partial_cpsr,
21672027 .r4,
21682028 .ret_addr_stack,
......@@ -2176,10 +2036,9 @@ pub const cpu = struct {
21762036 .name = "cortex_r5",
21772037 .llvm_name = "cortex-r5",
21782038 .features = featureSet(&[_]Feature{
2179 .armv7_r,
2039 .v7r,
21802040 .avoid_partial_cpsr,
21812041 .hwdiv_arm,
2182 .r5,
21832042 .ret_addr_stack,
21842043 .slow_fp_brcc,
21852044 .slowfpvfmx,
......@@ -2191,9 +2050,8 @@ pub const cpu = struct {
21912050 .name = "cortex_r52",
21922051 .llvm_name = "cortex-r52",
21932052 .features = featureSet(&[_]Feature{
2194 .armv8_r,
2053 .v8r,
21952054 .fpao,
2196 .r52,
21972055 .use_misched,
21982056 }),
21992057 };
......@@ -2201,12 +2059,11 @@ pub const cpu = struct {
22012059 .name = "cortex_r7",
22022060 .llvm_name = "cortex-r7",
22032061 .features = featureSet(&[_]Feature{
2204 .armv7_r,
2062 .v7r,
22052063 .avoid_partial_cpsr,
22062064 .fp16,
22072065 .hwdiv_arm,
22082066 .mp,
2209 .r7,
22102067 .ret_addr_stack,
22112068 .slow_fp_brcc,
22122069 .slowfpvfmx,
......@@ -2218,7 +2075,7 @@ pub const cpu = struct {
22182075 .name = "cortex_r8",
22192076 .llvm_name = "cortex-r8",
22202077 .features = featureSet(&[_]Feature{
2221 .armv7_r,
2078 .v7r,
22222079 .avoid_partial_cpsr,
22232080 .fp16,
22242081 .hwdiv_arm,
......@@ -2234,8 +2091,7 @@ pub const cpu = struct {
22342091 .name = "cortex_x1",
22352092 .llvm_name = "cortex-x1",
22362093 .features = featureSet(&[_]Feature{
2237 .armv8_2_a,
2238 .cortex_x1,
2094 .v8_2a,
22392095 .crc,
22402096 .crypto,
22412097 .dotprod,
......@@ -2248,7 +2104,7 @@ pub const cpu = struct {
22482104 .name = "cyclone",
22492105 .llvm_name = "cyclone",
22502106 .features = featureSet(&[_]Feature{
2251 .armv8_a,
2107 .v8a,
22522108 .avoid_movs_shop,
22532109 .avoid_partial_cpsr,
22542110 .crypto,
......@@ -2270,14 +2126,30 @@ pub const cpu = struct {
22702126 .name = "ep9312",
22712127 .llvm_name = "ep9312",
22722128 .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,
22742146 }),
22752147 };
22762148 pub const exynos_m3 = CpuModel{
22772149 .name = "exynos_m3",
22782150 .llvm_name = "exynos-m3",
22792151 .features = featureSet(&[_]Feature{
2280 .armv8_a,
2152 .v8_2a,
22812153 .exynos,
22822154 }),
22832155 };
......@@ -2285,7 +2157,7 @@ pub const cpu = struct {
22852157 .name = "exynos_m4",
22862158 .llvm_name = "exynos-m4",
22872159 .features = featureSet(&[_]Feature{
2288 .armv8_2_a,
2160 .v8_2a,
22892161 .dotprod,
22902162 .exynos,
22912163 .fullfp16,
......@@ -2295,10 +2167,10 @@ pub const cpu = struct {
22952167 .name = "exynos_m5",
22962168 .llvm_name = "exynos-m5",
22972169 .features = featureSet(&[_]Feature{
2298 .armv8_2_a,
22992170 .dotprod,
23002171 .exynos,
23012172 .fullfp16,
2173 .v8_2a,
23022174 }),
23032175 };
23042176 pub const generic = CpuModel{
......@@ -2310,21 +2182,20 @@ pub const cpu = struct {
23102182 .name = "iwmmxt",
23112183 .llvm_name = "iwmmxt",
23122184 .features = featureSet(&[_]Feature{
2313 .armv5te,
2185 .v5te,
23142186 }),
23152187 };
23162188 pub const krait = CpuModel{
23172189 .name = "krait",
23182190 .llvm_name = "krait",
23192191 .features = featureSet(&[_]Feature{
2320 .armv7_a,
23212192 .avoid_partial_cpsr,
23222193 .fp16,
23232194 .hwdiv,
23242195 .hwdiv_arm,
2325 .krait,
23262196 .muxed_units,
23272197 .ret_addr_stack,
2198 .v7a,
23282199 .vfp4,
23292200 .vldn_align,
23302201 .vmlx_forwarding,
......@@ -2334,19 +2205,18 @@ pub const cpu = struct {
23342205 .name = "kryo",
23352206 .llvm_name = "kryo",
23362207 .features = featureSet(&[_]Feature{
2337 .armv8_a,
23382208 .crc,
23392209 .crypto,
23402210 .hwdiv,
23412211 .hwdiv_arm,
2342 .kryo,
2212 .v8a,
23432213 }),
23442214 };
23452215 pub const mpcore = CpuModel{
23462216 .name = "mpcore",
23472217 .llvm_name = "mpcore",
23482218 .features = featureSet(&[_]Feature{
2349 .armv6k,
2219 .v6k,
23502220 .slowfpvmlx,
23512221 .vfp2,
23522222 }),
......@@ -2355,14 +2225,14 @@ pub const cpu = struct {
23552225 .name = "mpcorenovfp",
23562226 .llvm_name = "mpcorenovfp",
23572227 .features = featureSet(&[_]Feature{
2358 .armv6k,
2228 .v6k,
23592229 }),
23602230 };
23612231 pub const neoverse_n1 = CpuModel{
23622232 .name = "neoverse_n1",
23632233 .llvm_name = "neoverse-n1",
23642234 .features = featureSet(&[_]Feature{
2365 .armv8_2_a,
2235 .v8_2a,
23662236 .crc,
23672237 .crypto,
23682238 .dotprod,
......@@ -2374,9 +2244,9 @@ pub const cpu = struct {
23742244 .name = "neoverse_n2",
23752245 .llvm_name = "neoverse-n2",
23762246 .features = featureSet(&[_]Feature{
2377 .armv8_5_a,
2247 .v8_5a,
23782248 .bf16,
2379 ._i8mm,
2249 .i8mm,
23802250 .perfmon,
23812251 }),
23822252 };
......@@ -2384,28 +2254,28 @@ pub const cpu = struct {
23842254 .name = "neoverse_v1",
23852255 .llvm_name = "neoverse-v1",
23862256 .features = featureSet(&[_]Feature{
2387 .armv8_4_a,
2257 .v8_4a,
23882258 .bf16,
23892259 .crc,
23902260 .crypto,
23912261 .fullfp16,
23922262 .hwdiv,
23932263 .hwdiv_arm,
2394 ._i8mm,
2264 .i8mm,
23952265 }),
23962266 };
23972267 pub const sc000 = CpuModel{
23982268 .name = "sc000",
23992269 .llvm_name = "sc000",
24002270 .features = featureSet(&[_]Feature{
2401 .armv6_m,
2271 .v6m,
24022272 }),
24032273 };
24042274 pub const sc300 = CpuModel{
24052275 .name = "sc300",
24062276 .llvm_name = "sc300",
24072277 .features = featureSet(&[_]Feature{
2408 .armv7_m,
2278 .v7m,
24092279 .m3,
24102280 .no_branch_predictor,
24112281 .use_misched,
......@@ -2415,35 +2285,35 @@ pub const cpu = struct {
24152285 .name = "strongarm",
24162286 .llvm_name = "strongarm",
24172287 .features = featureSet(&[_]Feature{
2418 .armv4,
2288 .v4,
24192289 }),
24202290 };
24212291 pub const strongarm110 = CpuModel{
24222292 .name = "strongarm110",
24232293 .llvm_name = "strongarm110",
24242294 .features = featureSet(&[_]Feature{
2425 .armv4,
2295 .v4,
24262296 }),
24272297 };
24282298 pub const strongarm1100 = CpuModel{
24292299 .name = "strongarm1100",
24302300 .llvm_name = "strongarm1100",
24312301 .features = featureSet(&[_]Feature{
2432 .armv4,
2302 .v4,
24332303 }),
24342304 };
24352305 pub const strongarm1110 = CpuModel{
24362306 .name = "strongarm1110",
24372307 .llvm_name = "strongarm1110",
24382308 .features = featureSet(&[_]Feature{
2439 .armv4,
2309 .v4,
24402310 }),
24412311 };
24422312 pub const swift = CpuModel{
24432313 .name = "swift",
24442314 .llvm_name = "swift",
24452315 .features = featureSet(&[_]Feature{
2446 .armv7_a,
2316 .v7a,
24472317 .avoid_movs_shop,
24482318 .avoid_partial_cpsr,
24492319 .disable_postra_scheduler,
......@@ -2471,7 +2341,7 @@ pub const cpu = struct {
24712341 .name = "xscale",
24722342 .llvm_name = "xscale",
24732343 .features = featureSet(&[_]Feature{
2474 .armv5te,
2344 .v5te,
24752345 }),
24762346 };
24772347};
lib/std/target/avr.zig+2-2
......@@ -47,7 +47,6 @@ pub const Feature = enum {
4747pub usingnamespace CpuFeature.feature_set_fns(Feature);
4848
4949pub const all_features = blk: {
50 @setEvalBranchQuota(10000);
5150 const len = @typeInfo(Feature).Enum.fields.len;
5251 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
5352 var result: [len]CpuFeature = undefined;
......@@ -164,6 +163,7 @@ pub const all_features = blk: {
164163 .dependencies = featureSet(&[_]Feature{
165164 .avr0,
166165 .@"break",
166 .memmappedregs,
167167 .sram,
168168 .tinyencoding,
169169 }),
......@@ -1859,7 +1859,7 @@ pub const cpu = struct {
18591859 .name = "atxmega16e5",
18601860 .llvm_name = "atxmega16e5",
18611861 .features = featureSet(&[_]Feature{
1862 .xmegau,
1862 .xmega,
18631863 }),
18641864 };
18651865 pub const atxmega192a3 = CpuModel{
lib/std/target/bpf.zig-1
......@@ -16,7 +16,6 @@ pub const Feature = enum {
1616pub usingnamespace CpuFeature.feature_set_fns(Feature);
1717
1818pub const all_features = blk: {
19 @setEvalBranchQuota(10000);
2019 const len = @typeInfo(Feature).Enum.fields.len;
2120 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2221 var result: [len]CpuFeature = undefined;
lib/std/target/hexagon.zig-1
......@@ -44,7 +44,6 @@ pub const Feature = enum {
4444pub usingnamespace CpuFeature.feature_set_fns(Feature);
4545
4646pub const all_features = blk: {
47 @setEvalBranchQuota(10000);
4847 const len = @typeInfo(Feature).Enum.fields.len;
4948 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
5049 var result: [len]CpuFeature = undefined;
lib/std/target/mips.zig-1
......@@ -65,7 +65,6 @@ pub const Feature = enum {
6565pub usingnamespace CpuFeature.feature_set_fns(Feature);
6666
6767pub const all_features = blk: {
68 @setEvalBranchQuota(10000);
6968 const len = @typeInfo(Feature).Enum.fields.len;
7069 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
7170 var result: [len]CpuFeature = undefined;
lib/std/target/msp430.zig-1
......@@ -17,7 +17,6 @@ pub const Feature = enum {
1717pub usingnamespace CpuFeature.feature_set_fns(Feature);
1818
1919pub const all_features = blk: {
20 @setEvalBranchQuota(10000);
2120 const len = @typeInfo(Feature).Enum.fields.len;
2221 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2322 var result: [len]CpuFeature = undefined;
lib/std/target/nvptx.zig-1
......@@ -41,7 +41,6 @@ pub const Feature = enum {
4141pub usingnamespace CpuFeature.feature_set_fns(Feature);
4242
4343pub const all_features = blk: {
44 @setEvalBranchQuota(10000);
4544 const len = @typeInfo(Feature).Enum.fields.len;
4645 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
4746 var result: [len]CpuFeature = undefined;
lib/std/target/powerpc.zig+62-29
......@@ -62,6 +62,7 @@ pub const Feature = enum {
6262 ppc6xx,
6363 predictable_select_expensive,
6464 prefix_instrs,
65 qpx,
6566 recipprec,
6667 secure_plt,
6768 slow_popcntd,
......@@ -75,7 +76,6 @@ pub const Feature = enum {
7576pub usingnamespace CpuFeature.feature_set_fns(Feature);
7677
7778pub const all_features = blk: {
78 @setEvalBranchQuota(10000);
7979 const len = @typeInfo(Feature).Enum.fields.len;
8080 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
8181 var result: [len]CpuFeature = undefined;
......@@ -417,6 +417,13 @@ pub const all_features = blk: {
417417 .power9_altivec,
418418 }),
419419 };
420 result[@enumToInt(Feature.qpx)] = .{
421 .llvm_name = null,
422 .description = "Enable QPX instructions",
423 .dependencies = featureSet(&[_]Feature{
424 .fpu,
425 }),
426 };
420427 result[@enumToInt(Feature.recipprec)] = .{
421428 .llvm_name = "recipprec",
422429 .description = "Assume higher precision reciprocal estimates",
......@@ -472,8 +479,8 @@ pub const all_features = blk: {
472479};
473480
474481pub const cpu = struct {
475 pub const @"440" = CpuModel{
476 .name = "440",
482 pub const @"ppc440" = CpuModel{
483 .name = "ppc440",
477484 .llvm_name = "440",
478485 .features = featureSet(&[_]Feature{
479486 .booke,
......@@ -484,8 +491,8 @@ pub const cpu = struct {
484491 .msync,
485492 }),
486493 };
487 pub const @"450" = CpuModel{
488 .name = "450",
494 pub const @"ppc450" = CpuModel{
495 .name = "ppc450",
489496 .llvm_name = "450",
490497 .features = featureSet(&[_]Feature{
491498 .booke,
......@@ -496,70 +503,70 @@ pub const cpu = struct {
496503 .msync,
497504 }),
498505 };
499 pub const @"601" = CpuModel{
500 .name = "601",
506 pub const @"ppc601" = CpuModel{
507 .name = "ppc601",
501508 .llvm_name = "601",
502509 .features = featureSet(&[_]Feature{
503510 .fpu,
504511 }),
505512 };
506 pub const @"602" = CpuModel{
507 .name = "602",
513 pub const @"ppc602" = CpuModel{
514 .name = "ppc602",
508515 .llvm_name = "602",
509516 .features = featureSet(&[_]Feature{
510517 .fpu,
511518 }),
512519 };
513 pub const @"603" = CpuModel{
514 .name = "603",
520 pub const @"ppc603" = CpuModel{
521 .name = "ppc603",
515522 .llvm_name = "603",
516523 .features = featureSet(&[_]Feature{
517524 .fres,
518525 .frsqrte,
519526 }),
520527 };
521 pub const @"603e" = CpuModel{
522 .name = "603e",
528 pub const @"ppc603e" = CpuModel{
529 .name = "ppc603e",
523530 .llvm_name = "603e",
524531 .features = featureSet(&[_]Feature{
525532 .fres,
526533 .frsqrte,
527534 }),
528535 };
529 pub const @"603ev" = CpuModel{
530 .name = "603ev",
536 pub const @"ppc603ev" = CpuModel{
537 .name = "ppc603ev",
531538 .llvm_name = "603ev",
532539 .features = featureSet(&[_]Feature{
533540 .fres,
534541 .frsqrte,
535542 }),
536543 };
537 pub const @"604" = CpuModel{
538 .name = "604",
544 pub const @"ppc604" = CpuModel{
545 .name = "ppc604",
539546 .llvm_name = "604",
540547 .features = featureSet(&[_]Feature{
541548 .fres,
542549 .frsqrte,
543550 }),
544551 };
545 pub const @"604e" = CpuModel{
546 .name = "604e",
552 pub const @"ppc604e" = CpuModel{
553 .name = "ppc604e",
547554 .llvm_name = "604e",
548555 .features = featureSet(&[_]Feature{
549556 .fres,
550557 .frsqrte,
551558 }),
552559 };
553 pub const @"620" = CpuModel{
554 .name = "620",
560 pub const @"ppc620" = CpuModel{
561 .name = "ppc620",
555562 .llvm_name = "620",
556563 .features = featureSet(&[_]Feature{
557564 .fres,
558565 .frsqrte,
559566 }),
560567 };
561 pub const @"7400" = CpuModel{
562 .name = "7400",
568 pub const @"ppc7400" = CpuModel{
569 .name = "ppc7400",
563570 .llvm_name = "7400",
564571 .features = featureSet(&[_]Feature{
565572 .altivec,
......@@ -567,8 +574,8 @@ pub const cpu = struct {
567574 .frsqrte,
568575 }),
569576 };
570 pub const @"7450" = CpuModel{
571 .name = "7450",
577 pub const @"ppc7450" = CpuModel{
578 .name = "ppc7450",
572579 .llvm_name = "7450",
573580 .features = featureSet(&[_]Feature{
574581 .altivec,
......@@ -576,16 +583,16 @@ pub const cpu = struct {
576583 .frsqrte,
577584 }),
578585 };
579 pub const @"750" = CpuModel{
580 .name = "750",
586 pub const @"ppc750" = CpuModel{
587 .name = "ppc750",
581588 .llvm_name = "750",
582589 .features = featureSet(&[_]Feature{
583590 .fres,
584591 .frsqrte,
585592 }),
586593 };
587 pub const @"970" = CpuModel{
588 .name = "970",
594 pub const @"ppc970" = CpuModel{
595 .name = "ppc970",
589596 .llvm_name = "970",
590597 .features = featureSet(&[_]Feature{
591598 .@"64bit",
......@@ -622,6 +629,32 @@ pub const cpu = struct {
622629 .stfiwx,
623630 }),
624631 };
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 };
625658 pub const e500 = CpuModel{
626659 .name = "e500",
627660 .llvm_name = "e500",
lib/std/target/riscv.zig+23-1
......@@ -69,7 +69,6 @@ pub const Feature = enum {
6969pub usingnamespace CpuFeature.feature_set_fns(Feature);
7070
7171pub const all_features = blk: {
72 @setEvalBranchQuota(10000);
7372 const len = @typeInfo(Feature).Enum.fields.len;
7473 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
7574 var result: [len]CpuFeature = undefined;
......@@ -382,6 +381,29 @@ pub const all_features = blk: {
382381};
383382
384383pub 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 };
385407 pub const generic_rv32 = CpuModel{
386408 .name = "generic_rv32",
387409 .llvm_name = "generic-rv32",
lib/std/target/sparc.zig-6
......@@ -32,7 +32,6 @@ pub const Feature = enum {
3232pub usingnamespace CpuFeature.feature_set_fns(Feature);
3333
3434pub const all_features = blk: {
35 @setEvalBranchQuota(10000);
3635 const len = @typeInfo(Feature).Enum.fields.len;
3736 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
3837 var result: [len]CpuFeature = undefined;
......@@ -161,11 +160,6 @@ pub const cpu = struct {
161160 .llvm_name = "f934",
162161 .features = featureSet(&[_]Feature{}),
163162 };
164 pub const generic = CpuModel{
165 .name = "generic",
166 .llvm_name = "generic",
167 .features = featureSet(&[_]Feature{}),
168 };
169163 pub const gr712rc = CpuModel{
170164 .name = "gr712rc",
171165 .llvm_name = "gr712rc",
lib/std/target/systemz.zig-1
......@@ -49,7 +49,6 @@ pub const Feature = enum {
4949pub usingnamespace CpuFeature.feature_set_fns(Feature);
5050
5151pub const all_features = blk: {
52 @setEvalBranchQuota(10000);
5352 const len = @typeInfo(Feature).Enum.fields.len;
5453 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
5554 var result: [len]CpuFeature = undefined;
lib/std/target/wasm.zig-1
......@@ -24,7 +24,6 @@ pub const Feature = enum {
2424pub usingnamespace CpuFeature.feature_set_fns(Feature);
2525
2626pub const all_features = blk: {
27 @setEvalBranchQuota(10000);
2827 const len = @typeInfo(Feature).Enum.fields.len;
2928 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
3029 var result: [len]CpuFeature = undefined;
lib/std/target/x86.zig-20
......@@ -8,12 +8,9 @@ const CpuFeature = std.Target.Cpu.Feature;
88const CpuModel = std.Target.Cpu.Model;
99
1010pub const Feature = enum {
11 @"16bit_mode",
12 @"32bit_mode",
1311 @"3dnow",
1412 @"3dnowa",
1513 @"64bit",
16 @"64bit_mode",
1714 adx,
1815 aes,
1916 amx_bf16,
......@@ -154,20 +151,9 @@ pub const Feature = enum {
154151pub usingnamespace CpuFeature.feature_set_fns(Feature);
155152
156153pub const all_features = blk: {
157 @setEvalBranchQuota(10000);
158154 const len = @typeInfo(Feature).Enum.fields.len;
159155 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
160156 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 };
171157 result[@enumToInt(Feature.@"3dnow")] = .{
172158 .llvm_name = "3dnow",
173159 .description = "Enable 3DNow! instructions",
......@@ -187,11 +173,6 @@ pub const all_features = blk: {
187173 .description = "Support 64-bit instructions",
188174 .dependencies = featureSet(&[_]Feature{}),
189175 };
190 result[@enumToInt(Feature.@"64bit_mode")] = .{
191 .llvm_name = "64bit-mode",
192 .description = "64-bit mode (x86_64)",
193 .dependencies = featureSet(&[_]Feature{}),
194 };
195176 result[@enumToInt(Feature.adx)] = .{
196177 .llvm_name = "adx",
197178 .description = "Support ADX instructions",
......@@ -1680,7 +1661,6 @@ pub const cpu = struct {
16801661 .name = "generic",
16811662 .llvm_name = "generic",
16821663 .features = featureSet(&[_]Feature{
1683 .@"64bit",
16841664 .cx8,
16851665 .x87,
16861666 }),
src/codegen.zig+3-3
......@@ -1689,7 +1689,7 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type {
16891689
16901690 // TODO: add Instruction.supportedOn
16911691 // function for ARM
1692 if (Target.arm.featureSetHas(self.target.cpu.features, .armv5t)) {
1692 if (Target.arm.featureSetHas(self.target.cpu.features, .has_v5t)) {
16931693 writeInt(u32, try self.code.addManyAsArray(4), Instruction.blx(.al, .lr).toU32());
16941694 } else {
16951695 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 {
26252625 } else if (Instruction.Operand.fromU32(~@intCast(u32, x))) |op| {
26262626 writeInt(u32, try self.code.addManyAsArray(4), Instruction.mvn(.al, reg, op).toU32());
26272627 } 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)) {
26292629 writeInt(u32, try self.code.addManyAsArray(4), Instruction.movw(.al, reg, @intCast(u16, x)).toU32());
26302630 } else {
26312631 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 {
26342634 } else {
26352635 // TODO write constant to code and load
26362636 // 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)) {
26382638 // immediate: 0xaaaabbbb
26392639 // movw reg, #0xbbbb
26402640 // movt reg, #0xaaaa