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
signature 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 {...@@ -9,39 +9,6 @@ pub const Feature = enum {
9 aclass,9 aclass,
10 acquire_release,10 acquire_release,
11 aes,11 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,
45 avoid_movs_shop,12 avoid_movs_shop,
46 avoid_partial_cpsr,13 avoid_partial_cpsr,
47 cheap_predicable_cpsr,14 cheap_predicable_cpsr,
...@@ -57,13 +24,13 @@ pub const Feature = enum {...@@ -57,13 +24,13 @@ pub const Feature = enum {
57 execute_only,24 execute_only,
58 expand_fp_mlx,25 expand_fp_mlx,
59 exynos,26 exynos,
27 fp16,
28 fp16fml,
29 fp64,
60 fp_armv8,30 fp_armv8,
61 fp_armv8d16,31 fp_armv8d16,
62 fp_armv8d16sp,32 fp_armv8d16sp,
63 fp_armv8sp,33 fp_armv8sp,
64 fp16,
65 fp16fml,
66 fp64,
67 fpao,34 fpao,
68 fpregs,35 fpregs,
69 fpregs16,36 fpregs16,
...@@ -115,29 +82,46 @@ pub const Feature = enum {...@@ -115,29 +82,46 @@ pub const Feature = enum {
115 splat_vfp_neon,82 splat_vfp_neon,
116 strict_align,83 strict_align,
117 swift,84 swift,
118 thumb_mode,
119 thumb2,85 thumb2,
86 thumb_mode,
120 trustzone,87 trustzone,
121 use_aa,88 use_aa,
122 use_misched,89 use_misched,
90 v2,
91 v2a,
92 v3,
93 v3m,
94 v4,
123 v4t,95 v4t,
124 v5t,96 v5t,
125 v5te,97 v5te,
98 v5tej,
126 v6,99 v6,
100 v6j,
127 v6k,101 v6k,
102 v6kz,
128 v6m,103 v6m,
104 v6sm,
129 v6t2,105 v6t2,
130 v7,106 v7,
107 v7a,
108 v7m,
109 v7r,
131 v7clrex,110 v7clrex,
111 v7em,
112 v7k,
113 v7s,
114 v7ve,
132 v8a,115 v8a,
116 v8m,
117 v8m_main,
118 v8r,
133 v8_1a,119 v8_1a,
134 v8_1m_main,120 v8_1m_main,
135 v8_2a,121 v8_2a,
136 v8_3a,122 v8_3a,
137 v8_4a,123 v8_4a,
138 v8_5a,124 v8_5a,
139 v8m,
140 v8m_main,
141 vfp2,125 vfp2,
142 vfp2d16,126 vfp2d16,
143 vfp2d16sp,127 vfp2d16sp,
...@@ -198,368 +182,6 @@ pub const all_features = blk: {...@@ -198,368 +182,6 @@ pub const all_features = blk: {
198 .neon,182 .neon,
199 }),183 }),
200 };184 };
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 };
563 result[@enumToInt(Feature.avoid_movs_shop)] = .{185 result[@enumToInt(Feature.avoid_movs_shop)] = .{
564 .llvm_name = "avoid-movs-shop",186 .llvm_name = "avoid-movs-shop",
565 .description = "Avoid movs instructions with shifter operand",187 .description = "Avoid movs instructions with shifter operand",
...@@ -659,6 +281,25 @@ pub const all_features = blk: {...@@ -659,6 +281,25 @@ pub const all_features = blk: {
659 .zcz,281 .zcz,
660 }),282 }),
661 };283 };
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 };
662 result[@enumToInt(Feature.fp_armv8)] = .{303 result[@enumToInt(Feature.fp_armv8)] = .{
663 .llvm_name = "fp-armv8",304 .llvm_name = "fp-armv8",
664 .description = "Enable ARMv8 FP",305 .description = "Enable ARMv8 FP",
...@@ -693,25 +334,6 @@ pub const all_features = blk: {...@@ -693,25 +334,6 @@ pub const all_features = blk: {
693 .vfp4sp,334 .vfp4sp,
694 }),335 }),
695 };336 };
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 };
715 result[@enumToInt(Feature.fpao)] = .{337 result[@enumToInt(Feature.fpao)] = .{
716 .llvm_name = "fpao",338 .llvm_name = "fpao",
717 .description = "Enable fast computation of positive address offsets",339 .description = "Enable fast computation of positive address offsets",
...@@ -993,16 +615,16 @@ pub const all_features = blk: {...@@ -993,16 +615,16 @@ pub const all_features = blk: {
993 .description = "Swift ARM processors",615 .description = "Swift ARM processors",
994 .dependencies = featureSet(&[_]Feature{}),616 .dependencies = featureSet(&[_]Feature{}),
995 };617 };
996 result[@enumToInt(Feature.thumb_mode)] = .{
997 .llvm_name = "thumb-mode",
998 .description = "Thumb mode",
999 .dependencies = featureSet(&[_]Feature{}),
1000 };
1001 result[@enumToInt(Feature.thumb2)] = .{618 result[@enumToInt(Feature.thumb2)] = .{
1002 .llvm_name = "thumb2",619 .llvm_name = "thumb2",
1003 .description = "Enable Thumb2 instructions",620 .description = "Enable Thumb2 instructions",
1004 .dependencies = featureSet(&[_]Feature{}),621 .dependencies = featureSet(&[_]Feature{}),
1005 };622 };
623 result[@enumToInt(Feature.thumb_mode)] = .{
624 .llvm_name = "thumb-mode",
625 .description = "Thumb mode",
626 .dependencies = featureSet(&[_]Feature{}),
627 };
1006 result[@enumToInt(Feature.trustzone)] = .{628 result[@enumToInt(Feature.trustzone)] = .{
1007 .llvm_name = "trustzone",629 .llvm_name = "trustzone",
1008 .description = "Enable support for TrustZone security extensions",630 .description = "Enable support for TrustZone security extensions",
...@@ -1018,50 +640,116 @@ pub const all_features = blk: {...@@ -1018,50 +640,116 @@ pub const all_features = blk: {
1018 .description = "Use the MachineScheduler",640 .description = "Use the MachineScheduler",
1019 .dependencies = featureSet(&[_]Feature{}),641 .dependencies = featureSet(&[_]Feature{}),
1020 };642 };
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 };
1021 result[@enumToInt(Feature.v4t)] = .{668 result[@enumToInt(Feature.v4t)] = .{
1022 .llvm_name = "v4t",669 .llvm_name = "armv4t",
1023 .description = "Support ARM v4T instructions",670 .description = "ARMv4t architecture",
1024 .dependencies = featureSet(&[_]Feature{}),671 .dependencies = featureSet(&[_]Feature{}),
1025 };672 };
1026 result[@enumToInt(Feature.v5t)] = .{673 result[@enumToInt(Feature.v5t)] = .{
1027 .llvm_name = "v5t",674 .llvm_name = "armv5t",
1028 .description = "Support ARM v5T instructions",675 .description = "ARMv5t architecture",
1029 .dependencies = featureSet(&[_]Feature{676 .dependencies = featureSet(&[_]Feature{
1030 .v4t,677 .v4t,
1031 }),678 }),
1032 };679 };
1033 result[@enumToInt(Feature.v5te)] = .{680 result[@enumToInt(Feature.v5te)] = .{
1034 .llvm_name = "v5te",681 .llvm_name = "armv5te",
1035 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",682 .description = "ARMv5te architecture",
1036 .dependencies = featureSet(&[_]Feature{683 .dependencies = featureSet(&[_]Feature{
1037 .v5t,684 .v5t,
1038 }),685 }),
1039 };686 };
687 result[@enumToInt(Feature.v5tej)] = .{
688 .llvm_name = "armv5tej",
689 .description = "ARMv5tej architecture",
690 .dependencies = featureSet(&[_]Feature{
691 .v5te,
692 }),
693 };
1040 result[@enumToInt(Feature.v6)] = .{694 result[@enumToInt(Feature.v6)] = .{
1041 .llvm_name = "v6",695 .llvm_name = "armv6",
1042 .description = "Support ARM v6 instructions",696 .description = "ARMv6 architecture",
1043 .dependencies = featureSet(&[_]Feature{697 .dependencies = featureSet(&[_]Feature{
698 .dsp,
1044 .v5te,699 .v5te,
1045 }),700 }),
1046 };701 };
702 result[@enumToInt(Feature.v6j)] = .{
703 .llvm_name = "armv6j",
704 .description = "ARMv7a architecture",
705 .dependencies = featureSet(&[_]Feature{
706 .v6,
707 }),
708 };
1047 result[@enumToInt(Feature.v6k)] = .{709 result[@enumToInt(Feature.v6k)] = .{
1048 .llvm_name = "v6k",710 .llvm_name = "armv6k",
1049 .description = "Support ARM v6k instructions",711 .description = "ARMv6k architecture",
1050 .dependencies = featureSet(&[_]Feature{712 .dependencies = featureSet(&[_]Feature{
1051 .v6,713 .v6,
1052 }),714 }),
1053 };715 };
716 result[@enumToInt(Feature.v6kz)] = .{
717 .llvm_name = "armv6kz",
718 .description = "ARMv6kz architecture",
719 .dependencies = featureSet(&[_]Feature{
720 .trustzone,
721 .v6k,
722 }),
723 };
1054 result[@enumToInt(Feature.v6m)] = .{724 result[@enumToInt(Feature.v6m)] = .{
1055 .llvm_name = "v6m",725 .llvm_name = "armv6-m",
1056 .description = "Support ARM v6M instructions",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",
1057 .dependencies = featureSet(&[_]Feature{739 .dependencies = featureSet(&[_]Feature{
740 .db,
741 .mclass,
742 .noarm,
743 .strict_align,
744 .thumb_mode,
1058 .v6,745 .v6,
1059 }),746 }),
1060 };747 };
1061 result[@enumToInt(Feature.v6t2)] = .{748 result[@enumToInt(Feature.v6t2)] = .{
1062 .llvm_name = "v6t2",749 .llvm_name = "armv6t2",
1063 .description = "Support ARM v6t2 instructions",750 .description = "ARMv6t2 architecture",
1064 .dependencies = featureSet(&[_]Feature{751 .dependencies = featureSet(&[_]Feature{
752 .dsp,
1065 .thumb2,753 .thumb2,
1066 .v6k,754 .v6k,
1067 .v8m,755 .v8m,
...@@ -1076,77 +764,199 @@ pub const all_features = blk: {...@@ -1076,77 +764,199 @@ pub const all_features = blk: {
1076 .v7clrex,764 .v7clrex,
1077 }),765 }),
1078 };766 };
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 };
1079 result[@enumToInt(Feature.v7clrex)] = .{802 result[@enumToInt(Feature.v7clrex)] = .{
1080 .llvm_name = "v7clrex",803 .llvm_name = "v7clrex",
1081 .description = "Has v7 clrex instruction",804 .description = "Has v7 clrex instruction",
1082 .dependencies = featureSet(&[_]Feature{}),805 .dependencies = featureSet(&[_]Feature{}),
1083 };806 };
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 };
1084 result[@enumToInt(Feature.v8a)] = .{849 result[@enumToInt(Feature.v8a)] = .{
1085 .llvm_name = "v8a",850 .llvm_name = "armv8-a",
1086 .description = "Support ARM v8a instructions",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",
1087 .dependencies = featureSet(&[_]Feature{885 .dependencies = featureSet(&[_]Feature{
886 .@"8msecext",
1088 .acquire_release,887 .acquire_release,
888 .db,
889 .hwdiv,
890 .mclass,
891 .noarm,
892 .thumb_mode,
1089 .v7,893 .v7,
1090 }),894 }),
1091 };895 };
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 };
1092 result[@enumToInt(Feature.v8_1a)] = .{905 result[@enumToInt(Feature.v8_1a)] = .{
1093 .llvm_name = "v8.1a",906 .llvm_name = "armv8.1-a",
1094 .description = "Support ARM v8.1a instructions",907 .description = "ARMv81a architecture",
1095 .dependencies = featureSet(&[_]Feature{908 .dependencies = featureSet(&[_]Feature{
1096 .v8a,909 .v8a,
1097 }),910 }),
1098 };911 };
1099 result[@enumToInt(Feature.v8_1m_main)] = .{912 result[@enumToInt(Feature.v8_1m_main)] = .{
1100 .llvm_name = "v8.1m.main",913 .llvm_name = "armv8.1-m.main",
1101 .description = "Support ARM v8-1M Mainline instructions",914 .description = "ARMv81mMainline architecture",
1102 .dependencies = featureSet(&[_]Feature{915 .dependencies = featureSet(&[_]Feature{
916 .@"8msecext",
917 .acquire_release,
918 .db,
919 .hwdiv,
920 .lob,
921 .mclass,
922 .noarm,
923 .ras,
924 .thumb_mode,
1103 .v8m_main,925 .v8m_main,
1104 }),926 }),
1105 };927 };
1106 result[@enumToInt(Feature.v8_2a)] = .{928 result[@enumToInt(Feature.v8_2a)] = .{
1107 .llvm_name = "v8.2a",929 .llvm_name = "armv8.2-a",
1108 .description = "Support ARM v8.2a instructions",930 .description = "ARMv82a architecture",
1109 .dependencies = featureSet(&[_]Feature{931 .dependencies = featureSet(&[_]Feature{
932 .ras,
1110 .v8_1a,933 .v8_1a,
1111 }),934 }),
1112 };935 };
1113 result[@enumToInt(Feature.v8_3a)] = .{936 result[@enumToInt(Feature.v8_3a)] = .{
1114 .llvm_name = "v8.3a",937 .llvm_name = "armv8.3-a",
1115 .description = "Support ARM v8.3a instructions",938 .description = "ARMv83a architecture",
1116 .dependencies = featureSet(&[_]Feature{939 .dependencies = featureSet(&[_]Feature{
1117 .v8_2a,940 .v8_2a,
1118 }),941 }),
1119 };942 };
1120 result[@enumToInt(Feature.v8_4a)] = .{943 result[@enumToInt(Feature.v8_4a)] = .{
1121 .llvm_name = "v8.4a",944 .llvm_name = "armv8.4-a",
1122 .description = "Support ARM v8.4a instructions",945 .description = "ARMv84a architecture",
1123 .dependencies = featureSet(&[_]Feature{946 .dependencies = featureSet(&[_]Feature{
1124 .dotprod,947 .dotprod,
1125 .v8_3a,948 .v8_3a,
1126 }),949 }),
1127 };950 };
1128 result[@enumToInt(Feature.v8_5a)] = .{951 result[@enumToInt(Feature.v8_5a)] = .{
1129 .llvm_name = "v8.5a",952 .llvm_name = "armv8.5-a",
1130 .description = "Support ARM v8.5a instructions",953 .description = "ARMv85a architecture",
1131 .dependencies = featureSet(&[_]Feature{954 .dependencies = featureSet(&[_]Feature{
955 .dotprod,
1132 .sb,956 .sb,
1133 .v8_4a,957 .v8_4a,
1134 }),958 }),
1135 };959 };
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 };
1150 result[@enumToInt(Feature.vfp2)] = .{960 result[@enumToInt(Feature.vfp2)] = .{
1151 .llvm_name = "vfp2",961 .llvm_name = "vfp2",
1152 .description = "Enable VFP2 instructions",962 .description = "Enable VFP2 instructions",