authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-19 19:11:20-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-19 19:11:20-05:00
log96f45c27b65307fe4abd5d1fb1cf314b1f493d8e
treebc4a15db7d631ef779acbb17201b766d2466335c
parent4c6f207aff482cf973218bbda1d28e6d2a619df5
signaturelock-open Commit is signed but in an unrecognized format.

arm: clean up the messy sub-architecture & CPU features


1 files changed, 277 insertions(+), 467 deletions(-)

lib/std/target/arm.zig+277-467
......@@ -9,39 +9,6 @@ pub const Feature = enum {
99 aclass,
1010 acquire_release,
1111 aes,
12 armv2,
13 armv2a,
14 armv3,
15 armv3m,
16 armv4,
17 armv4t,
18 armv5t,
19 armv5te,
20 armv5tej,
21 armv6,
22 armv6_m,
23 armv6j,
24 armv6k,
25 armv6kz,
26 armv6s_m,
27 armv6t2,
28 armv7_a,
29 armv7_m,
30 armv7_r,
31 armv7e_m,
32 armv7k,
33 armv7s,
34 armv7ve,
35 armv8_a,
36 armv8_m_base,
37 armv8_m_main,
38 armv8_r,
39 armv8_1_a,
40 armv8_1_m_main,
41 armv8_2_a,
42 armv8_3_a,
43 armv8_4_a,
44 armv8_5_a,
4512 avoid_movs_shop,
4613 avoid_partial_cpsr,
4714 cheap_predicable_cpsr,
......@@ -57,13 +24,13 @@ pub const Feature = enum {
5724 execute_only,
5825 expand_fp_mlx,
5926 exynos,
27 fp16,
28 fp16fml,
29 fp64,
6030 fp_armv8,
6131 fp_armv8d16,
6232 fp_armv8d16sp,
6333 fp_armv8sp,
64 fp16,
65 fp16fml,
66 fp64,
6734 fpao,
6835 fpregs,
6936 fpregs16,
......@@ -115,29 +82,46 @@ pub const Feature = enum {
11582 splat_vfp_neon,
11683 strict_align,
11784 swift,
118 thumb_mode,
11985 thumb2,
86 thumb_mode,
12087 trustzone,
12188 use_aa,
12289 use_misched,
90 v2,
91 v2a,
92 v3,
93 v3m,
94 v4,
12395 v4t,
12496 v5t,
12597 v5te,
98 v5tej,
12699 v6,
100 v6j,
127101 v6k,
102 v6kz,
128103 v6m,
104 v6sm,
129105 v6t2,
130106 v7,
107 v7a,
108 v7m,
109 v7r,
131110 v7clrex,
111 v7em,
112 v7k,
113 v7s,
114 v7ve,
132115 v8a,
116 v8m,
117 v8m_main,
118 v8r,
133119 v8_1a,
134120 v8_1m_main,
135121 v8_2a,
136122 v8_3a,
137123 v8_4a,
138124 v8_5a,
139 v8m,
140 v8m_main,
141125 vfp2,
142126 vfp2d16,
143127 vfp2d16sp,
......@@ -198,368 +182,6 @@ pub const all_features = blk: {
198182 .neon,
199183 }),
200184 };
201 result[@enumToInt(Feature.armv2)] = .{
202 .llvm_name = "armv2",
203 .description = "ARMv2 architecture",
204 .dependencies = featureSet(&[_]Feature{}),
205 };
206 result[@enumToInt(Feature.armv2a)] = .{
207 .llvm_name = "armv2a",
208 .description = "ARMv2a architecture",
209 .dependencies = featureSet(&[_]Feature{}),
210 };
211 result[@enumToInt(Feature.armv3)] = .{
212 .llvm_name = "armv3",
213 .description = "ARMv3 architecture",
214 .dependencies = featureSet(&[_]Feature{}),
215 };
216 result[@enumToInt(Feature.armv3m)] = .{
217 .llvm_name = "armv3m",
218 .description = "ARMv3m architecture",
219 .dependencies = featureSet(&[_]Feature{}),
220 };
221 result[@enumToInt(Feature.armv4)] = .{
222 .llvm_name = "armv4",
223 .description = "ARMv4 architecture",
224 .dependencies = featureSet(&[_]Feature{}),
225 };
226 result[@enumToInt(Feature.armv4t)] = .{
227 .llvm_name = "armv4t",
228 .description = "ARMv4t architecture",
229 .dependencies = featureSet(&[_]Feature{
230 .v4t,
231 }),
232 };
233 result[@enumToInt(Feature.armv5t)] = .{
234 .llvm_name = "armv5t",
235 .description = "ARMv5t architecture",
236 .dependencies = featureSet(&[_]Feature{
237 .v5t,
238 }),
239 };
240 result[@enumToInt(Feature.armv5te)] = .{
241 .llvm_name = "armv5te",
242 .description = "ARMv5te architecture",
243 .dependencies = featureSet(&[_]Feature{
244 .v5te,
245 }),
246 };
247 result[@enumToInt(Feature.armv5tej)] = .{
248 .llvm_name = "armv5tej",
249 .description = "ARMv5tej architecture",
250 .dependencies = featureSet(&[_]Feature{
251 .v5te,
252 }),
253 };
254 result[@enumToInt(Feature.armv6)] = .{
255 .llvm_name = "armv6",
256 .description = "ARMv6 architecture",
257 .dependencies = featureSet(&[_]Feature{
258 .dsp,
259 .v6,
260 }),
261 };
262 result[@enumToInt(Feature.armv6_m)] = .{
263 .llvm_name = "armv6-m",
264 .description = "ARMv6m architecture",
265 .dependencies = featureSet(&[_]Feature{
266 .db,
267 .mclass,
268 .noarm,
269 .strict_align,
270 .thumb_mode,
271 .v6m,
272 }),
273 };
274 result[@enumToInt(Feature.armv6j)] = .{
275 .llvm_name = "armv6j",
276 .description = "ARMv7a architecture",
277 .dependencies = featureSet(&[_]Feature{
278 .armv6,
279 }),
280 };
281 result[@enumToInt(Feature.armv6k)] = .{
282 .llvm_name = "armv6k",
283 .description = "ARMv6k architecture",
284 .dependencies = featureSet(&[_]Feature{
285 .v6k,
286 }),
287 };
288 result[@enumToInt(Feature.armv6kz)] = .{
289 .llvm_name = "armv6kz",
290 .description = "ARMv6kz architecture",
291 .dependencies = featureSet(&[_]Feature{
292 .trustzone,
293 .v6k,
294 }),
295 };
296 result[@enumToInt(Feature.armv6s_m)] = .{
297 .llvm_name = "armv6s-m",
298 .description = "ARMv6sm architecture",
299 .dependencies = featureSet(&[_]Feature{
300 .db,
301 .mclass,
302 .noarm,
303 .strict_align,
304 .thumb_mode,
305 .v6m,
306 }),
307 };
308 result[@enumToInt(Feature.armv6t2)] = .{
309 .llvm_name = "armv6t2",
310 .description = "ARMv6t2 architecture",
311 .dependencies = featureSet(&[_]Feature{
312 .dsp,
313 .v6t2,
314 }),
315 };
316 result[@enumToInt(Feature.armv7_a)] = .{
317 .llvm_name = "armv7-a",
318 .description = "ARMv7a architecture",
319 .dependencies = featureSet(&[_]Feature{
320 .aclass,
321 .db,
322 .dsp,
323 .neon,
324 .v7,
325 }),
326 };
327 result[@enumToInt(Feature.armv7_m)] = .{
328 .llvm_name = "armv7-m",
329 .description = "ARMv7m architecture",
330 .dependencies = featureSet(&[_]Feature{
331 .db,
332 .hwdiv,
333 .mclass,
334 .noarm,
335 .thumb_mode,
336 .thumb2,
337 .v7,
338 }),
339 };
340 result[@enumToInt(Feature.armv7_r)] = .{
341 .llvm_name = "armv7-r",
342 .description = "ARMv7r architecture",
343 .dependencies = featureSet(&[_]Feature{
344 .db,
345 .dsp,
346 .hwdiv,
347 .rclass,
348 .v7,
349 }),
350 };
351 result[@enumToInt(Feature.armv7e_m)] = .{
352 .llvm_name = "armv7e-m",
353 .description = "ARMv7em architecture",
354 .dependencies = featureSet(&[_]Feature{
355 .db,
356 .dsp,
357 .hwdiv,
358 .mclass,
359 .noarm,
360 .thumb_mode,
361 .thumb2,
362 .v7,
363 }),
364 };
365 result[@enumToInt(Feature.armv7k)] = .{
366 .llvm_name = "armv7k",
367 .description = "ARMv7a architecture",
368 .dependencies = featureSet(&[_]Feature{
369 .armv7_a,
370 }),
371 };
372 result[@enumToInt(Feature.armv7s)] = .{
373 .llvm_name = "armv7s",
374 .description = "ARMv7a architecture",
375 .dependencies = featureSet(&[_]Feature{
376 .armv7_a,
377 }),
378 };
379 result[@enumToInt(Feature.armv7ve)] = .{
380 .llvm_name = "armv7ve",
381 .description = "ARMv7ve architecture",
382 .dependencies = featureSet(&[_]Feature{
383 .aclass,
384 .db,
385 .dsp,
386 .mp,
387 .neon,
388 .trustzone,
389 .v7,
390 .virtualization,
391 }),
392 };
393 result[@enumToInt(Feature.armv8_a)] = .{
394 .llvm_name = "armv8-a",
395 .description = "ARMv8a architecture",
396 .dependencies = featureSet(&[_]Feature{
397 .aclass,
398 .crc,
399 .crypto,
400 .db,
401 .dsp,
402 .fp_armv8,
403 .mp,
404 .neon,
405 .trustzone,
406 .v8a,
407 .virtualization,
408 }),
409 };
410 result[@enumToInt(Feature.armv8_m_base)] = .{
411 .llvm_name = "armv8-m.base",
412 .description = "ARMv8mBaseline architecture",
413 .dependencies = featureSet(&[_]Feature{
414 .@"8msecext",
415 .acquire_release,
416 .db,
417 .hwdiv,
418 .mclass,
419 .noarm,
420 .strict_align,
421 .thumb_mode,
422 .v7clrex,
423 .v8m,
424 }),
425 };
426 result[@enumToInt(Feature.armv8_m_main)] = .{
427 .llvm_name = "armv8-m.main",
428 .description = "ARMv8mMainline architecture",
429 .dependencies = featureSet(&[_]Feature{
430 .@"8msecext",
431 .acquire_release,
432 .db,
433 .hwdiv,
434 .mclass,
435 .noarm,
436 .thumb_mode,
437 .v8m_main,
438 }),
439 };
440 result[@enumToInt(Feature.armv8_r)] = .{
441 .llvm_name = "armv8-r",
442 .description = "ARMv8r architecture",
443 .dependencies = featureSet(&[_]Feature{
444 .crc,
445 .db,
446 .dfb,
447 .dsp,
448 .fp_armv8,
449 .mp,
450 .neon,
451 .rclass,
452 .v8a,
453 .virtualization,
454 }),
455 };
456 result[@enumToInt(Feature.armv8_1_a)] = .{
457 .llvm_name = "armv8.1-a",
458 .description = "ARMv81a architecture",
459 .dependencies = featureSet(&[_]Feature{
460 .aclass,
461 .crc,
462 .crypto,
463 .db,
464 .dsp,
465 .fp_armv8,
466 .mp,
467 .neon,
468 .trustzone,
469 .v8_1a,
470 .virtualization,
471 }),
472 };
473 result[@enumToInt(Feature.armv8_1_m_main)] = .{
474 .llvm_name = "armv8.1-m.main",
475 .description = "ARMv81mMainline architecture",
476 .dependencies = featureSet(&[_]Feature{
477 .@"8msecext",
478 .acquire_release,
479 .db,
480 .hwdiv,
481 .lob,
482 .mclass,
483 .noarm,
484 .ras,
485 .thumb_mode,
486 .v8_1m_main,
487 }),
488 };
489 result[@enumToInt(Feature.armv8_2_a)] = .{
490 .llvm_name = "armv8.2-a",
491 .description = "ARMv82a architecture",
492 .dependencies = featureSet(&[_]Feature{
493 .aclass,
494 .crc,
495 .crypto,
496 .db,
497 .dsp,
498 .fp_armv8,
499 .mp,
500 .neon,
501 .ras,
502 .trustzone,
503 .v8_2a,
504 .virtualization,
505 }),
506 };
507 result[@enumToInt(Feature.armv8_3_a)] = .{
508 .llvm_name = "armv8.3-a",
509 .description = "ARMv83a architecture",
510 .dependencies = featureSet(&[_]Feature{
511 .aclass,
512 .crc,
513 .crypto,
514 .db,
515 .dsp,
516 .fp_armv8,
517 .mp,
518 .neon,
519 .ras,
520 .trustzone,
521 .v8_3a,
522 .virtualization,
523 }),
524 };
525 result[@enumToInt(Feature.armv8_4_a)] = .{
526 .llvm_name = "armv8.4-a",
527 .description = "ARMv84a architecture",
528 .dependencies = featureSet(&[_]Feature{
529 .aclass,
530 .crc,
531 .crypto,
532 .db,
533 .dotprod,
534 .dsp,
535 .fp_armv8,
536 .mp,
537 .neon,
538 .ras,
539 .trustzone,
540 .v8_4a,
541 .virtualization,
542 }),
543 };
544 result[@enumToInt(Feature.armv8_5_a)] = .{
545 .llvm_name = "armv8.5-a",
546 .description = "ARMv85a architecture",
547 .dependencies = featureSet(&[_]Feature{
548 .aclass,
549 .crc,
550 .crypto,
551 .db,
552 .dotprod,
553 .dsp,
554 .fp_armv8,
555 .mp,
556 .neon,
557 .ras,
558 .trustzone,
559 .v8_5a,
560 .virtualization,
561 }),
562 };
563185 result[@enumToInt(Feature.avoid_movs_shop)] = .{
564186 .llvm_name = "avoid-movs-shop",
565187 .description = "Avoid movs instructions with shifter operand",
......@@ -659,6 +281,25 @@ pub const all_features = blk: {
659281 .zcz,
660282 }),
661283 };
284 result[@enumToInt(Feature.fp16)] = .{
285 .llvm_name = "fp16",
286 .description = "Enable half-precision floating point",
287 .dependencies = featureSet(&[_]Feature{}),
288 };
289 result[@enumToInt(Feature.fp16fml)] = .{
290 .llvm_name = "fp16fml",
291 .description = "Enable full half-precision floating point fml instructions",
292 .dependencies = featureSet(&[_]Feature{
293 .fullfp16,
294 }),
295 };
296 result[@enumToInt(Feature.fp64)] = .{
297 .llvm_name = "fp64",
298 .description = "Floating point unit supports double precision",
299 .dependencies = featureSet(&[_]Feature{
300 .fpregs64,
301 }),
302 };
662303 result[@enumToInt(Feature.fp_armv8)] = .{
663304 .llvm_name = "fp-armv8",
664305 .description = "Enable ARMv8 FP",
......@@ -693,25 +334,6 @@ pub const all_features = blk: {
693334 .vfp4sp,
694335 }),
695336 };
696 result[@enumToInt(Feature.fp16)] = .{
697 .llvm_name = "fp16",
698 .description = "Enable half-precision floating point",
699 .dependencies = featureSet(&[_]Feature{}),
700 };
701 result[@enumToInt(Feature.fp16fml)] = .{
702 .llvm_name = "fp16fml",
703 .description = "Enable full half-precision floating point fml instructions",
704 .dependencies = featureSet(&[_]Feature{
705 .fullfp16,
706 }),
707 };
708 result[@enumToInt(Feature.fp64)] = .{
709 .llvm_name = "fp64",
710 .description = "Floating point unit supports double precision",
711 .dependencies = featureSet(&[_]Feature{
712 .fpregs64,
713 }),
714 };
715337 result[@enumToInt(Feature.fpao)] = .{
716338 .llvm_name = "fpao",
717339 .description = "Enable fast computation of positive address offsets",
......@@ -993,16 +615,16 @@ pub const all_features = blk: {
993615 .description = "Swift ARM processors",
994616 .dependencies = featureSet(&[_]Feature{}),
995617 };
996 result[@enumToInt(Feature.thumb_mode)] = .{
997 .llvm_name = "thumb-mode",
998 .description = "Thumb mode",
999 .dependencies = featureSet(&[_]Feature{}),
1000 };
1001618 result[@enumToInt(Feature.thumb2)] = .{
1002619 .llvm_name = "thumb2",
1003620 .description = "Enable Thumb2 instructions",
1004621 .dependencies = featureSet(&[_]Feature{}),
1005622 };
623 result[@enumToInt(Feature.thumb_mode)] = .{
624 .llvm_name = "thumb-mode",
625 .description = "Thumb mode",
626 .dependencies = featureSet(&[_]Feature{}),
627 };
1006628 result[@enumToInt(Feature.trustzone)] = .{
1007629 .llvm_name = "trustzone",
1008630 .description = "Enable support for TrustZone security extensions",
......@@ -1018,50 +640,116 @@ pub const all_features = blk: {
1018640 .description = "Use the MachineScheduler",
1019641 .dependencies = featureSet(&[_]Feature{}),
1020642 };
643 result[@enumToInt(Feature.v2)] = .{
644 .llvm_name = "armv2",
645 .description = "ARMv2 architecture",
646 .dependencies = featureSet(&[_]Feature{}),
647 };
648 result[@enumToInt(Feature.v2a)] = .{
649 .llvm_name = "armv2a",
650 .description = "ARMv2a architecture",
651 .dependencies = featureSet(&[_]Feature{}),
652 };
653 result[@enumToInt(Feature.v3)] = .{
654 .llvm_name = "armv3",
655 .description = "ARMv3 architecture",
656 .dependencies = featureSet(&[_]Feature{}),
657 };
658 result[@enumToInt(Feature.v3m)] = .{
659 .llvm_name = "armv3m",
660 .description = "ARMv3m architecture",
661 .dependencies = featureSet(&[_]Feature{}),
662 };
663 result[@enumToInt(Feature.v4)] = .{
664 .llvm_name = "armv4",
665 .description = "ARMv4 architecture",
666 .dependencies = featureSet(&[_]Feature{}),
667 };
1021668 result[@enumToInt(Feature.v4t)] = .{
1022 .llvm_name = "v4t",
1023 .description = "Support ARM v4T instructions",
669 .llvm_name = "armv4t",
670 .description = "ARMv4t architecture",
1024671 .dependencies = featureSet(&[_]Feature{}),
1025672 };
1026673 result[@enumToInt(Feature.v5t)] = .{
1027 .llvm_name = "v5t",
1028 .description = "Support ARM v5T instructions",
674 .llvm_name = "armv5t",
675 .description = "ARMv5t architecture",
1029676 .dependencies = featureSet(&[_]Feature{
1030677 .v4t,
1031678 }),
1032679 };
1033680 result[@enumToInt(Feature.v5te)] = .{
1034 .llvm_name = "v5te",
1035 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
681 .llvm_name = "armv5te",
682 .description = "ARMv5te architecture",
1036683 .dependencies = featureSet(&[_]Feature{
1037684 .v5t,
1038685 }),
1039686 };
687 result[@enumToInt(Feature.v5tej)] = .{
688 .llvm_name = "armv5tej",
689 .description = "ARMv5tej architecture",
690 .dependencies = featureSet(&[_]Feature{
691 .v5te,
692 }),
693 };
1040694 result[@enumToInt(Feature.v6)] = .{
1041 .llvm_name = "v6",
1042 .description = "Support ARM v6 instructions",
695 .llvm_name = "armv6",
696 .description = "ARMv6 architecture",
1043697 .dependencies = featureSet(&[_]Feature{
698 .dsp,
1044699 .v5te,
1045700 }),
1046701 };
702 result[@enumToInt(Feature.v6j)] = .{
703 .llvm_name = "armv6j",
704 .description = "ARMv7a architecture",
705 .dependencies = featureSet(&[_]Feature{
706 .v6,
707 }),
708 };
1047709 result[@enumToInt(Feature.v6k)] = .{
1048 .llvm_name = "v6k",
1049 .description = "Support ARM v6k instructions",
710 .llvm_name = "armv6k",
711 .description = "ARMv6k architecture",
1050712 .dependencies = featureSet(&[_]Feature{
1051713 .v6,
1052714 }),
1053715 };
716 result[@enumToInt(Feature.v6kz)] = .{
717 .llvm_name = "armv6kz",
718 .description = "ARMv6kz architecture",
719 .dependencies = featureSet(&[_]Feature{
720 .trustzone,
721 .v6k,
722 }),
723 };
1054724 result[@enumToInt(Feature.v6m)] = .{
1055 .llvm_name = "v6m",
1056 .description = "Support ARM v6M instructions",
725 .llvm_name = "armv6-m",
726 .description = "ARMv6m architecture",
727 .dependencies = featureSet(&[_]Feature{
728 .db,
729 .mclass,
730 .noarm,
731 .strict_align,
732 .thumb_mode,
733 .v6,
734 }),
735 };
736 result[@enumToInt(Feature.v6sm)] = .{
737 .llvm_name = "armv6s-m",
738 .description = "ARMv6sm architecture",
1057739 .dependencies = featureSet(&[_]Feature{
740 .db,
741 .mclass,
742 .noarm,
743 .strict_align,
744 .thumb_mode,
1058745 .v6,
1059746 }),
1060747 };
1061748 result[@enumToInt(Feature.v6t2)] = .{
1062 .llvm_name = "v6t2",
1063 .description = "Support ARM v6t2 instructions",
749 .llvm_name = "armv6t2",
750 .description = "ARMv6t2 architecture",
1064751 .dependencies = featureSet(&[_]Feature{
752 .dsp,
1065753 .thumb2,
1066754 .v6k,
1067755 .v8m,
......@@ -1076,77 +764,199 @@ pub const all_features = blk: {
1076764 .v7clrex,
1077765 }),
1078766 };
767 result[@enumToInt(Feature.v7a)] = .{
768 .llvm_name = "armv7-a",
769 .description = "ARMv7a architecture",
770 .dependencies = featureSet(&[_]Feature{
771 .aclass,
772 .db,
773 .dsp,
774 .neon,
775 .v7,
776 }),
777 };
778 result[@enumToInt(Feature.v7m)] = .{
779 .llvm_name = "armv7-m",
780 .description = "ARMv7m architecture",
781 .dependencies = featureSet(&[_]Feature{
782 .db,
783 .hwdiv,
784 .mclass,
785 .noarm,
786 .thumb_mode,
787 .thumb2,
788 .v7,
789 }),
790 };
791 result[@enumToInt(Feature.v7r)] = .{
792 .llvm_name = "armv7-r",
793 .description = "ARMv7r architecture",
794 .dependencies = featureSet(&[_]Feature{
795 .db,
796 .dsp,
797 .hwdiv,
798 .rclass,
799 .v7,
800 }),
801 };
1079802 result[@enumToInt(Feature.v7clrex)] = .{
1080803 .llvm_name = "v7clrex",
1081804 .description = "Has v7 clrex instruction",
1082805 .dependencies = featureSet(&[_]Feature{}),
1083806 };
807 result[@enumToInt(Feature.v7em)] = .{
808 .llvm_name = "armv7e-m",
809 .description = "ARMv7em architecture",
810 .dependencies = featureSet(&[_]Feature{
811 .db,
812 .dsp,
813 .hwdiv,
814 .mclass,
815 .noarm,
816 .thumb_mode,
817 .thumb2,
818 .v7,
819 }),
820 };
821 result[@enumToInt(Feature.v7k)] = .{
822 .llvm_name = "armv7k",
823 .description = "ARMv7a architecture",
824 .dependencies = featureSet(&[_]Feature{
825 .v7a,
826 }),
827 };
828 result[@enumToInt(Feature.v7s)] = .{
829 .llvm_name = "armv7s",
830 .description = "ARMv7a architecture",
831 .dependencies = featureSet(&[_]Feature{
832 .v7a,
833 }),
834 };
835 result[@enumToInt(Feature.v7ve)] = .{
836 .llvm_name = "armv7ve",
837 .description = "ARMv7ve architecture",
838 .dependencies = featureSet(&[_]Feature{
839 .aclass,
840 .db,
841 .dsp,
842 .mp,
843 .neon,
844 .trustzone,
845 .v7,
846 .virtualization,
847 }),
848 };
1084849 result[@enumToInt(Feature.v8a)] = .{
1085 .llvm_name = "v8a",
1086 .description = "Support ARM v8a instructions",
850 .llvm_name = "armv8-a",
851 .description = "ARMv8a architecture",
852 .dependencies = featureSet(&[_]Feature{
853 .aclass,
854 .acquire_release,
855 .crc,
856 .crypto,
857 .db,
858 .fp_armv8,
859 .mp,
860 .neon,
861 .trustzone,
862 .v7,
863 .virtualization,
864 }),
865 };
866 result[@enumToInt(Feature.v8m)] = .{
867 .llvm_name = "armv8-m.base",
868 .description = "ARMv8mBaseline architecture",
869 .dependencies = featureSet(&[_]Feature{
870 .@"8msecext",
871 .acquire_release,
872 .db,
873 .hwdiv,
874 .mclass,
875 .noarm,
876 .strict_align,
877 .thumb_mode,
878 .v6m,
879 .v7clrex,
880 }),
881 };
882 result[@enumToInt(Feature.v8m_main)] = .{
883 .llvm_name = "armv8-m.main",
884 .description = "ARMv8mMainline architecture",
1087885 .dependencies = featureSet(&[_]Feature{
886 .@"8msecext",
1088887 .acquire_release,
888 .db,
889 .hwdiv,
890 .mclass,
891 .noarm,
892 .thumb_mode,
1089893 .v7,
1090894 }),
1091895 };
896 result[@enumToInt(Feature.v8r)] = .{
897 .llvm_name = "armv8-r",
898 .description = "ARMv8r architecture",
899 .dependencies = featureSet(&[_]Feature{
900 .dfb,
901 .rclass,
902 .v8a,
903 }),
904 };
1092905 result[@enumToInt(Feature.v8_1a)] = .{
1093 .llvm_name = "v8.1a",
1094 .description = "Support ARM v8.1a instructions",
906 .llvm_name = "armv8.1-a",
907 .description = "ARMv81a architecture",
1095908 .dependencies = featureSet(&[_]Feature{
1096909 .v8a,
1097910 }),
1098911 };
1099912 result[@enumToInt(Feature.v8_1m_main)] = .{
1100 .llvm_name = "v8.1m.main",
1101 .description = "Support ARM v8-1M Mainline instructions",
913 .llvm_name = "armv8.1-m.main",
914 .description = "ARMv81mMainline architecture",
1102915 .dependencies = featureSet(&[_]Feature{
916 .@"8msecext",
917 .acquire_release,
918 .db,
919 .hwdiv,
920 .lob,
921 .mclass,
922 .noarm,
923 .ras,
924 .thumb_mode,
1103925 .v8m_main,
1104926 }),
1105927 };
1106928 result[@enumToInt(Feature.v8_2a)] = .{
1107 .llvm_name = "v8.2a",
1108 .description = "Support ARM v8.2a instructions",
929 .llvm_name = "armv8.2-a",
930 .description = "ARMv82a architecture",
1109931 .dependencies = featureSet(&[_]Feature{
932 .ras,
1110933 .v8_1a,
1111934 }),
1112935 };
1113936 result[@enumToInt(Feature.v8_3a)] = .{
1114 .llvm_name = "v8.3a",
1115 .description = "Support ARM v8.3a instructions",
937 .llvm_name = "armv8.3-a",
938 .description = "ARMv83a architecture",
1116939 .dependencies = featureSet(&[_]Feature{
1117940 .v8_2a,
1118941 }),
1119942 };
1120943 result[@enumToInt(Feature.v8_4a)] = .{
1121 .llvm_name = "v8.4a",
1122 .description = "Support ARM v8.4a instructions",
944 .llvm_name = "armv8.4-a",
945 .description = "ARMv84a architecture",
1123946 .dependencies = featureSet(&[_]Feature{
1124947 .dotprod,
1125948 .v8_3a,
1126949 }),
1127950 };
1128951 result[@enumToInt(Feature.v8_5a)] = .{
1129 .llvm_name = "v8.5a",
1130 .description = "Support ARM v8.5a instructions",
952 .llvm_name = "armv8.5-a",
953 .description = "ARMv85a architecture",
1131954 .dependencies = featureSet(&[_]Feature{
955 .dotprod,
1132956 .sb,
1133957 .v8_4a,
1134958 }),
1135959 };
1136 result[@enumToInt(Feature.v8m)] = .{
1137 .llvm_name = "v8m",
1138 .description = "Support ARM v8M Baseline instructions",
1139 .dependencies = featureSet(&[_]Feature{
1140 .v6m,
1141 }),
1142 };
1143 result[@enumToInt(Feature.v8m_main)] = .{
1144 .llvm_name = "v8m.main",
1145 .description = "Support ARM v8M Mainline instructions",
1146 .dependencies = featureSet(&[_]Feature{
1147 .v7,
1148 }),
1149 };
1150960 result[@enumToInt(Feature.vfp2)] = .{
1151961 .llvm_name = "vfp2",
1152962 .description = "Enable VFP2 instructions",