authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 22:21:45-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 22:21:45-05:00
log6e88883edf8400b835f5d792b8aba54c8d4490f2
tree92260e9312bf86992782ee8cc5d8c7e24d9589d3
parentf3dd9bbdaca5ba3735feb405a890a4646905533a
signaturelock-open Commit is signed but in an unrecognized format.

import data from llvm 9


15 files changed, 11925 insertions(+), 14704 deletions(-)

lib/std/target/aarch64.zig+800-592
......@@ -2,21 +2,23 @@ const std = @import("../std.zig");
22const Cpu = std.Target.Cpu;
33
44pub const Feature = enum {
5 a35,
6 a53,
7 a55,
8 a57,
9 a72,
10 a73,
11 a75,
12 a76,
513 aes,
6 am,
714 aggressive_fma,
8 altnzcv,
915 alternate_sextload_cvt_f32_pattern,
16 altnzcv,
17 am,
1018 arith_bcc_fusion,
1119 arith_cbz_fusion,
1220 balance_fp_ops,
1321 bti,
14 ccidx,
15 ccpp,
16 crc,
17 ccdp,
18 call_saved_x8,
19 call_saved_x9,
2022 call_saved_x10,
2123 call_saved_x11,
2224 call_saved_x12,
......@@ -24,56 +26,60 @@ pub const Feature = enum {
2426 call_saved_x14,
2527 call_saved_x15,
2628 call_saved_x18,
29 call_saved_x8,
30 call_saved_x9,
31 ccdp,
32 ccidx,
33 ccpp,
2734 complxnum,
35 crc,
2836 crypto,
2937 custom_cheap_as_move,
30 dit,
38 cyclone,
3139 disable_latency_sched_heuristic,
40 dit,
3241 dotprod,
3342 exynos_cheap_as_move,
43 exynosm1,
44 exynosm2,
45 exynosm3,
46 exynosm4,
47 falkor,
3448 fmi,
35 fp16fml,
49 force_32bit_jump_tables,
3650 fp_armv8,
51 fp16fml,
3752 fptoint,
38 force_32bit_jump_tables,
3953 fullfp16,
40 fuse_aes,
4154 fuse_address,
55 fuse_aes,
4256 fuse_arith_logic,
43 fuse_csel,
4457 fuse_crypto_eor,
58 fuse_csel,
4559 fuse_literals,
4660 jsconv,
61 kryo,
4762 lor,
4863 lse,
4964 lsl_fast,
5065 mpam,
5166 mte,
5267 neon,
53 nv,
5468 no_neg_immediates,
69 nv,
5570 pa,
5671 pan,
5772 pan_rwv,
5873 perfmon,
59 use_postra_scheduler,
60 predres,
6174 predictable_select_expensive,
62 uaops,
75 predres,
76 rand,
6377 ras,
6478 rasv8_4,
6579 rcpc,
6680 rcpc_immo,
6781 rdm,
68 rand,
6982 reserve_x1,
70 reserve_x2,
71 reserve_x3,
72 reserve_x4,
73 reserve_x5,
74 reserve_x6,
75 reserve_x7,
76 reserve_x9,
7783 reserve_x10,
7884 reserve_x11,
7985 reserve_x12,
......@@ -81,6 +87,7 @@ pub const Feature = enum {
8187 reserve_x14,
8288 reserve_x15,
8389 reserve_x18,
90 reserve_x2,
8491 reserve_x20,
8592 reserve_x21,
8693 reserve_x22,
......@@ -90,31 +97,51 @@ pub const Feature = enum {
9097 reserve_x26,
9198 reserve_x27,
9299 reserve_x28,
100 reserve_x3,
101 reserve_x4,
102 reserve_x5,
103 reserve_x6,
104 reserve_x7,
105 reserve_x9,
106 saphira,
93107 sb,
94108 sel2,
95109 sha2,
96110 sha3,
111 slow_misaligned_128store,
112 slow_paired_128,
113 slow_strqro_store,
97114 sm4,
98115 spe,
116 specrestrict,
99117 ssbs,
118 strict_align,
100119 sve,
101120 sve2,
102121 sve2_aes,
103122 sve2_bitperm,
104123 sve2_sha3,
105124 sve2_sm4,
106 slow_misaligned_128store,
107 slow_paired_128,
108 slow_strqro_store,
109 specrestrict,
110 strict_align,
125 thunderx,
126 thunderx2t99,
127 thunderxt81,
128 thunderxt83,
129 thunderxt88,
111130 tlb_rmi,
112 tracev84,
113 use_aa,
114131 tpidr_el1,
115132 tpidr_el2,
116133 tpidr_el3,
134 tracev8_4,
135 tsv110,
136 uaops,
137 use_aa,
138 use_postra_scheduler,
117139 use_reciprocal_square_root,
140 v8_1a,
141 v8_2a,
142 v8_3a,
143 v8_4a,
144 v8_5a,
118145 vh,
119146 zcm,
120147 zcz,
......@@ -129,22 +156,143 @@ pub const all_features = blk: {
129156 const len = @typeInfo(Feature).Enum.fields.len;
130157 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
131158 var result: [len]Cpu.Feature = undefined;
159 result[@enumToInt(Feature.a35)] = .{
160 .index = @enumToInt(Feature.a35),
161 .name = @tagName(Feature.a35),
162 .llvm_name = "a35",
163 .description = "Cortex-A35 ARM processors",
164 .dependencies = featureSet(&[_]Feature{
165 .crc,
166 .crypto,
167 .fp_armv8,
168 .neon,
169 .perfmon,
170 }),
171 };
172 result[@enumToInt(Feature.a53)] = .{
173 .index = @enumToInt(Feature.a53),
174 .name = @tagName(Feature.a53),
175 .llvm_name = "a53",
176 .description = "Cortex-A53 ARM processors",
177 .dependencies = featureSet(&[_]Feature{
178 .balance_fp_ops,
179 .crc,
180 .crypto,
181 .custom_cheap_as_move,
182 .fp_armv8,
183 .fuse_aes,
184 .neon,
185 .perfmon,
186 .use_aa,
187 .use_postra_scheduler,
188 }),
189 };
190 result[@enumToInt(Feature.a55)] = .{
191 .index = @enumToInt(Feature.a55),
192 .name = @tagName(Feature.a55),
193 .llvm_name = "a55",
194 .description = "Cortex-A55 ARM processors",
195 .dependencies = featureSet(&[_]Feature{
196 .crypto,
197 .dotprod,
198 .fp_armv8,
199 .fullfp16,
200 .fuse_aes,
201 .neon,
202 .perfmon,
203 .rcpc,
204 .v8_2a,
205 }),
206 };
207 result[@enumToInt(Feature.a57)] = .{
208 .index = @enumToInt(Feature.a57),
209 .name = @tagName(Feature.a57),
210 .llvm_name = "a57",
211 .description = "Cortex-A57 ARM processors",
212 .dependencies = featureSet(&[_]Feature{
213 .balance_fp_ops,
214 .crc,
215 .crypto,
216 .custom_cheap_as_move,
217 .fp_armv8,
218 .fuse_aes,
219 .fuse_literals,
220 .neon,
221 .perfmon,
222 .predictable_select_expensive,
223 .use_postra_scheduler,
224 }),
225 };
226 result[@enumToInt(Feature.a72)] = .{
227 .index = @enumToInt(Feature.a72),
228 .name = @tagName(Feature.a72),
229 .llvm_name = "a72",
230 .description = "Cortex-A72 ARM processors",
231 .dependencies = featureSet(&[_]Feature{
232 .crc,
233 .crypto,
234 .fp_armv8,
235 .fuse_aes,
236 .neon,
237 .perfmon,
238 }),
239 };
240 result[@enumToInt(Feature.a73)] = .{
241 .index = @enumToInt(Feature.a73),
242 .name = @tagName(Feature.a73),
243 .llvm_name = "a73",
244 .description = "Cortex-A73 ARM processors",
245 .dependencies = featureSet(&[_]Feature{
246 .crc,
247 .crypto,
248 .fp_armv8,
249 .fuse_aes,
250 .neon,
251 .perfmon,
252 }),
253 };
254 result[@enumToInt(Feature.a75)] = .{
255 .index = @enumToInt(Feature.a75),
256 .name = @tagName(Feature.a75),
257 .llvm_name = "a75",
258 .description = "Cortex-A75 ARM processors",
259 .dependencies = featureSet(&[_]Feature{
260 .crypto,
261 .dotprod,
262 .fp_armv8,
263 .fullfp16,
264 .fuse_aes,
265 .neon,
266 .perfmon,
267 .rcpc,
268 .v8_2a,
269 }),
270 };
271 result[@enumToInt(Feature.a76)] = .{
272 .index = @enumToInt(Feature.a76),
273 .name = @tagName(Feature.a76),
274 .llvm_name = "a76",
275 .description = "Cortex-A76 ARM processors",
276 .dependencies = featureSet(&[_]Feature{
277 .crypto,
278 .dotprod,
279 .fp_armv8,
280 .fullfp16,
281 .neon,
282 .rcpc,
283 .ssbs,
284 .v8_2a,
285 }),
286 };
132287 result[@enumToInt(Feature.aes)] = .{
133288 .index = @enumToInt(Feature.aes),
134289 .name = @tagName(Feature.aes),
135290 .llvm_name = "aes",
136291 .description = "Enable AES support",
137292 .dependencies = featureSet(&[_]Feature{
138 .fp_armv8,
293 .neon,
139294 }),
140295 };
141 result[@enumToInt(Feature.am)] = .{
142 .index = @enumToInt(Feature.am),
143 .name = @tagName(Feature.am),
144 .llvm_name = "am",
145 .description = "Enable v8.4-A Activity Monitors extension",
146 .dependencies = 0,
147 };
148296 result[@enumToInt(Feature.aggressive_fma)] = .{
149297 .index = @enumToInt(Feature.aggressive_fma),
150298 .name = @tagName(Feature.aggressive_fma),
......@@ -152,6 +300,13 @@ pub const all_features = blk: {
152300 .description = "Enable Aggressive FMA for floating-point.",
153301 .dependencies = 0,
154302 };
303 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
304 .index = @enumToInt(Feature.alternate_sextload_cvt_f32_pattern),
305 .name = @tagName(Feature.alternate_sextload_cvt_f32_pattern),
306 .llvm_name = "alternate-sextload-cvt-f32-pattern",
307 .description = "Use alternative pattern for sextload convert to f32",
308 .dependencies = 0,
309 };
155310 result[@enumToInt(Feature.altnzcv)] = .{
156311 .index = @enumToInt(Feature.altnzcv),
157312 .name = @tagName(Feature.altnzcv),
......@@ -159,11 +314,11 @@ pub const all_features = blk: {
159314 .description = "Enable alternative NZCV format for floating point comparisons",
160315 .dependencies = 0,
161316 };
162 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
163 .index = @enumToInt(Feature.alternate_sextload_cvt_f32_pattern),
164 .name = @tagName(Feature.alternate_sextload_cvt_f32_pattern),
165 .llvm_name = "alternate-sextload-cvt-f32-pattern",
166 .description = "Use alternative pattern for sextload convert to f32",
317 result[@enumToInt(Feature.am)] = .{
318 .index = @enumToInt(Feature.am),
319 .name = @tagName(Feature.am),
320 .llvm_name = "am",
321 .description = "Enable v8.4-A Activity Monitors extension",
167322 .dependencies = 0,
168323 };
169324 result[@enumToInt(Feature.arith_bcc_fusion)] = .{
......@@ -194,48 +349,6 @@ pub const all_features = blk: {
194349 .description = "Enable Branch Target Identification",
195350 .dependencies = 0,
196351 };
197 result[@enumToInt(Feature.ccidx)] = .{
198 .index = @enumToInt(Feature.ccidx),
199 .name = @tagName(Feature.ccidx),
200 .llvm_name = "ccidx",
201 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
202 .dependencies = 0,
203 };
204 result[@enumToInt(Feature.ccpp)] = .{
205 .index = @enumToInt(Feature.ccpp),
206 .name = @tagName(Feature.ccpp),
207 .llvm_name = "ccpp",
208 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
209 .dependencies = 0,
210 };
211 result[@enumToInt(Feature.crc)] = .{
212 .index = @enumToInt(Feature.crc),
213 .name = @tagName(Feature.crc),
214 .llvm_name = "crc",
215 .description = "Enable ARMv8 CRC-32 checksum instructions",
216 .dependencies = 0,
217 };
218 result[@enumToInt(Feature.ccdp)] = .{
219 .index = @enumToInt(Feature.ccdp),
220 .name = @tagName(Feature.ccdp),
221 .llvm_name = "ccdp",
222 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
223 .dependencies = 0,
224 };
225 result[@enumToInt(Feature.call_saved_x8)] = .{
226 .index = @enumToInt(Feature.call_saved_x8),
227 .name = @tagName(Feature.call_saved_x8),
228 .llvm_name = "call-saved-x8",
229 .description = "Make X8 callee saved.",
230 .dependencies = 0,
231 };
232 result[@enumToInt(Feature.call_saved_x9)] = .{
233 .index = @enumToInt(Feature.call_saved_x9),
234 .name = @tagName(Feature.call_saved_x9),
235 .llvm_name = "call-saved-x9",
236 .description = "Make X9 callee saved.",
237 .dependencies = 0,
238 };
239352 result[@enumToInt(Feature.call_saved_x10)] = .{
240353 .index = @enumToInt(Feature.call_saved_x10),
241354 .name = @tagName(Feature.call_saved_x10),
......@@ -285,22 +398,66 @@ pub const all_features = blk: {
285398 .description = "Make X18 callee saved.",
286399 .dependencies = 0,
287400 };
401 result[@enumToInt(Feature.call_saved_x8)] = .{
402 .index = @enumToInt(Feature.call_saved_x8),
403 .name = @tagName(Feature.call_saved_x8),
404 .llvm_name = "call-saved-x8",
405 .description = "Make X8 callee saved.",
406 .dependencies = 0,
407 };
408 result[@enumToInt(Feature.call_saved_x9)] = .{
409 .index = @enumToInt(Feature.call_saved_x9),
410 .name = @tagName(Feature.call_saved_x9),
411 .llvm_name = "call-saved-x9",
412 .description = "Make X9 callee saved.",
413 .dependencies = 0,
414 };
415 result[@enumToInt(Feature.ccdp)] = .{
416 .index = @enumToInt(Feature.ccdp),
417 .name = @tagName(Feature.ccdp),
418 .llvm_name = "ccdp",
419 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
420 .dependencies = 0,
421 };
422 result[@enumToInt(Feature.ccidx)] = .{
423 .index = @enumToInt(Feature.ccidx),
424 .name = @tagName(Feature.ccidx),
425 .llvm_name = "ccidx",
426 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
427 .dependencies = 0,
428 };
429 result[@enumToInt(Feature.ccpp)] = .{
430 .index = @enumToInt(Feature.ccpp),
431 .name = @tagName(Feature.ccpp),
432 .llvm_name = "ccpp",
433 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
434 .dependencies = 0,
435 };
288436 result[@enumToInt(Feature.complxnum)] = .{
289437 .index = @enumToInt(Feature.complxnum),
290438 .name = @tagName(Feature.complxnum),
291439 .llvm_name = "complxnum",
292440 .description = "Enable v8.3-A Floating-point complex number support",
293441 .dependencies = featureSet(&[_]Feature{
294 .fp_armv8,
442 .neon,
295443 }),
296444 };
445 result[@enumToInt(Feature.crc)] = .{
446 .index = @enumToInt(Feature.crc),
447 .name = @tagName(Feature.crc),
448 .llvm_name = "crc",
449 .description = "Enable ARMv8 CRC-32 checksum instructions",
450 .dependencies = 0,
451 };
297452 result[@enumToInt(Feature.crypto)] = .{
298453 .index = @enumToInt(Feature.crypto),
299454 .name = @tagName(Feature.crypto),
300455 .llvm_name = "crypto",
301456 .description = "Enable cryptographic instructions",
302457 .dependencies = featureSet(&[_]Feature{
303 .fp_armv8,
458 .aes,
459 .neon,
460 .sha2,
304461 }),
305462 };
306463 result[@enumToInt(Feature.custom_cheap_as_move)] = .{
......@@ -310,12 +467,26 @@ pub const all_features = blk: {
310467 .description = "Use custom handling of cheap instructions",
311468 .dependencies = 0,
312469 };
313 result[@enumToInt(Feature.dit)] = .{
314 .index = @enumToInt(Feature.dit),
315 .name = @tagName(Feature.dit),
316 .llvm_name = "dit",
317 .description = "Enable v8.4-A Data Independent Timing instructions",
318 .dependencies = 0,
470 result[@enumToInt(Feature.cyclone)] = .{
471 .index = @enumToInt(Feature.cyclone),
472 .name = @tagName(Feature.cyclone),
473 .llvm_name = "cyclone",
474 .description = "Cyclone",
475 .dependencies = featureSet(&[_]Feature{
476 .alternate_sextload_cvt_f32_pattern,
477 .arith_bcc_fusion,
478 .arith_cbz_fusion,
479 .crypto,
480 .disable_latency_sched_heuristic,
481 .fp_armv8,
482 .fuse_aes,
483 .fuse_crypto_eor,
484 .neon,
485 .perfmon,
486 .zcm,
487 .zcz,
488 .zcz_fp_workaround,
489 }),
319490 };
320491 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
321492 .index = @enumToInt(Feature.disable_latency_sched_heuristic),
......@@ -324,6 +495,13 @@ pub const all_features = blk: {
324495 .description = "Disable latency scheduling heuristic",
325496 .dependencies = 0,
326497 };
498 result[@enumToInt(Feature.dit)] = .{
499 .index = @enumToInt(Feature.dit),
500 .name = @tagName(Feature.dit),
501 .llvm_name = "dit",
502 .description = "Enable v8.4-A Data Independent Timing instructions",
503 .dependencies = 0,
504 };
327505 result[@enumToInt(Feature.dotprod)] = .{
328506 .index = @enumToInt(Feature.dotprod),
329507 .name = @tagName(Feature.dotprod),
......@@ -340,6 +518,109 @@ pub const all_features = blk: {
340518 .custom_cheap_as_move,
341519 }),
342520 };
521 result[@enumToInt(Feature.exynosm1)] = .{
522 .index = @enumToInt(Feature.exynosm1),
523 .name = @tagName(Feature.exynosm1),
524 .llvm_name = "exynosm1",
525 .description = "Samsung Exynos-M1 processors",
526 .dependencies = featureSet(&[_]Feature{
527 .crc,
528 .crypto,
529 .exynos_cheap_as_move,
530 .force_32bit_jump_tables,
531 .fuse_aes,
532 .perfmon,
533 .slow_misaligned_128store,
534 .slow_paired_128,
535 .use_postra_scheduler,
536 .use_reciprocal_square_root,
537 .zcz_fp,
538 }),
539 };
540 result[@enumToInt(Feature.exynosm2)] = .{
541 .index = @enumToInt(Feature.exynosm2),
542 .name = @tagName(Feature.exynosm2),
543 .llvm_name = "exynosm2",
544 .description = "Samsung Exynos-M2 processors",
545 .dependencies = featureSet(&[_]Feature{
546 .crc,
547 .crypto,
548 .exynos_cheap_as_move,
549 .force_32bit_jump_tables,
550 .fuse_aes,
551 .perfmon,
552 .slow_misaligned_128store,
553 .slow_paired_128,
554 .use_postra_scheduler,
555 .zcz_fp,
556 }),
557 };
558 result[@enumToInt(Feature.exynosm3)] = .{
559 .index = @enumToInt(Feature.exynosm3),
560 .name = @tagName(Feature.exynosm3),
561 .llvm_name = "exynosm3",
562 .description = "Samsung Exynos-M3 processors",
563 .dependencies = featureSet(&[_]Feature{
564 .crc,
565 .crypto,
566 .exynos_cheap_as_move,
567 .force_32bit_jump_tables,
568 .fuse_address,
569 .fuse_aes,
570 .fuse_csel,
571 .fuse_literals,
572 .lsl_fast,
573 .perfmon,
574 .predictable_select_expensive,
575 .use_postra_scheduler,
576 .zcz_fp,
577 }),
578 };
579 result[@enumToInt(Feature.exynosm4)] = .{
580 .index = @enumToInt(Feature.exynosm4),
581 .name = @tagName(Feature.exynosm4),
582 .llvm_name = "exynosm4",
583 .description = "Samsung Exynos-M4 processors",
584 .dependencies = featureSet(&[_]Feature{
585 .arith_bcc_fusion,
586 .arith_cbz_fusion,
587 .crypto,
588 .dotprod,
589 .exynos_cheap_as_move,
590 .force_32bit_jump_tables,
591 .fullfp16,
592 .fuse_address,
593 .fuse_aes,
594 .fuse_arith_logic,
595 .fuse_csel,
596 .fuse_literals,
597 .lsl_fast,
598 .perfmon,
599 .use_postra_scheduler,
600 .v8_2a,
601 .zcz,
602 }),
603 };
604 result[@enumToInt(Feature.falkor)] = .{
605 .index = @enumToInt(Feature.falkor),
606 .name = @tagName(Feature.falkor),
607 .llvm_name = "falkor",
608 .description = "Qualcomm Falkor processors",
609 .dependencies = featureSet(&[_]Feature{
610 .crc,
611 .crypto,
612 .custom_cheap_as_move,
613 .fp_armv8,
614 .lsl_fast,
615 .neon,
616 .perfmon,
617 .predictable_select_expensive,
618 .rdm,
619 .slow_strqro_store,
620 .use_postra_scheduler,
621 .zcz,
622 }),
623 };
343624 result[@enumToInt(Feature.fmi)] = .{
344625 .index = @enumToInt(Feature.fmi),
345626 .name = @tagName(Feature.fmi),
......@@ -347,14 +628,12 @@ pub const all_features = blk: {
347628 .description = "Enable v8.4-A Flag Manipulation Instructions",
348629 .dependencies = 0,
349630 };
350 result[@enumToInt(Feature.fp16fml)] = .{
351 .index = @enumToInt(Feature.fp16fml),
352 .name = @tagName(Feature.fp16fml),
353 .llvm_name = "fp16fml",
354 .description = "Enable FP16 FML instructions",
355 .dependencies = featureSet(&[_]Feature{
356 .fp_armv8,
357 }),
631 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
632 .index = @enumToInt(Feature.force_32bit_jump_tables),
633 .name = @tagName(Feature.force_32bit_jump_tables),
634 .llvm_name = "force-32bit-jump-tables",
635 .description = "Force jump table entries to be 32-bits wide except at MinSize",
636 .dependencies = 0,
358637 };
359638 result[@enumToInt(Feature.fp_armv8)] = .{
360639 .index = @enumToInt(Feature.fp_armv8),
......@@ -363,6 +642,15 @@ pub const all_features = blk: {
363642 .description = "Enable ARMv8 FP",
364643 .dependencies = 0,
365644 };
645 result[@enumToInt(Feature.fp16fml)] = .{
646 .index = @enumToInt(Feature.fp16fml),
647 .name = @tagName(Feature.fp16fml),
648 .llvm_name = "fp16fml",
649 .description = "Enable FP16 FML instructions",
650 .dependencies = featureSet(&[_]Feature{
651 .fullfp16,
652 }),
653 };
366654 result[@enumToInt(Feature.fptoint)] = .{
367655 .index = @enumToInt(Feature.fptoint),
368656 .name = @tagName(Feature.fptoint),
......@@ -370,13 +658,6 @@ pub const all_features = blk: {
370658 .description = "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int",
371659 .dependencies = 0,
372660 };
373 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
374 .index = @enumToInt(Feature.force_32bit_jump_tables),
375 .name = @tagName(Feature.force_32bit_jump_tables),
376 .llvm_name = "force-32bit-jump-tables",
377 .description = "Force jump table entries to be 32-bits wide except at MinSize",
378 .dependencies = 0,
379 };
380661 result[@enumToInt(Feature.fullfp16)] = .{
381662 .index = @enumToInt(Feature.fullfp16),
382663 .name = @tagName(Feature.fullfp16),
......@@ -386,13 +667,6 @@ pub const all_features = blk: {
386667 .fp_armv8,
387668 }),
388669 };
389 result[@enumToInt(Feature.fuse_aes)] = .{
390 .index = @enumToInt(Feature.fuse_aes),
391 .name = @tagName(Feature.fuse_aes),
392 .llvm_name = "fuse-aes",
393 .description = "CPU fuses AES crypto operations",
394 .dependencies = 0,
395 };
396670 result[@enumToInt(Feature.fuse_address)] = .{
397671 .index = @enumToInt(Feature.fuse_address),
398672 .name = @tagName(Feature.fuse_address),
......@@ -400,6 +674,13 @@ pub const all_features = blk: {
400674 .description = "CPU fuses address generation and memory operations",
401675 .dependencies = 0,
402676 };
677 result[@enumToInt(Feature.fuse_aes)] = .{
678 .index = @enumToInt(Feature.fuse_aes),
679 .name = @tagName(Feature.fuse_aes),
680 .llvm_name = "fuse-aes",
681 .description = "CPU fuses AES crypto operations",
682 .dependencies = 0,
683 };
403684 result[@enumToInt(Feature.fuse_arith_logic)] = .{
404685 .index = @enumToInt(Feature.fuse_arith_logic),
405686 .name = @tagName(Feature.fuse_arith_logic),
......@@ -407,13 +688,6 @@ pub const all_features = blk: {
407688 .description = "CPU fuses arithmetic and logic operations",
408689 .dependencies = 0,
409690 };
410 result[@enumToInt(Feature.fuse_csel)] = .{
411 .index = @enumToInt(Feature.fuse_csel),
412 .name = @tagName(Feature.fuse_csel),
413 .llvm_name = "fuse-csel",
414 .description = "CPU fuses conditional select operations",
415 .dependencies = 0,
416 };
417691 result[@enumToInt(Feature.fuse_crypto_eor)] = .{
418692 .index = @enumToInt(Feature.fuse_crypto_eor),
419693 .name = @tagName(Feature.fuse_crypto_eor),
......@@ -421,6 +695,13 @@ pub const all_features = blk: {
421695 .description = "CPU fuses AES/PMULL and EOR operations",
422696 .dependencies = 0,
423697 };
698 result[@enumToInt(Feature.fuse_csel)] = .{
699 .index = @enumToInt(Feature.fuse_csel),
700 .name = @tagName(Feature.fuse_csel),
701 .llvm_name = "fuse-csel",
702 .description = "CPU fuses conditional select operations",
703 .dependencies = 0,
704 };
424705 result[@enumToInt(Feature.fuse_literals)] = .{
425706 .index = @enumToInt(Feature.fuse_literals),
426707 .name = @tagName(Feature.fuse_literals),
......@@ -437,6 +718,24 @@ pub const all_features = blk: {
437718 .fp_armv8,
438719 }),
439720 };
721 result[@enumToInt(Feature.kryo)] = .{
722 .index = @enumToInt(Feature.kryo),
723 .name = @tagName(Feature.kryo),
724 .llvm_name = "kryo",
725 .description = "Qualcomm Kryo processors",
726 .dependencies = featureSet(&[_]Feature{
727 .crc,
728 .crypto,
729 .custom_cheap_as_move,
730 .fp_armv8,
731 .lsl_fast,
732 .neon,
733 .perfmon,
734 .predictable_select_expensive,
735 .use_postra_scheduler,
736 .zcz,
737 }),
738 };
440739 result[@enumToInt(Feature.lor)] = .{
441740 .index = @enumToInt(Feature.lor),
442741 .name = @tagName(Feature.lor),
......@@ -481,13 +780,6 @@ pub const all_features = blk: {
481780 .fp_armv8,
482781 }),
483782 };
484 result[@enumToInt(Feature.nv)] = .{
485 .index = @enumToInt(Feature.nv),
486 .name = @tagName(Feature.nv),
487 .llvm_name = "nv",
488 .description = "Enable v8.4-A Nested Virtualization Enchancement",
489 .dependencies = 0,
490 };
491783 result[@enumToInt(Feature.no_neg_immediates)] = .{
492784 .index = @enumToInt(Feature.no_neg_immediates),
493785 .name = @tagName(Feature.no_neg_immediates),
......@@ -495,6 +787,13 @@ pub const all_features = blk: {
495787 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
496788 .dependencies = 0,
497789 };
790 result[@enumToInt(Feature.nv)] = .{
791 .index = @enumToInt(Feature.nv),
792 .name = @tagName(Feature.nv),
793 .llvm_name = "nv",
794 .description = "Enable v8.4-A Nested Virtualization Enchancement",
795 .dependencies = 0,
796 };
498797 result[@enumToInt(Feature.pa)] = .{
499798 .index = @enumToInt(Feature.pa),
500799 .name = @tagName(Feature.pa),
......@@ -525,11 +824,11 @@ pub const all_features = blk: {
525824 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",
526825 .dependencies = 0,
527826 };
528 result[@enumToInt(Feature.use_postra_scheduler)] = .{
529 .index = @enumToInt(Feature.use_postra_scheduler),
530 .name = @tagName(Feature.use_postra_scheduler),
531 .llvm_name = "use-postra-scheduler",
532 .description = "Schedule again after register allocation",
827 result[@enumToInt(Feature.predictable_select_expensive)] = .{
828 .index = @enumToInt(Feature.predictable_select_expensive),
829 .name = @tagName(Feature.predictable_select_expensive),
830 .llvm_name = "predictable-select-expensive",
831 .description = "Prefer likely predicted branches over selects",
533832 .dependencies = 0,
534833 };
535834 result[@enumToInt(Feature.predres)] = .{
......@@ -539,18 +838,11 @@ pub const all_features = blk: {
539838 .description = "Enable v8.5a execution and data prediction invalidation instructions",
540839 .dependencies = 0,
541840 };
542 result[@enumToInt(Feature.predictable_select_expensive)] = .{
543 .index = @enumToInt(Feature.predictable_select_expensive),
544 .name = @tagName(Feature.predictable_select_expensive),
545 .llvm_name = "predictable-select-expensive",
546 .description = "Prefer likely predicted branches over selects",
547 .dependencies = 0,
548 };
549 result[@enumToInt(Feature.uaops)] = .{
550 .index = @enumToInt(Feature.uaops),
551 .name = @tagName(Feature.uaops),
552 .llvm_name = "uaops",
553 .description = "Enable v8.2 UAO PState",
841 result[@enumToInt(Feature.rand)] = .{
842 .index = @enumToInt(Feature.rand),
843 .name = @tagName(Feature.rand),
844 .llvm_name = "rand",
845 .description = "Enable Random Number generation instructions",
554846 .dependencies = 0,
555847 };
556848 result[@enumToInt(Feature.ras)] = .{
......@@ -592,13 +884,6 @@ pub const all_features = blk: {
592884 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",
593885 .dependencies = 0,
594886 };
595 result[@enumToInt(Feature.rand)] = .{
596 .index = @enumToInt(Feature.rand),
597 .name = @tagName(Feature.rand),
598 .llvm_name = "rand",
599 .description = "Enable Random Number generation instructions",
600 .dependencies = 0,
601 };
602887 result[@enumToInt(Feature.reserve_x1)] = .{
603888 .index = @enumToInt(Feature.reserve_x1),
604889 .name = @tagName(Feature.reserve_x1),
......@@ -606,55 +891,6 @@ pub const all_features = blk: {
606891 .description = "Reserve X1, making it unavailable as a GPR",
607892 .dependencies = 0,
608893 };
609 result[@enumToInt(Feature.reserve_x2)] = .{
610 .index = @enumToInt(Feature.reserve_x2),
611 .name = @tagName(Feature.reserve_x2),
612 .llvm_name = "reserve-x2",
613 .description = "Reserve X2, making it unavailable as a GPR",
614 .dependencies = 0,
615 };
616 result[@enumToInt(Feature.reserve_x3)] = .{
617 .index = @enumToInt(Feature.reserve_x3),
618 .name = @tagName(Feature.reserve_x3),
619 .llvm_name = "reserve-x3",
620 .description = "Reserve X3, making it unavailable as a GPR",
621 .dependencies = 0,
622 };
623 result[@enumToInt(Feature.reserve_x4)] = .{
624 .index = @enumToInt(Feature.reserve_x4),
625 .name = @tagName(Feature.reserve_x4),
626 .llvm_name = "reserve-x4",
627 .description = "Reserve X4, making it unavailable as a GPR",
628 .dependencies = 0,
629 };
630 result[@enumToInt(Feature.reserve_x5)] = .{
631 .index = @enumToInt(Feature.reserve_x5),
632 .name = @tagName(Feature.reserve_x5),
633 .llvm_name = "reserve-x5",
634 .description = "Reserve X5, making it unavailable as a GPR",
635 .dependencies = 0,
636 };
637 result[@enumToInt(Feature.reserve_x6)] = .{
638 .index = @enumToInt(Feature.reserve_x6),
639 .name = @tagName(Feature.reserve_x6),
640 .llvm_name = "reserve-x6",
641 .description = "Reserve X6, making it unavailable as a GPR",
642 .dependencies = 0,
643 };
644 result[@enumToInt(Feature.reserve_x7)] = .{
645 .index = @enumToInt(Feature.reserve_x7),
646 .name = @tagName(Feature.reserve_x7),
647 .llvm_name = "reserve-x7",
648 .description = "Reserve X7, making it unavailable as a GPR",
649 .dependencies = 0,
650 };
651 result[@enumToInt(Feature.reserve_x9)] = .{
652 .index = @enumToInt(Feature.reserve_x9),
653 .name = @tagName(Feature.reserve_x9),
654 .llvm_name = "reserve-x9",
655 .description = "Reserve X9, making it unavailable as a GPR",
656 .dependencies = 0,
657 };
658894 result[@enumToInt(Feature.reserve_x10)] = .{
659895 .index = @enumToInt(Feature.reserve_x10),
660896 .name = @tagName(Feature.reserve_x10),
......@@ -704,9 +940,16 @@ pub const all_features = blk: {
704940 .description = "Reserve X18, making it unavailable as a GPR",
705941 .dependencies = 0,
706942 };
707 result[@enumToInt(Feature.reserve_x20)] = .{
708 .index = @enumToInt(Feature.reserve_x20),
709 .name = @tagName(Feature.reserve_x20),
943 result[@enumToInt(Feature.reserve_x2)] = .{
944 .index = @enumToInt(Feature.reserve_x2),
945 .name = @tagName(Feature.reserve_x2),
946 .llvm_name = "reserve-x2",
947 .description = "Reserve X2, making it unavailable as a GPR",
948 .dependencies = 0,
949 };
950 result[@enumToInt(Feature.reserve_x20)] = .{
951 .index = @enumToInt(Feature.reserve_x20),
952 .name = @tagName(Feature.reserve_x20),
710953 .llvm_name = "reserve-x20",
711954 .description = "Reserve X20, making it unavailable as a GPR",
712955 .dependencies = 0,
......@@ -767,6 +1010,67 @@ pub const all_features = blk: {
7671010 .description = "Reserve X28, making it unavailable as a GPR",
7681011 .dependencies = 0,
7691012 };
1013 result[@enumToInt(Feature.reserve_x3)] = .{
1014 .index = @enumToInt(Feature.reserve_x3),
1015 .name = @tagName(Feature.reserve_x3),
1016 .llvm_name = "reserve-x3",
1017 .description = "Reserve X3, making it unavailable as a GPR",
1018 .dependencies = 0,
1019 };
1020 result[@enumToInt(Feature.reserve_x4)] = .{
1021 .index = @enumToInt(Feature.reserve_x4),
1022 .name = @tagName(Feature.reserve_x4),
1023 .llvm_name = "reserve-x4",
1024 .description = "Reserve X4, making it unavailable as a GPR",
1025 .dependencies = 0,
1026 };
1027 result[@enumToInt(Feature.reserve_x5)] = .{
1028 .index = @enumToInt(Feature.reserve_x5),
1029 .name = @tagName(Feature.reserve_x5),
1030 .llvm_name = "reserve-x5",
1031 .description = "Reserve X5, making it unavailable as a GPR",
1032 .dependencies = 0,
1033 };
1034 result[@enumToInt(Feature.reserve_x6)] = .{
1035 .index = @enumToInt(Feature.reserve_x6),
1036 .name = @tagName(Feature.reserve_x6),
1037 .llvm_name = "reserve-x6",
1038 .description = "Reserve X6, making it unavailable as a GPR",
1039 .dependencies = 0,
1040 };
1041 result[@enumToInt(Feature.reserve_x7)] = .{
1042 .index = @enumToInt(Feature.reserve_x7),
1043 .name = @tagName(Feature.reserve_x7),
1044 .llvm_name = "reserve-x7",
1045 .description = "Reserve X7, making it unavailable as a GPR",
1046 .dependencies = 0,
1047 };
1048 result[@enumToInt(Feature.reserve_x9)] = .{
1049 .index = @enumToInt(Feature.reserve_x9),
1050 .name = @tagName(Feature.reserve_x9),
1051 .llvm_name = "reserve-x9",
1052 .description = "Reserve X9, making it unavailable as a GPR",
1053 .dependencies = 0,
1054 };
1055 result[@enumToInt(Feature.saphira)] = .{
1056 .index = @enumToInt(Feature.saphira),
1057 .name = @tagName(Feature.saphira),
1058 .llvm_name = "saphira",
1059 .description = "Qualcomm Saphira processors",
1060 .dependencies = featureSet(&[_]Feature{
1061 .crypto,
1062 .custom_cheap_as_move,
1063 .fp_armv8,
1064 .lsl_fast,
1065 .neon,
1066 .perfmon,
1067 .predictable_select_expensive,
1068 .spe,
1069 .use_postra_scheduler,
1070 .v8_4a,
1071 .zcz,
1072 }),
1073 };
7701074 result[@enumToInt(Feature.sb)] = .{
7711075 .index = @enumToInt(Feature.sb),
7721076 .name = @tagName(Feature.sb),
......@@ -787,7 +1091,7 @@ pub const all_features = blk: {
7871091 .llvm_name = "sha2",
7881092 .description = "Enable SHA1 and SHA256 support",
7891093 .dependencies = featureSet(&[_]Feature{
790 .fp_armv8,
1094 .neon,
7911095 }),
7921096 };
7931097 result[@enumToInt(Feature.sha3)] = .{
......@@ -796,16 +1100,38 @@ pub const all_features = blk: {
7961100 .llvm_name = "sha3",
7971101 .description = "Enable SHA512 and SHA3 support",
7981102 .dependencies = featureSet(&[_]Feature{
799 .fp_armv8,
1103 .neon,
1104 .sha2,
8001105 }),
8011106 };
1107 result[@enumToInt(Feature.slow_misaligned_128store)] = .{
1108 .index = @enumToInt(Feature.slow_misaligned_128store),
1109 .name = @tagName(Feature.slow_misaligned_128store),
1110 .llvm_name = "slow-misaligned-128store",
1111 .description = "Misaligned 128 bit stores are slow",
1112 .dependencies = 0,
1113 };
1114 result[@enumToInt(Feature.slow_paired_128)] = .{
1115 .index = @enumToInt(Feature.slow_paired_128),
1116 .name = @tagName(Feature.slow_paired_128),
1117 .llvm_name = "slow-paired-128",
1118 .description = "Paired 128 bit loads and stores are slow",
1119 .dependencies = 0,
1120 };
1121 result[@enumToInt(Feature.slow_strqro_store)] = .{
1122 .index = @enumToInt(Feature.slow_strqro_store),
1123 .name = @tagName(Feature.slow_strqro_store),
1124 .llvm_name = "slow-strqro-store",
1125 .description = "STR of Q register with register offset is slow",
1126 .dependencies = 0,
1127 };
8021128 result[@enumToInt(Feature.sm4)] = .{
8031129 .index = @enumToInt(Feature.sm4),
8041130 .name = @tagName(Feature.sm4),
8051131 .llvm_name = "sm4",
8061132 .description = "Enable SM3 and SM4 support",
8071133 .dependencies = featureSet(&[_]Feature{
808 .fp_armv8,
1134 .neon,
8091135 }),
8101136 };
8111137 result[@enumToInt(Feature.spe)] = .{
......@@ -815,6 +1141,13 @@ pub const all_features = blk: {
8151141 .description = "Enable Statistical Profiling extension",
8161142 .dependencies = 0,
8171143 };
1144 result[@enumToInt(Feature.specrestrict)] = .{
1145 .index = @enumToInt(Feature.specrestrict),
1146 .name = @tagName(Feature.specrestrict),
1147 .llvm_name = "specrestrict",
1148 .description = "Enable architectural speculation restriction",
1149 .dependencies = 0,
1150 };
8181151 result[@enumToInt(Feature.ssbs)] = .{
8191152 .index = @enumToInt(Feature.ssbs),
8201153 .name = @tagName(Feature.ssbs),
......@@ -822,6 +1155,13 @@ pub const all_features = blk: {
8221155 .description = "Enable Speculative Store Bypass Safe bit",
8231156 .dependencies = 0,
8241157 };
1158 result[@enumToInt(Feature.strict_align)] = .{
1159 .index = @enumToInt(Feature.strict_align),
1160 .name = @tagName(Feature.strict_align),
1161 .llvm_name = "strict-align",
1162 .description = "Disallow all unaligned memory access",
1163 .dependencies = 0,
1164 };
8251165 result[@enumToInt(Feature.sve)] = .{
8261166 .index = @enumToInt(Feature.sve),
8271167 .name = @tagName(Feature.sve),
......@@ -844,8 +1184,8 @@ pub const all_features = blk: {
8441184 .llvm_name = "sve2-aes",
8451185 .description = "Enable AES SVE2 instructions",
8461186 .dependencies = featureSet(&[_]Feature{
847 .sve,
848 .fp_armv8,
1187 .aes,
1188 .sve2,
8491189 }),
8501190 };
8511191 result[@enumToInt(Feature.sve2_bitperm)] = .{
......@@ -854,7 +1194,7 @@ pub const all_features = blk: {
8541194 .llvm_name = "sve2-bitperm",
8551195 .description = "Enable bit permutation SVE2 instructions",
8561196 .dependencies = featureSet(&[_]Feature{
857 .sve,
1197 .sve2,
8581198 }),
8591199 };
8601200 result[@enumToInt(Feature.sve2_sha3)] = .{
......@@ -863,8 +1203,8 @@ pub const all_features = blk: {
8631203 .llvm_name = "sve2-sha3",
8641204 .description = "Enable SHA3 SVE2 instructions",
8651205 .dependencies = featureSet(&[_]Feature{
866 .sve,
867 .fp_armv8,
1206 .sha3,
1207 .sve2,
8681208 }),
8691209 };
8701210 result[@enumToInt(Feature.sve2_sm4)] = .{
......@@ -873,44 +1213,87 @@ pub const all_features = blk: {
8731213 .llvm_name = "sve2-sm4",
8741214 .description = "Enable SM4 SVE2 instructions",
8751215 .dependencies = featureSet(&[_]Feature{
876 .sve,
877 .fp_armv8,
1216 .sm4,
1217 .sve2,
8781218 }),
8791219 };
880 result[@enumToInt(Feature.slow_misaligned_128store)] = .{
881 .index = @enumToInt(Feature.slow_misaligned_128store),
882 .name = @tagName(Feature.slow_misaligned_128store),
883 .llvm_name = "slow-misaligned-128store",
884 .description = "Misaligned 128 bit stores are slow",
885 .dependencies = 0,
1220 result[@enumToInt(Feature.thunderx)] = .{
1221 .index = @enumToInt(Feature.thunderx),
1222 .name = @tagName(Feature.thunderx),
1223 .llvm_name = "thunderx",
1224 .description = "Cavium ThunderX processors",
1225 .dependencies = featureSet(&[_]Feature{
1226 .crc,
1227 .crypto,
1228 .fp_armv8,
1229 .neon,
1230 .perfmon,
1231 .predictable_select_expensive,
1232 .use_postra_scheduler,
1233 }),
8861234 };
887 result[@enumToInt(Feature.slow_paired_128)] = .{
888 .index = @enumToInt(Feature.slow_paired_128),
889 .name = @tagName(Feature.slow_paired_128),
890 .llvm_name = "slow-paired-128",
891 .description = "Paired 128 bit loads and stores are slow",
892 .dependencies = 0,
1235 result[@enumToInt(Feature.thunderx2t99)] = .{
1236 .index = @enumToInt(Feature.thunderx2t99),
1237 .name = @tagName(Feature.thunderx2t99),
1238 .llvm_name = "thunderx2t99",
1239 .description = "Cavium ThunderX2 processors",
1240 .dependencies = featureSet(&[_]Feature{
1241 .aggressive_fma,
1242 .arith_bcc_fusion,
1243 .crc,
1244 .crypto,
1245 .fp_armv8,
1246 .lse,
1247 .neon,
1248 .predictable_select_expensive,
1249 .use_postra_scheduler,
1250 .v8_1a,
1251 }),
8931252 };
894 result[@enumToInt(Feature.slow_strqro_store)] = .{
895 .index = @enumToInt(Feature.slow_strqro_store),
896 .name = @tagName(Feature.slow_strqro_store),
897 .llvm_name = "slow-strqro-store",
898 .description = "STR of Q register with register offset is slow",
899 .dependencies = 0,
1253 result[@enumToInt(Feature.thunderxt81)] = .{
1254 .index = @enumToInt(Feature.thunderxt81),
1255 .name = @tagName(Feature.thunderxt81),
1256 .llvm_name = "thunderxt81",
1257 .description = "Cavium ThunderX processors",
1258 .dependencies = featureSet(&[_]Feature{
1259 .crc,
1260 .crypto,
1261 .fp_armv8,
1262 .neon,
1263 .perfmon,
1264 .predictable_select_expensive,
1265 .use_postra_scheduler,
1266 }),
9001267 };
901 result[@enumToInt(Feature.specrestrict)] = .{
902 .index = @enumToInt(Feature.specrestrict),
903 .name = @tagName(Feature.specrestrict),
904 .llvm_name = "specrestrict",
905 .description = "Enable architectural speculation restriction",
906 .dependencies = 0,
1268 result[@enumToInt(Feature.thunderxt83)] = .{
1269 .index = @enumToInt(Feature.thunderxt83),
1270 .name = @tagName(Feature.thunderxt83),
1271 .llvm_name = "thunderxt83",
1272 .description = "Cavium ThunderX processors",
1273 .dependencies = featureSet(&[_]Feature{
1274 .crc,
1275 .crypto,
1276 .fp_armv8,
1277 .neon,
1278 .perfmon,
1279 .predictable_select_expensive,
1280 .use_postra_scheduler,
1281 }),
9071282 };
908 result[@enumToInt(Feature.strict_align)] = .{
909 .index = @enumToInt(Feature.strict_align),
910 .name = @tagName(Feature.strict_align),
911 .llvm_name = "strict-align",
912 .description = "Disallow all unaligned memory access",
913 .dependencies = 0,
1283 result[@enumToInt(Feature.thunderxt88)] = .{
1284 .index = @enumToInt(Feature.thunderxt88),
1285 .name = @tagName(Feature.thunderxt88),
1286 .llvm_name = "thunderxt88",
1287 .description = "Cavium ThunderX processors",
1288 .dependencies = featureSet(&[_]Feature{
1289 .crc,
1290 .crypto,
1291 .fp_armv8,
1292 .neon,
1293 .perfmon,
1294 .predictable_select_expensive,
1295 .use_postra_scheduler,
1296 }),
9141297 };
9151298 result[@enumToInt(Feature.tlb_rmi)] = .{
9161299 .index = @enumToInt(Feature.tlb_rmi),
......@@ -919,20 +1302,6 @@ pub const all_features = blk: {
9191302 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
9201303 .dependencies = 0,
9211304 };
922 result[@enumToInt(Feature.tracev84)] = .{
923 .index = @enumToInt(Feature.tracev84),
924 .name = @tagName(Feature.tracev84),
925 .llvm_name = "tracev8.4",
926 .description = "Enable v8.4-A Trace extension",
927 .dependencies = 0,
928 };
929 result[@enumToInt(Feature.use_aa)] = .{
930 .index = @enumToInt(Feature.use_aa),
931 .name = @tagName(Feature.use_aa),
932 .llvm_name = "use-aa",
933 .description = "Use alias analysis during codegen",
934 .dependencies = 0,
935 };
9361305 result[@enumToInt(Feature.tpidr_el1)] = .{
9371306 .index = @enumToInt(Feature.tpidr_el1),
9381307 .name = @tagName(Feature.tpidr_el1),
......@@ -954,6 +1323,54 @@ pub const all_features = blk: {
9541323 .description = "Permit use of TPIDR_EL3 for the TLS base",
9551324 .dependencies = 0,
9561325 };
1326 result[@enumToInt(Feature.tracev8_4)] = .{
1327 .index = @enumToInt(Feature.tracev8_4),
1328 .name = @tagName(Feature.tracev8_4),
1329 .llvm_name = "tracev8.4",
1330 .description = "Enable v8.4-A Trace extension",
1331 .dependencies = 0,
1332 };
1333 result[@enumToInt(Feature.tsv110)] = .{
1334 .index = @enumToInt(Feature.tsv110),
1335 .name = @tagName(Feature.tsv110),
1336 .llvm_name = "tsv110",
1337 .description = "HiSilicon TS-V110 processors",
1338 .dependencies = featureSet(&[_]Feature{
1339 .crypto,
1340 .custom_cheap_as_move,
1341 .dotprod,
1342 .fp_armv8,
1343 .fp16fml,
1344 .fullfp16,
1345 .fuse_aes,
1346 .neon,
1347 .perfmon,
1348 .spe,
1349 .use_postra_scheduler,
1350 .v8_2a,
1351 }),
1352 };
1353 result[@enumToInt(Feature.uaops)] = .{
1354 .index = @enumToInt(Feature.uaops),
1355 .name = @tagName(Feature.uaops),
1356 .llvm_name = "uaops",
1357 .description = "Enable v8.2 UAO PState",
1358 .dependencies = 0,
1359 };
1360 result[@enumToInt(Feature.use_aa)] = .{
1361 .index = @enumToInt(Feature.use_aa),
1362 .name = @tagName(Feature.use_aa),
1363 .llvm_name = "use-aa",
1364 .description = "Use alias analysis during codegen",
1365 .dependencies = 0,
1366 };
1367 result[@enumToInt(Feature.use_postra_scheduler)] = .{
1368 .index = @enumToInt(Feature.use_postra_scheduler),
1369 .name = @tagName(Feature.use_postra_scheduler),
1370 .llvm_name = "use-postra-scheduler",
1371 .description = "Schedule again after register allocation",
1372 .dependencies = 0,
1373 };
9571374 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{
9581375 .index = @enumToInt(Feature.use_reciprocal_square_root),
9591376 .name = @tagName(Feature.use_reciprocal_square_root),
......@@ -961,25 +1378,103 @@ pub const all_features = blk: {
9611378 .description = "Use the reciprocal square root approximation",
9621379 .dependencies = 0,
9631380 };
964 result[@enumToInt(Feature.vh)] = .{
965 .index = @enumToInt(Feature.vh),
966 .name = @tagName(Feature.vh),
967 .llvm_name = "vh",
968 .description = "Enables ARM v8.1 Virtual Host extension",
969 .dependencies = 0,
970 };
971 result[@enumToInt(Feature.zcm)] = .{
972 .index = @enumToInt(Feature.zcm),
973 .name = @tagName(Feature.zcm),
974 .llvm_name = "zcm",
975 .description = "Has zero-cycle register moves",
976 .dependencies = 0,
977 };
978 result[@enumToInt(Feature.zcz)] = .{
979 .index = @enumToInt(Feature.zcz),
980 .name = @tagName(Feature.zcz),
981 .llvm_name = "zcz",
982 .description = "Has zero-cycle zeroing instructions",
1381 result[@enumToInt(Feature.v8_1a)] = .{
1382 .index = @enumToInt(Feature.v8_1a),
1383 .name = @tagName(Feature.v8_1a),
1384 .llvm_name = "v8.1a",
1385 .description = "Support ARM v8.1a instructions",
1386 .dependencies = featureSet(&[_]Feature{
1387 .crc,
1388 .lor,
1389 .lse,
1390 .pan,
1391 .rdm,
1392 .vh,
1393 }),
1394 };
1395 result[@enumToInt(Feature.v8_2a)] = .{
1396 .index = @enumToInt(Feature.v8_2a),
1397 .name = @tagName(Feature.v8_2a),
1398 .llvm_name = "v8.2a",
1399 .description = "Support ARM v8.2a instructions",
1400 .dependencies = featureSet(&[_]Feature{
1401 .ccpp,
1402 .pan_rwv,
1403 .ras,
1404 .uaops,
1405 .v8_1a,
1406 }),
1407 };
1408 result[@enumToInt(Feature.v8_3a)] = .{
1409 .index = @enumToInt(Feature.v8_3a),
1410 .name = @tagName(Feature.v8_3a),
1411 .llvm_name = "v8.3a",
1412 .description = "Support ARM v8.3a instructions",
1413 .dependencies = featureSet(&[_]Feature{
1414 .ccidx,
1415 .complxnum,
1416 .jsconv,
1417 .pa,
1418 .rcpc,
1419 .v8_2a,
1420 }),
1421 };
1422 result[@enumToInt(Feature.v8_4a)] = .{
1423 .index = @enumToInt(Feature.v8_4a),
1424 .name = @tagName(Feature.v8_4a),
1425 .llvm_name = "v8.4a",
1426 .description = "Support ARM v8.4a instructions",
1427 .dependencies = featureSet(&[_]Feature{
1428 .am,
1429 .dit,
1430 .dotprod,
1431 .fmi,
1432 .mpam,
1433 .nv,
1434 .rasv8_4,
1435 .rcpc_immo,
1436 .sel2,
1437 .tlb_rmi,
1438 .tracev8_4,
1439 .v8_3a,
1440 }),
1441 };
1442 result[@enumToInt(Feature.v8_5a)] = .{
1443 .index = @enumToInt(Feature.v8_5a),
1444 .name = @tagName(Feature.v8_5a),
1445 .llvm_name = "v8.5a",
1446 .description = "Support ARM v8.5a instructions",
1447 .dependencies = featureSet(&[_]Feature{
1448 .altnzcv,
1449 .bti,
1450 .ccdp,
1451 .fptoint,
1452 .predres,
1453 .sb,
1454 .specrestrict,
1455 .ssbs,
1456 .v8_4a,
1457 }),
1458 };
1459 result[@enumToInt(Feature.vh)] = .{
1460 .index = @enumToInt(Feature.vh),
1461 .name = @tagName(Feature.vh),
1462 .llvm_name = "vh",
1463 .description = "Enables ARM v8.1 Virtual Host extension",
1464 .dependencies = 0,
1465 };
1466 result[@enumToInt(Feature.zcm)] = .{
1467 .index = @enumToInt(Feature.zcm),
1468 .name = @tagName(Feature.zcm),
1469 .llvm_name = "zcm",
1470 .description = "Has zero-cycle register moves",
1471 .dependencies = 0,
1472 };
1473 result[@enumToInt(Feature.zcz)] = .{
1474 .index = @enumToInt(Feature.zcz),
1475 .name = @tagName(Feature.zcz),
1476 .llvm_name = "zcz",
1477 .description = "Has zero-cycle zeroing instructions",
9831478 .dependencies = featureSet(&[_]Feature{
9841479 .zcz_fp,
9851480 .zcz_gp,
......@@ -1014,322 +1509,121 @@ pub const cpu = struct {
10141509 .name = "apple_latest",
10151510 .llvm_name = "apple-latest",
10161511 .features = featureSet(&[_]Feature{
1017 .arith_cbz_fusion,
1018 .zcz_fp_workaround,
1019 .alternate_sextload_cvt_f32_pattern,
1020 .fuse_crypto_eor,
1021 .zcm,
1022 .zcz_gp,
1023 .perfmon,
1024 .disable_latency_sched_heuristic,
1025 .fp_armv8,
1026 .zcz_fp,
1027 .arith_bcc_fusion,
1028 .fuse_aes,
1512 .cyclone,
10291513 }),
10301514 };
1031
10321515 pub const cortex_a35 = Cpu{
10331516 .name = "cortex_a35",
10341517 .llvm_name = "cortex-a35",
10351518 .features = featureSet(&[_]Feature{
1036 .perfmon,
1037 .fp_armv8,
1038 .crc,
1519 .a35,
10391520 }),
10401521 };
1041
10421522 pub const cortex_a53 = Cpu{
10431523 .name = "cortex_a53",
10441524 .llvm_name = "cortex-a53",
10451525 .features = featureSet(&[_]Feature{
1046 .custom_cheap_as_move,
1047 .crc,
1048 .perfmon,
1049 .use_aa,
1050 .fp_armv8,
1051 .fuse_aes,
1052 .balance_fp_ops,
1053 .use_postra_scheduler,
1526 .a53,
10541527 }),
10551528 };
1056
10571529 pub const cortex_a55 = Cpu{
10581530 .name = "cortex_a55",
10591531 .llvm_name = "cortex-a55",
10601532 .features = featureSet(&[_]Feature{
1061 .ccpp,
1062 .rcpc,
1063 .uaops,
1064 .rdm,
1065 .ras,
1066 .lse,
1067 .crc,
1068 .perfmon,
1069 .fp_armv8,
1070 .vh,
1071 .fuse_aes,
1072 .lor,
1073 .dotprod,
1074 .pan,
1533 .a55,
10751534 }),
10761535 };
1077
10781536 pub const cortex_a57 = Cpu{
10791537 .name = "cortex_a57",
10801538 .llvm_name = "cortex-a57",
10811539 .features = featureSet(&[_]Feature{
1082 .fuse_literals,
1083 .predictable_select_expensive,
1084 .custom_cheap_as_move,
1085 .crc,
1086 .perfmon,
1087 .fp_armv8,
1088 .fuse_aes,
1089 .balance_fp_ops,
1090 .use_postra_scheduler,
1540 .a57,
10911541 }),
10921542 };
1093
10941543 pub const cortex_a72 = Cpu{
10951544 .name = "cortex_a72",
10961545 .llvm_name = "cortex-a72",
10971546 .features = featureSet(&[_]Feature{
1098 .fuse_aes,
1099 .fp_armv8,
1100 .perfmon,
1101 .crc,
1547 .a72,
11021548 }),
11031549 };
1104
11051550 pub const cortex_a73 = Cpu{
11061551 .name = "cortex_a73",
11071552 .llvm_name = "cortex-a73",
11081553 .features = featureSet(&[_]Feature{
1109 .fuse_aes,
1110 .fp_armv8,
1111 .perfmon,
1112 .crc,
1554 .a73,
11131555 }),
11141556 };
1115
11161557 pub const cortex_a75 = Cpu{
11171558 .name = "cortex_a75",
11181559 .llvm_name = "cortex-a75",
11191560 .features = featureSet(&[_]Feature{
1120 .ccpp,
1121 .rcpc,
1122 .uaops,
1123 .rdm,
1124 .ras,
1125 .lse,
1126 .crc,
1127 .perfmon,
1128 .fp_armv8,
1129 .vh,
1130 .fuse_aes,
1131 .lor,
1132 .dotprod,
1133 .pan,
1561 .a75,
11341562 }),
11351563 };
1136
11371564 pub const cortex_a76 = Cpu{
11381565 .name = "cortex_a76",
11391566 .llvm_name = "cortex-a76",
11401567 .features = featureSet(&[_]Feature{
1141 .ccpp,
1142 .rcpc,
1143 .uaops,
1144 .rdm,
1145 .ras,
1146 .lse,
1147 .crc,
1148 .fp_armv8,
1149 .vh,
1150 .lor,
1151 .ssbs,
1152 .dotprod,
1153 .pan,
1568 .a76,
11541569 }),
11551570 };
1156
11571571 pub const cortex_a76ae = Cpu{
11581572 .name = "cortex_a76ae",
11591573 .llvm_name = "cortex-a76ae",
11601574 .features = featureSet(&[_]Feature{
1161 .ccpp,
1162 .rcpc,
1163 .uaops,
1164 .rdm,
1165 .ras,
1166 .lse,
1167 .crc,
1168 .fp_armv8,
1169 .vh,
1170 .lor,
1171 .ssbs,
1172 .dotprod,
1173 .pan,
1575 .a76,
11741576 }),
11751577 };
1176
11771578 pub const cyclone = Cpu{
11781579 .name = "cyclone",
11791580 .llvm_name = "cyclone",
11801581 .features = featureSet(&[_]Feature{
1181 .arith_cbz_fusion,
1182 .zcz_fp_workaround,
1183 .alternate_sextload_cvt_f32_pattern,
1184 .fuse_crypto_eor,
1185 .zcm,
1186 .zcz_gp,
1187 .perfmon,
1188 .disable_latency_sched_heuristic,
1189 .fp_armv8,
1190 .zcz_fp,
1191 .arith_bcc_fusion,
1192 .fuse_aes,
1582 .cyclone,
11931583 }),
11941584 };
1195
11961585 pub const exynos_m1 = Cpu{
11971586 .name = "exynos_m1",
11981587 .llvm_name = "exynos-m1",
11991588 .features = featureSet(&[_]Feature{
1200 .custom_cheap_as_move,
1201 .crc,
1202 .force_32bit_jump_tables,
1203 .perfmon,
1204 .slow_misaligned_128store,
1205 .use_reciprocal_square_root,
1206 .fp_armv8,
1207 .zcz_fp,
1208 .fuse_aes,
1209 .slow_paired_128,
1210 .use_postra_scheduler,
1589 .exynosm1,
12111590 }),
12121591 };
1213
12141592 pub const exynos_m2 = Cpu{
12151593 .name = "exynos_m2",
12161594 .llvm_name = "exynos-m2",
12171595 .features = featureSet(&[_]Feature{
1218 .custom_cheap_as_move,
1219 .crc,
1220 .force_32bit_jump_tables,
1221 .perfmon,
1222 .slow_misaligned_128store,
1223 .fp_armv8,
1224 .zcz_fp,
1225 .fuse_aes,
1226 .slow_paired_128,
1227 .use_postra_scheduler,
1596 .exynosm2,
12281597 }),
12291598 };
1230
12311599 pub const exynos_m3 = Cpu{
12321600 .name = "exynos_m3",
12331601 .llvm_name = "exynos-m3",
12341602 .features = featureSet(&[_]Feature{
1235 .fuse_literals,
1236 .predictable_select_expensive,
1237 .custom_cheap_as_move,
1238 .crc,
1239 .force_32bit_jump_tables,
1240 .fuse_address,
1241 .fuse_csel,
1242 .perfmon,
1243 .fp_armv8,
1244 .zcz_fp,
1245 .fuse_aes,
1246 .lsl_fast,
1247 .use_postra_scheduler,
1603 .exynosm3,
12481604 }),
12491605 };
1250
12511606 pub const exynos_m4 = Cpu{
12521607 .name = "exynos_m4",
12531608 .llvm_name = "exynos-m4",
12541609 .features = featureSet(&[_]Feature{
1255 .arith_cbz_fusion,
1256 .custom_cheap_as_move,
1257 .lse,
1258 .zcz_fp,
1259 .lsl_fast,
1260 .lor,
1261 .fuse_literals,
1262 .ccpp,
1263 .ras,
1264 .fp_armv8,
1265 .fuse_aes,
1266 .pan,
1267 .fuse_arith_logic,
1268 .crc,
1269 .force_32bit_jump_tables,
1270 .fuse_address,
1271 .fuse_csel,
1272 .arith_bcc_fusion,
1273 .uaops,
1274 .rdm,
1275 .zcz_gp,
1276 .perfmon,
1277 .vh,
1278 .use_postra_scheduler,
1279 .dotprod,
1610 .exynosm4,
12801611 }),
12811612 };
1282
12831613 pub const exynos_m5 = Cpu{
12841614 .name = "exynos_m5",
12851615 .llvm_name = "exynos-m5",
12861616 .features = featureSet(&[_]Feature{
1287 .arith_cbz_fusion,
1288 .custom_cheap_as_move,
1289 .lse,
1290 .zcz_fp,
1291 .lsl_fast,
1292 .lor,
1293 .fuse_literals,
1294 .ccpp,
1295 .ras,
1296 .fp_armv8,
1297 .fuse_aes,
1298 .pan,
1299 .fuse_arith_logic,
1300 .crc,
1301 .force_32bit_jump_tables,
1302 .fuse_address,
1303 .fuse_csel,
1304 .arith_bcc_fusion,
1305 .uaops,
1306 .rdm,
1307 .zcz_gp,
1308 .perfmon,
1309 .vh,
1310 .use_postra_scheduler,
1311 .dotprod,
1617 .exynosm4,
13121618 }),
13131619 };
1314
13151620 pub const falkor = Cpu{
13161621 .name = "falkor",
13171622 .llvm_name = "falkor",
13181623 .features = featureSet(&[_]Feature{
1319 .predictable_select_expensive,
1320 .custom_cheap_as_move,
1321 .rdm,
1322 .slow_strqro_store,
1323 .zcz_gp,
1324 .crc,
1325 .perfmon,
1326 .fp_armv8,
1327 .zcz_fp,
1328 .lsl_fast,
1329 .use_postra_scheduler,
1624 .falkor,
13301625 }),
13311626 };
1332
13331627 pub const generic = Cpu{
13341628 .name = "generic",
13351629 .llvm_name = "generic",
......@@ -1341,146 +1635,60 @@ pub const cpu = struct {
13411635 .use_postra_scheduler,
13421636 }),
13431637 };
1344
13451638 pub const kryo = Cpu{
13461639 .name = "kryo",
13471640 .llvm_name = "kryo",
13481641 .features = featureSet(&[_]Feature{
1349 .predictable_select_expensive,
1350 .custom_cheap_as_move,
1351 .zcz_gp,
1352 .crc,
1353 .perfmon,
1354 .fp_armv8,
1355 .zcz_fp,
1356 .lsl_fast,
1357 .use_postra_scheduler,
1642 .kryo,
13581643 }),
13591644 };
1360
13611645 pub const saphira = Cpu{
13621646 .name = "saphira",
13631647 .llvm_name = "saphira",
13641648 .features = featureSet(&[_]Feature{
1365 .predictable_select_expensive,
1366 .custom_cheap_as_move,
1367 .fmi,
1368 .lse,
1369 .zcz_fp,
1370 .lsl_fast,
1371 .lor,
1372 .dit,
1373 .pa,
1374 .ccpp,
1375 .sel2,
1376 .ras,
1377 .fp_armv8,
1378 .ccidx,
1379 .pan,
1380 .rcpc,
1381 .crc,
1382 .tracev84,
1383 .mpam,
1384 .am,
1385 .nv,
1386 .tlb_rmi,
1387 .uaops,
1388 .rdm,
1389 .zcz_gp,
1390 .perfmon,
1391 .vh,
1392 .use_postra_scheduler,
1393 .dotprod,
1394 .spe,
1649 .saphira,
13951650 }),
13961651 };
1397
13981652 pub const thunderx = Cpu{
13991653 .name = "thunderx",
14001654 .llvm_name = "thunderx",
14011655 .features = featureSet(&[_]Feature{
1402 .predictable_select_expensive,
1403 .crc,
1404 .perfmon,
1405 .fp_armv8,
1406 .use_postra_scheduler,
1656 .thunderx,
14071657 }),
14081658 };
1409
14101659 pub const thunderx2t99 = Cpu{
14111660 .name = "thunderx2t99",
14121661 .llvm_name = "thunderx2t99",
14131662 .features = featureSet(&[_]Feature{
1414 .predictable_select_expensive,
1415 .aggressive_fma,
1416 .rdm,
1417 .lse,
1418 .crc,
1419 .fp_armv8,
1420 .vh,
1421 .arith_bcc_fusion,
1422 .lor,
1423 .use_postra_scheduler,
1424 .pan,
1663 .thunderx2t99,
14251664 }),
14261665 };
1427
14281666 pub const thunderxt81 = Cpu{
14291667 .name = "thunderxt81",
14301668 .llvm_name = "thunderxt81",
14311669 .features = featureSet(&[_]Feature{
1432 .predictable_select_expensive,
1433 .crc,
1434 .perfmon,
1435 .fp_armv8,
1436 .use_postra_scheduler,
1670 .thunderxt81,
14371671 }),
14381672 };
1439
14401673 pub const thunderxt83 = Cpu{
14411674 .name = "thunderxt83",
14421675 .llvm_name = "thunderxt83",
14431676 .features = featureSet(&[_]Feature{
1444 .predictable_select_expensive,
1445 .crc,
1446 .perfmon,
1447 .fp_armv8,
1448 .use_postra_scheduler,
1677 .thunderxt83,
14491678 }),
14501679 };
1451
14521680 pub const thunderxt88 = Cpu{
14531681 .name = "thunderxt88",
14541682 .llvm_name = "thunderxt88",
14551683 .features = featureSet(&[_]Feature{
1456 .predictable_select_expensive,
1457 .crc,
1458 .perfmon,
1459 .fp_armv8,
1460 .use_postra_scheduler,
1684 .thunderxt88,
14611685 }),
14621686 };
1463
14641687 pub const tsv110 = Cpu{
14651688 .name = "tsv110",
14661689 .llvm_name = "tsv110",
14671690 .features = featureSet(&[_]Feature{
1468 .ccpp,
1469 .custom_cheap_as_move,
1470 .uaops,
1471 .rdm,
1472 .ras,
1473 .lse,
1474 .crc,
1475 .perfmon,
1476 .fp_armv8,
1477 .vh,
1478 .fuse_aes,
1479 .lor,
1480 .use_postra_scheduler,
1481 .dotprod,
1482 .pan,
1483 .spe,
1691 .tsv110,
14841692 }),
14851693 };
14861694};
lib/std/target/amdgpu.zig+1523-2131
......@@ -1,2132 +1,1524 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_BitInsts16 = Feature{
5 .name = "BitInsts16",
6 .llvm_name = "16-bit-insts",
7 .description = "Has i16/f16 instructions",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_addNoCarryInsts = Feature{
13 .name = "addNoCarryInsts",
14 .llvm_name = "add-no-carry-insts",
15 .description = "Have VALU add/sub instructions without carry out",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_apertureRegs = Feature{
21 .name = "apertureRegs",
22 .llvm_name = "aperture-regs",
23 .description = "Has Memory Aperture Base and Size Registers",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_atomicFaddInsts = Feature{
29 .name = "atomicFaddInsts",
30 .llvm_name = "atomic-fadd-insts",
31 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_autoWaitcntBeforeBarrier = Feature{
37 .name = "autoWaitcntBeforeBarrier",
38 .llvm_name = "auto-waitcnt-before-barrier",
39 .description = "Hardware automatically inserts waitcnt before barrier",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_ciInsts = Feature{
45 .name = "ciInsts",
46 .llvm_name = "ci-insts",
47 .description = "Additional instructions for CI+",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_codeObjectV3 = Feature{
53 .name = "codeObjectV3",
54 .llvm_name = "code-object-v3",
55 .description = "Generate code object version 3",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_cumode = Feature{
61 .name = "cumode",
62 .llvm_name = "cumode",
63 .description = "Enable CU wavefront execution mode",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_dlInsts = Feature{
69 .name = "dlInsts",
70 .llvm_name = "dl-insts",
71 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_dpp = Feature{
77 .name = "dpp",
78 .llvm_name = "dpp",
79 .description = "Support DPP (Data Parallel Primitives) extension",
80 .dependencies = &[_]*const Feature {
81 },
82};
83
84pub const feature_dpp8 = Feature{
85 .name = "dpp8",
86 .llvm_name = "dpp8",
87 .description = "Support DPP8 (Data Parallel Primitives) extension",
88 .dependencies = &[_]*const Feature {
89 },
90};
91
92pub const feature_noSramEccSupport = Feature{
93 .name = "noSramEccSupport",
94 .llvm_name = "no-sram-ecc-support",
95 .description = "Hardware does not support SRAM ECC",
96 .dependencies = &[_]*const Feature {
97 },
98};
99
100pub const feature_noXnackSupport = Feature{
101 .name = "noXnackSupport",
102 .llvm_name = "no-xnack-support",
103 .description = "Hardware does not support XNACK",
104 .dependencies = &[_]*const Feature {
105 },
106};
107
108pub const feature_dot1Insts = Feature{
109 .name = "dot1Insts",
110 .llvm_name = "dot1-insts",
111 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
112 .dependencies = &[_]*const Feature {
113 },
114};
115
116pub const feature_dot2Insts = Feature{
117 .name = "dot2Insts",
118 .llvm_name = "dot2-insts",
119 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",
120 .dependencies = &[_]*const Feature {
121 },
122};
123
124pub const feature_dot3Insts = Feature{
125 .name = "dot3Insts",
126 .llvm_name = "dot3-insts",
127 .description = "Has v_dot8c_i32_i4 instruction",
128 .dependencies = &[_]*const Feature {
129 },
130};
131
132pub const feature_dot4Insts = Feature{
133 .name = "dot4Insts",
134 .llvm_name = "dot4-insts",
135 .description = "Has v_dot2c_i32_i16 instruction",
136 .dependencies = &[_]*const Feature {
137 },
138};
139
140pub const feature_dot5Insts = Feature{
141 .name = "dot5Insts",
142 .llvm_name = "dot5-insts",
143 .description = "Has v_dot2c_f32_f16 instruction",
144 .dependencies = &[_]*const Feature {
145 },
146};
147
148pub const feature_dot6Insts = Feature{
149 .name = "dot6Insts",
150 .llvm_name = "dot6-insts",
151 .description = "Has v_dot4c_i32_i8 instruction",
152 .dependencies = &[_]*const Feature {
153 },
154};
155
156pub const feature_DumpCode = Feature{
157 .name = "DumpCode",
158 .llvm_name = "DumpCode",
159 .description = "Dump MachineInstrs in the CodeEmitter",
160 .dependencies = &[_]*const Feature {
161 },
162};
163
164pub const feature_dumpcode = Feature{
165 .name = "dumpcode",
166 .llvm_name = "dumpcode",
167 .description = "Dump MachineInstrs in the CodeEmitter",
168 .dependencies = &[_]*const Feature {
169 },
170};
171
172pub const feature_enableDs128 = Feature{
173 .name = "enableDs128",
174 .llvm_name = "enable-ds128",
175 .description = "Use ds_{read|write}_b128",
176 .dependencies = &[_]*const Feature {
177 },
178};
179
180pub const feature_loadStoreOpt = Feature{
181 .name = "loadStoreOpt",
182 .llvm_name = "load-store-opt",
183 .description = "Enable SI load/store optimizer pass",
184 .dependencies = &[_]*const Feature {
185 },
186};
187
188pub const feature_enablePrtStrictNull = Feature{
189 .name = "enablePrtStrictNull",
190 .llvm_name = "enable-prt-strict-null",
191 .description = "Enable zeroing of result registers for sparse texture fetches",
192 .dependencies = &[_]*const Feature {
193 },
194};
195
196pub const feature_siScheduler = Feature{
197 .name = "siScheduler",
198 .llvm_name = "si-scheduler",
199 .description = "Enable SI Machine Scheduler",
200 .dependencies = &[_]*const Feature {
201 },
202};
203
204pub const feature_unsafeDsOffsetFolding = Feature{
205 .name = "unsafeDsOffsetFolding",
206 .llvm_name = "unsafe-ds-offset-folding",
207 .description = "Force using DS instruction immediate offsets on SI",
208 .dependencies = &[_]*const Feature {
209 },
210};
211
212pub const feature_fmaf = Feature{
213 .name = "fmaf",
214 .llvm_name = "fmaf",
215 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
216 .dependencies = &[_]*const Feature {
217 },
218};
219
220pub const feature_fp16Denormals = Feature{
221 .name = "fp16Denormals",
222 .llvm_name = "fp16-denormals",
223 .description = "Enable half precision denormal handling",
224 .dependencies = &[_]*const Feature {
225 &feature_fp64,
226 },
227};
228
229pub const feature_fp32Denormals = Feature{
230 .name = "fp32Denormals",
231 .llvm_name = "fp32-denormals",
232 .description = "Enable single precision denormal handling",
233 .dependencies = &[_]*const Feature {
234 },
235};
236
237pub const feature_fp64 = Feature{
238 .name = "fp64",
239 .llvm_name = "fp64",
240 .description = "Enable double precision operations",
241 .dependencies = &[_]*const Feature {
242 },
243};
244
245pub const feature_fp64Denormals = Feature{
246 .name = "fp64Denormals",
247 .llvm_name = "fp64-denormals",
248 .description = "Enable double and half precision denormal handling",
249 .dependencies = &[_]*const Feature {
250 &feature_fp64,
251 },
252};
253
254pub const feature_fp64Fp16Denormals = Feature{
255 .name = "fp64Fp16Denormals",
256 .llvm_name = "fp64-fp16-denormals",
257 .description = "Enable double and half precision denormal handling",
258 .dependencies = &[_]*const Feature {
259 &feature_fp64,
260 },
261};
262
263pub const feature_fpExceptions = Feature{
264 .name = "fpExceptions",
265 .llvm_name = "fp-exceptions",
266 .description = "Enable floating point exceptions",
267 .dependencies = &[_]*const Feature {
268 },
269};
270
271pub const feature_fastFmaf = Feature{
272 .name = "fastFmaf",
273 .llvm_name = "fast-fmaf",
274 .description = "Assuming f32 fma is at least as fast as mul + add",
275 .dependencies = &[_]*const Feature {
276 },
277};
278
279pub const feature_flatAddressSpace = Feature{
280 .name = "flatAddressSpace",
281 .llvm_name = "flat-address-space",
282 .description = "Support flat address space",
283 .dependencies = &[_]*const Feature {
284 },
285};
286
287pub const feature_flatForGlobal = Feature{
288 .name = "flatForGlobal",
289 .llvm_name = "flat-for-global",
290 .description = "Force to generate flat instruction for global",
291 .dependencies = &[_]*const Feature {
292 },
293};
294
295pub const feature_flatGlobalInsts = Feature{
296 .name = "flatGlobalInsts",
297 .llvm_name = "flat-global-insts",
298 .description = "Have global_* flat memory instructions",
299 .dependencies = &[_]*const Feature {
300 },
301};
302
303pub const feature_flatInstOffsets = Feature{
304 .name = "flatInstOffsets",
305 .llvm_name = "flat-inst-offsets",
306 .description = "Flat instructions have immediate offset addressing mode",
307 .dependencies = &[_]*const Feature {
308 },
309};
310
311pub const feature_flatScratchInsts = Feature{
312 .name = "flatScratchInsts",
313 .llvm_name = "flat-scratch-insts",
314 .description = "Have scratch_* flat memory instructions",
315 .dependencies = &[_]*const Feature {
316 },
317};
318
319pub const feature_flatSegmentOffsetBug = Feature{
320 .name = "flatSegmentOffsetBug",
321 .llvm_name = "flat-segment-offset-bug",
322 .description = "GFX10 bug, inst_offset ignored in flat segment",
323 .dependencies = &[_]*const Feature {
324 },
325};
326
327pub const feature_fmaMixInsts = Feature{
328 .name = "fmaMixInsts",
329 .llvm_name = "fma-mix-insts",
330 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
331 .dependencies = &[_]*const Feature {
332 },
333};
334
335pub const feature_gcn3Encoding = Feature{
336 .name = "gcn3Encoding",
337 .llvm_name = "gcn3-encoding",
338 .description = "Encoding format for VI",
339 .dependencies = &[_]*const Feature {
340 },
341};
342
343pub const feature_gfx7Gfx8Gfx9Insts = Feature{
344 .name = "gfx7Gfx8Gfx9Insts",
345 .llvm_name = "gfx7-gfx8-gfx9-insts",
346 .description = "Instructions shared in GFX7, GFX8, GFX9",
347 .dependencies = &[_]*const Feature {
348 },
349};
350
351pub const feature_gfx8Insts = Feature{
352 .name = "gfx8Insts",
353 .llvm_name = "gfx8-insts",
354 .description = "Additional instructions for GFX8+",
355 .dependencies = &[_]*const Feature {
356 },
357};
358
359pub const feature_gfx9Insts = Feature{
360 .name = "gfx9Insts",
361 .llvm_name = "gfx9-insts",
362 .description = "Additional instructions for GFX9+",
363 .dependencies = &[_]*const Feature {
364 },
365};
366
367pub const feature_gfx10Insts = Feature{
368 .name = "gfx10Insts",
369 .llvm_name = "gfx10-insts",
370 .description = "Additional instructions for GFX10+",
371 .dependencies = &[_]*const Feature {
372 },
373};
374
375pub const feature_instFwdPrefetchBug = Feature{
376 .name = "instFwdPrefetchBug",
377 .llvm_name = "inst-fwd-prefetch-bug",
378 .description = "S_INST_PREFETCH instruction causes shader to hang",
379 .dependencies = &[_]*const Feature {
380 },
381};
382
383pub const feature_intClampInsts = Feature{
384 .name = "intClampInsts",
385 .llvm_name = "int-clamp-insts",
386 .description = "Support clamp for integer destination",
387 .dependencies = &[_]*const Feature {
388 },
389};
390
391pub const feature_inv2piInlineImm = Feature{
392 .name = "inv2piInlineImm",
393 .llvm_name = "inv-2pi-inline-imm",
394 .description = "Has 1 / (2 * pi) as inline immediate",
395 .dependencies = &[_]*const Feature {
396 },
397};
398
399pub const feature_ldsbankcount16 = Feature{
400 .name = "ldsbankcount16",
401 .llvm_name = "ldsbankcount16",
402 .description = "The number of LDS banks per compute unit.",
403 .dependencies = &[_]*const Feature {
404 },
405};
406
407pub const feature_ldsbankcount32 = Feature{
408 .name = "ldsbankcount32",
409 .llvm_name = "ldsbankcount32",
410 .description = "The number of LDS banks per compute unit.",
411 .dependencies = &[_]*const Feature {
412 },
413};
414
415pub const feature_ldsBranchVmemWarHazard = Feature{
416 .name = "ldsBranchVmemWarHazard",
417 .llvm_name = "lds-branch-vmem-war-hazard",
418 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
419 .dependencies = &[_]*const Feature {
420 },
421};
422
423pub const feature_ldsMisalignedBug = Feature{
424 .name = "ldsMisalignedBug",
425 .llvm_name = "lds-misaligned-bug",
426 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
427 .dependencies = &[_]*const Feature {
428 },
429};
430
431pub const feature_localmemorysize0 = Feature{
432 .name = "localmemorysize0",
433 .llvm_name = "localmemorysize0",
434 .description = "The size of local memory in bytes",
435 .dependencies = &[_]*const Feature {
436 },
437};
438
439pub const feature_localmemorysize32768 = Feature{
440 .name = "localmemorysize32768",
441 .llvm_name = "localmemorysize32768",
442 .description = "The size of local memory in bytes",
443 .dependencies = &[_]*const Feature {
444 },
445};
446
447pub const feature_localmemorysize65536 = Feature{
448 .name = "localmemorysize65536",
449 .llvm_name = "localmemorysize65536",
450 .description = "The size of local memory in bytes",
451 .dependencies = &[_]*const Feature {
452 },
453};
454
455pub const feature_maiInsts = Feature{
456 .name = "maiInsts",
457 .llvm_name = "mai-insts",
458 .description = "Has mAI instructions",
459 .dependencies = &[_]*const Feature {
460 },
461};
462
463pub const feature_mimgR128 = Feature{
464 .name = "mimgR128",
465 .llvm_name = "mimg-r128",
466 .description = "Support 128-bit texture resources",
467 .dependencies = &[_]*const Feature {
468 },
469};
470
471pub const feature_madMixInsts = Feature{
472 .name = "madMixInsts",
473 .llvm_name = "mad-mix-insts",
474 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
475 .dependencies = &[_]*const Feature {
476 },
477};
478
479pub const feature_maxPrivateElementSize4 = Feature{
480 .name = "maxPrivateElementSize4",
481 .llvm_name = "max-private-element-size-4",
482 .description = "Maximum private access size may be 4",
483 .dependencies = &[_]*const Feature {
484 },
485};
486
487pub const feature_maxPrivateElementSize8 = Feature{
488 .name = "maxPrivateElementSize8",
489 .llvm_name = "max-private-element-size-8",
490 .description = "Maximum private access size may be 8",
491 .dependencies = &[_]*const Feature {
492 },
493};
494
495pub const feature_maxPrivateElementSize16 = Feature{
496 .name = "maxPrivateElementSize16",
497 .llvm_name = "max-private-element-size-16",
498 .description = "Maximum private access size may be 16",
499 .dependencies = &[_]*const Feature {
500 },
501};
502
503pub const feature_movrel = Feature{
504 .name = "movrel",
505 .llvm_name = "movrel",
506 .description = "Has v_movrel*_b32 instructions",
507 .dependencies = &[_]*const Feature {
508 },
509};
510
511pub const feature_nsaEncoding = Feature{
512 .name = "nsaEncoding",
513 .llvm_name = "nsa-encoding",
514 .description = "Support NSA encoding for image instructions",
515 .dependencies = &[_]*const Feature {
516 },
517};
518
519pub const feature_nsaToVmemBug = Feature{
520 .name = "nsaToVmemBug",
521 .llvm_name = "nsa-to-vmem-bug",
522 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
523 .dependencies = &[_]*const Feature {
524 },
525};
526
527pub const feature_noDataDepHazard = Feature{
528 .name = "noDataDepHazard",
529 .llvm_name = "no-data-dep-hazard",
530 .description = "Does not need SW waitstates",
531 .dependencies = &[_]*const Feature {
532 },
533};
534
535pub const feature_noSdstCmpx = Feature{
536 .name = "noSdstCmpx",
537 .llvm_name = "no-sdst-cmpx",
538 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
539 .dependencies = &[_]*const Feature {
540 },
541};
542
543pub const feature_offset3fBug = Feature{
544 .name = "offset3fBug",
545 .llvm_name = "offset-3f-bug",
546 .description = "Branch offset of 3f hardware bug",
547 .dependencies = &[_]*const Feature {
548 },
549};
550
551pub const feature_pkFmacF16Inst = Feature{
552 .name = "pkFmacF16Inst",
553 .llvm_name = "pk-fmac-f16-inst",
554 .description = "Has v_pk_fmac_f16 instruction",
555 .dependencies = &[_]*const Feature {
556 },
557};
558
559pub const feature_promoteAlloca = Feature{
560 .name = "promoteAlloca",
561 .llvm_name = "promote-alloca",
562 .description = "Enable promote alloca pass",
563 .dependencies = &[_]*const Feature {
564 },
565};
566
567pub const feature_r128A16 = Feature{
568 .name = "r128A16",
569 .llvm_name = "r128-a16",
570 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
571 .dependencies = &[_]*const Feature {
572 },
573};
574
575pub const feature_registerBanking = Feature{
576 .name = "registerBanking",
577 .llvm_name = "register-banking",
578 .description = "Has register banking",
579 .dependencies = &[_]*const Feature {
580 },
581};
582
583pub const feature_sdwa = Feature{
584 .name = "sdwa",
585 .llvm_name = "sdwa",
586 .description = "Support SDWA (Sub-DWORD Addressing) extension",
587 .dependencies = &[_]*const Feature {
588 },
589};
590
591pub const feature_sdwaMav = Feature{
592 .name = "sdwaMav",
593 .llvm_name = "sdwa-mav",
594 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
595 .dependencies = &[_]*const Feature {
596 },
597};
598
599pub const feature_sdwaOmod = Feature{
600 .name = "sdwaOmod",
601 .llvm_name = "sdwa-omod",
602 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
603 .dependencies = &[_]*const Feature {
604 },
605};
606
607pub const feature_sdwaOutModsVopc = Feature{
608 .name = "sdwaOutModsVopc",
609 .llvm_name = "sdwa-out-mods-vopc",
610 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
611 .dependencies = &[_]*const Feature {
612 },
613};
614
615pub const feature_sdwaScalar = Feature{
616 .name = "sdwaScalar",
617 .llvm_name = "sdwa-scalar",
618 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
619 .dependencies = &[_]*const Feature {
620 },
621};
622
623pub const feature_sdwaSdst = Feature{
624 .name = "sdwaSdst",
625 .llvm_name = "sdwa-sdst",
626 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
627 .dependencies = &[_]*const Feature {
628 },
629};
630
631pub const feature_sgprInitBug = Feature{
632 .name = "sgprInitBug",
633 .llvm_name = "sgpr-init-bug",
634 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
635 .dependencies = &[_]*const Feature {
636 },
637};
638
639pub const feature_smemToVectorWriteHazard = Feature{
640 .name = "smemToVectorWriteHazard",
641 .llvm_name = "smem-to-vector-write-hazard",
642 .description = "s_load_dword followed by v_cmp page faults",
643 .dependencies = &[_]*const Feature {
644 },
645};
646
647pub const feature_sMemrealtime = Feature{
648 .name = "sMemrealtime",
649 .llvm_name = "s-memrealtime",
650 .description = "Has s_memrealtime instruction",
651 .dependencies = &[_]*const Feature {
652 },
653};
654
655pub const feature_sramEcc = Feature{
656 .name = "sramEcc",
657 .llvm_name = "sram-ecc",
658 .description = "Enable SRAM ECC",
659 .dependencies = &[_]*const Feature {
660 },
661};
662
663pub const feature_scalarAtomics = Feature{
664 .name = "scalarAtomics",
665 .llvm_name = "scalar-atomics",
666 .description = "Has atomic scalar memory instructions",
667 .dependencies = &[_]*const Feature {
668 },
669};
670
671pub const feature_scalarFlatScratchInsts = Feature{
672 .name = "scalarFlatScratchInsts",
673 .llvm_name = "scalar-flat-scratch-insts",
674 .description = "Have s_scratch_* flat memory instructions",
675 .dependencies = &[_]*const Feature {
676 },
677};
678
679pub const feature_scalarStores = Feature{
680 .name = "scalarStores",
681 .llvm_name = "scalar-stores",
682 .description = "Has store scalar memory instructions",
683 .dependencies = &[_]*const Feature {
684 },
685};
686
687pub const feature_trapHandler = Feature{
688 .name = "trapHandler",
689 .llvm_name = "trap-handler",
690 .description = "Trap handler support",
691 .dependencies = &[_]*const Feature {
692 },
693};
694
695pub const feature_trigReducedRange = Feature{
696 .name = "trigReducedRange",
697 .llvm_name = "trig-reduced-range",
698 .description = "Requires use of fract on arguments to trig instructions",
699 .dependencies = &[_]*const Feature {
700 },
701};
702
703pub const feature_unalignedBufferAccess = Feature{
704 .name = "unalignedBufferAccess",
705 .llvm_name = "unaligned-buffer-access",
706 .description = "Support unaligned global loads and stores",
707 .dependencies = &[_]*const Feature {
708 },
709};
710
711pub const feature_unalignedScratchAccess = Feature{
712 .name = "unalignedScratchAccess",
713 .llvm_name = "unaligned-scratch-access",
714 .description = "Support unaligned scratch loads and stores",
715 .dependencies = &[_]*const Feature {
716 },
717};
718
719pub const feature_unpackedD16Vmem = Feature{
720 .name = "unpackedD16Vmem",
721 .llvm_name = "unpacked-d16-vmem",
722 .description = "Has unpacked d16 vmem instructions",
723 .dependencies = &[_]*const Feature {
724 },
725};
726
727pub const feature_vgprIndexMode = Feature{
728 .name = "vgprIndexMode",
729 .llvm_name = "vgpr-index-mode",
730 .description = "Has VGPR mode register indexing",
731 .dependencies = &[_]*const Feature {
732 },
733};
734
735pub const feature_vmemToScalarWriteHazard = Feature{
736 .name = "vmemToScalarWriteHazard",
737 .llvm_name = "vmem-to-scalar-write-hazard",
738 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
739 .dependencies = &[_]*const Feature {
740 },
741};
742
743pub const feature_vop3Literal = Feature{
744 .name = "vop3Literal",
745 .llvm_name = "vop3-literal",
746 .description = "Can use one literal in VOP3",
747 .dependencies = &[_]*const Feature {
748 },
749};
750
751pub const feature_vop3p = Feature{
752 .name = "vop3p",
753 .llvm_name = "vop3p",
754 .description = "Has VOP3P packed instructions",
755 .dependencies = &[_]*const Feature {
756 },
757};
758
759pub const feature_vcmpxExecWarHazard = Feature{
760 .name = "vcmpxExecWarHazard",
761 .llvm_name = "vcmpx-exec-war-hazard",
762 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
763 .dependencies = &[_]*const Feature {
764 },
765};
766
767pub const feature_vcmpxPermlaneHazard = Feature{
768 .name = "vcmpxPermlaneHazard",
769 .llvm_name = "vcmpx-permlane-hazard",
770 .description = "TODO: describe me",
771 .dependencies = &[_]*const Feature {
772 },
773};
774
775pub const feature_vscnt = Feature{
776 .name = "vscnt",
777 .llvm_name = "vscnt",
778 .description = "Has separate store vscnt counter",
779 .dependencies = &[_]*const Feature {
780 },
781};
782
783pub const feature_wavefrontsize16 = Feature{
784 .name = "wavefrontsize16",
785 .llvm_name = "wavefrontsize16",
786 .description = "The number of threads per wavefront",
787 .dependencies = &[_]*const Feature {
788 },
789};
790
791pub const feature_wavefrontsize32 = Feature{
792 .name = "wavefrontsize32",
793 .llvm_name = "wavefrontsize32",
794 .description = "The number of threads per wavefront",
795 .dependencies = &[_]*const Feature {
796 },
797};
798
799pub const feature_wavefrontsize64 = Feature{
800 .name = "wavefrontsize64",
801 .llvm_name = "wavefrontsize64",
802 .description = "The number of threads per wavefront",
803 .dependencies = &[_]*const Feature {
804 },
805};
806
807pub const feature_xnack = Feature{
808 .name = "xnack",
809 .llvm_name = "xnack",
810 .description = "Enable XNACK support",
811 .dependencies = &[_]*const Feature {
812 },
813};
814
815pub const feature_halfRate64Ops = Feature{
816 .name = "halfRate64Ops",
817 .llvm_name = "half-rate-64-ops",
818 .description = "Most fp64 instructions are half rate instead of quarter",
819 .dependencies = &[_]*const Feature {
820 },
821};
822
823pub const features = &[_]*const Feature {
824 &feature_BitInsts16,
825 &feature_addNoCarryInsts,
826 &feature_apertureRegs,
827 &feature_atomicFaddInsts,
828 &feature_autoWaitcntBeforeBarrier,
829 &feature_ciInsts,
830 &feature_codeObjectV3,
831 &feature_cumode,
832 &feature_dlInsts,
833 &feature_dpp,
834 &feature_dpp8,
835 &feature_noSramEccSupport,
836 &feature_noXnackSupport,
837 &feature_dot1Insts,
838 &feature_dot2Insts,
839 &feature_dot3Insts,
840 &feature_dot4Insts,
841 &feature_dot5Insts,
842 &feature_dot6Insts,
843 &feature_DumpCode,
844 &feature_dumpcode,
845 &feature_enableDs128,
846 &feature_loadStoreOpt,
847 &feature_enablePrtStrictNull,
848 &feature_siScheduler,
849 &feature_unsafeDsOffsetFolding,
850 &feature_fmaf,
851 &feature_fp16Denormals,
852 &feature_fp32Denormals,
853 &feature_fp64,
854 &feature_fp64Denormals,
855 &feature_fp64Fp16Denormals,
856 &feature_fpExceptions,
857 &feature_fastFmaf,
858 &feature_flatAddressSpace,
859 &feature_flatForGlobal,
860 &feature_flatGlobalInsts,
861 &feature_flatInstOffsets,
862 &feature_flatScratchInsts,
863 &feature_flatSegmentOffsetBug,
864 &feature_fmaMixInsts,
865 &feature_gcn3Encoding,
866 &feature_gfx7Gfx8Gfx9Insts,
867 &feature_gfx8Insts,
868 &feature_gfx9Insts,
869 &feature_gfx10Insts,
870 &feature_instFwdPrefetchBug,
871 &feature_intClampInsts,
872 &feature_inv2piInlineImm,
873 &feature_ldsbankcount16,
874 &feature_ldsbankcount32,
875 &feature_ldsBranchVmemWarHazard,
876 &feature_ldsMisalignedBug,
877 &feature_localmemorysize0,
878 &feature_localmemorysize32768,
879 &feature_localmemorysize65536,
880 &feature_maiInsts,
881 &feature_mimgR128,
882 &feature_madMixInsts,
883 &feature_maxPrivateElementSize4,
884 &feature_maxPrivateElementSize8,
885 &feature_maxPrivateElementSize16,
886 &feature_movrel,
887 &feature_nsaEncoding,
888 &feature_nsaToVmemBug,
889 &feature_noDataDepHazard,
890 &feature_noSdstCmpx,
891 &feature_offset3fBug,
892 &feature_pkFmacF16Inst,
893 &feature_promoteAlloca,
894 &feature_r128A16,
895 &feature_registerBanking,
896 &feature_sdwa,
897 &feature_sdwaMav,
898 &feature_sdwaOmod,
899 &feature_sdwaOutModsVopc,
900 &feature_sdwaScalar,
901 &feature_sdwaSdst,
902 &feature_sgprInitBug,
903 &feature_smemToVectorWriteHazard,
904 &feature_sMemrealtime,
905 &feature_sramEcc,
906 &feature_scalarAtomics,
907 &feature_scalarFlatScratchInsts,
908 &feature_scalarStores,
909 &feature_trapHandler,
910 &feature_trigReducedRange,
911 &feature_unalignedBufferAccess,
912 &feature_unalignedScratchAccess,
913 &feature_unpackedD16Vmem,
914 &feature_vgprIndexMode,
915 &feature_vmemToScalarWriteHazard,
916 &feature_vop3Literal,
917 &feature_vop3p,
918 &feature_vcmpxExecWarHazard,
919 &feature_vcmpxPermlaneHazard,
920 &feature_vscnt,
921 &feature_wavefrontsize16,
922 &feature_wavefrontsize32,
923 &feature_wavefrontsize64,
924 &feature_xnack,
925 &feature_halfRate64Ops,
926};
927
928pub const cpu_bonaire = Cpu{
929 .name = "bonaire",
930 .llvm_name = "bonaire",
931 .dependencies = &[_]*const Feature {
932 &feature_codeObjectV3,
933 &feature_noXnackSupport,
934 &feature_ldsbankcount32,
935 &feature_trigReducedRange,
936 &feature_gfx7Gfx8Gfx9Insts,
937 &feature_movrel,
938 &feature_flatAddressSpace,
939 &feature_wavefrontsize64,
940 &feature_fp64,
941 &feature_mimgR128,
942 &feature_noSramEccSupport,
943 &feature_ciInsts,
944 &feature_localmemorysize65536,
945 },
946};
947
948pub const cpu_carrizo = Cpu{
949 .name = "carrizo",
950 .llvm_name = "carrizo",
951 .dependencies = &[_]*const Feature {
952 &feature_codeObjectV3,
953 &feature_fastFmaf,
954 &feature_ldsbankcount32,
955 &feature_unpackedD16Vmem,
956 &feature_trigReducedRange,
957 &feature_vgprIndexMode,
958 &feature_movrel,
959 &feature_fp64,
960 &feature_gcn3Encoding,
961 &feature_mimgR128,
962 &feature_sdwa,
963 &feature_gfx7Gfx8Gfx9Insts,
964 &feature_intClampInsts,
965 &feature_ciInsts,
966 &feature_sdwaOutModsVopc,
967 &feature_sMemrealtime,
968 &feature_flatAddressSpace,
969 &feature_inv2piInlineImm,
970 &feature_wavefrontsize64,
971 &feature_noSramEccSupport,
972 &feature_sdwaMav,
973 &feature_localmemorysize65536,
974 &feature_scalarStores,
975 &feature_gfx8Insts,
976 &feature_dpp,
977 &feature_BitInsts16,
978 &feature_xnack,
979 &feature_halfRate64Ops,
980 },
981};
982
983pub const cpu_fiji = Cpu{
984 .name = "fiji",
985 .llvm_name = "fiji",
986 .dependencies = &[_]*const Feature {
987 &feature_codeObjectV3,
988 &feature_noXnackSupport,
989 &feature_ldsbankcount32,
990 &feature_unpackedD16Vmem,
991 &feature_trigReducedRange,
992 &feature_vgprIndexMode,
993 &feature_movrel,
994 &feature_fp64,
995 &feature_gcn3Encoding,
996 &feature_mimgR128,
997 &feature_sdwa,
998 &feature_gfx7Gfx8Gfx9Insts,
999 &feature_intClampInsts,
1000 &feature_ciInsts,
1001 &feature_sdwaOutModsVopc,
1002 &feature_sMemrealtime,
1003 &feature_flatAddressSpace,
1004 &feature_inv2piInlineImm,
1005 &feature_wavefrontsize64,
1006 &feature_noSramEccSupport,
1007 &feature_sdwaMav,
1008 &feature_localmemorysize65536,
1009 &feature_scalarStores,
1010 &feature_gfx8Insts,
1011 &feature_dpp,
1012 &feature_BitInsts16,
1013 },
1014};
1015
1016pub const cpu_generic = Cpu{
1017 .name = "generic",
1018 .llvm_name = "generic",
1019 .dependencies = &[_]*const Feature {
1020 &feature_wavefrontsize64,
1021 },
1022};
1023
1024pub const cpu_genericHsa = Cpu{
1025 .name = "genericHsa",
1026 .llvm_name = "generic-hsa",
1027 .dependencies = &[_]*const Feature {
1028 &feature_flatAddressSpace,
1029 &feature_wavefrontsize64,
1030 },
1031};
1032
1033pub const cpu_gfx1010 = Cpu{
1034 .name = "gfx1010",
1035 .llvm_name = "gfx1010",
1036 .dependencies = &[_]*const Feature {
1037 &feature_codeObjectV3,
1038 &feature_dlInsts,
1039 &feature_noXnackSupport,
1040 &feature_flatSegmentOffsetBug,
1041 &feature_fmaMixInsts,
1042 &feature_movrel,
1043 &feature_registerBanking,
1044 &feature_addNoCarryInsts,
1045 &feature_fp64,
1046 &feature_sdwaScalar,
1047 &feature_flatGlobalInsts,
1048 &feature_mimgR128,
1049 &feature_flatInstOffsets,
1050 &feature_apertureRegs,
1051 &feature_noSdstCmpx,
1052 &feature_vop3p,
1053 &feature_sdwa,
1054 &feature_intClampInsts,
1055 &feature_sdwaSdst,
1056 &feature_noDataDepHazard,
1057 &feature_flatScratchInsts,
1058 &feature_ciInsts,
1059 &feature_sMemrealtime,
1060 &feature_pkFmacF16Inst,
1061 &feature_dpp8,
1062 &feature_flatAddressSpace,
1063 &feature_inv2piInlineImm,
1064 &feature_fastFmaf,
1065 &feature_noSramEccSupport,
1066 &feature_gfx10Insts,
1067 &feature_localmemorysize65536,
1068 &feature_gfx9Insts,
1069 &feature_gfx8Insts,
1070 &feature_dpp,
1071 &feature_BitInsts16,
1072 &feature_vop3Literal,
1073 &feature_sdwaOmod,
1074 &feature_vscnt,
1075 &feature_instFwdPrefetchBug,
1076 &feature_ldsbankcount32,
1077 &feature_ldsBranchVmemWarHazard,
1078 &feature_ldsMisalignedBug,
1079 &feature_nsaEncoding,
1080 &feature_nsaToVmemBug,
1081 &feature_offset3fBug,
1082 &feature_smemToVectorWriteHazard,
1083 &feature_scalarAtomics,
1084 &feature_scalarFlatScratchInsts,
1085 &feature_scalarStores,
1086 &feature_vmemToScalarWriteHazard,
1087 &feature_vcmpxExecWarHazard,
1088 &feature_vcmpxPermlaneHazard,
1089 &feature_wavefrontsize32,
1090 },
1091};
1092
1093pub const cpu_gfx1011 = Cpu{
1094 .name = "gfx1011",
1095 .llvm_name = "gfx1011",
1096 .dependencies = &[_]*const Feature {
1097 &feature_codeObjectV3,
1098 &feature_dlInsts,
1099 &feature_noXnackSupport,
1100 &feature_dot1Insts,
1101 &feature_dot2Insts,
1102 &feature_dot5Insts,
1103 &feature_dot6Insts,
1104 &feature_flatSegmentOffsetBug,
1105 &feature_fmaMixInsts,
1106 &feature_movrel,
1107 &feature_registerBanking,
1108 &feature_addNoCarryInsts,
1109 &feature_fp64,
1110 &feature_sdwaScalar,
1111 &feature_flatGlobalInsts,
1112 &feature_mimgR128,
1113 &feature_flatInstOffsets,
1114 &feature_apertureRegs,
1115 &feature_noSdstCmpx,
1116 &feature_vop3p,
1117 &feature_sdwa,
1118 &feature_intClampInsts,
1119 &feature_sdwaSdst,
1120 &feature_noDataDepHazard,
1121 &feature_flatScratchInsts,
1122 &feature_ciInsts,
1123 &feature_sMemrealtime,
1124 &feature_pkFmacF16Inst,
1125 &feature_dpp8,
1126 &feature_flatAddressSpace,
1127 &feature_inv2piInlineImm,
1128 &feature_fastFmaf,
1129 &feature_noSramEccSupport,
1130 &feature_gfx10Insts,
1131 &feature_localmemorysize65536,
1132 &feature_gfx9Insts,
1133 &feature_gfx8Insts,
1134 &feature_dpp,
1135 &feature_BitInsts16,
1136 &feature_vop3Literal,
1137 &feature_sdwaOmod,
1138 &feature_vscnt,
1139 &feature_instFwdPrefetchBug,
1140 &feature_ldsbankcount32,
1141 &feature_ldsBranchVmemWarHazard,
1142 &feature_nsaEncoding,
1143 &feature_nsaToVmemBug,
1144 &feature_offset3fBug,
1145 &feature_smemToVectorWriteHazard,
1146 &feature_scalarAtomics,
1147 &feature_scalarFlatScratchInsts,
1148 &feature_scalarStores,
1149 &feature_vmemToScalarWriteHazard,
1150 &feature_vcmpxExecWarHazard,
1151 &feature_vcmpxPermlaneHazard,
1152 &feature_wavefrontsize32,
1153 },
1154};
1155
1156pub const cpu_gfx1012 = Cpu{
1157 .name = "gfx1012",
1158 .llvm_name = "gfx1012",
1159 .dependencies = &[_]*const Feature {
1160 &feature_codeObjectV3,
1161 &feature_dlInsts,
1162 &feature_noXnackSupport,
1163 &feature_dot1Insts,
1164 &feature_dot2Insts,
1165 &feature_dot5Insts,
1166 &feature_dot6Insts,
1167 &feature_flatSegmentOffsetBug,
1168 &feature_fmaMixInsts,
1169 &feature_movrel,
1170 &feature_registerBanking,
1171 &feature_addNoCarryInsts,
1172 &feature_fp64,
1173 &feature_sdwaScalar,
1174 &feature_flatGlobalInsts,
1175 &feature_mimgR128,
1176 &feature_flatInstOffsets,
1177 &feature_apertureRegs,
1178 &feature_noSdstCmpx,
1179 &feature_vop3p,
1180 &feature_sdwa,
1181 &feature_intClampInsts,
1182 &feature_sdwaSdst,
1183 &feature_noDataDepHazard,
1184 &feature_flatScratchInsts,
1185 &feature_ciInsts,
1186 &feature_sMemrealtime,
1187 &feature_pkFmacF16Inst,
1188 &feature_dpp8,
1189 &feature_flatAddressSpace,
1190 &feature_inv2piInlineImm,
1191 &feature_fastFmaf,
1192 &feature_noSramEccSupport,
1193 &feature_gfx10Insts,
1194 &feature_localmemorysize65536,
1195 &feature_gfx9Insts,
1196 &feature_gfx8Insts,
1197 &feature_dpp,
1198 &feature_BitInsts16,
1199 &feature_vop3Literal,
1200 &feature_sdwaOmod,
1201 &feature_vscnt,
1202 &feature_instFwdPrefetchBug,
1203 &feature_ldsbankcount32,
1204 &feature_ldsBranchVmemWarHazard,
1205 &feature_ldsMisalignedBug,
1206 &feature_nsaEncoding,
1207 &feature_nsaToVmemBug,
1208 &feature_offset3fBug,
1209 &feature_smemToVectorWriteHazard,
1210 &feature_scalarAtomics,
1211 &feature_scalarFlatScratchInsts,
1212 &feature_scalarStores,
1213 &feature_vmemToScalarWriteHazard,
1214 &feature_vcmpxExecWarHazard,
1215 &feature_vcmpxPermlaneHazard,
1216 &feature_wavefrontsize32,
1217 },
1218};
1219
1220pub const cpu_gfx600 = Cpu{
1221 .name = "gfx600",
1222 .llvm_name = "gfx600",
1223 .dependencies = &[_]*const Feature {
1224 &feature_codeObjectV3,
1225 &feature_noXnackSupport,
1226 &feature_fastFmaf,
1227 &feature_ldsbankcount32,
1228 &feature_trigReducedRange,
1229 &feature_movrel,
1230 &feature_wavefrontsize64,
1231 &feature_fp64,
1232 &feature_mimgR128,
1233 &feature_noSramEccSupport,
1234 &feature_localmemorysize32768,
1235 &feature_halfRate64Ops,
1236 },
1237};
1238
1239pub const cpu_gfx601 = Cpu{
1240 .name = "gfx601",
1241 .llvm_name = "gfx601",
1242 .dependencies = &[_]*const Feature {
1243 &feature_codeObjectV3,
1244 &feature_noXnackSupport,
1245 &feature_ldsbankcount32,
1246 &feature_trigReducedRange,
1247 &feature_movrel,
1248 &feature_wavefrontsize64,
1249 &feature_fp64,
1250 &feature_mimgR128,
1251 &feature_noSramEccSupport,
1252 &feature_localmemorysize32768,
1253 },
1254};
1255
1256pub const cpu_gfx700 = Cpu{
1257 .name = "gfx700",
1258 .llvm_name = "gfx700",
1259 .dependencies = &[_]*const Feature {
1260 &feature_codeObjectV3,
1261 &feature_noXnackSupport,
1262 &feature_ldsbankcount32,
1263 &feature_trigReducedRange,
1264 &feature_gfx7Gfx8Gfx9Insts,
1265 &feature_movrel,
1266 &feature_flatAddressSpace,
1267 &feature_wavefrontsize64,
1268 &feature_fp64,
1269 &feature_mimgR128,
1270 &feature_noSramEccSupport,
1271 &feature_ciInsts,
1272 &feature_localmemorysize65536,
1273 },
1274};
1275
1276pub const cpu_gfx701 = Cpu{
1277 .name = "gfx701",
1278 .llvm_name = "gfx701",
1279 .dependencies = &[_]*const Feature {
1280 &feature_codeObjectV3,
1281 &feature_noXnackSupport,
1282 &feature_fastFmaf,
1283 &feature_ldsbankcount32,
1284 &feature_trigReducedRange,
1285 &feature_gfx7Gfx8Gfx9Insts,
1286 &feature_movrel,
1287 &feature_flatAddressSpace,
1288 &feature_wavefrontsize64,
1289 &feature_fp64,
1290 &feature_mimgR128,
1291 &feature_noSramEccSupport,
1292 &feature_ciInsts,
1293 &feature_localmemorysize65536,
1294 &feature_halfRate64Ops,
1295 },
1296};
1297
1298pub const cpu_gfx702 = Cpu{
1299 .name = "gfx702",
1300 .llvm_name = "gfx702",
1301 .dependencies = &[_]*const Feature {
1302 &feature_codeObjectV3,
1303 &feature_noXnackSupport,
1304 &feature_fastFmaf,
1305 &feature_ldsbankcount16,
1306 &feature_trigReducedRange,
1307 &feature_gfx7Gfx8Gfx9Insts,
1308 &feature_movrel,
1309 &feature_flatAddressSpace,
1310 &feature_wavefrontsize64,
1311 &feature_fp64,
1312 &feature_mimgR128,
1313 &feature_noSramEccSupport,
1314 &feature_ciInsts,
1315 &feature_localmemorysize65536,
1316 },
1317};
1318
1319pub const cpu_gfx703 = Cpu{
1320 .name = "gfx703",
1321 .llvm_name = "gfx703",
1322 .dependencies = &[_]*const Feature {
1323 &feature_codeObjectV3,
1324 &feature_noXnackSupport,
1325 &feature_ldsbankcount16,
1326 &feature_trigReducedRange,
1327 &feature_gfx7Gfx8Gfx9Insts,
1328 &feature_movrel,
1329 &feature_flatAddressSpace,
1330 &feature_wavefrontsize64,
1331 &feature_fp64,
1332 &feature_mimgR128,
1333 &feature_noSramEccSupport,
1334 &feature_ciInsts,
1335 &feature_localmemorysize65536,
1336 },
1337};
1338
1339pub const cpu_gfx704 = Cpu{
1340 .name = "gfx704",
1341 .llvm_name = "gfx704",
1342 .dependencies = &[_]*const Feature {
1343 &feature_codeObjectV3,
1344 &feature_noXnackSupport,
1345 &feature_ldsbankcount32,
1346 &feature_trigReducedRange,
1347 &feature_gfx7Gfx8Gfx9Insts,
1348 &feature_movrel,
1349 &feature_flatAddressSpace,
1350 &feature_wavefrontsize64,
1351 &feature_fp64,
1352 &feature_mimgR128,
1353 &feature_noSramEccSupport,
1354 &feature_ciInsts,
1355 &feature_localmemorysize65536,
1356 },
1357};
1358
1359pub const cpu_gfx801 = Cpu{
1360 .name = "gfx801",
1361 .llvm_name = "gfx801",
1362 .dependencies = &[_]*const Feature {
1363 &feature_codeObjectV3,
1364 &feature_fastFmaf,
1365 &feature_ldsbankcount32,
1366 &feature_unpackedD16Vmem,
1367 &feature_trigReducedRange,
1368 &feature_vgprIndexMode,
1369 &feature_movrel,
1370 &feature_fp64,
1371 &feature_gcn3Encoding,
1372 &feature_mimgR128,
1373 &feature_sdwa,
1374 &feature_gfx7Gfx8Gfx9Insts,
1375 &feature_intClampInsts,
1376 &feature_ciInsts,
1377 &feature_sdwaOutModsVopc,
1378 &feature_sMemrealtime,
1379 &feature_flatAddressSpace,
1380 &feature_inv2piInlineImm,
1381 &feature_wavefrontsize64,
1382 &feature_noSramEccSupport,
1383 &feature_sdwaMav,
1384 &feature_localmemorysize65536,
1385 &feature_scalarStores,
1386 &feature_gfx8Insts,
1387 &feature_dpp,
1388 &feature_BitInsts16,
1389 &feature_xnack,
1390 &feature_halfRate64Ops,
1391 },
1392};
1393
1394pub const cpu_gfx802 = Cpu{
1395 .name = "gfx802",
1396 .llvm_name = "gfx802",
1397 .dependencies = &[_]*const Feature {
1398 &feature_codeObjectV3,
1399 &feature_noXnackSupport,
1400 &feature_ldsbankcount32,
1401 &feature_sgprInitBug,
1402 &feature_unpackedD16Vmem,
1403 &feature_trigReducedRange,
1404 &feature_vgprIndexMode,
1405 &feature_movrel,
1406 &feature_fp64,
1407 &feature_gcn3Encoding,
1408 &feature_mimgR128,
1409 &feature_sdwa,
1410 &feature_gfx7Gfx8Gfx9Insts,
1411 &feature_intClampInsts,
1412 &feature_ciInsts,
1413 &feature_sdwaOutModsVopc,
1414 &feature_sMemrealtime,
1415 &feature_flatAddressSpace,
1416 &feature_inv2piInlineImm,
1417 &feature_wavefrontsize64,
1418 &feature_noSramEccSupport,
1419 &feature_sdwaMav,
1420 &feature_localmemorysize65536,
1421 &feature_scalarStores,
1422 &feature_gfx8Insts,
1423 &feature_dpp,
1424 &feature_BitInsts16,
1425 },
1426};
1427
1428pub const cpu_gfx803 = Cpu{
1429 .name = "gfx803",
1430 .llvm_name = "gfx803",
1431 .dependencies = &[_]*const Feature {
1432 &feature_codeObjectV3,
1433 &feature_noXnackSupport,
1434 &feature_ldsbankcount32,
1435 &feature_unpackedD16Vmem,
1436 &feature_trigReducedRange,
1437 &feature_vgprIndexMode,
1438 &feature_movrel,
1439 &feature_fp64,
1440 &feature_gcn3Encoding,
1441 &feature_mimgR128,
1442 &feature_sdwa,
1443 &feature_gfx7Gfx8Gfx9Insts,
1444 &feature_intClampInsts,
1445 &feature_ciInsts,
1446 &feature_sdwaOutModsVopc,
1447 &feature_sMemrealtime,
1448 &feature_flatAddressSpace,
1449 &feature_inv2piInlineImm,
1450 &feature_wavefrontsize64,
1451 &feature_noSramEccSupport,
1452 &feature_sdwaMav,
1453 &feature_localmemorysize65536,
1454 &feature_scalarStores,
1455 &feature_gfx8Insts,
1456 &feature_dpp,
1457 &feature_BitInsts16,
1458 },
1459};
1460
1461pub const cpu_gfx810 = Cpu{
1462 .name = "gfx810",
1463 .llvm_name = "gfx810",
1464 .dependencies = &[_]*const Feature {
1465 &feature_codeObjectV3,
1466 &feature_ldsbankcount16,
1467 &feature_trigReducedRange,
1468 &feature_vgprIndexMode,
1469 &feature_movrel,
1470 &feature_fp64,
1471 &feature_gcn3Encoding,
1472 &feature_mimgR128,
1473 &feature_sdwa,
1474 &feature_gfx7Gfx8Gfx9Insts,
1475 &feature_intClampInsts,
1476 &feature_ciInsts,
1477 &feature_sdwaOutModsVopc,
1478 &feature_sMemrealtime,
1479 &feature_flatAddressSpace,
1480 &feature_inv2piInlineImm,
1481 &feature_wavefrontsize64,
1482 &feature_noSramEccSupport,
1483 &feature_sdwaMav,
1484 &feature_localmemorysize65536,
1485 &feature_scalarStores,
1486 &feature_gfx8Insts,
1487 &feature_dpp,
1488 &feature_BitInsts16,
1489 &feature_xnack,
1490 },
1491};
1492
1493pub const cpu_gfx900 = Cpu{
1494 .name = "gfx900",
1495 .llvm_name = "gfx900",
1496 .dependencies = &[_]*const Feature {
1497 &feature_codeObjectV3,
1498 &feature_noSramEccSupport,
1499 &feature_noXnackSupport,
1500 &feature_vgprIndexMode,
1501 &feature_addNoCarryInsts,
1502 &feature_fp64,
1503 &feature_gcn3Encoding,
1504 &feature_sdwaScalar,
1505 &feature_flatGlobalInsts,
1506 &feature_scalarFlatScratchInsts,
1507 &feature_flatInstOffsets,
1508 &feature_apertureRegs,
1509 &feature_vop3p,
1510 &feature_sdwa,
1511 &feature_gfx7Gfx8Gfx9Insts,
1512 &feature_intClampInsts,
1513 &feature_sdwaSdst,
1514 &feature_flatScratchInsts,
1515 &feature_ciInsts,
1516 &feature_r128A16,
1517 &feature_sMemrealtime,
1518 &feature_flatAddressSpace,
1519 &feature_scalarAtomics,
1520 &feature_inv2piInlineImm,
1521 &feature_fastFmaf,
1522 &feature_wavefrontsize64,
1523 &feature_localmemorysize65536,
1524 &feature_scalarStores,
1525 &feature_gfx9Insts,
1526 &feature_gfx8Insts,
1527 &feature_dpp,
1528 &feature_BitInsts16,
1529 &feature_sdwaOmod,
1530 &feature_ldsbankcount32,
1531 &feature_madMixInsts,
1532 },
1533};
1534
1535pub const cpu_gfx902 = Cpu{
1536 .name = "gfx902",
1537 .llvm_name = "gfx902",
1538 .dependencies = &[_]*const Feature {
1539 &feature_codeObjectV3,
1540 &feature_noSramEccSupport,
1541 &feature_vgprIndexMode,
1542 &feature_addNoCarryInsts,
1543 &feature_fp64,
1544 &feature_gcn3Encoding,
1545 &feature_sdwaScalar,
1546 &feature_flatGlobalInsts,
1547 &feature_scalarFlatScratchInsts,
1548 &feature_flatInstOffsets,
1549 &feature_apertureRegs,
1550 &feature_vop3p,
1551 &feature_sdwa,
1552 &feature_gfx7Gfx8Gfx9Insts,
1553 &feature_intClampInsts,
1554 &feature_sdwaSdst,
1555 &feature_flatScratchInsts,
1556 &feature_ciInsts,
1557 &feature_r128A16,
1558 &feature_sMemrealtime,
1559 &feature_flatAddressSpace,
1560 &feature_scalarAtomics,
1561 &feature_inv2piInlineImm,
1562 &feature_fastFmaf,
1563 &feature_wavefrontsize64,
1564 &feature_localmemorysize65536,
1565 &feature_scalarStores,
1566 &feature_gfx9Insts,
1567 &feature_gfx8Insts,
1568 &feature_dpp,
1569 &feature_BitInsts16,
1570 &feature_sdwaOmod,
1571 &feature_ldsbankcount32,
1572 &feature_madMixInsts,
1573 &feature_xnack,
1574 },
1575};
1576
1577pub const cpu_gfx904 = Cpu{
1578 .name = "gfx904",
1579 .llvm_name = "gfx904",
1580 .dependencies = &[_]*const Feature {
1581 &feature_codeObjectV3,
1582 &feature_noSramEccSupport,
1583 &feature_noXnackSupport,
1584 &feature_fmaMixInsts,
1585 &feature_vgprIndexMode,
1586 &feature_addNoCarryInsts,
1587 &feature_fp64,
1588 &feature_gcn3Encoding,
1589 &feature_sdwaScalar,
1590 &feature_flatGlobalInsts,
1591 &feature_scalarFlatScratchInsts,
1592 &feature_flatInstOffsets,
1593 &feature_apertureRegs,
1594 &feature_vop3p,
1595 &feature_sdwa,
1596 &feature_gfx7Gfx8Gfx9Insts,
1597 &feature_intClampInsts,
1598 &feature_sdwaSdst,
1599 &feature_flatScratchInsts,
1600 &feature_ciInsts,
1601 &feature_r128A16,
1602 &feature_sMemrealtime,
1603 &feature_flatAddressSpace,
1604 &feature_scalarAtomics,
1605 &feature_inv2piInlineImm,
1606 &feature_fastFmaf,
1607 &feature_wavefrontsize64,
1608 &feature_localmemorysize65536,
1609 &feature_scalarStores,
1610 &feature_gfx9Insts,
1611 &feature_gfx8Insts,
1612 &feature_dpp,
1613 &feature_BitInsts16,
1614 &feature_sdwaOmod,
1615 &feature_ldsbankcount32,
1616 },
1617};
1618
1619pub const cpu_gfx906 = Cpu{
1620 .name = "gfx906",
1621 .llvm_name = "gfx906",
1622 .dependencies = &[_]*const Feature {
1623 &feature_codeObjectV3,
1624 &feature_dlInsts,
1625 &feature_noXnackSupport,
1626 &feature_dot1Insts,
1627 &feature_dot2Insts,
1628 &feature_fmaMixInsts,
1629 &feature_vgprIndexMode,
1630 &feature_addNoCarryInsts,
1631 &feature_fp64,
1632 &feature_gcn3Encoding,
1633 &feature_sdwaScalar,
1634 &feature_flatGlobalInsts,
1635 &feature_scalarFlatScratchInsts,
1636 &feature_flatInstOffsets,
1637 &feature_apertureRegs,
1638 &feature_vop3p,
1639 &feature_sdwa,
1640 &feature_gfx7Gfx8Gfx9Insts,
1641 &feature_intClampInsts,
1642 &feature_sdwaSdst,
1643 &feature_flatScratchInsts,
1644 &feature_ciInsts,
1645 &feature_r128A16,
1646 &feature_sMemrealtime,
1647 &feature_flatAddressSpace,
1648 &feature_scalarAtomics,
1649 &feature_inv2piInlineImm,
1650 &feature_fastFmaf,
1651 &feature_wavefrontsize64,
1652 &feature_localmemorysize65536,
1653 &feature_scalarStores,
1654 &feature_gfx9Insts,
1655 &feature_gfx8Insts,
1656 &feature_dpp,
1657 &feature_BitInsts16,
1658 &feature_sdwaOmod,
1659 &feature_ldsbankcount32,
1660 &feature_halfRate64Ops,
1661 },
1662};
1663
1664pub const cpu_gfx908 = Cpu{
1665 .name = "gfx908",
1666 .llvm_name = "gfx908",
1667 .dependencies = &[_]*const Feature {
1668 &feature_atomicFaddInsts,
1669 &feature_codeObjectV3,
1670 &feature_dlInsts,
1671 &feature_dot1Insts,
1672 &feature_dot2Insts,
1673 &feature_dot3Insts,
1674 &feature_dot4Insts,
1675 &feature_dot5Insts,
1676 &feature_dot6Insts,
1677 &feature_fmaMixInsts,
1678 &feature_vgprIndexMode,
1679 &feature_addNoCarryInsts,
1680 &feature_fp64,
1681 &feature_gcn3Encoding,
1682 &feature_sdwaScalar,
1683 &feature_flatGlobalInsts,
1684 &feature_scalarFlatScratchInsts,
1685 &feature_flatInstOffsets,
1686 &feature_apertureRegs,
1687 &feature_vop3p,
1688 &feature_sdwa,
1689 &feature_gfx7Gfx8Gfx9Insts,
1690 &feature_intClampInsts,
1691 &feature_sdwaSdst,
1692 &feature_flatScratchInsts,
1693 &feature_ciInsts,
1694 &feature_r128A16,
1695 &feature_sMemrealtime,
1696 &feature_flatAddressSpace,
1697 &feature_scalarAtomics,
1698 &feature_inv2piInlineImm,
1699 &feature_fastFmaf,
1700 &feature_wavefrontsize64,
1701 &feature_localmemorysize65536,
1702 &feature_scalarStores,
1703 &feature_gfx9Insts,
1704 &feature_gfx8Insts,
1705 &feature_dpp,
1706 &feature_BitInsts16,
1707 &feature_sdwaOmod,
1708 &feature_ldsbankcount32,
1709 &feature_maiInsts,
1710 &feature_pkFmacF16Inst,
1711 &feature_sramEcc,
1712 &feature_halfRate64Ops,
1713 },
1714};
1715
1716pub const cpu_gfx909 = Cpu{
1717 .name = "gfx909",
1718 .llvm_name = "gfx909",
1719 .dependencies = &[_]*const Feature {
1720 &feature_codeObjectV3,
1721 &feature_vgprIndexMode,
1722 &feature_addNoCarryInsts,
1723 &feature_fp64,
1724 &feature_gcn3Encoding,
1725 &feature_sdwaScalar,
1726 &feature_flatGlobalInsts,
1727 &feature_scalarFlatScratchInsts,
1728 &feature_flatInstOffsets,
1729 &feature_apertureRegs,
1730 &feature_vop3p,
1731 &feature_sdwa,
1732 &feature_gfx7Gfx8Gfx9Insts,
1733 &feature_intClampInsts,
1734 &feature_sdwaSdst,
1735 &feature_flatScratchInsts,
1736 &feature_ciInsts,
1737 &feature_r128A16,
1738 &feature_sMemrealtime,
1739 &feature_flatAddressSpace,
1740 &feature_scalarAtomics,
1741 &feature_inv2piInlineImm,
1742 &feature_fastFmaf,
1743 &feature_wavefrontsize64,
1744 &feature_localmemorysize65536,
1745 &feature_scalarStores,
1746 &feature_gfx9Insts,
1747 &feature_gfx8Insts,
1748 &feature_dpp,
1749 &feature_BitInsts16,
1750 &feature_sdwaOmod,
1751 &feature_ldsbankcount32,
1752 &feature_madMixInsts,
1753 &feature_xnack,
1754 },
1755};
1756
1757pub const cpu_hainan = Cpu{
1758 .name = "hainan",
1759 .llvm_name = "hainan",
1760 .dependencies = &[_]*const Feature {
1761 &feature_codeObjectV3,
1762 &feature_noXnackSupport,
1763 &feature_ldsbankcount32,
1764 &feature_trigReducedRange,
1765 &feature_movrel,
1766 &feature_wavefrontsize64,
1767 &feature_fp64,
1768 &feature_mimgR128,
1769 &feature_noSramEccSupport,
1770 &feature_localmemorysize32768,
1771 },
1772};
1773
1774pub const cpu_hawaii = Cpu{
1775 .name = "hawaii",
1776 .llvm_name = "hawaii",
1777 .dependencies = &[_]*const Feature {
1778 &feature_codeObjectV3,
1779 &feature_noXnackSupport,
1780 &feature_fastFmaf,
1781 &feature_ldsbankcount32,
1782 &feature_trigReducedRange,
1783 &feature_gfx7Gfx8Gfx9Insts,
1784 &feature_movrel,
1785 &feature_flatAddressSpace,
1786 &feature_wavefrontsize64,
1787 &feature_fp64,
1788 &feature_mimgR128,
1789 &feature_noSramEccSupport,
1790 &feature_ciInsts,
1791 &feature_localmemorysize65536,
1792 &feature_halfRate64Ops,
1793 },
1794};
1795
1796pub const cpu_iceland = Cpu{
1797 .name = "iceland",
1798 .llvm_name = "iceland",
1799 .dependencies = &[_]*const Feature {
1800 &feature_codeObjectV3,
1801 &feature_noXnackSupport,
1802 &feature_ldsbankcount32,
1803 &feature_sgprInitBug,
1804 &feature_unpackedD16Vmem,
1805 &feature_trigReducedRange,
1806 &feature_vgprIndexMode,
1807 &feature_movrel,
1808 &feature_fp64,
1809 &feature_gcn3Encoding,
1810 &feature_mimgR128,
1811 &feature_sdwa,
1812 &feature_gfx7Gfx8Gfx9Insts,
1813 &feature_intClampInsts,
1814 &feature_ciInsts,
1815 &feature_sdwaOutModsVopc,
1816 &feature_sMemrealtime,
1817 &feature_flatAddressSpace,
1818 &feature_inv2piInlineImm,
1819 &feature_wavefrontsize64,
1820 &feature_noSramEccSupport,
1821 &feature_sdwaMav,
1822 &feature_localmemorysize65536,
1823 &feature_scalarStores,
1824 &feature_gfx8Insts,
1825 &feature_dpp,
1826 &feature_BitInsts16,
1827 },
1828};
1829
1830pub const cpu_kabini = Cpu{
1831 .name = "kabini",
1832 .llvm_name = "kabini",
1833 .dependencies = &[_]*const Feature {
1834 &feature_codeObjectV3,
1835 &feature_noXnackSupport,
1836 &feature_ldsbankcount16,
1837 &feature_trigReducedRange,
1838 &feature_gfx7Gfx8Gfx9Insts,
1839 &feature_movrel,
1840 &feature_flatAddressSpace,
1841 &feature_wavefrontsize64,
1842 &feature_fp64,
1843 &feature_mimgR128,
1844 &feature_noSramEccSupport,
1845 &feature_ciInsts,
1846 &feature_localmemorysize65536,
1847 },
1848};
1849
1850pub const cpu_kaveri = Cpu{
1851 .name = "kaveri",
1852 .llvm_name = "kaveri",
1853 .dependencies = &[_]*const Feature {
1854 &feature_codeObjectV3,
1855 &feature_noXnackSupport,
1856 &feature_ldsbankcount32,
1857 &feature_trigReducedRange,
1858 &feature_gfx7Gfx8Gfx9Insts,
1859 &feature_movrel,
1860 &feature_flatAddressSpace,
1861 &feature_wavefrontsize64,
1862 &feature_fp64,
1863 &feature_mimgR128,
1864 &feature_noSramEccSupport,
1865 &feature_ciInsts,
1866 &feature_localmemorysize65536,
1867 },
1868};
1869
1870pub const cpu_mullins = Cpu{
1871 .name = "mullins",
1872 .llvm_name = "mullins",
1873 .dependencies = &[_]*const Feature {
1874 &feature_codeObjectV3,
1875 &feature_noXnackSupport,
1876 &feature_ldsbankcount16,
1877 &feature_trigReducedRange,
1878 &feature_gfx7Gfx8Gfx9Insts,
1879 &feature_movrel,
1880 &feature_flatAddressSpace,
1881 &feature_wavefrontsize64,
1882 &feature_fp64,
1883 &feature_mimgR128,
1884 &feature_noSramEccSupport,
1885 &feature_ciInsts,
1886 &feature_localmemorysize65536,
1887 },
1888};
1889
1890pub const cpu_oland = Cpu{
1891 .name = "oland",
1892 .llvm_name = "oland",
1893 .dependencies = &[_]*const Feature {
1894 &feature_codeObjectV3,
1895 &feature_noXnackSupport,
1896 &feature_ldsbankcount32,
1897 &feature_trigReducedRange,
1898 &feature_movrel,
1899 &feature_wavefrontsize64,
1900 &feature_fp64,
1901 &feature_mimgR128,
1902 &feature_noSramEccSupport,
1903 &feature_localmemorysize32768,
1904 },
1905};
1906
1907pub const cpu_pitcairn = Cpu{
1908 .name = "pitcairn",
1909 .llvm_name = "pitcairn",
1910 .dependencies = &[_]*const Feature {
1911 &feature_codeObjectV3,
1912 &feature_noXnackSupport,
1913 &feature_ldsbankcount32,
1914 &feature_trigReducedRange,
1915 &feature_movrel,
1916 &feature_wavefrontsize64,
1917 &feature_fp64,
1918 &feature_mimgR128,
1919 &feature_noSramEccSupport,
1920 &feature_localmemorysize32768,
1921 },
1922};
1923
1924pub const cpu_polaris10 = Cpu{
1925 .name = "polaris10",
1926 .llvm_name = "polaris10",
1927 .dependencies = &[_]*const Feature {
1928 &feature_codeObjectV3,
1929 &feature_noXnackSupport,
1930 &feature_ldsbankcount32,
1931 &feature_unpackedD16Vmem,
1932 &feature_trigReducedRange,
1933 &feature_vgprIndexMode,
1934 &feature_movrel,
1935 &feature_fp64,
1936 &feature_gcn3Encoding,
1937 &feature_mimgR128,
1938 &feature_sdwa,
1939 &feature_gfx7Gfx8Gfx9Insts,
1940 &feature_intClampInsts,
1941 &feature_ciInsts,
1942 &feature_sdwaOutModsVopc,
1943 &feature_sMemrealtime,
1944 &feature_flatAddressSpace,
1945 &feature_inv2piInlineImm,
1946 &feature_wavefrontsize64,
1947 &feature_noSramEccSupport,
1948 &feature_sdwaMav,
1949 &feature_localmemorysize65536,
1950 &feature_scalarStores,
1951 &feature_gfx8Insts,
1952 &feature_dpp,
1953 &feature_BitInsts16,
1954 },
1955};
1956
1957pub const cpu_polaris11 = Cpu{
1958 .name = "polaris11",
1959 .llvm_name = "polaris11",
1960 .dependencies = &[_]*const Feature {
1961 &feature_codeObjectV3,
1962 &feature_noXnackSupport,
1963 &feature_ldsbankcount32,
1964 &feature_unpackedD16Vmem,
1965 &feature_trigReducedRange,
1966 &feature_vgprIndexMode,
1967 &feature_movrel,
1968 &feature_fp64,
1969 &feature_gcn3Encoding,
1970 &feature_mimgR128,
1971 &feature_sdwa,
1972 &feature_gfx7Gfx8Gfx9Insts,
1973 &feature_intClampInsts,
1974 &feature_ciInsts,
1975 &feature_sdwaOutModsVopc,
1976 &feature_sMemrealtime,
1977 &feature_flatAddressSpace,
1978 &feature_inv2piInlineImm,
1979 &feature_wavefrontsize64,
1980 &feature_noSramEccSupport,
1981 &feature_sdwaMav,
1982 &feature_localmemorysize65536,
1983 &feature_scalarStores,
1984 &feature_gfx8Insts,
1985 &feature_dpp,
1986 &feature_BitInsts16,
1987 },
1988};
1989
1990pub const cpu_stoney = Cpu{
1991 .name = "stoney",
1992 .llvm_name = "stoney",
1993 .dependencies = &[_]*const Feature {
1994 &feature_codeObjectV3,
1995 &feature_ldsbankcount16,
1996 &feature_trigReducedRange,
1997 &feature_vgprIndexMode,
1998 &feature_movrel,
1999 &feature_fp64,
2000 &feature_gcn3Encoding,
2001 &feature_mimgR128,
2002 &feature_sdwa,
2003 &feature_gfx7Gfx8Gfx9Insts,
2004 &feature_intClampInsts,
2005 &feature_ciInsts,
2006 &feature_sdwaOutModsVopc,
2007 &feature_sMemrealtime,
2008 &feature_flatAddressSpace,
2009 &feature_inv2piInlineImm,
2010 &feature_wavefrontsize64,
2011 &feature_noSramEccSupport,
2012 &feature_sdwaMav,
2013 &feature_localmemorysize65536,
2014 &feature_scalarStores,
2015 &feature_gfx8Insts,
2016 &feature_dpp,
2017 &feature_BitInsts16,
2018 &feature_xnack,
2019 },
2020};
2021
2022pub const cpu_tahiti = Cpu{
2023 .name = "tahiti",
2024 .llvm_name = "tahiti",
2025 .dependencies = &[_]*const Feature {
2026 &feature_codeObjectV3,
2027 &feature_noXnackSupport,
2028 &feature_fastFmaf,
2029 &feature_ldsbankcount32,
2030 &feature_trigReducedRange,
2031 &feature_movrel,
2032 &feature_wavefrontsize64,
2033 &feature_fp64,
2034 &feature_mimgR128,
2035 &feature_noSramEccSupport,
2036 &feature_localmemorysize32768,
2037 &feature_halfRate64Ops,
2038 },
2039};
2040
2041pub const cpu_tonga = Cpu{
2042 .name = "tonga",
2043 .llvm_name = "tonga",
2044 .dependencies = &[_]*const Feature {
2045 &feature_codeObjectV3,
2046 &feature_noXnackSupport,
2047 &feature_ldsbankcount32,
2048 &feature_sgprInitBug,
2049 &feature_unpackedD16Vmem,
2050 &feature_trigReducedRange,
2051 &feature_vgprIndexMode,
2052 &feature_movrel,
2053 &feature_fp64,
2054 &feature_gcn3Encoding,
2055 &feature_mimgR128,
2056 &feature_sdwa,
2057 &feature_gfx7Gfx8Gfx9Insts,
2058 &feature_intClampInsts,
2059 &feature_ciInsts,
2060 &feature_sdwaOutModsVopc,
2061 &feature_sMemrealtime,
2062 &feature_flatAddressSpace,
2063 &feature_inv2piInlineImm,
2064 &feature_wavefrontsize64,
2065 &feature_noSramEccSupport,
2066 &feature_sdwaMav,
2067 &feature_localmemorysize65536,
2068 &feature_scalarStores,
2069 &feature_gfx8Insts,
2070 &feature_dpp,
2071 &feature_BitInsts16,
2072 },
2073};
2074
2075pub const cpu_verde = Cpu{
2076 .name = "verde",
2077 .llvm_name = "verde",
2078 .dependencies = &[_]*const Feature {
2079 &feature_codeObjectV3,
2080 &feature_noXnackSupport,
2081 &feature_ldsbankcount32,
2082 &feature_trigReducedRange,
2083 &feature_movrel,
2084 &feature_wavefrontsize64,
2085 &feature_fp64,
2086 &feature_mimgR128,
2087 &feature_noSramEccSupport,
2088 &feature_localmemorysize32768,
2089 },
2090};
2091
2092pub const cpus = &[_]*const Cpu {
2093 &cpu_bonaire,
2094 &cpu_carrizo,
2095 &cpu_fiji,
2096 &cpu_generic,
2097 &cpu_genericHsa,
2098 &cpu_gfx1010,
2099 &cpu_gfx1011,
2100 &cpu_gfx1012,
2101 &cpu_gfx600,
2102 &cpu_gfx601,
2103 &cpu_gfx700,
2104 &cpu_gfx701,
2105 &cpu_gfx702,
2106 &cpu_gfx703,
2107 &cpu_gfx704,
2108 &cpu_gfx801,
2109 &cpu_gfx802,
2110 &cpu_gfx803,
2111 &cpu_gfx810,
2112 &cpu_gfx900,
2113 &cpu_gfx902,
2114 &cpu_gfx904,
2115 &cpu_gfx906,
2116 &cpu_gfx908,
2117 &cpu_gfx909,
2118 &cpu_hainan,
2119 &cpu_hawaii,
2120 &cpu_iceland,
2121 &cpu_kabini,
2122 &cpu_kaveri,
2123 &cpu_mullins,
2124 &cpu_oland,
2125 &cpu_pitcairn,
2126 &cpu_polaris10,
2127 &cpu_polaris11,
2128 &cpu_stoney,
2129 &cpu_tahiti,
2130 &cpu_tonga,
2131 &cpu_verde,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 @"16_bit_insts",
6 DumpCode,
7 add_no_carry_insts,
8 aperture_regs,
9 atomic_fadd_insts,
10 auto_waitcnt_before_barrier,
11 ci_insts,
12 code_object_v3,
13 cumode,
14 dl_insts,
15 dot1_insts,
16 dot2_insts,
17 dot3_insts,
18 dot4_insts,
19 dot5_insts,
20 dot6_insts,
21 dpp,
22 dpp8,
23 dumpcode,
24 enable_ds128,
25 enable_prt_strict_null,
26 fast_fmaf,
27 flat_address_space,
28 flat_for_global,
29 flat_global_insts,
30 flat_inst_offsets,
31 flat_scratch_insts,
32 flat_segment_offset_bug,
33 fma_mix_insts,
34 fmaf,
35 fp_exceptions,
36 fp16_denormals,
37 fp32_denormals,
38 fp64,
39 fp64_denormals,
40 fp64_fp16_denormals,
41 gcn3_encoding,
42 gfx10,
43 gfx10_insts,
44 gfx7_gfx8_gfx9_insts,
45 gfx8_insts,
46 gfx9,
47 gfx9_insts,
48 half_rate_64_ops,
49 inst_fwd_prefetch_bug,
50 int_clamp_insts,
51 inv_2pi_inline_imm,
52 lds_branch_vmem_war_hazard,
53 lds_misaligned_bug,
54 ldsbankcount16,
55 ldsbankcount32,
56 load_store_opt,
57 localmemorysize0,
58 localmemorysize32768,
59 localmemorysize65536,
60 mad_mix_insts,
61 mai_insts,
62 max_private_element_size_16,
63 max_private_element_size_4,
64 max_private_element_size_8,
65 mimg_r128,
66 movrel,
67 no_data_dep_hazard,
68 no_sdst_cmpx,
69 no_sram_ecc_support,
70 no_xnack_support,
71 nsa_encoding,
72 nsa_to_vmem_bug,
73 offset_3f_bug,
74 pk_fmac_f16_inst,
75 promote_alloca,
76 r128_a16,
77 register_banking,
78 s_memrealtime,
79 scalar_atomics,
80 scalar_flat_scratch_insts,
81 scalar_stores,
82 sdwa,
83 sdwa_mav,
84 sdwa_omod,
85 sdwa_out_mods_vopc,
86 sdwa_scalar,
87 sdwa_sdst,
88 sea_islands,
89 sgpr_init_bug,
90 si_scheduler,
91 smem_to_vector_write_hazard,
92 southern_islands,
93 sram_ecc,
94 trap_handler,
95 trig_reduced_range,
96 unaligned_buffer_access,
97 unaligned_scratch_access,
98 unpacked_d16_vmem,
99 unsafe_ds_offset_folding,
100 vcmpx_exec_war_hazard,
101 vcmpx_permlane_hazard,
102 vgpr_index_mode,
103 vmem_to_scalar_write_hazard,
104 volcanic_islands,
105 vop3_literal,
106 vop3p,
107 vscnt,
108 wavefrontsize16,
109 wavefrontsize32,
110 wavefrontsize64,
111 xnack,
112};
113
114pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
115
116pub const all_features = blk: {
117 const len = @typeInfo(Feature).Enum.fields.len;
118 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
119 var result: [len]Cpu.Feature = undefined;
120 result[@enumToInt(Feature.@"16_bit_insts")] = .{
121 .index = @enumToInt(Feature.@"16_bit_insts"),
122 .name = @tagName(Feature.@"16_bit_insts"),
123 .llvm_name = "16-bit-insts",
124 .description = "Has i16/f16 instructions",
125 .dependencies = 0,
126 };
127 result[@enumToInt(Feature.DumpCode)] = .{
128 .index = @enumToInt(Feature.DumpCode),
129 .name = @tagName(Feature.DumpCode),
130 .llvm_name = "DumpCode",
131 .description = "Dump MachineInstrs in the CodeEmitter",
132 .dependencies = 0,
133 };
134 result[@enumToInt(Feature.add_no_carry_insts)] = .{
135 .index = @enumToInt(Feature.add_no_carry_insts),
136 .name = @tagName(Feature.add_no_carry_insts),
137 .llvm_name = "add-no-carry-insts",
138 .description = "Have VALU add/sub instructions without carry out",
139 .dependencies = 0,
140 };
141 result[@enumToInt(Feature.aperture_regs)] = .{
142 .index = @enumToInt(Feature.aperture_regs),
143 .name = @tagName(Feature.aperture_regs),
144 .llvm_name = "aperture-regs",
145 .description = "Has Memory Aperture Base and Size Registers",
146 .dependencies = 0,
147 };
148 result[@enumToInt(Feature.atomic_fadd_insts)] = .{
149 .index = @enumToInt(Feature.atomic_fadd_insts),
150 .name = @tagName(Feature.atomic_fadd_insts),
151 .llvm_name = "atomic-fadd-insts",
152 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
153 .dependencies = 0,
154 };
155 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
156 .index = @enumToInt(Feature.auto_waitcnt_before_barrier),
157 .name = @tagName(Feature.auto_waitcnt_before_barrier),
158 .llvm_name = "auto-waitcnt-before-barrier",
159 .description = "Hardware automatically inserts waitcnt before barrier",
160 .dependencies = 0,
161 };
162 result[@enumToInt(Feature.ci_insts)] = .{
163 .index = @enumToInt(Feature.ci_insts),
164 .name = @tagName(Feature.ci_insts),
165 .llvm_name = "ci-insts",
166 .description = "Additional instructions for CI+",
167 .dependencies = 0,
168 };
169 result[@enumToInt(Feature.code_object_v3)] = .{
170 .index = @enumToInt(Feature.code_object_v3),
171 .name = @tagName(Feature.code_object_v3),
172 .llvm_name = "code-object-v3",
173 .description = "Generate code object version 3",
174 .dependencies = 0,
175 };
176 result[@enumToInt(Feature.cumode)] = .{
177 .index = @enumToInt(Feature.cumode),
178 .name = @tagName(Feature.cumode),
179 .llvm_name = "cumode",
180 .description = "Enable CU wavefront execution mode",
181 .dependencies = 0,
182 };
183 result[@enumToInt(Feature.dl_insts)] = .{
184 .index = @enumToInt(Feature.dl_insts),
185 .name = @tagName(Feature.dl_insts),
186 .llvm_name = "dl-insts",
187 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
188 .dependencies = 0,
189 };
190 result[@enumToInt(Feature.dot1_insts)] = .{
191 .index = @enumToInt(Feature.dot1_insts),
192 .name = @tagName(Feature.dot1_insts),
193 .llvm_name = "dot1-insts",
194 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
195 .dependencies = 0,
196 };
197 result[@enumToInt(Feature.dot2_insts)] = .{
198 .index = @enumToInt(Feature.dot2_insts),
199 .name = @tagName(Feature.dot2_insts),
200 .llvm_name = "dot2-insts",
201 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",
202 .dependencies = 0,
203 };
204 result[@enumToInt(Feature.dot3_insts)] = .{
205 .index = @enumToInt(Feature.dot3_insts),
206 .name = @tagName(Feature.dot3_insts),
207 .llvm_name = "dot3-insts",
208 .description = "Has v_dot8c_i32_i4 instruction",
209 .dependencies = 0,
210 };
211 result[@enumToInt(Feature.dot4_insts)] = .{
212 .index = @enumToInt(Feature.dot4_insts),
213 .name = @tagName(Feature.dot4_insts),
214 .llvm_name = "dot4-insts",
215 .description = "Has v_dot2c_i32_i16 instruction",
216 .dependencies = 0,
217 };
218 result[@enumToInt(Feature.dot5_insts)] = .{
219 .index = @enumToInt(Feature.dot5_insts),
220 .name = @tagName(Feature.dot5_insts),
221 .llvm_name = "dot5-insts",
222 .description = "Has v_dot2c_f32_f16 instruction",
223 .dependencies = 0,
224 };
225 result[@enumToInt(Feature.dot6_insts)] = .{
226 .index = @enumToInt(Feature.dot6_insts),
227 .name = @tagName(Feature.dot6_insts),
228 .llvm_name = "dot6-insts",
229 .description = "Has v_dot4c_i32_i8 instruction",
230 .dependencies = 0,
231 };
232 result[@enumToInt(Feature.dpp)] = .{
233 .index = @enumToInt(Feature.dpp),
234 .name = @tagName(Feature.dpp),
235 .llvm_name = "dpp",
236 .description = "Support DPP (Data Parallel Primitives) extension",
237 .dependencies = 0,
238 };
239 result[@enumToInt(Feature.dpp8)] = .{
240 .index = @enumToInt(Feature.dpp8),
241 .name = @tagName(Feature.dpp8),
242 .llvm_name = "dpp8",
243 .description = "Support DPP8 (Data Parallel Primitives) extension",
244 .dependencies = 0,
245 };
246 result[@enumToInt(Feature.dumpcode)] = .{
247 .index = @enumToInt(Feature.dumpcode),
248 .name = @tagName(Feature.dumpcode),
249 .llvm_name = "dumpcode",
250 .description = "Dump MachineInstrs in the CodeEmitter",
251 .dependencies = 0,
252 };
253 result[@enumToInt(Feature.enable_ds128)] = .{
254 .index = @enumToInt(Feature.enable_ds128),
255 .name = @tagName(Feature.enable_ds128),
256 .llvm_name = "enable-ds128",
257 .description = "Use ds_read|write_b128",
258 .dependencies = 0,
259 };
260 result[@enumToInt(Feature.enable_prt_strict_null)] = .{
261 .index = @enumToInt(Feature.enable_prt_strict_null),
262 .name = @tagName(Feature.enable_prt_strict_null),
263 .llvm_name = "enable-prt-strict-null",
264 .description = "Enable zeroing of result registers for sparse texture fetches",
265 .dependencies = 0,
266 };
267 result[@enumToInt(Feature.fast_fmaf)] = .{
268 .index = @enumToInt(Feature.fast_fmaf),
269 .name = @tagName(Feature.fast_fmaf),
270 .llvm_name = "fast-fmaf",
271 .description = "Assuming f32 fma is at least as fast as mul + add",
272 .dependencies = 0,
273 };
274 result[@enumToInt(Feature.flat_address_space)] = .{
275 .index = @enumToInt(Feature.flat_address_space),
276 .name = @tagName(Feature.flat_address_space),
277 .llvm_name = "flat-address-space",
278 .description = "Support flat address space",
279 .dependencies = 0,
280 };
281 result[@enumToInt(Feature.flat_for_global)] = .{
282 .index = @enumToInt(Feature.flat_for_global),
283 .name = @tagName(Feature.flat_for_global),
284 .llvm_name = "flat-for-global",
285 .description = "Force to generate flat instruction for global",
286 .dependencies = 0,
287 };
288 result[@enumToInt(Feature.flat_global_insts)] = .{
289 .index = @enumToInt(Feature.flat_global_insts),
290 .name = @tagName(Feature.flat_global_insts),
291 .llvm_name = "flat-global-insts",
292 .description = "Have global_* flat memory instructions",
293 .dependencies = 0,
294 };
295 result[@enumToInt(Feature.flat_inst_offsets)] = .{
296 .index = @enumToInt(Feature.flat_inst_offsets),
297 .name = @tagName(Feature.flat_inst_offsets),
298 .llvm_name = "flat-inst-offsets",
299 .description = "Flat instructions have immediate offset addressing mode",
300 .dependencies = 0,
301 };
302 result[@enumToInt(Feature.flat_scratch_insts)] = .{
303 .index = @enumToInt(Feature.flat_scratch_insts),
304 .name = @tagName(Feature.flat_scratch_insts),
305 .llvm_name = "flat-scratch-insts",
306 .description = "Have scratch_* flat memory instructions",
307 .dependencies = 0,
308 };
309 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
310 .index = @enumToInt(Feature.flat_segment_offset_bug),
311 .name = @tagName(Feature.flat_segment_offset_bug),
312 .llvm_name = "flat-segment-offset-bug",
313 .description = "GFX10 bug, inst_offset ignored in flat segment",
314 .dependencies = 0,
315 };
316 result[@enumToInt(Feature.fma_mix_insts)] = .{
317 .index = @enumToInt(Feature.fma_mix_insts),
318 .name = @tagName(Feature.fma_mix_insts),
319 .llvm_name = "fma-mix-insts",
320 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
321 .dependencies = 0,
322 };
323 result[@enumToInt(Feature.fmaf)] = .{
324 .index = @enumToInt(Feature.fmaf),
325 .name = @tagName(Feature.fmaf),
326 .llvm_name = "fmaf",
327 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
328 .dependencies = 0,
329 };
330 result[@enumToInt(Feature.fp_exceptions)] = .{
331 .index = @enumToInt(Feature.fp_exceptions),
332 .name = @tagName(Feature.fp_exceptions),
333 .llvm_name = "fp-exceptions",
334 .description = "Enable floating point exceptions",
335 .dependencies = 0,
336 };
337 result[@enumToInt(Feature.fp16_denormals)] = .{
338 .index = @enumToInt(Feature.fp16_denormals),
339 .name = @tagName(Feature.fp16_denormals),
340 .llvm_name = "fp16-denormals",
341 .description = "Enable half precision denormal handling",
342 .dependencies = featureSet(&[_]Feature{
343 .fp64_fp16_denormals,
344 }),
345 };
346 result[@enumToInt(Feature.fp32_denormals)] = .{
347 .index = @enumToInt(Feature.fp32_denormals),
348 .name = @tagName(Feature.fp32_denormals),
349 .llvm_name = "fp32-denormals",
350 .description = "Enable single precision denormal handling",
351 .dependencies = 0,
352 };
353 result[@enumToInt(Feature.fp64)] = .{
354 .index = @enumToInt(Feature.fp64),
355 .name = @tagName(Feature.fp64),
356 .llvm_name = "fp64",
357 .description = "Enable double precision operations",
358 .dependencies = 0,
359 };
360 result[@enumToInt(Feature.fp64_denormals)] = .{
361 .index = @enumToInt(Feature.fp64_denormals),
362 .name = @tagName(Feature.fp64_denormals),
363 .llvm_name = "fp64-denormals",
364 .description = "Enable double and half precision denormal handling",
365 .dependencies = featureSet(&[_]Feature{
366 .fp64,
367 .fp64_fp16_denormals,
368 }),
369 };
370 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{
371 .index = @enumToInt(Feature.fp64_fp16_denormals),
372 .name = @tagName(Feature.fp64_fp16_denormals),
373 .llvm_name = "fp64-fp16-denormals",
374 .description = "Enable double and half precision denormal handling",
375 .dependencies = featureSet(&[_]Feature{
376 .fp64,
377 }),
378 };
379 result[@enumToInt(Feature.gcn3_encoding)] = .{
380 .index = @enumToInt(Feature.gcn3_encoding),
381 .name = @tagName(Feature.gcn3_encoding),
382 .llvm_name = "gcn3-encoding",
383 .description = "Encoding format for VI",
384 .dependencies = 0,
385 };
386 result[@enumToInt(Feature.gfx10)] = .{
387 .index = @enumToInt(Feature.gfx10),
388 .name = @tagName(Feature.gfx10),
389 .llvm_name = "gfx10",
390 .description = "GFX10 GPU generation",
391 .dependencies = featureSet(&[_]Feature{
392 .@"16_bit_insts",
393 .add_no_carry_insts,
394 .aperture_regs,
395 .ci_insts,
396 .dpp,
397 .dpp8,
398 .fast_fmaf,
399 .flat_address_space,
400 .flat_global_insts,
401 .flat_inst_offsets,
402 .flat_scratch_insts,
403 .fma_mix_insts,
404 .fp64,
405 .gfx10_insts,
406 .gfx8_insts,
407 .gfx9_insts,
408 .int_clamp_insts,
409 .inv_2pi_inline_imm,
410 .localmemorysize65536,
411 .mimg_r128,
412 .movrel,
413 .no_data_dep_hazard,
414 .no_sdst_cmpx,
415 .no_sram_ecc_support,
416 .pk_fmac_f16_inst,
417 .register_banking,
418 .s_memrealtime,
419 .sdwa,
420 .sdwa_omod,
421 .sdwa_scalar,
422 .sdwa_sdst,
423 .vop3_literal,
424 .vop3p,
425 .vscnt,
426 }),
427 };
428 result[@enumToInt(Feature.gfx10_insts)] = .{
429 .index = @enumToInt(Feature.gfx10_insts),
430 .name = @tagName(Feature.gfx10_insts),
431 .llvm_name = "gfx10-insts",
432 .description = "Additional instructions for GFX10+",
433 .dependencies = 0,
434 };
435 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
436 .index = @enumToInt(Feature.gfx7_gfx8_gfx9_insts),
437 .name = @tagName(Feature.gfx7_gfx8_gfx9_insts),
438 .llvm_name = "gfx7-gfx8-gfx9-insts",
439 .description = "Instructions shared in GFX7, GFX8, GFX9",
440 .dependencies = 0,
441 };
442 result[@enumToInt(Feature.gfx8_insts)] = .{
443 .index = @enumToInt(Feature.gfx8_insts),
444 .name = @tagName(Feature.gfx8_insts),
445 .llvm_name = "gfx8-insts",
446 .description = "Additional instructions for GFX8+",
447 .dependencies = 0,
448 };
449 result[@enumToInt(Feature.gfx9)] = .{
450 .index = @enumToInt(Feature.gfx9),
451 .name = @tagName(Feature.gfx9),
452 .llvm_name = "gfx9",
453 .description = "GFX9 GPU generation",
454 .dependencies = featureSet(&[_]Feature{
455 .@"16_bit_insts",
456 .add_no_carry_insts,
457 .aperture_regs,
458 .ci_insts,
459 .dpp,
460 .fast_fmaf,
461 .flat_address_space,
462 .flat_global_insts,
463 .flat_inst_offsets,
464 .flat_scratch_insts,
465 .fp64,
466 .gcn3_encoding,
467 .gfx7_gfx8_gfx9_insts,
468 .gfx8_insts,
469 .gfx9_insts,
470 .int_clamp_insts,
471 .inv_2pi_inline_imm,
472 .localmemorysize65536,
473 .r128_a16,
474 .s_memrealtime,
475 .scalar_atomics,
476 .scalar_flat_scratch_insts,
477 .scalar_stores,
478 .sdwa,
479 .sdwa_omod,
480 .sdwa_scalar,
481 .sdwa_sdst,
482 .vgpr_index_mode,
483 .vop3p,
484 .wavefrontsize64,
485 }),
486 };
487 result[@enumToInt(Feature.gfx9_insts)] = .{
488 .index = @enumToInt(Feature.gfx9_insts),
489 .name = @tagName(Feature.gfx9_insts),
490 .llvm_name = "gfx9-insts",
491 .description = "Additional instructions for GFX9+",
492 .dependencies = 0,
493 };
494 result[@enumToInt(Feature.half_rate_64_ops)] = .{
495 .index = @enumToInt(Feature.half_rate_64_ops),
496 .name = @tagName(Feature.half_rate_64_ops),
497 .llvm_name = "half-rate-64-ops",
498 .description = "Most fp64 instructions are half rate instead of quarter",
499 .dependencies = 0,
500 };
501 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{
502 .index = @enumToInt(Feature.inst_fwd_prefetch_bug),
503 .name = @tagName(Feature.inst_fwd_prefetch_bug),
504 .llvm_name = "inst-fwd-prefetch-bug",
505 .description = "S_INST_PREFETCH instruction causes shader to hang",
506 .dependencies = 0,
507 };
508 result[@enumToInt(Feature.int_clamp_insts)] = .{
509 .index = @enumToInt(Feature.int_clamp_insts),
510 .name = @tagName(Feature.int_clamp_insts),
511 .llvm_name = "int-clamp-insts",
512 .description = "Support clamp for integer destination",
513 .dependencies = 0,
514 };
515 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{
516 .index = @enumToInt(Feature.inv_2pi_inline_imm),
517 .name = @tagName(Feature.inv_2pi_inline_imm),
518 .llvm_name = "inv-2pi-inline-imm",
519 .description = "Has 1 / (2 * pi) as inline immediate",
520 .dependencies = 0,
521 };
522 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{
523 .index = @enumToInt(Feature.lds_branch_vmem_war_hazard),
524 .name = @tagName(Feature.lds_branch_vmem_war_hazard),
525 .llvm_name = "lds-branch-vmem-war-hazard",
526 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
527 .dependencies = 0,
528 };
529 result[@enumToInt(Feature.lds_misaligned_bug)] = .{
530 .index = @enumToInt(Feature.lds_misaligned_bug),
531 .name = @tagName(Feature.lds_misaligned_bug),
532 .llvm_name = "lds-misaligned-bug",
533 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
534 .dependencies = 0,
535 };
536 result[@enumToInt(Feature.ldsbankcount16)] = .{
537 .index = @enumToInt(Feature.ldsbankcount16),
538 .name = @tagName(Feature.ldsbankcount16),
539 .llvm_name = "ldsbankcount16",
540 .description = "The number of LDS banks per compute unit.",
541 .dependencies = 0,
542 };
543 result[@enumToInt(Feature.ldsbankcount32)] = .{
544 .index = @enumToInt(Feature.ldsbankcount32),
545 .name = @tagName(Feature.ldsbankcount32),
546 .llvm_name = "ldsbankcount32",
547 .description = "The number of LDS banks per compute unit.",
548 .dependencies = 0,
549 };
550 result[@enumToInt(Feature.load_store_opt)] = .{
551 .index = @enumToInt(Feature.load_store_opt),
552 .name = @tagName(Feature.load_store_opt),
553 .llvm_name = "load-store-opt",
554 .description = "Enable SI load/store optimizer pass",
555 .dependencies = 0,
556 };
557 result[@enumToInt(Feature.localmemorysize0)] = .{
558 .index = @enumToInt(Feature.localmemorysize0),
559 .name = @tagName(Feature.localmemorysize0),
560 .llvm_name = "localmemorysize0",
561 .description = "The size of local memory in bytes",
562 .dependencies = 0,
563 };
564 result[@enumToInt(Feature.localmemorysize32768)] = .{
565 .index = @enumToInt(Feature.localmemorysize32768),
566 .name = @tagName(Feature.localmemorysize32768),
567 .llvm_name = "localmemorysize32768",
568 .description = "The size of local memory in bytes",
569 .dependencies = 0,
570 };
571 result[@enumToInt(Feature.localmemorysize65536)] = .{
572 .index = @enumToInt(Feature.localmemorysize65536),
573 .name = @tagName(Feature.localmemorysize65536),
574 .llvm_name = "localmemorysize65536",
575 .description = "The size of local memory in bytes",
576 .dependencies = 0,
577 };
578 result[@enumToInt(Feature.mad_mix_insts)] = .{
579 .index = @enumToInt(Feature.mad_mix_insts),
580 .name = @tagName(Feature.mad_mix_insts),
581 .llvm_name = "mad-mix-insts",
582 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
583 .dependencies = 0,
584 };
585 result[@enumToInt(Feature.mai_insts)] = .{
586 .index = @enumToInt(Feature.mai_insts),
587 .name = @tagName(Feature.mai_insts),
588 .llvm_name = "mai-insts",
589 .description = "Has mAI instructions",
590 .dependencies = 0,
591 };
592 result[@enumToInt(Feature.max_private_element_size_16)] = .{
593 .index = @enumToInt(Feature.max_private_element_size_16),
594 .name = @tagName(Feature.max_private_element_size_16),
595 .llvm_name = "max-private-element-size-16",
596 .description = "Maximum private access size may be 16",
597 .dependencies = 0,
598 };
599 result[@enumToInt(Feature.max_private_element_size_4)] = .{
600 .index = @enumToInt(Feature.max_private_element_size_4),
601 .name = @tagName(Feature.max_private_element_size_4),
602 .llvm_name = "max-private-element-size-4",
603 .description = "Maximum private access size may be 4",
604 .dependencies = 0,
605 };
606 result[@enumToInt(Feature.max_private_element_size_8)] = .{
607 .index = @enumToInt(Feature.max_private_element_size_8),
608 .name = @tagName(Feature.max_private_element_size_8),
609 .llvm_name = "max-private-element-size-8",
610 .description = "Maximum private access size may be 8",
611 .dependencies = 0,
612 };
613 result[@enumToInt(Feature.mimg_r128)] = .{
614 .index = @enumToInt(Feature.mimg_r128),
615 .name = @tagName(Feature.mimg_r128),
616 .llvm_name = "mimg-r128",
617 .description = "Support 128-bit texture resources",
618 .dependencies = 0,
619 };
620 result[@enumToInt(Feature.movrel)] = .{
621 .index = @enumToInt(Feature.movrel),
622 .name = @tagName(Feature.movrel),
623 .llvm_name = "movrel",
624 .description = "Has v_movrel*_b32 instructions",
625 .dependencies = 0,
626 };
627 result[@enumToInt(Feature.no_data_dep_hazard)] = .{
628 .index = @enumToInt(Feature.no_data_dep_hazard),
629 .name = @tagName(Feature.no_data_dep_hazard),
630 .llvm_name = "no-data-dep-hazard",
631 .description = "Does not need SW waitstates",
632 .dependencies = 0,
633 };
634 result[@enumToInt(Feature.no_sdst_cmpx)] = .{
635 .index = @enumToInt(Feature.no_sdst_cmpx),
636 .name = @tagName(Feature.no_sdst_cmpx),
637 .llvm_name = "no-sdst-cmpx",
638 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
639 .dependencies = 0,
640 };
641 result[@enumToInt(Feature.no_sram_ecc_support)] = .{
642 .index = @enumToInt(Feature.no_sram_ecc_support),
643 .name = @tagName(Feature.no_sram_ecc_support),
644 .llvm_name = "no-sram-ecc-support",
645 .description = "Hardware does not support SRAM ECC",
646 .dependencies = 0,
647 };
648 result[@enumToInt(Feature.no_xnack_support)] = .{
649 .index = @enumToInt(Feature.no_xnack_support),
650 .name = @tagName(Feature.no_xnack_support),
651 .llvm_name = "no-xnack-support",
652 .description = "Hardware does not support XNACK",
653 .dependencies = 0,
654 };
655 result[@enumToInt(Feature.nsa_encoding)] = .{
656 .index = @enumToInt(Feature.nsa_encoding),
657 .name = @tagName(Feature.nsa_encoding),
658 .llvm_name = "nsa-encoding",
659 .description = "Support NSA encoding for image instructions",
660 .dependencies = 0,
661 };
662 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
663 .index = @enumToInt(Feature.nsa_to_vmem_bug),
664 .name = @tagName(Feature.nsa_to_vmem_bug),
665 .llvm_name = "nsa-to-vmem-bug",
666 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
667 .dependencies = 0,
668 };
669 result[@enumToInt(Feature.offset_3f_bug)] = .{
670 .index = @enumToInt(Feature.offset_3f_bug),
671 .name = @tagName(Feature.offset_3f_bug),
672 .llvm_name = "offset-3f-bug",
673 .description = "Branch offset of 3f hardware bug",
674 .dependencies = 0,
675 };
676 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
677 .index = @enumToInt(Feature.pk_fmac_f16_inst),
678 .name = @tagName(Feature.pk_fmac_f16_inst),
679 .llvm_name = "pk-fmac-f16-inst",
680 .description = "Has v_pk_fmac_f16 instruction",
681 .dependencies = 0,
682 };
683 result[@enumToInt(Feature.promote_alloca)] = .{
684 .index = @enumToInt(Feature.promote_alloca),
685 .name = @tagName(Feature.promote_alloca),
686 .llvm_name = "promote-alloca",
687 .description = "Enable promote alloca pass",
688 .dependencies = 0,
689 };
690 result[@enumToInt(Feature.r128_a16)] = .{
691 .index = @enumToInt(Feature.r128_a16),
692 .name = @tagName(Feature.r128_a16),
693 .llvm_name = "r128-a16",
694 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
695 .dependencies = 0,
696 };
697 result[@enumToInt(Feature.register_banking)] = .{
698 .index = @enumToInt(Feature.register_banking),
699 .name = @tagName(Feature.register_banking),
700 .llvm_name = "register-banking",
701 .description = "Has register banking",
702 .dependencies = 0,
703 };
704 result[@enumToInt(Feature.s_memrealtime)] = .{
705 .index = @enumToInt(Feature.s_memrealtime),
706 .name = @tagName(Feature.s_memrealtime),
707 .llvm_name = "s-memrealtime",
708 .description = "Has s_memrealtime instruction",
709 .dependencies = 0,
710 };
711 result[@enumToInt(Feature.scalar_atomics)] = .{
712 .index = @enumToInt(Feature.scalar_atomics),
713 .name = @tagName(Feature.scalar_atomics),
714 .llvm_name = "scalar-atomics",
715 .description = "Has atomic scalar memory instructions",
716 .dependencies = 0,
717 };
718 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{
719 .index = @enumToInt(Feature.scalar_flat_scratch_insts),
720 .name = @tagName(Feature.scalar_flat_scratch_insts),
721 .llvm_name = "scalar-flat-scratch-insts",
722 .description = "Have s_scratch_* flat memory instructions",
723 .dependencies = 0,
724 };
725 result[@enumToInt(Feature.scalar_stores)] = .{
726 .index = @enumToInt(Feature.scalar_stores),
727 .name = @tagName(Feature.scalar_stores),
728 .llvm_name = "scalar-stores",
729 .description = "Has store scalar memory instructions",
730 .dependencies = 0,
731 };
732 result[@enumToInt(Feature.sdwa)] = .{
733 .index = @enumToInt(Feature.sdwa),
734 .name = @tagName(Feature.sdwa),
735 .llvm_name = "sdwa",
736 .description = "Support SDWA (Sub-DWORD Addressing) extension",
737 .dependencies = 0,
738 };
739 result[@enumToInt(Feature.sdwa_mav)] = .{
740 .index = @enumToInt(Feature.sdwa_mav),
741 .name = @tagName(Feature.sdwa_mav),
742 .llvm_name = "sdwa-mav",
743 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
744 .dependencies = 0,
745 };
746 result[@enumToInt(Feature.sdwa_omod)] = .{
747 .index = @enumToInt(Feature.sdwa_omod),
748 .name = @tagName(Feature.sdwa_omod),
749 .llvm_name = "sdwa-omod",
750 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
751 .dependencies = 0,
752 };
753 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{
754 .index = @enumToInt(Feature.sdwa_out_mods_vopc),
755 .name = @tagName(Feature.sdwa_out_mods_vopc),
756 .llvm_name = "sdwa-out-mods-vopc",
757 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
758 .dependencies = 0,
759 };
760 result[@enumToInt(Feature.sdwa_scalar)] = .{
761 .index = @enumToInt(Feature.sdwa_scalar),
762 .name = @tagName(Feature.sdwa_scalar),
763 .llvm_name = "sdwa-scalar",
764 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
765 .dependencies = 0,
766 };
767 result[@enumToInt(Feature.sdwa_sdst)] = .{
768 .index = @enumToInt(Feature.sdwa_sdst),
769 .name = @tagName(Feature.sdwa_sdst),
770 .llvm_name = "sdwa-sdst",
771 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
772 .dependencies = 0,
773 };
774 result[@enumToInt(Feature.sea_islands)] = .{
775 .index = @enumToInt(Feature.sea_islands),
776 .name = @tagName(Feature.sea_islands),
777 .llvm_name = "sea-islands",
778 .description = "SEA_ISLANDS GPU generation",
779 .dependencies = featureSet(&[_]Feature{
780 .ci_insts,
781 .flat_address_space,
782 .fp64,
783 .gfx7_gfx8_gfx9_insts,
784 .localmemorysize65536,
785 .mimg_r128,
786 .movrel,
787 .no_sram_ecc_support,
788 .trig_reduced_range,
789 .wavefrontsize64,
790 }),
791 };
792 result[@enumToInt(Feature.sgpr_init_bug)] = .{
793 .index = @enumToInt(Feature.sgpr_init_bug),
794 .name = @tagName(Feature.sgpr_init_bug),
795 .llvm_name = "sgpr-init-bug",
796 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
797 .dependencies = 0,
798 };
799 result[@enumToInt(Feature.si_scheduler)] = .{
800 .index = @enumToInt(Feature.si_scheduler),
801 .name = @tagName(Feature.si_scheduler),
802 .llvm_name = "si-scheduler",
803 .description = "Enable SI Machine Scheduler",
804 .dependencies = 0,
805 };
806 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{
807 .index = @enumToInt(Feature.smem_to_vector_write_hazard),
808 .name = @tagName(Feature.smem_to_vector_write_hazard),
809 .llvm_name = "smem-to-vector-write-hazard",
810 .description = "s_load_dword followed by v_cmp page faults",
811 .dependencies = 0,
812 };
813 result[@enumToInt(Feature.southern_islands)] = .{
814 .index = @enumToInt(Feature.southern_islands),
815 .name = @tagName(Feature.southern_islands),
816 .llvm_name = "southern-islands",
817 .description = "SOUTHERN_ISLANDS GPU generation",
818 .dependencies = featureSet(&[_]Feature{
819 .fp64,
820 .ldsbankcount32,
821 .localmemorysize32768,
822 .mimg_r128,
823 .movrel,
824 .no_sram_ecc_support,
825 .no_xnack_support,
826 .trig_reduced_range,
827 .wavefrontsize64,
828 }),
829 };
830 result[@enumToInt(Feature.sram_ecc)] = .{
831 .index = @enumToInt(Feature.sram_ecc),
832 .name = @tagName(Feature.sram_ecc),
833 .llvm_name = "sram-ecc",
834 .description = "Enable SRAM ECC",
835 .dependencies = 0,
836 };
837 result[@enumToInt(Feature.trap_handler)] = .{
838 .index = @enumToInt(Feature.trap_handler),
839 .name = @tagName(Feature.trap_handler),
840 .llvm_name = "trap-handler",
841 .description = "Trap handler support",
842 .dependencies = 0,
843 };
844 result[@enumToInt(Feature.trig_reduced_range)] = .{
845 .index = @enumToInt(Feature.trig_reduced_range),
846 .name = @tagName(Feature.trig_reduced_range),
847 .llvm_name = "trig-reduced-range",
848 .description = "Requires use of fract on arguments to trig instructions",
849 .dependencies = 0,
850 };
851 result[@enumToInt(Feature.unaligned_buffer_access)] = .{
852 .index = @enumToInt(Feature.unaligned_buffer_access),
853 .name = @tagName(Feature.unaligned_buffer_access),
854 .llvm_name = "unaligned-buffer-access",
855 .description = "Support unaligned global loads and stores",
856 .dependencies = 0,
857 };
858 result[@enumToInt(Feature.unaligned_scratch_access)] = .{
859 .index = @enumToInt(Feature.unaligned_scratch_access),
860 .name = @tagName(Feature.unaligned_scratch_access),
861 .llvm_name = "unaligned-scratch-access",
862 .description = "Support unaligned scratch loads and stores",
863 .dependencies = 0,
864 };
865 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{
866 .index = @enumToInt(Feature.unpacked_d16_vmem),
867 .name = @tagName(Feature.unpacked_d16_vmem),
868 .llvm_name = "unpacked-d16-vmem",
869 .description = "Has unpacked d16 vmem instructions",
870 .dependencies = 0,
871 };
872 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{
873 .index = @enumToInt(Feature.unsafe_ds_offset_folding),
874 .name = @tagName(Feature.unsafe_ds_offset_folding),
875 .llvm_name = "unsafe-ds-offset-folding",
876 .description = "Force using DS instruction immediate offsets on SI",
877 .dependencies = 0,
878 };
879 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{
880 .index = @enumToInt(Feature.vcmpx_exec_war_hazard),
881 .name = @tagName(Feature.vcmpx_exec_war_hazard),
882 .llvm_name = "vcmpx-exec-war-hazard",
883 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
884 .dependencies = 0,
885 };
886 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{
887 .index = @enumToInt(Feature.vcmpx_permlane_hazard),
888 .name = @tagName(Feature.vcmpx_permlane_hazard),
889 .llvm_name = "vcmpx-permlane-hazard",
890 .description = "TODO: describe me",
891 .dependencies = 0,
892 };
893 result[@enumToInt(Feature.vgpr_index_mode)] = .{
894 .index = @enumToInt(Feature.vgpr_index_mode),
895 .name = @tagName(Feature.vgpr_index_mode),
896 .llvm_name = "vgpr-index-mode",
897 .description = "Has VGPR mode register indexing",
898 .dependencies = 0,
899 };
900 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{
901 .index = @enumToInt(Feature.vmem_to_scalar_write_hazard),
902 .name = @tagName(Feature.vmem_to_scalar_write_hazard),
903 .llvm_name = "vmem-to-scalar-write-hazard",
904 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
905 .dependencies = 0,
906 };
907 result[@enumToInt(Feature.volcanic_islands)] = .{
908 .index = @enumToInt(Feature.volcanic_islands),
909 .name = @tagName(Feature.volcanic_islands),
910 .llvm_name = "volcanic-islands",
911 .description = "VOLCANIC_ISLANDS GPU generation",
912 .dependencies = featureSet(&[_]Feature{
913 .@"16_bit_insts",
914 .ci_insts,
915 .dpp,
916 .flat_address_space,
917 .fp64,
918 .gcn3_encoding,
919 .gfx7_gfx8_gfx9_insts,
920 .gfx8_insts,
921 .int_clamp_insts,
922 .inv_2pi_inline_imm,
923 .localmemorysize65536,
924 .mimg_r128,
925 .movrel,
926 .no_sram_ecc_support,
927 .s_memrealtime,
928 .scalar_stores,
929 .sdwa,
930 .sdwa_mav,
931 .sdwa_out_mods_vopc,
932 .trig_reduced_range,
933 .vgpr_index_mode,
934 .wavefrontsize64,
935 }),
936 };
937 result[@enumToInt(Feature.vop3_literal)] = .{
938 .index = @enumToInt(Feature.vop3_literal),
939 .name = @tagName(Feature.vop3_literal),
940 .llvm_name = "vop3-literal",
941 .description = "Can use one literal in VOP3",
942 .dependencies = 0,
943 };
944 result[@enumToInt(Feature.vop3p)] = .{
945 .index = @enumToInt(Feature.vop3p),
946 .name = @tagName(Feature.vop3p),
947 .llvm_name = "vop3p",
948 .description = "Has VOP3P packed instructions",
949 .dependencies = 0,
950 };
951 result[@enumToInt(Feature.vscnt)] = .{
952 .index = @enumToInt(Feature.vscnt),
953 .name = @tagName(Feature.vscnt),
954 .llvm_name = "vscnt",
955 .description = "Has separate store vscnt counter",
956 .dependencies = 0,
957 };
958 result[@enumToInt(Feature.wavefrontsize16)] = .{
959 .index = @enumToInt(Feature.wavefrontsize16),
960 .name = @tagName(Feature.wavefrontsize16),
961 .llvm_name = "wavefrontsize16",
962 .description = "The number of threads per wavefront",
963 .dependencies = 0,
964 };
965 result[@enumToInt(Feature.wavefrontsize32)] = .{
966 .index = @enumToInt(Feature.wavefrontsize32),
967 .name = @tagName(Feature.wavefrontsize32),
968 .llvm_name = "wavefrontsize32",
969 .description = "The number of threads per wavefront",
970 .dependencies = 0,
971 };
972 result[@enumToInt(Feature.wavefrontsize64)] = .{
973 .index = @enumToInt(Feature.wavefrontsize64),
974 .name = @tagName(Feature.wavefrontsize64),
975 .llvm_name = "wavefrontsize64",
976 .description = "The number of threads per wavefront",
977 .dependencies = 0,
978 };
979 result[@enumToInt(Feature.xnack)] = .{
980 .index = @enumToInt(Feature.xnack),
981 .name = @tagName(Feature.xnack),
982 .llvm_name = "xnack",
983 .description = "Enable XNACK support",
984 .dependencies = 0,
985 };
986 break :blk result;
987};
988
989pub const cpu = struct {
990 pub const bonaire = Cpu{
991 .name = "bonaire",
992 .llvm_name = "bonaire",
993 .features = featureSet(&[_]Feature{
994 .code_object_v3,
995 .ldsbankcount32,
996 .no_xnack_support,
997 .sea_islands,
998 }),
999 };
1000 pub const carrizo = Cpu{
1001 .name = "carrizo",
1002 .llvm_name = "carrizo",
1003 .features = featureSet(&[_]Feature{
1004 .code_object_v3,
1005 .fast_fmaf,
1006 .half_rate_64_ops,
1007 .ldsbankcount32,
1008 .unpacked_d16_vmem,
1009 .volcanic_islands,
1010 .xnack,
1011 }),
1012 };
1013 pub const fiji = Cpu{
1014 .name = "fiji",
1015 .llvm_name = "fiji",
1016 .features = featureSet(&[_]Feature{
1017 .code_object_v3,
1018 .ldsbankcount32,
1019 .no_xnack_support,
1020 .unpacked_d16_vmem,
1021 .volcanic_islands,
1022 }),
1023 };
1024 pub const generic = Cpu{
1025 .name = "generic",
1026 .llvm_name = "generic",
1027 .features = featureSet(&[_]Feature{
1028 .wavefrontsize64,
1029 }),
1030 };
1031 pub const generic_hsa = Cpu{
1032 .name = "generic_hsa",
1033 .llvm_name = "generic-hsa",
1034 .features = featureSet(&[_]Feature{
1035 .flat_address_space,
1036 .wavefrontsize64,
1037 }),
1038 };
1039 pub const gfx1010 = Cpu{
1040 .name = "gfx1010",
1041 .llvm_name = "gfx1010",
1042 .features = featureSet(&[_]Feature{
1043 .code_object_v3,
1044 .dl_insts,
1045 .flat_segment_offset_bug,
1046 .gfx10,
1047 .inst_fwd_prefetch_bug,
1048 .lds_branch_vmem_war_hazard,
1049 .lds_misaligned_bug,
1050 .ldsbankcount32,
1051 .no_xnack_support,
1052 .nsa_encoding,
1053 .nsa_to_vmem_bug,
1054 .offset_3f_bug,
1055 .scalar_atomics,
1056 .scalar_flat_scratch_insts,
1057 .scalar_stores,
1058 .smem_to_vector_write_hazard,
1059 .vcmpx_exec_war_hazard,
1060 .vcmpx_permlane_hazard,
1061 .vmem_to_scalar_write_hazard,
1062 .wavefrontsize32,
1063 }),
1064 };
1065 pub const gfx1011 = Cpu{
1066 .name = "gfx1011",
1067 .llvm_name = "gfx1011",
1068 .features = featureSet(&[_]Feature{
1069 .code_object_v3,
1070 .dl_insts,
1071 .dot1_insts,
1072 .dot2_insts,
1073 .dot5_insts,
1074 .dot6_insts,
1075 .flat_segment_offset_bug,
1076 .gfx10,
1077 .inst_fwd_prefetch_bug,
1078 .lds_branch_vmem_war_hazard,
1079 .ldsbankcount32,
1080 .no_xnack_support,
1081 .nsa_encoding,
1082 .nsa_to_vmem_bug,
1083 .offset_3f_bug,
1084 .scalar_atomics,
1085 .scalar_flat_scratch_insts,
1086 .scalar_stores,
1087 .smem_to_vector_write_hazard,
1088 .vcmpx_exec_war_hazard,
1089 .vcmpx_permlane_hazard,
1090 .vmem_to_scalar_write_hazard,
1091 .wavefrontsize32,
1092 }),
1093 };
1094 pub const gfx1012 = Cpu{
1095 .name = "gfx1012",
1096 .llvm_name = "gfx1012",
1097 .features = featureSet(&[_]Feature{
1098 .code_object_v3,
1099 .dl_insts,
1100 .dot1_insts,
1101 .dot2_insts,
1102 .dot5_insts,
1103 .dot6_insts,
1104 .flat_segment_offset_bug,
1105 .gfx10,
1106 .inst_fwd_prefetch_bug,
1107 .lds_branch_vmem_war_hazard,
1108 .lds_misaligned_bug,
1109 .ldsbankcount32,
1110 .no_xnack_support,
1111 .nsa_encoding,
1112 .nsa_to_vmem_bug,
1113 .offset_3f_bug,
1114 .scalar_atomics,
1115 .scalar_flat_scratch_insts,
1116 .scalar_stores,
1117 .smem_to_vector_write_hazard,
1118 .vcmpx_exec_war_hazard,
1119 .vcmpx_permlane_hazard,
1120 .vmem_to_scalar_write_hazard,
1121 .wavefrontsize32,
1122 }),
1123 };
1124 pub const gfx600 = Cpu{
1125 .name = "gfx600",
1126 .llvm_name = "gfx600",
1127 .features = featureSet(&[_]Feature{
1128 .code_object_v3,
1129 .fast_fmaf,
1130 .half_rate_64_ops,
1131 .ldsbankcount32,
1132 .no_xnack_support,
1133 .southern_islands,
1134 }),
1135 };
1136 pub const gfx601 = Cpu{
1137 .name = "gfx601",
1138 .llvm_name = "gfx601",
1139 .features = featureSet(&[_]Feature{
1140 .code_object_v3,
1141 .ldsbankcount32,
1142 .no_xnack_support,
1143 .southern_islands,
1144 }),
1145 };
1146 pub const gfx700 = Cpu{
1147 .name = "gfx700",
1148 .llvm_name = "gfx700",
1149 .features = featureSet(&[_]Feature{
1150 .code_object_v3,
1151 .ldsbankcount32,
1152 .no_xnack_support,
1153 .sea_islands,
1154 }),
1155 };
1156 pub const gfx701 = Cpu{
1157 .name = "gfx701",
1158 .llvm_name = "gfx701",
1159 .features = featureSet(&[_]Feature{
1160 .code_object_v3,
1161 .fast_fmaf,
1162 .half_rate_64_ops,
1163 .ldsbankcount32,
1164 .no_xnack_support,
1165 .sea_islands,
1166 }),
1167 };
1168 pub const gfx702 = Cpu{
1169 .name = "gfx702",
1170 .llvm_name = "gfx702",
1171 .features = featureSet(&[_]Feature{
1172 .code_object_v3,
1173 .fast_fmaf,
1174 .ldsbankcount16,
1175 .no_xnack_support,
1176 .sea_islands,
1177 }),
1178 };
1179 pub const gfx703 = Cpu{
1180 .name = "gfx703",
1181 .llvm_name = "gfx703",
1182 .features = featureSet(&[_]Feature{
1183 .code_object_v3,
1184 .ldsbankcount16,
1185 .no_xnack_support,
1186 .sea_islands,
1187 }),
1188 };
1189 pub const gfx704 = Cpu{
1190 .name = "gfx704",
1191 .llvm_name = "gfx704",
1192 .features = featureSet(&[_]Feature{
1193 .code_object_v3,
1194 .ldsbankcount32,
1195 .no_xnack_support,
1196 .sea_islands,
1197 }),
1198 };
1199 pub const gfx801 = Cpu{
1200 .name = "gfx801",
1201 .llvm_name = "gfx801",
1202 .features = featureSet(&[_]Feature{
1203 .code_object_v3,
1204 .fast_fmaf,
1205 .half_rate_64_ops,
1206 .ldsbankcount32,
1207 .unpacked_d16_vmem,
1208 .volcanic_islands,
1209 .xnack,
1210 }),
1211 };
1212 pub const gfx802 = Cpu{
1213 .name = "gfx802",
1214 .llvm_name = "gfx802",
1215 .features = featureSet(&[_]Feature{
1216 .code_object_v3,
1217 .ldsbankcount32,
1218 .no_xnack_support,
1219 .sgpr_init_bug,
1220 .unpacked_d16_vmem,
1221 .volcanic_islands,
1222 }),
1223 };
1224 pub const gfx803 = Cpu{
1225 .name = "gfx803",
1226 .llvm_name = "gfx803",
1227 .features = featureSet(&[_]Feature{
1228 .code_object_v3,
1229 .ldsbankcount32,
1230 .no_xnack_support,
1231 .unpacked_d16_vmem,
1232 .volcanic_islands,
1233 }),
1234 };
1235 pub const gfx810 = Cpu{
1236 .name = "gfx810",
1237 .llvm_name = "gfx810",
1238 .features = featureSet(&[_]Feature{
1239 .code_object_v3,
1240 .ldsbankcount16,
1241 .volcanic_islands,
1242 .xnack,
1243 }),
1244 };
1245 pub const gfx900 = Cpu{
1246 .name = "gfx900",
1247 .llvm_name = "gfx900",
1248 .features = featureSet(&[_]Feature{
1249 .code_object_v3,
1250 .gfx9,
1251 .ldsbankcount32,
1252 .mad_mix_insts,
1253 .no_sram_ecc_support,
1254 .no_xnack_support,
1255 }),
1256 };
1257 pub const gfx902 = Cpu{
1258 .name = "gfx902",
1259 .llvm_name = "gfx902",
1260 .features = featureSet(&[_]Feature{
1261 .code_object_v3,
1262 .gfx9,
1263 .ldsbankcount32,
1264 .mad_mix_insts,
1265 .no_sram_ecc_support,
1266 .xnack,
1267 }),
1268 };
1269 pub const gfx904 = Cpu{
1270 .name = "gfx904",
1271 .llvm_name = "gfx904",
1272 .features = featureSet(&[_]Feature{
1273 .code_object_v3,
1274 .fma_mix_insts,
1275 .gfx9,
1276 .ldsbankcount32,
1277 .no_sram_ecc_support,
1278 .no_xnack_support,
1279 }),
1280 };
1281 pub const gfx906 = Cpu{
1282 .name = "gfx906",
1283 .llvm_name = "gfx906",
1284 .features = featureSet(&[_]Feature{
1285 .code_object_v3,
1286 .dl_insts,
1287 .dot1_insts,
1288 .dot2_insts,
1289 .fma_mix_insts,
1290 .gfx9,
1291 .half_rate_64_ops,
1292 .ldsbankcount32,
1293 .no_xnack_support,
1294 }),
1295 };
1296 pub const gfx908 = Cpu{
1297 .name = "gfx908",
1298 .llvm_name = "gfx908",
1299 .features = featureSet(&[_]Feature{
1300 .atomic_fadd_insts,
1301 .code_object_v3,
1302 .dl_insts,
1303 .dot1_insts,
1304 .dot2_insts,
1305 .dot3_insts,
1306 .dot4_insts,
1307 .dot5_insts,
1308 .dot6_insts,
1309 .fma_mix_insts,
1310 .gfx9,
1311 .half_rate_64_ops,
1312 .ldsbankcount32,
1313 .mai_insts,
1314 .pk_fmac_f16_inst,
1315 .sram_ecc,
1316 }),
1317 };
1318 pub const gfx909 = Cpu{
1319 .name = "gfx909",
1320 .llvm_name = "gfx909",
1321 .features = featureSet(&[_]Feature{
1322 .code_object_v3,
1323 .gfx9,
1324 .ldsbankcount32,
1325 .mad_mix_insts,
1326 .xnack,
1327 }),
1328 };
1329 pub const hainan = Cpu{
1330 .name = "hainan",
1331 .llvm_name = "hainan",
1332 .features = featureSet(&[_]Feature{
1333 .code_object_v3,
1334 .ldsbankcount32,
1335 .no_xnack_support,
1336 .southern_islands,
1337 }),
1338 };
1339 pub const hawaii = Cpu{
1340 .name = "hawaii",
1341 .llvm_name = "hawaii",
1342 .features = featureSet(&[_]Feature{
1343 .code_object_v3,
1344 .fast_fmaf,
1345 .half_rate_64_ops,
1346 .ldsbankcount32,
1347 .no_xnack_support,
1348 .sea_islands,
1349 }),
1350 };
1351 pub const iceland = Cpu{
1352 .name = "iceland",
1353 .llvm_name = "iceland",
1354 .features = featureSet(&[_]Feature{
1355 .code_object_v3,
1356 .ldsbankcount32,
1357 .no_xnack_support,
1358 .sgpr_init_bug,
1359 .unpacked_d16_vmem,
1360 .volcanic_islands,
1361 }),
1362 };
1363 pub const kabini = Cpu{
1364 .name = "kabini",
1365 .llvm_name = "kabini",
1366 .features = featureSet(&[_]Feature{
1367 .code_object_v3,
1368 .ldsbankcount16,
1369 .no_xnack_support,
1370 .sea_islands,
1371 }),
1372 };
1373 pub const kaveri = Cpu{
1374 .name = "kaveri",
1375 .llvm_name = "kaveri",
1376 .features = featureSet(&[_]Feature{
1377 .code_object_v3,
1378 .ldsbankcount32,
1379 .no_xnack_support,
1380 .sea_islands,
1381 }),
1382 };
1383 pub const mullins = Cpu{
1384 .name = "mullins",
1385 .llvm_name = "mullins",
1386 .features = featureSet(&[_]Feature{
1387 .code_object_v3,
1388 .ldsbankcount16,
1389 .no_xnack_support,
1390 .sea_islands,
1391 }),
1392 };
1393 pub const oland = Cpu{
1394 .name = "oland",
1395 .llvm_name = "oland",
1396 .features = featureSet(&[_]Feature{
1397 .code_object_v3,
1398 .ldsbankcount32,
1399 .no_xnack_support,
1400 .southern_islands,
1401 }),
1402 };
1403 pub const pitcairn = Cpu{
1404 .name = "pitcairn",
1405 .llvm_name = "pitcairn",
1406 .features = featureSet(&[_]Feature{
1407 .code_object_v3,
1408 .ldsbankcount32,
1409 .no_xnack_support,
1410 .southern_islands,
1411 }),
1412 };
1413 pub const polaris10 = Cpu{
1414 .name = "polaris10",
1415 .llvm_name = "polaris10",
1416 .features = featureSet(&[_]Feature{
1417 .code_object_v3,
1418 .ldsbankcount32,
1419 .no_xnack_support,
1420 .unpacked_d16_vmem,
1421 .volcanic_islands,
1422 }),
1423 };
1424 pub const polaris11 = Cpu{
1425 .name = "polaris11",
1426 .llvm_name = "polaris11",
1427 .features = featureSet(&[_]Feature{
1428 .code_object_v3,
1429 .ldsbankcount32,
1430 .no_xnack_support,
1431 .unpacked_d16_vmem,
1432 .volcanic_islands,
1433 }),
1434 };
1435 pub const stoney = Cpu{
1436 .name = "stoney",
1437 .llvm_name = "stoney",
1438 .features = featureSet(&[_]Feature{
1439 .code_object_v3,
1440 .ldsbankcount16,
1441 .volcanic_islands,
1442 .xnack,
1443 }),
1444 };
1445 pub const tahiti = Cpu{
1446 .name = "tahiti",
1447 .llvm_name = "tahiti",
1448 .features = featureSet(&[_]Feature{
1449 .code_object_v3,
1450 .fast_fmaf,
1451 .half_rate_64_ops,
1452 .ldsbankcount32,
1453 .no_xnack_support,
1454 .southern_islands,
1455 }),
1456 };
1457 pub const tonga = Cpu{
1458 .name = "tonga",
1459 .llvm_name = "tonga",
1460 .features = featureSet(&[_]Feature{
1461 .code_object_v3,
1462 .ldsbankcount32,
1463 .no_xnack_support,
1464 .sgpr_init_bug,
1465 .unpacked_d16_vmem,
1466 .volcanic_islands,
1467 }),
1468 };
1469 pub const verde = Cpu{
1470 .name = "verde",
1471 .llvm_name = "verde",
1472 .features = featureSet(&[_]Feature{
1473 .code_object_v3,
1474 .ldsbankcount32,
1475 .no_xnack_support,
1476 .southern_islands,
1477 }),
1478 };
1479};
1480
1481/// All amdgpu CPUs, sorted alphabetically by name.
1482/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
1483/// compiler has inefficient memory and CPU usage, affecting build times.
1484pub const all_cpus = &[_]*const Cpu{
1485 &cpu.bonaire,
1486 &cpu.carrizo,
1487 &cpu.fiji,
1488 &cpu.generic,
1489 &cpu.generic_hsa,
1490 &cpu.gfx1010,
1491 &cpu.gfx1011,
1492 &cpu.gfx1012,
1493 &cpu.gfx600,
1494 &cpu.gfx601,
1495 &cpu.gfx700,
1496 &cpu.gfx701,
1497 &cpu.gfx702,
1498 &cpu.gfx703,
1499 &cpu.gfx704,
1500 &cpu.gfx801,
1501 &cpu.gfx802,
1502 &cpu.gfx803,
1503 &cpu.gfx810,
1504 &cpu.gfx900,
1505 &cpu.gfx902,
1506 &cpu.gfx904,
1507 &cpu.gfx906,
1508 &cpu.gfx908,
1509 &cpu.gfx909,
1510 &cpu.hainan,
1511 &cpu.hawaii,
1512 &cpu.iceland,
1513 &cpu.kabini,
1514 &cpu.kaveri,
1515 &cpu.mullins,
1516 &cpu.oland,
1517 &cpu.pitcairn,
1518 &cpu.polaris10,
1519 &cpu.polaris11,
1520 &cpu.stoney,
1521 &cpu.tahiti,
1522 &cpu.tonga,
1523 &cpu.verde,
21321524};
lib/std/target/arm.zig+2674-2295
......@@ -1,2296 +1,2675 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_msecext8 = Feature{
5 .name = "msecext8",
6 .llvm_name = "8msecext",
7 .description = "Enable support for ARMv8-M Security Extensions",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_aclass = Feature{
13 .name = "aclass",
14 .llvm_name = "aclass",
15 .description = "Is application profile ('A' series)",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_aes = Feature{
21 .name = "aes",
22 .llvm_name = "aes",
23 .description = "Enable AES support",
24 .dependencies = &[_]*const Feature {
25 &feature_fpregs,
26 &feature_d32,
27 },
28};
29
30pub const feature_acquireRelease = Feature{
31 .name = "acquireRelease",
32 .llvm_name = "acquire-release",
33 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
34 .dependencies = &[_]*const Feature {
35 },
36};
37
38pub const feature_avoidMovsShop = Feature{
39 .name = "avoidMovsShop",
40 .llvm_name = "avoid-movs-shop",
41 .description = "Avoid movs instructions with shifter operand",
42 .dependencies = &[_]*const Feature {
43 },
44};
45
46pub const feature_avoidPartialCpsr = Feature{
47 .name = "avoidPartialCpsr",
48 .llvm_name = "avoid-partial-cpsr",
49 .description = "Avoid CPSR partial update for OOO execution",
50 .dependencies = &[_]*const Feature {
51 },
52};
53
54pub const feature_crc = Feature{
55 .name = "crc",
56 .llvm_name = "crc",
57 .description = "Enable support for CRC instructions",
58 .dependencies = &[_]*const Feature {
59 },
60};
61
62pub const feature_cheapPredicableCpsr = Feature{
63 .name = "cheapPredicableCpsr",
64 .llvm_name = "cheap-predicable-cpsr",
65 .description = "Disable +1 predication cost for instructions updating CPSR",
66 .dependencies = &[_]*const Feature {
67 },
68};
69
70pub const feature_vldnAlign = Feature{
71 .name = "vldnAlign",
72 .llvm_name = "vldn-align",
73 .description = "Check for VLDn unaligned access",
74 .dependencies = &[_]*const Feature {
75 },
76};
77
78pub const feature_crypto = Feature{
79 .name = "crypto",
80 .llvm_name = "crypto",
81 .description = "Enable support for Cryptography extensions",
82 .dependencies = &[_]*const Feature {
83 &feature_d32,
84 &feature_fpregs,
85 },
86};
87
88pub const feature_d32 = Feature{
89 .name = "d32",
90 .llvm_name = "d32",
91 .description = "Extend FP to 32 double registers",
92 .dependencies = &[_]*const Feature {
93 },
94};
95
96pub const feature_db = Feature{
97 .name = "db",
98 .llvm_name = "db",
99 .description = "Has data barrier (dmb/dsb) instructions",
100 .dependencies = &[_]*const Feature {
101 },
102};
103
104pub const feature_dfb = Feature{
105 .name = "dfb",
106 .llvm_name = "dfb",
107 .description = "Has full data barrier (dfb) instruction",
108 .dependencies = &[_]*const Feature {
109 },
110};
111
112pub const feature_dsp = Feature{
113 .name = "dsp",
114 .llvm_name = "dsp",
115 .description = "Supports DSP instructions in ARM and/or Thumb2",
116 .dependencies = &[_]*const Feature {
117 },
118};
119
120pub const feature_dontWidenVmovs = Feature{
121 .name = "dontWidenVmovs",
122 .llvm_name = "dont-widen-vmovs",
123 .description = "Don't widen VMOVS to VMOVD",
124 .dependencies = &[_]*const Feature {
125 },
126};
127
128pub const feature_dotprod = Feature{
129 .name = "dotprod",
130 .llvm_name = "dotprod",
131 .description = "Enable support for dot product instructions",
132 .dependencies = &[_]*const Feature {
133 &feature_fpregs,
134 &feature_d32,
135 },
136};
137
138pub const feature_executeOnly = Feature{
139 .name = "executeOnly",
140 .llvm_name = "execute-only",
141 .description = "Enable the generation of execute only code.",
142 .dependencies = &[_]*const Feature {
143 },
144};
145
146pub const feature_expandFpMlx = Feature{
147 .name = "expandFpMlx",
148 .llvm_name = "expand-fp-mlx",
149 .description = "Expand VFP/NEON MLA/MLS instructions",
150 .dependencies = &[_]*const Feature {
151 },
152};
153
154pub const feature_fp16 = Feature{
155 .name = "fp16",
156 .llvm_name = "fp16",
157 .description = "Enable half-precision floating point",
158 .dependencies = &[_]*const Feature {
159 },
160};
161
162pub const feature_fp16fml = Feature{
163 .name = "fp16fml",
164 .llvm_name = "fp16fml",
165 .description = "Enable full half-precision floating point fml instructions",
166 .dependencies = &[_]*const Feature {
167 &feature_fp16,
168 &feature_fpregs,
169 },
170};
171
172pub const feature_fp64 = Feature{
173 .name = "fp64",
174 .llvm_name = "fp64",
175 .description = "Floating point unit supports double precision",
176 .dependencies = &[_]*const Feature {
177 &feature_fpregs,
178 },
179};
180
181pub const feature_fpao = Feature{
182 .name = "fpao",
183 .llvm_name = "fpao",
184 .description = "Enable fast computation of positive address offsets",
185 .dependencies = &[_]*const Feature {
186 },
187};
188
189pub const feature_fpArmv8 = Feature{
190 .name = "fpArmv8",
191 .llvm_name = "fp-armv8",
192 .description = "Enable ARMv8 FP",
193 .dependencies = &[_]*const Feature {
194 &feature_fp16,
195 &feature_d32,
196 &feature_fpregs,
197 },
198};
199
200pub const feature_fpArmv8d16 = Feature{
201 .name = "fpArmv8d16",
202 .llvm_name = "fp-armv8d16",
203 .description = "Enable ARMv8 FP with only 16 d-registers",
204 .dependencies = &[_]*const Feature {
205 &feature_fp16,
206 &feature_fpregs,
207 },
208};
209
210pub const feature_fpArmv8d16sp = Feature{
211 .name = "fpArmv8d16sp",
212 .llvm_name = "fp-armv8d16sp",
213 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",
214 .dependencies = &[_]*const Feature {
215 &feature_fp16,
216 &feature_fpregs,
217 },
218};
219
220pub const feature_fpArmv8sp = Feature{
221 .name = "fpArmv8sp",
222 .llvm_name = "fp-armv8sp",
223 .description = "Enable ARMv8 FP with no double precision",
224 .dependencies = &[_]*const Feature {
225 &feature_fp16,
226 &feature_fpregs,
227 &feature_d32,
228 },
229};
230
231pub const feature_fpregs = Feature{
232 .name = "fpregs",
233 .llvm_name = "fpregs",
234 .description = "Enable FP registers",
235 .dependencies = &[_]*const Feature {
236 },
237};
238
239pub const feature_fpregs16 = Feature{
240 .name = "fpregs16",
241 .llvm_name = "fpregs16",
242 .description = "Enable 16-bit FP registers",
243 .dependencies = &[_]*const Feature {
244 &feature_fpregs,
245 },
246};
247
248pub const feature_fpregs64 = Feature{
249 .name = "fpregs64",
250 .llvm_name = "fpregs64",
251 .description = "Enable 64-bit FP registers",
252 .dependencies = &[_]*const Feature {
253 &feature_fpregs,
254 },
255};
256
257pub const feature_fullfp16 = Feature{
258 .name = "fullfp16",
259 .llvm_name = "fullfp16",
260 .description = "Enable full half-precision floating point",
261 .dependencies = &[_]*const Feature {
262 &feature_fp16,
263 &feature_fpregs,
264 },
265};
266
267pub const feature_fuseAes = Feature{
268 .name = "fuseAes",
269 .llvm_name = "fuse-aes",
270 .description = "CPU fuses AES crypto operations",
271 .dependencies = &[_]*const Feature {
272 },
273};
274
275pub const feature_fuseLiterals = Feature{
276 .name = "fuseLiterals",
277 .llvm_name = "fuse-literals",
278 .description = "CPU fuses literal generation operations",
279 .dependencies = &[_]*const Feature {
280 },
281};
282
283pub const feature_hwdivArm = Feature{
284 .name = "hwdivArm",
285 .llvm_name = "hwdiv-arm",
286 .description = "Enable divide instructions in ARM mode",
287 .dependencies = &[_]*const Feature {
288 },
289};
290
291pub const feature_hwdiv = Feature{
292 .name = "hwdiv",
293 .llvm_name = "hwdiv",
294 .description = "Enable divide instructions in Thumb",
295 .dependencies = &[_]*const Feature {
296 },
297};
298
299pub const feature_noBranchPredictor = Feature{
300 .name = "noBranchPredictor",
301 .llvm_name = "no-branch-predictor",
302 .description = "Has no branch predictor",
303 .dependencies = &[_]*const Feature {
304 },
305};
306
307pub const feature_retAddrStack = Feature{
308 .name = "retAddrStack",
309 .llvm_name = "ret-addr-stack",
310 .description = "Has return address stack",
311 .dependencies = &[_]*const Feature {
312 },
313};
314
315pub const feature_slowfpvmlx = Feature{
316 .name = "slowfpvmlx",
317 .llvm_name = "slowfpvmlx",
318 .description = "Disable VFP / NEON MAC instructions",
319 .dependencies = &[_]*const Feature {
320 },
321};
322
323pub const feature_vmlxHazards = Feature{
324 .name = "vmlxHazards",
325 .llvm_name = "vmlx-hazards",
326 .description = "Has VMLx hazards",
327 .dependencies = &[_]*const Feature {
328 },
329};
330
331pub const feature_lob = Feature{
332 .name = "lob",
333 .llvm_name = "lob",
334 .description = "Enable Low Overhead Branch extensions",
335 .dependencies = &[_]*const Feature {
336 },
337};
338
339pub const feature_longCalls = Feature{
340 .name = "longCalls",
341 .llvm_name = "long-calls",
342 .description = "Generate calls via indirect call instructions",
343 .dependencies = &[_]*const Feature {
344 },
345};
346
347pub const feature_mclass = Feature{
348 .name = "mclass",
349 .llvm_name = "mclass",
350 .description = "Is microcontroller profile ('M' series)",
351 .dependencies = &[_]*const Feature {
352 },
353};
354
355pub const feature_mp = Feature{
356 .name = "mp",
357 .llvm_name = "mp",
358 .description = "Supports Multiprocessing extension",
359 .dependencies = &[_]*const Feature {
360 },
361};
362
363pub const feature_muxedUnits = Feature{
364 .name = "muxedUnits",
365 .llvm_name = "muxed-units",
366 .description = "Has muxed AGU and NEON/FPU",
367 .dependencies = &[_]*const Feature {
368 },
369};
370
371pub const feature_neon = Feature{
372 .name = "neon",
373 .llvm_name = "neon",
374 .description = "Enable NEON instructions",
375 .dependencies = &[_]*const Feature {
376 &feature_d32,
377 &feature_fpregs,
378 },
379};
380
381pub const feature_neonfp = Feature{
382 .name = "neonfp",
383 .llvm_name = "neonfp",
384 .description = "Use NEON for single precision FP",
385 .dependencies = &[_]*const Feature {
386 },
387};
388
389pub const feature_neonFpmovs = Feature{
390 .name = "neonFpmovs",
391 .llvm_name = "neon-fpmovs",
392 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
393 .dependencies = &[_]*const Feature {
394 },
395};
396
397pub const feature_naclTrap = Feature{
398 .name = "naclTrap",
399 .llvm_name = "nacl-trap",
400 .description = "NaCl trap",
401 .dependencies = &[_]*const Feature {
402 },
403};
404
405pub const feature_noarm = Feature{
406 .name = "noarm",
407 .llvm_name = "noarm",
408 .description = "Does not support ARM mode execution",
409 .dependencies = &[_]*const Feature {
410 },
411};
412
413pub const feature_noMovt = Feature{
414 .name = "noMovt",
415 .llvm_name = "no-movt",
416 .description = "Don't use movt/movw pairs for 32-bit imms",
417 .dependencies = &[_]*const Feature {
418 },
419};
420
421pub const feature_noNegImmediates = Feature{
422 .name = "noNegImmediates",
423 .llvm_name = "no-neg-immediates",
424 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
425 .dependencies = &[_]*const Feature {
426 },
427};
428
429pub const feature_disablePostraScheduler = Feature{
430 .name = "disablePostraScheduler",
431 .llvm_name = "disable-postra-scheduler",
432 .description = "Don't schedule again after register allocation",
433 .dependencies = &[_]*const Feature {
434 },
435};
436
437pub const feature_nonpipelinedVfp = Feature{
438 .name = "nonpipelinedVfp",
439 .llvm_name = "nonpipelined-vfp",
440 .description = "VFP instructions are not pipelined",
441 .dependencies = &[_]*const Feature {
442 },
443};
444
445pub const feature_perfmon = Feature{
446 .name = "perfmon",
447 .llvm_name = "perfmon",
448 .description = "Enable support for Performance Monitor extensions",
449 .dependencies = &[_]*const Feature {
450 },
451};
452
453pub const feature_bit32 = Feature{
454 .name = "bit32",
455 .llvm_name = "32bit",
456 .description = "Prefer 32-bit Thumb instrs",
457 .dependencies = &[_]*const Feature {
458 },
459};
460
461pub const feature_preferIshst = Feature{
462 .name = "preferIshst",
463 .llvm_name = "prefer-ishst",
464 .description = "Prefer ISHST barriers",
465 .dependencies = &[_]*const Feature {
466 },
467};
468
469pub const feature_loopAlign = Feature{
470 .name = "loopAlign",
471 .llvm_name = "loop-align",
472 .description = "Prefer 32-bit alignment for loops",
473 .dependencies = &[_]*const Feature {
474 },
475};
476
477pub const feature_preferVmovsr = Feature{
478 .name = "preferVmovsr",
479 .llvm_name = "prefer-vmovsr",
480 .description = "Prefer VMOVSR",
481 .dependencies = &[_]*const Feature {
482 },
483};
484
485pub const feature_profUnpr = Feature{
486 .name = "profUnpr",
487 .llvm_name = "prof-unpr",
488 .description = "Is profitable to unpredicate",
489 .dependencies = &[_]*const Feature {
490 },
491};
492
493pub const feature_ras = Feature{
494 .name = "ras",
495 .llvm_name = "ras",
496 .description = "Enable Reliability, Availability and Serviceability extensions",
497 .dependencies = &[_]*const Feature {
498 },
499};
500
501pub const feature_rclass = Feature{
502 .name = "rclass",
503 .llvm_name = "rclass",
504 .description = "Is realtime profile ('R' series)",
505 .dependencies = &[_]*const Feature {
506 },
507};
508
509pub const feature_readTpHard = Feature{
510 .name = "readTpHard",
511 .llvm_name = "read-tp-hard",
512 .description = "Reading thread pointer from register",
513 .dependencies = &[_]*const Feature {
514 },
515};
516
517pub const feature_reserveR9 = Feature{
518 .name = "reserveR9",
519 .llvm_name = "reserve-r9",
520 .description = "Reserve R9, making it unavailable as GPR",
521 .dependencies = &[_]*const Feature {
522 },
523};
524
525pub const feature_sb = Feature{
526 .name = "sb",
527 .llvm_name = "sb",
528 .description = "Enable v8.5a Speculation Barrier",
529 .dependencies = &[_]*const Feature {
530 },
531};
532
533pub const feature_sha2 = Feature{
534 .name = "sha2",
535 .llvm_name = "sha2",
536 .description = "Enable SHA1 and SHA256 support",
537 .dependencies = &[_]*const Feature {
538 &feature_fpregs,
539 &feature_d32,
540 },
541};
542
543pub const feature_slowFpBrcc = Feature{
544 .name = "slowFpBrcc",
545 .llvm_name = "slow-fp-brcc",
546 .description = "FP compare + branch is slow",
547 .dependencies = &[_]*const Feature {
548 },
549};
550
551pub const feature_slowLoadDSubreg = Feature{
552 .name = "slowLoadDSubreg",
553 .llvm_name = "slow-load-D-subreg",
554 .description = "Loading into D subregs is slow",
555 .dependencies = &[_]*const Feature {
556 },
557};
558
559pub const feature_slowOddReg = Feature{
560 .name = "slowOddReg",
561 .llvm_name = "slow-odd-reg",
562 .description = "VLDM/VSTM starting with an odd register is slow",
563 .dependencies = &[_]*const Feature {
564 },
565};
566
567pub const feature_slowVdup32 = Feature{
568 .name = "slowVdup32",
569 .llvm_name = "slow-vdup32",
570 .description = "Has slow VDUP32 - prefer VMOV",
571 .dependencies = &[_]*const Feature {
572 },
573};
574
575pub const feature_slowVgetlni32 = Feature{
576 .name = "slowVgetlni32",
577 .llvm_name = "slow-vgetlni32",
578 .description = "Has slow VGETLNi32 - prefer VMOV",
579 .dependencies = &[_]*const Feature {
580 },
581};
582
583pub const feature_splatVfpNeon = Feature{
584 .name = "splatVfpNeon",
585 .llvm_name = "splat-vfp-neon",
586 .description = "Splat register from VFP to NEON",
587 .dependencies = &[_]*const Feature {
588 &feature_dontWidenVmovs,
589 },
590};
591
592pub const feature_strictAlign = Feature{
593 .name = "strictAlign",
594 .llvm_name = "strict-align",
595 .description = "Disallow all unaligned memory access",
596 .dependencies = &[_]*const Feature {
597 },
598};
599
600pub const feature_thumb2 = Feature{
601 .name = "thumb2",
602 .llvm_name = "thumb2",
603 .description = "Enable Thumb2 instructions",
604 .dependencies = &[_]*const Feature {
605 },
606};
607
608pub const feature_trustzone = Feature{
609 .name = "trustzone",
610 .llvm_name = "trustzone",
611 .description = "Enable support for TrustZone security extensions",
612 .dependencies = &[_]*const Feature {
613 },
614};
615
616pub const feature_useAa = Feature{
617 .name = "useAa",
618 .llvm_name = "use-aa",
619 .description = "Use alias analysis during codegen",
620 .dependencies = &[_]*const Feature {
621 },
622};
623
624pub const feature_useMisched = Feature{
625 .name = "useMisched",
626 .llvm_name = "use-misched",
627 .description = "Use the MachineScheduler",
628 .dependencies = &[_]*const Feature {
629 },
630};
631
632pub const feature_wideStrideVfp = Feature{
633 .name = "wideStrideVfp",
634 .llvm_name = "wide-stride-vfp",
635 .description = "Use a wide stride when allocating VFP registers",
636 .dependencies = &[_]*const Feature {
637 },
638};
639
640pub const feature_v7clrex = Feature{
641 .name = "v7clrex",
642 .llvm_name = "v7clrex",
643 .description = "Has v7 clrex instruction",
644 .dependencies = &[_]*const Feature {
645 },
646};
647
648pub const feature_vfp2 = Feature{
649 .name = "vfp2",
650 .llvm_name = "vfp2",
651 .description = "Enable VFP2 instructions",
652 .dependencies = &[_]*const Feature {
653 &feature_d32,
654 &feature_fpregs,
655 },
656};
657
658pub const feature_vfp2d16 = Feature{
659 .name = "vfp2d16",
660 .llvm_name = "vfp2d16",
661 .description = "Enable VFP2 instructions with only 16 d-registers",
662 .dependencies = &[_]*const Feature {
663 &feature_fpregs,
664 },
665};
666
667pub const feature_vfp2d16sp = Feature{
668 .name = "vfp2d16sp",
669 .llvm_name = "vfp2d16sp",
670 .description = "Enable VFP2 instructions with only 16 d-registers and no double precision",
671 .dependencies = &[_]*const Feature {
672 &feature_fpregs,
673 },
674};
675
676pub const feature_vfp2sp = Feature{
677 .name = "vfp2sp",
678 .llvm_name = "vfp2sp",
679 .description = "Enable VFP2 instructions with no double precision",
680 .dependencies = &[_]*const Feature {
681 &feature_fpregs,
682 &feature_d32,
683 },
684};
685
686pub const feature_vfp3 = Feature{
687 .name = "vfp3",
688 .llvm_name = "vfp3",
689 .description = "Enable VFP3 instructions",
690 .dependencies = &[_]*const Feature {
691 &feature_fpregs,
692 &feature_d32,
693 },
694};
695
696pub const feature_vfp3d16 = Feature{
697 .name = "vfp3d16",
698 .llvm_name = "vfp3d16",
699 .description = "Enable VFP3 instructions with only 16 d-registers",
700 .dependencies = &[_]*const Feature {
701 &feature_fpregs,
702 },
703};
704
705pub const feature_vfp3d16sp = Feature{
706 .name = "vfp3d16sp",
707 .llvm_name = "vfp3d16sp",
708 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",
709 .dependencies = &[_]*const Feature {
710 &feature_fpregs,
711 },
712};
713
714pub const feature_vfp3sp = Feature{
715 .name = "vfp3sp",
716 .llvm_name = "vfp3sp",
717 .description = "Enable VFP3 instructions with no double precision",
718 .dependencies = &[_]*const Feature {
719 &feature_fpregs,
720 &feature_d32,
721 },
722};
723
724pub const feature_vfp4 = Feature{
725 .name = "vfp4",
726 .llvm_name = "vfp4",
727 .description = "Enable VFP4 instructions",
728 .dependencies = &[_]*const Feature {
729 &feature_fp16,
730 &feature_d32,
731 &feature_fpregs,
732 },
733};
734
735pub const feature_vfp4d16 = Feature{
736 .name = "vfp4d16",
737 .llvm_name = "vfp4d16",
738 .description = "Enable VFP4 instructions with only 16 d-registers",
739 .dependencies = &[_]*const Feature {
740 &feature_fp16,
741 &feature_fpregs,
742 },
743};
744
745pub const feature_vfp4d16sp = Feature{
746 .name = "vfp4d16sp",
747 .llvm_name = "vfp4d16sp",
748 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",
749 .dependencies = &[_]*const Feature {
750 &feature_fp16,
751 &feature_fpregs,
752 },
753};
754
755pub const feature_vfp4sp = Feature{
756 .name = "vfp4sp",
757 .llvm_name = "vfp4sp",
758 .description = "Enable VFP4 instructions with no double precision",
759 .dependencies = &[_]*const Feature {
760 &feature_fp16,
761 &feature_fpregs,
762 &feature_d32,
763 },
764};
765
766pub const feature_vmlxForwarding = Feature{
767 .name = "vmlxForwarding",
768 .llvm_name = "vmlx-forwarding",
769 .description = "Has multiplier accumulator forwarding",
770 .dependencies = &[_]*const Feature {
771 },
772};
773
774pub const feature_virtualization = Feature{
775 .name = "virtualization",
776 .llvm_name = "virtualization",
777 .description = "Supports Virtualization extension",
778 .dependencies = &[_]*const Feature {
779 &feature_hwdiv,
780 &feature_hwdivArm,
781 },
782};
783
784pub const feature_zcz = Feature{
785 .name = "zcz",
786 .llvm_name = "zcz",
787 .description = "Has zero-cycle zeroing instructions",
788 .dependencies = &[_]*const Feature {
789 },
790};
791
792pub const features = &[_]*const Feature {
793 &feature_msecext8,
794 &feature_aclass,
795 &feature_aes,
796 &feature_acquireRelease,
797 &feature_avoidMovsShop,
798 &feature_avoidPartialCpsr,
799 &feature_crc,
800 &feature_cheapPredicableCpsr,
801 &feature_vldnAlign,
802 &feature_crypto,
803 &feature_d32,
804 &feature_db,
805 &feature_dfb,
806 &feature_dsp,
807 &feature_dontWidenVmovs,
808 &feature_dotprod,
809 &feature_executeOnly,
810 &feature_expandFpMlx,
811 &feature_fp16,
812 &feature_fp16fml,
813 &feature_fp64,
814 &feature_fpao,
815 &feature_fpArmv8,
816 &feature_fpArmv8d16,
817 &feature_fpArmv8d16sp,
818 &feature_fpArmv8sp,
819 &feature_fpregs,
820 &feature_fpregs16,
821 &feature_fpregs64,
822 &feature_fullfp16,
823 &feature_fuseAes,
824 &feature_fuseLiterals,
825 &feature_hwdivArm,
826 &feature_hwdiv,
827 &feature_noBranchPredictor,
828 &feature_retAddrStack,
829 &feature_slowfpvmlx,
830 &feature_vmlxHazards,
831 &feature_lob,
832 &feature_longCalls,
833 &feature_mclass,
834 &feature_mp,
835 &feature_muxedUnits,
836 &feature_neon,
837 &feature_neonfp,
838 &feature_neonFpmovs,
839 &feature_naclTrap,
840 &feature_noarm,
841 &feature_noMovt,
842 &feature_noNegImmediates,
843 &feature_disablePostraScheduler,
844 &feature_nonpipelinedVfp,
845 &feature_perfmon,
846 &feature_bit32,
847 &feature_preferIshst,
848 &feature_loopAlign,
849 &feature_preferVmovsr,
850 &feature_profUnpr,
851 &feature_ras,
852 &feature_rclass,
853 &feature_readTpHard,
854 &feature_reserveR9,
855 &feature_sb,
856 &feature_sha2,
857 &feature_slowFpBrcc,
858 &feature_slowLoadDSubreg,
859 &feature_slowOddReg,
860 &feature_slowVdup32,
861 &feature_slowVgetlni32,
862 &feature_splatVfpNeon,
863 &feature_strictAlign,
864 &feature_thumb2,
865 &feature_trustzone,
866 &feature_useAa,
867 &feature_useMisched,
868 &feature_wideStrideVfp,
869 &feature_v7clrex,
870 &feature_vfp2,
871 &feature_vfp2d16,
872 &feature_vfp2d16sp,
873 &feature_vfp2sp,
874 &feature_vfp3,
875 &feature_vfp3d16,
876 &feature_vfp3d16sp,
877 &feature_vfp3sp,
878 &feature_vfp4,
879 &feature_vfp4d16,
880 &feature_vfp4d16sp,
881 &feature_vfp4sp,
882 &feature_vmlxForwarding,
883 &feature_virtualization,
884 &feature_zcz,
885};
886
887pub const cpu_arm1020e = Cpu{
888 .name = "arm1020e",
889 .llvm_name = "arm1020e",
890 .dependencies = &[_]*const Feature {
891 },
892};
893
894pub const cpu_arm1020t = Cpu{
895 .name = "arm1020t",
896 .llvm_name = "arm1020t",
897 .dependencies = &[_]*const Feature {
898 },
899};
900
901pub const cpu_arm1022e = Cpu{
902 .name = "arm1022e",
903 .llvm_name = "arm1022e",
904 .dependencies = &[_]*const Feature {
905 },
906};
907
908pub const cpu_arm10e = Cpu{
909 .name = "arm10e",
910 .llvm_name = "arm10e",
911 .dependencies = &[_]*const Feature {
912 },
913};
914
915pub const cpu_arm10tdmi = Cpu{
916 .name = "arm10tdmi",
917 .llvm_name = "arm10tdmi",
918 .dependencies = &[_]*const Feature {
919 },
920};
921
922pub const cpu_arm1136jS = Cpu{
923 .name = "arm1136jS",
924 .llvm_name = "arm1136j-s",
925 .dependencies = &[_]*const Feature {
926 &feature_dsp,
927 },
928};
929
930pub const cpu_arm1136jfS = Cpu{
931 .name = "arm1136jfS",
932 .llvm_name = "arm1136jf-s",
933 .dependencies = &[_]*const Feature {
934 &feature_dsp,
935 &feature_slowfpvmlx,
936 &feature_d32,
937 &feature_fpregs,
938 &feature_vfp2,
939 },
940};
941
942pub const cpu_arm1156t2S = Cpu{
943 .name = "arm1156t2S",
944 .llvm_name = "arm1156t2-s",
945 .dependencies = &[_]*const Feature {
946 &feature_dsp,
947 &feature_thumb2,
948 },
949};
950
951pub const cpu_arm1156t2fS = Cpu{
952 .name = "arm1156t2fS",
953 .llvm_name = "arm1156t2f-s",
954 .dependencies = &[_]*const Feature {
955 &feature_dsp,
956 &feature_thumb2,
957 &feature_slowfpvmlx,
958 &feature_d32,
959 &feature_fpregs,
960 &feature_vfp2,
961 },
962};
963
964pub const cpu_arm1176jS = Cpu{
965 .name = "arm1176jS",
966 .llvm_name = "arm1176j-s",
967 .dependencies = &[_]*const Feature {
968 &feature_trustzone,
969 },
970};
971
972pub const cpu_arm1176jzS = Cpu{
973 .name = "arm1176jzS",
974 .llvm_name = "arm1176jz-s",
975 .dependencies = &[_]*const Feature {
976 &feature_trustzone,
977 },
978};
979
980pub const cpu_arm1176jzfS = Cpu{
981 .name = "arm1176jzfS",
982 .llvm_name = "arm1176jzf-s",
983 .dependencies = &[_]*const Feature {
984 &feature_trustzone,
985 &feature_slowfpvmlx,
986 &feature_d32,
987 &feature_fpregs,
988 &feature_vfp2,
989 },
990};
991
992pub const cpu_arm710t = Cpu{
993 .name = "arm710t",
994 .llvm_name = "arm710t",
995 .dependencies = &[_]*const Feature {
996 },
997};
998
999pub const cpu_arm720t = Cpu{
1000 .name = "arm720t",
1001 .llvm_name = "arm720t",
1002 .dependencies = &[_]*const Feature {
1003 },
1004};
1005
1006pub const cpu_arm7tdmi = Cpu{
1007 .name = "arm7tdmi",
1008 .llvm_name = "arm7tdmi",
1009 .dependencies = &[_]*const Feature {
1010 },
1011};
1012
1013pub const cpu_arm7tdmiS = Cpu{
1014 .name = "arm7tdmiS",
1015 .llvm_name = "arm7tdmi-s",
1016 .dependencies = &[_]*const Feature {
1017 },
1018};
1019
1020pub const cpu_arm8 = Cpu{
1021 .name = "arm8",
1022 .llvm_name = "arm8",
1023 .dependencies = &[_]*const Feature {
1024 },
1025};
1026
1027pub const cpu_arm810 = Cpu{
1028 .name = "arm810",
1029 .llvm_name = "arm810",
1030 .dependencies = &[_]*const Feature {
1031 },
1032};
1033
1034pub const cpu_arm9 = Cpu{
1035 .name = "arm9",
1036 .llvm_name = "arm9",
1037 .dependencies = &[_]*const Feature {
1038 },
1039};
1040
1041pub const cpu_arm920 = Cpu{
1042 .name = "arm920",
1043 .llvm_name = "arm920",
1044 .dependencies = &[_]*const Feature {
1045 },
1046};
1047
1048pub const cpu_arm920t = Cpu{
1049 .name = "arm920t",
1050 .llvm_name = "arm920t",
1051 .dependencies = &[_]*const Feature {
1052 },
1053};
1054
1055pub const cpu_arm922t = Cpu{
1056 .name = "arm922t",
1057 .llvm_name = "arm922t",
1058 .dependencies = &[_]*const Feature {
1059 },
1060};
1061
1062pub const cpu_arm926ejS = Cpu{
1063 .name = "arm926ejS",
1064 .llvm_name = "arm926ej-s",
1065 .dependencies = &[_]*const Feature {
1066 },
1067};
1068
1069pub const cpu_arm940t = Cpu{
1070 .name = "arm940t",
1071 .llvm_name = "arm940t",
1072 .dependencies = &[_]*const Feature {
1073 },
1074};
1075
1076pub const cpu_arm946eS = Cpu{
1077 .name = "arm946eS",
1078 .llvm_name = "arm946e-s",
1079 .dependencies = &[_]*const Feature {
1080 },
1081};
1082
1083pub const cpu_arm966eS = Cpu{
1084 .name = "arm966eS",
1085 .llvm_name = "arm966e-s",
1086 .dependencies = &[_]*const Feature {
1087 },
1088};
1089
1090pub const cpu_arm968eS = Cpu{
1091 .name = "arm968eS",
1092 .llvm_name = "arm968e-s",
1093 .dependencies = &[_]*const Feature {
1094 },
1095};
1096
1097pub const cpu_arm9e = Cpu{
1098 .name = "arm9e",
1099 .llvm_name = "arm9e",
1100 .dependencies = &[_]*const Feature {
1101 },
1102};
1103
1104pub const cpu_arm9tdmi = Cpu{
1105 .name = "arm9tdmi",
1106 .llvm_name = "arm9tdmi",
1107 .dependencies = &[_]*const Feature {
1108 },
1109};
1110
1111pub const cpu_cortexA12 = Cpu{
1112 .name = "cortexA12",
1113 .llvm_name = "cortex-a12",
1114 .dependencies = &[_]*const Feature {
1115 &feature_d32,
1116 &feature_dsp,
1117 &feature_thumb2,
1118 &feature_db,
1119 &feature_aclass,
1120 &feature_fpregs,
1121 &feature_v7clrex,
1122 &feature_perfmon,
1123 &feature_avoidPartialCpsr,
1124 &feature_retAddrStack,
1125 &feature_mp,
1126 &feature_trustzone,
1127 &feature_fp16,
1128 &feature_vfp4,
1129 &feature_vmlxForwarding,
1130 &feature_hwdiv,
1131 &feature_hwdivArm,
1132 &feature_virtualization,
1133 },
1134};
1135
1136pub const cpu_cortexA15 = Cpu{
1137 .name = "cortexA15",
1138 .llvm_name = "cortex-a15",
1139 .dependencies = &[_]*const Feature {
1140 &feature_d32,
1141 &feature_dsp,
1142 &feature_thumb2,
1143 &feature_db,
1144 &feature_aclass,
1145 &feature_fpregs,
1146 &feature_v7clrex,
1147 &feature_perfmon,
1148 &feature_avoidPartialCpsr,
1149 &feature_vldnAlign,
1150 &feature_dontWidenVmovs,
1151 &feature_retAddrStack,
1152 &feature_mp,
1153 &feature_muxedUnits,
1154 &feature_splatVfpNeon,
1155 &feature_trustzone,
1156 &feature_fp16,
1157 &feature_vfp4,
1158 &feature_hwdiv,
1159 &feature_hwdivArm,
1160 &feature_virtualization,
1161 },
1162};
1163
1164pub const cpu_cortexA17 = Cpu{
1165 .name = "cortexA17",
1166 .llvm_name = "cortex-a17",
1167 .dependencies = &[_]*const Feature {
1168 &feature_d32,
1169 &feature_dsp,
1170 &feature_thumb2,
1171 &feature_db,
1172 &feature_aclass,
1173 &feature_fpregs,
1174 &feature_v7clrex,
1175 &feature_perfmon,
1176 &feature_avoidPartialCpsr,
1177 &feature_retAddrStack,
1178 &feature_mp,
1179 &feature_trustzone,
1180 &feature_fp16,
1181 &feature_vfp4,
1182 &feature_vmlxForwarding,
1183 &feature_hwdiv,
1184 &feature_hwdivArm,
1185 &feature_virtualization,
1186 },
1187};
1188
1189pub const cpu_cortexA32 = Cpu{
1190 .name = "cortexA32",
1191 .llvm_name = "cortex-a32",
1192 .dependencies = &[_]*const Feature {
1193 &feature_hwdiv,
1194 &feature_mp,
1195 &feature_d32,
1196 &feature_dsp,
1197 &feature_thumb2,
1198 &feature_db,
1199 &feature_aclass,
1200 &feature_fpregs,
1201 &feature_trustzone,
1202 &feature_crc,
1203 &feature_fp16,
1204 &feature_acquireRelease,
1205 &feature_v7clrex,
1206 &feature_perfmon,
1207 &feature_hwdivArm,
1208 &feature_crypto,
1209 },
1210};
1211
1212pub const cpu_cortexA35 = Cpu{
1213 .name = "cortexA35",
1214 .llvm_name = "cortex-a35",
1215 .dependencies = &[_]*const Feature {
1216 &feature_hwdiv,
1217 &feature_mp,
1218 &feature_d32,
1219 &feature_dsp,
1220 &feature_thumb2,
1221 &feature_db,
1222 &feature_aclass,
1223 &feature_fpregs,
1224 &feature_trustzone,
1225 &feature_crc,
1226 &feature_fp16,
1227 &feature_acquireRelease,
1228 &feature_v7clrex,
1229 &feature_perfmon,
1230 &feature_hwdivArm,
1231 &feature_crypto,
1232 },
1233};
1234
1235pub const cpu_cortexA5 = Cpu{
1236 .name = "cortexA5",
1237 .llvm_name = "cortex-a5",
1238 .dependencies = &[_]*const Feature {
1239 &feature_d32,
1240 &feature_dsp,
1241 &feature_thumb2,
1242 &feature_db,
1243 &feature_aclass,
1244 &feature_fpregs,
1245 &feature_v7clrex,
1246 &feature_perfmon,
1247 &feature_retAddrStack,
1248 &feature_slowfpvmlx,
1249 &feature_mp,
1250 &feature_slowFpBrcc,
1251 &feature_trustzone,
1252 &feature_fp16,
1253 &feature_vfp4,
1254 &feature_vmlxForwarding,
1255 },
1256};
1257
1258pub const cpu_cortexA53 = Cpu{
1259 .name = "cortexA53",
1260 .llvm_name = "cortex-a53",
1261 .dependencies = &[_]*const Feature {
1262 &feature_hwdiv,
1263 &feature_mp,
1264 &feature_d32,
1265 &feature_dsp,
1266 &feature_thumb2,
1267 &feature_db,
1268 &feature_aclass,
1269 &feature_fpregs,
1270 &feature_trustzone,
1271 &feature_crc,
1272 &feature_fp16,
1273 &feature_acquireRelease,
1274 &feature_v7clrex,
1275 &feature_perfmon,
1276 &feature_hwdivArm,
1277 &feature_crypto,
1278 &feature_fpao,
1279 },
1280};
1281
1282pub const cpu_cortexA55 = Cpu{
1283 .name = "cortexA55",
1284 .llvm_name = "cortex-a55",
1285 .dependencies = &[_]*const Feature {
1286 &feature_hwdiv,
1287 &feature_mp,
1288 &feature_d32,
1289 &feature_dsp,
1290 &feature_thumb2,
1291 &feature_db,
1292 &feature_aclass,
1293 &feature_fpregs,
1294 &feature_trustzone,
1295 &feature_crc,
1296 &feature_fp16,
1297 &feature_acquireRelease,
1298 &feature_v7clrex,
1299 &feature_perfmon,
1300 &feature_hwdivArm,
1301 &feature_ras,
1302 &feature_dotprod,
1303 },
1304};
1305
1306pub const cpu_cortexA57 = Cpu{
1307 .name = "cortexA57",
1308 .llvm_name = "cortex-a57",
1309 .dependencies = &[_]*const Feature {
1310 &feature_hwdiv,
1311 &feature_mp,
1312 &feature_d32,
1313 &feature_dsp,
1314 &feature_thumb2,
1315 &feature_db,
1316 &feature_aclass,
1317 &feature_fpregs,
1318 &feature_trustzone,
1319 &feature_crc,
1320 &feature_fp16,
1321 &feature_acquireRelease,
1322 &feature_v7clrex,
1323 &feature_perfmon,
1324 &feature_hwdivArm,
1325 &feature_avoidPartialCpsr,
1326 &feature_cheapPredicableCpsr,
1327 &feature_crypto,
1328 &feature_fpao,
1329 },
1330};
1331
1332pub const cpu_cortexA7 = Cpu{
1333 .name = "cortexA7",
1334 .llvm_name = "cortex-a7",
1335 .dependencies = &[_]*const Feature {
1336 &feature_d32,
1337 &feature_dsp,
1338 &feature_thumb2,
1339 &feature_db,
1340 &feature_aclass,
1341 &feature_fpregs,
1342 &feature_v7clrex,
1343 &feature_perfmon,
1344 &feature_retAddrStack,
1345 &feature_slowfpvmlx,
1346 &feature_vmlxHazards,
1347 &feature_mp,
1348 &feature_slowFpBrcc,
1349 &feature_trustzone,
1350 &feature_fp16,
1351 &feature_vfp4,
1352 &feature_vmlxForwarding,
1353 &feature_hwdiv,
1354 &feature_hwdivArm,
1355 &feature_virtualization,
1356 },
1357};
1358
1359pub const cpu_cortexA72 = Cpu{
1360 .name = "cortexA72",
1361 .llvm_name = "cortex-a72",
1362 .dependencies = &[_]*const Feature {
1363 &feature_hwdiv,
1364 &feature_mp,
1365 &feature_d32,
1366 &feature_dsp,
1367 &feature_thumb2,
1368 &feature_db,
1369 &feature_aclass,
1370 &feature_fpregs,
1371 &feature_trustzone,
1372 &feature_crc,
1373 &feature_fp16,
1374 &feature_acquireRelease,
1375 &feature_v7clrex,
1376 &feature_perfmon,
1377 &feature_hwdivArm,
1378 &feature_crypto,
1379 },
1380};
1381
1382pub const cpu_cortexA73 = Cpu{
1383 .name = "cortexA73",
1384 .llvm_name = "cortex-a73",
1385 .dependencies = &[_]*const Feature {
1386 &feature_hwdiv,
1387 &feature_mp,
1388 &feature_d32,
1389 &feature_dsp,
1390 &feature_thumb2,
1391 &feature_db,
1392 &feature_aclass,
1393 &feature_fpregs,
1394 &feature_trustzone,
1395 &feature_crc,
1396 &feature_fp16,
1397 &feature_acquireRelease,
1398 &feature_v7clrex,
1399 &feature_perfmon,
1400 &feature_hwdivArm,
1401 &feature_crypto,
1402 },
1403};
1404
1405pub const cpu_cortexA75 = Cpu{
1406 .name = "cortexA75",
1407 .llvm_name = "cortex-a75",
1408 .dependencies = &[_]*const Feature {
1409 &feature_hwdiv,
1410 &feature_mp,
1411 &feature_d32,
1412 &feature_dsp,
1413 &feature_thumb2,
1414 &feature_db,
1415 &feature_aclass,
1416 &feature_fpregs,
1417 &feature_trustzone,
1418 &feature_crc,
1419 &feature_fp16,
1420 &feature_acquireRelease,
1421 &feature_v7clrex,
1422 &feature_perfmon,
1423 &feature_hwdivArm,
1424 &feature_ras,
1425 &feature_dotprod,
1426 },
1427};
1428
1429pub const cpu_cortexA76 = Cpu{
1430 .name = "cortexA76",
1431 .llvm_name = "cortex-a76",
1432 .dependencies = &[_]*const Feature {
1433 &feature_hwdiv,
1434 &feature_mp,
1435 &feature_d32,
1436 &feature_dsp,
1437 &feature_thumb2,
1438 &feature_db,
1439 &feature_aclass,
1440 &feature_fpregs,
1441 &feature_trustzone,
1442 &feature_crc,
1443 &feature_fp16,
1444 &feature_acquireRelease,
1445 &feature_v7clrex,
1446 &feature_perfmon,
1447 &feature_hwdivArm,
1448 &feature_ras,
1449 &feature_crypto,
1450 &feature_dotprod,
1451 &feature_fullfp16,
1452 },
1453};
1454
1455pub const cpu_cortexA76ae = Cpu{
1456 .name = "cortexA76ae",
1457 .llvm_name = "cortex-a76ae",
1458 .dependencies = &[_]*const Feature {
1459 &feature_hwdiv,
1460 &feature_mp,
1461 &feature_d32,
1462 &feature_dsp,
1463 &feature_thumb2,
1464 &feature_db,
1465 &feature_aclass,
1466 &feature_fpregs,
1467 &feature_trustzone,
1468 &feature_crc,
1469 &feature_fp16,
1470 &feature_acquireRelease,
1471 &feature_v7clrex,
1472 &feature_perfmon,
1473 &feature_hwdivArm,
1474 &feature_ras,
1475 &feature_crypto,
1476 &feature_dotprod,
1477 &feature_fullfp16,
1478 },
1479};
1480
1481pub const cpu_cortexA8 = Cpu{
1482 .name = "cortexA8",
1483 .llvm_name = "cortex-a8",
1484 .dependencies = &[_]*const Feature {
1485 &feature_d32,
1486 &feature_dsp,
1487 &feature_thumb2,
1488 &feature_db,
1489 &feature_aclass,
1490 &feature_fpregs,
1491 &feature_v7clrex,
1492 &feature_perfmon,
1493 &feature_retAddrStack,
1494 &feature_slowfpvmlx,
1495 &feature_vmlxHazards,
1496 &feature_nonpipelinedVfp,
1497 &feature_slowFpBrcc,
1498 &feature_trustzone,
1499 &feature_vmlxForwarding,
1500 },
1501};
1502
1503pub const cpu_cortexA9 = Cpu{
1504 .name = "cortexA9",
1505 .llvm_name = "cortex-a9",
1506 .dependencies = &[_]*const Feature {
1507 &feature_d32,
1508 &feature_dsp,
1509 &feature_thumb2,
1510 &feature_db,
1511 &feature_aclass,
1512 &feature_fpregs,
1513 &feature_v7clrex,
1514 &feature_perfmon,
1515 &feature_avoidPartialCpsr,
1516 &feature_vldnAlign,
1517 &feature_expandFpMlx,
1518 &feature_fp16,
1519 &feature_retAddrStack,
1520 &feature_vmlxHazards,
1521 &feature_mp,
1522 &feature_muxedUnits,
1523 &feature_neonFpmovs,
1524 &feature_preferVmovsr,
1525 &feature_trustzone,
1526 &feature_vmlxForwarding,
1527 },
1528};
1529
1530pub const cpu_cortexM0 = Cpu{
1531 .name = "cortexM0",
1532 .llvm_name = "cortex-m0",
1533 .dependencies = &[_]*const Feature {
1534 &feature_mclass,
1535 &feature_db,
1536 &feature_noarm,
1537 &feature_strictAlign,
1538 },
1539};
1540
1541pub const cpu_cortexM0plus = Cpu{
1542 .name = "cortexM0plus",
1543 .llvm_name = "cortex-m0plus",
1544 .dependencies = &[_]*const Feature {
1545 &feature_mclass,
1546 &feature_db,
1547 &feature_noarm,
1548 &feature_strictAlign,
1549 },
1550};
1551
1552pub const cpu_cortexM1 = Cpu{
1553 .name = "cortexM1",
1554 .llvm_name = "cortex-m1",
1555 .dependencies = &[_]*const Feature {
1556 &feature_mclass,
1557 &feature_db,
1558 &feature_noarm,
1559 &feature_strictAlign,
1560 },
1561};
1562
1563pub const cpu_cortexM23 = Cpu{
1564 .name = "cortexM23",
1565 .llvm_name = "cortex-m23",
1566 .dependencies = &[_]*const Feature {
1567 &feature_hwdiv,
1568 &feature_mclass,
1569 &feature_db,
1570 &feature_acquireRelease,
1571 &feature_v7clrex,
1572 &feature_noarm,
1573 &feature_msecext8,
1574 &feature_strictAlign,
1575 &feature_noMovt,
1576 },
1577};
1578
1579pub const cpu_cortexM3 = Cpu{
1580 .name = "cortexM3",
1581 .llvm_name = "cortex-m3",
1582 .dependencies = &[_]*const Feature {
1583 &feature_hwdiv,
1584 &feature_thumb2,
1585 &feature_mclass,
1586 &feature_db,
1587 &feature_v7clrex,
1588 &feature_perfmon,
1589 &feature_noarm,
1590 &feature_noBranchPredictor,
1591 &feature_loopAlign,
1592 &feature_useAa,
1593 &feature_useMisched,
1594 },
1595};
1596
1597pub const cpu_cortexM33 = Cpu{
1598 .name = "cortexM33",
1599 .llvm_name = "cortex-m33",
1600 .dependencies = &[_]*const Feature {
1601 &feature_hwdiv,
1602 &feature_thumb2,
1603 &feature_mclass,
1604 &feature_db,
1605 &feature_acquireRelease,
1606 &feature_v7clrex,
1607 &feature_perfmon,
1608 &feature_noarm,
1609 &feature_msecext8,
1610 &feature_dsp,
1611 &feature_fp16,
1612 &feature_fpregs,
1613 &feature_fpArmv8d16sp,
1614 &feature_noBranchPredictor,
1615 &feature_slowfpvmlx,
1616 &feature_loopAlign,
1617 &feature_useAa,
1618 &feature_useMisched,
1619 },
1620};
1621
1622pub const cpu_cortexM35p = Cpu{
1623 .name = "cortexM35p",
1624 .llvm_name = "cortex-m35p",
1625 .dependencies = &[_]*const Feature {
1626 &feature_hwdiv,
1627 &feature_thumb2,
1628 &feature_mclass,
1629 &feature_db,
1630 &feature_acquireRelease,
1631 &feature_v7clrex,
1632 &feature_perfmon,
1633 &feature_noarm,
1634 &feature_msecext8,
1635 &feature_dsp,
1636 &feature_fp16,
1637 &feature_fpregs,
1638 &feature_fpArmv8d16sp,
1639 &feature_noBranchPredictor,
1640 &feature_slowfpvmlx,
1641 &feature_loopAlign,
1642 &feature_useAa,
1643 &feature_useMisched,
1644 },
1645};
1646
1647pub const cpu_cortexM4 = Cpu{
1648 .name = "cortexM4",
1649 .llvm_name = "cortex-m4",
1650 .dependencies = &[_]*const Feature {
1651 &feature_hwdiv,
1652 &feature_dsp,
1653 &feature_thumb2,
1654 &feature_mclass,
1655 &feature_db,
1656 &feature_v7clrex,
1657 &feature_perfmon,
1658 &feature_noarm,
1659 &feature_noBranchPredictor,
1660 &feature_slowfpvmlx,
1661 &feature_loopAlign,
1662 &feature_useAa,
1663 &feature_useMisched,
1664 &feature_fp16,
1665 &feature_fpregs,
1666 &feature_vfp4d16sp,
1667 },
1668};
1669
1670pub const cpu_cortexM7 = Cpu{
1671 .name = "cortexM7",
1672 .llvm_name = "cortex-m7",
1673 .dependencies = &[_]*const Feature {
1674 &feature_hwdiv,
1675 &feature_dsp,
1676 &feature_thumb2,
1677 &feature_mclass,
1678 &feature_db,
1679 &feature_v7clrex,
1680 &feature_perfmon,
1681 &feature_noarm,
1682 &feature_fp16,
1683 &feature_fpregs,
1684 &feature_fpArmv8d16,
1685 },
1686};
1687
1688pub const cpu_cortexR4 = Cpu{
1689 .name = "cortexR4",
1690 .llvm_name = "cortex-r4",
1691 .dependencies = &[_]*const Feature {
1692 &feature_hwdiv,
1693 &feature_dsp,
1694 &feature_rclass,
1695 &feature_thumb2,
1696 &feature_db,
1697 &feature_v7clrex,
1698 &feature_perfmon,
1699 &feature_avoidPartialCpsr,
1700 &feature_retAddrStack,
1701 },
1702};
1703
1704pub const cpu_cortexR4f = Cpu{
1705 .name = "cortexR4f",
1706 .llvm_name = "cortex-r4f",
1707 .dependencies = &[_]*const Feature {
1708 &feature_hwdiv,
1709 &feature_dsp,
1710 &feature_rclass,
1711 &feature_thumb2,
1712 &feature_db,
1713 &feature_v7clrex,
1714 &feature_perfmon,
1715 &feature_avoidPartialCpsr,
1716 &feature_retAddrStack,
1717 &feature_slowfpvmlx,
1718 &feature_slowFpBrcc,
1719 &feature_fpregs,
1720 &feature_vfp3d16,
1721 },
1722};
1723
1724pub const cpu_cortexR5 = Cpu{
1725 .name = "cortexR5",
1726 .llvm_name = "cortex-r5",
1727 .dependencies = &[_]*const Feature {
1728 &feature_hwdiv,
1729 &feature_dsp,
1730 &feature_rclass,
1731 &feature_thumb2,
1732 &feature_db,
1733 &feature_v7clrex,
1734 &feature_perfmon,
1735 &feature_avoidPartialCpsr,
1736 &feature_hwdivArm,
1737 &feature_retAddrStack,
1738 &feature_slowfpvmlx,
1739 &feature_slowFpBrcc,
1740 &feature_fpregs,
1741 &feature_vfp3d16,
1742 },
1743};
1744
1745pub const cpu_cortexR52 = Cpu{
1746 .name = "cortexR52",
1747 .llvm_name = "cortex-r52",
1748 .dependencies = &[_]*const Feature {
1749 &feature_hwdiv,
1750 &feature_dfb,
1751 &feature_mp,
1752 &feature_d32,
1753 &feature_dsp,
1754 &feature_rclass,
1755 &feature_thumb2,
1756 &feature_db,
1757 &feature_fpregs,
1758 &feature_crc,
1759 &feature_fp16,
1760 &feature_acquireRelease,
1761 &feature_v7clrex,
1762 &feature_perfmon,
1763 &feature_hwdivArm,
1764 &feature_fpao,
1765 &feature_useAa,
1766 &feature_useMisched,
1767 },
1768};
1769
1770pub const cpu_cortexR7 = Cpu{
1771 .name = "cortexR7",
1772 .llvm_name = "cortex-r7",
1773 .dependencies = &[_]*const Feature {
1774 &feature_hwdiv,
1775 &feature_dsp,
1776 &feature_rclass,
1777 &feature_thumb2,
1778 &feature_db,
1779 &feature_v7clrex,
1780 &feature_perfmon,
1781 &feature_avoidPartialCpsr,
1782 &feature_fp16,
1783 &feature_hwdivArm,
1784 &feature_retAddrStack,
1785 &feature_slowfpvmlx,
1786 &feature_mp,
1787 &feature_slowFpBrcc,
1788 &feature_fpregs,
1789 &feature_vfp3d16,
1790 },
1791};
1792
1793pub const cpu_cortexR8 = Cpu{
1794 .name = "cortexR8",
1795 .llvm_name = "cortex-r8",
1796 .dependencies = &[_]*const Feature {
1797 &feature_hwdiv,
1798 &feature_dsp,
1799 &feature_rclass,
1800 &feature_thumb2,
1801 &feature_db,
1802 &feature_v7clrex,
1803 &feature_perfmon,
1804 &feature_avoidPartialCpsr,
1805 &feature_fp16,
1806 &feature_hwdivArm,
1807 &feature_retAddrStack,
1808 &feature_slowfpvmlx,
1809 &feature_mp,
1810 &feature_slowFpBrcc,
1811 &feature_fpregs,
1812 &feature_vfp3d16,
1813 },
1814};
1815
1816pub const cpu_cyclone = Cpu{
1817 .name = "cyclone",
1818 .llvm_name = "cyclone",
1819 .dependencies = &[_]*const Feature {
1820 &feature_hwdiv,
1821 &feature_mp,
1822 &feature_d32,
1823 &feature_dsp,
1824 &feature_thumb2,
1825 &feature_db,
1826 &feature_aclass,
1827 &feature_fpregs,
1828 &feature_trustzone,
1829 &feature_crc,
1830 &feature_fp16,
1831 &feature_acquireRelease,
1832 &feature_v7clrex,
1833 &feature_perfmon,
1834 &feature_hwdivArm,
1835 &feature_avoidMovsShop,
1836 &feature_avoidPartialCpsr,
1837 &feature_crypto,
1838 &feature_retAddrStack,
1839 &feature_slowfpvmlx,
1840 &feature_neonfp,
1841 &feature_disablePostraScheduler,
1842 &feature_useMisched,
1843 &feature_vfp4,
1844 &feature_zcz,
1845 },
1846};
1847
1848pub const cpu_ep9312 = Cpu{
1849 .name = "ep9312",
1850 .llvm_name = "ep9312",
1851 .dependencies = &[_]*const Feature {
1852 },
1853};
1854
1855pub const cpu_exynosM1 = Cpu{
1856 .name = "exynosM1",
1857 .llvm_name = "exynos-m1",
1858 .dependencies = &[_]*const Feature {
1859 &feature_hwdiv,
1860 &feature_mp,
1861 &feature_d32,
1862 &feature_dsp,
1863 &feature_thumb2,
1864 &feature_db,
1865 &feature_aclass,
1866 &feature_fpregs,
1867 &feature_trustzone,
1868 &feature_crc,
1869 &feature_fp16,
1870 &feature_acquireRelease,
1871 &feature_v7clrex,
1872 &feature_perfmon,
1873 &feature_hwdivArm,
1874 &feature_fuseLiterals,
1875 &feature_useAa,
1876 &feature_wideStrideVfp,
1877 &feature_slowVgetlni32,
1878 &feature_slowVdup32,
1879 &feature_profUnpr,
1880 &feature_slowFpBrcc,
1881 &feature_retAddrStack,
1882 &feature_zcz,
1883 &feature_slowfpvmlx,
1884 &feature_expandFpMlx,
1885 &feature_fuseAes,
1886 &feature_dontWidenVmovs,
1887 },
1888};
1889
1890pub const cpu_exynosM2 = Cpu{
1891 .name = "exynosM2",
1892 .llvm_name = "exynos-m2",
1893 .dependencies = &[_]*const Feature {
1894 &feature_hwdiv,
1895 &feature_mp,
1896 &feature_d32,
1897 &feature_dsp,
1898 &feature_thumb2,
1899 &feature_db,
1900 &feature_aclass,
1901 &feature_fpregs,
1902 &feature_trustzone,
1903 &feature_crc,
1904 &feature_fp16,
1905 &feature_acquireRelease,
1906 &feature_v7clrex,
1907 &feature_perfmon,
1908 &feature_hwdivArm,
1909 &feature_fuseLiterals,
1910 &feature_useAa,
1911 &feature_wideStrideVfp,
1912 &feature_slowVgetlni32,
1913 &feature_slowVdup32,
1914 &feature_profUnpr,
1915 &feature_slowFpBrcc,
1916 &feature_retAddrStack,
1917 &feature_zcz,
1918 &feature_slowfpvmlx,
1919 &feature_expandFpMlx,
1920 &feature_fuseAes,
1921 &feature_dontWidenVmovs,
1922 },
1923};
1924
1925pub const cpu_exynosM3 = Cpu{
1926 .name = "exynosM3",
1927 .llvm_name = "exynos-m3",
1928 .dependencies = &[_]*const Feature {
1929 &feature_hwdiv,
1930 &feature_mp,
1931 &feature_d32,
1932 &feature_dsp,
1933 &feature_thumb2,
1934 &feature_db,
1935 &feature_aclass,
1936 &feature_fpregs,
1937 &feature_trustzone,
1938 &feature_crc,
1939 &feature_fp16,
1940 &feature_acquireRelease,
1941 &feature_v7clrex,
1942 &feature_perfmon,
1943 &feature_hwdivArm,
1944 &feature_fuseLiterals,
1945 &feature_useAa,
1946 &feature_wideStrideVfp,
1947 &feature_slowVgetlni32,
1948 &feature_slowVdup32,
1949 &feature_profUnpr,
1950 &feature_slowFpBrcc,
1951 &feature_retAddrStack,
1952 &feature_zcz,
1953 &feature_slowfpvmlx,
1954 &feature_expandFpMlx,
1955 &feature_fuseAes,
1956 &feature_dontWidenVmovs,
1957 },
1958};
1959
1960pub const cpu_exynosM4 = Cpu{
1961 .name = "exynosM4",
1962 .llvm_name = "exynos-m4",
1963 .dependencies = &[_]*const Feature {
1964 &feature_hwdiv,
1965 &feature_mp,
1966 &feature_d32,
1967 &feature_dsp,
1968 &feature_thumb2,
1969 &feature_db,
1970 &feature_aclass,
1971 &feature_fpregs,
1972 &feature_trustzone,
1973 &feature_crc,
1974 &feature_fp16,
1975 &feature_acquireRelease,
1976 &feature_v7clrex,
1977 &feature_perfmon,
1978 &feature_hwdivArm,
1979 &feature_ras,
1980 &feature_dotprod,
1981 &feature_fullfp16,
1982 &feature_fuseLiterals,
1983 &feature_useAa,
1984 &feature_wideStrideVfp,
1985 &feature_slowVgetlni32,
1986 &feature_slowVdup32,
1987 &feature_profUnpr,
1988 &feature_slowFpBrcc,
1989 &feature_retAddrStack,
1990 &feature_zcz,
1991 &feature_slowfpvmlx,
1992 &feature_expandFpMlx,
1993 &feature_fuseAes,
1994 &feature_dontWidenVmovs,
1995 },
1996};
1997
1998pub const cpu_exynosM5 = Cpu{
1999 .name = "exynosM5",
2000 .llvm_name = "exynos-m5",
2001 .dependencies = &[_]*const Feature {
2002 &feature_hwdiv,
2003 &feature_mp,
2004 &feature_d32,
2005 &feature_dsp,
2006 &feature_thumb2,
2007 &feature_db,
2008 &feature_aclass,
2009 &feature_fpregs,
2010 &feature_trustzone,
2011 &feature_crc,
2012 &feature_fp16,
2013 &feature_acquireRelease,
2014 &feature_v7clrex,
2015 &feature_perfmon,
2016 &feature_hwdivArm,
2017 &feature_ras,
2018 &feature_dotprod,
2019 &feature_fullfp16,
2020 &feature_fuseLiterals,
2021 &feature_useAa,
2022 &feature_wideStrideVfp,
2023 &feature_slowVgetlni32,
2024 &feature_slowVdup32,
2025 &feature_profUnpr,
2026 &feature_slowFpBrcc,
2027 &feature_retAddrStack,
2028 &feature_zcz,
2029 &feature_slowfpvmlx,
2030 &feature_expandFpMlx,
2031 &feature_fuseAes,
2032 &feature_dontWidenVmovs,
2033 },
2034};
2035
2036pub const cpu_generic = Cpu{
2037 .name = "generic",
2038 .llvm_name = "generic",
2039 .dependencies = &[_]*const Feature {
2040 },
2041};
2042
2043pub const cpu_iwmmxt = Cpu{
2044 .name = "iwmmxt",
2045 .llvm_name = "iwmmxt",
2046 .dependencies = &[_]*const Feature {
2047 },
2048};
2049
2050pub const cpu_krait = Cpu{
2051 .name = "krait",
2052 .llvm_name = "krait",
2053 .dependencies = &[_]*const Feature {
2054 &feature_d32,
2055 &feature_dsp,
2056 &feature_thumb2,
2057 &feature_db,
2058 &feature_aclass,
2059 &feature_fpregs,
2060 &feature_v7clrex,
2061 &feature_perfmon,
2062 &feature_avoidPartialCpsr,
2063 &feature_vldnAlign,
2064 &feature_fp16,
2065 &feature_hwdivArm,
2066 &feature_hwdiv,
2067 &feature_retAddrStack,
2068 &feature_muxedUnits,
2069 &feature_vfp4,
2070 &feature_vmlxForwarding,
2071 },
2072};
2073
2074pub const cpu_kryo = Cpu{
2075 .name = "kryo",
2076 .llvm_name = "kryo",
2077 .dependencies = &[_]*const Feature {
2078 &feature_hwdiv,
2079 &feature_mp,
2080 &feature_d32,
2081 &feature_dsp,
2082 &feature_thumb2,
2083 &feature_db,
2084 &feature_aclass,
2085 &feature_fpregs,
2086 &feature_trustzone,
2087 &feature_crc,
2088 &feature_fp16,
2089 &feature_acquireRelease,
2090 &feature_v7clrex,
2091 &feature_perfmon,
2092 &feature_hwdivArm,
2093 &feature_crypto,
2094 },
2095};
2096
2097pub const cpu_mpcore = Cpu{
2098 .name = "mpcore",
2099 .llvm_name = "mpcore",
2100 .dependencies = &[_]*const Feature {
2101 &feature_slowfpvmlx,
2102 &feature_d32,
2103 &feature_fpregs,
2104 &feature_vfp2,
2105 },
2106};
2107
2108pub const cpu_mpcorenovfp = Cpu{
2109 .name = "mpcorenovfp",
2110 .llvm_name = "mpcorenovfp",
2111 .dependencies = &[_]*const Feature {
2112 },
2113};
2114
2115pub const cpu_sc000 = Cpu{
2116 .name = "sc000",
2117 .llvm_name = "sc000",
2118 .dependencies = &[_]*const Feature {
2119 &feature_mclass,
2120 &feature_db,
2121 &feature_noarm,
2122 &feature_strictAlign,
2123 },
2124};
2125
2126pub const cpu_sc300 = Cpu{
2127 .name = "sc300",
2128 .llvm_name = "sc300",
2129 .dependencies = &[_]*const Feature {
2130 &feature_hwdiv,
2131 &feature_thumb2,
2132 &feature_mclass,
2133 &feature_db,
2134 &feature_v7clrex,
2135 &feature_perfmon,
2136 &feature_noarm,
2137 &feature_noBranchPredictor,
2138 &feature_useAa,
2139 &feature_useMisched,
2140 },
2141};
2142
2143pub const cpu_strongarm = Cpu{
2144 .name = "strongarm",
2145 .llvm_name = "strongarm",
2146 .dependencies = &[_]*const Feature {
2147 },
2148};
2149
2150pub const cpu_strongarm110 = Cpu{
2151 .name = "strongarm110",
2152 .llvm_name = "strongarm110",
2153 .dependencies = &[_]*const Feature {
2154 },
2155};
2156
2157pub const cpu_strongarm1100 = Cpu{
2158 .name = "strongarm1100",
2159 .llvm_name = "strongarm1100",
2160 .dependencies = &[_]*const Feature {
2161 },
2162};
2163
2164pub const cpu_strongarm1110 = Cpu{
2165 .name = "strongarm1110",
2166 .llvm_name = "strongarm1110",
2167 .dependencies = &[_]*const Feature {
2168 },
2169};
2170
2171pub const cpu_swift = Cpu{
2172 .name = "swift",
2173 .llvm_name = "swift",
2174 .dependencies = &[_]*const Feature {
2175 &feature_d32,
2176 &feature_dsp,
2177 &feature_thumb2,
2178 &feature_db,
2179 &feature_aclass,
2180 &feature_fpregs,
2181 &feature_v7clrex,
2182 &feature_perfmon,
2183 &feature_avoidMovsShop,
2184 &feature_avoidPartialCpsr,
2185 &feature_hwdivArm,
2186 &feature_hwdiv,
2187 &feature_retAddrStack,
2188 &feature_slowfpvmlx,
2189 &feature_vmlxHazards,
2190 &feature_mp,
2191 &feature_neonfp,
2192 &feature_disablePostraScheduler,
2193 &feature_preferIshst,
2194 &feature_profUnpr,
2195 &feature_slowLoadDSubreg,
2196 &feature_slowOddReg,
2197 &feature_slowVdup32,
2198 &feature_slowVgetlni32,
2199 &feature_useMisched,
2200 &feature_wideStrideVfp,
2201 &feature_fp16,
2202 &feature_vfp4,
2203 },
2204};
2205
2206pub const cpu_xscale = Cpu{
2207 .name = "xscale",
2208 .llvm_name = "xscale",
2209 .dependencies = &[_]*const Feature {
2210 },
2211};
2212
2213pub const cpus = &[_]*const Cpu {
2214 &cpu_arm1020e,
2215 &cpu_arm1020t,
2216 &cpu_arm1022e,
2217 &cpu_arm10e,
2218 &cpu_arm10tdmi,
2219 &cpu_arm1136jS,
2220 &cpu_arm1136jfS,
2221 &cpu_arm1156t2S,
2222 &cpu_arm1156t2fS,
2223 &cpu_arm1176jS,
2224 &cpu_arm1176jzS,
2225 &cpu_arm1176jzfS,
2226 &cpu_arm710t,
2227 &cpu_arm720t,
2228 &cpu_arm7tdmi,
2229 &cpu_arm7tdmiS,
2230 &cpu_arm8,
2231 &cpu_arm810,
2232 &cpu_arm9,
2233 &cpu_arm920,
2234 &cpu_arm920t,
2235 &cpu_arm922t,
2236 &cpu_arm926ejS,
2237 &cpu_arm940t,
2238 &cpu_arm946eS,
2239 &cpu_arm966eS,
2240 &cpu_arm968eS,
2241 &cpu_arm9e,
2242 &cpu_arm9tdmi,
2243 &cpu_cortexA12,
2244 &cpu_cortexA15,
2245 &cpu_cortexA17,
2246 &cpu_cortexA32,
2247 &cpu_cortexA35,
2248 &cpu_cortexA5,
2249 &cpu_cortexA53,
2250 &cpu_cortexA55,
2251 &cpu_cortexA57,
2252 &cpu_cortexA7,
2253 &cpu_cortexA72,
2254 &cpu_cortexA73,
2255 &cpu_cortexA75,
2256 &cpu_cortexA76,
2257 &cpu_cortexA76ae,
2258 &cpu_cortexA8,
2259 &cpu_cortexA9,
2260 &cpu_cortexM0,
2261 &cpu_cortexM0plus,
2262 &cpu_cortexM1,
2263 &cpu_cortexM23,
2264 &cpu_cortexM3,
2265 &cpu_cortexM33,
2266 &cpu_cortexM35p,
2267 &cpu_cortexM4,
2268 &cpu_cortexM7,
2269 &cpu_cortexR4,
2270 &cpu_cortexR4f,
2271 &cpu_cortexR5,
2272 &cpu_cortexR52,
2273 &cpu_cortexR7,
2274 &cpu_cortexR8,
2275 &cpu_cyclone,
2276 &cpu_ep9312,
2277 &cpu_exynosM1,
2278 &cpu_exynosM2,
2279 &cpu_exynosM3,
2280 &cpu_exynosM4,
2281 &cpu_exynosM5,
2282 &cpu_generic,
2283 &cpu_iwmmxt,
2284 &cpu_krait,
2285 &cpu_kryo,
2286 &cpu_mpcore,
2287 &cpu_mpcorenovfp,
2288 &cpu_sc000,
2289 &cpu_sc300,
2290 &cpu_strongarm,
2291 &cpu_strongarm110,
2292 &cpu_strongarm1100,
2293 &cpu_strongarm1110,
2294 &cpu_swift,
2295 &cpu_xscale,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 @"32bit",
6 @"8msecext",
7 a12,
8 a15,
9 a17,
10 a32,
11 a35,
12 a5,
13 a53,
14 a55,
15 a57,
16 a7,
17 a72,
18 a73,
19 a75,
20 a76,
21 a8,
22 a9,
23 aclass,
24 acquire_release,
25 aes,
26 armv2,
27 armv2a,
28 armv3,
29 armv3m,
30 armv4,
31 armv4t,
32 armv5t,
33 armv5te,
34 armv5tej,
35 armv6,
36 armv6_m,
37 armv6j,
38 armv6k,
39 armv6kz,
40 armv6s_m,
41 armv6t2,
42 armv7_a,
43 armv7_m,
44 armv7_r,
45 armv7e_m,
46 armv7k,
47 armv7s,
48 armv7ve,
49 armv8_a,
50 armv8_m_base,
51 armv8_m_main,
52 armv8_r,
53 armv8_1_a,
54 armv8_1_m_main,
55 armv8_2_a,
56 armv8_3_a,
57 armv8_4_a,
58 armv8_5_a,
59 avoid_movs_shop,
60 avoid_partial_cpsr,
61 cheap_predicable_cpsr,
62 crc,
63 crypto,
64 d32,
65 db,
66 dfb,
67 disable_postra_scheduler,
68 dont_widen_vmovs,
69 dotprod,
70 dsp,
71 execute_only,
72 expand_fp_mlx,
73 exynos,
74 fp_armv8,
75 fp_armv8d16,
76 fp_armv8d16sp,
77 fp_armv8sp,
78 fp16,
79 fp16fml,
80 fp64,
81 fpao,
82 fpregs,
83 fpregs16,
84 fpregs64,
85 fullfp16,
86 fuse_aes,
87 fuse_literals,
88 hwdiv,
89 hwdiv_arm,
90 iwmmxt,
91 iwmmxt2,
92 krait,
93 kryo,
94 lob,
95 long_calls,
96 loop_align,
97 m3,
98 mclass,
99 mp,
100 muxed_units,
101 mve,
102 mve_fp,
103 nacl_trap,
104 neon,
105 neon_fpmovs,
106 neonfp,
107 no_branch_predictor,
108 no_movt,
109 no_neg_immediates,
110 noarm,
111 nonpipelined_vfp,
112 perfmon,
113 prefer_ishst,
114 prefer_vmovsr,
115 prof_unpr,
116 r4,
117 r5,
118 r52,
119 r7,
120 ras,
121 rclass,
122 read_tp_hard,
123 reserve_r9,
124 ret_addr_stack,
125 sb,
126 sha2,
127 slow_fp_brcc,
128 slow_load_D_subreg,
129 slow_odd_reg,
130 slow_vdup32,
131 slow_vgetlni32,
132 slowfpvmlx,
133 soft_float,
134 splat_vfp_neon,
135 strict_align,
136 swift,
137 thumb_mode,
138 thumb2,
139 trustzone,
140 use_aa,
141 use_misched,
142 v4t,
143 v5t,
144 v5te,
145 v6,
146 v6k,
147 v6m,
148 v6t2,
149 v7,
150 v7clrex,
151 v8,
152 v8_1a,
153 v8_1m_main,
154 v8_2a,
155 v8_3a,
156 v8_4a,
157 v8_5a,
158 v8m,
159 v8m_main,
160 vfp2,
161 vfp2d16,
162 vfp2d16sp,
163 vfp2sp,
164 vfp3,
165 vfp3d16,
166 vfp3d16sp,
167 vfp3sp,
168 vfp4,
169 vfp4d16,
170 vfp4d16sp,
171 vfp4sp,
172 virtualization,
173 vldn_align,
174 vmlx_forwarding,
175 vmlx_hazards,
176 wide_stride_vfp,
177 xscale,
178 zcz,
179};
180
181pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
182
183pub const all_features = blk: {
184 const len = @typeInfo(Feature).Enum.fields.len;
185 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
186 var result: [len]Cpu.Feature = undefined;
187 result[@enumToInt(Feature.@"32bit")] = .{
188 .index = @enumToInt(Feature.@"32bit"),
189 .name = @tagName(Feature.@"32bit"),
190 .llvm_name = "32bit",
191 .description = "Prefer 32-bit Thumb instrs",
192 .dependencies = 0,
193 };
194 result[@enumToInt(Feature.@"8msecext")] = .{
195 .index = @enumToInt(Feature.@"8msecext"),
196 .name = @tagName(Feature.@"8msecext"),
197 .llvm_name = "8msecext",
198 .description = "Enable support for ARMv8-M Security Extensions",
199 .dependencies = 0,
200 };
201 result[@enumToInt(Feature.a12)] = .{
202 .index = @enumToInt(Feature.a12),
203 .name = @tagName(Feature.a12),
204 .llvm_name = "a12",
205 .description = "Cortex-A12 ARM processors",
206 .dependencies = 0,
207 };
208 result[@enumToInt(Feature.a15)] = .{
209 .index = @enumToInt(Feature.a15),
210 .name = @tagName(Feature.a15),
211 .llvm_name = "a15",
212 .description = "Cortex-A15 ARM processors",
213 .dependencies = 0,
214 };
215 result[@enumToInt(Feature.a17)] = .{
216 .index = @enumToInt(Feature.a17),
217 .name = @tagName(Feature.a17),
218 .llvm_name = "a17",
219 .description = "Cortex-A17 ARM processors",
220 .dependencies = 0,
221 };
222 result[@enumToInt(Feature.a32)] = .{
223 .index = @enumToInt(Feature.a32),
224 .name = @tagName(Feature.a32),
225 .llvm_name = "a32",
226 .description = "Cortex-A32 ARM processors",
227 .dependencies = 0,
228 };
229 result[@enumToInt(Feature.a35)] = .{
230 .index = @enumToInt(Feature.a35),
231 .name = @tagName(Feature.a35),
232 .llvm_name = "a35",
233 .description = "Cortex-A35 ARM processors",
234 .dependencies = 0,
235 };
236 result[@enumToInt(Feature.a5)] = .{
237 .index = @enumToInt(Feature.a5),
238 .name = @tagName(Feature.a5),
239 .llvm_name = "a5",
240 .description = "Cortex-A5 ARM processors",
241 .dependencies = 0,
242 };
243 result[@enumToInt(Feature.a53)] = .{
244 .index = @enumToInt(Feature.a53),
245 .name = @tagName(Feature.a53),
246 .llvm_name = "a53",
247 .description = "Cortex-A53 ARM processors",
248 .dependencies = 0,
249 };
250 result[@enumToInt(Feature.a55)] = .{
251 .index = @enumToInt(Feature.a55),
252 .name = @tagName(Feature.a55),
253 .llvm_name = "a55",
254 .description = "Cortex-A55 ARM processors",
255 .dependencies = 0,
256 };
257 result[@enumToInt(Feature.a57)] = .{
258 .index = @enumToInt(Feature.a57),
259 .name = @tagName(Feature.a57),
260 .llvm_name = "a57",
261 .description = "Cortex-A57 ARM processors",
262 .dependencies = 0,
263 };
264 result[@enumToInt(Feature.a7)] = .{
265 .index = @enumToInt(Feature.a7),
266 .name = @tagName(Feature.a7),
267 .llvm_name = "a7",
268 .description = "Cortex-A7 ARM processors",
269 .dependencies = 0,
270 };
271 result[@enumToInt(Feature.a72)] = .{
272 .index = @enumToInt(Feature.a72),
273 .name = @tagName(Feature.a72),
274 .llvm_name = "a72",
275 .description = "Cortex-A72 ARM processors",
276 .dependencies = 0,
277 };
278 result[@enumToInt(Feature.a73)] = .{
279 .index = @enumToInt(Feature.a73),
280 .name = @tagName(Feature.a73),
281 .llvm_name = "a73",
282 .description = "Cortex-A73 ARM processors",
283 .dependencies = 0,
284 };
285 result[@enumToInt(Feature.a75)] = .{
286 .index = @enumToInt(Feature.a75),
287 .name = @tagName(Feature.a75),
288 .llvm_name = "a75",
289 .description = "Cortex-A75 ARM processors",
290 .dependencies = 0,
291 };
292 result[@enumToInt(Feature.a76)] = .{
293 .index = @enumToInt(Feature.a76),
294 .name = @tagName(Feature.a76),
295 .llvm_name = "a76",
296 .description = "Cortex-A76 ARM processors",
297 .dependencies = 0,
298 };
299 result[@enumToInt(Feature.a8)] = .{
300 .index = @enumToInt(Feature.a8),
301 .name = @tagName(Feature.a8),
302 .llvm_name = "a8",
303 .description = "Cortex-A8 ARM processors",
304 .dependencies = 0,
305 };
306 result[@enumToInt(Feature.a9)] = .{
307 .index = @enumToInt(Feature.a9),
308 .name = @tagName(Feature.a9),
309 .llvm_name = "a9",
310 .description = "Cortex-A9 ARM processors",
311 .dependencies = 0,
312 };
313 result[@enumToInt(Feature.aclass)] = .{
314 .index = @enumToInt(Feature.aclass),
315 .name = @tagName(Feature.aclass),
316 .llvm_name = "aclass",
317 .description = "Is application profile ('A' series)",
318 .dependencies = 0,
319 };
320 result[@enumToInt(Feature.acquire_release)] = .{
321 .index = @enumToInt(Feature.acquire_release),
322 .name = @tagName(Feature.acquire_release),
323 .llvm_name = "acquire-release",
324 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
325 .dependencies = 0,
326 };
327 result[@enumToInt(Feature.aes)] = .{
328 .index = @enumToInt(Feature.aes),
329 .name = @tagName(Feature.aes),
330 .llvm_name = "aes",
331 .description = "Enable AES support",
332 .dependencies = featureSet(&[_]Feature{
333 .neon,
334 }),
335 };
336 result[@enumToInt(Feature.armv2)] = .{
337 .index = @enumToInt(Feature.armv2),
338 .name = @tagName(Feature.armv2),
339 .llvm_name = "armv2",
340 .description = "ARMv2 architecture",
341 .dependencies = 0,
342 };
343 result[@enumToInt(Feature.armv2a)] = .{
344 .index = @enumToInt(Feature.armv2a),
345 .name = @tagName(Feature.armv2a),
346 .llvm_name = "armv2a",
347 .description = "ARMv2a architecture",
348 .dependencies = 0,
349 };
350 result[@enumToInt(Feature.armv3)] = .{
351 .index = @enumToInt(Feature.armv3),
352 .name = @tagName(Feature.armv3),
353 .llvm_name = "armv3",
354 .description = "ARMv3 architecture",
355 .dependencies = 0,
356 };
357 result[@enumToInt(Feature.armv3m)] = .{
358 .index = @enumToInt(Feature.armv3m),
359 .name = @tagName(Feature.armv3m),
360 .llvm_name = "armv3m",
361 .description = "ARMv3m architecture",
362 .dependencies = 0,
363 };
364 result[@enumToInt(Feature.armv4)] = .{
365 .index = @enumToInt(Feature.armv4),
366 .name = @tagName(Feature.armv4),
367 .llvm_name = "armv4",
368 .description = "ARMv4 architecture",
369 .dependencies = 0,
370 };
371 result[@enumToInt(Feature.armv4t)] = .{
372 .index = @enumToInt(Feature.armv4t),
373 .name = @tagName(Feature.armv4t),
374 .llvm_name = "armv4t",
375 .description = "ARMv4t architecture",
376 .dependencies = featureSet(&[_]Feature{
377 .v4t,
378 }),
379 };
380 result[@enumToInt(Feature.armv5t)] = .{
381 .index = @enumToInt(Feature.armv5t),
382 .name = @tagName(Feature.armv5t),
383 .llvm_name = "armv5t",
384 .description = "ARMv5t architecture",
385 .dependencies = featureSet(&[_]Feature{
386 .v5t,
387 }),
388 };
389 result[@enumToInt(Feature.armv5te)] = .{
390 .index = @enumToInt(Feature.armv5te),
391 .name = @tagName(Feature.armv5te),
392 .llvm_name = "armv5te",
393 .description = "ARMv5te architecture",
394 .dependencies = featureSet(&[_]Feature{
395 .v5te,
396 }),
397 };
398 result[@enumToInt(Feature.armv5tej)] = .{
399 .index = @enumToInt(Feature.armv5tej),
400 .name = @tagName(Feature.armv5tej),
401 .llvm_name = "armv5tej",
402 .description = "ARMv5tej architecture",
403 .dependencies = featureSet(&[_]Feature{
404 .v5te,
405 }),
406 };
407 result[@enumToInt(Feature.armv6)] = .{
408 .index = @enumToInt(Feature.armv6),
409 .name = @tagName(Feature.armv6),
410 .llvm_name = "armv6",
411 .description = "ARMv6 architecture",
412 .dependencies = featureSet(&[_]Feature{
413 .dsp,
414 .v6,
415 }),
416 };
417 result[@enumToInt(Feature.armv6_m)] = .{
418 .index = @enumToInt(Feature.armv6_m),
419 .name = @tagName(Feature.armv6_m),
420 .llvm_name = "armv6-m",
421 .description = "ARMv6m 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.armv6j)] = .{
432 .index = @enumToInt(Feature.armv6j),
433 .name = @tagName(Feature.armv6j),
434 .llvm_name = "armv6j",
435 .description = "ARMv7a architecture",
436 .dependencies = featureSet(&[_]Feature{
437 .armv6,
438 }),
439 };
440 result[@enumToInt(Feature.armv6k)] = .{
441 .index = @enumToInt(Feature.armv6k),
442 .name = @tagName(Feature.armv6k),
443 .llvm_name = "armv6k",
444 .description = "ARMv6k architecture",
445 .dependencies = featureSet(&[_]Feature{
446 .v6k,
447 }),
448 };
449 result[@enumToInt(Feature.armv6kz)] = .{
450 .index = @enumToInt(Feature.armv6kz),
451 .name = @tagName(Feature.armv6kz),
452 .llvm_name = "armv6kz",
453 .description = "ARMv6kz architecture",
454 .dependencies = featureSet(&[_]Feature{
455 .trustzone,
456 .v6k,
457 }),
458 };
459 result[@enumToInt(Feature.armv6s_m)] = .{
460 .index = @enumToInt(Feature.armv6s_m),
461 .name = @tagName(Feature.armv6s_m),
462 .llvm_name = "armv6s-m",
463 .description = "ARMv6sm architecture",
464 .dependencies = featureSet(&[_]Feature{
465 .db,
466 .mclass,
467 .noarm,
468 .strict_align,
469 .thumb_mode,
470 .v6m,
471 }),
472 };
473 result[@enumToInt(Feature.armv6t2)] = .{
474 .index = @enumToInt(Feature.armv6t2),
475 .name = @tagName(Feature.armv6t2),
476 .llvm_name = "armv6t2",
477 .description = "ARMv6t2 architecture",
478 .dependencies = featureSet(&[_]Feature{
479 .dsp,
480 .v6t2,
481 }),
482 };
483 result[@enumToInt(Feature.armv7_a)] = .{
484 .index = @enumToInt(Feature.armv7_a),
485 .name = @tagName(Feature.armv7_a),
486 .llvm_name = "armv7-a",
487 .description = "ARMv7a architecture",
488 .dependencies = featureSet(&[_]Feature{
489 .aclass,
490 .db,
491 .dsp,
492 .neon,
493 .v7,
494 }),
495 };
496 result[@enumToInt(Feature.armv7_m)] = .{
497 .index = @enumToInt(Feature.armv7_m),
498 .name = @tagName(Feature.armv7_m),
499 .llvm_name = "armv7-m",
500 .description = "ARMv7m architecture",
501 .dependencies = featureSet(&[_]Feature{
502 .db,
503 .hwdiv,
504 .mclass,
505 .noarm,
506 .thumb_mode,
507 .thumb2,
508 .v7,
509 }),
510 };
511 result[@enumToInt(Feature.armv7_r)] = .{
512 .index = @enumToInt(Feature.armv7_r),
513 .name = @tagName(Feature.armv7_r),
514 .llvm_name = "armv7-r",
515 .description = "ARMv7r architecture",
516 .dependencies = featureSet(&[_]Feature{
517 .db,
518 .dsp,
519 .hwdiv,
520 .rclass,
521 .v7,
522 }),
523 };
524 result[@enumToInt(Feature.armv7e_m)] = .{
525 .index = @enumToInt(Feature.armv7e_m),
526 .name = @tagName(Feature.armv7e_m),
527 .llvm_name = "armv7e-m",
528 .description = "ARMv7em architecture",
529 .dependencies = featureSet(&[_]Feature{
530 .db,
531 .dsp,
532 .hwdiv,
533 .mclass,
534 .noarm,
535 .thumb_mode,
536 .thumb2,
537 .v7,
538 }),
539 };
540 result[@enumToInt(Feature.armv7k)] = .{
541 .index = @enumToInt(Feature.armv7k),
542 .name = @tagName(Feature.armv7k),
543 .llvm_name = "armv7k",
544 .description = "ARMv7a architecture",
545 .dependencies = featureSet(&[_]Feature{
546 .armv7_a,
547 }),
548 };
549 result[@enumToInt(Feature.armv7s)] = .{
550 .index = @enumToInt(Feature.armv7s),
551 .name = @tagName(Feature.armv7s),
552 .llvm_name = "armv7s",
553 .description = "ARMv7a architecture",
554 .dependencies = featureSet(&[_]Feature{
555 .armv7_a,
556 }),
557 };
558 result[@enumToInt(Feature.armv7ve)] = .{
559 .index = @enumToInt(Feature.armv7ve),
560 .name = @tagName(Feature.armv7ve),
561 .llvm_name = "armv7ve",
562 .description = "ARMv7ve architecture",
563 .dependencies = featureSet(&[_]Feature{
564 .aclass,
565 .db,
566 .dsp,
567 .mp,
568 .neon,
569 .trustzone,
570 .v7,
571 .virtualization,
572 }),
573 };
574 result[@enumToInt(Feature.armv8_a)] = .{
575 .index = @enumToInt(Feature.armv8_a),
576 .name = @tagName(Feature.armv8_a),
577 .llvm_name = "armv8-a",
578 .description = "ARMv8a architecture",
579 .dependencies = featureSet(&[_]Feature{
580 .aclass,
581 .crc,
582 .crypto,
583 .db,
584 .dsp,
585 .fp_armv8,
586 .mp,
587 .neon,
588 .trustzone,
589 .v8,
590 .virtualization,
591 }),
592 };
593 result[@enumToInt(Feature.armv8_m_base)] = .{
594 .index = @enumToInt(Feature.armv8_m_base),
595 .name = @tagName(Feature.armv8_m_base),
596 .llvm_name = "armv8-m.base",
597 .description = "ARMv8mBaseline architecture",
598 .dependencies = featureSet(&[_]Feature{
599 .@"8msecext",
600 .acquire_release,
601 .db,
602 .hwdiv,
603 .mclass,
604 .noarm,
605 .strict_align,
606 .thumb_mode,
607 .v7clrex,
608 .v8m,
609 }),
610 };
611 result[@enumToInt(Feature.armv8_m_main)] = .{
612 .index = @enumToInt(Feature.armv8_m_main),
613 .name = @tagName(Feature.armv8_m_main),
614 .llvm_name = "armv8-m.main",
615 .description = "ARMv8mMainline architecture",
616 .dependencies = featureSet(&[_]Feature{
617 .@"8msecext",
618 .acquire_release,
619 .db,
620 .hwdiv,
621 .mclass,
622 .noarm,
623 .thumb_mode,
624 .v8m_main,
625 }),
626 };
627 result[@enumToInt(Feature.armv8_r)] = .{
628 .index = @enumToInt(Feature.armv8_r),
629 .name = @tagName(Feature.armv8_r),
630 .llvm_name = "armv8-r",
631 .description = "ARMv8r architecture",
632 .dependencies = featureSet(&[_]Feature{
633 .crc,
634 .db,
635 .dfb,
636 .dsp,
637 .fp_armv8,
638 .mp,
639 .neon,
640 .rclass,
641 .v8,
642 .virtualization,
643 }),
644 };
645 result[@enumToInt(Feature.armv8_1_a)] = .{
646 .index = @enumToInt(Feature.armv8_1_a),
647 .name = @tagName(Feature.armv8_1_a),
648 .llvm_name = "armv8.1-a",
649 .description = "ARMv81a architecture",
650 .dependencies = featureSet(&[_]Feature{
651 .aclass,
652 .crc,
653 .crypto,
654 .db,
655 .dsp,
656 .fp_armv8,
657 .mp,
658 .neon,
659 .trustzone,
660 .v8_1a,
661 .virtualization,
662 }),
663 };
664 result[@enumToInt(Feature.armv8_1_m_main)] = .{
665 .index = @enumToInt(Feature.armv8_1_m_main),
666 .name = @tagName(Feature.armv8_1_m_main),
667 .llvm_name = "armv8.1-m.main",
668 .description = "ARMv81mMainline architecture",
669 .dependencies = featureSet(&[_]Feature{
670 .@"8msecext",
671 .acquire_release,
672 .db,
673 .hwdiv,
674 .lob,
675 .mclass,
676 .noarm,
677 .ras,
678 .thumb_mode,
679 .v8_1m_main,
680 }),
681 };
682 result[@enumToInt(Feature.armv8_2_a)] = .{
683 .index = @enumToInt(Feature.armv8_2_a),
684 .name = @tagName(Feature.armv8_2_a),
685 .llvm_name = "armv8.2-a",
686 .description = "ARMv82a architecture",
687 .dependencies = featureSet(&[_]Feature{
688 .aclass,
689 .crc,
690 .crypto,
691 .db,
692 .dsp,
693 .fp_armv8,
694 .mp,
695 .neon,
696 .ras,
697 .trustzone,
698 .v8_2a,
699 .virtualization,
700 }),
701 };
702 result[@enumToInt(Feature.armv8_3_a)] = .{
703 .index = @enumToInt(Feature.armv8_3_a),
704 .name = @tagName(Feature.armv8_3_a),
705 .llvm_name = "armv8.3-a",
706 .description = "ARMv83a architecture",
707 .dependencies = featureSet(&[_]Feature{
708 .aclass,
709 .crc,
710 .crypto,
711 .db,
712 .dsp,
713 .fp_armv8,
714 .mp,
715 .neon,
716 .ras,
717 .trustzone,
718 .v8_3a,
719 .virtualization,
720 }),
721 };
722 result[@enumToInt(Feature.armv8_4_a)] = .{
723 .index = @enumToInt(Feature.armv8_4_a),
724 .name = @tagName(Feature.armv8_4_a),
725 .llvm_name = "armv8.4-a",
726 .description = "ARMv84a architecture",
727 .dependencies = featureSet(&[_]Feature{
728 .aclass,
729 .crc,
730 .crypto,
731 .db,
732 .dotprod,
733 .dsp,
734 .fp_armv8,
735 .mp,
736 .neon,
737 .ras,
738 .trustzone,
739 .v8_4a,
740 .virtualization,
741 }),
742 };
743 result[@enumToInt(Feature.armv8_5_a)] = .{
744 .index = @enumToInt(Feature.armv8_5_a),
745 .name = @tagName(Feature.armv8_5_a),
746 .llvm_name = "armv8.5-a",
747 .description = "ARMv85a architecture",
748 .dependencies = featureSet(&[_]Feature{
749 .aclass,
750 .crc,
751 .crypto,
752 .db,
753 .dotprod,
754 .dsp,
755 .fp_armv8,
756 .mp,
757 .neon,
758 .ras,
759 .trustzone,
760 .v8_5a,
761 .virtualization,
762 }),
763 };
764 result[@enumToInt(Feature.avoid_movs_shop)] = .{
765 .index = @enumToInt(Feature.avoid_movs_shop),
766 .name = @tagName(Feature.avoid_movs_shop),
767 .llvm_name = "avoid-movs-shop",
768 .description = "Avoid movs instructions with shifter operand",
769 .dependencies = 0,
770 };
771 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{
772 .index = @enumToInt(Feature.avoid_partial_cpsr),
773 .name = @tagName(Feature.avoid_partial_cpsr),
774 .llvm_name = "avoid-partial-cpsr",
775 .description = "Avoid CPSR partial update for OOO execution",
776 .dependencies = 0,
777 };
778 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
779 .index = @enumToInt(Feature.cheap_predicable_cpsr),
780 .name = @tagName(Feature.cheap_predicable_cpsr),
781 .llvm_name = "cheap-predicable-cpsr",
782 .description = "Disable +1 predication cost for instructions updating CPSR",
783 .dependencies = 0,
784 };
785 result[@enumToInt(Feature.crc)] = .{
786 .index = @enumToInt(Feature.crc),
787 .name = @tagName(Feature.crc),
788 .llvm_name = "crc",
789 .description = "Enable support for CRC instructions",
790 .dependencies = 0,
791 };
792 result[@enumToInt(Feature.crypto)] = .{
793 .index = @enumToInt(Feature.crypto),
794 .name = @tagName(Feature.crypto),
795 .llvm_name = "crypto",
796 .description = "Enable support for Cryptography extensions",
797 .dependencies = featureSet(&[_]Feature{
798 .aes,
799 .neon,
800 .sha2,
801 }),
802 };
803 result[@enumToInt(Feature.d32)] = .{
804 .index = @enumToInt(Feature.d32),
805 .name = @tagName(Feature.d32),
806 .llvm_name = "d32",
807 .description = "Extend FP to 32 double registers",
808 .dependencies = 0,
809 };
810 result[@enumToInt(Feature.db)] = .{
811 .index = @enumToInt(Feature.db),
812 .name = @tagName(Feature.db),
813 .llvm_name = "db",
814 .description = "Has data barrier (dmb/dsb) instructions",
815 .dependencies = 0,
816 };
817 result[@enumToInt(Feature.dfb)] = .{
818 .index = @enumToInt(Feature.dfb),
819 .name = @tagName(Feature.dfb),
820 .llvm_name = "dfb",
821 .description = "Has full data barrier (dfb) instruction",
822 .dependencies = 0,
823 };
824 result[@enumToInt(Feature.disable_postra_scheduler)] = .{
825 .index = @enumToInt(Feature.disable_postra_scheduler),
826 .name = @tagName(Feature.disable_postra_scheduler),
827 .llvm_name = "disable-postra-scheduler",
828 .description = "Don't schedule again after register allocation",
829 .dependencies = 0,
830 };
831 result[@enumToInt(Feature.dont_widen_vmovs)] = .{
832 .index = @enumToInt(Feature.dont_widen_vmovs),
833 .name = @tagName(Feature.dont_widen_vmovs),
834 .llvm_name = "dont-widen-vmovs",
835 .description = "Don't widen VMOVS to VMOVD",
836 .dependencies = 0,
837 };
838 result[@enumToInt(Feature.dotprod)] = .{
839 .index = @enumToInt(Feature.dotprod),
840 .name = @tagName(Feature.dotprod),
841 .llvm_name = "dotprod",
842 .description = "Enable support for dot product instructions",
843 .dependencies = featureSet(&[_]Feature{
844 .neon,
845 }),
846 };
847 result[@enumToInt(Feature.dsp)] = .{
848 .index = @enumToInt(Feature.dsp),
849 .name = @tagName(Feature.dsp),
850 .llvm_name = "dsp",
851 .description = "Supports DSP instructions in ARM and/or Thumb2",
852 .dependencies = 0,
853 };
854 result[@enumToInt(Feature.execute_only)] = .{
855 .index = @enumToInt(Feature.execute_only),
856 .name = @tagName(Feature.execute_only),
857 .llvm_name = "execute-only",
858 .description = "Enable the generation of execute only code.",
859 .dependencies = 0,
860 };
861 result[@enumToInt(Feature.expand_fp_mlx)] = .{
862 .index = @enumToInt(Feature.expand_fp_mlx),
863 .name = @tagName(Feature.expand_fp_mlx),
864 .llvm_name = "expand-fp-mlx",
865 .description = "Expand VFP/NEON MLA/MLS instructions",
866 .dependencies = 0,
867 };
868 result[@enumToInt(Feature.exynos)] = .{
869 .index = @enumToInt(Feature.exynos),
870 .name = @tagName(Feature.exynos),
871 .llvm_name = "exynos",
872 .description = "Samsung Exynos processors",
873 .dependencies = featureSet(&[_]Feature{
874 .crc,
875 .crypto,
876 .expand_fp_mlx,
877 .fuse_aes,
878 .fuse_literals,
879 .hwdiv,
880 .hwdiv_arm,
881 .prof_unpr,
882 .ret_addr_stack,
883 .slow_fp_brcc,
884 .slow_vdup32,
885 .slow_vgetlni32,
886 .slowfpvmlx,
887 .splat_vfp_neon,
888 .use_aa,
889 .wide_stride_vfp,
890 .zcz,
891 }),
892 };
893 result[@enumToInt(Feature.fp_armv8)] = .{
894 .index = @enumToInt(Feature.fp_armv8),
895 .name = @tagName(Feature.fp_armv8),
896 .llvm_name = "fp-armv8",
897 .description = "Enable ARMv8 FP",
898 .dependencies = featureSet(&[_]Feature{
899 .fp_armv8d16,
900 .fp_armv8sp,
901 .vfp4,
902 }),
903 };
904 result[@enumToInt(Feature.fp_armv8d16)] = .{
905 .index = @enumToInt(Feature.fp_armv8d16),
906 .name = @tagName(Feature.fp_armv8d16),
907 .llvm_name = "fp-armv8d16",
908 .description = "Enable ARMv8 FP with only 16 d-registers",
909 .dependencies = featureSet(&[_]Feature{
910 .fp_armv8d16sp,
911 .fp64,
912 .vfp4d16,
913 }),
914 };
915 result[@enumToInt(Feature.fp_armv8d16sp)] = .{
916 .index = @enumToInt(Feature.fp_armv8d16sp),
917 .name = @tagName(Feature.fp_armv8d16sp),
918 .llvm_name = "fp-armv8d16sp",
919 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",
920 .dependencies = featureSet(&[_]Feature{
921 .vfp4d16sp,
922 }),
923 };
924 result[@enumToInt(Feature.fp_armv8sp)] = .{
925 .index = @enumToInt(Feature.fp_armv8sp),
926 .name = @tagName(Feature.fp_armv8sp),
927 .llvm_name = "fp-armv8sp",
928 .description = "Enable ARMv8 FP with no double precision",
929 .dependencies = featureSet(&[_]Feature{
930 .d32,
931 .fp_armv8d16sp,
932 .vfp4sp,
933 }),
934 };
935 result[@enumToInt(Feature.fp16)] = .{
936 .index = @enumToInt(Feature.fp16),
937 .name = @tagName(Feature.fp16),
938 .llvm_name = "fp16",
939 .description = "Enable half-precision floating point",
940 .dependencies = 0,
941 };
942 result[@enumToInt(Feature.fp16fml)] = .{
943 .index = @enumToInt(Feature.fp16fml),
944 .name = @tagName(Feature.fp16fml),
945 .llvm_name = "fp16fml",
946 .description = "Enable full half-precision floating point fml instructions",
947 .dependencies = featureSet(&[_]Feature{
948 .fullfp16,
949 }),
950 };
951 result[@enumToInt(Feature.fp64)] = .{
952 .index = @enumToInt(Feature.fp64),
953 .name = @tagName(Feature.fp64),
954 .llvm_name = "fp64",
955 .description = "Floating point unit supports double precision",
956 .dependencies = featureSet(&[_]Feature{
957 .fpregs64,
958 }),
959 };
960 result[@enumToInt(Feature.fpao)] = .{
961 .index = @enumToInt(Feature.fpao),
962 .name = @tagName(Feature.fpao),
963 .llvm_name = "fpao",
964 .description = "Enable fast computation of positive address offsets",
965 .dependencies = 0,
966 };
967 result[@enumToInt(Feature.fpregs)] = .{
968 .index = @enumToInt(Feature.fpregs),
969 .name = @tagName(Feature.fpregs),
970 .llvm_name = "fpregs",
971 .description = "Enable FP registers",
972 .dependencies = 0,
973 };
974 result[@enumToInt(Feature.fpregs16)] = .{
975 .index = @enumToInt(Feature.fpregs16),
976 .name = @tagName(Feature.fpregs16),
977 .llvm_name = "fpregs16",
978 .description = "Enable 16-bit FP registers",
979 .dependencies = featureSet(&[_]Feature{
980 .fpregs,
981 }),
982 };
983 result[@enumToInt(Feature.fpregs64)] = .{
984 .index = @enumToInt(Feature.fpregs64),
985 .name = @tagName(Feature.fpregs64),
986 .llvm_name = "fpregs64",
987 .description = "Enable 64-bit FP registers",
988 .dependencies = featureSet(&[_]Feature{
989 .fpregs,
990 }),
991 };
992 result[@enumToInt(Feature.fullfp16)] = .{
993 .index = @enumToInt(Feature.fullfp16),
994 .name = @tagName(Feature.fullfp16),
995 .llvm_name = "fullfp16",
996 .description = "Enable full half-precision floating point",
997 .dependencies = featureSet(&[_]Feature{
998 .fp_armv8d16sp,
999 .fpregs16,
1000 }),
1001 };
1002 result[@enumToInt(Feature.fuse_aes)] = .{
1003 .index = @enumToInt(Feature.fuse_aes),
1004 .name = @tagName(Feature.fuse_aes),
1005 .llvm_name = "fuse-aes",
1006 .description = "CPU fuses AES crypto operations",
1007 .dependencies = 0,
1008 };
1009 result[@enumToInt(Feature.fuse_literals)] = .{
1010 .index = @enumToInt(Feature.fuse_literals),
1011 .name = @tagName(Feature.fuse_literals),
1012 .llvm_name = "fuse-literals",
1013 .description = "CPU fuses literal generation operations",
1014 .dependencies = 0,
1015 };
1016 result[@enumToInt(Feature.hwdiv)] = .{
1017 .index = @enumToInt(Feature.hwdiv),
1018 .name = @tagName(Feature.hwdiv),
1019 .llvm_name = "hwdiv",
1020 .description = "Enable divide instructions in Thumb",
1021 .dependencies = 0,
1022 };
1023 result[@enumToInt(Feature.hwdiv_arm)] = .{
1024 .index = @enumToInt(Feature.hwdiv_arm),
1025 .name = @tagName(Feature.hwdiv_arm),
1026 .llvm_name = "hwdiv-arm",
1027 .description = "Enable divide instructions in ARM mode",
1028 .dependencies = 0,
1029 };
1030 result[@enumToInt(Feature.iwmmxt)] = .{
1031 .index = @enumToInt(Feature.iwmmxt),
1032 .name = @tagName(Feature.iwmmxt),
1033 .llvm_name = "iwmmxt",
1034 .description = "ARMv5te architecture",
1035 .dependencies = featureSet(&[_]Feature{
1036 .armv5te,
1037 }),
1038 };
1039 result[@enumToInt(Feature.iwmmxt2)] = .{
1040 .index = @enumToInt(Feature.iwmmxt2),
1041 .name = @tagName(Feature.iwmmxt2),
1042 .llvm_name = "iwmmxt2",
1043 .description = "ARMv5te architecture",
1044 .dependencies = featureSet(&[_]Feature{
1045 .armv5te,
1046 }),
1047 };
1048 result[@enumToInt(Feature.krait)] = .{
1049 .index = @enumToInt(Feature.krait),
1050 .name = @tagName(Feature.krait),
1051 .llvm_name = "krait",
1052 .description = "Qualcomm Krait processors",
1053 .dependencies = 0,
1054 };
1055 result[@enumToInt(Feature.kryo)] = .{
1056 .index = @enumToInt(Feature.kryo),
1057 .name = @tagName(Feature.kryo),
1058 .llvm_name = "kryo",
1059 .description = "Qualcomm Kryo processors",
1060 .dependencies = 0,
1061 };
1062 result[@enumToInt(Feature.lob)] = .{
1063 .index = @enumToInt(Feature.lob),
1064 .name = @tagName(Feature.lob),
1065 .llvm_name = "lob",
1066 .description = "Enable Low Overhead Branch extensions",
1067 .dependencies = 0,
1068 };
1069 result[@enumToInt(Feature.long_calls)] = .{
1070 .index = @enumToInt(Feature.long_calls),
1071 .name = @tagName(Feature.long_calls),
1072 .llvm_name = "long-calls",
1073 .description = "Generate calls via indirect call instructions",
1074 .dependencies = 0,
1075 };
1076 result[@enumToInt(Feature.loop_align)] = .{
1077 .index = @enumToInt(Feature.loop_align),
1078 .name = @tagName(Feature.loop_align),
1079 .llvm_name = "loop-align",
1080 .description = "Prefer 32-bit alignment for loops",
1081 .dependencies = 0,
1082 };
1083 result[@enumToInt(Feature.m3)] = .{
1084 .index = @enumToInt(Feature.m3),
1085 .name = @tagName(Feature.m3),
1086 .llvm_name = "m3",
1087 .description = "Cortex-M3 ARM processors",
1088 .dependencies = 0,
1089 };
1090 result[@enumToInt(Feature.mclass)] = .{
1091 .index = @enumToInt(Feature.mclass),
1092 .name = @tagName(Feature.mclass),
1093 .llvm_name = "mclass",
1094 .description = "Is microcontroller profile ('M' series)",
1095 .dependencies = 0,
1096 };
1097 result[@enumToInt(Feature.mp)] = .{
1098 .index = @enumToInt(Feature.mp),
1099 .name = @tagName(Feature.mp),
1100 .llvm_name = "mp",
1101 .description = "Supports Multiprocessing extension",
1102 .dependencies = 0,
1103 };
1104 result[@enumToInt(Feature.muxed_units)] = .{
1105 .index = @enumToInt(Feature.muxed_units),
1106 .name = @tagName(Feature.muxed_units),
1107 .llvm_name = "muxed-units",
1108 .description = "Has muxed AGU and NEON/FPU",
1109 .dependencies = 0,
1110 };
1111 result[@enumToInt(Feature.mve)] = .{
1112 .index = @enumToInt(Feature.mve),
1113 .name = @tagName(Feature.mve),
1114 .llvm_name = "mve",
1115 .description = "Support M-Class Vector Extension with integer ops",
1116 .dependencies = featureSet(&[_]Feature{
1117 .dsp,
1118 .fpregs16,
1119 .fpregs64,
1120 .v8_1m_main,
1121 }),
1122 };
1123 result[@enumToInt(Feature.mve_fp)] = .{
1124 .index = @enumToInt(Feature.mve_fp),
1125 .name = @tagName(Feature.mve_fp),
1126 .llvm_name = "mve.fp",
1127 .description = "Support M-Class Vector Extension with integer and floating ops",
1128 .dependencies = featureSet(&[_]Feature{
1129 .fp_armv8d16sp,
1130 .fullfp16,
1131 .mve,
1132 }),
1133 };
1134 result[@enumToInt(Feature.nacl_trap)] = .{
1135 .index = @enumToInt(Feature.nacl_trap),
1136 .name = @tagName(Feature.nacl_trap),
1137 .llvm_name = "nacl-trap",
1138 .description = "NaCl trap",
1139 .dependencies = 0,
1140 };
1141 result[@enumToInt(Feature.neon)] = .{
1142 .index = @enumToInt(Feature.neon),
1143 .name = @tagName(Feature.neon),
1144 .llvm_name = "neon",
1145 .description = "Enable NEON instructions",
1146 .dependencies = featureSet(&[_]Feature{
1147 .vfp3,
1148 }),
1149 };
1150 result[@enumToInt(Feature.neon_fpmovs)] = .{
1151 .index = @enumToInt(Feature.neon_fpmovs),
1152 .name = @tagName(Feature.neon_fpmovs),
1153 .llvm_name = "neon-fpmovs",
1154 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
1155 .dependencies = 0,
1156 };
1157 result[@enumToInt(Feature.neonfp)] = .{
1158 .index = @enumToInt(Feature.neonfp),
1159 .name = @tagName(Feature.neonfp),
1160 .llvm_name = "neonfp",
1161 .description = "Use NEON for single precision FP",
1162 .dependencies = 0,
1163 };
1164 result[@enumToInt(Feature.no_branch_predictor)] = .{
1165 .index = @enumToInt(Feature.no_branch_predictor),
1166 .name = @tagName(Feature.no_branch_predictor),
1167 .llvm_name = "no-branch-predictor",
1168 .description = "Has no branch predictor",
1169 .dependencies = 0,
1170 };
1171 result[@enumToInt(Feature.no_movt)] = .{
1172 .index = @enumToInt(Feature.no_movt),
1173 .name = @tagName(Feature.no_movt),
1174 .llvm_name = "no-movt",
1175 .description = "Don't use movt/movw pairs for 32-bit imms",
1176 .dependencies = 0,
1177 };
1178 result[@enumToInt(Feature.no_neg_immediates)] = .{
1179 .index = @enumToInt(Feature.no_neg_immediates),
1180 .name = @tagName(Feature.no_neg_immediates),
1181 .llvm_name = "no-neg-immediates",
1182 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
1183 .dependencies = 0,
1184 };
1185 result[@enumToInt(Feature.noarm)] = .{
1186 .index = @enumToInt(Feature.noarm),
1187 .name = @tagName(Feature.noarm),
1188 .llvm_name = "noarm",
1189 .description = "Does not support ARM mode execution",
1190 .dependencies = 0,
1191 };
1192 result[@enumToInt(Feature.nonpipelined_vfp)] = .{
1193 .index = @enumToInt(Feature.nonpipelined_vfp),
1194 .name = @tagName(Feature.nonpipelined_vfp),
1195 .llvm_name = "nonpipelined-vfp",
1196 .description = "VFP instructions are not pipelined",
1197 .dependencies = 0,
1198 };
1199 result[@enumToInt(Feature.perfmon)] = .{
1200 .index = @enumToInt(Feature.perfmon),
1201 .name = @tagName(Feature.perfmon),
1202 .llvm_name = "perfmon",
1203 .description = "Enable support for Performance Monitor extensions",
1204 .dependencies = 0,
1205 };
1206 result[@enumToInt(Feature.prefer_ishst)] = .{
1207 .index = @enumToInt(Feature.prefer_ishst),
1208 .name = @tagName(Feature.prefer_ishst),
1209 .llvm_name = "prefer-ishst",
1210 .description = "Prefer ISHST barriers",
1211 .dependencies = 0,
1212 };
1213 result[@enumToInt(Feature.prefer_vmovsr)] = .{
1214 .index = @enumToInt(Feature.prefer_vmovsr),
1215 .name = @tagName(Feature.prefer_vmovsr),
1216 .llvm_name = "prefer-vmovsr",
1217 .description = "Prefer VMOVSR",
1218 .dependencies = 0,
1219 };
1220 result[@enumToInt(Feature.prof_unpr)] = .{
1221 .index = @enumToInt(Feature.prof_unpr),
1222 .name = @tagName(Feature.prof_unpr),
1223 .llvm_name = "prof-unpr",
1224 .description = "Is profitable to unpredicate",
1225 .dependencies = 0,
1226 };
1227 result[@enumToInt(Feature.r4)] = .{
1228 .index = @enumToInt(Feature.r4),
1229 .name = @tagName(Feature.r4),
1230 .llvm_name = "r4",
1231 .description = "Cortex-R4 ARM processors",
1232 .dependencies = 0,
1233 };
1234 result[@enumToInt(Feature.r5)] = .{
1235 .index = @enumToInt(Feature.r5),
1236 .name = @tagName(Feature.r5),
1237 .llvm_name = "r5",
1238 .description = "Cortex-R5 ARM processors",
1239 .dependencies = 0,
1240 };
1241 result[@enumToInt(Feature.r52)] = .{
1242 .index = @enumToInt(Feature.r52),
1243 .name = @tagName(Feature.r52),
1244 .llvm_name = "r52",
1245 .description = "Cortex-R52 ARM processors",
1246 .dependencies = 0,
1247 };
1248 result[@enumToInt(Feature.r7)] = .{
1249 .index = @enumToInt(Feature.r7),
1250 .name = @tagName(Feature.r7),
1251 .llvm_name = "r7",
1252 .description = "Cortex-R7 ARM processors",
1253 .dependencies = 0,
1254 };
1255 result[@enumToInt(Feature.ras)] = .{
1256 .index = @enumToInt(Feature.ras),
1257 .name = @tagName(Feature.ras),
1258 .llvm_name = "ras",
1259 .description = "Enable Reliability, Availability and Serviceability extensions",
1260 .dependencies = 0,
1261 };
1262 result[@enumToInt(Feature.rclass)] = .{
1263 .index = @enumToInt(Feature.rclass),
1264 .name = @tagName(Feature.rclass),
1265 .llvm_name = "rclass",
1266 .description = "Is realtime profile ('R' series)",
1267 .dependencies = 0,
1268 };
1269 result[@enumToInt(Feature.read_tp_hard)] = .{
1270 .index = @enumToInt(Feature.read_tp_hard),
1271 .name = @tagName(Feature.read_tp_hard),
1272 .llvm_name = "read-tp-hard",
1273 .description = "Reading thread pointer from register",
1274 .dependencies = 0,
1275 };
1276 result[@enumToInt(Feature.reserve_r9)] = .{
1277 .index = @enumToInt(Feature.reserve_r9),
1278 .name = @tagName(Feature.reserve_r9),
1279 .llvm_name = "reserve-r9",
1280 .description = "Reserve R9, making it unavailable as GPR",
1281 .dependencies = 0,
1282 };
1283 result[@enumToInt(Feature.ret_addr_stack)] = .{
1284 .index = @enumToInt(Feature.ret_addr_stack),
1285 .name = @tagName(Feature.ret_addr_stack),
1286 .llvm_name = "ret-addr-stack",
1287 .description = "Has return address stack",
1288 .dependencies = 0,
1289 };
1290 result[@enumToInt(Feature.sb)] = .{
1291 .index = @enumToInt(Feature.sb),
1292 .name = @tagName(Feature.sb),
1293 .llvm_name = "sb",
1294 .description = "Enable v8.5a Speculation Barrier",
1295 .dependencies = 0,
1296 };
1297 result[@enumToInt(Feature.sha2)] = .{
1298 .index = @enumToInt(Feature.sha2),
1299 .name = @tagName(Feature.sha2),
1300 .llvm_name = "sha2",
1301 .description = "Enable SHA1 and SHA256 support",
1302 .dependencies = featureSet(&[_]Feature{
1303 .neon,
1304 }),
1305 };
1306 result[@enumToInt(Feature.slow_fp_brcc)] = .{
1307 .index = @enumToInt(Feature.slow_fp_brcc),
1308 .name = @tagName(Feature.slow_fp_brcc),
1309 .llvm_name = "slow-fp-brcc",
1310 .description = "FP compare + branch is slow",
1311 .dependencies = 0,
1312 };
1313 result[@enumToInt(Feature.slow_load_D_subreg)] = .{
1314 .index = @enumToInt(Feature.slow_load_D_subreg),
1315 .name = @tagName(Feature.slow_load_D_subreg),
1316 .llvm_name = "slow-load-D-subreg",
1317 .description = "Loading into D subregs is slow",
1318 .dependencies = 0,
1319 };
1320 result[@enumToInt(Feature.slow_odd_reg)] = .{
1321 .index = @enumToInt(Feature.slow_odd_reg),
1322 .name = @tagName(Feature.slow_odd_reg),
1323 .llvm_name = "slow-odd-reg",
1324 .description = "VLDM/VSTM starting with an odd register is slow",
1325 .dependencies = 0,
1326 };
1327 result[@enumToInt(Feature.slow_vdup32)] = .{
1328 .index = @enumToInt(Feature.slow_vdup32),
1329 .name = @tagName(Feature.slow_vdup32),
1330 .llvm_name = "slow-vdup32",
1331 .description = "Has slow VDUP32 - prefer VMOV",
1332 .dependencies = 0,
1333 };
1334 result[@enumToInt(Feature.slow_vgetlni32)] = .{
1335 .index = @enumToInt(Feature.slow_vgetlni32),
1336 .name = @tagName(Feature.slow_vgetlni32),
1337 .llvm_name = "slow-vgetlni32",
1338 .description = "Has slow VGETLNi32 - prefer VMOV",
1339 .dependencies = 0,
1340 };
1341 result[@enumToInt(Feature.slowfpvmlx)] = .{
1342 .index = @enumToInt(Feature.slowfpvmlx),
1343 .name = @tagName(Feature.slowfpvmlx),
1344 .llvm_name = "slowfpvmlx",
1345 .description = "Disable VFP / NEON MAC instructions",
1346 .dependencies = 0,
1347 };
1348 result[@enumToInt(Feature.soft_float)] = .{
1349 .index = @enumToInt(Feature.soft_float),
1350 .name = @tagName(Feature.soft_float),
1351 .llvm_name = "soft-float",
1352 .description = "Use software floating point features.",
1353 .dependencies = 0,
1354 };
1355 result[@enumToInt(Feature.splat_vfp_neon)] = .{
1356 .index = @enumToInt(Feature.splat_vfp_neon),
1357 .name = @tagName(Feature.splat_vfp_neon),
1358 .llvm_name = "splat-vfp-neon",
1359 .description = "Splat register from VFP to NEON",
1360 .dependencies = featureSet(&[_]Feature{
1361 .dont_widen_vmovs,
1362 }),
1363 };
1364 result[@enumToInt(Feature.strict_align)] = .{
1365 .index = @enumToInt(Feature.strict_align),
1366 .name = @tagName(Feature.strict_align),
1367 .llvm_name = "strict-align",
1368 .description = "Disallow all unaligned memory access",
1369 .dependencies = 0,
1370 };
1371 result[@enumToInt(Feature.swift)] = .{
1372 .index = @enumToInt(Feature.swift),
1373 .name = @tagName(Feature.swift),
1374 .llvm_name = "swift",
1375 .description = "Swift ARM processors",
1376 .dependencies = 0,
1377 };
1378 result[@enumToInt(Feature.thumb_mode)] = .{
1379 .index = @enumToInt(Feature.thumb_mode),
1380 .name = @tagName(Feature.thumb_mode),
1381 .llvm_name = "thumb-mode",
1382 .description = "Thumb mode",
1383 .dependencies = 0,
1384 };
1385 result[@enumToInt(Feature.thumb2)] = .{
1386 .index = @enumToInt(Feature.thumb2),
1387 .name = @tagName(Feature.thumb2),
1388 .llvm_name = "thumb2",
1389 .description = "Enable Thumb2 instructions",
1390 .dependencies = 0,
1391 };
1392 result[@enumToInt(Feature.trustzone)] = .{
1393 .index = @enumToInt(Feature.trustzone),
1394 .name = @tagName(Feature.trustzone),
1395 .llvm_name = "trustzone",
1396 .description = "Enable support for TrustZone security extensions",
1397 .dependencies = 0,
1398 };
1399 result[@enumToInt(Feature.use_aa)] = .{
1400 .index = @enumToInt(Feature.use_aa),
1401 .name = @tagName(Feature.use_aa),
1402 .llvm_name = "use-aa",
1403 .description = "Use alias analysis during codegen",
1404 .dependencies = 0,
1405 };
1406 result[@enumToInt(Feature.use_misched)] = .{
1407 .index = @enumToInt(Feature.use_misched),
1408 .name = @tagName(Feature.use_misched),
1409 .llvm_name = "use-misched",
1410 .description = "Use the MachineScheduler",
1411 .dependencies = 0,
1412 };
1413 result[@enumToInt(Feature.v4t)] = .{
1414 .index = @enumToInt(Feature.v4t),
1415 .name = @tagName(Feature.v4t),
1416 .llvm_name = "v4t",
1417 .description = "Support ARM v4T instructions",
1418 .dependencies = 0,
1419 };
1420 result[@enumToInt(Feature.v5t)] = .{
1421 .index = @enumToInt(Feature.v5t),
1422 .name = @tagName(Feature.v5t),
1423 .llvm_name = "v5t",
1424 .description = "Support ARM v5T instructions",
1425 .dependencies = featureSet(&[_]Feature{
1426 .v4t,
1427 }),
1428 };
1429 result[@enumToInt(Feature.v5te)] = .{
1430 .index = @enumToInt(Feature.v5te),
1431 .name = @tagName(Feature.v5te),
1432 .llvm_name = "v5te",
1433 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
1434 .dependencies = featureSet(&[_]Feature{
1435 .v5t,
1436 }),
1437 };
1438 result[@enumToInt(Feature.v6)] = .{
1439 .index = @enumToInt(Feature.v6),
1440 .name = @tagName(Feature.v6),
1441 .llvm_name = "v6",
1442 .description = "Support ARM v6 instructions",
1443 .dependencies = featureSet(&[_]Feature{
1444 .v5te,
1445 }),
1446 };
1447 result[@enumToInt(Feature.v6k)] = .{
1448 .index = @enumToInt(Feature.v6k),
1449 .name = @tagName(Feature.v6k),
1450 .llvm_name = "v6k",
1451 .description = "Support ARM v6k instructions",
1452 .dependencies = featureSet(&[_]Feature{
1453 .v6,
1454 }),
1455 };
1456 result[@enumToInt(Feature.v6m)] = .{
1457 .index = @enumToInt(Feature.v6m),
1458 .name = @tagName(Feature.v6m),
1459 .llvm_name = "v6m",
1460 .description = "Support ARM v6M instructions",
1461 .dependencies = featureSet(&[_]Feature{
1462 .v6,
1463 }),
1464 };
1465 result[@enumToInt(Feature.v6t2)] = .{
1466 .index = @enumToInt(Feature.v6t2),
1467 .name = @tagName(Feature.v6t2),
1468 .llvm_name = "v6t2",
1469 .description = "Support ARM v6t2 instructions",
1470 .dependencies = featureSet(&[_]Feature{
1471 .thumb2,
1472 .v6k,
1473 .v8m,
1474 }),
1475 };
1476 result[@enumToInt(Feature.v7)] = .{
1477 .index = @enumToInt(Feature.v7),
1478 .name = @tagName(Feature.v7),
1479 .llvm_name = "v7",
1480 .description = "Support ARM v7 instructions",
1481 .dependencies = featureSet(&[_]Feature{
1482 .perfmon,
1483 .v6t2,
1484 .v7clrex,
1485 }),
1486 };
1487 result[@enumToInt(Feature.v7clrex)] = .{
1488 .index = @enumToInt(Feature.v7clrex),
1489 .name = @tagName(Feature.v7clrex),
1490 .llvm_name = "v7clrex",
1491 .description = "Has v7 clrex instruction",
1492 .dependencies = 0,
1493 };
1494 result[@enumToInt(Feature.v8)] = .{
1495 .index = @enumToInt(Feature.v8),
1496 .name = @tagName(Feature.v8),
1497 .llvm_name = "v8",
1498 .description = "Support ARM v8 instructions",
1499 .dependencies = featureSet(&[_]Feature{
1500 .acquire_release,
1501 .v7,
1502 }),
1503 };
1504 result[@enumToInt(Feature.v8_1a)] = .{
1505 .index = @enumToInt(Feature.v8_1a),
1506 .name = @tagName(Feature.v8_1a),
1507 .llvm_name = "v8.1a",
1508 .description = "Support ARM v8.1a instructions",
1509 .dependencies = featureSet(&[_]Feature{
1510 .v8,
1511 }),
1512 };
1513 result[@enumToInt(Feature.v8_1m_main)] = .{
1514 .index = @enumToInt(Feature.v8_1m_main),
1515 .name = @tagName(Feature.v8_1m_main),
1516 .llvm_name = "v8.1m.main",
1517 .description = "Support ARM v8-1M Mainline instructions",
1518 .dependencies = featureSet(&[_]Feature{
1519 .v8m_main,
1520 }),
1521 };
1522 result[@enumToInt(Feature.v8_2a)] = .{
1523 .index = @enumToInt(Feature.v8_2a),
1524 .name = @tagName(Feature.v8_2a),
1525 .llvm_name = "v8.2a",
1526 .description = "Support ARM v8.2a instructions",
1527 .dependencies = featureSet(&[_]Feature{
1528 .v8_1a,
1529 }),
1530 };
1531 result[@enumToInt(Feature.v8_3a)] = .{
1532 .index = @enumToInt(Feature.v8_3a),
1533 .name = @tagName(Feature.v8_3a),
1534 .llvm_name = "v8.3a",
1535 .description = "Support ARM v8.3a instructions",
1536 .dependencies = featureSet(&[_]Feature{
1537 .v8_2a,
1538 }),
1539 };
1540 result[@enumToInt(Feature.v8_4a)] = .{
1541 .index = @enumToInt(Feature.v8_4a),
1542 .name = @tagName(Feature.v8_4a),
1543 .llvm_name = "v8.4a",
1544 .description = "Support ARM v8.4a instructions",
1545 .dependencies = featureSet(&[_]Feature{
1546 .dotprod,
1547 .v8_3a,
1548 }),
1549 };
1550 result[@enumToInt(Feature.v8_5a)] = .{
1551 .index = @enumToInt(Feature.v8_5a),
1552 .name = @tagName(Feature.v8_5a),
1553 .llvm_name = "v8.5a",
1554 .description = "Support ARM v8.5a instructions",
1555 .dependencies = featureSet(&[_]Feature{
1556 .sb,
1557 .v8_4a,
1558 }),
1559 };
1560 result[@enumToInt(Feature.v8m)] = .{
1561 .index = @enumToInt(Feature.v8m),
1562 .name = @tagName(Feature.v8m),
1563 .llvm_name = "v8m",
1564 .description = "Support ARM v8M Baseline instructions",
1565 .dependencies = featureSet(&[_]Feature{
1566 .v6m,
1567 }),
1568 };
1569 result[@enumToInt(Feature.v8m_main)] = .{
1570 .index = @enumToInt(Feature.v8m_main),
1571 .name = @tagName(Feature.v8m_main),
1572 .llvm_name = "v8m.main",
1573 .description = "Support ARM v8M Mainline instructions",
1574 .dependencies = featureSet(&[_]Feature{
1575 .v7,
1576 }),
1577 };
1578 result[@enumToInt(Feature.vfp2)] = .{
1579 .index = @enumToInt(Feature.vfp2),
1580 .name = @tagName(Feature.vfp2),
1581 .llvm_name = "vfp2",
1582 .description = "Enable VFP2 instructions",
1583 .dependencies = featureSet(&[_]Feature{
1584 .vfp2d16,
1585 .vfp2sp,
1586 }),
1587 };
1588 result[@enumToInt(Feature.vfp2d16)] = .{
1589 .index = @enumToInt(Feature.vfp2d16),
1590 .name = @tagName(Feature.vfp2d16),
1591 .llvm_name = "vfp2d16",
1592 .description = "Enable VFP2 instructions",
1593 .dependencies = featureSet(&[_]Feature{
1594 .fp64,
1595 .vfp2d16sp,
1596 }),
1597 };
1598 result[@enumToInt(Feature.vfp2d16sp)] = .{
1599 .index = @enumToInt(Feature.vfp2d16sp),
1600 .name = @tagName(Feature.vfp2d16sp),
1601 .llvm_name = "vfp2d16sp",
1602 .description = "Enable VFP2 instructions with no double precision",
1603 .dependencies = featureSet(&[_]Feature{
1604 .fpregs,
1605 }),
1606 };
1607 result[@enumToInt(Feature.vfp2sp)] = .{
1608 .index = @enumToInt(Feature.vfp2sp),
1609 .name = @tagName(Feature.vfp2sp),
1610 .llvm_name = "vfp2sp",
1611 .description = "Enable VFP2 instructions with no double precision",
1612 .dependencies = featureSet(&[_]Feature{
1613 .vfp2d16sp,
1614 }),
1615 };
1616 result[@enumToInt(Feature.vfp3)] = .{
1617 .index = @enumToInt(Feature.vfp3),
1618 .name = @tagName(Feature.vfp3),
1619 .llvm_name = "vfp3",
1620 .description = "Enable VFP3 instructions",
1621 .dependencies = featureSet(&[_]Feature{
1622 .vfp3d16,
1623 .vfp3sp,
1624 }),
1625 };
1626 result[@enumToInt(Feature.vfp3d16)] = .{
1627 .index = @enumToInt(Feature.vfp3d16),
1628 .name = @tagName(Feature.vfp3d16),
1629 .llvm_name = "vfp3d16",
1630 .description = "Enable VFP3 instructions with only 16 d-registers",
1631 .dependencies = featureSet(&[_]Feature{
1632 .fp64,
1633 .vfp2,
1634 .vfp3d16sp,
1635 }),
1636 };
1637 result[@enumToInt(Feature.vfp3d16sp)] = .{
1638 .index = @enumToInt(Feature.vfp3d16sp),
1639 .name = @tagName(Feature.vfp3d16sp),
1640 .llvm_name = "vfp3d16sp",
1641 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",
1642 .dependencies = featureSet(&[_]Feature{
1643 .vfp2sp,
1644 }),
1645 };
1646 result[@enumToInt(Feature.vfp3sp)] = .{
1647 .index = @enumToInt(Feature.vfp3sp),
1648 .name = @tagName(Feature.vfp3sp),
1649 .llvm_name = "vfp3sp",
1650 .description = "Enable VFP3 instructions with no double precision",
1651 .dependencies = featureSet(&[_]Feature{
1652 .d32,
1653 .vfp3d16sp,
1654 }),
1655 };
1656 result[@enumToInt(Feature.vfp4)] = .{
1657 .index = @enumToInt(Feature.vfp4),
1658 .name = @tagName(Feature.vfp4),
1659 .llvm_name = "vfp4",
1660 .description = "Enable VFP4 instructions",
1661 .dependencies = featureSet(&[_]Feature{
1662 .fp16,
1663 .vfp3,
1664 .vfp4d16,
1665 .vfp4sp,
1666 }),
1667 };
1668 result[@enumToInt(Feature.vfp4d16)] = .{
1669 .index = @enumToInt(Feature.vfp4d16),
1670 .name = @tagName(Feature.vfp4d16),
1671 .llvm_name = "vfp4d16",
1672 .description = "Enable VFP4 instructions with only 16 d-registers",
1673 .dependencies = featureSet(&[_]Feature{
1674 .fp16,
1675 .fp64,
1676 .vfp3d16,
1677 .vfp4d16sp,
1678 }),
1679 };
1680 result[@enumToInt(Feature.vfp4d16sp)] = .{
1681 .index = @enumToInt(Feature.vfp4d16sp),
1682 .name = @tagName(Feature.vfp4d16sp),
1683 .llvm_name = "vfp4d16sp",
1684 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",
1685 .dependencies = featureSet(&[_]Feature{
1686 .fp16,
1687 .vfp3d16sp,
1688 }),
1689 };
1690 result[@enumToInt(Feature.vfp4sp)] = .{
1691 .index = @enumToInt(Feature.vfp4sp),
1692 .name = @tagName(Feature.vfp4sp),
1693 .llvm_name = "vfp4sp",
1694 .description = "Enable VFP4 instructions with no double precision",
1695 .dependencies = featureSet(&[_]Feature{
1696 .d32,
1697 .fp16,
1698 .vfp3sp,
1699 .vfp4d16sp,
1700 }),
1701 };
1702 result[@enumToInt(Feature.virtualization)] = .{
1703 .index = @enumToInt(Feature.virtualization),
1704 .name = @tagName(Feature.virtualization),
1705 .llvm_name = "virtualization",
1706 .description = "Supports Virtualization extension",
1707 .dependencies = featureSet(&[_]Feature{
1708 .hwdiv,
1709 .hwdiv_arm,
1710 }),
1711 };
1712 result[@enumToInt(Feature.vldn_align)] = .{
1713 .index = @enumToInt(Feature.vldn_align),
1714 .name = @tagName(Feature.vldn_align),
1715 .llvm_name = "vldn-align",
1716 .description = "Check for VLDn unaligned access",
1717 .dependencies = 0,
1718 };
1719 result[@enumToInt(Feature.vmlx_forwarding)] = .{
1720 .index = @enumToInt(Feature.vmlx_forwarding),
1721 .name = @tagName(Feature.vmlx_forwarding),
1722 .llvm_name = "vmlx-forwarding",
1723 .description = "Has multiplier accumulator forwarding",
1724 .dependencies = 0,
1725 };
1726 result[@enumToInt(Feature.vmlx_hazards)] = .{
1727 .index = @enumToInt(Feature.vmlx_hazards),
1728 .name = @tagName(Feature.vmlx_hazards),
1729 .llvm_name = "vmlx-hazards",
1730 .description = "Has VMLx hazards",
1731 .dependencies = 0,
1732 };
1733 result[@enumToInt(Feature.wide_stride_vfp)] = .{
1734 .index = @enumToInt(Feature.wide_stride_vfp),
1735 .name = @tagName(Feature.wide_stride_vfp),
1736 .llvm_name = "wide-stride-vfp",
1737 .description = "Use a wide stride when allocating VFP registers",
1738 .dependencies = 0,
1739 };
1740 result[@enumToInt(Feature.xscale)] = .{
1741 .index = @enumToInt(Feature.xscale),
1742 .name = @tagName(Feature.xscale),
1743 .llvm_name = "xscale",
1744 .description = "ARMv5te architecture",
1745 .dependencies = featureSet(&[_]Feature{
1746 .armv5te,
1747 }),
1748 };
1749 result[@enumToInt(Feature.zcz)] = .{
1750 .index = @enumToInt(Feature.zcz),
1751 .name = @tagName(Feature.zcz),
1752 .llvm_name = "zcz",
1753 .description = "Has zero-cycle zeroing instructions",
1754 .dependencies = 0,
1755 };
1756 break :blk result;
1757};
1758
1759pub const cpu = struct {
1760 pub const arm1020e = Cpu{
1761 .name = "arm1020e",
1762 .llvm_name = "arm1020e",
1763 .features = featureSet(&[_]Feature{
1764 .armv5te,
1765 }),
1766 };
1767 pub const arm1020t = Cpu{
1768 .name = "arm1020t",
1769 .llvm_name = "arm1020t",
1770 .features = featureSet(&[_]Feature{
1771 .armv5t,
1772 }),
1773 };
1774 pub const arm1022e = Cpu{
1775 .name = "arm1022e",
1776 .llvm_name = "arm1022e",
1777 .features = featureSet(&[_]Feature{
1778 .armv5te,
1779 }),
1780 };
1781 pub const arm10e = Cpu{
1782 .name = "arm10e",
1783 .llvm_name = "arm10e",
1784 .features = featureSet(&[_]Feature{
1785 .armv5te,
1786 }),
1787 };
1788 pub const arm10tdmi = Cpu{
1789 .name = "arm10tdmi",
1790 .llvm_name = "arm10tdmi",
1791 .features = featureSet(&[_]Feature{
1792 .armv5t,
1793 }),
1794 };
1795 pub const arm1136j_s = Cpu{
1796 .name = "arm1136j_s",
1797 .llvm_name = "arm1136j-s",
1798 .features = featureSet(&[_]Feature{
1799 .armv6,
1800 }),
1801 };
1802 pub const arm1136jf_s = Cpu{
1803 .name = "arm1136jf_s",
1804 .llvm_name = "arm1136jf-s",
1805 .features = featureSet(&[_]Feature{
1806 .armv6,
1807 .slowfpvmlx,
1808 .vfp2,
1809 }),
1810 };
1811 pub const arm1156t2_s = Cpu{
1812 .name = "arm1156t2_s",
1813 .llvm_name = "arm1156t2-s",
1814 .features = featureSet(&[_]Feature{
1815 .armv6t2,
1816 }),
1817 };
1818 pub const arm1156t2f_s = Cpu{
1819 .name = "arm1156t2f_s",
1820 .llvm_name = "arm1156t2f-s",
1821 .features = featureSet(&[_]Feature{
1822 .armv6t2,
1823 .slowfpvmlx,
1824 .vfp2,
1825 }),
1826 };
1827 pub const arm1176j_s = Cpu{
1828 .name = "arm1176j_s",
1829 .llvm_name = "arm1176j-s",
1830 .features = featureSet(&[_]Feature{
1831 .armv6kz,
1832 }),
1833 };
1834 pub const arm1176jz_s = Cpu{
1835 .name = "arm1176jz_s",
1836 .llvm_name = "arm1176jz-s",
1837 .features = featureSet(&[_]Feature{
1838 .armv6kz,
1839 }),
1840 };
1841 pub const arm1176jzf_s = Cpu{
1842 .name = "arm1176jzf_s",
1843 .llvm_name = "arm1176jzf-s",
1844 .features = featureSet(&[_]Feature{
1845 .armv6kz,
1846 .slowfpvmlx,
1847 .vfp2,
1848 }),
1849 };
1850 pub const arm710t = Cpu{
1851 .name = "arm710t",
1852 .llvm_name = "arm710t",
1853 .features = featureSet(&[_]Feature{
1854 .armv4t,
1855 }),
1856 };
1857 pub const arm720t = Cpu{
1858 .name = "arm720t",
1859 .llvm_name = "arm720t",
1860 .features = featureSet(&[_]Feature{
1861 .armv4t,
1862 }),
1863 };
1864 pub const arm7tdmi = Cpu{
1865 .name = "arm7tdmi",
1866 .llvm_name = "arm7tdmi",
1867 .features = featureSet(&[_]Feature{
1868 .armv4t,
1869 }),
1870 };
1871 pub const arm7tdmi_s = Cpu{
1872 .name = "arm7tdmi_s",
1873 .llvm_name = "arm7tdmi-s",
1874 .features = featureSet(&[_]Feature{
1875 .armv4t,
1876 }),
1877 };
1878 pub const arm8 = Cpu{
1879 .name = "arm8",
1880 .llvm_name = "arm8",
1881 .features = featureSet(&[_]Feature{
1882 .armv4,
1883 }),
1884 };
1885 pub const arm810 = Cpu{
1886 .name = "arm810",
1887 .llvm_name = "arm810",
1888 .features = featureSet(&[_]Feature{
1889 .armv4,
1890 }),
1891 };
1892 pub const arm9 = Cpu{
1893 .name = "arm9",
1894 .llvm_name = "arm9",
1895 .features = featureSet(&[_]Feature{
1896 .armv4t,
1897 }),
1898 };
1899 pub const arm920 = Cpu{
1900 .name = "arm920",
1901 .llvm_name = "arm920",
1902 .features = featureSet(&[_]Feature{
1903 .armv4t,
1904 }),
1905 };
1906 pub const arm920t = Cpu{
1907 .name = "arm920t",
1908 .llvm_name = "arm920t",
1909 .features = featureSet(&[_]Feature{
1910 .armv4t,
1911 }),
1912 };
1913 pub const arm922t = Cpu{
1914 .name = "arm922t",
1915 .llvm_name = "arm922t",
1916 .features = featureSet(&[_]Feature{
1917 .armv4t,
1918 }),
1919 };
1920 pub const arm926ej_s = Cpu{
1921 .name = "arm926ej_s",
1922 .llvm_name = "arm926ej-s",
1923 .features = featureSet(&[_]Feature{
1924 .armv5te,
1925 }),
1926 };
1927 pub const arm940t = Cpu{
1928 .name = "arm940t",
1929 .llvm_name = "arm940t",
1930 .features = featureSet(&[_]Feature{
1931 .armv4t,
1932 }),
1933 };
1934 pub const arm946e_s = Cpu{
1935 .name = "arm946e_s",
1936 .llvm_name = "arm946e-s",
1937 .features = featureSet(&[_]Feature{
1938 .armv5te,
1939 }),
1940 };
1941 pub const arm966e_s = Cpu{
1942 .name = "arm966e_s",
1943 .llvm_name = "arm966e-s",
1944 .features = featureSet(&[_]Feature{
1945 .armv5te,
1946 }),
1947 };
1948 pub const arm968e_s = Cpu{
1949 .name = "arm968e_s",
1950 .llvm_name = "arm968e-s",
1951 .features = featureSet(&[_]Feature{
1952 .armv5te,
1953 }),
1954 };
1955 pub const arm9e = Cpu{
1956 .name = "arm9e",
1957 .llvm_name = "arm9e",
1958 .features = featureSet(&[_]Feature{
1959 .armv5te,
1960 }),
1961 };
1962 pub const arm9tdmi = Cpu{
1963 .name = "arm9tdmi",
1964 .llvm_name = "arm9tdmi",
1965 .features = featureSet(&[_]Feature{
1966 .armv4t,
1967 }),
1968 };
1969 pub const cortex_a12 = Cpu{
1970 .name = "cortex_a12",
1971 .llvm_name = "cortex-a12",
1972 .features = featureSet(&[_]Feature{
1973 .a12,
1974 .armv7_a,
1975 .avoid_partial_cpsr,
1976 .mp,
1977 .ret_addr_stack,
1978 .trustzone,
1979 .vfp4,
1980 .virtualization,
1981 .vmlx_forwarding,
1982 }),
1983 };
1984 pub const cortex_a15 = Cpu{
1985 .name = "cortex_a15",
1986 .llvm_name = "cortex-a15",
1987 .features = featureSet(&[_]Feature{
1988 .a15,
1989 .armv7_a,
1990 .avoid_partial_cpsr,
1991 .dont_widen_vmovs,
1992 .mp,
1993 .muxed_units,
1994 .ret_addr_stack,
1995 .splat_vfp_neon,
1996 .trustzone,
1997 .vfp4,
1998 .virtualization,
1999 .vldn_align,
2000 }),
2001 };
2002 pub const cortex_a17 = Cpu{
2003 .name = "cortex_a17",
2004 .llvm_name = "cortex-a17",
2005 .features = featureSet(&[_]Feature{
2006 .a17,
2007 .armv7_a,
2008 .avoid_partial_cpsr,
2009 .mp,
2010 .ret_addr_stack,
2011 .trustzone,
2012 .vfp4,
2013 .virtualization,
2014 .vmlx_forwarding,
2015 }),
2016 };
2017 pub const cortex_a32 = Cpu{
2018 .name = "cortex_a32",
2019 .llvm_name = "cortex-a32",
2020 .features = featureSet(&[_]Feature{
2021 .armv8_a,
2022 .crc,
2023 .crypto,
2024 .hwdiv,
2025 .hwdiv_arm,
2026 }),
2027 };
2028 pub const cortex_a35 = Cpu{
2029 .name = "cortex_a35",
2030 .llvm_name = "cortex-a35",
2031 .features = featureSet(&[_]Feature{
2032 .a35,
2033 .armv8_a,
2034 .crc,
2035 .crypto,
2036 .hwdiv,
2037 .hwdiv_arm,
2038 }),
2039 };
2040 pub const cortex_a5 = Cpu{
2041 .name = "cortex_a5",
2042 .llvm_name = "cortex-a5",
2043 .features = featureSet(&[_]Feature{
2044 .a5,
2045 .armv7_a,
2046 .mp,
2047 .ret_addr_stack,
2048 .slow_fp_brcc,
2049 .slowfpvmlx,
2050 .trustzone,
2051 .vfp4,
2052 .vmlx_forwarding,
2053 }),
2054 };
2055 pub const cortex_a53 = Cpu{
2056 .name = "cortex_a53",
2057 .llvm_name = "cortex-a53",
2058 .features = featureSet(&[_]Feature{
2059 .a53,
2060 .armv8_a,
2061 .crc,
2062 .crypto,
2063 .fpao,
2064 .hwdiv,
2065 .hwdiv_arm,
2066 }),
2067 };
2068 pub const cortex_a55 = Cpu{
2069 .name = "cortex_a55",
2070 .llvm_name = "cortex-a55",
2071 .features = featureSet(&[_]Feature{
2072 .a55,
2073 .armv8_2_a,
2074 .dotprod,
2075 .hwdiv,
2076 .hwdiv_arm,
2077 }),
2078 };
2079 pub const cortex_a57 = Cpu{
2080 .name = "cortex_a57",
2081 .llvm_name = "cortex-a57",
2082 .features = featureSet(&[_]Feature{
2083 .a57,
2084 .armv8_a,
2085 .avoid_partial_cpsr,
2086 .cheap_predicable_cpsr,
2087 .crc,
2088 .crypto,
2089 .fpao,
2090 .hwdiv,
2091 .hwdiv_arm,
2092 }),
2093 };
2094 pub const cortex_a7 = Cpu{
2095 .name = "cortex_a7",
2096 .llvm_name = "cortex-a7",
2097 .features = featureSet(&[_]Feature{
2098 .a7,
2099 .armv7_a,
2100 .mp,
2101 .ret_addr_stack,
2102 .slow_fp_brcc,
2103 .slowfpvmlx,
2104 .trustzone,
2105 .vfp4,
2106 .virtualization,
2107 .vmlx_forwarding,
2108 .vmlx_hazards,
2109 }),
2110 };
2111 pub const cortex_a72 = Cpu{
2112 .name = "cortex_a72",
2113 .llvm_name = "cortex-a72",
2114 .features = featureSet(&[_]Feature{
2115 .a72,
2116 .armv8_a,
2117 .crc,
2118 .crypto,
2119 .hwdiv,
2120 .hwdiv_arm,
2121 }),
2122 };
2123 pub const cortex_a73 = Cpu{
2124 .name = "cortex_a73",
2125 .llvm_name = "cortex-a73",
2126 .features = featureSet(&[_]Feature{
2127 .a73,
2128 .armv8_a,
2129 .crc,
2130 .crypto,
2131 .hwdiv,
2132 .hwdiv_arm,
2133 }),
2134 };
2135 pub const cortex_a75 = Cpu{
2136 .name = "cortex_a75",
2137 .llvm_name = "cortex-a75",
2138 .features = featureSet(&[_]Feature{
2139 .a75,
2140 .armv8_2_a,
2141 .dotprod,
2142 .hwdiv,
2143 .hwdiv_arm,
2144 }),
2145 };
2146 pub const cortex_a76 = Cpu{
2147 .name = "cortex_a76",
2148 .llvm_name = "cortex-a76",
2149 .features = featureSet(&[_]Feature{
2150 .a76,
2151 .armv8_2_a,
2152 .crc,
2153 .crypto,
2154 .dotprod,
2155 .fullfp16,
2156 .hwdiv,
2157 .hwdiv_arm,
2158 }),
2159 };
2160 pub const cortex_a76ae = Cpu{
2161 .name = "cortex_a76ae",
2162 .llvm_name = "cortex-a76ae",
2163 .features = featureSet(&[_]Feature{
2164 .a76,
2165 .armv8_2_a,
2166 .crc,
2167 .crypto,
2168 .dotprod,
2169 .fullfp16,
2170 .hwdiv,
2171 .hwdiv_arm,
2172 }),
2173 };
2174 pub const cortex_a8 = Cpu{
2175 .name = "cortex_a8",
2176 .llvm_name = "cortex-a8",
2177 .features = featureSet(&[_]Feature{
2178 .a8,
2179 .armv7_a,
2180 .nonpipelined_vfp,
2181 .ret_addr_stack,
2182 .slow_fp_brcc,
2183 .slowfpvmlx,
2184 .trustzone,
2185 .vmlx_forwarding,
2186 .vmlx_hazards,
2187 }),
2188 };
2189 pub const cortex_a9 = Cpu{
2190 .name = "cortex_a9",
2191 .llvm_name = "cortex-a9",
2192 .features = featureSet(&[_]Feature{
2193 .a9,
2194 .armv7_a,
2195 .avoid_partial_cpsr,
2196 .expand_fp_mlx,
2197 .fp16,
2198 .mp,
2199 .muxed_units,
2200 .neon_fpmovs,
2201 .prefer_vmovsr,
2202 .ret_addr_stack,
2203 .trustzone,
2204 .vldn_align,
2205 .vmlx_forwarding,
2206 .vmlx_hazards,
2207 }),
2208 };
2209 pub const cortex_m0 = Cpu{
2210 .name = "cortex_m0",
2211 .llvm_name = "cortex-m0",
2212 .features = featureSet(&[_]Feature{
2213 .armv6_m,
2214 }),
2215 };
2216 pub const cortex_m0plus = Cpu{
2217 .name = "cortex_m0plus",
2218 .llvm_name = "cortex-m0plus",
2219 .features = featureSet(&[_]Feature{
2220 .armv6_m,
2221 }),
2222 };
2223 pub const cortex_m1 = Cpu{
2224 .name = "cortex_m1",
2225 .llvm_name = "cortex-m1",
2226 .features = featureSet(&[_]Feature{
2227 .armv6_m,
2228 }),
2229 };
2230 pub const cortex_m23 = Cpu{
2231 .name = "cortex_m23",
2232 .llvm_name = "cortex-m23",
2233 .features = featureSet(&[_]Feature{
2234 .armv8_m_base,
2235 .no_movt,
2236 }),
2237 };
2238 pub const cortex_m3 = Cpu{
2239 .name = "cortex_m3",
2240 .llvm_name = "cortex-m3",
2241 .features = featureSet(&[_]Feature{
2242 .armv7_m,
2243 .loop_align,
2244 .m3,
2245 .no_branch_predictor,
2246 .use_aa,
2247 .use_misched,
2248 }),
2249 };
2250 pub const cortex_m33 = Cpu{
2251 .name = "cortex_m33",
2252 .llvm_name = "cortex-m33",
2253 .features = featureSet(&[_]Feature{
2254 .armv8_m_main,
2255 .dsp,
2256 .fp_armv8d16sp,
2257 .loop_align,
2258 .no_branch_predictor,
2259 .slowfpvmlx,
2260 .use_aa,
2261 .use_misched,
2262 }),
2263 };
2264 pub const cortex_m35p = Cpu{
2265 .name = "cortex_m35p",
2266 .llvm_name = "cortex-m35p",
2267 .features = featureSet(&[_]Feature{
2268 .armv8_m_main,
2269 .dsp,
2270 .fp_armv8d16sp,
2271 .loop_align,
2272 .no_branch_predictor,
2273 .slowfpvmlx,
2274 .use_aa,
2275 .use_misched,
2276 }),
2277 };
2278 pub const cortex_m4 = Cpu{
2279 .name = "cortex_m4",
2280 .llvm_name = "cortex-m4",
2281 .features = featureSet(&[_]Feature{
2282 .armv7e_m,
2283 .loop_align,
2284 .no_branch_predictor,
2285 .slowfpvmlx,
2286 .use_aa,
2287 .use_misched,
2288 .vfp4d16sp,
2289 }),
2290 };
2291 pub const cortex_m7 = Cpu{
2292 .name = "cortex_m7",
2293 .llvm_name = "cortex-m7",
2294 .features = featureSet(&[_]Feature{
2295 .armv7e_m,
2296 .fp_armv8d16,
2297 }),
2298 };
2299 pub const cortex_r4 = Cpu{
2300 .name = "cortex_r4",
2301 .llvm_name = "cortex-r4",
2302 .features = featureSet(&[_]Feature{
2303 .armv7_r,
2304 .avoid_partial_cpsr,
2305 .r4,
2306 .ret_addr_stack,
2307 }),
2308 };
2309 pub const cortex_r4f = Cpu{
2310 .name = "cortex_r4f",
2311 .llvm_name = "cortex-r4f",
2312 .features = featureSet(&[_]Feature{
2313 .armv7_r,
2314 .avoid_partial_cpsr,
2315 .r4,
2316 .ret_addr_stack,
2317 .slow_fp_brcc,
2318 .slowfpvmlx,
2319 .vfp3d16,
2320 }),
2321 };
2322 pub const cortex_r5 = Cpu{
2323 .name = "cortex_r5",
2324 .llvm_name = "cortex-r5",
2325 .features = featureSet(&[_]Feature{
2326 .armv7_r,
2327 .avoid_partial_cpsr,
2328 .hwdiv_arm,
2329 .r5,
2330 .ret_addr_stack,
2331 .slow_fp_brcc,
2332 .slowfpvmlx,
2333 .vfp3d16,
2334 }),
2335 };
2336 pub const cortex_r52 = Cpu{
2337 .name = "cortex_r52",
2338 .llvm_name = "cortex-r52",
2339 .features = featureSet(&[_]Feature{
2340 .armv8_r,
2341 .fpao,
2342 .r52,
2343 .use_aa,
2344 .use_misched,
2345 }),
2346 };
2347 pub const cortex_r7 = Cpu{
2348 .name = "cortex_r7",
2349 .llvm_name = "cortex-r7",
2350 .features = featureSet(&[_]Feature{
2351 .armv7_r,
2352 .avoid_partial_cpsr,
2353 .fp16,
2354 .hwdiv_arm,
2355 .mp,
2356 .r7,
2357 .ret_addr_stack,
2358 .slow_fp_brcc,
2359 .slowfpvmlx,
2360 .vfp3d16,
2361 }),
2362 };
2363 pub const cortex_r8 = Cpu{
2364 .name = "cortex_r8",
2365 .llvm_name = "cortex-r8",
2366 .features = featureSet(&[_]Feature{
2367 .armv7_r,
2368 .avoid_partial_cpsr,
2369 .fp16,
2370 .hwdiv_arm,
2371 .mp,
2372 .ret_addr_stack,
2373 .slow_fp_brcc,
2374 .slowfpvmlx,
2375 .vfp3d16,
2376 }),
2377 };
2378 pub const cyclone = Cpu{
2379 .name = "cyclone",
2380 .llvm_name = "cyclone",
2381 .features = featureSet(&[_]Feature{
2382 .armv8_a,
2383 .avoid_movs_shop,
2384 .avoid_partial_cpsr,
2385 .crypto,
2386 .disable_postra_scheduler,
2387 .hwdiv,
2388 .hwdiv_arm,
2389 .mp,
2390 .neonfp,
2391 .ret_addr_stack,
2392 .slowfpvmlx,
2393 .swift,
2394 .use_misched,
2395 .vfp4,
2396 .zcz,
2397 }),
2398 };
2399 pub const ep9312 = Cpu{
2400 .name = "ep9312",
2401 .llvm_name = "ep9312",
2402 .features = featureSet(&[_]Feature{
2403 .armv4t,
2404 }),
2405 };
2406 pub const exynos_m1 = Cpu{
2407 .name = "exynos_m1",
2408 .llvm_name = "exynos-m1",
2409 .features = featureSet(&[_]Feature{
2410 .armv8_a,
2411 .exynos,
2412 }),
2413 };
2414 pub const exynos_m2 = Cpu{
2415 .name = "exynos_m2",
2416 .llvm_name = "exynos-m2",
2417 .features = featureSet(&[_]Feature{
2418 .armv8_a,
2419 .exynos,
2420 }),
2421 };
2422 pub const exynos_m3 = Cpu{
2423 .name = "exynos_m3",
2424 .llvm_name = "exynos-m3",
2425 .features = featureSet(&[_]Feature{
2426 .armv8_a,
2427 .exynos,
2428 }),
2429 };
2430 pub const exynos_m4 = Cpu{
2431 .name = "exynos_m4",
2432 .llvm_name = "exynos-m4",
2433 .features = featureSet(&[_]Feature{
2434 .armv8_2_a,
2435 .dotprod,
2436 .exynos,
2437 .fullfp16,
2438 }),
2439 };
2440 pub const exynos_m5 = Cpu{
2441 .name = "exynos_m5",
2442 .llvm_name = "exynos-m5",
2443 .features = featureSet(&[_]Feature{
2444 .armv8_2_a,
2445 .dotprod,
2446 .exynos,
2447 .fullfp16,
2448 }),
2449 };
2450 pub const generic = Cpu{
2451 .name = "generic",
2452 .llvm_name = "generic",
2453 .features = 0,
2454 };
2455 pub const iwmmxt = Cpu{
2456 .name = "iwmmxt",
2457 .llvm_name = "iwmmxt",
2458 .features = featureSet(&[_]Feature{
2459 .armv5te,
2460 }),
2461 };
2462 pub const krait = Cpu{
2463 .name = "krait",
2464 .llvm_name = "krait",
2465 .features = featureSet(&[_]Feature{
2466 .armv7_a,
2467 .avoid_partial_cpsr,
2468 .fp16,
2469 .hwdiv,
2470 .hwdiv_arm,
2471 .krait,
2472 .muxed_units,
2473 .ret_addr_stack,
2474 .vfp4,
2475 .vldn_align,
2476 .vmlx_forwarding,
2477 }),
2478 };
2479 pub const kryo = Cpu{
2480 .name = "kryo",
2481 .llvm_name = "kryo",
2482 .features = featureSet(&[_]Feature{
2483 .armv8_a,
2484 .crc,
2485 .crypto,
2486 .hwdiv,
2487 .hwdiv_arm,
2488 .kryo,
2489 }),
2490 };
2491 pub const mpcore = Cpu{
2492 .name = "mpcore",
2493 .llvm_name = "mpcore",
2494 .features = featureSet(&[_]Feature{
2495 .armv6k,
2496 .slowfpvmlx,
2497 .vfp2,
2498 }),
2499 };
2500 pub const mpcorenovfp = Cpu{
2501 .name = "mpcorenovfp",
2502 .llvm_name = "mpcorenovfp",
2503 .features = featureSet(&[_]Feature{
2504 .armv6k,
2505 }),
2506 };
2507 pub const sc000 = Cpu{
2508 .name = "sc000",
2509 .llvm_name = "sc000",
2510 .features = featureSet(&[_]Feature{
2511 .armv6_m,
2512 }),
2513 };
2514 pub const sc300 = Cpu{
2515 .name = "sc300",
2516 .llvm_name = "sc300",
2517 .features = featureSet(&[_]Feature{
2518 .armv7_m,
2519 .m3,
2520 .no_branch_predictor,
2521 .use_aa,
2522 .use_misched,
2523 }),
2524 };
2525 pub const strongarm = Cpu{
2526 .name = "strongarm",
2527 .llvm_name = "strongarm",
2528 .features = featureSet(&[_]Feature{
2529 .armv4,
2530 }),
2531 };
2532 pub const strongarm110 = Cpu{
2533 .name = "strongarm110",
2534 .llvm_name = "strongarm110",
2535 .features = featureSet(&[_]Feature{
2536 .armv4,
2537 }),
2538 };
2539 pub const strongarm1100 = Cpu{
2540 .name = "strongarm1100",
2541 .llvm_name = "strongarm1100",
2542 .features = featureSet(&[_]Feature{
2543 .armv4,
2544 }),
2545 };
2546 pub const strongarm1110 = Cpu{
2547 .name = "strongarm1110",
2548 .llvm_name = "strongarm1110",
2549 .features = featureSet(&[_]Feature{
2550 .armv4,
2551 }),
2552 };
2553 pub const swift = Cpu{
2554 .name = "swift",
2555 .llvm_name = "swift",
2556 .features = featureSet(&[_]Feature{
2557 .armv7_a,
2558 .avoid_movs_shop,
2559 .avoid_partial_cpsr,
2560 .disable_postra_scheduler,
2561 .hwdiv,
2562 .hwdiv_arm,
2563 .mp,
2564 .neonfp,
2565 .prefer_ishst,
2566 .prof_unpr,
2567 .ret_addr_stack,
2568 .slow_load_D_subreg,
2569 .slow_odd_reg,
2570 .slow_vdup32,
2571 .slow_vgetlni32,
2572 .slowfpvmlx,
2573 .swift,
2574 .use_misched,
2575 .vfp4,
2576 .vmlx_hazards,
2577 .wide_stride_vfp,
2578 }),
2579 };
2580 pub const xscale = Cpu{
2581 .name = "xscale",
2582 .llvm_name = "xscale",
2583 .features = featureSet(&[_]Feature{
2584 .armv5te,
2585 }),
2586 };
2587};
2588
2589/// All arm CPUs, sorted alphabetically by name.
2590/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
2591/// compiler has inefficient memory and CPU usage, affecting build times.
2592pub const all_cpus = &[_]*const Cpu{
2593 &cpu.arm1020e,
2594 &cpu.arm1020t,
2595 &cpu.arm1022e,
2596 &cpu.arm10e,
2597 &cpu.arm10tdmi,
2598 &cpu.arm1136j_s,
2599 &cpu.arm1136jf_s,
2600 &cpu.arm1156t2_s,
2601 &cpu.arm1156t2f_s,
2602 &cpu.arm1176j_s,
2603 &cpu.arm1176jz_s,
2604 &cpu.arm1176jzf_s,
2605 &cpu.arm710t,
2606 &cpu.arm720t,
2607 &cpu.arm7tdmi,
2608 &cpu.arm7tdmi_s,
2609 &cpu.arm8,
2610 &cpu.arm810,
2611 &cpu.arm9,
2612 &cpu.arm920,
2613 &cpu.arm920t,
2614 &cpu.arm922t,
2615 &cpu.arm926ej_s,
2616 &cpu.arm940t,
2617 &cpu.arm946e_s,
2618 &cpu.arm966e_s,
2619 &cpu.arm968e_s,
2620 &cpu.arm9e,
2621 &cpu.arm9tdmi,
2622 &cpu.cortex_a12,
2623 &cpu.cortex_a15,
2624 &cpu.cortex_a17,
2625 &cpu.cortex_a32,
2626 &cpu.cortex_a35,
2627 &cpu.cortex_a5,
2628 &cpu.cortex_a53,
2629 &cpu.cortex_a55,
2630 &cpu.cortex_a57,
2631 &cpu.cortex_a7,
2632 &cpu.cortex_a72,
2633 &cpu.cortex_a73,
2634 &cpu.cortex_a75,
2635 &cpu.cortex_a76,
2636 &cpu.cortex_a76ae,
2637 &cpu.cortex_a8,
2638 &cpu.cortex_a9,
2639 &cpu.cortex_m0,
2640 &cpu.cortex_m0plus,
2641 &cpu.cortex_m1,
2642 &cpu.cortex_m23,
2643 &cpu.cortex_m3,
2644 &cpu.cortex_m33,
2645 &cpu.cortex_m35p,
2646 &cpu.cortex_m4,
2647 &cpu.cortex_m7,
2648 &cpu.cortex_r4,
2649 &cpu.cortex_r4f,
2650 &cpu.cortex_r5,
2651 &cpu.cortex_r52,
2652 &cpu.cortex_r7,
2653 &cpu.cortex_r8,
2654 &cpu.cyclone,
2655 &cpu.ep9312,
2656 &cpu.exynos_m1,
2657 &cpu.exynos_m2,
2658 &cpu.exynos_m3,
2659 &cpu.exynos_m4,
2660 &cpu.exynos_m5,
2661 &cpu.generic,
2662 &cpu.iwmmxt,
2663 &cpu.krait,
2664 &cpu.kryo,
2665 &cpu.mpcore,
2666 &cpu.mpcorenovfp,
2667 &cpu.sc000,
2668 &cpu.sc300,
2669 &cpu.strongarm,
2670 &cpu.strongarm110,
2671 &cpu.strongarm1100,
2672 &cpu.strongarm1110,
2673 &cpu.swift,
2674 &cpu.xscale,
22962675};
lib/std/target/avr.zig+2440-4790
......@@ -1,4791 +1,2441 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_addsubiw = Feature{
5 .name = "addsubiw",
6 .llvm_name = "addsubiw",
7 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_break = Feature{
13 .name = "break",
14 .llvm_name = "break",
15 .description = "The device supports the `BREAK` debugging instruction",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_des = Feature{
21 .name = "des",
22 .llvm_name = "des",
23 .description = "The device supports the `DES k` encryption instruction",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_eijmpcall = Feature{
29 .name = "eijmpcall",
30 .llvm_name = "eijmpcall",
31 .description = "The device supports the `EIJMP`/`EICALL` instructions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_elpm = Feature{
37 .name = "elpm",
38 .llvm_name = "elpm",
39 .description = "The device supports the ELPM instruction",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_elpmx = Feature{
45 .name = "elpmx",
46 .llvm_name = "elpmx",
47 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_ijmpcall = Feature{
53 .name = "ijmpcall",
54 .llvm_name = "ijmpcall",
55 .description = "The device supports `IJMP`/`ICALL`instructions",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_jmpcall = Feature{
61 .name = "jmpcall",
62 .llvm_name = "jmpcall",
63 .description = "The device supports the `JMP` and `CALL` instructions",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_lpm = Feature{
69 .name = "lpm",
70 .llvm_name = "lpm",
71 .description = "The device supports the `LPM` instruction",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_lpmx = Feature{
77 .name = "lpmx",
78 .llvm_name = "lpmx",
79 .description = "The device supports the `LPM Rd, Z[+]` instruction",
80 .dependencies = &[_]*const Feature {
81 },
82};
83
84pub const feature_movw = Feature{
85 .name = "movw",
86 .llvm_name = "movw",
87 .description = "The device supports the 16-bit MOVW instruction",
88 .dependencies = &[_]*const Feature {
89 },
90};
91
92pub const feature_mul = Feature{
93 .name = "mul",
94 .llvm_name = "mul",
95 .description = "The device supports the multiplication instructions",
96 .dependencies = &[_]*const Feature {
97 },
98};
99
100pub const feature_rmw = Feature{
101 .name = "rmw",
102 .llvm_name = "rmw",
103 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
104 .dependencies = &[_]*const Feature {
105 },
106};
107
108pub const feature_spm = Feature{
109 .name = "spm",
110 .llvm_name = "spm",
111 .description = "The device supports the `SPM` instruction",
112 .dependencies = &[_]*const Feature {
113 },
114};
115
116pub const feature_spmx = Feature{
117 .name = "spmx",
118 .llvm_name = "spmx",
119 .description = "The device supports the `SPM Z+` instruction",
120 .dependencies = &[_]*const Feature {
121 },
122};
123
124pub const feature_sram = Feature{
125 .name = "sram",
126 .llvm_name = "sram",
127 .description = "The device has random access memory",
128 .dependencies = &[_]*const Feature {
129 },
130};
131
132pub const feature_smallstack = Feature{
133 .name = "smallstack",
134 .llvm_name = "smallstack",
135 .description = "The device has an 8-bit stack pointer",
136 .dependencies = &[_]*const Feature {
137 },
138};
139
140pub const feature_tinyencoding = Feature{
141 .name = "tinyencoding",
142 .llvm_name = "tinyencoding",
143 .description = "The device has Tiny core specific instruction encodings",
144 .dependencies = &[_]*const Feature {
145 },
146};
147
148pub const features = &[_]*const Feature {
149 &feature_addsubiw,
150 &feature_break,
151 &feature_des,
152 &feature_eijmpcall,
153 &feature_elpm,
154 &feature_elpmx,
155 &feature_ijmpcall,
156 &feature_jmpcall,
157 &feature_lpm,
158 &feature_lpmx,
159 &feature_movw,
160 &feature_mul,
161 &feature_rmw,
162 &feature_spm,
163 &feature_spmx,
164 &feature_sram,
165 &feature_smallstack,
166 &feature_tinyencoding,
167};
168
169pub const cpu_at43usb320 = Cpu{
170 .name = "at43usb320",
171 .llvm_name = "at43usb320",
172 .dependencies = &[_]*const Feature {
173 &feature_jmpcall,
174 &feature_lpm,
175 &feature_elpm,
176 &feature_sram,
177 &feature_addsubiw,
178 &feature_ijmpcall,
179 },
180};
181
182pub const cpu_at43usb355 = Cpu{
183 .name = "at43usb355",
184 .llvm_name = "at43usb355",
185 .dependencies = &[_]*const Feature {
186 &feature_jmpcall,
187 &feature_lpm,
188 &feature_sram,
189 &feature_addsubiw,
190 &feature_ijmpcall,
191 },
192};
193
194pub const cpu_at76c711 = Cpu{
195 .name = "at76c711",
196 .llvm_name = "at76c711",
197 .dependencies = &[_]*const Feature {
198 &feature_jmpcall,
199 &feature_lpm,
200 &feature_sram,
201 &feature_addsubiw,
202 &feature_ijmpcall,
203 },
204};
205
206pub const cpu_at86rf401 = Cpu{
207 .name = "at86rf401",
208 .llvm_name = "at86rf401",
209 .dependencies = &[_]*const Feature {
210 &feature_lpm,
211 &feature_sram,
212 &feature_addsubiw,
213 &feature_ijmpcall,
214 &feature_lpmx,
215 &feature_movw,
216 },
217};
218
219pub const cpu_at90c8534 = Cpu{
220 .name = "at90c8534",
221 .llvm_name = "at90c8534",
222 .dependencies = &[_]*const Feature {
223 &feature_lpm,
224 &feature_sram,
225 &feature_addsubiw,
226 &feature_ijmpcall,
227 },
228};
229
230pub const cpu_at90can128 = Cpu{
231 .name = "at90can128",
232 .llvm_name = "at90can128",
233 .dependencies = &[_]*const Feature {
234 &feature_lpmx,
235 &feature_jmpcall,
236 &feature_lpm,
237 &feature_elpm,
238 &feature_sram,
239 &feature_addsubiw,
240 &feature_elpmx,
241 &feature_movw,
242 &feature_ijmpcall,
243 &feature_break,
244 &feature_spm,
245 &feature_mul,
246 },
247};
248
249pub const cpu_at90can32 = Cpu{
250 .name = "at90can32",
251 .llvm_name = "at90can32",
252 .dependencies = &[_]*const Feature {
253 &feature_lpmx,
254 &feature_jmpcall,
255 &feature_lpm,
256 &feature_sram,
257 &feature_addsubiw,
258 &feature_movw,
259 &feature_ijmpcall,
260 &feature_break,
261 &feature_spm,
262 &feature_mul,
263 },
264};
265
266pub const cpu_at90can64 = Cpu{
267 .name = "at90can64",
268 .llvm_name = "at90can64",
269 .dependencies = &[_]*const Feature {
270 &feature_lpmx,
271 &feature_jmpcall,
272 &feature_lpm,
273 &feature_sram,
274 &feature_addsubiw,
275 &feature_movw,
276 &feature_ijmpcall,
277 &feature_break,
278 &feature_spm,
279 &feature_mul,
280 },
281};
282
283pub const cpu_at90pwm1 = Cpu{
284 .name = "at90pwm1",
285 .llvm_name = "at90pwm1",
286 .dependencies = &[_]*const Feature {
287 &feature_lpmx,
288 &feature_lpm,
289 &feature_sram,
290 &feature_addsubiw,
291 &feature_movw,
292 &feature_ijmpcall,
293 &feature_break,
294 &feature_spm,
295 &feature_mul,
296 },
297};
298
299pub const cpu_at90pwm161 = Cpu{
300 .name = "at90pwm161",
301 .llvm_name = "at90pwm161",
302 .dependencies = &[_]*const Feature {
303 &feature_lpmx,
304 &feature_jmpcall,
305 &feature_lpm,
306 &feature_sram,
307 &feature_addsubiw,
308 &feature_movw,
309 &feature_ijmpcall,
310 &feature_break,
311 &feature_spm,
312 &feature_mul,
313 },
314};
315
316pub const cpu_at90pwm2 = Cpu{
317 .name = "at90pwm2",
318 .llvm_name = "at90pwm2",
319 .dependencies = &[_]*const Feature {
320 &feature_lpmx,
321 &feature_lpm,
322 &feature_sram,
323 &feature_addsubiw,
324 &feature_movw,
325 &feature_ijmpcall,
326 &feature_break,
327 &feature_spm,
328 &feature_mul,
329 },
330};
331
332pub const cpu_at90pwm216 = Cpu{
333 .name = "at90pwm216",
334 .llvm_name = "at90pwm216",
335 .dependencies = &[_]*const Feature {
336 &feature_lpmx,
337 &feature_jmpcall,
338 &feature_lpm,
339 &feature_sram,
340 &feature_addsubiw,
341 &feature_movw,
342 &feature_ijmpcall,
343 &feature_break,
344 &feature_spm,
345 &feature_mul,
346 },
347};
348
349pub const cpu_at90pwm2b = Cpu{
350 .name = "at90pwm2b",
351 .llvm_name = "at90pwm2b",
352 .dependencies = &[_]*const Feature {
353 &feature_lpmx,
354 &feature_lpm,
355 &feature_sram,
356 &feature_addsubiw,
357 &feature_movw,
358 &feature_ijmpcall,
359 &feature_break,
360 &feature_spm,
361 &feature_mul,
362 },
363};
364
365pub const cpu_at90pwm3 = Cpu{
366 .name = "at90pwm3",
367 .llvm_name = "at90pwm3",
368 .dependencies = &[_]*const Feature {
369 &feature_lpmx,
370 &feature_lpm,
371 &feature_sram,
372 &feature_addsubiw,
373 &feature_movw,
374 &feature_ijmpcall,
375 &feature_break,
376 &feature_spm,
377 &feature_mul,
378 },
379};
380
381pub const cpu_at90pwm316 = Cpu{
382 .name = "at90pwm316",
383 .llvm_name = "at90pwm316",
384 .dependencies = &[_]*const Feature {
385 &feature_lpmx,
386 &feature_jmpcall,
387 &feature_lpm,
388 &feature_sram,
389 &feature_addsubiw,
390 &feature_movw,
391 &feature_ijmpcall,
392 &feature_break,
393 &feature_spm,
394 &feature_mul,
395 },
396};
397
398pub const cpu_at90pwm3b = Cpu{
399 .name = "at90pwm3b",
400 .llvm_name = "at90pwm3b",
401 .dependencies = &[_]*const Feature {
402 &feature_lpmx,
403 &feature_lpm,
404 &feature_sram,
405 &feature_addsubiw,
406 &feature_movw,
407 &feature_ijmpcall,
408 &feature_break,
409 &feature_spm,
410 &feature_mul,
411 },
412};
413
414pub const cpu_at90pwm81 = Cpu{
415 .name = "at90pwm81",
416 .llvm_name = "at90pwm81",
417 .dependencies = &[_]*const Feature {
418 &feature_lpmx,
419 &feature_lpm,
420 &feature_sram,
421 &feature_addsubiw,
422 &feature_movw,
423 &feature_ijmpcall,
424 &feature_break,
425 &feature_spm,
426 &feature_mul,
427 },
428};
429
430pub const cpu_at90s1200 = Cpu{
431 .name = "at90s1200",
432 .llvm_name = "at90s1200",
433 .dependencies = &[_]*const Feature {
434 },
435};
436
437pub const cpu_at90s2313 = Cpu{
438 .name = "at90s2313",
439 .llvm_name = "at90s2313",
440 .dependencies = &[_]*const Feature {
441 &feature_lpm,
442 &feature_sram,
443 &feature_addsubiw,
444 &feature_ijmpcall,
445 },
446};
447
448pub const cpu_at90s2323 = Cpu{
449 .name = "at90s2323",
450 .llvm_name = "at90s2323",
451 .dependencies = &[_]*const Feature {
452 &feature_lpm,
453 &feature_sram,
454 &feature_addsubiw,
455 &feature_ijmpcall,
456 },
457};
458
459pub const cpu_at90s2333 = Cpu{
460 .name = "at90s2333",
461 .llvm_name = "at90s2333",
462 .dependencies = &[_]*const Feature {
463 &feature_lpm,
464 &feature_sram,
465 &feature_addsubiw,
466 &feature_ijmpcall,
467 },
468};
469
470pub const cpu_at90s2343 = Cpu{
471 .name = "at90s2343",
472 .llvm_name = "at90s2343",
473 .dependencies = &[_]*const Feature {
474 &feature_lpm,
475 &feature_sram,
476 &feature_addsubiw,
477 &feature_ijmpcall,
478 },
479};
480
481pub const cpu_at90s4414 = Cpu{
482 .name = "at90s4414",
483 .llvm_name = "at90s4414",
484 .dependencies = &[_]*const Feature {
485 &feature_lpm,
486 &feature_sram,
487 &feature_addsubiw,
488 &feature_ijmpcall,
489 },
490};
491
492pub const cpu_at90s4433 = Cpu{
493 .name = "at90s4433",
494 .llvm_name = "at90s4433",
495 .dependencies = &[_]*const Feature {
496 &feature_lpm,
497 &feature_sram,
498 &feature_addsubiw,
499 &feature_ijmpcall,
500 },
501};
502
503pub const cpu_at90s4434 = Cpu{
504 .name = "at90s4434",
505 .llvm_name = "at90s4434",
506 .dependencies = &[_]*const Feature {
507 &feature_lpm,
508 &feature_sram,
509 &feature_addsubiw,
510 &feature_ijmpcall,
511 },
512};
513
514pub const cpu_at90s8515 = Cpu{
515 .name = "at90s8515",
516 .llvm_name = "at90s8515",
517 .dependencies = &[_]*const Feature {
518 &feature_lpm,
519 &feature_sram,
520 &feature_addsubiw,
521 &feature_ijmpcall,
522 },
523};
524
525pub const cpu_at90s8535 = Cpu{
526 .name = "at90s8535",
527 .llvm_name = "at90s8535",
528 .dependencies = &[_]*const Feature {
529 &feature_lpm,
530 &feature_sram,
531 &feature_addsubiw,
532 &feature_ijmpcall,
533 },
534};
535
536pub const cpu_at90scr100 = Cpu{
537 .name = "at90scr100",
538 .llvm_name = "at90scr100",
539 .dependencies = &[_]*const Feature {
540 &feature_lpmx,
541 &feature_jmpcall,
542 &feature_lpm,
543 &feature_sram,
544 &feature_addsubiw,
545 &feature_movw,
546 &feature_ijmpcall,
547 &feature_break,
548 &feature_spm,
549 &feature_mul,
550 },
551};
552
553pub const cpu_at90usb1286 = Cpu{
554 .name = "at90usb1286",
555 .llvm_name = "at90usb1286",
556 .dependencies = &[_]*const Feature {
557 &feature_lpmx,
558 &feature_jmpcall,
559 &feature_lpm,
560 &feature_elpm,
561 &feature_sram,
562 &feature_addsubiw,
563 &feature_elpmx,
564 &feature_movw,
565 &feature_ijmpcall,
566 &feature_break,
567 &feature_spm,
568 &feature_mul,
569 },
570};
571
572pub const cpu_at90usb1287 = Cpu{
573 .name = "at90usb1287",
574 .llvm_name = "at90usb1287",
575 .dependencies = &[_]*const Feature {
576 &feature_lpmx,
577 &feature_jmpcall,
578 &feature_lpm,
579 &feature_elpm,
580 &feature_sram,
581 &feature_addsubiw,
582 &feature_elpmx,
583 &feature_movw,
584 &feature_ijmpcall,
585 &feature_break,
586 &feature_spm,
587 &feature_mul,
588 },
589};
590
591pub const cpu_at90usb162 = Cpu{
592 .name = "at90usb162",
593 .llvm_name = "at90usb162",
594 .dependencies = &[_]*const Feature {
595 &feature_lpmx,
596 &feature_jmpcall,
597 &feature_lpm,
598 &feature_sram,
599 &feature_addsubiw,
600 &feature_movw,
601 &feature_ijmpcall,
602 &feature_break,
603 &feature_spm,
604 },
605};
606
607pub const cpu_at90usb646 = Cpu{
608 .name = "at90usb646",
609 .llvm_name = "at90usb646",
610 .dependencies = &[_]*const Feature {
611 &feature_lpmx,
612 &feature_jmpcall,
613 &feature_lpm,
614 &feature_sram,
615 &feature_addsubiw,
616 &feature_movw,
617 &feature_ijmpcall,
618 &feature_break,
619 &feature_spm,
620 &feature_mul,
621 },
622};
623
624pub const cpu_at90usb647 = Cpu{
625 .name = "at90usb647",
626 .llvm_name = "at90usb647",
627 .dependencies = &[_]*const Feature {
628 &feature_lpmx,
629 &feature_jmpcall,
630 &feature_lpm,
631 &feature_sram,
632 &feature_addsubiw,
633 &feature_movw,
634 &feature_ijmpcall,
635 &feature_break,
636 &feature_spm,
637 &feature_mul,
638 },
639};
640
641pub const cpu_at90usb82 = Cpu{
642 .name = "at90usb82",
643 .llvm_name = "at90usb82",
644 .dependencies = &[_]*const Feature {
645 &feature_lpmx,
646 &feature_jmpcall,
647 &feature_lpm,
648 &feature_sram,
649 &feature_addsubiw,
650 &feature_movw,
651 &feature_ijmpcall,
652 &feature_break,
653 &feature_spm,
654 },
655};
656
657pub const cpu_at94k = Cpu{
658 .name = "at94k",
659 .llvm_name = "at94k",
660 .dependencies = &[_]*const Feature {
661 &feature_jmpcall,
662 &feature_lpm,
663 &feature_sram,
664 &feature_addsubiw,
665 &feature_ijmpcall,
666 &feature_lpmx,
667 &feature_movw,
668 &feature_mul,
669 },
670};
671
672pub const cpu_ata5272 = Cpu{
673 .name = "ata5272",
674 .llvm_name = "ata5272",
675 .dependencies = &[_]*const Feature {
676 &feature_lpmx,
677 &feature_lpm,
678 &feature_sram,
679 &feature_addsubiw,
680 &feature_movw,
681 &feature_ijmpcall,
682 &feature_break,
683 &feature_spm,
684 },
685};
686
687pub const cpu_ata5505 = Cpu{
688 .name = "ata5505",
689 .llvm_name = "ata5505",
690 .dependencies = &[_]*const Feature {
691 &feature_lpmx,
692 &feature_jmpcall,
693 &feature_lpm,
694 &feature_sram,
695 &feature_addsubiw,
696 &feature_movw,
697 &feature_ijmpcall,
698 &feature_break,
699 &feature_spm,
700 },
701};
702
703pub const cpu_ata5790 = Cpu{
704 .name = "ata5790",
705 .llvm_name = "ata5790",
706 .dependencies = &[_]*const Feature {
707 &feature_lpmx,
708 &feature_jmpcall,
709 &feature_lpm,
710 &feature_sram,
711 &feature_addsubiw,
712 &feature_movw,
713 &feature_ijmpcall,
714 &feature_break,
715 &feature_spm,
716 &feature_mul,
717 },
718};
719
720pub const cpu_ata5795 = Cpu{
721 .name = "ata5795",
722 .llvm_name = "ata5795",
723 .dependencies = &[_]*const Feature {
724 &feature_lpmx,
725 &feature_jmpcall,
726 &feature_lpm,
727 &feature_sram,
728 &feature_addsubiw,
729 &feature_movw,
730 &feature_ijmpcall,
731 &feature_break,
732 &feature_spm,
733 &feature_mul,
734 },
735};
736
737pub const cpu_ata6285 = Cpu{
738 .name = "ata6285",
739 .llvm_name = "ata6285",
740 .dependencies = &[_]*const Feature {
741 &feature_lpmx,
742 &feature_lpm,
743 &feature_sram,
744 &feature_addsubiw,
745 &feature_movw,
746 &feature_ijmpcall,
747 &feature_break,
748 &feature_spm,
749 &feature_mul,
750 },
751};
752
753pub const cpu_ata6286 = Cpu{
754 .name = "ata6286",
755 .llvm_name = "ata6286",
756 .dependencies = &[_]*const Feature {
757 &feature_lpmx,
758 &feature_lpm,
759 &feature_sram,
760 &feature_addsubiw,
761 &feature_movw,
762 &feature_ijmpcall,
763 &feature_break,
764 &feature_spm,
765 &feature_mul,
766 },
767};
768
769pub const cpu_ata6289 = Cpu{
770 .name = "ata6289",
771 .llvm_name = "ata6289",
772 .dependencies = &[_]*const Feature {
773 &feature_lpmx,
774 &feature_lpm,
775 &feature_sram,
776 &feature_addsubiw,
777 &feature_movw,
778 &feature_ijmpcall,
779 &feature_break,
780 &feature_spm,
781 &feature_mul,
782 },
783};
784
785pub const cpu_atmega103 = Cpu{
786 .name = "atmega103",
787 .llvm_name = "atmega103",
788 .dependencies = &[_]*const Feature {
789 &feature_jmpcall,
790 &feature_lpm,
791 &feature_elpm,
792 &feature_sram,
793 &feature_addsubiw,
794 &feature_ijmpcall,
795 },
796};
797
798pub const cpu_atmega128 = Cpu{
799 .name = "atmega128",
800 .llvm_name = "atmega128",
801 .dependencies = &[_]*const Feature {
802 &feature_lpmx,
803 &feature_jmpcall,
804 &feature_lpm,
805 &feature_elpm,
806 &feature_sram,
807 &feature_addsubiw,
808 &feature_elpmx,
809 &feature_movw,
810 &feature_ijmpcall,
811 &feature_break,
812 &feature_spm,
813 &feature_mul,
814 },
815};
816
817pub const cpu_atmega1280 = Cpu{
818 .name = "atmega1280",
819 .llvm_name = "atmega1280",
820 .dependencies = &[_]*const Feature {
821 &feature_lpmx,
822 &feature_jmpcall,
823 &feature_lpm,
824 &feature_elpm,
825 &feature_sram,
826 &feature_addsubiw,
827 &feature_elpmx,
828 &feature_movw,
829 &feature_ijmpcall,
830 &feature_break,
831 &feature_spm,
832 &feature_mul,
833 },
834};
835
836pub const cpu_atmega1281 = Cpu{
837 .name = "atmega1281",
838 .llvm_name = "atmega1281",
839 .dependencies = &[_]*const Feature {
840 &feature_lpmx,
841 &feature_jmpcall,
842 &feature_lpm,
843 &feature_elpm,
844 &feature_sram,
845 &feature_addsubiw,
846 &feature_elpmx,
847 &feature_movw,
848 &feature_ijmpcall,
849 &feature_break,
850 &feature_spm,
851 &feature_mul,
852 },
853};
854
855pub const cpu_atmega1284 = Cpu{
856 .name = "atmega1284",
857 .llvm_name = "atmega1284",
858 .dependencies = &[_]*const Feature {
859 &feature_lpmx,
860 &feature_jmpcall,
861 &feature_lpm,
862 &feature_elpm,
863 &feature_sram,
864 &feature_addsubiw,
865 &feature_elpmx,
866 &feature_movw,
867 &feature_ijmpcall,
868 &feature_break,
869 &feature_spm,
870 &feature_mul,
871 },
872};
873
874pub const cpu_atmega1284p = Cpu{
875 .name = "atmega1284p",
876 .llvm_name = "atmega1284p",
877 .dependencies = &[_]*const Feature {
878 &feature_lpmx,
879 &feature_jmpcall,
880 &feature_lpm,
881 &feature_elpm,
882 &feature_sram,
883 &feature_addsubiw,
884 &feature_elpmx,
885 &feature_movw,
886 &feature_ijmpcall,
887 &feature_break,
888 &feature_spm,
889 &feature_mul,
890 },
891};
892
893pub const cpu_atmega1284rfr2 = Cpu{
894 .name = "atmega1284rfr2",
895 .llvm_name = "atmega1284rfr2",
896 .dependencies = &[_]*const Feature {
897 &feature_lpmx,
898 &feature_jmpcall,
899 &feature_lpm,
900 &feature_elpm,
901 &feature_sram,
902 &feature_addsubiw,
903 &feature_elpmx,
904 &feature_movw,
905 &feature_ijmpcall,
906 &feature_break,
907 &feature_spm,
908 &feature_mul,
909 },
910};
911
912pub const cpu_atmega128a = Cpu{
913 .name = "atmega128a",
914 .llvm_name = "atmega128a",
915 .dependencies = &[_]*const Feature {
916 &feature_lpmx,
917 &feature_jmpcall,
918 &feature_lpm,
919 &feature_elpm,
920 &feature_sram,
921 &feature_addsubiw,
922 &feature_elpmx,
923 &feature_movw,
924 &feature_ijmpcall,
925 &feature_break,
926 &feature_spm,
927 &feature_mul,
928 },
929};
930
931pub const cpu_atmega128rfa1 = Cpu{
932 .name = "atmega128rfa1",
933 .llvm_name = "atmega128rfa1",
934 .dependencies = &[_]*const Feature {
935 &feature_lpmx,
936 &feature_jmpcall,
937 &feature_lpm,
938 &feature_elpm,
939 &feature_sram,
940 &feature_addsubiw,
941 &feature_elpmx,
942 &feature_movw,
943 &feature_ijmpcall,
944 &feature_break,
945 &feature_spm,
946 &feature_mul,
947 },
948};
949
950pub const cpu_atmega128rfr2 = Cpu{
951 .name = "atmega128rfr2",
952 .llvm_name = "atmega128rfr2",
953 .dependencies = &[_]*const Feature {
954 &feature_lpmx,
955 &feature_jmpcall,
956 &feature_lpm,
957 &feature_elpm,
958 &feature_sram,
959 &feature_addsubiw,
960 &feature_elpmx,
961 &feature_movw,
962 &feature_ijmpcall,
963 &feature_break,
964 &feature_spm,
965 &feature_mul,
966 },
967};
968
969pub const cpu_atmega16 = Cpu{
970 .name = "atmega16",
971 .llvm_name = "atmega16",
972 .dependencies = &[_]*const Feature {
973 &feature_lpmx,
974 &feature_jmpcall,
975 &feature_lpm,
976 &feature_sram,
977 &feature_addsubiw,
978 &feature_movw,
979 &feature_ijmpcall,
980 &feature_break,
981 &feature_spm,
982 &feature_mul,
983 },
984};
985
986pub const cpu_atmega161 = Cpu{
987 .name = "atmega161",
988 .llvm_name = "atmega161",
989 .dependencies = &[_]*const Feature {
990 &feature_jmpcall,
991 &feature_lpm,
992 &feature_sram,
993 &feature_addsubiw,
994 &feature_ijmpcall,
995 &feature_lpmx,
996 &feature_movw,
997 &feature_mul,
998 &feature_spm,
999 },
1000};
1001
1002pub const cpu_atmega162 = Cpu{
1003 .name = "atmega162",
1004 .llvm_name = "atmega162",
1005 .dependencies = &[_]*const Feature {
1006 &feature_lpmx,
1007 &feature_jmpcall,
1008 &feature_lpm,
1009 &feature_sram,
1010 &feature_addsubiw,
1011 &feature_movw,
1012 &feature_ijmpcall,
1013 &feature_break,
1014 &feature_spm,
1015 &feature_mul,
1016 },
1017};
1018
1019pub const cpu_atmega163 = Cpu{
1020 .name = "atmega163",
1021 .llvm_name = "atmega163",
1022 .dependencies = &[_]*const Feature {
1023 &feature_jmpcall,
1024 &feature_lpm,
1025 &feature_sram,
1026 &feature_addsubiw,
1027 &feature_ijmpcall,
1028 &feature_lpmx,
1029 &feature_movw,
1030 &feature_mul,
1031 &feature_spm,
1032 },
1033};
1034
1035pub const cpu_atmega164a = Cpu{
1036 .name = "atmega164a",
1037 .llvm_name = "atmega164a",
1038 .dependencies = &[_]*const Feature {
1039 &feature_lpmx,
1040 &feature_jmpcall,
1041 &feature_lpm,
1042 &feature_sram,
1043 &feature_addsubiw,
1044 &feature_movw,
1045 &feature_ijmpcall,
1046 &feature_break,
1047 &feature_spm,
1048 &feature_mul,
1049 },
1050};
1051
1052pub const cpu_atmega164p = Cpu{
1053 .name = "atmega164p",
1054 .llvm_name = "atmega164p",
1055 .dependencies = &[_]*const Feature {
1056 &feature_lpmx,
1057 &feature_jmpcall,
1058 &feature_lpm,
1059 &feature_sram,
1060 &feature_addsubiw,
1061 &feature_movw,
1062 &feature_ijmpcall,
1063 &feature_break,
1064 &feature_spm,
1065 &feature_mul,
1066 },
1067};
1068
1069pub const cpu_atmega164pa = Cpu{
1070 .name = "atmega164pa",
1071 .llvm_name = "atmega164pa",
1072 .dependencies = &[_]*const Feature {
1073 &feature_lpmx,
1074 &feature_jmpcall,
1075 &feature_lpm,
1076 &feature_sram,
1077 &feature_addsubiw,
1078 &feature_movw,
1079 &feature_ijmpcall,
1080 &feature_break,
1081 &feature_spm,
1082 &feature_mul,
1083 },
1084};
1085
1086pub const cpu_atmega165 = Cpu{
1087 .name = "atmega165",
1088 .llvm_name = "atmega165",
1089 .dependencies = &[_]*const Feature {
1090 &feature_lpmx,
1091 &feature_jmpcall,
1092 &feature_lpm,
1093 &feature_sram,
1094 &feature_addsubiw,
1095 &feature_movw,
1096 &feature_ijmpcall,
1097 &feature_break,
1098 &feature_spm,
1099 &feature_mul,
1100 },
1101};
1102
1103pub const cpu_atmega165a = Cpu{
1104 .name = "atmega165a",
1105 .llvm_name = "atmega165a",
1106 .dependencies = &[_]*const Feature {
1107 &feature_lpmx,
1108 &feature_jmpcall,
1109 &feature_lpm,
1110 &feature_sram,
1111 &feature_addsubiw,
1112 &feature_movw,
1113 &feature_ijmpcall,
1114 &feature_break,
1115 &feature_spm,
1116 &feature_mul,
1117 },
1118};
1119
1120pub const cpu_atmega165p = Cpu{
1121 .name = "atmega165p",
1122 .llvm_name = "atmega165p",
1123 .dependencies = &[_]*const Feature {
1124 &feature_lpmx,
1125 &feature_jmpcall,
1126 &feature_lpm,
1127 &feature_sram,
1128 &feature_addsubiw,
1129 &feature_movw,
1130 &feature_ijmpcall,
1131 &feature_break,
1132 &feature_spm,
1133 &feature_mul,
1134 },
1135};
1136
1137pub const cpu_atmega165pa = Cpu{
1138 .name = "atmega165pa",
1139 .llvm_name = "atmega165pa",
1140 .dependencies = &[_]*const Feature {
1141 &feature_lpmx,
1142 &feature_jmpcall,
1143 &feature_lpm,
1144 &feature_sram,
1145 &feature_addsubiw,
1146 &feature_movw,
1147 &feature_ijmpcall,
1148 &feature_break,
1149 &feature_spm,
1150 &feature_mul,
1151 },
1152};
1153
1154pub const cpu_atmega168 = Cpu{
1155 .name = "atmega168",
1156 .llvm_name = "atmega168",
1157 .dependencies = &[_]*const Feature {
1158 &feature_lpmx,
1159 &feature_jmpcall,
1160 &feature_lpm,
1161 &feature_sram,
1162 &feature_addsubiw,
1163 &feature_movw,
1164 &feature_ijmpcall,
1165 &feature_break,
1166 &feature_spm,
1167 &feature_mul,
1168 },
1169};
1170
1171pub const cpu_atmega168a = Cpu{
1172 .name = "atmega168a",
1173 .llvm_name = "atmega168a",
1174 .dependencies = &[_]*const Feature {
1175 &feature_lpmx,
1176 &feature_jmpcall,
1177 &feature_lpm,
1178 &feature_sram,
1179 &feature_addsubiw,
1180 &feature_movw,
1181 &feature_ijmpcall,
1182 &feature_break,
1183 &feature_spm,
1184 &feature_mul,
1185 },
1186};
1187
1188pub const cpu_atmega168p = Cpu{
1189 .name = "atmega168p",
1190 .llvm_name = "atmega168p",
1191 .dependencies = &[_]*const Feature {
1192 &feature_lpmx,
1193 &feature_jmpcall,
1194 &feature_lpm,
1195 &feature_sram,
1196 &feature_addsubiw,
1197 &feature_movw,
1198 &feature_ijmpcall,
1199 &feature_break,
1200 &feature_spm,
1201 &feature_mul,
1202 },
1203};
1204
1205pub const cpu_atmega168pa = Cpu{
1206 .name = "atmega168pa",
1207 .llvm_name = "atmega168pa",
1208 .dependencies = &[_]*const Feature {
1209 &feature_lpmx,
1210 &feature_jmpcall,
1211 &feature_lpm,
1212 &feature_sram,
1213 &feature_addsubiw,
1214 &feature_movw,
1215 &feature_ijmpcall,
1216 &feature_break,
1217 &feature_spm,
1218 &feature_mul,
1219 },
1220};
1221
1222pub const cpu_atmega169 = Cpu{
1223 .name = "atmega169",
1224 .llvm_name = "atmega169",
1225 .dependencies = &[_]*const Feature {
1226 &feature_lpmx,
1227 &feature_jmpcall,
1228 &feature_lpm,
1229 &feature_sram,
1230 &feature_addsubiw,
1231 &feature_movw,
1232 &feature_ijmpcall,
1233 &feature_break,
1234 &feature_spm,
1235 &feature_mul,
1236 },
1237};
1238
1239pub const cpu_atmega169a = Cpu{
1240 .name = "atmega169a",
1241 .llvm_name = "atmega169a",
1242 .dependencies = &[_]*const Feature {
1243 &feature_lpmx,
1244 &feature_jmpcall,
1245 &feature_lpm,
1246 &feature_sram,
1247 &feature_addsubiw,
1248 &feature_movw,
1249 &feature_ijmpcall,
1250 &feature_break,
1251 &feature_spm,
1252 &feature_mul,
1253 },
1254};
1255
1256pub const cpu_atmega169p = Cpu{
1257 .name = "atmega169p",
1258 .llvm_name = "atmega169p",
1259 .dependencies = &[_]*const Feature {
1260 &feature_lpmx,
1261 &feature_jmpcall,
1262 &feature_lpm,
1263 &feature_sram,
1264 &feature_addsubiw,
1265 &feature_movw,
1266 &feature_ijmpcall,
1267 &feature_break,
1268 &feature_spm,
1269 &feature_mul,
1270 },
1271};
1272
1273pub const cpu_atmega169pa = Cpu{
1274 .name = "atmega169pa",
1275 .llvm_name = "atmega169pa",
1276 .dependencies = &[_]*const Feature {
1277 &feature_lpmx,
1278 &feature_jmpcall,
1279 &feature_lpm,
1280 &feature_sram,
1281 &feature_addsubiw,
1282 &feature_movw,
1283 &feature_ijmpcall,
1284 &feature_break,
1285 &feature_spm,
1286 &feature_mul,
1287 },
1288};
1289
1290pub const cpu_atmega16a = Cpu{
1291 .name = "atmega16a",
1292 .llvm_name = "atmega16a",
1293 .dependencies = &[_]*const Feature {
1294 &feature_lpmx,
1295 &feature_jmpcall,
1296 &feature_lpm,
1297 &feature_sram,
1298 &feature_addsubiw,
1299 &feature_movw,
1300 &feature_ijmpcall,
1301 &feature_break,
1302 &feature_spm,
1303 &feature_mul,
1304 },
1305};
1306
1307pub const cpu_atmega16hva = Cpu{
1308 .name = "atmega16hva",
1309 .llvm_name = "atmega16hva",
1310 .dependencies = &[_]*const Feature {
1311 &feature_lpmx,
1312 &feature_jmpcall,
1313 &feature_lpm,
1314 &feature_sram,
1315 &feature_addsubiw,
1316 &feature_movw,
1317 &feature_ijmpcall,
1318 &feature_break,
1319 &feature_spm,
1320 &feature_mul,
1321 },
1322};
1323
1324pub const cpu_atmega16hva2 = Cpu{
1325 .name = "atmega16hva2",
1326 .llvm_name = "atmega16hva2",
1327 .dependencies = &[_]*const Feature {
1328 &feature_lpmx,
1329 &feature_jmpcall,
1330 &feature_lpm,
1331 &feature_sram,
1332 &feature_addsubiw,
1333 &feature_movw,
1334 &feature_ijmpcall,
1335 &feature_break,
1336 &feature_spm,
1337 &feature_mul,
1338 },
1339};
1340
1341pub const cpu_atmega16hvb = Cpu{
1342 .name = "atmega16hvb",
1343 .llvm_name = "atmega16hvb",
1344 .dependencies = &[_]*const Feature {
1345 &feature_lpmx,
1346 &feature_jmpcall,
1347 &feature_lpm,
1348 &feature_sram,
1349 &feature_addsubiw,
1350 &feature_movw,
1351 &feature_ijmpcall,
1352 &feature_break,
1353 &feature_spm,
1354 &feature_mul,
1355 },
1356};
1357
1358pub const cpu_atmega16hvbrevb = Cpu{
1359 .name = "atmega16hvbrevb",
1360 .llvm_name = "atmega16hvbrevb",
1361 .dependencies = &[_]*const Feature {
1362 &feature_lpmx,
1363 &feature_jmpcall,
1364 &feature_lpm,
1365 &feature_sram,
1366 &feature_addsubiw,
1367 &feature_movw,
1368 &feature_ijmpcall,
1369 &feature_break,
1370 &feature_spm,
1371 &feature_mul,
1372 },
1373};
1374
1375pub const cpu_atmega16m1 = Cpu{
1376 .name = "atmega16m1",
1377 .llvm_name = "atmega16m1",
1378 .dependencies = &[_]*const Feature {
1379 &feature_lpmx,
1380 &feature_jmpcall,
1381 &feature_lpm,
1382 &feature_sram,
1383 &feature_addsubiw,
1384 &feature_movw,
1385 &feature_ijmpcall,
1386 &feature_break,
1387 &feature_spm,
1388 &feature_mul,
1389 },
1390};
1391
1392pub const cpu_atmega16u2 = Cpu{
1393 .name = "atmega16u2",
1394 .llvm_name = "atmega16u2",
1395 .dependencies = &[_]*const Feature {
1396 &feature_lpmx,
1397 &feature_jmpcall,
1398 &feature_lpm,
1399 &feature_sram,
1400 &feature_addsubiw,
1401 &feature_movw,
1402 &feature_ijmpcall,
1403 &feature_break,
1404 &feature_spm,
1405 },
1406};
1407
1408pub const cpu_atmega16u4 = Cpu{
1409 .name = "atmega16u4",
1410 .llvm_name = "atmega16u4",
1411 .dependencies = &[_]*const Feature {
1412 &feature_lpmx,
1413 &feature_jmpcall,
1414 &feature_lpm,
1415 &feature_sram,
1416 &feature_addsubiw,
1417 &feature_movw,
1418 &feature_ijmpcall,
1419 &feature_break,
1420 &feature_spm,
1421 &feature_mul,
1422 },
1423};
1424
1425pub const cpu_atmega2560 = Cpu{
1426 .name = "atmega2560",
1427 .llvm_name = "atmega2560",
1428 .dependencies = &[_]*const Feature {
1429 &feature_lpmx,
1430 &feature_jmpcall,
1431 &feature_lpm,
1432 &feature_elpm,
1433 &feature_sram,
1434 &feature_addsubiw,
1435 &feature_elpmx,
1436 &feature_movw,
1437 &feature_ijmpcall,
1438 &feature_break,
1439 &feature_spm,
1440 &feature_mul,
1441 },
1442};
1443
1444pub const cpu_atmega2561 = Cpu{
1445 .name = "atmega2561",
1446 .llvm_name = "atmega2561",
1447 .dependencies = &[_]*const Feature {
1448 &feature_lpmx,
1449 &feature_jmpcall,
1450 &feature_lpm,
1451 &feature_elpm,
1452 &feature_sram,
1453 &feature_addsubiw,
1454 &feature_elpmx,
1455 &feature_movw,
1456 &feature_ijmpcall,
1457 &feature_break,
1458 &feature_spm,
1459 &feature_mul,
1460 },
1461};
1462
1463pub const cpu_atmega2564rfr2 = Cpu{
1464 .name = "atmega2564rfr2",
1465 .llvm_name = "atmega2564rfr2",
1466 .dependencies = &[_]*const Feature {
1467 &feature_lpmx,
1468 &feature_jmpcall,
1469 &feature_lpm,
1470 &feature_elpm,
1471 &feature_sram,
1472 &feature_addsubiw,
1473 &feature_elpmx,
1474 &feature_movw,
1475 &feature_ijmpcall,
1476 &feature_break,
1477 &feature_spm,
1478 &feature_mul,
1479 },
1480};
1481
1482pub const cpu_atmega256rfr2 = Cpu{
1483 .name = "atmega256rfr2",
1484 .llvm_name = "atmega256rfr2",
1485 .dependencies = &[_]*const Feature {
1486 &feature_lpmx,
1487 &feature_jmpcall,
1488 &feature_lpm,
1489 &feature_elpm,
1490 &feature_sram,
1491 &feature_addsubiw,
1492 &feature_elpmx,
1493 &feature_movw,
1494 &feature_ijmpcall,
1495 &feature_break,
1496 &feature_spm,
1497 &feature_mul,
1498 },
1499};
1500
1501pub const cpu_atmega32 = Cpu{
1502 .name = "atmega32",
1503 .llvm_name = "atmega32",
1504 .dependencies = &[_]*const Feature {
1505 &feature_lpmx,
1506 &feature_jmpcall,
1507 &feature_lpm,
1508 &feature_sram,
1509 &feature_addsubiw,
1510 &feature_movw,
1511 &feature_ijmpcall,
1512 &feature_break,
1513 &feature_spm,
1514 &feature_mul,
1515 },
1516};
1517
1518pub const cpu_atmega323 = Cpu{
1519 .name = "atmega323",
1520 .llvm_name = "atmega323",
1521 .dependencies = &[_]*const Feature {
1522 &feature_lpmx,
1523 &feature_jmpcall,
1524 &feature_lpm,
1525 &feature_sram,
1526 &feature_addsubiw,
1527 &feature_movw,
1528 &feature_ijmpcall,
1529 &feature_break,
1530 &feature_spm,
1531 &feature_mul,
1532 },
1533};
1534
1535pub const cpu_atmega324a = Cpu{
1536 .name = "atmega324a",
1537 .llvm_name = "atmega324a",
1538 .dependencies = &[_]*const Feature {
1539 &feature_lpmx,
1540 &feature_jmpcall,
1541 &feature_lpm,
1542 &feature_sram,
1543 &feature_addsubiw,
1544 &feature_movw,
1545 &feature_ijmpcall,
1546 &feature_break,
1547 &feature_spm,
1548 &feature_mul,
1549 },
1550};
1551
1552pub const cpu_atmega324p = Cpu{
1553 .name = "atmega324p",
1554 .llvm_name = "atmega324p",
1555 .dependencies = &[_]*const Feature {
1556 &feature_lpmx,
1557 &feature_jmpcall,
1558 &feature_lpm,
1559 &feature_sram,
1560 &feature_addsubiw,
1561 &feature_movw,
1562 &feature_ijmpcall,
1563 &feature_break,
1564 &feature_spm,
1565 &feature_mul,
1566 },
1567};
1568
1569pub const cpu_atmega324pa = Cpu{
1570 .name = "atmega324pa",
1571 .llvm_name = "atmega324pa",
1572 .dependencies = &[_]*const Feature {
1573 &feature_lpmx,
1574 &feature_jmpcall,
1575 &feature_lpm,
1576 &feature_sram,
1577 &feature_addsubiw,
1578 &feature_movw,
1579 &feature_ijmpcall,
1580 &feature_break,
1581 &feature_spm,
1582 &feature_mul,
1583 },
1584};
1585
1586pub const cpu_atmega325 = Cpu{
1587 .name = "atmega325",
1588 .llvm_name = "atmega325",
1589 .dependencies = &[_]*const Feature {
1590 &feature_lpmx,
1591 &feature_jmpcall,
1592 &feature_lpm,
1593 &feature_sram,
1594 &feature_addsubiw,
1595 &feature_movw,
1596 &feature_ijmpcall,
1597 &feature_break,
1598 &feature_spm,
1599 &feature_mul,
1600 },
1601};
1602
1603pub const cpu_atmega3250 = Cpu{
1604 .name = "atmega3250",
1605 .llvm_name = "atmega3250",
1606 .dependencies = &[_]*const Feature {
1607 &feature_lpmx,
1608 &feature_jmpcall,
1609 &feature_lpm,
1610 &feature_sram,
1611 &feature_addsubiw,
1612 &feature_movw,
1613 &feature_ijmpcall,
1614 &feature_break,
1615 &feature_spm,
1616 &feature_mul,
1617 },
1618};
1619
1620pub const cpu_atmega3250a = Cpu{
1621 .name = "atmega3250a",
1622 .llvm_name = "atmega3250a",
1623 .dependencies = &[_]*const Feature {
1624 &feature_lpmx,
1625 &feature_jmpcall,
1626 &feature_lpm,
1627 &feature_sram,
1628 &feature_addsubiw,
1629 &feature_movw,
1630 &feature_ijmpcall,
1631 &feature_break,
1632 &feature_spm,
1633 &feature_mul,
1634 },
1635};
1636
1637pub const cpu_atmega3250p = Cpu{
1638 .name = "atmega3250p",
1639 .llvm_name = "atmega3250p",
1640 .dependencies = &[_]*const Feature {
1641 &feature_lpmx,
1642 &feature_jmpcall,
1643 &feature_lpm,
1644 &feature_sram,
1645 &feature_addsubiw,
1646 &feature_movw,
1647 &feature_ijmpcall,
1648 &feature_break,
1649 &feature_spm,
1650 &feature_mul,
1651 },
1652};
1653
1654pub const cpu_atmega3250pa = Cpu{
1655 .name = "atmega3250pa",
1656 .llvm_name = "atmega3250pa",
1657 .dependencies = &[_]*const Feature {
1658 &feature_lpmx,
1659 &feature_jmpcall,
1660 &feature_lpm,
1661 &feature_sram,
1662 &feature_addsubiw,
1663 &feature_movw,
1664 &feature_ijmpcall,
1665 &feature_break,
1666 &feature_spm,
1667 &feature_mul,
1668 },
1669};
1670
1671pub const cpu_atmega325a = Cpu{
1672 .name = "atmega325a",
1673 .llvm_name = "atmega325a",
1674 .dependencies = &[_]*const Feature {
1675 &feature_lpmx,
1676 &feature_jmpcall,
1677 &feature_lpm,
1678 &feature_sram,
1679 &feature_addsubiw,
1680 &feature_movw,
1681 &feature_ijmpcall,
1682 &feature_break,
1683 &feature_spm,
1684 &feature_mul,
1685 },
1686};
1687
1688pub const cpu_atmega325p = Cpu{
1689 .name = "atmega325p",
1690 .llvm_name = "atmega325p",
1691 .dependencies = &[_]*const Feature {
1692 &feature_lpmx,
1693 &feature_jmpcall,
1694 &feature_lpm,
1695 &feature_sram,
1696 &feature_addsubiw,
1697 &feature_movw,
1698 &feature_ijmpcall,
1699 &feature_break,
1700 &feature_spm,
1701 &feature_mul,
1702 },
1703};
1704
1705pub const cpu_atmega325pa = Cpu{
1706 .name = "atmega325pa",
1707 .llvm_name = "atmega325pa",
1708 .dependencies = &[_]*const Feature {
1709 &feature_lpmx,
1710 &feature_jmpcall,
1711 &feature_lpm,
1712 &feature_sram,
1713 &feature_addsubiw,
1714 &feature_movw,
1715 &feature_ijmpcall,
1716 &feature_break,
1717 &feature_spm,
1718 &feature_mul,
1719 },
1720};
1721
1722pub const cpu_atmega328 = Cpu{
1723 .name = "atmega328",
1724 .llvm_name = "atmega328",
1725 .dependencies = &[_]*const Feature {
1726 &feature_lpmx,
1727 &feature_jmpcall,
1728 &feature_lpm,
1729 &feature_sram,
1730 &feature_addsubiw,
1731 &feature_movw,
1732 &feature_ijmpcall,
1733 &feature_break,
1734 &feature_spm,
1735 &feature_mul,
1736 },
1737};
1738
1739pub const cpu_atmega328p = Cpu{
1740 .name = "atmega328p",
1741 .llvm_name = "atmega328p",
1742 .dependencies = &[_]*const Feature {
1743 &feature_lpmx,
1744 &feature_jmpcall,
1745 &feature_lpm,
1746 &feature_sram,
1747 &feature_addsubiw,
1748 &feature_movw,
1749 &feature_ijmpcall,
1750 &feature_break,
1751 &feature_spm,
1752 &feature_mul,
1753 },
1754};
1755
1756pub const cpu_atmega329 = Cpu{
1757 .name = "atmega329",
1758 .llvm_name = "atmega329",
1759 .dependencies = &[_]*const Feature {
1760 &feature_lpmx,
1761 &feature_jmpcall,
1762 &feature_lpm,
1763 &feature_sram,
1764 &feature_addsubiw,
1765 &feature_movw,
1766 &feature_ijmpcall,
1767 &feature_break,
1768 &feature_spm,
1769 &feature_mul,
1770 },
1771};
1772
1773pub const cpu_atmega3290 = Cpu{
1774 .name = "atmega3290",
1775 .llvm_name = "atmega3290",
1776 .dependencies = &[_]*const Feature {
1777 &feature_lpmx,
1778 &feature_jmpcall,
1779 &feature_lpm,
1780 &feature_sram,
1781 &feature_addsubiw,
1782 &feature_movw,
1783 &feature_ijmpcall,
1784 &feature_break,
1785 &feature_spm,
1786 &feature_mul,
1787 },
1788};
1789
1790pub const cpu_atmega3290a = Cpu{
1791 .name = "atmega3290a",
1792 .llvm_name = "atmega3290a",
1793 .dependencies = &[_]*const Feature {
1794 &feature_lpmx,
1795 &feature_jmpcall,
1796 &feature_lpm,
1797 &feature_sram,
1798 &feature_addsubiw,
1799 &feature_movw,
1800 &feature_ijmpcall,
1801 &feature_break,
1802 &feature_spm,
1803 &feature_mul,
1804 },
1805};
1806
1807pub const cpu_atmega3290p = Cpu{
1808 .name = "atmega3290p",
1809 .llvm_name = "atmega3290p",
1810 .dependencies = &[_]*const Feature {
1811 &feature_lpmx,
1812 &feature_jmpcall,
1813 &feature_lpm,
1814 &feature_sram,
1815 &feature_addsubiw,
1816 &feature_movw,
1817 &feature_ijmpcall,
1818 &feature_break,
1819 &feature_spm,
1820 &feature_mul,
1821 },
1822};
1823
1824pub const cpu_atmega3290pa = Cpu{
1825 .name = "atmega3290pa",
1826 .llvm_name = "atmega3290pa",
1827 .dependencies = &[_]*const Feature {
1828 &feature_lpmx,
1829 &feature_jmpcall,
1830 &feature_lpm,
1831 &feature_sram,
1832 &feature_addsubiw,
1833 &feature_movw,
1834 &feature_ijmpcall,
1835 &feature_break,
1836 &feature_spm,
1837 &feature_mul,
1838 },
1839};
1840
1841pub const cpu_atmega329a = Cpu{
1842 .name = "atmega329a",
1843 .llvm_name = "atmega329a",
1844 .dependencies = &[_]*const Feature {
1845 &feature_lpmx,
1846 &feature_jmpcall,
1847 &feature_lpm,
1848 &feature_sram,
1849 &feature_addsubiw,
1850 &feature_movw,
1851 &feature_ijmpcall,
1852 &feature_break,
1853 &feature_spm,
1854 &feature_mul,
1855 },
1856};
1857
1858pub const cpu_atmega329p = Cpu{
1859 .name = "atmega329p",
1860 .llvm_name = "atmega329p",
1861 .dependencies = &[_]*const Feature {
1862 &feature_lpmx,
1863 &feature_jmpcall,
1864 &feature_lpm,
1865 &feature_sram,
1866 &feature_addsubiw,
1867 &feature_movw,
1868 &feature_ijmpcall,
1869 &feature_break,
1870 &feature_spm,
1871 &feature_mul,
1872 },
1873};
1874
1875pub const cpu_atmega329pa = Cpu{
1876 .name = "atmega329pa",
1877 .llvm_name = "atmega329pa",
1878 .dependencies = &[_]*const Feature {
1879 &feature_lpmx,
1880 &feature_jmpcall,
1881 &feature_lpm,
1882 &feature_sram,
1883 &feature_addsubiw,
1884 &feature_movw,
1885 &feature_ijmpcall,
1886 &feature_break,
1887 &feature_spm,
1888 &feature_mul,
1889 },
1890};
1891
1892pub const cpu_atmega32a = Cpu{
1893 .name = "atmega32a",
1894 .llvm_name = "atmega32a",
1895 .dependencies = &[_]*const Feature {
1896 &feature_lpmx,
1897 &feature_jmpcall,
1898 &feature_lpm,
1899 &feature_sram,
1900 &feature_addsubiw,
1901 &feature_movw,
1902 &feature_ijmpcall,
1903 &feature_break,
1904 &feature_spm,
1905 &feature_mul,
1906 },
1907};
1908
1909pub const cpu_atmega32c1 = Cpu{
1910 .name = "atmega32c1",
1911 .llvm_name = "atmega32c1",
1912 .dependencies = &[_]*const Feature {
1913 &feature_lpmx,
1914 &feature_jmpcall,
1915 &feature_lpm,
1916 &feature_sram,
1917 &feature_addsubiw,
1918 &feature_movw,
1919 &feature_ijmpcall,
1920 &feature_break,
1921 &feature_spm,
1922 &feature_mul,
1923 },
1924};
1925
1926pub const cpu_atmega32hvb = Cpu{
1927 .name = "atmega32hvb",
1928 .llvm_name = "atmega32hvb",
1929 .dependencies = &[_]*const Feature {
1930 &feature_lpmx,
1931 &feature_jmpcall,
1932 &feature_lpm,
1933 &feature_sram,
1934 &feature_addsubiw,
1935 &feature_movw,
1936 &feature_ijmpcall,
1937 &feature_break,
1938 &feature_spm,
1939 &feature_mul,
1940 },
1941};
1942
1943pub const cpu_atmega32hvbrevb = Cpu{
1944 .name = "atmega32hvbrevb",
1945 .llvm_name = "atmega32hvbrevb",
1946 .dependencies = &[_]*const Feature {
1947 &feature_lpmx,
1948 &feature_jmpcall,
1949 &feature_lpm,
1950 &feature_sram,
1951 &feature_addsubiw,
1952 &feature_movw,
1953 &feature_ijmpcall,
1954 &feature_break,
1955 &feature_spm,
1956 &feature_mul,
1957 },
1958};
1959
1960pub const cpu_atmega32m1 = Cpu{
1961 .name = "atmega32m1",
1962 .llvm_name = "atmega32m1",
1963 .dependencies = &[_]*const Feature {
1964 &feature_lpmx,
1965 &feature_jmpcall,
1966 &feature_lpm,
1967 &feature_sram,
1968 &feature_addsubiw,
1969 &feature_movw,
1970 &feature_ijmpcall,
1971 &feature_break,
1972 &feature_spm,
1973 &feature_mul,
1974 },
1975};
1976
1977pub const cpu_atmega32u2 = Cpu{
1978 .name = "atmega32u2",
1979 .llvm_name = "atmega32u2",
1980 .dependencies = &[_]*const Feature {
1981 &feature_lpmx,
1982 &feature_jmpcall,
1983 &feature_lpm,
1984 &feature_sram,
1985 &feature_addsubiw,
1986 &feature_movw,
1987 &feature_ijmpcall,
1988 &feature_break,
1989 &feature_spm,
1990 },
1991};
1992
1993pub const cpu_atmega32u4 = Cpu{
1994 .name = "atmega32u4",
1995 .llvm_name = "atmega32u4",
1996 .dependencies = &[_]*const Feature {
1997 &feature_lpmx,
1998 &feature_jmpcall,
1999 &feature_lpm,
2000 &feature_sram,
2001 &feature_addsubiw,
2002 &feature_movw,
2003 &feature_ijmpcall,
2004 &feature_break,
2005 &feature_spm,
2006 &feature_mul,
2007 },
2008};
2009
2010pub const cpu_atmega32u6 = Cpu{
2011 .name = "atmega32u6",
2012 .llvm_name = "atmega32u6",
2013 .dependencies = &[_]*const Feature {
2014 &feature_lpmx,
2015 &feature_jmpcall,
2016 &feature_lpm,
2017 &feature_sram,
2018 &feature_addsubiw,
2019 &feature_movw,
2020 &feature_ijmpcall,
2021 &feature_break,
2022 &feature_spm,
2023 &feature_mul,
2024 },
2025};
2026
2027pub const cpu_atmega406 = Cpu{
2028 .name = "atmega406",
2029 .llvm_name = "atmega406",
2030 .dependencies = &[_]*const Feature {
2031 &feature_lpmx,
2032 &feature_jmpcall,
2033 &feature_lpm,
2034 &feature_sram,
2035 &feature_addsubiw,
2036 &feature_movw,
2037 &feature_ijmpcall,
2038 &feature_break,
2039 &feature_spm,
2040 &feature_mul,
2041 },
2042};
2043
2044pub const cpu_atmega48 = Cpu{
2045 .name = "atmega48",
2046 .llvm_name = "atmega48",
2047 .dependencies = &[_]*const Feature {
2048 &feature_lpmx,
2049 &feature_lpm,
2050 &feature_sram,
2051 &feature_addsubiw,
2052 &feature_movw,
2053 &feature_ijmpcall,
2054 &feature_break,
2055 &feature_spm,
2056 &feature_mul,
2057 },
2058};
2059
2060pub const cpu_atmega48a = Cpu{
2061 .name = "atmega48a",
2062 .llvm_name = "atmega48a",
2063 .dependencies = &[_]*const Feature {
2064 &feature_lpmx,
2065 &feature_lpm,
2066 &feature_sram,
2067 &feature_addsubiw,
2068 &feature_movw,
2069 &feature_ijmpcall,
2070 &feature_break,
2071 &feature_spm,
2072 &feature_mul,
2073 },
2074};
2075
2076pub const cpu_atmega48p = Cpu{
2077 .name = "atmega48p",
2078 .llvm_name = "atmega48p",
2079 .dependencies = &[_]*const Feature {
2080 &feature_lpmx,
2081 &feature_lpm,
2082 &feature_sram,
2083 &feature_addsubiw,
2084 &feature_movw,
2085 &feature_ijmpcall,
2086 &feature_break,
2087 &feature_spm,
2088 &feature_mul,
2089 },
2090};
2091
2092pub const cpu_atmega48pa = Cpu{
2093 .name = "atmega48pa",
2094 .llvm_name = "atmega48pa",
2095 .dependencies = &[_]*const Feature {
2096 &feature_lpmx,
2097 &feature_lpm,
2098 &feature_sram,
2099 &feature_addsubiw,
2100 &feature_movw,
2101 &feature_ijmpcall,
2102 &feature_break,
2103 &feature_spm,
2104 &feature_mul,
2105 },
2106};
2107
2108pub const cpu_atmega64 = Cpu{
2109 .name = "atmega64",
2110 .llvm_name = "atmega64",
2111 .dependencies = &[_]*const Feature {
2112 &feature_lpmx,
2113 &feature_jmpcall,
2114 &feature_lpm,
2115 &feature_sram,
2116 &feature_addsubiw,
2117 &feature_movw,
2118 &feature_ijmpcall,
2119 &feature_break,
2120 &feature_spm,
2121 &feature_mul,
2122 },
2123};
2124
2125pub const cpu_atmega640 = Cpu{
2126 .name = "atmega640",
2127 .llvm_name = "atmega640",
2128 .dependencies = &[_]*const Feature {
2129 &feature_lpmx,
2130 &feature_jmpcall,
2131 &feature_lpm,
2132 &feature_sram,
2133 &feature_addsubiw,
2134 &feature_movw,
2135 &feature_ijmpcall,
2136 &feature_break,
2137 &feature_spm,
2138 &feature_mul,
2139 },
2140};
2141
2142pub const cpu_atmega644 = Cpu{
2143 .name = "atmega644",
2144 .llvm_name = "atmega644",
2145 .dependencies = &[_]*const Feature {
2146 &feature_lpmx,
2147 &feature_jmpcall,
2148 &feature_lpm,
2149 &feature_sram,
2150 &feature_addsubiw,
2151 &feature_movw,
2152 &feature_ijmpcall,
2153 &feature_break,
2154 &feature_spm,
2155 &feature_mul,
2156 },
2157};
2158
2159pub const cpu_atmega644a = Cpu{
2160 .name = "atmega644a",
2161 .llvm_name = "atmega644a",
2162 .dependencies = &[_]*const Feature {
2163 &feature_lpmx,
2164 &feature_jmpcall,
2165 &feature_lpm,
2166 &feature_sram,
2167 &feature_addsubiw,
2168 &feature_movw,
2169 &feature_ijmpcall,
2170 &feature_break,
2171 &feature_spm,
2172 &feature_mul,
2173 },
2174};
2175
2176pub const cpu_atmega644p = Cpu{
2177 .name = "atmega644p",
2178 .llvm_name = "atmega644p",
2179 .dependencies = &[_]*const Feature {
2180 &feature_lpmx,
2181 &feature_jmpcall,
2182 &feature_lpm,
2183 &feature_sram,
2184 &feature_addsubiw,
2185 &feature_movw,
2186 &feature_ijmpcall,
2187 &feature_break,
2188 &feature_spm,
2189 &feature_mul,
2190 },
2191};
2192
2193pub const cpu_atmega644pa = Cpu{
2194 .name = "atmega644pa",
2195 .llvm_name = "atmega644pa",
2196 .dependencies = &[_]*const Feature {
2197 &feature_lpmx,
2198 &feature_jmpcall,
2199 &feature_lpm,
2200 &feature_sram,
2201 &feature_addsubiw,
2202 &feature_movw,
2203 &feature_ijmpcall,
2204 &feature_break,
2205 &feature_spm,
2206 &feature_mul,
2207 },
2208};
2209
2210pub const cpu_atmega644rfr2 = Cpu{
2211 .name = "atmega644rfr2",
2212 .llvm_name = "atmega644rfr2",
2213 .dependencies = &[_]*const Feature {
2214 &feature_lpmx,
2215 &feature_jmpcall,
2216 &feature_lpm,
2217 &feature_sram,
2218 &feature_addsubiw,
2219 &feature_movw,
2220 &feature_ijmpcall,
2221 &feature_break,
2222 &feature_spm,
2223 &feature_mul,
2224 },
2225};
2226
2227pub const cpu_atmega645 = Cpu{
2228 .name = "atmega645",
2229 .llvm_name = "atmega645",
2230 .dependencies = &[_]*const Feature {
2231 &feature_lpmx,
2232 &feature_jmpcall,
2233 &feature_lpm,
2234 &feature_sram,
2235 &feature_addsubiw,
2236 &feature_movw,
2237 &feature_ijmpcall,
2238 &feature_break,
2239 &feature_spm,
2240 &feature_mul,
2241 },
2242};
2243
2244pub const cpu_atmega6450 = Cpu{
2245 .name = "atmega6450",
2246 .llvm_name = "atmega6450",
2247 .dependencies = &[_]*const Feature {
2248 &feature_lpmx,
2249 &feature_jmpcall,
2250 &feature_lpm,
2251 &feature_sram,
2252 &feature_addsubiw,
2253 &feature_movw,
2254 &feature_ijmpcall,
2255 &feature_break,
2256 &feature_spm,
2257 &feature_mul,
2258 },
2259};
2260
2261pub const cpu_atmega6450a = Cpu{
2262 .name = "atmega6450a",
2263 .llvm_name = "atmega6450a",
2264 .dependencies = &[_]*const Feature {
2265 &feature_lpmx,
2266 &feature_jmpcall,
2267 &feature_lpm,
2268 &feature_sram,
2269 &feature_addsubiw,
2270 &feature_movw,
2271 &feature_ijmpcall,
2272 &feature_break,
2273 &feature_spm,
2274 &feature_mul,
2275 },
2276};
2277
2278pub const cpu_atmega6450p = Cpu{
2279 .name = "atmega6450p",
2280 .llvm_name = "atmega6450p",
2281 .dependencies = &[_]*const Feature {
2282 &feature_lpmx,
2283 &feature_jmpcall,
2284 &feature_lpm,
2285 &feature_sram,
2286 &feature_addsubiw,
2287 &feature_movw,
2288 &feature_ijmpcall,
2289 &feature_break,
2290 &feature_spm,
2291 &feature_mul,
2292 },
2293};
2294
2295pub const cpu_atmega645a = Cpu{
2296 .name = "atmega645a",
2297 .llvm_name = "atmega645a",
2298 .dependencies = &[_]*const Feature {
2299 &feature_lpmx,
2300 &feature_jmpcall,
2301 &feature_lpm,
2302 &feature_sram,
2303 &feature_addsubiw,
2304 &feature_movw,
2305 &feature_ijmpcall,
2306 &feature_break,
2307 &feature_spm,
2308 &feature_mul,
2309 },
2310};
2311
2312pub const cpu_atmega645p = Cpu{
2313 .name = "atmega645p",
2314 .llvm_name = "atmega645p",
2315 .dependencies = &[_]*const Feature {
2316 &feature_lpmx,
2317 &feature_jmpcall,
2318 &feature_lpm,
2319 &feature_sram,
2320 &feature_addsubiw,
2321 &feature_movw,
2322 &feature_ijmpcall,
2323 &feature_break,
2324 &feature_spm,
2325 &feature_mul,
2326 },
2327};
2328
2329pub const cpu_atmega649 = Cpu{
2330 .name = "atmega649",
2331 .llvm_name = "atmega649",
2332 .dependencies = &[_]*const Feature {
2333 &feature_lpmx,
2334 &feature_jmpcall,
2335 &feature_lpm,
2336 &feature_sram,
2337 &feature_addsubiw,
2338 &feature_movw,
2339 &feature_ijmpcall,
2340 &feature_break,
2341 &feature_spm,
2342 &feature_mul,
2343 },
2344};
2345
2346pub const cpu_atmega6490 = Cpu{
2347 .name = "atmega6490",
2348 .llvm_name = "atmega6490",
2349 .dependencies = &[_]*const Feature {
2350 &feature_lpmx,
2351 &feature_jmpcall,
2352 &feature_lpm,
2353 &feature_sram,
2354 &feature_addsubiw,
2355 &feature_movw,
2356 &feature_ijmpcall,
2357 &feature_break,
2358 &feature_spm,
2359 &feature_mul,
2360 },
2361};
2362
2363pub const cpu_atmega6490a = Cpu{
2364 .name = "atmega6490a",
2365 .llvm_name = "atmega6490a",
2366 .dependencies = &[_]*const Feature {
2367 &feature_lpmx,
2368 &feature_jmpcall,
2369 &feature_lpm,
2370 &feature_sram,
2371 &feature_addsubiw,
2372 &feature_movw,
2373 &feature_ijmpcall,
2374 &feature_break,
2375 &feature_spm,
2376 &feature_mul,
2377 },
2378};
2379
2380pub const cpu_atmega6490p = Cpu{
2381 .name = "atmega6490p",
2382 .llvm_name = "atmega6490p",
2383 .dependencies = &[_]*const Feature {
2384 &feature_lpmx,
2385 &feature_jmpcall,
2386 &feature_lpm,
2387 &feature_sram,
2388 &feature_addsubiw,
2389 &feature_movw,
2390 &feature_ijmpcall,
2391 &feature_break,
2392 &feature_spm,
2393 &feature_mul,
2394 },
2395};
2396
2397pub const cpu_atmega649a = Cpu{
2398 .name = "atmega649a",
2399 .llvm_name = "atmega649a",
2400 .dependencies = &[_]*const Feature {
2401 &feature_lpmx,
2402 &feature_jmpcall,
2403 &feature_lpm,
2404 &feature_sram,
2405 &feature_addsubiw,
2406 &feature_movw,
2407 &feature_ijmpcall,
2408 &feature_break,
2409 &feature_spm,
2410 &feature_mul,
2411 },
2412};
2413
2414pub const cpu_atmega649p = Cpu{
2415 .name = "atmega649p",
2416 .llvm_name = "atmega649p",
2417 .dependencies = &[_]*const Feature {
2418 &feature_lpmx,
2419 &feature_jmpcall,
2420 &feature_lpm,
2421 &feature_sram,
2422 &feature_addsubiw,
2423 &feature_movw,
2424 &feature_ijmpcall,
2425 &feature_break,
2426 &feature_spm,
2427 &feature_mul,
2428 },
2429};
2430
2431pub const cpu_atmega64a = Cpu{
2432 .name = "atmega64a",
2433 .llvm_name = "atmega64a",
2434 .dependencies = &[_]*const Feature {
2435 &feature_lpmx,
2436 &feature_jmpcall,
2437 &feature_lpm,
2438 &feature_sram,
2439 &feature_addsubiw,
2440 &feature_movw,
2441 &feature_ijmpcall,
2442 &feature_break,
2443 &feature_spm,
2444 &feature_mul,
2445 },
2446};
2447
2448pub const cpu_atmega64c1 = Cpu{
2449 .name = "atmega64c1",
2450 .llvm_name = "atmega64c1",
2451 .dependencies = &[_]*const Feature {
2452 &feature_lpmx,
2453 &feature_jmpcall,
2454 &feature_lpm,
2455 &feature_sram,
2456 &feature_addsubiw,
2457 &feature_movw,
2458 &feature_ijmpcall,
2459 &feature_break,
2460 &feature_spm,
2461 &feature_mul,
2462 },
2463};
2464
2465pub const cpu_atmega64hve = Cpu{
2466 .name = "atmega64hve",
2467 .llvm_name = "atmega64hve",
2468 .dependencies = &[_]*const Feature {
2469 &feature_lpmx,
2470 &feature_jmpcall,
2471 &feature_lpm,
2472 &feature_sram,
2473 &feature_addsubiw,
2474 &feature_movw,
2475 &feature_ijmpcall,
2476 &feature_break,
2477 &feature_spm,
2478 &feature_mul,
2479 },
2480};
2481
2482pub const cpu_atmega64m1 = Cpu{
2483 .name = "atmega64m1",
2484 .llvm_name = "atmega64m1",
2485 .dependencies = &[_]*const Feature {
2486 &feature_lpmx,
2487 &feature_jmpcall,
2488 &feature_lpm,
2489 &feature_sram,
2490 &feature_addsubiw,
2491 &feature_movw,
2492 &feature_ijmpcall,
2493 &feature_break,
2494 &feature_spm,
2495 &feature_mul,
2496 },
2497};
2498
2499pub const cpu_atmega64rfr2 = Cpu{
2500 .name = "atmega64rfr2",
2501 .llvm_name = "atmega64rfr2",
2502 .dependencies = &[_]*const Feature {
2503 &feature_lpmx,
2504 &feature_jmpcall,
2505 &feature_lpm,
2506 &feature_sram,
2507 &feature_addsubiw,
2508 &feature_movw,
2509 &feature_ijmpcall,
2510 &feature_break,
2511 &feature_spm,
2512 &feature_mul,
2513 },
2514};
2515
2516pub const cpu_atmega8 = Cpu{
2517 .name = "atmega8",
2518 .llvm_name = "atmega8",
2519 .dependencies = &[_]*const Feature {
2520 &feature_lpmx,
2521 &feature_lpm,
2522 &feature_sram,
2523 &feature_addsubiw,
2524 &feature_movw,
2525 &feature_ijmpcall,
2526 &feature_break,
2527 &feature_spm,
2528 &feature_mul,
2529 },
2530};
2531
2532pub const cpu_atmega8515 = Cpu{
2533 .name = "atmega8515",
2534 .llvm_name = "atmega8515",
2535 .dependencies = &[_]*const Feature {
2536 &feature_lpm,
2537 &feature_sram,
2538 &feature_addsubiw,
2539 &feature_ijmpcall,
2540 &feature_lpmx,
2541 &feature_movw,
2542 &feature_mul,
2543 &feature_spm,
2544 },
2545};
2546
2547pub const cpu_atmega8535 = Cpu{
2548 .name = "atmega8535",
2549 .llvm_name = "atmega8535",
2550 .dependencies = &[_]*const Feature {
2551 &feature_lpm,
2552 &feature_sram,
2553 &feature_addsubiw,
2554 &feature_ijmpcall,
2555 &feature_lpmx,
2556 &feature_movw,
2557 &feature_mul,
2558 &feature_spm,
2559 },
2560};
2561
2562pub const cpu_atmega88 = Cpu{
2563 .name = "atmega88",
2564 .llvm_name = "atmega88",
2565 .dependencies = &[_]*const Feature {
2566 &feature_lpmx,
2567 &feature_lpm,
2568 &feature_sram,
2569 &feature_addsubiw,
2570 &feature_movw,
2571 &feature_ijmpcall,
2572 &feature_break,
2573 &feature_spm,
2574 &feature_mul,
2575 },
2576};
2577
2578pub const cpu_atmega88a = Cpu{
2579 .name = "atmega88a",
2580 .llvm_name = "atmega88a",
2581 .dependencies = &[_]*const Feature {
2582 &feature_lpmx,
2583 &feature_lpm,
2584 &feature_sram,
2585 &feature_addsubiw,
2586 &feature_movw,
2587 &feature_ijmpcall,
2588 &feature_break,
2589 &feature_spm,
2590 &feature_mul,
2591 },
2592};
2593
2594pub const cpu_atmega88p = Cpu{
2595 .name = "atmega88p",
2596 .llvm_name = "atmega88p",
2597 .dependencies = &[_]*const Feature {
2598 &feature_lpmx,
2599 &feature_lpm,
2600 &feature_sram,
2601 &feature_addsubiw,
2602 &feature_movw,
2603 &feature_ijmpcall,
2604 &feature_break,
2605 &feature_spm,
2606 &feature_mul,
2607 },
2608};
2609
2610pub const cpu_atmega88pa = Cpu{
2611 .name = "atmega88pa",
2612 .llvm_name = "atmega88pa",
2613 .dependencies = &[_]*const Feature {
2614 &feature_lpmx,
2615 &feature_lpm,
2616 &feature_sram,
2617 &feature_addsubiw,
2618 &feature_movw,
2619 &feature_ijmpcall,
2620 &feature_break,
2621 &feature_spm,
2622 &feature_mul,
2623 },
2624};
2625
2626pub const cpu_atmega8a = Cpu{
2627 .name = "atmega8a",
2628 .llvm_name = "atmega8a",
2629 .dependencies = &[_]*const Feature {
2630 &feature_lpmx,
2631 &feature_lpm,
2632 &feature_sram,
2633 &feature_addsubiw,
2634 &feature_movw,
2635 &feature_ijmpcall,
2636 &feature_break,
2637 &feature_spm,
2638 &feature_mul,
2639 },
2640};
2641
2642pub const cpu_atmega8hva = Cpu{
2643 .name = "atmega8hva",
2644 .llvm_name = "atmega8hva",
2645 .dependencies = &[_]*const Feature {
2646 &feature_lpmx,
2647 &feature_lpm,
2648 &feature_sram,
2649 &feature_addsubiw,
2650 &feature_movw,
2651 &feature_ijmpcall,
2652 &feature_break,
2653 &feature_spm,
2654 &feature_mul,
2655 },
2656};
2657
2658pub const cpu_atmega8u2 = Cpu{
2659 .name = "atmega8u2",
2660 .llvm_name = "atmega8u2",
2661 .dependencies = &[_]*const Feature {
2662 &feature_lpmx,
2663 &feature_jmpcall,
2664 &feature_lpm,
2665 &feature_sram,
2666 &feature_addsubiw,
2667 &feature_movw,
2668 &feature_ijmpcall,
2669 &feature_break,
2670 &feature_spm,
2671 },
2672};
2673
2674pub const cpu_attiny10 = Cpu{
2675 .name = "attiny10",
2676 .llvm_name = "attiny10",
2677 .dependencies = &[_]*const Feature {
2678 &feature_sram,
2679 &feature_break,
2680 &feature_tinyencoding,
2681 },
2682};
2683
2684pub const cpu_attiny102 = Cpu{
2685 .name = "attiny102",
2686 .llvm_name = "attiny102",
2687 .dependencies = &[_]*const Feature {
2688 &feature_sram,
2689 &feature_break,
2690 &feature_tinyencoding,
2691 },
2692};
2693
2694pub const cpu_attiny104 = Cpu{
2695 .name = "attiny104",
2696 .llvm_name = "attiny104",
2697 .dependencies = &[_]*const Feature {
2698 &feature_sram,
2699 &feature_break,
2700 &feature_tinyencoding,
2701 },
2702};
2703
2704pub const cpu_attiny11 = Cpu{
2705 .name = "attiny11",
2706 .llvm_name = "attiny11",
2707 .dependencies = &[_]*const Feature {
2708 &feature_lpm,
2709 },
2710};
2711
2712pub const cpu_attiny12 = Cpu{
2713 .name = "attiny12",
2714 .llvm_name = "attiny12",
2715 .dependencies = &[_]*const Feature {
2716 &feature_lpm,
2717 },
2718};
2719
2720pub const cpu_attiny13 = Cpu{
2721 .name = "attiny13",
2722 .llvm_name = "attiny13",
2723 .dependencies = &[_]*const Feature {
2724 &feature_lpmx,
2725 &feature_lpm,
2726 &feature_sram,
2727 &feature_addsubiw,
2728 &feature_movw,
2729 &feature_ijmpcall,
2730 &feature_break,
2731 &feature_spm,
2732 },
2733};
2734
2735pub const cpu_attiny13a = Cpu{
2736 .name = "attiny13a",
2737 .llvm_name = "attiny13a",
2738 .dependencies = &[_]*const Feature {
2739 &feature_lpmx,
2740 &feature_lpm,
2741 &feature_sram,
2742 &feature_addsubiw,
2743 &feature_movw,
2744 &feature_ijmpcall,
2745 &feature_break,
2746 &feature_spm,
2747 },
2748};
2749
2750pub const cpu_attiny15 = Cpu{
2751 .name = "attiny15",
2752 .llvm_name = "attiny15",
2753 .dependencies = &[_]*const Feature {
2754 &feature_lpm,
2755 },
2756};
2757
2758pub const cpu_attiny1634 = Cpu{
2759 .name = "attiny1634",
2760 .llvm_name = "attiny1634",
2761 .dependencies = &[_]*const Feature {
2762 &feature_lpmx,
2763 &feature_jmpcall,
2764 &feature_lpm,
2765 &feature_sram,
2766 &feature_addsubiw,
2767 &feature_movw,
2768 &feature_ijmpcall,
2769 &feature_break,
2770 &feature_spm,
2771 },
2772};
2773
2774pub const cpu_attiny167 = Cpu{
2775 .name = "attiny167",
2776 .llvm_name = "attiny167",
2777 .dependencies = &[_]*const Feature {
2778 &feature_lpmx,
2779 &feature_jmpcall,
2780 &feature_lpm,
2781 &feature_sram,
2782 &feature_addsubiw,
2783 &feature_movw,
2784 &feature_ijmpcall,
2785 &feature_break,
2786 &feature_spm,
2787 },
2788};
2789
2790pub const cpu_attiny20 = Cpu{
2791 .name = "attiny20",
2792 .llvm_name = "attiny20",
2793 .dependencies = &[_]*const Feature {
2794 &feature_sram,
2795 &feature_break,
2796 &feature_tinyencoding,
2797 },
2798};
2799
2800pub const cpu_attiny22 = Cpu{
2801 .name = "attiny22",
2802 .llvm_name = "attiny22",
2803 .dependencies = &[_]*const Feature {
2804 &feature_lpm,
2805 &feature_sram,
2806 &feature_addsubiw,
2807 &feature_ijmpcall,
2808 },
2809};
2810
2811pub const cpu_attiny2313 = Cpu{
2812 .name = "attiny2313",
2813 .llvm_name = "attiny2313",
2814 .dependencies = &[_]*const Feature {
2815 &feature_lpmx,
2816 &feature_lpm,
2817 &feature_sram,
2818 &feature_addsubiw,
2819 &feature_movw,
2820 &feature_ijmpcall,
2821 &feature_break,
2822 &feature_spm,
2823 },
2824};
2825
2826pub const cpu_attiny2313a = Cpu{
2827 .name = "attiny2313a",
2828 .llvm_name = "attiny2313a",
2829 .dependencies = &[_]*const Feature {
2830 &feature_lpmx,
2831 &feature_lpm,
2832 &feature_sram,
2833 &feature_addsubiw,
2834 &feature_movw,
2835 &feature_ijmpcall,
2836 &feature_break,
2837 &feature_spm,
2838 },
2839};
2840
2841pub const cpu_attiny24 = Cpu{
2842 .name = "attiny24",
2843 .llvm_name = "attiny24",
2844 .dependencies = &[_]*const Feature {
2845 &feature_lpmx,
2846 &feature_lpm,
2847 &feature_sram,
2848 &feature_addsubiw,
2849 &feature_movw,
2850 &feature_ijmpcall,
2851 &feature_break,
2852 &feature_spm,
2853 },
2854};
2855
2856pub const cpu_attiny24a = Cpu{
2857 .name = "attiny24a",
2858 .llvm_name = "attiny24a",
2859 .dependencies = &[_]*const Feature {
2860 &feature_lpmx,
2861 &feature_lpm,
2862 &feature_sram,
2863 &feature_addsubiw,
2864 &feature_movw,
2865 &feature_ijmpcall,
2866 &feature_break,
2867 &feature_spm,
2868 },
2869};
2870
2871pub const cpu_attiny25 = Cpu{
2872 .name = "attiny25",
2873 .llvm_name = "attiny25",
2874 .dependencies = &[_]*const Feature {
2875 &feature_lpmx,
2876 &feature_lpm,
2877 &feature_sram,
2878 &feature_addsubiw,
2879 &feature_movw,
2880 &feature_ijmpcall,
2881 &feature_break,
2882 &feature_spm,
2883 },
2884};
2885
2886pub const cpu_attiny26 = Cpu{
2887 .name = "attiny26",
2888 .llvm_name = "attiny26",
2889 .dependencies = &[_]*const Feature {
2890 &feature_lpm,
2891 &feature_sram,
2892 &feature_addsubiw,
2893 &feature_ijmpcall,
2894 &feature_lpmx,
2895 },
2896};
2897
2898pub const cpu_attiny261 = Cpu{
2899 .name = "attiny261",
2900 .llvm_name = "attiny261",
2901 .dependencies = &[_]*const Feature {
2902 &feature_lpmx,
2903 &feature_lpm,
2904 &feature_sram,
2905 &feature_addsubiw,
2906 &feature_movw,
2907 &feature_ijmpcall,
2908 &feature_break,
2909 &feature_spm,
2910 },
2911};
2912
2913pub const cpu_attiny261a = Cpu{
2914 .name = "attiny261a",
2915 .llvm_name = "attiny261a",
2916 .dependencies = &[_]*const Feature {
2917 &feature_lpmx,
2918 &feature_lpm,
2919 &feature_sram,
2920 &feature_addsubiw,
2921 &feature_movw,
2922 &feature_ijmpcall,
2923 &feature_break,
2924 &feature_spm,
2925 },
2926};
2927
2928pub const cpu_attiny28 = Cpu{
2929 .name = "attiny28",
2930 .llvm_name = "attiny28",
2931 .dependencies = &[_]*const Feature {
2932 &feature_lpm,
2933 },
2934};
2935
2936pub const cpu_attiny4 = Cpu{
2937 .name = "attiny4",
2938 .llvm_name = "attiny4",
2939 .dependencies = &[_]*const Feature {
2940 &feature_sram,
2941 &feature_break,
2942 &feature_tinyencoding,
2943 },
2944};
2945
2946pub const cpu_attiny40 = Cpu{
2947 .name = "attiny40",
2948 .llvm_name = "attiny40",
2949 .dependencies = &[_]*const Feature {
2950 &feature_sram,
2951 &feature_break,
2952 &feature_tinyencoding,
2953 },
2954};
2955
2956pub const cpu_attiny4313 = Cpu{
2957 .name = "attiny4313",
2958 .llvm_name = "attiny4313",
2959 .dependencies = &[_]*const Feature {
2960 &feature_lpmx,
2961 &feature_lpm,
2962 &feature_sram,
2963 &feature_addsubiw,
2964 &feature_movw,
2965 &feature_ijmpcall,
2966 &feature_break,
2967 &feature_spm,
2968 },
2969};
2970
2971pub const cpu_attiny43u = Cpu{
2972 .name = "attiny43u",
2973 .llvm_name = "attiny43u",
2974 .dependencies = &[_]*const Feature {
2975 &feature_lpmx,
2976 &feature_lpm,
2977 &feature_sram,
2978 &feature_addsubiw,
2979 &feature_movw,
2980 &feature_ijmpcall,
2981 &feature_break,
2982 &feature_spm,
2983 },
2984};
2985
2986pub const cpu_attiny44 = Cpu{
2987 .name = "attiny44",
2988 .llvm_name = "attiny44",
2989 .dependencies = &[_]*const Feature {
2990 &feature_lpmx,
2991 &feature_lpm,
2992 &feature_sram,
2993 &feature_addsubiw,
2994 &feature_movw,
2995 &feature_ijmpcall,
2996 &feature_break,
2997 &feature_spm,
2998 },
2999};
3000
3001pub const cpu_attiny44a = Cpu{
3002 .name = "attiny44a",
3003 .llvm_name = "attiny44a",
3004 .dependencies = &[_]*const Feature {
3005 &feature_lpmx,
3006 &feature_lpm,
3007 &feature_sram,
3008 &feature_addsubiw,
3009 &feature_movw,
3010 &feature_ijmpcall,
3011 &feature_break,
3012 &feature_spm,
3013 },
3014};
3015
3016pub const cpu_attiny45 = Cpu{
3017 .name = "attiny45",
3018 .llvm_name = "attiny45",
3019 .dependencies = &[_]*const Feature {
3020 &feature_lpmx,
3021 &feature_lpm,
3022 &feature_sram,
3023 &feature_addsubiw,
3024 &feature_movw,
3025 &feature_ijmpcall,
3026 &feature_break,
3027 &feature_spm,
3028 },
3029};
3030
3031pub const cpu_attiny461 = Cpu{
3032 .name = "attiny461",
3033 .llvm_name = "attiny461",
3034 .dependencies = &[_]*const Feature {
3035 &feature_lpmx,
3036 &feature_lpm,
3037 &feature_sram,
3038 &feature_addsubiw,
3039 &feature_movw,
3040 &feature_ijmpcall,
3041 &feature_break,
3042 &feature_spm,
3043 },
3044};
3045
3046pub const cpu_attiny461a = Cpu{
3047 .name = "attiny461a",
3048 .llvm_name = "attiny461a",
3049 .dependencies = &[_]*const Feature {
3050 &feature_lpmx,
3051 &feature_lpm,
3052 &feature_sram,
3053 &feature_addsubiw,
3054 &feature_movw,
3055 &feature_ijmpcall,
3056 &feature_break,
3057 &feature_spm,
3058 },
3059};
3060
3061pub const cpu_attiny48 = Cpu{
3062 .name = "attiny48",
3063 .llvm_name = "attiny48",
3064 .dependencies = &[_]*const Feature {
3065 &feature_lpmx,
3066 &feature_lpm,
3067 &feature_sram,
3068 &feature_addsubiw,
3069 &feature_movw,
3070 &feature_ijmpcall,
3071 &feature_break,
3072 &feature_spm,
3073 },
3074};
3075
3076pub const cpu_attiny5 = Cpu{
3077 .name = "attiny5",
3078 .llvm_name = "attiny5",
3079 .dependencies = &[_]*const Feature {
3080 &feature_sram,
3081 &feature_break,
3082 &feature_tinyencoding,
3083 },
3084};
3085
3086pub const cpu_attiny828 = Cpu{
3087 .name = "attiny828",
3088 .llvm_name = "attiny828",
3089 .dependencies = &[_]*const Feature {
3090 &feature_lpmx,
3091 &feature_lpm,
3092 &feature_sram,
3093 &feature_addsubiw,
3094 &feature_movw,
3095 &feature_ijmpcall,
3096 &feature_break,
3097 &feature_spm,
3098 },
3099};
3100
3101pub const cpu_attiny84 = Cpu{
3102 .name = "attiny84",
3103 .llvm_name = "attiny84",
3104 .dependencies = &[_]*const Feature {
3105 &feature_lpmx,
3106 &feature_lpm,
3107 &feature_sram,
3108 &feature_addsubiw,
3109 &feature_movw,
3110 &feature_ijmpcall,
3111 &feature_break,
3112 &feature_spm,
3113 },
3114};
3115
3116pub const cpu_attiny84a = Cpu{
3117 .name = "attiny84a",
3118 .llvm_name = "attiny84a",
3119 .dependencies = &[_]*const Feature {
3120 &feature_lpmx,
3121 &feature_lpm,
3122 &feature_sram,
3123 &feature_addsubiw,
3124 &feature_movw,
3125 &feature_ijmpcall,
3126 &feature_break,
3127 &feature_spm,
3128 },
3129};
3130
3131pub const cpu_attiny85 = Cpu{
3132 .name = "attiny85",
3133 .llvm_name = "attiny85",
3134 .dependencies = &[_]*const Feature {
3135 &feature_lpmx,
3136 &feature_lpm,
3137 &feature_sram,
3138 &feature_addsubiw,
3139 &feature_movw,
3140 &feature_ijmpcall,
3141 &feature_break,
3142 &feature_spm,
3143 },
3144};
3145
3146pub const cpu_attiny861 = Cpu{
3147 .name = "attiny861",
3148 .llvm_name = "attiny861",
3149 .dependencies = &[_]*const Feature {
3150 &feature_lpmx,
3151 &feature_lpm,
3152 &feature_sram,
3153 &feature_addsubiw,
3154 &feature_movw,
3155 &feature_ijmpcall,
3156 &feature_break,
3157 &feature_spm,
3158 },
3159};
3160
3161pub const cpu_attiny861a = Cpu{
3162 .name = "attiny861a",
3163 .llvm_name = "attiny861a",
3164 .dependencies = &[_]*const Feature {
3165 &feature_lpmx,
3166 &feature_lpm,
3167 &feature_sram,
3168 &feature_addsubiw,
3169 &feature_movw,
3170 &feature_ijmpcall,
3171 &feature_break,
3172 &feature_spm,
3173 },
3174};
3175
3176pub const cpu_attiny87 = Cpu{
3177 .name = "attiny87",
3178 .llvm_name = "attiny87",
3179 .dependencies = &[_]*const Feature {
3180 &feature_lpmx,
3181 &feature_lpm,
3182 &feature_sram,
3183 &feature_addsubiw,
3184 &feature_movw,
3185 &feature_ijmpcall,
3186 &feature_break,
3187 &feature_spm,
3188 },
3189};
3190
3191pub const cpu_attiny88 = Cpu{
3192 .name = "attiny88",
3193 .llvm_name = "attiny88",
3194 .dependencies = &[_]*const Feature {
3195 &feature_lpmx,
3196 &feature_lpm,
3197 &feature_sram,
3198 &feature_addsubiw,
3199 &feature_movw,
3200 &feature_ijmpcall,
3201 &feature_break,
3202 &feature_spm,
3203 },
3204};
3205
3206pub const cpu_attiny9 = Cpu{
3207 .name = "attiny9",
3208 .llvm_name = "attiny9",
3209 .dependencies = &[_]*const Feature {
3210 &feature_sram,
3211 &feature_break,
3212 &feature_tinyencoding,
3213 },
3214};
3215
3216pub const cpu_atxmega128a1 = Cpu{
3217 .name = "atxmega128a1",
3218 .llvm_name = "atxmega128a1",
3219 .dependencies = &[_]*const Feature {
3220 &feature_spmx,
3221 &feature_des,
3222 &feature_lpmx,
3223 &feature_jmpcall,
3224 &feature_lpm,
3225 &feature_elpm,
3226 &feature_sram,
3227 &feature_addsubiw,
3228 &feature_elpmx,
3229 &feature_movw,
3230 &feature_ijmpcall,
3231 &feature_break,
3232 &feature_eijmpcall,
3233 &feature_spm,
3234 &feature_mul,
3235 },
3236};
3237
3238pub const cpu_atxmega128a1u = Cpu{
3239 .name = "atxmega128a1u",
3240 .llvm_name = "atxmega128a1u",
3241 .dependencies = &[_]*const Feature {
3242 &feature_spmx,
3243 &feature_des,
3244 &feature_lpmx,
3245 &feature_jmpcall,
3246 &feature_lpm,
3247 &feature_elpm,
3248 &feature_sram,
3249 &feature_addsubiw,
3250 &feature_elpmx,
3251 &feature_rmw,
3252 &feature_movw,
3253 &feature_ijmpcall,
3254 &feature_break,
3255 &feature_eijmpcall,
3256 &feature_spm,
3257 &feature_mul,
3258 },
3259};
3260
3261pub const cpu_atxmega128a3 = Cpu{
3262 .name = "atxmega128a3",
3263 .llvm_name = "atxmega128a3",
3264 .dependencies = &[_]*const Feature {
3265 &feature_spmx,
3266 &feature_des,
3267 &feature_lpmx,
3268 &feature_jmpcall,
3269 &feature_lpm,
3270 &feature_elpm,
3271 &feature_sram,
3272 &feature_addsubiw,
3273 &feature_elpmx,
3274 &feature_movw,
3275 &feature_ijmpcall,
3276 &feature_break,
3277 &feature_eijmpcall,
3278 &feature_spm,
3279 &feature_mul,
3280 },
3281};
3282
3283pub const cpu_atxmega128a3u = Cpu{
3284 .name = "atxmega128a3u",
3285 .llvm_name = "atxmega128a3u",
3286 .dependencies = &[_]*const Feature {
3287 &feature_spmx,
3288 &feature_des,
3289 &feature_lpmx,
3290 &feature_jmpcall,
3291 &feature_lpm,
3292 &feature_elpm,
3293 &feature_sram,
3294 &feature_addsubiw,
3295 &feature_elpmx,
3296 &feature_rmw,
3297 &feature_movw,
3298 &feature_ijmpcall,
3299 &feature_break,
3300 &feature_eijmpcall,
3301 &feature_spm,
3302 &feature_mul,
3303 },
3304};
3305
3306pub const cpu_atxmega128a4u = Cpu{
3307 .name = "atxmega128a4u",
3308 .llvm_name = "atxmega128a4u",
3309 .dependencies = &[_]*const Feature {
3310 &feature_spmx,
3311 &feature_des,
3312 &feature_lpmx,
3313 &feature_jmpcall,
3314 &feature_lpm,
3315 &feature_elpm,
3316 &feature_sram,
3317 &feature_addsubiw,
3318 &feature_elpmx,
3319 &feature_rmw,
3320 &feature_movw,
3321 &feature_ijmpcall,
3322 &feature_break,
3323 &feature_eijmpcall,
3324 &feature_spm,
3325 &feature_mul,
3326 },
3327};
3328
3329pub const cpu_atxmega128b1 = Cpu{
3330 .name = "atxmega128b1",
3331 .llvm_name = "atxmega128b1",
3332 .dependencies = &[_]*const Feature {
3333 &feature_spmx,
3334 &feature_des,
3335 &feature_lpmx,
3336 &feature_jmpcall,
3337 &feature_lpm,
3338 &feature_elpm,
3339 &feature_sram,
3340 &feature_addsubiw,
3341 &feature_elpmx,
3342 &feature_rmw,
3343 &feature_movw,
3344 &feature_ijmpcall,
3345 &feature_break,
3346 &feature_eijmpcall,
3347 &feature_spm,
3348 &feature_mul,
3349 },
3350};
3351
3352pub const cpu_atxmega128b3 = Cpu{
3353 .name = "atxmega128b3",
3354 .llvm_name = "atxmega128b3",
3355 .dependencies = &[_]*const Feature {
3356 &feature_spmx,
3357 &feature_des,
3358 &feature_lpmx,
3359 &feature_jmpcall,
3360 &feature_lpm,
3361 &feature_elpm,
3362 &feature_sram,
3363 &feature_addsubiw,
3364 &feature_elpmx,
3365 &feature_rmw,
3366 &feature_movw,
3367 &feature_ijmpcall,
3368 &feature_break,
3369 &feature_eijmpcall,
3370 &feature_spm,
3371 &feature_mul,
3372 },
3373};
3374
3375pub const cpu_atxmega128c3 = Cpu{
3376 .name = "atxmega128c3",
3377 .llvm_name = "atxmega128c3",
3378 .dependencies = &[_]*const Feature {
3379 &feature_spmx,
3380 &feature_des,
3381 &feature_lpmx,
3382 &feature_jmpcall,
3383 &feature_lpm,
3384 &feature_elpm,
3385 &feature_sram,
3386 &feature_addsubiw,
3387 &feature_elpmx,
3388 &feature_rmw,
3389 &feature_movw,
3390 &feature_ijmpcall,
3391 &feature_break,
3392 &feature_eijmpcall,
3393 &feature_spm,
3394 &feature_mul,
3395 },
3396};
3397
3398pub const cpu_atxmega128d3 = Cpu{
3399 .name = "atxmega128d3",
3400 .llvm_name = "atxmega128d3",
3401 .dependencies = &[_]*const Feature {
3402 &feature_spmx,
3403 &feature_des,
3404 &feature_lpmx,
3405 &feature_jmpcall,
3406 &feature_lpm,
3407 &feature_elpm,
3408 &feature_sram,
3409 &feature_addsubiw,
3410 &feature_elpmx,
3411 &feature_movw,
3412 &feature_ijmpcall,
3413 &feature_break,
3414 &feature_eijmpcall,
3415 &feature_spm,
3416 &feature_mul,
3417 },
3418};
3419
3420pub const cpu_atxmega128d4 = Cpu{
3421 .name = "atxmega128d4",
3422 .llvm_name = "atxmega128d4",
3423 .dependencies = &[_]*const Feature {
3424 &feature_spmx,
3425 &feature_des,
3426 &feature_lpmx,
3427 &feature_jmpcall,
3428 &feature_lpm,
3429 &feature_elpm,
3430 &feature_sram,
3431 &feature_addsubiw,
3432 &feature_elpmx,
3433 &feature_movw,
3434 &feature_ijmpcall,
3435 &feature_break,
3436 &feature_eijmpcall,
3437 &feature_spm,
3438 &feature_mul,
3439 },
3440};
3441
3442pub const cpu_atxmega16a4 = Cpu{
3443 .name = "atxmega16a4",
3444 .llvm_name = "atxmega16a4",
3445 .dependencies = &[_]*const Feature {
3446 &feature_spmx,
3447 &feature_des,
3448 &feature_lpmx,
3449 &feature_jmpcall,
3450 &feature_lpm,
3451 &feature_elpm,
3452 &feature_sram,
3453 &feature_addsubiw,
3454 &feature_elpmx,
3455 &feature_movw,
3456 &feature_ijmpcall,
3457 &feature_break,
3458 &feature_eijmpcall,
3459 &feature_spm,
3460 &feature_mul,
3461 },
3462};
3463
3464pub const cpu_atxmega16a4u = Cpu{
3465 .name = "atxmega16a4u",
3466 .llvm_name = "atxmega16a4u",
3467 .dependencies = &[_]*const Feature {
3468 &feature_spmx,
3469 &feature_des,
3470 &feature_lpmx,
3471 &feature_jmpcall,
3472 &feature_lpm,
3473 &feature_elpm,
3474 &feature_sram,
3475 &feature_addsubiw,
3476 &feature_elpmx,
3477 &feature_rmw,
3478 &feature_movw,
3479 &feature_ijmpcall,
3480 &feature_break,
3481 &feature_eijmpcall,
3482 &feature_spm,
3483 &feature_mul,
3484 },
3485};
3486
3487pub const cpu_atxmega16c4 = Cpu{
3488 .name = "atxmega16c4",
3489 .llvm_name = "atxmega16c4",
3490 .dependencies = &[_]*const Feature {
3491 &feature_spmx,
3492 &feature_des,
3493 &feature_lpmx,
3494 &feature_jmpcall,
3495 &feature_lpm,
3496 &feature_elpm,
3497 &feature_sram,
3498 &feature_addsubiw,
3499 &feature_elpmx,
3500 &feature_rmw,
3501 &feature_movw,
3502 &feature_ijmpcall,
3503 &feature_break,
3504 &feature_eijmpcall,
3505 &feature_spm,
3506 &feature_mul,
3507 },
3508};
3509
3510pub const cpu_atxmega16d4 = Cpu{
3511 .name = "atxmega16d4",
3512 .llvm_name = "atxmega16d4",
3513 .dependencies = &[_]*const Feature {
3514 &feature_spmx,
3515 &feature_des,
3516 &feature_lpmx,
3517 &feature_jmpcall,
3518 &feature_lpm,
3519 &feature_elpm,
3520 &feature_sram,
3521 &feature_addsubiw,
3522 &feature_elpmx,
3523 &feature_movw,
3524 &feature_ijmpcall,
3525 &feature_break,
3526 &feature_eijmpcall,
3527 &feature_spm,
3528 &feature_mul,
3529 },
3530};
3531
3532pub const cpu_atxmega16e5 = Cpu{
3533 .name = "atxmega16e5",
3534 .llvm_name = "atxmega16e5",
3535 .dependencies = &[_]*const Feature {
3536 &feature_spmx,
3537 &feature_des,
3538 &feature_lpmx,
3539 &feature_jmpcall,
3540 &feature_lpm,
3541 &feature_elpm,
3542 &feature_sram,
3543 &feature_addsubiw,
3544 &feature_elpmx,
3545 &feature_movw,
3546 &feature_ijmpcall,
3547 &feature_break,
3548 &feature_eijmpcall,
3549 &feature_spm,
3550 &feature_mul,
3551 },
3552};
3553
3554pub const cpu_atxmega192a3 = Cpu{
3555 .name = "atxmega192a3",
3556 .llvm_name = "atxmega192a3",
3557 .dependencies = &[_]*const Feature {
3558 &feature_spmx,
3559 &feature_des,
3560 &feature_lpmx,
3561 &feature_jmpcall,
3562 &feature_lpm,
3563 &feature_elpm,
3564 &feature_sram,
3565 &feature_addsubiw,
3566 &feature_elpmx,
3567 &feature_movw,
3568 &feature_ijmpcall,
3569 &feature_break,
3570 &feature_eijmpcall,
3571 &feature_spm,
3572 &feature_mul,
3573 },
3574};
3575
3576pub const cpu_atxmega192a3u = Cpu{
3577 .name = "atxmega192a3u",
3578 .llvm_name = "atxmega192a3u",
3579 .dependencies = &[_]*const Feature {
3580 &feature_spmx,
3581 &feature_des,
3582 &feature_lpmx,
3583 &feature_jmpcall,
3584 &feature_lpm,
3585 &feature_elpm,
3586 &feature_sram,
3587 &feature_addsubiw,
3588 &feature_elpmx,
3589 &feature_rmw,
3590 &feature_movw,
3591 &feature_ijmpcall,
3592 &feature_break,
3593 &feature_eijmpcall,
3594 &feature_spm,
3595 &feature_mul,
3596 },
3597};
3598
3599pub const cpu_atxmega192c3 = Cpu{
3600 .name = "atxmega192c3",
3601 .llvm_name = "atxmega192c3",
3602 .dependencies = &[_]*const Feature {
3603 &feature_spmx,
3604 &feature_des,
3605 &feature_lpmx,
3606 &feature_jmpcall,
3607 &feature_lpm,
3608 &feature_elpm,
3609 &feature_sram,
3610 &feature_addsubiw,
3611 &feature_elpmx,
3612 &feature_rmw,
3613 &feature_movw,
3614 &feature_ijmpcall,
3615 &feature_break,
3616 &feature_eijmpcall,
3617 &feature_spm,
3618 &feature_mul,
3619 },
3620};
3621
3622pub const cpu_atxmega192d3 = Cpu{
3623 .name = "atxmega192d3",
3624 .llvm_name = "atxmega192d3",
3625 .dependencies = &[_]*const Feature {
3626 &feature_spmx,
3627 &feature_des,
3628 &feature_lpmx,
3629 &feature_jmpcall,
3630 &feature_lpm,
3631 &feature_elpm,
3632 &feature_sram,
3633 &feature_addsubiw,
3634 &feature_elpmx,
3635 &feature_movw,
3636 &feature_ijmpcall,
3637 &feature_break,
3638 &feature_eijmpcall,
3639 &feature_spm,
3640 &feature_mul,
3641 },
3642};
3643
3644pub const cpu_atxmega256a3 = Cpu{
3645 .name = "atxmega256a3",
3646 .llvm_name = "atxmega256a3",
3647 .dependencies = &[_]*const Feature {
3648 &feature_spmx,
3649 &feature_des,
3650 &feature_lpmx,
3651 &feature_jmpcall,
3652 &feature_lpm,
3653 &feature_elpm,
3654 &feature_sram,
3655 &feature_addsubiw,
3656 &feature_elpmx,
3657 &feature_movw,
3658 &feature_ijmpcall,
3659 &feature_break,
3660 &feature_eijmpcall,
3661 &feature_spm,
3662 &feature_mul,
3663 },
3664};
3665
3666pub const cpu_atxmega256a3b = Cpu{
3667 .name = "atxmega256a3b",
3668 .llvm_name = "atxmega256a3b",
3669 .dependencies = &[_]*const Feature {
3670 &feature_spmx,
3671 &feature_des,
3672 &feature_lpmx,
3673 &feature_jmpcall,
3674 &feature_lpm,
3675 &feature_elpm,
3676 &feature_sram,
3677 &feature_addsubiw,
3678 &feature_elpmx,
3679 &feature_movw,
3680 &feature_ijmpcall,
3681 &feature_break,
3682 &feature_eijmpcall,
3683 &feature_spm,
3684 &feature_mul,
3685 },
3686};
3687
3688pub const cpu_atxmega256a3bu = Cpu{
3689 .name = "atxmega256a3bu",
3690 .llvm_name = "atxmega256a3bu",
3691 .dependencies = &[_]*const Feature {
3692 &feature_spmx,
3693 &feature_des,
3694 &feature_lpmx,
3695 &feature_jmpcall,
3696 &feature_lpm,
3697 &feature_elpm,
3698 &feature_sram,
3699 &feature_addsubiw,
3700 &feature_elpmx,
3701 &feature_rmw,
3702 &feature_movw,
3703 &feature_ijmpcall,
3704 &feature_break,
3705 &feature_eijmpcall,
3706 &feature_spm,
3707 &feature_mul,
3708 },
3709};
3710
3711pub const cpu_atxmega256a3u = Cpu{
3712 .name = "atxmega256a3u",
3713 .llvm_name = "atxmega256a3u",
3714 .dependencies = &[_]*const Feature {
3715 &feature_spmx,
3716 &feature_des,
3717 &feature_lpmx,
3718 &feature_jmpcall,
3719 &feature_lpm,
3720 &feature_elpm,
3721 &feature_sram,
3722 &feature_addsubiw,
3723 &feature_elpmx,
3724 &feature_rmw,
3725 &feature_movw,
3726 &feature_ijmpcall,
3727 &feature_break,
3728 &feature_eijmpcall,
3729 &feature_spm,
3730 &feature_mul,
3731 },
3732};
3733
3734pub const cpu_atxmega256c3 = Cpu{
3735 .name = "atxmega256c3",
3736 .llvm_name = "atxmega256c3",
3737 .dependencies = &[_]*const Feature {
3738 &feature_spmx,
3739 &feature_des,
3740 &feature_lpmx,
3741 &feature_jmpcall,
3742 &feature_lpm,
3743 &feature_elpm,
3744 &feature_sram,
3745 &feature_addsubiw,
3746 &feature_elpmx,
3747 &feature_rmw,
3748 &feature_movw,
3749 &feature_ijmpcall,
3750 &feature_break,
3751 &feature_eijmpcall,
3752 &feature_spm,
3753 &feature_mul,
3754 },
3755};
3756
3757pub const cpu_atxmega256d3 = Cpu{
3758 .name = "atxmega256d3",
3759 .llvm_name = "atxmega256d3",
3760 .dependencies = &[_]*const Feature {
3761 &feature_spmx,
3762 &feature_des,
3763 &feature_lpmx,
3764 &feature_jmpcall,
3765 &feature_lpm,
3766 &feature_elpm,
3767 &feature_sram,
3768 &feature_addsubiw,
3769 &feature_elpmx,
3770 &feature_movw,
3771 &feature_ijmpcall,
3772 &feature_break,
3773 &feature_eijmpcall,
3774 &feature_spm,
3775 &feature_mul,
3776 },
3777};
3778
3779pub const cpu_atxmega32a4 = Cpu{
3780 .name = "atxmega32a4",
3781 .llvm_name = "atxmega32a4",
3782 .dependencies = &[_]*const Feature {
3783 &feature_spmx,
3784 &feature_des,
3785 &feature_lpmx,
3786 &feature_jmpcall,
3787 &feature_lpm,
3788 &feature_elpm,
3789 &feature_sram,
3790 &feature_addsubiw,
3791 &feature_elpmx,
3792 &feature_movw,
3793 &feature_ijmpcall,
3794 &feature_break,
3795 &feature_eijmpcall,
3796 &feature_spm,
3797 &feature_mul,
3798 },
3799};
3800
3801pub const cpu_atxmega32a4u = Cpu{
3802 .name = "atxmega32a4u",
3803 .llvm_name = "atxmega32a4u",
3804 .dependencies = &[_]*const Feature {
3805 &feature_spmx,
3806 &feature_des,
3807 &feature_lpmx,
3808 &feature_jmpcall,
3809 &feature_lpm,
3810 &feature_elpm,
3811 &feature_sram,
3812 &feature_addsubiw,
3813 &feature_elpmx,
3814 &feature_rmw,
3815 &feature_movw,
3816 &feature_ijmpcall,
3817 &feature_break,
3818 &feature_eijmpcall,
3819 &feature_spm,
3820 &feature_mul,
3821 },
3822};
3823
3824pub const cpu_atxmega32c4 = Cpu{
3825 .name = "atxmega32c4",
3826 .llvm_name = "atxmega32c4",
3827 .dependencies = &[_]*const Feature {
3828 &feature_spmx,
3829 &feature_des,
3830 &feature_lpmx,
3831 &feature_jmpcall,
3832 &feature_lpm,
3833 &feature_elpm,
3834 &feature_sram,
3835 &feature_addsubiw,
3836 &feature_elpmx,
3837 &feature_rmw,
3838 &feature_movw,
3839 &feature_ijmpcall,
3840 &feature_break,
3841 &feature_eijmpcall,
3842 &feature_spm,
3843 &feature_mul,
3844 },
3845};
3846
3847pub const cpu_atxmega32d4 = Cpu{
3848 .name = "atxmega32d4",
3849 .llvm_name = "atxmega32d4",
3850 .dependencies = &[_]*const Feature {
3851 &feature_spmx,
3852 &feature_des,
3853 &feature_lpmx,
3854 &feature_jmpcall,
3855 &feature_lpm,
3856 &feature_elpm,
3857 &feature_sram,
3858 &feature_addsubiw,
3859 &feature_elpmx,
3860 &feature_movw,
3861 &feature_ijmpcall,
3862 &feature_break,
3863 &feature_eijmpcall,
3864 &feature_spm,
3865 &feature_mul,
3866 },
3867};
3868
3869pub const cpu_atxmega32e5 = Cpu{
3870 .name = "atxmega32e5",
3871 .llvm_name = "atxmega32e5",
3872 .dependencies = &[_]*const Feature {
3873 &feature_spmx,
3874 &feature_des,
3875 &feature_lpmx,
3876 &feature_jmpcall,
3877 &feature_lpm,
3878 &feature_elpm,
3879 &feature_sram,
3880 &feature_addsubiw,
3881 &feature_elpmx,
3882 &feature_movw,
3883 &feature_ijmpcall,
3884 &feature_break,
3885 &feature_eijmpcall,
3886 &feature_spm,
3887 &feature_mul,
3888 },
3889};
3890
3891pub const cpu_atxmega32x1 = Cpu{
3892 .name = "atxmega32x1",
3893 .llvm_name = "atxmega32x1",
3894 .dependencies = &[_]*const Feature {
3895 &feature_spmx,
3896 &feature_des,
3897 &feature_lpmx,
3898 &feature_jmpcall,
3899 &feature_lpm,
3900 &feature_elpm,
3901 &feature_sram,
3902 &feature_addsubiw,
3903 &feature_elpmx,
3904 &feature_movw,
3905 &feature_ijmpcall,
3906 &feature_break,
3907 &feature_eijmpcall,
3908 &feature_spm,
3909 &feature_mul,
3910 },
3911};
3912
3913pub const cpu_atxmega384c3 = Cpu{
3914 .name = "atxmega384c3",
3915 .llvm_name = "atxmega384c3",
3916 .dependencies = &[_]*const Feature {
3917 &feature_spmx,
3918 &feature_des,
3919 &feature_lpmx,
3920 &feature_jmpcall,
3921 &feature_lpm,
3922 &feature_elpm,
3923 &feature_sram,
3924 &feature_addsubiw,
3925 &feature_elpmx,
3926 &feature_rmw,
3927 &feature_movw,
3928 &feature_ijmpcall,
3929 &feature_break,
3930 &feature_eijmpcall,
3931 &feature_spm,
3932 &feature_mul,
3933 },
3934};
3935
3936pub const cpu_atxmega384d3 = Cpu{
3937 .name = "atxmega384d3",
3938 .llvm_name = "atxmega384d3",
3939 .dependencies = &[_]*const Feature {
3940 &feature_spmx,
3941 &feature_des,
3942 &feature_lpmx,
3943 &feature_jmpcall,
3944 &feature_lpm,
3945 &feature_elpm,
3946 &feature_sram,
3947 &feature_addsubiw,
3948 &feature_elpmx,
3949 &feature_movw,
3950 &feature_ijmpcall,
3951 &feature_break,
3952 &feature_eijmpcall,
3953 &feature_spm,
3954 &feature_mul,
3955 },
3956};
3957
3958pub const cpu_atxmega64a1 = Cpu{
3959 .name = "atxmega64a1",
3960 .llvm_name = "atxmega64a1",
3961 .dependencies = &[_]*const Feature {
3962 &feature_spmx,
3963 &feature_des,
3964 &feature_lpmx,
3965 &feature_jmpcall,
3966 &feature_lpm,
3967 &feature_elpm,
3968 &feature_sram,
3969 &feature_addsubiw,
3970 &feature_elpmx,
3971 &feature_movw,
3972 &feature_ijmpcall,
3973 &feature_break,
3974 &feature_eijmpcall,
3975 &feature_spm,
3976 &feature_mul,
3977 },
3978};
3979
3980pub const cpu_atxmega64a1u = Cpu{
3981 .name = "atxmega64a1u",
3982 .llvm_name = "atxmega64a1u",
3983 .dependencies = &[_]*const Feature {
3984 &feature_spmx,
3985 &feature_des,
3986 &feature_lpmx,
3987 &feature_jmpcall,
3988 &feature_lpm,
3989 &feature_elpm,
3990 &feature_sram,
3991 &feature_addsubiw,
3992 &feature_elpmx,
3993 &feature_rmw,
3994 &feature_movw,
3995 &feature_ijmpcall,
3996 &feature_break,
3997 &feature_eijmpcall,
3998 &feature_spm,
3999 &feature_mul,
4000 },
4001};
4002
4003pub const cpu_atxmega64a3 = Cpu{
4004 .name = "atxmega64a3",
4005 .llvm_name = "atxmega64a3",
4006 .dependencies = &[_]*const Feature {
4007 &feature_spmx,
4008 &feature_des,
4009 &feature_lpmx,
4010 &feature_jmpcall,
4011 &feature_lpm,
4012 &feature_elpm,
4013 &feature_sram,
4014 &feature_addsubiw,
4015 &feature_elpmx,
4016 &feature_movw,
4017 &feature_ijmpcall,
4018 &feature_break,
4019 &feature_eijmpcall,
4020 &feature_spm,
4021 &feature_mul,
4022 },
4023};
4024
4025pub const cpu_atxmega64a3u = Cpu{
4026 .name = "atxmega64a3u",
4027 .llvm_name = "atxmega64a3u",
4028 .dependencies = &[_]*const Feature {
4029 &feature_spmx,
4030 &feature_des,
4031 &feature_lpmx,
4032 &feature_jmpcall,
4033 &feature_lpm,
4034 &feature_elpm,
4035 &feature_sram,
4036 &feature_addsubiw,
4037 &feature_elpmx,
4038 &feature_rmw,
4039 &feature_movw,
4040 &feature_ijmpcall,
4041 &feature_break,
4042 &feature_eijmpcall,
4043 &feature_spm,
4044 &feature_mul,
4045 },
4046};
4047
4048pub const cpu_atxmega64a4u = Cpu{
4049 .name = "atxmega64a4u",
4050 .llvm_name = "atxmega64a4u",
4051 .dependencies = &[_]*const Feature {
4052 &feature_spmx,
4053 &feature_des,
4054 &feature_lpmx,
4055 &feature_jmpcall,
4056 &feature_lpm,
4057 &feature_elpm,
4058 &feature_sram,
4059 &feature_addsubiw,
4060 &feature_elpmx,
4061 &feature_rmw,
4062 &feature_movw,
4063 &feature_ijmpcall,
4064 &feature_break,
4065 &feature_eijmpcall,
4066 &feature_spm,
4067 &feature_mul,
4068 },
4069};
4070
4071pub const cpu_atxmega64b1 = Cpu{
4072 .name = "atxmega64b1",
4073 .llvm_name = "atxmega64b1",
4074 .dependencies = &[_]*const Feature {
4075 &feature_spmx,
4076 &feature_des,
4077 &feature_lpmx,
4078 &feature_jmpcall,
4079 &feature_lpm,
4080 &feature_elpm,
4081 &feature_sram,
4082 &feature_addsubiw,
4083 &feature_elpmx,
4084 &feature_rmw,
4085 &feature_movw,
4086 &feature_ijmpcall,
4087 &feature_break,
4088 &feature_eijmpcall,
4089 &feature_spm,
4090 &feature_mul,
4091 },
4092};
4093
4094pub const cpu_atxmega64b3 = Cpu{
4095 .name = "atxmega64b3",
4096 .llvm_name = "atxmega64b3",
4097 .dependencies = &[_]*const Feature {
4098 &feature_spmx,
4099 &feature_des,
4100 &feature_lpmx,
4101 &feature_jmpcall,
4102 &feature_lpm,
4103 &feature_elpm,
4104 &feature_sram,
4105 &feature_addsubiw,
4106 &feature_elpmx,
4107 &feature_rmw,
4108 &feature_movw,
4109 &feature_ijmpcall,
4110 &feature_break,
4111 &feature_eijmpcall,
4112 &feature_spm,
4113 &feature_mul,
4114 },
4115};
4116
4117pub const cpu_atxmega64c3 = Cpu{
4118 .name = "atxmega64c3",
4119 .llvm_name = "atxmega64c3",
4120 .dependencies = &[_]*const Feature {
4121 &feature_spmx,
4122 &feature_des,
4123 &feature_lpmx,
4124 &feature_jmpcall,
4125 &feature_lpm,
4126 &feature_elpm,
4127 &feature_sram,
4128 &feature_addsubiw,
4129 &feature_elpmx,
4130 &feature_rmw,
4131 &feature_movw,
4132 &feature_ijmpcall,
4133 &feature_break,
4134 &feature_eijmpcall,
4135 &feature_spm,
4136 &feature_mul,
4137 },
4138};
4139
4140pub const cpu_atxmega64d3 = Cpu{
4141 .name = "atxmega64d3",
4142 .llvm_name = "atxmega64d3",
4143 .dependencies = &[_]*const Feature {
4144 &feature_spmx,
4145 &feature_des,
4146 &feature_lpmx,
4147 &feature_jmpcall,
4148 &feature_lpm,
4149 &feature_elpm,
4150 &feature_sram,
4151 &feature_addsubiw,
4152 &feature_elpmx,
4153 &feature_movw,
4154 &feature_ijmpcall,
4155 &feature_break,
4156 &feature_eijmpcall,
4157 &feature_spm,
4158 &feature_mul,
4159 },
4160};
4161
4162pub const cpu_atxmega64d4 = Cpu{
4163 .name = "atxmega64d4",
4164 .llvm_name = "atxmega64d4",
4165 .dependencies = &[_]*const Feature {
4166 &feature_spmx,
4167 &feature_des,
4168 &feature_lpmx,
4169 &feature_jmpcall,
4170 &feature_lpm,
4171 &feature_elpm,
4172 &feature_sram,
4173 &feature_addsubiw,
4174 &feature_elpmx,
4175 &feature_movw,
4176 &feature_ijmpcall,
4177 &feature_break,
4178 &feature_eijmpcall,
4179 &feature_spm,
4180 &feature_mul,
4181 },
4182};
4183
4184pub const cpu_atxmega8e5 = Cpu{
4185 .name = "atxmega8e5",
4186 .llvm_name = "atxmega8e5",
4187 .dependencies = &[_]*const Feature {
4188 &feature_spmx,
4189 &feature_des,
4190 &feature_lpmx,
4191 &feature_jmpcall,
4192 &feature_lpm,
4193 &feature_elpm,
4194 &feature_sram,
4195 &feature_addsubiw,
4196 &feature_elpmx,
4197 &feature_movw,
4198 &feature_ijmpcall,
4199 &feature_break,
4200 &feature_eijmpcall,
4201 &feature_spm,
4202 &feature_mul,
4203 },
4204};
4205
4206pub const cpu_avr1 = Cpu{
4207 .name = "avr1",
4208 .llvm_name = "avr1",
4209 .dependencies = &[_]*const Feature {
4210 &feature_lpm,
4211 },
4212};
4213
4214pub const cpu_avr2 = Cpu{
4215 .name = "avr2",
4216 .llvm_name = "avr2",
4217 .dependencies = &[_]*const Feature {
4218 &feature_lpm,
4219 &feature_sram,
4220 &feature_addsubiw,
4221 &feature_ijmpcall,
4222 },
4223};
4224
4225pub const cpu_avr25 = Cpu{
4226 .name = "avr25",
4227 .llvm_name = "avr25",
4228 .dependencies = &[_]*const Feature {
4229 &feature_lpmx,
4230 &feature_lpm,
4231 &feature_sram,
4232 &feature_addsubiw,
4233 &feature_movw,
4234 &feature_ijmpcall,
4235 &feature_break,
4236 &feature_spm,
4237 },
4238};
4239
4240pub const cpu_avr3 = Cpu{
4241 .name = "avr3",
4242 .llvm_name = "avr3",
4243 .dependencies = &[_]*const Feature {
4244 &feature_jmpcall,
4245 &feature_lpm,
4246 &feature_sram,
4247 &feature_addsubiw,
4248 &feature_ijmpcall,
4249 },
4250};
4251
4252pub const cpu_avr31 = Cpu{
4253 .name = "avr31",
4254 .llvm_name = "avr31",
4255 .dependencies = &[_]*const Feature {
4256 &feature_jmpcall,
4257 &feature_lpm,
4258 &feature_elpm,
4259 &feature_sram,
4260 &feature_addsubiw,
4261 &feature_ijmpcall,
4262 },
4263};
4264
4265pub const cpu_avr35 = Cpu{
4266 .name = "avr35",
4267 .llvm_name = "avr35",
4268 .dependencies = &[_]*const Feature {
4269 &feature_lpmx,
4270 &feature_jmpcall,
4271 &feature_lpm,
4272 &feature_sram,
4273 &feature_addsubiw,
4274 &feature_movw,
4275 &feature_ijmpcall,
4276 &feature_break,
4277 &feature_spm,
4278 },
4279};
4280
4281pub const cpu_avr4 = Cpu{
4282 .name = "avr4",
4283 .llvm_name = "avr4",
4284 .dependencies = &[_]*const Feature {
4285 &feature_lpmx,
4286 &feature_lpm,
4287 &feature_sram,
4288 &feature_addsubiw,
4289 &feature_movw,
4290 &feature_ijmpcall,
4291 &feature_break,
4292 &feature_spm,
4293 &feature_mul,
4294 },
4295};
4296
4297pub const cpu_avr5 = Cpu{
4298 .name = "avr5",
4299 .llvm_name = "avr5",
4300 .dependencies = &[_]*const Feature {
4301 &feature_lpmx,
4302 &feature_jmpcall,
4303 &feature_lpm,
4304 &feature_sram,
4305 &feature_addsubiw,
4306 &feature_movw,
4307 &feature_ijmpcall,
4308 &feature_break,
4309 &feature_spm,
4310 &feature_mul,
4311 },
4312};
4313
4314pub const cpu_avr51 = Cpu{
4315 .name = "avr51",
4316 .llvm_name = "avr51",
4317 .dependencies = &[_]*const Feature {
4318 &feature_lpmx,
4319 &feature_jmpcall,
4320 &feature_lpm,
4321 &feature_elpm,
4322 &feature_sram,
4323 &feature_addsubiw,
4324 &feature_elpmx,
4325 &feature_movw,
4326 &feature_ijmpcall,
4327 &feature_break,
4328 &feature_spm,
4329 &feature_mul,
4330 },
4331};
4332
4333pub const cpu_avr6 = Cpu{
4334 .name = "avr6",
4335 .llvm_name = "avr6",
4336 .dependencies = &[_]*const Feature {
4337 &feature_lpmx,
4338 &feature_jmpcall,
4339 &feature_lpm,
4340 &feature_elpm,
4341 &feature_sram,
4342 &feature_addsubiw,
4343 &feature_elpmx,
4344 &feature_movw,
4345 &feature_ijmpcall,
4346 &feature_break,
4347 &feature_spm,
4348 &feature_mul,
4349 },
4350};
4351
4352pub const cpu_avrtiny = Cpu{
4353 .name = "avrtiny",
4354 .llvm_name = "avrtiny",
4355 .dependencies = &[_]*const Feature {
4356 &feature_sram,
4357 &feature_break,
4358 &feature_tinyencoding,
4359 },
4360};
4361
4362pub const cpu_avrxmega1 = Cpu{
4363 .name = "avrxmega1",
4364 .llvm_name = "avrxmega1",
4365 .dependencies = &[_]*const Feature {
4366 &feature_spmx,
4367 &feature_des,
4368 &feature_lpmx,
4369 &feature_jmpcall,
4370 &feature_lpm,
4371 &feature_elpm,
4372 &feature_sram,
4373 &feature_addsubiw,
4374 &feature_elpmx,
4375 &feature_movw,
4376 &feature_ijmpcall,
4377 &feature_break,
4378 &feature_eijmpcall,
4379 &feature_spm,
4380 &feature_mul,
4381 },
4382};
4383
4384pub const cpu_avrxmega2 = Cpu{
4385 .name = "avrxmega2",
4386 .llvm_name = "avrxmega2",
4387 .dependencies = &[_]*const Feature {
4388 &feature_spmx,
4389 &feature_des,
4390 &feature_lpmx,
4391 &feature_jmpcall,
4392 &feature_lpm,
4393 &feature_elpm,
4394 &feature_sram,
4395 &feature_addsubiw,
4396 &feature_elpmx,
4397 &feature_movw,
4398 &feature_ijmpcall,
4399 &feature_break,
4400 &feature_eijmpcall,
4401 &feature_spm,
4402 &feature_mul,
4403 },
4404};
4405
4406pub const cpu_avrxmega3 = Cpu{
4407 .name = "avrxmega3",
4408 .llvm_name = "avrxmega3",
4409 .dependencies = &[_]*const Feature {
4410 &feature_spmx,
4411 &feature_des,
4412 &feature_lpmx,
4413 &feature_jmpcall,
4414 &feature_lpm,
4415 &feature_elpm,
4416 &feature_sram,
4417 &feature_addsubiw,
4418 &feature_elpmx,
4419 &feature_movw,
4420 &feature_ijmpcall,
4421 &feature_break,
4422 &feature_eijmpcall,
4423 &feature_spm,
4424 &feature_mul,
4425 },
4426};
4427
4428pub const cpu_avrxmega4 = Cpu{
4429 .name = "avrxmega4",
4430 .llvm_name = "avrxmega4",
4431 .dependencies = &[_]*const Feature {
4432 &feature_spmx,
4433 &feature_des,
4434 &feature_lpmx,
4435 &feature_jmpcall,
4436 &feature_lpm,
4437 &feature_elpm,
4438 &feature_sram,
4439 &feature_addsubiw,
4440 &feature_elpmx,
4441 &feature_movw,
4442 &feature_ijmpcall,
4443 &feature_break,
4444 &feature_eijmpcall,
4445 &feature_spm,
4446 &feature_mul,
4447 },
4448};
4449
4450pub const cpu_avrxmega5 = Cpu{
4451 .name = "avrxmega5",
4452 .llvm_name = "avrxmega5",
4453 .dependencies = &[_]*const Feature {
4454 &feature_spmx,
4455 &feature_des,
4456 &feature_lpmx,
4457 &feature_jmpcall,
4458 &feature_lpm,
4459 &feature_elpm,
4460 &feature_sram,
4461 &feature_addsubiw,
4462 &feature_elpmx,
4463 &feature_movw,
4464 &feature_ijmpcall,
4465 &feature_break,
4466 &feature_eijmpcall,
4467 &feature_spm,
4468 &feature_mul,
4469 },
4470};
4471
4472pub const cpu_avrxmega6 = Cpu{
4473 .name = "avrxmega6",
4474 .llvm_name = "avrxmega6",
4475 .dependencies = &[_]*const Feature {
4476 &feature_spmx,
4477 &feature_des,
4478 &feature_lpmx,
4479 &feature_jmpcall,
4480 &feature_lpm,
4481 &feature_elpm,
4482 &feature_sram,
4483 &feature_addsubiw,
4484 &feature_elpmx,
4485 &feature_movw,
4486 &feature_ijmpcall,
4487 &feature_break,
4488 &feature_eijmpcall,
4489 &feature_spm,
4490 &feature_mul,
4491 },
4492};
4493
4494pub const cpu_avrxmega7 = Cpu{
4495 .name = "avrxmega7",
4496 .llvm_name = "avrxmega7",
4497 .dependencies = &[_]*const Feature {
4498 &feature_spmx,
4499 &feature_des,
4500 &feature_lpmx,
4501 &feature_jmpcall,
4502 &feature_lpm,
4503 &feature_elpm,
4504 &feature_sram,
4505 &feature_addsubiw,
4506 &feature_elpmx,
4507 &feature_movw,
4508 &feature_ijmpcall,
4509 &feature_break,
4510 &feature_eijmpcall,
4511 &feature_spm,
4512 &feature_mul,
4513 },
4514};
4515
4516pub const cpu_m3000 = Cpu{
4517 .name = "m3000",
4518 .llvm_name = "m3000",
4519 .dependencies = &[_]*const Feature {
4520 &feature_lpmx,
4521 &feature_jmpcall,
4522 &feature_lpm,
4523 &feature_sram,
4524 &feature_addsubiw,
4525 &feature_movw,
4526 &feature_ijmpcall,
4527 &feature_break,
4528 &feature_spm,
4529 &feature_mul,
4530 },
4531};
4532
4533pub const cpus = &[_]*const Cpu {
4534 &cpu_at43usb320,
4535 &cpu_at43usb355,
4536 &cpu_at76c711,
4537 &cpu_at86rf401,
4538 &cpu_at90c8534,
4539 &cpu_at90can128,
4540 &cpu_at90can32,
4541 &cpu_at90can64,
4542 &cpu_at90pwm1,
4543 &cpu_at90pwm161,
4544 &cpu_at90pwm2,
4545 &cpu_at90pwm216,
4546 &cpu_at90pwm2b,
4547 &cpu_at90pwm3,
4548 &cpu_at90pwm316,
4549 &cpu_at90pwm3b,
4550 &cpu_at90pwm81,
4551 &cpu_at90s1200,
4552 &cpu_at90s2313,
4553 &cpu_at90s2323,
4554 &cpu_at90s2333,
4555 &cpu_at90s2343,
4556 &cpu_at90s4414,
4557 &cpu_at90s4433,
4558 &cpu_at90s4434,
4559 &cpu_at90s8515,
4560 &cpu_at90s8535,
4561 &cpu_at90scr100,
4562 &cpu_at90usb1286,
4563 &cpu_at90usb1287,
4564 &cpu_at90usb162,
4565 &cpu_at90usb646,
4566 &cpu_at90usb647,
4567 &cpu_at90usb82,
4568 &cpu_at94k,
4569 &cpu_ata5272,
4570 &cpu_ata5505,
4571 &cpu_ata5790,
4572 &cpu_ata5795,
4573 &cpu_ata6285,
4574 &cpu_ata6286,
4575 &cpu_ata6289,
4576 &cpu_atmega103,
4577 &cpu_atmega128,
4578 &cpu_atmega1280,
4579 &cpu_atmega1281,
4580 &cpu_atmega1284,
4581 &cpu_atmega1284p,
4582 &cpu_atmega1284rfr2,
4583 &cpu_atmega128a,
4584 &cpu_atmega128rfa1,
4585 &cpu_atmega128rfr2,
4586 &cpu_atmega16,
4587 &cpu_atmega161,
4588 &cpu_atmega162,
4589 &cpu_atmega163,
4590 &cpu_atmega164a,
4591 &cpu_atmega164p,
4592 &cpu_atmega164pa,
4593 &cpu_atmega165,
4594 &cpu_atmega165a,
4595 &cpu_atmega165p,
4596 &cpu_atmega165pa,
4597 &cpu_atmega168,
4598 &cpu_atmega168a,
4599 &cpu_atmega168p,
4600 &cpu_atmega168pa,
4601 &cpu_atmega169,
4602 &cpu_atmega169a,
4603 &cpu_atmega169p,
4604 &cpu_atmega169pa,
4605 &cpu_atmega16a,
4606 &cpu_atmega16hva,
4607 &cpu_atmega16hva2,
4608 &cpu_atmega16hvb,
4609 &cpu_atmega16hvbrevb,
4610 &cpu_atmega16m1,
4611 &cpu_atmega16u2,
4612 &cpu_atmega16u4,
4613 &cpu_atmega2560,
4614 &cpu_atmega2561,
4615 &cpu_atmega2564rfr2,
4616 &cpu_atmega256rfr2,
4617 &cpu_atmega32,
4618 &cpu_atmega323,
4619 &cpu_atmega324a,
4620 &cpu_atmega324p,
4621 &cpu_atmega324pa,
4622 &cpu_atmega325,
4623 &cpu_atmega3250,
4624 &cpu_atmega3250a,
4625 &cpu_atmega3250p,
4626 &cpu_atmega3250pa,
4627 &cpu_atmega325a,
4628 &cpu_atmega325p,
4629 &cpu_atmega325pa,
4630 &cpu_atmega328,
4631 &cpu_atmega328p,
4632 &cpu_atmega329,
4633 &cpu_atmega3290,
4634 &cpu_atmega3290a,
4635 &cpu_atmega3290p,
4636 &cpu_atmega3290pa,
4637 &cpu_atmega329a,
4638 &cpu_atmega329p,
4639 &cpu_atmega329pa,
4640 &cpu_atmega32a,
4641 &cpu_atmega32c1,
4642 &cpu_atmega32hvb,
4643 &cpu_atmega32hvbrevb,
4644 &cpu_atmega32m1,
4645 &cpu_atmega32u2,
4646 &cpu_atmega32u4,
4647 &cpu_atmega32u6,
4648 &cpu_atmega406,
4649 &cpu_atmega48,
4650 &cpu_atmega48a,
4651 &cpu_atmega48p,
4652 &cpu_atmega48pa,
4653 &cpu_atmega64,
4654 &cpu_atmega640,
4655 &cpu_atmega644,
4656 &cpu_atmega644a,
4657 &cpu_atmega644p,
4658 &cpu_atmega644pa,
4659 &cpu_atmega644rfr2,
4660 &cpu_atmega645,
4661 &cpu_atmega6450,
4662 &cpu_atmega6450a,
4663 &cpu_atmega6450p,
4664 &cpu_atmega645a,
4665 &cpu_atmega645p,
4666 &cpu_atmega649,
4667 &cpu_atmega6490,
4668 &cpu_atmega6490a,
4669 &cpu_atmega6490p,
4670 &cpu_atmega649a,
4671 &cpu_atmega649p,
4672 &cpu_atmega64a,
4673 &cpu_atmega64c1,
4674 &cpu_atmega64hve,
4675 &cpu_atmega64m1,
4676 &cpu_atmega64rfr2,
4677 &cpu_atmega8,
4678 &cpu_atmega8515,
4679 &cpu_atmega8535,
4680 &cpu_atmega88,
4681 &cpu_atmega88a,
4682 &cpu_atmega88p,
4683 &cpu_atmega88pa,
4684 &cpu_atmega8a,
4685 &cpu_atmega8hva,
4686 &cpu_atmega8u2,
4687 &cpu_attiny10,
4688 &cpu_attiny102,
4689 &cpu_attiny104,
4690 &cpu_attiny11,
4691 &cpu_attiny12,
4692 &cpu_attiny13,
4693 &cpu_attiny13a,
4694 &cpu_attiny15,
4695 &cpu_attiny1634,
4696 &cpu_attiny167,
4697 &cpu_attiny20,
4698 &cpu_attiny22,
4699 &cpu_attiny2313,
4700 &cpu_attiny2313a,
4701 &cpu_attiny24,
4702 &cpu_attiny24a,
4703 &cpu_attiny25,
4704 &cpu_attiny26,
4705 &cpu_attiny261,
4706 &cpu_attiny261a,
4707 &cpu_attiny28,
4708 &cpu_attiny4,
4709 &cpu_attiny40,
4710 &cpu_attiny4313,
4711 &cpu_attiny43u,
4712 &cpu_attiny44,
4713 &cpu_attiny44a,
4714 &cpu_attiny45,
4715 &cpu_attiny461,
4716 &cpu_attiny461a,
4717 &cpu_attiny48,
4718 &cpu_attiny5,
4719 &cpu_attiny828,
4720 &cpu_attiny84,
4721 &cpu_attiny84a,
4722 &cpu_attiny85,
4723 &cpu_attiny861,
4724 &cpu_attiny861a,
4725 &cpu_attiny87,
4726 &cpu_attiny88,
4727 &cpu_attiny9,
4728 &cpu_atxmega128a1,
4729 &cpu_atxmega128a1u,
4730 &cpu_atxmega128a3,
4731 &cpu_atxmega128a3u,
4732 &cpu_atxmega128a4u,
4733 &cpu_atxmega128b1,
4734 &cpu_atxmega128b3,
4735 &cpu_atxmega128c3,
4736 &cpu_atxmega128d3,
4737 &cpu_atxmega128d4,
4738 &cpu_atxmega16a4,
4739 &cpu_atxmega16a4u,
4740 &cpu_atxmega16c4,
4741 &cpu_atxmega16d4,
4742 &cpu_atxmega16e5,
4743 &cpu_atxmega192a3,
4744 &cpu_atxmega192a3u,
4745 &cpu_atxmega192c3,
4746 &cpu_atxmega192d3,
4747 &cpu_atxmega256a3,
4748 &cpu_atxmega256a3b,
4749 &cpu_atxmega256a3bu,
4750 &cpu_atxmega256a3u,
4751 &cpu_atxmega256c3,
4752 &cpu_atxmega256d3,
4753 &cpu_atxmega32a4,
4754 &cpu_atxmega32a4u,
4755 &cpu_atxmega32c4,
4756 &cpu_atxmega32d4,
4757 &cpu_atxmega32e5,
4758 &cpu_atxmega32x1,
4759 &cpu_atxmega384c3,
4760 &cpu_atxmega384d3,
4761 &cpu_atxmega64a1,
4762 &cpu_atxmega64a1u,
4763 &cpu_atxmega64a3,
4764 &cpu_atxmega64a3u,
4765 &cpu_atxmega64a4u,
4766 &cpu_atxmega64b1,
4767 &cpu_atxmega64b3,
4768 &cpu_atxmega64c3,
4769 &cpu_atxmega64d3,
4770 &cpu_atxmega64d4,
4771 &cpu_atxmega8e5,
4772 &cpu_avr1,
4773 &cpu_avr2,
4774 &cpu_avr25,
4775 &cpu_avr3,
4776 &cpu_avr31,
4777 &cpu_avr35,
4778 &cpu_avr4,
4779 &cpu_avr5,
4780 &cpu_avr51,
4781 &cpu_avr6,
4782 &cpu_avrtiny,
4783 &cpu_avrxmega1,
4784 &cpu_avrxmega2,
4785 &cpu_avrxmega3,
4786 &cpu_avrxmega4,
4787 &cpu_avrxmega5,
4788 &cpu_avrxmega6,
4789 &cpu_avrxmega7,
4790 &cpu_m3000,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 addsubiw,
6 avr0,
7 avr1,
8 avr2,
9 avr25,
10 avr3,
11 avr31,
12 avr35,
13 avr4,
14 avr5,
15 avr51,
16 avr6,
17 avrtiny,
18 break,
19 des,
20 eijmpcall,
21 elpm,
22 elpmx,
23 ijmpcall,
24 jmpcall,
25 lpm,
26 lpmx,
27 movw,
28 mul,
29 rmw,
30 smallstack,
31 special,
32 spm,
33 spmx,
34 sram,
35 tinyencoding,
36 xmega,
37 xmegau,
38};
39
40pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
41
42pub const all_features = blk: {
43 const len = @typeInfo(Feature).Enum.fields.len;
44 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
45 var result: [len]Cpu.Feature = undefined;
46 result[@enumToInt(Feature.addsubiw)] = .{
47 .index = @enumToInt(Feature.addsubiw),
48 .name = @tagName(Feature.addsubiw),
49 .llvm_name = "addsubiw",
50 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
51 .dependencies = 0,
52 };
53 result[@enumToInt(Feature.avr0)] = .{
54 .index = @enumToInt(Feature.avr0),
55 .name = @tagName(Feature.avr0),
56 .llvm_name = "avr0",
57 .description = "The device is a part of the avr0 family",
58 .dependencies = 0,
59 };
60 result[@enumToInt(Feature.avr1)] = .{
61 .index = @enumToInt(Feature.avr1),
62 .name = @tagName(Feature.avr1),
63 .llvm_name = "avr1",
64 .description = "The device is a part of the avr1 family",
65 .dependencies = featureSet(&[_]Feature{
66 .avr0,
67 .lpm,
68 }),
69 };
70 result[@enumToInt(Feature.avr2)] = .{
71 .index = @enumToInt(Feature.avr2),
72 .name = @tagName(Feature.avr2),
73 .llvm_name = "avr2",
74 .description = "The device is a part of the avr2 family",
75 .dependencies = featureSet(&[_]Feature{
76 .addsubiw,
77 .avr1,
78 .ijmpcall,
79 .sram,
80 }),
81 };
82 result[@enumToInt(Feature.avr25)] = .{
83 .index = @enumToInt(Feature.avr25),
84 .name = @tagName(Feature.avr25),
85 .llvm_name = "avr25",
86 .description = "The device is a part of the avr25 family",
87 .dependencies = featureSet(&[_]Feature{
88 .avr2,
89 .break,
90 .lpmx,
91 .movw,
92 .spm,
93 }),
94 };
95 result[@enumToInt(Feature.avr3)] = .{
96 .index = @enumToInt(Feature.avr3),
97 .name = @tagName(Feature.avr3),
98 .llvm_name = "avr3",
99 .description = "The device is a part of the avr3 family",
100 .dependencies = featureSet(&[_]Feature{
101 .avr2,
102 .jmpcall,
103 }),
104 };
105 result[@enumToInt(Feature.avr31)] = .{
106 .index = @enumToInt(Feature.avr31),
107 .name = @tagName(Feature.avr31),
108 .llvm_name = "avr31",
109 .description = "The device is a part of the avr31 family",
110 .dependencies = featureSet(&[_]Feature{
111 .avr3,
112 .elpm,
113 }),
114 };
115 result[@enumToInt(Feature.avr35)] = .{
116 .index = @enumToInt(Feature.avr35),
117 .name = @tagName(Feature.avr35),
118 .llvm_name = "avr35",
119 .description = "The device is a part of the avr35 family",
120 .dependencies = featureSet(&[_]Feature{
121 .avr3,
122 .break,
123 .lpmx,
124 .movw,
125 .spm,
126 }),
127 };
128 result[@enumToInt(Feature.avr4)] = .{
129 .index = @enumToInt(Feature.avr4),
130 .name = @tagName(Feature.avr4),
131 .llvm_name = "avr4",
132 .description = "The device is a part of the avr4 family",
133 .dependencies = featureSet(&[_]Feature{
134 .avr2,
135 .break,
136 .lpmx,
137 .movw,
138 .mul,
139 .spm,
140 }),
141 };
142 result[@enumToInt(Feature.avr5)] = .{
143 .index = @enumToInt(Feature.avr5),
144 .name = @tagName(Feature.avr5),
145 .llvm_name = "avr5",
146 .description = "The device is a part of the avr5 family",
147 .dependencies = featureSet(&[_]Feature{
148 .avr3,
149 .break,
150 .lpmx,
151 .movw,
152 .mul,
153 .spm,
154 }),
155 };
156 result[@enumToInt(Feature.avr51)] = .{
157 .index = @enumToInt(Feature.avr51),
158 .name = @tagName(Feature.avr51),
159 .llvm_name = "avr51",
160 .description = "The device is a part of the avr51 family",
161 .dependencies = featureSet(&[_]Feature{
162 .avr5,
163 .elpm,
164 .elpmx,
165 }),
166 };
167 result[@enumToInt(Feature.avr6)] = .{
168 .index = @enumToInt(Feature.avr6),
169 .name = @tagName(Feature.avr6),
170 .llvm_name = "avr6",
171 .description = "The device is a part of the avr6 family",
172 .dependencies = featureSet(&[_]Feature{
173 .avr51,
174 }),
175 };
176 result[@enumToInt(Feature.avrtiny)] = .{
177 .index = @enumToInt(Feature.avrtiny),
178 .name = @tagName(Feature.avrtiny),
179 .llvm_name = "avrtiny",
180 .description = "The device is a part of the avrtiny family",
181 .dependencies = featureSet(&[_]Feature{
182 .avr0,
183 .break,
184 .sram,
185 .tinyencoding,
186 }),
187 };
188 result[@enumToInt(Feature.break)] = .{
189 .index = @enumToInt(Feature.break),
190 .name = @tagName(Feature.break),
191 .llvm_name = "break",
192 .description = "The device supports the `BREAK` debugging instruction",
193 .dependencies = 0,
194 };
195 result[@enumToInt(Feature.des)] = .{
196 .index = @enumToInt(Feature.des),
197 .name = @tagName(Feature.des),
198 .llvm_name = "des",
199 .description = "The device supports the `DES k` encryption instruction",
200 .dependencies = 0,
201 };
202 result[@enumToInt(Feature.eijmpcall)] = .{
203 .index = @enumToInt(Feature.eijmpcall),
204 .name = @tagName(Feature.eijmpcall),
205 .llvm_name = "eijmpcall",
206 .description = "The device supports the `EIJMP`/`EICALL` instructions",
207 .dependencies = 0,
208 };
209 result[@enumToInt(Feature.elpm)] = .{
210 .index = @enumToInt(Feature.elpm),
211 .name = @tagName(Feature.elpm),
212 .llvm_name = "elpm",
213 .description = "The device supports the ELPM instruction",
214 .dependencies = 0,
215 };
216 result[@enumToInt(Feature.elpmx)] = .{
217 .index = @enumToInt(Feature.elpmx),
218 .name = @tagName(Feature.elpmx),
219 .llvm_name = "elpmx",
220 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
221 .dependencies = 0,
222 };
223 result[@enumToInt(Feature.ijmpcall)] = .{
224 .index = @enumToInt(Feature.ijmpcall),
225 .name = @tagName(Feature.ijmpcall),
226 .llvm_name = "ijmpcall",
227 .description = "The device supports `IJMP`/`ICALL`instructions",
228 .dependencies = 0,
229 };
230 result[@enumToInt(Feature.jmpcall)] = .{
231 .index = @enumToInt(Feature.jmpcall),
232 .name = @tagName(Feature.jmpcall),
233 .llvm_name = "jmpcall",
234 .description = "The device supports the `JMP` and `CALL` instructions",
235 .dependencies = 0,
236 };
237 result[@enumToInt(Feature.lpm)] = .{
238 .index = @enumToInt(Feature.lpm),
239 .name = @tagName(Feature.lpm),
240 .llvm_name = "lpm",
241 .description = "The device supports the `LPM` instruction",
242 .dependencies = 0,
243 };
244 result[@enumToInt(Feature.lpmx)] = .{
245 .index = @enumToInt(Feature.lpmx),
246 .name = @tagName(Feature.lpmx),
247 .llvm_name = "lpmx",
248 .description = "The device supports the `LPM Rd, Z[+]` instruction",
249 .dependencies = 0,
250 };
251 result[@enumToInt(Feature.movw)] = .{
252 .index = @enumToInt(Feature.movw),
253 .name = @tagName(Feature.movw),
254 .llvm_name = "movw",
255 .description = "The device supports the 16-bit MOVW instruction",
256 .dependencies = 0,
257 };
258 result[@enumToInt(Feature.mul)] = .{
259 .index = @enumToInt(Feature.mul),
260 .name = @tagName(Feature.mul),
261 .llvm_name = "mul",
262 .description = "The device supports the multiplication instructions",
263 .dependencies = 0,
264 };
265 result[@enumToInt(Feature.rmw)] = .{
266 .index = @enumToInt(Feature.rmw),
267 .name = @tagName(Feature.rmw),
268 .llvm_name = "rmw",
269 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
270 .dependencies = 0,
271 };
272 result[@enumToInt(Feature.smallstack)] = .{
273 .index = @enumToInt(Feature.smallstack),
274 .name = @tagName(Feature.smallstack),
275 .llvm_name = "smallstack",
276 .description = "The device has an 8-bit stack pointer",
277 .dependencies = 0,
278 };
279 result[@enumToInt(Feature.special)] = .{
280 .index = @enumToInt(Feature.special),
281 .name = @tagName(Feature.special),
282 .llvm_name = "special",
283 .description = "Enable use of the entire instruction set - used for debugging",
284 .dependencies = featureSet(&[_]Feature{
285 .addsubiw,
286 .break,
287 .des,
288 .eijmpcall,
289 .elpm,
290 .elpmx,
291 .ijmpcall,
292 .jmpcall,
293 .lpm,
294 .lpmx,
295 .movw,
296 .mul,
297 .rmw,
298 .spm,
299 .spmx,
300 .sram,
301 }),
302 };
303 result[@enumToInt(Feature.spm)] = .{
304 .index = @enumToInt(Feature.spm),
305 .name = @tagName(Feature.spm),
306 .llvm_name = "spm",
307 .description = "The device supports the `SPM` instruction",
308 .dependencies = 0,
309 };
310 result[@enumToInt(Feature.spmx)] = .{
311 .index = @enumToInt(Feature.spmx),
312 .name = @tagName(Feature.spmx),
313 .llvm_name = "spmx",
314 .description = "The device supports the `SPM Z+` instruction",
315 .dependencies = 0,
316 };
317 result[@enumToInt(Feature.sram)] = .{
318 .index = @enumToInt(Feature.sram),
319 .name = @tagName(Feature.sram),
320 .llvm_name = "sram",
321 .description = "The device has random access memory",
322 .dependencies = 0,
323 };
324 result[@enumToInt(Feature.tinyencoding)] = .{
325 .index = @enumToInt(Feature.tinyencoding),
326 .name = @tagName(Feature.tinyencoding),
327 .llvm_name = "tinyencoding",
328 .description = "The device has Tiny core specific instruction encodings",
329 .dependencies = 0,
330 };
331 result[@enumToInt(Feature.xmega)] = .{
332 .index = @enumToInt(Feature.xmega),
333 .name = @tagName(Feature.xmega),
334 .llvm_name = "xmega",
335 .description = "The device is a part of the xmega family",
336 .dependencies = featureSet(&[_]Feature{
337 .avr51,
338 .des,
339 .eijmpcall,
340 .spmx,
341 }),
342 };
343 result[@enumToInt(Feature.xmegau)] = .{
344 .index = @enumToInt(Feature.xmegau),
345 .name = @tagName(Feature.xmegau),
346 .llvm_name = "xmegau",
347 .description = "The device is a part of the xmegau family",
348 .dependencies = featureSet(&[_]Feature{
349 .rmw,
350 .xmega,
351 }),
352 };
353 break :blk result;
354};
355
356pub const cpu = struct {
357 pub const at43usb320 = Cpu{
358 .name = "at43usb320",
359 .llvm_name = "at43usb320",
360 .features = featureSet(&[_]Feature{
361 .avr31,
362 }),
363 };
364 pub const at43usb355 = Cpu{
365 .name = "at43usb355",
366 .llvm_name = "at43usb355",
367 .features = featureSet(&[_]Feature{
368 .avr3,
369 }),
370 };
371 pub const at76c711 = Cpu{
372 .name = "at76c711",
373 .llvm_name = "at76c711",
374 .features = featureSet(&[_]Feature{
375 .avr3,
376 }),
377 };
378 pub const at86rf401 = Cpu{
379 .name = "at86rf401",
380 .llvm_name = "at86rf401",
381 .features = featureSet(&[_]Feature{
382 .avr2,
383 .lpmx,
384 .movw,
385 }),
386 };
387 pub const at90c8534 = Cpu{
388 .name = "at90c8534",
389 .llvm_name = "at90c8534",
390 .features = featureSet(&[_]Feature{
391 .avr2,
392 }),
393 };
394 pub const at90can128 = Cpu{
395 .name = "at90can128",
396 .llvm_name = "at90can128",
397 .features = featureSet(&[_]Feature{
398 .avr51,
399 }),
400 };
401 pub const at90can32 = Cpu{
402 .name = "at90can32",
403 .llvm_name = "at90can32",
404 .features = featureSet(&[_]Feature{
405 .avr5,
406 }),
407 };
408 pub const at90can64 = Cpu{
409 .name = "at90can64",
410 .llvm_name = "at90can64",
411 .features = featureSet(&[_]Feature{
412 .avr5,
413 }),
414 };
415 pub const at90pwm1 = Cpu{
416 .name = "at90pwm1",
417 .llvm_name = "at90pwm1",
418 .features = featureSet(&[_]Feature{
419 .avr4,
420 }),
421 };
422 pub const at90pwm161 = Cpu{
423 .name = "at90pwm161",
424 .llvm_name = "at90pwm161",
425 .features = featureSet(&[_]Feature{
426 .avr5,
427 }),
428 };
429 pub const at90pwm2 = Cpu{
430 .name = "at90pwm2",
431 .llvm_name = "at90pwm2",
432 .features = featureSet(&[_]Feature{
433 .avr4,
434 }),
435 };
436 pub const at90pwm216 = Cpu{
437 .name = "at90pwm216",
438 .llvm_name = "at90pwm216",
439 .features = featureSet(&[_]Feature{
440 .avr5,
441 }),
442 };
443 pub const at90pwm2b = Cpu{
444 .name = "at90pwm2b",
445 .llvm_name = "at90pwm2b",
446 .features = featureSet(&[_]Feature{
447 .avr4,
448 }),
449 };
450 pub const at90pwm3 = Cpu{
451 .name = "at90pwm3",
452 .llvm_name = "at90pwm3",
453 .features = featureSet(&[_]Feature{
454 .avr4,
455 }),
456 };
457 pub const at90pwm316 = Cpu{
458 .name = "at90pwm316",
459 .llvm_name = "at90pwm316",
460 .features = featureSet(&[_]Feature{
461 .avr5,
462 }),
463 };
464 pub const at90pwm3b = Cpu{
465 .name = "at90pwm3b",
466 .llvm_name = "at90pwm3b",
467 .features = featureSet(&[_]Feature{
468 .avr4,
469 }),
470 };
471 pub const at90pwm81 = Cpu{
472 .name = "at90pwm81",
473 .llvm_name = "at90pwm81",
474 .features = featureSet(&[_]Feature{
475 .avr4,
476 }),
477 };
478 pub const at90s1200 = Cpu{
479 .name = "at90s1200",
480 .llvm_name = "at90s1200",
481 .features = featureSet(&[_]Feature{
482 .avr0,
483 }),
484 };
485 pub const at90s2313 = Cpu{
486 .name = "at90s2313",
487 .llvm_name = "at90s2313",
488 .features = featureSet(&[_]Feature{
489 .avr2,
490 }),
491 };
492 pub const at90s2323 = Cpu{
493 .name = "at90s2323",
494 .llvm_name = "at90s2323",
495 .features = featureSet(&[_]Feature{
496 .avr2,
497 }),
498 };
499 pub const at90s2333 = Cpu{
500 .name = "at90s2333",
501 .llvm_name = "at90s2333",
502 .features = featureSet(&[_]Feature{
503 .avr2,
504 }),
505 };
506 pub const at90s2343 = Cpu{
507 .name = "at90s2343",
508 .llvm_name = "at90s2343",
509 .features = featureSet(&[_]Feature{
510 .avr2,
511 }),
512 };
513 pub const at90s4414 = Cpu{
514 .name = "at90s4414",
515 .llvm_name = "at90s4414",
516 .features = featureSet(&[_]Feature{
517 .avr2,
518 }),
519 };
520 pub const at90s4433 = Cpu{
521 .name = "at90s4433",
522 .llvm_name = "at90s4433",
523 .features = featureSet(&[_]Feature{
524 .avr2,
525 }),
526 };
527 pub const at90s4434 = Cpu{
528 .name = "at90s4434",
529 .llvm_name = "at90s4434",
530 .features = featureSet(&[_]Feature{
531 .avr2,
532 }),
533 };
534 pub const at90s8515 = Cpu{
535 .name = "at90s8515",
536 .llvm_name = "at90s8515",
537 .features = featureSet(&[_]Feature{
538 .avr2,
539 }),
540 };
541 pub const at90s8535 = Cpu{
542 .name = "at90s8535",
543 .llvm_name = "at90s8535",
544 .features = featureSet(&[_]Feature{
545 .avr2,
546 }),
547 };
548 pub const at90scr100 = Cpu{
549 .name = "at90scr100",
550 .llvm_name = "at90scr100",
551 .features = featureSet(&[_]Feature{
552 .avr5,
553 }),
554 };
555 pub const at90usb1286 = Cpu{
556 .name = "at90usb1286",
557 .llvm_name = "at90usb1286",
558 .features = featureSet(&[_]Feature{
559 .avr51,
560 }),
561 };
562 pub const at90usb1287 = Cpu{
563 .name = "at90usb1287",
564 .llvm_name = "at90usb1287",
565 .features = featureSet(&[_]Feature{
566 .avr51,
567 }),
568 };
569 pub const at90usb162 = Cpu{
570 .name = "at90usb162",
571 .llvm_name = "at90usb162",
572 .features = featureSet(&[_]Feature{
573 .avr35,
574 }),
575 };
576 pub const at90usb646 = Cpu{
577 .name = "at90usb646",
578 .llvm_name = "at90usb646",
579 .features = featureSet(&[_]Feature{
580 .avr5,
581 }),
582 };
583 pub const at90usb647 = Cpu{
584 .name = "at90usb647",
585 .llvm_name = "at90usb647",
586 .features = featureSet(&[_]Feature{
587 .avr5,
588 }),
589 };
590 pub const at90usb82 = Cpu{
591 .name = "at90usb82",
592 .llvm_name = "at90usb82",
593 .features = featureSet(&[_]Feature{
594 .avr35,
595 }),
596 };
597 pub const at94k = Cpu{
598 .name = "at94k",
599 .llvm_name = "at94k",
600 .features = featureSet(&[_]Feature{
601 .avr3,
602 .lpmx,
603 .movw,
604 .mul,
605 }),
606 };
607 pub const ata5272 = Cpu{
608 .name = "ata5272",
609 .llvm_name = "ata5272",
610 .features = featureSet(&[_]Feature{
611 .avr25,
612 }),
613 };
614 pub const ata5505 = Cpu{
615 .name = "ata5505",
616 .llvm_name = "ata5505",
617 .features = featureSet(&[_]Feature{
618 .avr35,
619 }),
620 };
621 pub const ata5790 = Cpu{
622 .name = "ata5790",
623 .llvm_name = "ata5790",
624 .features = featureSet(&[_]Feature{
625 .avr5,
626 }),
627 };
628 pub const ata5795 = Cpu{
629 .name = "ata5795",
630 .llvm_name = "ata5795",
631 .features = featureSet(&[_]Feature{
632 .avr5,
633 }),
634 };
635 pub const ata6285 = Cpu{
636 .name = "ata6285",
637 .llvm_name = "ata6285",
638 .features = featureSet(&[_]Feature{
639 .avr4,
640 }),
641 };
642 pub const ata6286 = Cpu{
643 .name = "ata6286",
644 .llvm_name = "ata6286",
645 .features = featureSet(&[_]Feature{
646 .avr4,
647 }),
648 };
649 pub const ata6289 = Cpu{
650 .name = "ata6289",
651 .llvm_name = "ata6289",
652 .features = featureSet(&[_]Feature{
653 .avr4,
654 }),
655 };
656 pub const atmega103 = Cpu{
657 .name = "atmega103",
658 .llvm_name = "atmega103",
659 .features = featureSet(&[_]Feature{
660 .avr31,
661 }),
662 };
663 pub const atmega128 = Cpu{
664 .name = "atmega128",
665 .llvm_name = "atmega128",
666 .features = featureSet(&[_]Feature{
667 .avr51,
668 }),
669 };
670 pub const atmega1280 = Cpu{
671 .name = "atmega1280",
672 .llvm_name = "atmega1280",
673 .features = featureSet(&[_]Feature{
674 .avr51,
675 }),
676 };
677 pub const atmega1281 = Cpu{
678 .name = "atmega1281",
679 .llvm_name = "atmega1281",
680 .features = featureSet(&[_]Feature{
681 .avr51,
682 }),
683 };
684 pub const atmega1284 = Cpu{
685 .name = "atmega1284",
686 .llvm_name = "atmega1284",
687 .features = featureSet(&[_]Feature{
688 .avr51,
689 }),
690 };
691 pub const atmega1284p = Cpu{
692 .name = "atmega1284p",
693 .llvm_name = "atmega1284p",
694 .features = featureSet(&[_]Feature{
695 .avr51,
696 }),
697 };
698 pub const atmega1284rfr2 = Cpu{
699 .name = "atmega1284rfr2",
700 .llvm_name = "atmega1284rfr2",
701 .features = featureSet(&[_]Feature{
702 .avr51,
703 }),
704 };
705 pub const atmega128a = Cpu{
706 .name = "atmega128a",
707 .llvm_name = "atmega128a",
708 .features = featureSet(&[_]Feature{
709 .avr51,
710 }),
711 };
712 pub const atmega128rfa1 = Cpu{
713 .name = "atmega128rfa1",
714 .llvm_name = "atmega128rfa1",
715 .features = featureSet(&[_]Feature{
716 .avr51,
717 }),
718 };
719 pub const atmega128rfr2 = Cpu{
720 .name = "atmega128rfr2",
721 .llvm_name = "atmega128rfr2",
722 .features = featureSet(&[_]Feature{
723 .avr51,
724 }),
725 };
726 pub const atmega16 = Cpu{
727 .name = "atmega16",
728 .llvm_name = "atmega16",
729 .features = featureSet(&[_]Feature{
730 .avr5,
731 }),
732 };
733 pub const atmega161 = Cpu{
734 .name = "atmega161",
735 .llvm_name = "atmega161",
736 .features = featureSet(&[_]Feature{
737 .avr3,
738 .lpmx,
739 .movw,
740 .mul,
741 .spm,
742 }),
743 };
744 pub const atmega162 = Cpu{
745 .name = "atmega162",
746 .llvm_name = "atmega162",
747 .features = featureSet(&[_]Feature{
748 .avr5,
749 }),
750 };
751 pub const atmega163 = Cpu{
752 .name = "atmega163",
753 .llvm_name = "atmega163",
754 .features = featureSet(&[_]Feature{
755 .avr3,
756 .lpmx,
757 .movw,
758 .mul,
759 .spm,
760 }),
761 };
762 pub const atmega164a = Cpu{
763 .name = "atmega164a",
764 .llvm_name = "atmega164a",
765 .features = featureSet(&[_]Feature{
766 .avr5,
767 }),
768 };
769 pub const atmega164p = Cpu{
770 .name = "atmega164p",
771 .llvm_name = "atmega164p",
772 .features = featureSet(&[_]Feature{
773 .avr5,
774 }),
775 };
776 pub const atmega164pa = Cpu{
777 .name = "atmega164pa",
778 .llvm_name = "atmega164pa",
779 .features = featureSet(&[_]Feature{
780 .avr5,
781 }),
782 };
783 pub const atmega165 = Cpu{
784 .name = "atmega165",
785 .llvm_name = "atmega165",
786 .features = featureSet(&[_]Feature{
787 .avr5,
788 }),
789 };
790 pub const atmega165a = Cpu{
791 .name = "atmega165a",
792 .llvm_name = "atmega165a",
793 .features = featureSet(&[_]Feature{
794 .avr5,
795 }),
796 };
797 pub const atmega165p = Cpu{
798 .name = "atmega165p",
799 .llvm_name = "atmega165p",
800 .features = featureSet(&[_]Feature{
801 .avr5,
802 }),
803 };
804 pub const atmega165pa = Cpu{
805 .name = "atmega165pa",
806 .llvm_name = "atmega165pa",
807 .features = featureSet(&[_]Feature{
808 .avr5,
809 }),
810 };
811 pub const atmega168 = Cpu{
812 .name = "atmega168",
813 .llvm_name = "atmega168",
814 .features = featureSet(&[_]Feature{
815 .avr5,
816 }),
817 };
818 pub const atmega168a = Cpu{
819 .name = "atmega168a",
820 .llvm_name = "atmega168a",
821 .features = featureSet(&[_]Feature{
822 .avr5,
823 }),
824 };
825 pub const atmega168p = Cpu{
826 .name = "atmega168p",
827 .llvm_name = "atmega168p",
828 .features = featureSet(&[_]Feature{
829 .avr5,
830 }),
831 };
832 pub const atmega168pa = Cpu{
833 .name = "atmega168pa",
834 .llvm_name = "atmega168pa",
835 .features = featureSet(&[_]Feature{
836 .avr5,
837 }),
838 };
839 pub const atmega169 = Cpu{
840 .name = "atmega169",
841 .llvm_name = "atmega169",
842 .features = featureSet(&[_]Feature{
843 .avr5,
844 }),
845 };
846 pub const atmega169a = Cpu{
847 .name = "atmega169a",
848 .llvm_name = "atmega169a",
849 .features = featureSet(&[_]Feature{
850 .avr5,
851 }),
852 };
853 pub const atmega169p = Cpu{
854 .name = "atmega169p",
855 .llvm_name = "atmega169p",
856 .features = featureSet(&[_]Feature{
857 .avr5,
858 }),
859 };
860 pub const atmega169pa = Cpu{
861 .name = "atmega169pa",
862 .llvm_name = "atmega169pa",
863 .features = featureSet(&[_]Feature{
864 .avr5,
865 }),
866 };
867 pub const atmega16a = Cpu{
868 .name = "atmega16a",
869 .llvm_name = "atmega16a",
870 .features = featureSet(&[_]Feature{
871 .avr5,
872 }),
873 };
874 pub const atmega16hva = Cpu{
875 .name = "atmega16hva",
876 .llvm_name = "atmega16hva",
877 .features = featureSet(&[_]Feature{
878 .avr5,
879 }),
880 };
881 pub const atmega16hva2 = Cpu{
882 .name = "atmega16hva2",
883 .llvm_name = "atmega16hva2",
884 .features = featureSet(&[_]Feature{
885 .avr5,
886 }),
887 };
888 pub const atmega16hvb = Cpu{
889 .name = "atmega16hvb",
890 .llvm_name = "atmega16hvb",
891 .features = featureSet(&[_]Feature{
892 .avr5,
893 }),
894 };
895 pub const atmega16hvbrevb = Cpu{
896 .name = "atmega16hvbrevb",
897 .llvm_name = "atmega16hvbrevb",
898 .features = featureSet(&[_]Feature{
899 .avr5,
900 }),
901 };
902 pub const atmega16m1 = Cpu{
903 .name = "atmega16m1",
904 .llvm_name = "atmega16m1",
905 .features = featureSet(&[_]Feature{
906 .avr5,
907 }),
908 };
909 pub const atmega16u2 = Cpu{
910 .name = "atmega16u2",
911 .llvm_name = "atmega16u2",
912 .features = featureSet(&[_]Feature{
913 .avr35,
914 }),
915 };
916 pub const atmega16u4 = Cpu{
917 .name = "atmega16u4",
918 .llvm_name = "atmega16u4",
919 .features = featureSet(&[_]Feature{
920 .avr5,
921 }),
922 };
923 pub const atmega2560 = Cpu{
924 .name = "atmega2560",
925 .llvm_name = "atmega2560",
926 .features = featureSet(&[_]Feature{
927 .avr6,
928 }),
929 };
930 pub const atmega2561 = Cpu{
931 .name = "atmega2561",
932 .llvm_name = "atmega2561",
933 .features = featureSet(&[_]Feature{
934 .avr6,
935 }),
936 };
937 pub const atmega2564rfr2 = Cpu{
938 .name = "atmega2564rfr2",
939 .llvm_name = "atmega2564rfr2",
940 .features = featureSet(&[_]Feature{
941 .avr6,
942 }),
943 };
944 pub const atmega256rfr2 = Cpu{
945 .name = "atmega256rfr2",
946 .llvm_name = "atmega256rfr2",
947 .features = featureSet(&[_]Feature{
948 .avr6,
949 }),
950 };
951 pub const atmega32 = Cpu{
952 .name = "atmega32",
953 .llvm_name = "atmega32",
954 .features = featureSet(&[_]Feature{
955 .avr5,
956 }),
957 };
958 pub const atmega323 = Cpu{
959 .name = "atmega323",
960 .llvm_name = "atmega323",
961 .features = featureSet(&[_]Feature{
962 .avr5,
963 }),
964 };
965 pub const atmega324a = Cpu{
966 .name = "atmega324a",
967 .llvm_name = "atmega324a",
968 .features = featureSet(&[_]Feature{
969 .avr5,
970 }),
971 };
972 pub const atmega324p = Cpu{
973 .name = "atmega324p",
974 .llvm_name = "atmega324p",
975 .features = featureSet(&[_]Feature{
976 .avr5,
977 }),
978 };
979 pub const atmega324pa = Cpu{
980 .name = "atmega324pa",
981 .llvm_name = "atmega324pa",
982 .features = featureSet(&[_]Feature{
983 .avr5,
984 }),
985 };
986 pub const atmega325 = Cpu{
987 .name = "atmega325",
988 .llvm_name = "atmega325",
989 .features = featureSet(&[_]Feature{
990 .avr5,
991 }),
992 };
993 pub const atmega3250 = Cpu{
994 .name = "atmega3250",
995 .llvm_name = "atmega3250",
996 .features = featureSet(&[_]Feature{
997 .avr5,
998 }),
999 };
1000 pub const atmega3250a = Cpu{
1001 .name = "atmega3250a",
1002 .llvm_name = "atmega3250a",
1003 .features = featureSet(&[_]Feature{
1004 .avr5,
1005 }),
1006 };
1007 pub const atmega3250p = Cpu{
1008 .name = "atmega3250p",
1009 .llvm_name = "atmega3250p",
1010 .features = featureSet(&[_]Feature{
1011 .avr5,
1012 }),
1013 };
1014 pub const atmega3250pa = Cpu{
1015 .name = "atmega3250pa",
1016 .llvm_name = "atmega3250pa",
1017 .features = featureSet(&[_]Feature{
1018 .avr5,
1019 }),
1020 };
1021 pub const atmega325a = Cpu{
1022 .name = "atmega325a",
1023 .llvm_name = "atmega325a",
1024 .features = featureSet(&[_]Feature{
1025 .avr5,
1026 }),
1027 };
1028 pub const atmega325p = Cpu{
1029 .name = "atmega325p",
1030 .llvm_name = "atmega325p",
1031 .features = featureSet(&[_]Feature{
1032 .avr5,
1033 }),
1034 };
1035 pub const atmega325pa = Cpu{
1036 .name = "atmega325pa",
1037 .llvm_name = "atmega325pa",
1038 .features = featureSet(&[_]Feature{
1039 .avr5,
1040 }),
1041 };
1042 pub const atmega328 = Cpu{
1043 .name = "atmega328",
1044 .llvm_name = "atmega328",
1045 .features = featureSet(&[_]Feature{
1046 .avr5,
1047 }),
1048 };
1049 pub const atmega328p = Cpu{
1050 .name = "atmega328p",
1051 .llvm_name = "atmega328p",
1052 .features = featureSet(&[_]Feature{
1053 .avr5,
1054 }),
1055 };
1056 pub const atmega329 = Cpu{
1057 .name = "atmega329",
1058 .llvm_name = "atmega329",
1059 .features = featureSet(&[_]Feature{
1060 .avr5,
1061 }),
1062 };
1063 pub const atmega3290 = Cpu{
1064 .name = "atmega3290",
1065 .llvm_name = "atmega3290",
1066 .features = featureSet(&[_]Feature{
1067 .avr5,
1068 }),
1069 };
1070 pub const atmega3290a = Cpu{
1071 .name = "atmega3290a",
1072 .llvm_name = "atmega3290a",
1073 .features = featureSet(&[_]Feature{
1074 .avr5,
1075 }),
1076 };
1077 pub const atmega3290p = Cpu{
1078 .name = "atmega3290p",
1079 .llvm_name = "atmega3290p",
1080 .features = featureSet(&[_]Feature{
1081 .avr5,
1082 }),
1083 };
1084 pub const atmega3290pa = Cpu{
1085 .name = "atmega3290pa",
1086 .llvm_name = "atmega3290pa",
1087 .features = featureSet(&[_]Feature{
1088 .avr5,
1089 }),
1090 };
1091 pub const atmega329a = Cpu{
1092 .name = "atmega329a",
1093 .llvm_name = "atmega329a",
1094 .features = featureSet(&[_]Feature{
1095 .avr5,
1096 }),
1097 };
1098 pub const atmega329p = Cpu{
1099 .name = "atmega329p",
1100 .llvm_name = "atmega329p",
1101 .features = featureSet(&[_]Feature{
1102 .avr5,
1103 }),
1104 };
1105 pub const atmega329pa = Cpu{
1106 .name = "atmega329pa",
1107 .llvm_name = "atmega329pa",
1108 .features = featureSet(&[_]Feature{
1109 .avr5,
1110 }),
1111 };
1112 pub const atmega32a = Cpu{
1113 .name = "atmega32a",
1114 .llvm_name = "atmega32a",
1115 .features = featureSet(&[_]Feature{
1116 .avr5,
1117 }),
1118 };
1119 pub const atmega32c1 = Cpu{
1120 .name = "atmega32c1",
1121 .llvm_name = "atmega32c1",
1122 .features = featureSet(&[_]Feature{
1123 .avr5,
1124 }),
1125 };
1126 pub const atmega32hvb = Cpu{
1127 .name = "atmega32hvb",
1128 .llvm_name = "atmega32hvb",
1129 .features = featureSet(&[_]Feature{
1130 .avr5,
1131 }),
1132 };
1133 pub const atmega32hvbrevb = Cpu{
1134 .name = "atmega32hvbrevb",
1135 .llvm_name = "atmega32hvbrevb",
1136 .features = featureSet(&[_]Feature{
1137 .avr5,
1138 }),
1139 };
1140 pub const atmega32m1 = Cpu{
1141 .name = "atmega32m1",
1142 .llvm_name = "atmega32m1",
1143 .features = featureSet(&[_]Feature{
1144 .avr5,
1145 }),
1146 };
1147 pub const atmega32u2 = Cpu{
1148 .name = "atmega32u2",
1149 .llvm_name = "atmega32u2",
1150 .features = featureSet(&[_]Feature{
1151 .avr35,
1152 }),
1153 };
1154 pub const atmega32u4 = Cpu{
1155 .name = "atmega32u4",
1156 .llvm_name = "atmega32u4",
1157 .features = featureSet(&[_]Feature{
1158 .avr5,
1159 }),
1160 };
1161 pub const atmega32u6 = Cpu{
1162 .name = "atmega32u6",
1163 .llvm_name = "atmega32u6",
1164 .features = featureSet(&[_]Feature{
1165 .avr5,
1166 }),
1167 };
1168 pub const atmega406 = Cpu{
1169 .name = "atmega406",
1170 .llvm_name = "atmega406",
1171 .features = featureSet(&[_]Feature{
1172 .avr5,
1173 }),
1174 };
1175 pub const atmega48 = Cpu{
1176 .name = "atmega48",
1177 .llvm_name = "atmega48",
1178 .features = featureSet(&[_]Feature{
1179 .avr4,
1180 }),
1181 };
1182 pub const atmega48a = Cpu{
1183 .name = "atmega48a",
1184 .llvm_name = "atmega48a",
1185 .features = featureSet(&[_]Feature{
1186 .avr4,
1187 }),
1188 };
1189 pub const atmega48p = Cpu{
1190 .name = "atmega48p",
1191 .llvm_name = "atmega48p",
1192 .features = featureSet(&[_]Feature{
1193 .avr4,
1194 }),
1195 };
1196 pub const atmega48pa = Cpu{
1197 .name = "atmega48pa",
1198 .llvm_name = "atmega48pa",
1199 .features = featureSet(&[_]Feature{
1200 .avr4,
1201 }),
1202 };
1203 pub const atmega64 = Cpu{
1204 .name = "atmega64",
1205 .llvm_name = "atmega64",
1206 .features = featureSet(&[_]Feature{
1207 .avr5,
1208 }),
1209 };
1210 pub const atmega640 = Cpu{
1211 .name = "atmega640",
1212 .llvm_name = "atmega640",
1213 .features = featureSet(&[_]Feature{
1214 .avr5,
1215 }),
1216 };
1217 pub const atmega644 = Cpu{
1218 .name = "atmega644",
1219 .llvm_name = "atmega644",
1220 .features = featureSet(&[_]Feature{
1221 .avr5,
1222 }),
1223 };
1224 pub const atmega644a = Cpu{
1225 .name = "atmega644a",
1226 .llvm_name = "atmega644a",
1227 .features = featureSet(&[_]Feature{
1228 .avr5,
1229 }),
1230 };
1231 pub const atmega644p = Cpu{
1232 .name = "atmega644p",
1233 .llvm_name = "atmega644p",
1234 .features = featureSet(&[_]Feature{
1235 .avr5,
1236 }),
1237 };
1238 pub const atmega644pa = Cpu{
1239 .name = "atmega644pa",
1240 .llvm_name = "atmega644pa",
1241 .features = featureSet(&[_]Feature{
1242 .avr5,
1243 }),
1244 };
1245 pub const atmega644rfr2 = Cpu{
1246 .name = "atmega644rfr2",
1247 .llvm_name = "atmega644rfr2",
1248 .features = featureSet(&[_]Feature{
1249 .avr5,
1250 }),
1251 };
1252 pub const atmega645 = Cpu{
1253 .name = "atmega645",
1254 .llvm_name = "atmega645",
1255 .features = featureSet(&[_]Feature{
1256 .avr5,
1257 }),
1258 };
1259 pub const atmega6450 = Cpu{
1260 .name = "atmega6450",
1261 .llvm_name = "atmega6450",
1262 .features = featureSet(&[_]Feature{
1263 .avr5,
1264 }),
1265 };
1266 pub const atmega6450a = Cpu{
1267 .name = "atmega6450a",
1268 .llvm_name = "atmega6450a",
1269 .features = featureSet(&[_]Feature{
1270 .avr5,
1271 }),
1272 };
1273 pub const atmega6450p = Cpu{
1274 .name = "atmega6450p",
1275 .llvm_name = "atmega6450p",
1276 .features = featureSet(&[_]Feature{
1277 .avr5,
1278 }),
1279 };
1280 pub const atmega645a = Cpu{
1281 .name = "atmega645a",
1282 .llvm_name = "atmega645a",
1283 .features = featureSet(&[_]Feature{
1284 .avr5,
1285 }),
1286 };
1287 pub const atmega645p = Cpu{
1288 .name = "atmega645p",
1289 .llvm_name = "atmega645p",
1290 .features = featureSet(&[_]Feature{
1291 .avr5,
1292 }),
1293 };
1294 pub const atmega649 = Cpu{
1295 .name = "atmega649",
1296 .llvm_name = "atmega649",
1297 .features = featureSet(&[_]Feature{
1298 .avr5,
1299 }),
1300 };
1301 pub const atmega6490 = Cpu{
1302 .name = "atmega6490",
1303 .llvm_name = "atmega6490",
1304 .features = featureSet(&[_]Feature{
1305 .avr5,
1306 }),
1307 };
1308 pub const atmega6490a = Cpu{
1309 .name = "atmega6490a",
1310 .llvm_name = "atmega6490a",
1311 .features = featureSet(&[_]Feature{
1312 .avr5,
1313 }),
1314 };
1315 pub const atmega6490p = Cpu{
1316 .name = "atmega6490p",
1317 .llvm_name = "atmega6490p",
1318 .features = featureSet(&[_]Feature{
1319 .avr5,
1320 }),
1321 };
1322 pub const atmega649a = Cpu{
1323 .name = "atmega649a",
1324 .llvm_name = "atmega649a",
1325 .features = featureSet(&[_]Feature{
1326 .avr5,
1327 }),
1328 };
1329 pub const atmega649p = Cpu{
1330 .name = "atmega649p",
1331 .llvm_name = "atmega649p",
1332 .features = featureSet(&[_]Feature{
1333 .avr5,
1334 }),
1335 };
1336 pub const atmega64a = Cpu{
1337 .name = "atmega64a",
1338 .llvm_name = "atmega64a",
1339 .features = featureSet(&[_]Feature{
1340 .avr5,
1341 }),
1342 };
1343 pub const atmega64c1 = Cpu{
1344 .name = "atmega64c1",
1345 .llvm_name = "atmega64c1",
1346 .features = featureSet(&[_]Feature{
1347 .avr5,
1348 }),
1349 };
1350 pub const atmega64hve = Cpu{
1351 .name = "atmega64hve",
1352 .llvm_name = "atmega64hve",
1353 .features = featureSet(&[_]Feature{
1354 .avr5,
1355 }),
1356 };
1357 pub const atmega64m1 = Cpu{
1358 .name = "atmega64m1",
1359 .llvm_name = "atmega64m1",
1360 .features = featureSet(&[_]Feature{
1361 .avr5,
1362 }),
1363 };
1364 pub const atmega64rfr2 = Cpu{
1365 .name = "atmega64rfr2",
1366 .llvm_name = "atmega64rfr2",
1367 .features = featureSet(&[_]Feature{
1368 .avr5,
1369 }),
1370 };
1371 pub const atmega8 = Cpu{
1372 .name = "atmega8",
1373 .llvm_name = "atmega8",
1374 .features = featureSet(&[_]Feature{
1375 .avr4,
1376 }),
1377 };
1378 pub const atmega8515 = Cpu{
1379 .name = "atmega8515",
1380 .llvm_name = "atmega8515",
1381 .features = featureSet(&[_]Feature{
1382 .avr2,
1383 .lpmx,
1384 .movw,
1385 .mul,
1386 .spm,
1387 }),
1388 };
1389 pub const atmega8535 = Cpu{
1390 .name = "atmega8535",
1391 .llvm_name = "atmega8535",
1392 .features = featureSet(&[_]Feature{
1393 .avr2,
1394 .lpmx,
1395 .movw,
1396 .mul,
1397 .spm,
1398 }),
1399 };
1400 pub const atmega88 = Cpu{
1401 .name = "atmega88",
1402 .llvm_name = "atmega88",
1403 .features = featureSet(&[_]Feature{
1404 .avr4,
1405 }),
1406 };
1407 pub const atmega88a = Cpu{
1408 .name = "atmega88a",
1409 .llvm_name = "atmega88a",
1410 .features = featureSet(&[_]Feature{
1411 .avr4,
1412 }),
1413 };
1414 pub const atmega88p = Cpu{
1415 .name = "atmega88p",
1416 .llvm_name = "atmega88p",
1417 .features = featureSet(&[_]Feature{
1418 .avr4,
1419 }),
1420 };
1421 pub const atmega88pa = Cpu{
1422 .name = "atmega88pa",
1423 .llvm_name = "atmega88pa",
1424 .features = featureSet(&[_]Feature{
1425 .avr4,
1426 }),
1427 };
1428 pub const atmega8a = Cpu{
1429 .name = "atmega8a",
1430 .llvm_name = "atmega8a",
1431 .features = featureSet(&[_]Feature{
1432 .avr4,
1433 }),
1434 };
1435 pub const atmega8hva = Cpu{
1436 .name = "atmega8hva",
1437 .llvm_name = "atmega8hva",
1438 .features = featureSet(&[_]Feature{
1439 .avr4,
1440 }),
1441 };
1442 pub const atmega8u2 = Cpu{
1443 .name = "atmega8u2",
1444 .llvm_name = "atmega8u2",
1445 .features = featureSet(&[_]Feature{
1446 .avr35,
1447 }),
1448 };
1449 pub const attiny10 = Cpu{
1450 .name = "attiny10",
1451 .llvm_name = "attiny10",
1452 .features = featureSet(&[_]Feature{
1453 .avrtiny,
1454 }),
1455 };
1456 pub const attiny102 = Cpu{
1457 .name = "attiny102",
1458 .llvm_name = "attiny102",
1459 .features = featureSet(&[_]Feature{
1460 .avrtiny,
1461 }),
1462 };
1463 pub const attiny104 = Cpu{
1464 .name = "attiny104",
1465 .llvm_name = "attiny104",
1466 .features = featureSet(&[_]Feature{
1467 .avrtiny,
1468 }),
1469 };
1470 pub const attiny11 = Cpu{
1471 .name = "attiny11",
1472 .llvm_name = "attiny11",
1473 .features = featureSet(&[_]Feature{
1474 .avr1,
1475 }),
1476 };
1477 pub const attiny12 = Cpu{
1478 .name = "attiny12",
1479 .llvm_name = "attiny12",
1480 .features = featureSet(&[_]Feature{
1481 .avr1,
1482 }),
1483 };
1484 pub const attiny13 = Cpu{
1485 .name = "attiny13",
1486 .llvm_name = "attiny13",
1487 .features = featureSet(&[_]Feature{
1488 .avr25,
1489 }),
1490 };
1491 pub const attiny13a = Cpu{
1492 .name = "attiny13a",
1493 .llvm_name = "attiny13a",
1494 .features = featureSet(&[_]Feature{
1495 .avr25,
1496 }),
1497 };
1498 pub const attiny15 = Cpu{
1499 .name = "attiny15",
1500 .llvm_name = "attiny15",
1501 .features = featureSet(&[_]Feature{
1502 .avr1,
1503 }),
1504 };
1505 pub const attiny1634 = Cpu{
1506 .name = "attiny1634",
1507 .llvm_name = "attiny1634",
1508 .features = featureSet(&[_]Feature{
1509 .avr35,
1510 }),
1511 };
1512 pub const attiny167 = Cpu{
1513 .name = "attiny167",
1514 .llvm_name = "attiny167",
1515 .features = featureSet(&[_]Feature{
1516 .avr35,
1517 }),
1518 };
1519 pub const attiny20 = Cpu{
1520 .name = "attiny20",
1521 .llvm_name = "attiny20",
1522 .features = featureSet(&[_]Feature{
1523 .avrtiny,
1524 }),
1525 };
1526 pub const attiny22 = Cpu{
1527 .name = "attiny22",
1528 .llvm_name = "attiny22",
1529 .features = featureSet(&[_]Feature{
1530 .avr2,
1531 }),
1532 };
1533 pub const attiny2313 = Cpu{
1534 .name = "attiny2313",
1535 .llvm_name = "attiny2313",
1536 .features = featureSet(&[_]Feature{
1537 .avr25,
1538 }),
1539 };
1540 pub const attiny2313a = Cpu{
1541 .name = "attiny2313a",
1542 .llvm_name = "attiny2313a",
1543 .features = featureSet(&[_]Feature{
1544 .avr25,
1545 }),
1546 };
1547 pub const attiny24 = Cpu{
1548 .name = "attiny24",
1549 .llvm_name = "attiny24",
1550 .features = featureSet(&[_]Feature{
1551 .avr25,
1552 }),
1553 };
1554 pub const attiny24a = Cpu{
1555 .name = "attiny24a",
1556 .llvm_name = "attiny24a",
1557 .features = featureSet(&[_]Feature{
1558 .avr25,
1559 }),
1560 };
1561 pub const attiny25 = Cpu{
1562 .name = "attiny25",
1563 .llvm_name = "attiny25",
1564 .features = featureSet(&[_]Feature{
1565 .avr25,
1566 }),
1567 };
1568 pub const attiny26 = Cpu{
1569 .name = "attiny26",
1570 .llvm_name = "attiny26",
1571 .features = featureSet(&[_]Feature{
1572 .avr2,
1573 .lpmx,
1574 }),
1575 };
1576 pub const attiny261 = Cpu{
1577 .name = "attiny261",
1578 .llvm_name = "attiny261",
1579 .features = featureSet(&[_]Feature{
1580 .avr25,
1581 }),
1582 };
1583 pub const attiny261a = Cpu{
1584 .name = "attiny261a",
1585 .llvm_name = "attiny261a",
1586 .features = featureSet(&[_]Feature{
1587 .avr25,
1588 }),
1589 };
1590 pub const attiny28 = Cpu{
1591 .name = "attiny28",
1592 .llvm_name = "attiny28",
1593 .features = featureSet(&[_]Feature{
1594 .avr1,
1595 }),
1596 };
1597 pub const attiny4 = Cpu{
1598 .name = "attiny4",
1599 .llvm_name = "attiny4",
1600 .features = featureSet(&[_]Feature{
1601 .avrtiny,
1602 }),
1603 };
1604 pub const attiny40 = Cpu{
1605 .name = "attiny40",
1606 .llvm_name = "attiny40",
1607 .features = featureSet(&[_]Feature{
1608 .avrtiny,
1609 }),
1610 };
1611 pub const attiny4313 = Cpu{
1612 .name = "attiny4313",
1613 .llvm_name = "attiny4313",
1614 .features = featureSet(&[_]Feature{
1615 .avr25,
1616 }),
1617 };
1618 pub const attiny43u = Cpu{
1619 .name = "attiny43u",
1620 .llvm_name = "attiny43u",
1621 .features = featureSet(&[_]Feature{
1622 .avr25,
1623 }),
1624 };
1625 pub const attiny44 = Cpu{
1626 .name = "attiny44",
1627 .llvm_name = "attiny44",
1628 .features = featureSet(&[_]Feature{
1629 .avr25,
1630 }),
1631 };
1632 pub const attiny44a = Cpu{
1633 .name = "attiny44a",
1634 .llvm_name = "attiny44a",
1635 .features = featureSet(&[_]Feature{
1636 .avr25,
1637 }),
1638 };
1639 pub const attiny45 = Cpu{
1640 .name = "attiny45",
1641 .llvm_name = "attiny45",
1642 .features = featureSet(&[_]Feature{
1643 .avr25,
1644 }),
1645 };
1646 pub const attiny461 = Cpu{
1647 .name = "attiny461",
1648 .llvm_name = "attiny461",
1649 .features = featureSet(&[_]Feature{
1650 .avr25,
1651 }),
1652 };
1653 pub const attiny461a = Cpu{
1654 .name = "attiny461a",
1655 .llvm_name = "attiny461a",
1656 .features = featureSet(&[_]Feature{
1657 .avr25,
1658 }),
1659 };
1660 pub const attiny48 = Cpu{
1661 .name = "attiny48",
1662 .llvm_name = "attiny48",
1663 .features = featureSet(&[_]Feature{
1664 .avr25,
1665 }),
1666 };
1667 pub const attiny5 = Cpu{
1668 .name = "attiny5",
1669 .llvm_name = "attiny5",
1670 .features = featureSet(&[_]Feature{
1671 .avrtiny,
1672 }),
1673 };
1674 pub const attiny828 = Cpu{
1675 .name = "attiny828",
1676 .llvm_name = "attiny828",
1677 .features = featureSet(&[_]Feature{
1678 .avr25,
1679 }),
1680 };
1681 pub const attiny84 = Cpu{
1682 .name = "attiny84",
1683 .llvm_name = "attiny84",
1684 .features = featureSet(&[_]Feature{
1685 .avr25,
1686 }),
1687 };
1688 pub const attiny84a = Cpu{
1689 .name = "attiny84a",
1690 .llvm_name = "attiny84a",
1691 .features = featureSet(&[_]Feature{
1692 .avr25,
1693 }),
1694 };
1695 pub const attiny85 = Cpu{
1696 .name = "attiny85",
1697 .llvm_name = "attiny85",
1698 .features = featureSet(&[_]Feature{
1699 .avr25,
1700 }),
1701 };
1702 pub const attiny861 = Cpu{
1703 .name = "attiny861",
1704 .llvm_name = "attiny861",
1705 .features = featureSet(&[_]Feature{
1706 .avr25,
1707 }),
1708 };
1709 pub const attiny861a = Cpu{
1710 .name = "attiny861a",
1711 .llvm_name = "attiny861a",
1712 .features = featureSet(&[_]Feature{
1713 .avr25,
1714 }),
1715 };
1716 pub const attiny87 = Cpu{
1717 .name = "attiny87",
1718 .llvm_name = "attiny87",
1719 .features = featureSet(&[_]Feature{
1720 .avr25,
1721 }),
1722 };
1723 pub const attiny88 = Cpu{
1724 .name = "attiny88",
1725 .llvm_name = "attiny88",
1726 .features = featureSet(&[_]Feature{
1727 .avr25,
1728 }),
1729 };
1730 pub const attiny9 = Cpu{
1731 .name = "attiny9",
1732 .llvm_name = "attiny9",
1733 .features = featureSet(&[_]Feature{
1734 .avrtiny,
1735 }),
1736 };
1737 pub const atxmega128a1 = Cpu{
1738 .name = "atxmega128a1",
1739 .llvm_name = "atxmega128a1",
1740 .features = featureSet(&[_]Feature{
1741 .xmega,
1742 }),
1743 };
1744 pub const atxmega128a1u = Cpu{
1745 .name = "atxmega128a1u",
1746 .llvm_name = "atxmega128a1u",
1747 .features = featureSet(&[_]Feature{
1748 .xmegau,
1749 }),
1750 };
1751 pub const atxmega128a3 = Cpu{
1752 .name = "atxmega128a3",
1753 .llvm_name = "atxmega128a3",
1754 .features = featureSet(&[_]Feature{
1755 .xmega,
1756 }),
1757 };
1758 pub const atxmega128a3u = Cpu{
1759 .name = "atxmega128a3u",
1760 .llvm_name = "atxmega128a3u",
1761 .features = featureSet(&[_]Feature{
1762 .xmegau,
1763 }),
1764 };
1765 pub const atxmega128a4u = Cpu{
1766 .name = "atxmega128a4u",
1767 .llvm_name = "atxmega128a4u",
1768 .features = featureSet(&[_]Feature{
1769 .xmegau,
1770 }),
1771 };
1772 pub const atxmega128b1 = Cpu{
1773 .name = "atxmega128b1",
1774 .llvm_name = "atxmega128b1",
1775 .features = featureSet(&[_]Feature{
1776 .xmegau,
1777 }),
1778 };
1779 pub const atxmega128b3 = Cpu{
1780 .name = "atxmega128b3",
1781 .llvm_name = "atxmega128b3",
1782 .features = featureSet(&[_]Feature{
1783 .xmegau,
1784 }),
1785 };
1786 pub const atxmega128c3 = Cpu{
1787 .name = "atxmega128c3",
1788 .llvm_name = "atxmega128c3",
1789 .features = featureSet(&[_]Feature{
1790 .xmegau,
1791 }),
1792 };
1793 pub const atxmega128d3 = Cpu{
1794 .name = "atxmega128d3",
1795 .llvm_name = "atxmega128d3",
1796 .features = featureSet(&[_]Feature{
1797 .xmega,
1798 }),
1799 };
1800 pub const atxmega128d4 = Cpu{
1801 .name = "atxmega128d4",
1802 .llvm_name = "atxmega128d4",
1803 .features = featureSet(&[_]Feature{
1804 .xmega,
1805 }),
1806 };
1807 pub const atxmega16a4 = Cpu{
1808 .name = "atxmega16a4",
1809 .llvm_name = "atxmega16a4",
1810 .features = featureSet(&[_]Feature{
1811 .xmega,
1812 }),
1813 };
1814 pub const atxmega16a4u = Cpu{
1815 .name = "atxmega16a4u",
1816 .llvm_name = "atxmega16a4u",
1817 .features = featureSet(&[_]Feature{
1818 .xmegau,
1819 }),
1820 };
1821 pub const atxmega16c4 = Cpu{
1822 .name = "atxmega16c4",
1823 .llvm_name = "atxmega16c4",
1824 .features = featureSet(&[_]Feature{
1825 .xmegau,
1826 }),
1827 };
1828 pub const atxmega16d4 = Cpu{
1829 .name = "atxmega16d4",
1830 .llvm_name = "atxmega16d4",
1831 .features = featureSet(&[_]Feature{
1832 .xmega,
1833 }),
1834 };
1835 pub const atxmega16e5 = Cpu{
1836 .name = "atxmega16e5",
1837 .llvm_name = "atxmega16e5",
1838 .features = featureSet(&[_]Feature{
1839 .xmega,
1840 }),
1841 };
1842 pub const atxmega192a3 = Cpu{
1843 .name = "atxmega192a3",
1844 .llvm_name = "atxmega192a3",
1845 .features = featureSet(&[_]Feature{
1846 .xmega,
1847 }),
1848 };
1849 pub const atxmega192a3u = Cpu{
1850 .name = "atxmega192a3u",
1851 .llvm_name = "atxmega192a3u",
1852 .features = featureSet(&[_]Feature{
1853 .xmegau,
1854 }),
1855 };
1856 pub const atxmega192c3 = Cpu{
1857 .name = "atxmega192c3",
1858 .llvm_name = "atxmega192c3",
1859 .features = featureSet(&[_]Feature{
1860 .xmegau,
1861 }),
1862 };
1863 pub const atxmega192d3 = Cpu{
1864 .name = "atxmega192d3",
1865 .llvm_name = "atxmega192d3",
1866 .features = featureSet(&[_]Feature{
1867 .xmega,
1868 }),
1869 };
1870 pub const atxmega256a3 = Cpu{
1871 .name = "atxmega256a3",
1872 .llvm_name = "atxmega256a3",
1873 .features = featureSet(&[_]Feature{
1874 .xmega,
1875 }),
1876 };
1877 pub const atxmega256a3b = Cpu{
1878 .name = "atxmega256a3b",
1879 .llvm_name = "atxmega256a3b",
1880 .features = featureSet(&[_]Feature{
1881 .xmega,
1882 }),
1883 };
1884 pub const atxmega256a3bu = Cpu{
1885 .name = "atxmega256a3bu",
1886 .llvm_name = "atxmega256a3bu",
1887 .features = featureSet(&[_]Feature{
1888 .xmegau,
1889 }),
1890 };
1891 pub const atxmega256a3u = Cpu{
1892 .name = "atxmega256a3u",
1893 .llvm_name = "atxmega256a3u",
1894 .features = featureSet(&[_]Feature{
1895 .xmegau,
1896 }),
1897 };
1898 pub const atxmega256c3 = Cpu{
1899 .name = "atxmega256c3",
1900 .llvm_name = "atxmega256c3",
1901 .features = featureSet(&[_]Feature{
1902 .xmegau,
1903 }),
1904 };
1905 pub const atxmega256d3 = Cpu{
1906 .name = "atxmega256d3",
1907 .llvm_name = "atxmega256d3",
1908 .features = featureSet(&[_]Feature{
1909 .xmega,
1910 }),
1911 };
1912 pub const atxmega32a4 = Cpu{
1913 .name = "atxmega32a4",
1914 .llvm_name = "atxmega32a4",
1915 .features = featureSet(&[_]Feature{
1916 .xmega,
1917 }),
1918 };
1919 pub const atxmega32a4u = Cpu{
1920 .name = "atxmega32a4u",
1921 .llvm_name = "atxmega32a4u",
1922 .features = featureSet(&[_]Feature{
1923 .xmegau,
1924 }),
1925 };
1926 pub const atxmega32c4 = Cpu{
1927 .name = "atxmega32c4",
1928 .llvm_name = "atxmega32c4",
1929 .features = featureSet(&[_]Feature{
1930 .xmegau,
1931 }),
1932 };
1933 pub const atxmega32d4 = Cpu{
1934 .name = "atxmega32d4",
1935 .llvm_name = "atxmega32d4",
1936 .features = featureSet(&[_]Feature{
1937 .xmega,
1938 }),
1939 };
1940 pub const atxmega32e5 = Cpu{
1941 .name = "atxmega32e5",
1942 .llvm_name = "atxmega32e5",
1943 .features = featureSet(&[_]Feature{
1944 .xmega,
1945 }),
1946 };
1947 pub const atxmega32x1 = Cpu{
1948 .name = "atxmega32x1",
1949 .llvm_name = "atxmega32x1",
1950 .features = featureSet(&[_]Feature{
1951 .xmega,
1952 }),
1953 };
1954 pub const atxmega384c3 = Cpu{
1955 .name = "atxmega384c3",
1956 .llvm_name = "atxmega384c3",
1957 .features = featureSet(&[_]Feature{
1958 .xmegau,
1959 }),
1960 };
1961 pub const atxmega384d3 = Cpu{
1962 .name = "atxmega384d3",
1963 .llvm_name = "atxmega384d3",
1964 .features = featureSet(&[_]Feature{
1965 .xmega,
1966 }),
1967 };
1968 pub const atxmega64a1 = Cpu{
1969 .name = "atxmega64a1",
1970 .llvm_name = "atxmega64a1",
1971 .features = featureSet(&[_]Feature{
1972 .xmega,
1973 }),
1974 };
1975 pub const atxmega64a1u = Cpu{
1976 .name = "atxmega64a1u",
1977 .llvm_name = "atxmega64a1u",
1978 .features = featureSet(&[_]Feature{
1979 .xmegau,
1980 }),
1981 };
1982 pub const atxmega64a3 = Cpu{
1983 .name = "atxmega64a3",
1984 .llvm_name = "atxmega64a3",
1985 .features = featureSet(&[_]Feature{
1986 .xmega,
1987 }),
1988 };
1989 pub const atxmega64a3u = Cpu{
1990 .name = "atxmega64a3u",
1991 .llvm_name = "atxmega64a3u",
1992 .features = featureSet(&[_]Feature{
1993 .xmegau,
1994 }),
1995 };
1996 pub const atxmega64a4u = Cpu{
1997 .name = "atxmega64a4u",
1998 .llvm_name = "atxmega64a4u",
1999 .features = featureSet(&[_]Feature{
2000 .xmegau,
2001 }),
2002 };
2003 pub const atxmega64b1 = Cpu{
2004 .name = "atxmega64b1",
2005 .llvm_name = "atxmega64b1",
2006 .features = featureSet(&[_]Feature{
2007 .xmegau,
2008 }),
2009 };
2010 pub const atxmega64b3 = Cpu{
2011 .name = "atxmega64b3",
2012 .llvm_name = "atxmega64b3",
2013 .features = featureSet(&[_]Feature{
2014 .xmegau,
2015 }),
2016 };
2017 pub const atxmega64c3 = Cpu{
2018 .name = "atxmega64c3",
2019 .llvm_name = "atxmega64c3",
2020 .features = featureSet(&[_]Feature{
2021 .xmegau,
2022 }),
2023 };
2024 pub const atxmega64d3 = Cpu{
2025 .name = "atxmega64d3",
2026 .llvm_name = "atxmega64d3",
2027 .features = featureSet(&[_]Feature{
2028 .xmega,
2029 }),
2030 };
2031 pub const atxmega64d4 = Cpu{
2032 .name = "atxmega64d4",
2033 .llvm_name = "atxmega64d4",
2034 .features = featureSet(&[_]Feature{
2035 .xmega,
2036 }),
2037 };
2038 pub const atxmega8e5 = Cpu{
2039 .name = "atxmega8e5",
2040 .llvm_name = "atxmega8e5",
2041 .features = featureSet(&[_]Feature{
2042 .xmega,
2043 }),
2044 };
2045 pub const avr1 = Cpu{
2046 .name = "avr1",
2047 .llvm_name = "avr1",
2048 .features = featureSet(&[_]Feature{
2049 .avr1,
2050 }),
2051 };
2052 pub const avr2 = Cpu{
2053 .name = "avr2",
2054 .llvm_name = "avr2",
2055 .features = featureSet(&[_]Feature{
2056 .avr2,
2057 }),
2058 };
2059 pub const avr25 = Cpu{
2060 .name = "avr25",
2061 .llvm_name = "avr25",
2062 .features = featureSet(&[_]Feature{
2063 .avr25,
2064 }),
2065 };
2066 pub const avr3 = Cpu{
2067 .name = "avr3",
2068 .llvm_name = "avr3",
2069 .features = featureSet(&[_]Feature{
2070 .avr3,
2071 }),
2072 };
2073 pub const avr31 = Cpu{
2074 .name = "avr31",
2075 .llvm_name = "avr31",
2076 .features = featureSet(&[_]Feature{
2077 .avr31,
2078 }),
2079 };
2080 pub const avr35 = Cpu{
2081 .name = "avr35",
2082 .llvm_name = "avr35",
2083 .features = featureSet(&[_]Feature{
2084 .avr35,
2085 }),
2086 };
2087 pub const avr4 = Cpu{
2088 .name = "avr4",
2089 .llvm_name = "avr4",
2090 .features = featureSet(&[_]Feature{
2091 .avr4,
2092 }),
2093 };
2094 pub const avr5 = Cpu{
2095 .name = "avr5",
2096 .llvm_name = "avr5",
2097 .features = featureSet(&[_]Feature{
2098 .avr5,
2099 }),
2100 };
2101 pub const avr51 = Cpu{
2102 .name = "avr51",
2103 .llvm_name = "avr51",
2104 .features = featureSet(&[_]Feature{
2105 .avr51,
2106 }),
2107 };
2108 pub const avr6 = Cpu{
2109 .name = "avr6",
2110 .llvm_name = "avr6",
2111 .features = featureSet(&[_]Feature{
2112 .avr6,
2113 }),
2114 };
2115 pub const avrtiny = Cpu{
2116 .name = "avrtiny",
2117 .llvm_name = "avrtiny",
2118 .features = featureSet(&[_]Feature{
2119 .avrtiny,
2120 }),
2121 };
2122 pub const avrxmega1 = Cpu{
2123 .name = "avrxmega1",
2124 .llvm_name = "avrxmega1",
2125 .features = featureSet(&[_]Feature{
2126 .xmega,
2127 }),
2128 };
2129 pub const avrxmega2 = Cpu{
2130 .name = "avrxmega2",
2131 .llvm_name = "avrxmega2",
2132 .features = featureSet(&[_]Feature{
2133 .xmega,
2134 }),
2135 };
2136 pub const avrxmega3 = Cpu{
2137 .name = "avrxmega3",
2138 .llvm_name = "avrxmega3",
2139 .features = featureSet(&[_]Feature{
2140 .xmega,
2141 }),
2142 };
2143 pub const avrxmega4 = Cpu{
2144 .name = "avrxmega4",
2145 .llvm_name = "avrxmega4",
2146 .features = featureSet(&[_]Feature{
2147 .xmega,
2148 }),
2149 };
2150 pub const avrxmega5 = Cpu{
2151 .name = "avrxmega5",
2152 .llvm_name = "avrxmega5",
2153 .features = featureSet(&[_]Feature{
2154 .xmega,
2155 }),
2156 };
2157 pub const avrxmega6 = Cpu{
2158 .name = "avrxmega6",
2159 .llvm_name = "avrxmega6",
2160 .features = featureSet(&[_]Feature{
2161 .xmega,
2162 }),
2163 };
2164 pub const avrxmega7 = Cpu{
2165 .name = "avrxmega7",
2166 .llvm_name = "avrxmega7",
2167 .features = featureSet(&[_]Feature{
2168 .xmega,
2169 }),
2170 };
2171 pub const m3000 = Cpu{
2172 .name = "m3000",
2173 .llvm_name = "m3000",
2174 .features = featureSet(&[_]Feature{
2175 .avr5,
2176 }),
2177 };
2178};
2179
2180/// All avr CPUs, sorted alphabetically by name.
2181/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
2182/// compiler has inefficient memory and CPU usage, affecting build times.
2183pub const all_cpus = &[_]*const Cpu{
2184 &cpu.at43usb320,
2185 &cpu.at43usb355,
2186 &cpu.at76c711,
2187 &cpu.at86rf401,
2188 &cpu.at90c8534,
2189 &cpu.at90can128,
2190 &cpu.at90can32,
2191 &cpu.at90can64,
2192 &cpu.at90pwm1,
2193 &cpu.at90pwm161,
2194 &cpu.at90pwm2,
2195 &cpu.at90pwm216,
2196 &cpu.at90pwm2b,
2197 &cpu.at90pwm3,
2198 &cpu.at90pwm316,
2199 &cpu.at90pwm3b,
2200 &cpu.at90pwm81,
2201 &cpu.at90s1200,
2202 &cpu.at90s2313,
2203 &cpu.at90s2323,
2204 &cpu.at90s2333,
2205 &cpu.at90s2343,
2206 &cpu.at90s4414,
2207 &cpu.at90s4433,
2208 &cpu.at90s4434,
2209 &cpu.at90s8515,
2210 &cpu.at90s8535,
2211 &cpu.at90scr100,
2212 &cpu.at90usb1286,
2213 &cpu.at90usb1287,
2214 &cpu.at90usb162,
2215 &cpu.at90usb646,
2216 &cpu.at90usb647,
2217 &cpu.at90usb82,
2218 &cpu.at94k,
2219 &cpu.ata5272,
2220 &cpu.ata5505,
2221 &cpu.ata5790,
2222 &cpu.ata5795,
2223 &cpu.ata6285,
2224 &cpu.ata6286,
2225 &cpu.ata6289,
2226 &cpu.atmega103,
2227 &cpu.atmega128,
2228 &cpu.atmega1280,
2229 &cpu.atmega1281,
2230 &cpu.atmega1284,
2231 &cpu.atmega1284p,
2232 &cpu.atmega1284rfr2,
2233 &cpu.atmega128a,
2234 &cpu.atmega128rfa1,
2235 &cpu.atmega128rfr2,
2236 &cpu.atmega16,
2237 &cpu.atmega161,
2238 &cpu.atmega162,
2239 &cpu.atmega163,
2240 &cpu.atmega164a,
2241 &cpu.atmega164p,
2242 &cpu.atmega164pa,
2243 &cpu.atmega165,
2244 &cpu.atmega165a,
2245 &cpu.atmega165p,
2246 &cpu.atmega165pa,
2247 &cpu.atmega168,
2248 &cpu.atmega168a,
2249 &cpu.atmega168p,
2250 &cpu.atmega168pa,
2251 &cpu.atmega169,
2252 &cpu.atmega169a,
2253 &cpu.atmega169p,
2254 &cpu.atmega169pa,
2255 &cpu.atmega16a,
2256 &cpu.atmega16hva,
2257 &cpu.atmega16hva2,
2258 &cpu.atmega16hvb,
2259 &cpu.atmega16hvbrevb,
2260 &cpu.atmega16m1,
2261 &cpu.atmega16u2,
2262 &cpu.atmega16u4,
2263 &cpu.atmega2560,
2264 &cpu.atmega2561,
2265 &cpu.atmega2564rfr2,
2266 &cpu.atmega256rfr2,
2267 &cpu.atmega32,
2268 &cpu.atmega323,
2269 &cpu.atmega324a,
2270 &cpu.atmega324p,
2271 &cpu.atmega324pa,
2272 &cpu.atmega325,
2273 &cpu.atmega3250,
2274 &cpu.atmega3250a,
2275 &cpu.atmega3250p,
2276 &cpu.atmega3250pa,
2277 &cpu.atmega325a,
2278 &cpu.atmega325p,
2279 &cpu.atmega325pa,
2280 &cpu.atmega328,
2281 &cpu.atmega328p,
2282 &cpu.atmega329,
2283 &cpu.atmega3290,
2284 &cpu.atmega3290a,
2285 &cpu.atmega3290p,
2286 &cpu.atmega3290pa,
2287 &cpu.atmega329a,
2288 &cpu.atmega329p,
2289 &cpu.atmega329pa,
2290 &cpu.atmega32a,
2291 &cpu.atmega32c1,
2292 &cpu.atmega32hvb,
2293 &cpu.atmega32hvbrevb,
2294 &cpu.atmega32m1,
2295 &cpu.atmega32u2,
2296 &cpu.atmega32u4,
2297 &cpu.atmega32u6,
2298 &cpu.atmega406,
2299 &cpu.atmega48,
2300 &cpu.atmega48a,
2301 &cpu.atmega48p,
2302 &cpu.atmega48pa,
2303 &cpu.atmega64,
2304 &cpu.atmega640,
2305 &cpu.atmega644,
2306 &cpu.atmega644a,
2307 &cpu.atmega644p,
2308 &cpu.atmega644pa,
2309 &cpu.atmega644rfr2,
2310 &cpu.atmega645,
2311 &cpu.atmega6450,
2312 &cpu.atmega6450a,
2313 &cpu.atmega6450p,
2314 &cpu.atmega645a,
2315 &cpu.atmega645p,
2316 &cpu.atmega649,
2317 &cpu.atmega6490,
2318 &cpu.atmega6490a,
2319 &cpu.atmega6490p,
2320 &cpu.atmega649a,
2321 &cpu.atmega649p,
2322 &cpu.atmega64a,
2323 &cpu.atmega64c1,
2324 &cpu.atmega64hve,
2325 &cpu.atmega64m1,
2326 &cpu.atmega64rfr2,
2327 &cpu.atmega8,
2328 &cpu.atmega8515,
2329 &cpu.atmega8535,
2330 &cpu.atmega88,
2331 &cpu.atmega88a,
2332 &cpu.atmega88p,
2333 &cpu.atmega88pa,
2334 &cpu.atmega8a,
2335 &cpu.atmega8hva,
2336 &cpu.atmega8u2,
2337 &cpu.attiny10,
2338 &cpu.attiny102,
2339 &cpu.attiny104,
2340 &cpu.attiny11,
2341 &cpu.attiny12,
2342 &cpu.attiny13,
2343 &cpu.attiny13a,
2344 &cpu.attiny15,
2345 &cpu.attiny1634,
2346 &cpu.attiny167,
2347 &cpu.attiny20,
2348 &cpu.attiny22,
2349 &cpu.attiny2313,
2350 &cpu.attiny2313a,
2351 &cpu.attiny24,
2352 &cpu.attiny24a,
2353 &cpu.attiny25,
2354 &cpu.attiny26,
2355 &cpu.attiny261,
2356 &cpu.attiny261a,
2357 &cpu.attiny28,
2358 &cpu.attiny4,
2359 &cpu.attiny40,
2360 &cpu.attiny4313,
2361 &cpu.attiny43u,
2362 &cpu.attiny44,
2363 &cpu.attiny44a,
2364 &cpu.attiny45,
2365 &cpu.attiny461,
2366 &cpu.attiny461a,
2367 &cpu.attiny48,
2368 &cpu.attiny5,
2369 &cpu.attiny828,
2370 &cpu.attiny84,
2371 &cpu.attiny84a,
2372 &cpu.attiny85,
2373 &cpu.attiny861,
2374 &cpu.attiny861a,
2375 &cpu.attiny87,
2376 &cpu.attiny88,
2377 &cpu.attiny9,
2378 &cpu.atxmega128a1,
2379 &cpu.atxmega128a1u,
2380 &cpu.atxmega128a3,
2381 &cpu.atxmega128a3u,
2382 &cpu.atxmega128a4u,
2383 &cpu.atxmega128b1,
2384 &cpu.atxmega128b3,
2385 &cpu.atxmega128c3,
2386 &cpu.atxmega128d3,
2387 &cpu.atxmega128d4,
2388 &cpu.atxmega16a4,
2389 &cpu.atxmega16a4u,
2390 &cpu.atxmega16c4,
2391 &cpu.atxmega16d4,
2392 &cpu.atxmega16e5,
2393 &cpu.atxmega192a3,
2394 &cpu.atxmega192a3u,
2395 &cpu.atxmega192c3,
2396 &cpu.atxmega192d3,
2397 &cpu.atxmega256a3,
2398 &cpu.atxmega256a3b,
2399 &cpu.atxmega256a3bu,
2400 &cpu.atxmega256a3u,
2401 &cpu.atxmega256c3,
2402 &cpu.atxmega256d3,
2403 &cpu.atxmega32a4,
2404 &cpu.atxmega32a4u,
2405 &cpu.atxmega32c4,
2406 &cpu.atxmega32d4,
2407 &cpu.atxmega32e5,
2408 &cpu.atxmega32x1,
2409 &cpu.atxmega384c3,
2410 &cpu.atxmega384d3,
2411 &cpu.atxmega64a1,
2412 &cpu.atxmega64a1u,
2413 &cpu.atxmega64a3,
2414 &cpu.atxmega64a3u,
2415 &cpu.atxmega64a4u,
2416 &cpu.atxmega64b1,
2417 &cpu.atxmega64b3,
2418 &cpu.atxmega64c3,
2419 &cpu.atxmega64d3,
2420 &cpu.atxmega64d4,
2421 &cpu.atxmega8e5,
2422 &cpu.avr1,
2423 &cpu.avr2,
2424 &cpu.avr25,
2425 &cpu.avr3,
2426 &cpu.avr31,
2427 &cpu.avr35,
2428 &cpu.avr4,
2429 &cpu.avr5,
2430 &cpu.avr51,
2431 &cpu.avr6,
2432 &cpu.avrtiny,
2433 &cpu.avrxmega1,
2434 &cpu.avrxmega2,
2435 &cpu.avrxmega3,
2436 &cpu.avrxmega4,
2437 &cpu.avrxmega5,
2438 &cpu.avrxmega6,
2439 &cpu.avrxmega7,
2440 &cpu.m3000,
47912441};
lib/std/target/bpf.zig+68-66
......@@ -1,75 +1,77 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
33
4pub const feature_alu32 = Feature{
5 .name = "alu32",
6 .llvm_name = "alu32",
7 .description = "Enable ALU32 instructions",
8 .dependencies = &[_]*const Feature {
9 },
4pub const Feature = enum {
5 alu32,
6 dummy,
7 dwarfris,
108};
119
12pub const feature_dummy = Feature{
13 .name = "dummy",
14 .llvm_name = "dummy",
15 .description = "unused feature",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_dwarfris = Feature{
21 .name = "dwarfris",
22 .llvm_name = "dwarfris",
23 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const features = &[_]*const Feature {
29 &feature_alu32,
30 &feature_dummy,
31 &feature_dwarfris,
32};
33
34pub const cpu_generic = Cpu{
35 .name = "generic",
36 .llvm_name = "generic",
37 .dependencies = &[_]*const Feature {
38 },
39};
40
41pub const cpu_probe = Cpu{
42 .name = "probe",
43 .llvm_name = "probe",
44 .dependencies = &[_]*const Feature {
45 },
46};
47
48pub const cpu_v1 = Cpu{
49 .name = "v1",
50 .llvm_name = "v1",
51 .dependencies = &[_]*const Feature {
52 },
53};
10pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
5411
55pub const cpu_v2 = Cpu{
56 .name = "v2",
57 .llvm_name = "v2",
58 .dependencies = &[_]*const Feature {
59 },
12pub const all_features = blk: {
13 const len = @typeInfo(Feature).Enum.fields.len;
14 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
15 var result: [len]Cpu.Feature = undefined;
16 result[@enumToInt(Feature.alu32)] = .{
17 .index = @enumToInt(Feature.alu32),
18 .name = @tagName(Feature.alu32),
19 .llvm_name = "alu32",
20 .description = "Enable ALU32 instructions",
21 .dependencies = 0,
22 };
23 result[@enumToInt(Feature.dummy)] = .{
24 .index = @enumToInt(Feature.dummy),
25 .name = @tagName(Feature.dummy),
26 .llvm_name = "dummy",
27 .description = "unused feature",
28 .dependencies = 0,
29 };
30 result[@enumToInt(Feature.dwarfris)] = .{
31 .index = @enumToInt(Feature.dwarfris),
32 .name = @tagName(Feature.dwarfris),
33 .llvm_name = "dwarfris",
34 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
35 .dependencies = 0,
36 };
37 break :blk result;
6038};
6139
62pub const cpu_v3 = Cpu{
63 .name = "v3",
64 .llvm_name = "v3",
65 .dependencies = &[_]*const Feature {
66 },
40pub const cpu = struct {
41 pub const generic = Cpu{
42 .name = "generic",
43 .llvm_name = "generic",
44 .features = 0,
45 };
46 pub const probe = Cpu{
47 .name = "probe",
48 .llvm_name = "probe",
49 .features = 0,
50 };
51 pub const v1 = Cpu{
52 .name = "v1",
53 .llvm_name = "v1",
54 .features = 0,
55 };
56 pub const v2 = Cpu{
57 .name = "v2",
58 .llvm_name = "v2",
59 .features = 0,
60 };
61 pub const v3 = Cpu{
62 .name = "v3",
63 .llvm_name = "v3",
64 .features = 0,
65 };
6766};
6867
69pub const cpus = &[_]*const Cpu {
70 &cpu_generic,
71 &cpu_probe,
72 &cpu_v1,
73 &cpu_v2,
74 &cpu_v3,
68/// All bpf CPUs, sorted alphabetically by name.
69/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
70/// compiler has inefficient memory and CPU usage, affecting build times.
71pub const all_cpus = &[_]*const Cpu{
72 &cpu.generic,
73 &cpu.probe,
74 &cpu.v1,
75 &cpu.v2,
76 &cpu.v3,
7577};
lib/std/target/hexagon.zig+346-191
......@@ -1,200 +1,355 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
33
4pub const feature_duplex = Feature{
5 .name = "duplex",
6 .llvm_name = "duplex",
7 .description = "Enable generation of duplex instruction",
8 .dependencies = &[_]*const Feature {
9 },
4pub const Feature = enum {
5 duplex,
6 hvx,
7 hvx_length128b,
8 hvx_length64b,
9 hvxv60,
10 hvxv62,
11 hvxv65,
12 hvxv66,
13 long_calls,
14 mem_noshuf,
15 memops,
16 noreturn_stack_elim,
17 nvj,
18 nvs,
19 packets,
20 reserved_r19,
21 small_data,
22 v5,
23 v55,
24 v60,
25 v62,
26 v65,
27 v66,
28 zreg,
1029};
1130
12pub const feature_longCalls = Feature{
13 .name = "longCalls",
14 .llvm_name = "long-calls",
15 .description = "Use constant-extended calls",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_mem_noshuf = Feature{
21 .name = "mem_noshuf",
22 .llvm_name = "mem_noshuf",
23 .description = "Supports mem_noshuf feature",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_memops = Feature{
29 .name = "memops",
30 .llvm_name = "memops",
31 .description = "Use memop instructions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_nvj = Feature{
37 .name = "nvj",
38 .llvm_name = "nvj",
39 .description = "Support for new-value jumps",
40 .dependencies = &[_]*const Feature {
41 &feature_packets,
42 },
43};
44
45pub const feature_nvs = Feature{
46 .name = "nvs",
47 .llvm_name = "nvs",
48 .description = "Support for new-value stores",
49 .dependencies = &[_]*const Feature {
50 &feature_packets,
51 },
52};
53
54pub const feature_noreturnStackElim = Feature{
55 .name = "noreturnStackElim",
56 .llvm_name = "noreturn-stack-elim",
57 .description = "Eliminate stack allocation in a noreturn function when possible",
58 .dependencies = &[_]*const Feature {
59 },
60};
61
62pub const feature_packets = Feature{
63 .name = "packets",
64 .llvm_name = "packets",
65 .description = "Support for instruction packets",
66 .dependencies = &[_]*const Feature {
67 },
68};
69
70pub const feature_reservedR19 = Feature{
71 .name = "reservedR19",
72 .llvm_name = "reserved-r19",
73 .description = "Reserve register R19",
74 .dependencies = &[_]*const Feature {
75 },
76};
77
78pub const feature_smallData = Feature{
79 .name = "smallData",
80 .llvm_name = "small-data",
81 .description = "Allow GP-relative addressing of global variables",
82 .dependencies = &[_]*const Feature {
83 },
84};
85
86pub const features = &[_]*const Feature {
87 &feature_duplex,
88 &feature_longCalls,
89 &feature_mem_noshuf,
90 &feature_memops,
91 &feature_nvj,
92 &feature_nvs,
93 &feature_noreturnStackElim,
94 &feature_packets,
95 &feature_reservedR19,
96 &feature_smallData,
97};
98
99pub const cpu_generic = Cpu{
100 .name = "generic",
101 .llvm_name = "generic",
102 .dependencies = &[_]*const Feature {
103 &feature_duplex,
104 &feature_memops,
105 &feature_packets,
106 &feature_nvj,
107 &feature_nvs,
108 &feature_smallData,
109 },
110};
111
112pub const cpu_hexagonv5 = Cpu{
113 .name = "hexagonv5",
114 .llvm_name = "hexagonv5",
115 .dependencies = &[_]*const Feature {
116 &feature_duplex,
117 &feature_memops,
118 &feature_packets,
119 &feature_nvj,
120 &feature_nvs,
121 &feature_smallData,
122 },
123};
124
125pub const cpu_hexagonv55 = Cpu{
126 .name = "hexagonv55",
127 .llvm_name = "hexagonv55",
128 .dependencies = &[_]*const Feature {
129 &feature_duplex,
130 &feature_memops,
131 &feature_packets,
132 &feature_nvj,
133 &feature_nvs,
134 &feature_smallData,
135 },
136};
137
138pub const cpu_hexagonv60 = Cpu{
139 .name = "hexagonv60",
140 .llvm_name = "hexagonv60",
141 .dependencies = &[_]*const Feature {
142 &feature_duplex,
143 &feature_memops,
144 &feature_packets,
145 &feature_nvj,
146 &feature_nvs,
147 &feature_smallData,
148 },
149};
150
151pub const cpu_hexagonv62 = Cpu{
152 .name = "hexagonv62",
153 .llvm_name = "hexagonv62",
154 .dependencies = &[_]*const Feature {
155 &feature_duplex,
156 &feature_memops,
157 &feature_packets,
158 &feature_nvj,
159 &feature_nvs,
160 &feature_smallData,
161 },
162};
31pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
16332
164pub const cpu_hexagonv65 = Cpu{
165 .name = "hexagonv65",
166 .llvm_name = "hexagonv65",
167 .dependencies = &[_]*const Feature {
168 &feature_duplex,
169 &feature_mem_noshuf,
170 &feature_memops,
171 &feature_packets,
172 &feature_nvj,
173 &feature_nvs,
174 &feature_smallData,
175 },
33pub const all_features = blk: {
34 const len = @typeInfo(Feature).Enum.fields.len;
35 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
36 var result: [len]Cpu.Feature = undefined;
37 result[@enumToInt(Feature.duplex)] = .{
38 .index = @enumToInt(Feature.duplex),
39 .name = @tagName(Feature.duplex),
40 .llvm_name = "duplex",
41 .description = "Enable generation of duplex instruction",
42 .dependencies = 0,
43 };
44 result[@enumToInt(Feature.hvx)] = .{
45 .index = @enumToInt(Feature.hvx),
46 .name = @tagName(Feature.hvx),
47 .llvm_name = "hvx",
48 .description = "Hexagon HVX instructions",
49 .dependencies = 0,
50 };
51 result[@enumToInt(Feature.hvx_length128b)] = .{
52 .index = @enumToInt(Feature.hvx_length128b),
53 .name = @tagName(Feature.hvx_length128b),
54 .llvm_name = "hvx-length128b",
55 .description = "Hexagon HVX 128B instructions",
56 .dependencies = featureSet(&[_]Feature{
57 .hvx,
58 }),
59 };
60 result[@enumToInt(Feature.hvx_length64b)] = .{
61 .index = @enumToInt(Feature.hvx_length64b),
62 .name = @tagName(Feature.hvx_length64b),
63 .llvm_name = "hvx-length64b",
64 .description = "Hexagon HVX 64B instructions",
65 .dependencies = featureSet(&[_]Feature{
66 .hvx,
67 }),
68 };
69 result[@enumToInt(Feature.hvxv60)] = .{
70 .index = @enumToInt(Feature.hvxv60),
71 .name = @tagName(Feature.hvxv60),
72 .llvm_name = "hvxv60",
73 .description = "Hexagon HVX instructions",
74 .dependencies = featureSet(&[_]Feature{
75 .hvx,
76 }),
77 };
78 result[@enumToInt(Feature.hvxv62)] = .{
79 .index = @enumToInt(Feature.hvxv62),
80 .name = @tagName(Feature.hvxv62),
81 .llvm_name = "hvxv62",
82 .description = "Hexagon HVX instructions",
83 .dependencies = featureSet(&[_]Feature{
84 .hvx,
85 .hvxv60,
86 }),
87 };
88 result[@enumToInt(Feature.hvxv65)] = .{
89 .index = @enumToInt(Feature.hvxv65),
90 .name = @tagName(Feature.hvxv65),
91 .llvm_name = "hvxv65",
92 .description = "Hexagon HVX instructions",
93 .dependencies = featureSet(&[_]Feature{
94 .hvx,
95 .hvxv60,
96 .hvxv62,
97 }),
98 };
99 result[@enumToInt(Feature.hvxv66)] = .{
100 .index = @enumToInt(Feature.hvxv66),
101 .name = @tagName(Feature.hvxv66),
102 .llvm_name = "hvxv66",
103 .description = "Hexagon HVX instructions",
104 .dependencies = featureSet(&[_]Feature{
105 .hvx,
106 .hvxv60,
107 .hvxv62,
108 .hvxv65,
109 .zreg,
110 }),
111 };
112 result[@enumToInt(Feature.long_calls)] = .{
113 .index = @enumToInt(Feature.long_calls),
114 .name = @tagName(Feature.long_calls),
115 .llvm_name = "long-calls",
116 .description = "Use constant-extended calls",
117 .dependencies = 0,
118 };
119 result[@enumToInt(Feature.mem_noshuf)] = .{
120 .index = @enumToInt(Feature.mem_noshuf),
121 .name = @tagName(Feature.mem_noshuf),
122 .llvm_name = "mem_noshuf",
123 .description = "Supports mem_noshuf feature",
124 .dependencies = 0,
125 };
126 result[@enumToInt(Feature.memops)] = .{
127 .index = @enumToInt(Feature.memops),
128 .name = @tagName(Feature.memops),
129 .llvm_name = "memops",
130 .description = "Use memop instructions",
131 .dependencies = 0,
132 };
133 result[@enumToInt(Feature.noreturn_stack_elim)] = .{
134 .index = @enumToInt(Feature.noreturn_stack_elim),
135 .name = @tagName(Feature.noreturn_stack_elim),
136 .llvm_name = "noreturn-stack-elim",
137 .description = "Eliminate stack allocation in a noreturn function when possible",
138 .dependencies = 0,
139 };
140 result[@enumToInt(Feature.nvj)] = .{
141 .index = @enumToInt(Feature.nvj),
142 .name = @tagName(Feature.nvj),
143 .llvm_name = "nvj",
144 .description = "Support for new-value jumps",
145 .dependencies = featureSet(&[_]Feature{
146 .packets,
147 }),
148 };
149 result[@enumToInt(Feature.nvs)] = .{
150 .index = @enumToInt(Feature.nvs),
151 .name = @tagName(Feature.nvs),
152 .llvm_name = "nvs",
153 .description = "Support for new-value stores",
154 .dependencies = featureSet(&[_]Feature{
155 .packets,
156 }),
157 };
158 result[@enumToInt(Feature.packets)] = .{
159 .index = @enumToInt(Feature.packets),
160 .name = @tagName(Feature.packets),
161 .llvm_name = "packets",
162 .description = "Support for instruction packets",
163 .dependencies = 0,
164 };
165 result[@enumToInt(Feature.reserved_r19)] = .{
166 .index = @enumToInt(Feature.reserved_r19),
167 .name = @tagName(Feature.reserved_r19),
168 .llvm_name = "reserved-r19",
169 .description = "Reserve register R19",
170 .dependencies = 0,
171 };
172 result[@enumToInt(Feature.small_data)] = .{
173 .index = @enumToInt(Feature.small_data),
174 .name = @tagName(Feature.small_data),
175 .llvm_name = "small-data",
176 .description = "Allow GP-relative addressing of global variables",
177 .dependencies = 0,
178 };
179 result[@enumToInt(Feature.v5)] = .{
180 .index = @enumToInt(Feature.v5),
181 .name = @tagName(Feature.v5),
182 .llvm_name = "v5",
183 .description = "Enable Hexagon V5 architecture",
184 .dependencies = 0,
185 };
186 result[@enumToInt(Feature.v55)] = .{
187 .index = @enumToInt(Feature.v55),
188 .name = @tagName(Feature.v55),
189 .llvm_name = "v55",
190 .description = "Enable Hexagon V55 architecture",
191 .dependencies = 0,
192 };
193 result[@enumToInt(Feature.v60)] = .{
194 .index = @enumToInt(Feature.v60),
195 .name = @tagName(Feature.v60),
196 .llvm_name = "v60",
197 .description = "Enable Hexagon V60 architecture",
198 .dependencies = 0,
199 };
200 result[@enumToInt(Feature.v62)] = .{
201 .index = @enumToInt(Feature.v62),
202 .name = @tagName(Feature.v62),
203 .llvm_name = "v62",
204 .description = "Enable Hexagon V62 architecture",
205 .dependencies = 0,
206 };
207 result[@enumToInt(Feature.v65)] = .{
208 .index = @enumToInt(Feature.v65),
209 .name = @tagName(Feature.v65),
210 .llvm_name = "v65",
211 .description = "Enable Hexagon V65 architecture",
212 .dependencies = 0,
213 };
214 result[@enumToInt(Feature.v66)] = .{
215 .index = @enumToInt(Feature.v66),
216 .name = @tagName(Feature.v66),
217 .llvm_name = "v66",
218 .description = "Enable Hexagon V66 architecture",
219 .dependencies = 0,
220 };
221 result[@enumToInt(Feature.zreg)] = .{
222 .index = @enumToInt(Feature.zreg),
223 .name = @tagName(Feature.zreg),
224 .llvm_name = "zreg",
225 .description = "Hexagon ZReg extension instructions",
226 .dependencies = 0,
227 };
228 break :blk result;
176229};
177230
178pub const cpu_hexagonv66 = Cpu{
179 .name = "hexagonv66",
180 .llvm_name = "hexagonv66",
181 .dependencies = &[_]*const Feature {
182 &feature_duplex,
183 &feature_mem_noshuf,
184 &feature_memops,
185 &feature_packets,
186 &feature_nvj,
187 &feature_nvs,
188 &feature_smallData,
189 },
231pub const cpu = struct {
232 pub const generic = Cpu{
233 .name = "generic",
234 .llvm_name = "generic",
235 .features = featureSet(&[_]Feature{
236 .duplex,
237 .memops,
238 .nvj,
239 .nvs,
240 .packets,
241 .small_data,
242 .v5,
243 .v55,
244 .v60,
245 }),
246 };
247 pub const hexagonv5 = Cpu{
248 .name = "hexagonv5",
249 .llvm_name = "hexagonv5",
250 .features = featureSet(&[_]Feature{
251 .duplex,
252 .memops,
253 .nvj,
254 .nvs,
255 .packets,
256 .small_data,
257 .v5,
258 }),
259 };
260 pub const hexagonv55 = Cpu{
261 .name = "hexagonv55",
262 .llvm_name = "hexagonv55",
263 .features = featureSet(&[_]Feature{
264 .duplex,
265 .memops,
266 .nvj,
267 .nvs,
268 .packets,
269 .small_data,
270 .v5,
271 .v55,
272 }),
273 };
274 pub const hexagonv60 = Cpu{
275 .name = "hexagonv60",
276 .llvm_name = "hexagonv60",
277 .features = featureSet(&[_]Feature{
278 .duplex,
279 .memops,
280 .nvj,
281 .nvs,
282 .packets,
283 .small_data,
284 .v5,
285 .v55,
286 .v60,
287 }),
288 };
289 pub const hexagonv62 = Cpu{
290 .name = "hexagonv62",
291 .llvm_name = "hexagonv62",
292 .features = featureSet(&[_]Feature{
293 .duplex,
294 .memops,
295 .nvj,
296 .nvs,
297 .packets,
298 .small_data,
299 .v5,
300 .v55,
301 .v60,
302 .v62,
303 }),
304 };
305 pub const hexagonv65 = Cpu{
306 .name = "hexagonv65",
307 .llvm_name = "hexagonv65",
308 .features = featureSet(&[_]Feature{
309 .duplex,
310 .mem_noshuf,
311 .memops,
312 .nvj,
313 .nvs,
314 .packets,
315 .small_data,
316 .v5,
317 .v55,
318 .v60,
319 .v62,
320 .v65,
321 }),
322 };
323 pub const hexagonv66 = Cpu{
324 .name = "hexagonv66",
325 .llvm_name = "hexagonv66",
326 .features = featureSet(&[_]Feature{
327 .duplex,
328 .mem_noshuf,
329 .memops,
330 .nvj,
331 .nvs,
332 .packets,
333 .small_data,
334 .v5,
335 .v55,
336 .v60,
337 .v62,
338 .v65,
339 .v66,
340 }),
341 };
190342};
191343
192pub const cpus = &[_]*const Cpu {
193 &cpu_generic,
194 &cpu_hexagonv5,
195 &cpu_hexagonv55,
196 &cpu_hexagonv60,
197 &cpu_hexagonv62,
198 &cpu_hexagonv65,
199 &cpu_hexagonv66,
344/// All hexagon CPUs, sorted alphabetically by name.
345/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
346/// compiler has inefficient memory and CPU usage, affecting build times.
347pub const all_cpus = &[_]*const Cpu{
348 &cpu.generic,
349 &cpu.hexagonv5,
350 &cpu.hexagonv55,
351 &cpu.hexagonv60,
352 &cpu.hexagonv62,
353 &cpu.hexagonv65,
354 &cpu.hexagonv66,
200355};
lib/std/target/mips.zig+610-818
......@@ -1,819 +1,611 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_abs2008 = Feature{
5 .name = "abs2008",
6 .llvm_name = "abs2008",
7 .description = "Disable IEEE 754-2008 abs.fmt mode",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_crc = Feature{
13 .name = "crc",
14 .llvm_name = "crc",
15 .description = "Mips R6 CRC ASE",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_cnmips = Feature{
21 .name = "cnmips",
22 .llvm_name = "cnmips",
23 .description = "Octeon cnMIPS Support",
24 .dependencies = &[_]*const Feature {
25 &feature_mips4_32,
26 &feature_mips5_32r2,
27 &feature_mips3_32r2,
28 &feature_mips3_32,
29 &feature_mips4_32r2,
30 &feature_gp64,
31 &feature_mips1,
32 &feature_fp64,
33 },
34};
35
36pub const feature_dsp = Feature{
37 .name = "dsp",
38 .llvm_name = "dsp",
39 .description = "Mips DSP ASE",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_dspr2 = Feature{
45 .name = "dspr2",
46 .llvm_name = "dspr2",
47 .description = "Mips DSP-R2 ASE",
48 .dependencies = &[_]*const Feature {
49 &feature_dsp,
50 },
51};
52
53pub const feature_dspr3 = Feature{
54 .name = "dspr3",
55 .llvm_name = "dspr3",
56 .description = "Mips DSP-R3 ASE",
57 .dependencies = &[_]*const Feature {
58 &feature_dsp,
59 },
60};
61
62pub const feature_eva = Feature{
63 .name = "eva",
64 .llvm_name = "eva",
65 .description = "Mips EVA ASE",
66 .dependencies = &[_]*const Feature {
67 },
68};
69
70pub const feature_fp64 = Feature{
71 .name = "fp64",
72 .llvm_name = "fp64",
73 .description = "Support 64-bit FP registers",
74 .dependencies = &[_]*const Feature {
75 },
76};
77
78pub const feature_fpxx = Feature{
79 .name = "fpxx",
80 .llvm_name = "fpxx",
81 .description = "Support for FPXX",
82 .dependencies = &[_]*const Feature {
83 },
84};
85
86pub const feature_ginv = Feature{
87 .name = "ginv",
88 .llvm_name = "ginv",
89 .description = "Mips Global Invalidate ASE",
90 .dependencies = &[_]*const Feature {
91 },
92};
93
94pub const feature_gp64 = Feature{
95 .name = "gp64",
96 .llvm_name = "gp64",
97 .description = "General Purpose Registers are 64-bit wide",
98 .dependencies = &[_]*const Feature {
99 },
100};
101
102pub const feature_longCalls = Feature{
103 .name = "longCalls",
104 .llvm_name = "long-calls",
105 .description = "Disable use of the jal instruction",
106 .dependencies = &[_]*const Feature {
107 },
108};
109
110pub const feature_msa = Feature{
111 .name = "msa",
112 .llvm_name = "msa",
113 .description = "Mips MSA ASE",
114 .dependencies = &[_]*const Feature {
115 },
116};
117
118pub const feature_mt = Feature{
119 .name = "mt",
120 .llvm_name = "mt",
121 .description = "Mips MT ASE",
122 .dependencies = &[_]*const Feature {
123 },
124};
125
126pub const feature_nomadd4 = Feature{
127 .name = "nomadd4",
128 .llvm_name = "nomadd4",
129 .description = "Disable 4-operand madd.fmt and related instructions",
130 .dependencies = &[_]*const Feature {
131 },
132};
133
134pub const feature_micromips = Feature{
135 .name = "micromips",
136 .llvm_name = "micromips",
137 .description = "microMips mode",
138 .dependencies = &[_]*const Feature {
139 },
140};
141
142pub const feature_mips1 = Feature{
143 .name = "mips1",
144 .llvm_name = "mips1",
145 .description = "Mips I ISA Support [highly experimental]",
146 .dependencies = &[_]*const Feature {
147 },
148};
149
150pub const feature_mips2 = Feature{
151 .name = "mips2",
152 .llvm_name = "mips2",
153 .description = "Mips II ISA Support [highly experimental]",
154 .dependencies = &[_]*const Feature {
155 &feature_mips1,
156 },
157};
158
159pub const feature_mips3 = Feature{
160 .name = "mips3",
161 .llvm_name = "mips3",
162 .description = "MIPS III ISA Support [highly experimental]",
163 .dependencies = &[_]*const Feature {
164 &feature_mips3_32r2,
165 &feature_mips3_32,
166 &feature_gp64,
167 &feature_mips1,
168 &feature_fp64,
169 },
170};
171
172pub const feature_mips3_32 = Feature{
173 .name = "mips3_32",
174 .llvm_name = "mips3_32",
175 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
176 .dependencies = &[_]*const Feature {
177 },
178};
179
180pub const feature_mips3_32r2 = Feature{
181 .name = "mips3_32r2",
182 .llvm_name = "mips3_32r2",
183 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
184 .dependencies = &[_]*const Feature {
185 },
186};
187
188pub const feature_mips4 = Feature{
189 .name = "mips4",
190 .llvm_name = "mips4",
191 .description = "MIPS IV ISA Support",
192 .dependencies = &[_]*const Feature {
193 &feature_mips4_32,
194 &feature_mips3_32r2,
195 &feature_mips3_32,
196 &feature_mips4_32r2,
197 &feature_gp64,
198 &feature_mips1,
199 &feature_fp64,
200 },
201};
202
203pub const feature_mips4_32 = Feature{
204 .name = "mips4_32",
205 .llvm_name = "mips4_32",
206 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
207 .dependencies = &[_]*const Feature {
208 },
209};
210
211pub const feature_mips4_32r2 = Feature{
212 .name = "mips4_32r2",
213 .llvm_name = "mips4_32r2",
214 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
215 .dependencies = &[_]*const Feature {
216 },
217};
218
219pub const feature_mips5 = Feature{
220 .name = "mips5",
221 .llvm_name = "mips5",
222 .description = "MIPS V ISA Support [highly experimental]",
223 .dependencies = &[_]*const Feature {
224 &feature_mips4_32,
225 &feature_mips5_32r2,
226 &feature_mips3_32r2,
227 &feature_mips3_32,
228 &feature_mips4_32r2,
229 &feature_gp64,
230 &feature_mips1,
231 &feature_fp64,
232 },
233};
234
235pub const feature_mips5_32r2 = Feature{
236 .name = "mips5_32r2",
237 .llvm_name = "mips5_32r2",
238 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
239 .dependencies = &[_]*const Feature {
240 },
241};
242
243pub const feature_mips16 = Feature{
244 .name = "mips16",
245 .llvm_name = "mips16",
246 .description = "Mips16 mode",
247 .dependencies = &[_]*const Feature {
248 },
249};
250
251pub const feature_mips32 = Feature{
252 .name = "mips32",
253 .llvm_name = "mips32",
254 .description = "Mips32 ISA Support",
255 .dependencies = &[_]*const Feature {
256 &feature_mips3_32,
257 &feature_mips4_32,
258 &feature_mips1,
259 },
260};
261
262pub const feature_mips32r2 = Feature{
263 .name = "mips32r2",
264 .llvm_name = "mips32r2",
265 .description = "Mips32r2 ISA Support",
266 .dependencies = &[_]*const Feature {
267 &feature_mips4_32,
268 &feature_mips5_32r2,
269 &feature_mips3_32r2,
270 &feature_mips3_32,
271 &feature_mips4_32r2,
272 &feature_mips1,
273 },
274};
275
276pub const feature_mips32r3 = Feature{
277 .name = "mips32r3",
278 .llvm_name = "mips32r3",
279 .description = "Mips32r3 ISA Support",
280 .dependencies = &[_]*const Feature {
281 &feature_mips4_32,
282 &feature_mips5_32r2,
283 &feature_mips3_32r2,
284 &feature_mips3_32,
285 &feature_mips4_32r2,
286 &feature_mips1,
287 },
288};
289
290pub const feature_mips32r5 = Feature{
291 .name = "mips32r5",
292 .llvm_name = "mips32r5",
293 .description = "Mips32r5 ISA Support",
294 .dependencies = &[_]*const Feature {
295 &feature_mips4_32,
296 &feature_mips5_32r2,
297 &feature_mips3_32r2,
298 &feature_mips3_32,
299 &feature_mips4_32r2,
300 &feature_mips1,
301 },
302};
303
304pub const feature_mips32r6 = Feature{
305 .name = "mips32r6",
306 .llvm_name = "mips32r6",
307 .description = "Mips32r6 ISA Support [experimental]",
308 .dependencies = &[_]*const Feature {
309 &feature_mips4_32,
310 &feature_mips5_32r2,
311 &feature_mips3_32r2,
312 &feature_mips3_32,
313 &feature_mips4_32r2,
314 &feature_nan2008,
315 &feature_mips1,
316 &feature_fp64,
317 &feature_abs2008,
318 },
319};
320
321pub const feature_mips64 = Feature{
322 .name = "mips64",
323 .llvm_name = "mips64",
324 .description = "Mips64 ISA Support",
325 .dependencies = &[_]*const Feature {
326 &feature_mips4_32,
327 &feature_mips5_32r2,
328 &feature_mips3_32r2,
329 &feature_mips3_32,
330 &feature_mips4_32r2,
331 &feature_gp64,
332 &feature_mips1,
333 &feature_fp64,
334 },
335};
336
337pub const feature_mips64r2 = Feature{
338 .name = "mips64r2",
339 .llvm_name = "mips64r2",
340 .description = "Mips64r2 ISA Support",
341 .dependencies = &[_]*const Feature {
342 &feature_mips4_32,
343 &feature_mips5_32r2,
344 &feature_mips3_32r2,
345 &feature_mips3_32,
346 &feature_mips4_32r2,
347 &feature_gp64,
348 &feature_mips1,
349 &feature_fp64,
350 },
351};
352
353pub const feature_mips64r3 = Feature{
354 .name = "mips64r3",
355 .llvm_name = "mips64r3",
356 .description = "Mips64r3 ISA Support",
357 .dependencies = &[_]*const Feature {
358 &feature_mips4_32,
359 &feature_mips5_32r2,
360 &feature_mips3_32r2,
361 &feature_mips3_32,
362 &feature_mips4_32r2,
363 &feature_gp64,
364 &feature_mips1,
365 &feature_fp64,
366 },
367};
368
369pub const feature_mips64r5 = Feature{
370 .name = "mips64r5",
371 .llvm_name = "mips64r5",
372 .description = "Mips64r5 ISA Support",
373 .dependencies = &[_]*const Feature {
374 &feature_mips4_32,
375 &feature_mips5_32r2,
376 &feature_mips3_32r2,
377 &feature_mips3_32,
378 &feature_mips4_32r2,
379 &feature_gp64,
380 &feature_mips1,
381 &feature_fp64,
382 },
383};
384
385pub const feature_mips64r6 = Feature{
386 .name = "mips64r6",
387 .llvm_name = "mips64r6",
388 .description = "Mips64r6 ISA Support [experimental]",
389 .dependencies = &[_]*const Feature {
390 &feature_mips4_32,
391 &feature_mips5_32r2,
392 &feature_mips3_32r2,
393 &feature_mips3_32,
394 &feature_mips4_32r2,
395 &feature_nan2008,
396 &feature_gp64,
397 &feature_mips1,
398 &feature_fp64,
399 &feature_abs2008,
400 },
401};
402
403pub const feature_nan2008 = Feature{
404 .name = "nan2008",
405 .llvm_name = "nan2008",
406 .description = "IEEE 754-2008 NaN encoding",
407 .dependencies = &[_]*const Feature {
408 },
409};
410
411pub const feature_noabicalls = Feature{
412 .name = "noabicalls",
413 .llvm_name = "noabicalls",
414 .description = "Disable SVR4-style position-independent code",
415 .dependencies = &[_]*const Feature {
416 },
417};
418
419pub const feature_nooddspreg = Feature{
420 .name = "nooddspreg",
421 .llvm_name = "nooddspreg",
422 .description = "Disable odd numbered single-precision registers",
423 .dependencies = &[_]*const Feature {
424 },
425};
426
427pub const feature_ptr64 = Feature{
428 .name = "ptr64",
429 .llvm_name = "ptr64",
430 .description = "Pointers are 64-bit wide",
431 .dependencies = &[_]*const Feature {
432 },
433};
434
435pub const feature_singleFloat = Feature{
436 .name = "singleFloat",
437 .llvm_name = "single-float",
438 .description = "Only supports single precision float",
439 .dependencies = &[_]*const Feature {
440 },
441};
442
443pub const feature_softFloat = Feature{
444 .name = "softFloat",
445 .llvm_name = "soft-float",
446 .description = "Does not support floating point instructions",
447 .dependencies = &[_]*const Feature {
448 },
449};
450
451pub const feature_sym32 = Feature{
452 .name = "sym32",
453 .llvm_name = "sym32",
454 .description = "Symbols are 32 bit on Mips64",
455 .dependencies = &[_]*const Feature {
456 },
457};
458
459pub const feature_useIndirectJumpHazard = Feature{
460 .name = "useIndirectJumpHazard",
461 .llvm_name = "use-indirect-jump-hazard",
462 .description = "Use indirect jump guards to prevent certain speculation based attacks",
463 .dependencies = &[_]*const Feature {
464 },
465};
466
467pub const feature_useTccInDiv = Feature{
468 .name = "useTccInDiv",
469 .llvm_name = "use-tcc-in-div",
470 .description = "Force the assembler to use trapping",
471 .dependencies = &[_]*const Feature {
472 },
473};
474
475pub const feature_vfpu = Feature{
476 .name = "vfpu",
477 .llvm_name = "vfpu",
478 .description = "Enable vector FPU instructions",
479 .dependencies = &[_]*const Feature {
480 },
481};
482
483pub const feature_virt = Feature{
484 .name = "virt",
485 .llvm_name = "virt",
486 .description = "Mips Virtualization ASE",
487 .dependencies = &[_]*const Feature {
488 },
489};
490
491pub const feature_p5600 = Feature{
492 .name = "p5600",
493 .llvm_name = "p5600",
494 .description = "The P5600 Processor",
495 .dependencies = &[_]*const Feature {
496 &feature_mips4_32,
497 &feature_mips5_32r2,
498 &feature_mips3_32r2,
499 &feature_mips3_32,
500 &feature_mips4_32r2,
501 &feature_mips1,
502 },
503};
504
505pub const features = &[_]*const Feature {
506 &feature_abs2008,
507 &feature_crc,
508 &feature_cnmips,
509 &feature_dsp,
510 &feature_dspr2,
511 &feature_dspr3,
512 &feature_eva,
513 &feature_fp64,
514 &feature_fpxx,
515 &feature_ginv,
516 &feature_gp64,
517 &feature_longCalls,
518 &feature_msa,
519 &feature_mt,
520 &feature_nomadd4,
521 &feature_micromips,
522 &feature_mips1,
523 &feature_mips2,
524 &feature_mips3,
525 &feature_mips3_32,
526 &feature_mips3_32r2,
527 &feature_mips4,
528 &feature_mips4_32,
529 &feature_mips4_32r2,
530 &feature_mips5,
531 &feature_mips5_32r2,
532 &feature_mips16,
533 &feature_mips32,
534 &feature_mips32r2,
535 &feature_mips32r3,
536 &feature_mips32r5,
537 &feature_mips32r6,
538 &feature_mips64,
539 &feature_mips64r2,
540 &feature_mips64r3,
541 &feature_mips64r5,
542 &feature_mips64r6,
543 &feature_nan2008,
544 &feature_noabicalls,
545 &feature_nooddspreg,
546 &feature_ptr64,
547 &feature_singleFloat,
548 &feature_softFloat,
549 &feature_sym32,
550 &feature_useIndirectJumpHazard,
551 &feature_useTccInDiv,
552 &feature_vfpu,
553 &feature_virt,
554 &feature_p5600,
555};
556
557pub const cpu_mips1 = Cpu{
558 .name = "mips1",
559 .llvm_name = "mips1",
560 .dependencies = &[_]*const Feature {
561 &feature_mips1,
562 },
563};
564
565pub const cpu_mips2 = Cpu{
566 .name = "mips2",
567 .llvm_name = "mips2",
568 .dependencies = &[_]*const Feature {
569 &feature_mips1,
570 &feature_mips2,
571 },
572};
573
574pub const cpu_mips3 = Cpu{
575 .name = "mips3",
576 .llvm_name = "mips3",
577 .dependencies = &[_]*const Feature {
578 &feature_mips3_32r2,
579 &feature_mips3_32,
580 &feature_gp64,
581 &feature_mips1,
582 &feature_fp64,
583 &feature_mips3,
584 },
585};
586
587pub const cpu_mips32 = Cpu{
588 .name = "mips32",
589 .llvm_name = "mips32",
590 .dependencies = &[_]*const Feature {
591 &feature_mips3_32,
592 &feature_mips4_32,
593 &feature_mips1,
594 &feature_mips32,
595 },
596};
597
598pub const cpu_mips32r2 = Cpu{
599 .name = "mips32r2",
600 .llvm_name = "mips32r2",
601 .dependencies = &[_]*const Feature {
602 &feature_mips4_32,
603 &feature_mips5_32r2,
604 &feature_mips3_32r2,
605 &feature_mips3_32,
606 &feature_mips4_32r2,
607 &feature_mips1,
608 &feature_mips32r2,
609 },
610};
611
612pub const cpu_mips32r3 = Cpu{
613 .name = "mips32r3",
614 .llvm_name = "mips32r3",
615 .dependencies = &[_]*const Feature {
616 &feature_mips4_32,
617 &feature_mips5_32r2,
618 &feature_mips3_32r2,
619 &feature_mips3_32,
620 &feature_mips4_32r2,
621 &feature_mips1,
622 &feature_mips32r3,
623 },
624};
625
626pub const cpu_mips32r5 = Cpu{
627 .name = "mips32r5",
628 .llvm_name = "mips32r5",
629 .dependencies = &[_]*const Feature {
630 &feature_mips4_32,
631 &feature_mips5_32r2,
632 &feature_mips3_32r2,
633 &feature_mips3_32,
634 &feature_mips4_32r2,
635 &feature_mips1,
636 &feature_mips32r5,
637 },
638};
639
640pub const cpu_mips32r6 = Cpu{
641 .name = "mips32r6",
642 .llvm_name = "mips32r6",
643 .dependencies = &[_]*const Feature {
644 &feature_mips4_32,
645 &feature_mips5_32r2,
646 &feature_mips3_32r2,
647 &feature_mips3_32,
648 &feature_mips4_32r2,
649 &feature_nan2008,
650 &feature_mips1,
651 &feature_fp64,
652 &feature_abs2008,
653 &feature_mips32r6,
654 },
655};
656
657pub const cpu_mips4 = Cpu{
658 .name = "mips4",
659 .llvm_name = "mips4",
660 .dependencies = &[_]*const Feature {
661 &feature_mips4_32,
662 &feature_mips3_32r2,
663 &feature_mips3_32,
664 &feature_mips4_32r2,
665 &feature_gp64,
666 &feature_mips1,
667 &feature_fp64,
668 &feature_mips4,
669 },
670};
671
672pub const cpu_mips5 = Cpu{
673 .name = "mips5",
674 .llvm_name = "mips5",
675 .dependencies = &[_]*const Feature {
676 &feature_mips4_32,
677 &feature_mips5_32r2,
678 &feature_mips3_32r2,
679 &feature_mips3_32,
680 &feature_mips4_32r2,
681 &feature_gp64,
682 &feature_mips1,
683 &feature_fp64,
684 &feature_mips5,
685 },
686};
687
688pub const cpu_mips64 = Cpu{
689 .name = "mips64",
690 .llvm_name = "mips64",
691 .dependencies = &[_]*const Feature {
692 &feature_mips4_32,
693 &feature_mips5_32r2,
694 &feature_mips3_32r2,
695 &feature_mips3_32,
696 &feature_mips4_32r2,
697 &feature_gp64,
698 &feature_mips1,
699 &feature_fp64,
700 &feature_mips64,
701 },
702};
703
704pub const cpu_mips64r2 = Cpu{
705 .name = "mips64r2",
706 .llvm_name = "mips64r2",
707 .dependencies = &[_]*const Feature {
708 &feature_mips4_32,
709 &feature_mips5_32r2,
710 &feature_mips3_32r2,
711 &feature_mips3_32,
712 &feature_mips4_32r2,
713 &feature_gp64,
714 &feature_mips1,
715 &feature_fp64,
716 &feature_mips64r2,
717 },
718};
719
720pub const cpu_mips64r3 = Cpu{
721 .name = "mips64r3",
722 .llvm_name = "mips64r3",
723 .dependencies = &[_]*const Feature {
724 &feature_mips4_32,
725 &feature_mips5_32r2,
726 &feature_mips3_32r2,
727 &feature_mips3_32,
728 &feature_mips4_32r2,
729 &feature_gp64,
730 &feature_mips1,
731 &feature_fp64,
732 &feature_mips64r3,
733 },
734};
735
736pub const cpu_mips64r5 = Cpu{
737 .name = "mips64r5",
738 .llvm_name = "mips64r5",
739 .dependencies = &[_]*const Feature {
740 &feature_mips4_32,
741 &feature_mips5_32r2,
742 &feature_mips3_32r2,
743 &feature_mips3_32,
744 &feature_mips4_32r2,
745 &feature_gp64,
746 &feature_mips1,
747 &feature_fp64,
748 &feature_mips64r5,
749 },
750};
751
752pub const cpu_mips64r6 = Cpu{
753 .name = "mips64r6",
754 .llvm_name = "mips64r6",
755 .dependencies = &[_]*const Feature {
756 &feature_mips4_32,
757 &feature_mips5_32r2,
758 &feature_mips3_32r2,
759 &feature_mips3_32,
760 &feature_mips4_32r2,
761 &feature_nan2008,
762 &feature_gp64,
763 &feature_mips1,
764 &feature_fp64,
765 &feature_abs2008,
766 &feature_mips64r6,
767 },
768};
769
770pub const cpu_octeon = Cpu{
771 .name = "octeon",
772 .llvm_name = "octeon",
773 .dependencies = &[_]*const Feature {
774 &feature_mips4_32,
775 &feature_mips5_32r2,
776 &feature_mips3_32r2,
777 &feature_mips3_32,
778 &feature_mips4_32r2,
779 &feature_gp64,
780 &feature_mips1,
781 &feature_fp64,
782 &feature_cnmips,
783 &feature_mips64r2,
784 },
785};
786
787pub const cpu_p5600 = Cpu{
788 .name = "p5600",
789 .llvm_name = "p5600",
790 .dependencies = &[_]*const Feature {
791 &feature_mips4_32,
792 &feature_mips5_32r2,
793 &feature_mips3_32r2,
794 &feature_mips3_32,
795 &feature_mips4_32r2,
796 &feature_mips1,
797 &feature_p5600,
798 },
799};
800
801pub const cpus = &[_]*const Cpu {
802 &cpu_mips1,
803 &cpu_mips2,
804 &cpu_mips3,
805 &cpu_mips32,
806 &cpu_mips32r2,
807 &cpu_mips32r3,
808 &cpu_mips32r5,
809 &cpu_mips32r6,
810 &cpu_mips4,
811 &cpu_mips5,
812 &cpu_mips64,
813 &cpu_mips64r2,
814 &cpu_mips64r3,
815 &cpu_mips64r5,
816 &cpu_mips64r6,
817 &cpu_octeon,
818 &cpu_p5600,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 abs2008,
6 cnmips,
7 crc,
8 dsp,
9 dspr2,
10 dspr3,
11 eva,
12 fp64,
13 fpxx,
14 ginv,
15 gp64,
16 long_calls,
17 micromips,
18 mips1,
19 mips16,
20 mips2,
21 mips3,
22 mips32,
23 mips32r2,
24 mips32r3,
25 mips32r5,
26 mips32r6,
27 mips3_32,
28 mips3_32r2,
29 mips4,
30 mips4_32,
31 mips4_32r2,
32 mips5,
33 mips5_32r2,
34 mips64,
35 mips64r2,
36 mips64r3,
37 mips64r5,
38 mips64r6,
39 msa,
40 mt,
41 nan2008,
42 noabicalls,
43 nomadd4,
44 nooddspreg,
45 p5600,
46 ptr64,
47 single_float,
48 soft_float,
49 sym32,
50 use_indirect_jump_hazard,
51 use_tcc_in_div,
52 vfpu,
53 virt,
54};
55
56pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
57
58pub const all_features = blk: {
59 const len = @typeInfo(Feature).Enum.fields.len;
60 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
61 var result: [len]Cpu.Feature = undefined;
62 result[@enumToInt(Feature.abs2008)] = .{
63 .index = @enumToInt(Feature.abs2008),
64 .name = @tagName(Feature.abs2008),
65 .llvm_name = "abs2008",
66 .description = "Disable IEEE 754-2008 abs.fmt mode",
67 .dependencies = 0,
68 };
69 result[@enumToInt(Feature.cnmips)] = .{
70 .index = @enumToInt(Feature.cnmips),
71 .name = @tagName(Feature.cnmips),
72 .llvm_name = "cnmips",
73 .description = "Octeon cnMIPS Support",
74 .dependencies = featureSet(&[_]Feature{
75 .mips64r2,
76 }),
77 };
78 result[@enumToInt(Feature.crc)] = .{
79 .index = @enumToInt(Feature.crc),
80 .name = @tagName(Feature.crc),
81 .llvm_name = "crc",
82 .description = "Mips R6 CRC ASE",
83 .dependencies = 0,
84 };
85 result[@enumToInt(Feature.dsp)] = .{
86 .index = @enumToInt(Feature.dsp),
87 .name = @tagName(Feature.dsp),
88 .llvm_name = "dsp",
89 .description = "Mips DSP ASE",
90 .dependencies = 0,
91 };
92 result[@enumToInt(Feature.dspr2)] = .{
93 .index = @enumToInt(Feature.dspr2),
94 .name = @tagName(Feature.dspr2),
95 .llvm_name = "dspr2",
96 .description = "Mips DSP-R2 ASE",
97 .dependencies = featureSet(&[_]Feature{
98 .dsp,
99 }),
100 };
101 result[@enumToInt(Feature.dspr3)] = .{
102 .index = @enumToInt(Feature.dspr3),
103 .name = @tagName(Feature.dspr3),
104 .llvm_name = "dspr3",
105 .description = "Mips DSP-R3 ASE",
106 .dependencies = featureSet(&[_]Feature{
107 .dsp,
108 .dspr2,
109 }),
110 };
111 result[@enumToInt(Feature.eva)] = .{
112 .index = @enumToInt(Feature.eva),
113 .name = @tagName(Feature.eva),
114 .llvm_name = "eva",
115 .description = "Mips EVA ASE",
116 .dependencies = 0,
117 };
118 result[@enumToInt(Feature.fp64)] = .{
119 .index = @enumToInt(Feature.fp64),
120 .name = @tagName(Feature.fp64),
121 .llvm_name = "fp64",
122 .description = "Support 64-bit FP registers",
123 .dependencies = 0,
124 };
125 result[@enumToInt(Feature.fpxx)] = .{
126 .index = @enumToInt(Feature.fpxx),
127 .name = @tagName(Feature.fpxx),
128 .llvm_name = "fpxx",
129 .description = "Support for FPXX",
130 .dependencies = 0,
131 };
132 result[@enumToInt(Feature.ginv)] = .{
133 .index = @enumToInt(Feature.ginv),
134 .name = @tagName(Feature.ginv),
135 .llvm_name = "ginv",
136 .description = "Mips Global Invalidate ASE",
137 .dependencies = 0,
138 };
139 result[@enumToInt(Feature.gp64)] = .{
140 .index = @enumToInt(Feature.gp64),
141 .name = @tagName(Feature.gp64),
142 .llvm_name = "gp64",
143 .description = "General Purpose Registers are 64-bit wide",
144 .dependencies = 0,
145 };
146 result[@enumToInt(Feature.long_calls)] = .{
147 .index = @enumToInt(Feature.long_calls),
148 .name = @tagName(Feature.long_calls),
149 .llvm_name = "long-calls",
150 .description = "Disable use of the jal instruction",
151 .dependencies = 0,
152 };
153 result[@enumToInt(Feature.micromips)] = .{
154 .index = @enumToInt(Feature.micromips),
155 .name = @tagName(Feature.micromips),
156 .llvm_name = "micromips",
157 .description = "microMips mode",
158 .dependencies = 0,
159 };
160 result[@enumToInt(Feature.mips1)] = .{
161 .index = @enumToInt(Feature.mips1),
162 .name = @tagName(Feature.mips1),
163 .llvm_name = "mips1",
164 .description = "Mips I ISA Support [highly experimental]",
165 .dependencies = 0,
166 };
167 result[@enumToInt(Feature.mips16)] = .{
168 .index = @enumToInt(Feature.mips16),
169 .name = @tagName(Feature.mips16),
170 .llvm_name = "mips16",
171 .description = "Mips16 mode",
172 .dependencies = 0,
173 };
174 result[@enumToInt(Feature.mips2)] = .{
175 .index = @enumToInt(Feature.mips2),
176 .name = @tagName(Feature.mips2),
177 .llvm_name = "mips2",
178 .description = "Mips II ISA Support [highly experimental]",
179 .dependencies = featureSet(&[_]Feature{
180 .mips1,
181 }),
182 };
183 result[@enumToInt(Feature.mips3)] = .{
184 .index = @enumToInt(Feature.mips3),
185 .name = @tagName(Feature.mips3),
186 .llvm_name = "mips3",
187 .description = "MIPS III ISA Support [highly experimental]",
188 .dependencies = featureSet(&[_]Feature{
189 .fp64,
190 .gp64,
191 .mips2,
192 .mips3_32,
193 .mips3_32r2,
194 }),
195 };
196 result[@enumToInt(Feature.mips32)] = .{
197 .index = @enumToInt(Feature.mips32),
198 .name = @tagName(Feature.mips32),
199 .llvm_name = "mips32",
200 .description = "Mips32 ISA Support",
201 .dependencies = featureSet(&[_]Feature{
202 .mips2,
203 .mips3_32,
204 .mips4_32,
205 }),
206 };
207 result[@enumToInt(Feature.mips32r2)] = .{
208 .index = @enumToInt(Feature.mips32r2),
209 .name = @tagName(Feature.mips32r2),
210 .llvm_name = "mips32r2",
211 .description = "Mips32r2 ISA Support",
212 .dependencies = featureSet(&[_]Feature{
213 .mips32,
214 .mips3_32r2,
215 .mips4_32r2,
216 .mips5_32r2,
217 }),
218 };
219 result[@enumToInt(Feature.mips32r3)] = .{
220 .index = @enumToInt(Feature.mips32r3),
221 .name = @tagName(Feature.mips32r3),
222 .llvm_name = "mips32r3",
223 .description = "Mips32r3 ISA Support",
224 .dependencies = featureSet(&[_]Feature{
225 .mips32r2,
226 }),
227 };
228 result[@enumToInt(Feature.mips32r5)] = .{
229 .index = @enumToInt(Feature.mips32r5),
230 .name = @tagName(Feature.mips32r5),
231 .llvm_name = "mips32r5",
232 .description = "Mips32r5 ISA Support",
233 .dependencies = featureSet(&[_]Feature{
234 .mips32r3,
235 }),
236 };
237 result[@enumToInt(Feature.mips32r6)] = .{
238 .index = @enumToInt(Feature.mips32r6),
239 .name = @tagName(Feature.mips32r6),
240 .llvm_name = "mips32r6",
241 .description = "Mips32r6 ISA Support [experimental]",
242 .dependencies = featureSet(&[_]Feature{
243 .abs2008,
244 .fp64,
245 .mips32r5,
246 .nan2008,
247 }),
248 };
249 result[@enumToInt(Feature.mips3_32)] = .{
250 .index = @enumToInt(Feature.mips3_32),
251 .name = @tagName(Feature.mips3_32),
252 .llvm_name = "mips3_32",
253 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
254 .dependencies = 0,
255 };
256 result[@enumToInt(Feature.mips3_32r2)] = .{
257 .index = @enumToInt(Feature.mips3_32r2),
258 .name = @tagName(Feature.mips3_32r2),
259 .llvm_name = "mips3_32r2",
260 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
261 .dependencies = 0,
262 };
263 result[@enumToInt(Feature.mips4)] = .{
264 .index = @enumToInt(Feature.mips4),
265 .name = @tagName(Feature.mips4),
266 .llvm_name = "mips4",
267 .description = "MIPS IV ISA Support",
268 .dependencies = featureSet(&[_]Feature{
269 .mips3,
270 .mips4_32,
271 .mips4_32r2,
272 }),
273 };
274 result[@enumToInt(Feature.mips4_32)] = .{
275 .index = @enumToInt(Feature.mips4_32),
276 .name = @tagName(Feature.mips4_32),
277 .llvm_name = "mips4_32",
278 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
279 .dependencies = 0,
280 };
281 result[@enumToInt(Feature.mips4_32r2)] = .{
282 .index = @enumToInt(Feature.mips4_32r2),
283 .name = @tagName(Feature.mips4_32r2),
284 .llvm_name = "mips4_32r2",
285 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
286 .dependencies = 0,
287 };
288 result[@enumToInt(Feature.mips5)] = .{
289 .index = @enumToInt(Feature.mips5),
290 .name = @tagName(Feature.mips5),
291 .llvm_name = "mips5",
292 .description = "MIPS V ISA Support [highly experimental]",
293 .dependencies = featureSet(&[_]Feature{
294 .mips4,
295 .mips5_32r2,
296 }),
297 };
298 result[@enumToInt(Feature.mips5_32r2)] = .{
299 .index = @enumToInt(Feature.mips5_32r2),
300 .name = @tagName(Feature.mips5_32r2),
301 .llvm_name = "mips5_32r2",
302 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
303 .dependencies = 0,
304 };
305 result[@enumToInt(Feature.mips64)] = .{
306 .index = @enumToInt(Feature.mips64),
307 .name = @tagName(Feature.mips64),
308 .llvm_name = "mips64",
309 .description = "Mips64 ISA Support",
310 .dependencies = featureSet(&[_]Feature{
311 .mips32,
312 .mips5,
313 }),
314 };
315 result[@enumToInt(Feature.mips64r2)] = .{
316 .index = @enumToInt(Feature.mips64r2),
317 .name = @tagName(Feature.mips64r2),
318 .llvm_name = "mips64r2",
319 .description = "Mips64r2 ISA Support",
320 .dependencies = featureSet(&[_]Feature{
321 .mips32r2,
322 .mips64,
323 }),
324 };
325 result[@enumToInt(Feature.mips64r3)] = .{
326 .index = @enumToInt(Feature.mips64r3),
327 .name = @tagName(Feature.mips64r3),
328 .llvm_name = "mips64r3",
329 .description = "Mips64r3 ISA Support",
330 .dependencies = featureSet(&[_]Feature{
331 .mips32r3,
332 .mips64r2,
333 }),
334 };
335 result[@enumToInt(Feature.mips64r5)] = .{
336 .index = @enumToInt(Feature.mips64r5),
337 .name = @tagName(Feature.mips64r5),
338 .llvm_name = "mips64r5",
339 .description = "Mips64r5 ISA Support",
340 .dependencies = featureSet(&[_]Feature{
341 .mips32r5,
342 .mips64r3,
343 }),
344 };
345 result[@enumToInt(Feature.mips64r6)] = .{
346 .index = @enumToInt(Feature.mips64r6),
347 .name = @tagName(Feature.mips64r6),
348 .llvm_name = "mips64r6",
349 .description = "Mips64r6 ISA Support [experimental]",
350 .dependencies = featureSet(&[_]Feature{
351 .abs2008,
352 .mips32r6,
353 .mips64r5,
354 .nan2008,
355 }),
356 };
357 result[@enumToInt(Feature.msa)] = .{
358 .index = @enumToInt(Feature.msa),
359 .name = @tagName(Feature.msa),
360 .llvm_name = "msa",
361 .description = "Mips MSA ASE",
362 .dependencies = 0,
363 };
364 result[@enumToInt(Feature.mt)] = .{
365 .index = @enumToInt(Feature.mt),
366 .name = @tagName(Feature.mt),
367 .llvm_name = "mt",
368 .description = "Mips MT ASE",
369 .dependencies = 0,
370 };
371 result[@enumToInt(Feature.nan2008)] = .{
372 .index = @enumToInt(Feature.nan2008),
373 .name = @tagName(Feature.nan2008),
374 .llvm_name = "nan2008",
375 .description = "IEEE 754-2008 NaN encoding",
376 .dependencies = 0,
377 };
378 result[@enumToInt(Feature.noabicalls)] = .{
379 .index = @enumToInt(Feature.noabicalls),
380 .name = @tagName(Feature.noabicalls),
381 .llvm_name = "noabicalls",
382 .description = "Disable SVR4-style position-independent code",
383 .dependencies = 0,
384 };
385 result[@enumToInt(Feature.nomadd4)] = .{
386 .index = @enumToInt(Feature.nomadd4),
387 .name = @tagName(Feature.nomadd4),
388 .llvm_name = "nomadd4",
389 .description = "Disable 4-operand madd.fmt and related instructions",
390 .dependencies = 0,
391 };
392 result[@enumToInt(Feature.nooddspreg)] = .{
393 .index = @enumToInt(Feature.nooddspreg),
394 .name = @tagName(Feature.nooddspreg),
395 .llvm_name = "nooddspreg",
396 .description = "Disable odd numbered single-precision registers",
397 .dependencies = 0,
398 };
399 result[@enumToInt(Feature.p5600)] = .{
400 .index = @enumToInt(Feature.p5600),
401 .name = @tagName(Feature.p5600),
402 .llvm_name = "p5600",
403 .description = "The P5600 Processor",
404 .dependencies = featureSet(&[_]Feature{
405 .mips32r5,
406 }),
407 };
408 result[@enumToInt(Feature.ptr64)] = .{
409 .index = @enumToInt(Feature.ptr64),
410 .name = @tagName(Feature.ptr64),
411 .llvm_name = "ptr64",
412 .description = "Pointers are 64-bit wide",
413 .dependencies = 0,
414 };
415 result[@enumToInt(Feature.single_float)] = .{
416 .index = @enumToInt(Feature.single_float),
417 .name = @tagName(Feature.single_float),
418 .llvm_name = "single-float",
419 .description = "Only supports single precision float",
420 .dependencies = 0,
421 };
422 result[@enumToInt(Feature.soft_float)] = .{
423 .index = @enumToInt(Feature.soft_float),
424 .name = @tagName(Feature.soft_float),
425 .llvm_name = "soft-float",
426 .description = "Does not support floating point instructions",
427 .dependencies = 0,
428 };
429 result[@enumToInt(Feature.sym32)] = .{
430 .index = @enumToInt(Feature.sym32),
431 .name = @tagName(Feature.sym32),
432 .llvm_name = "sym32",
433 .description = "Symbols are 32 bit on Mips64",
434 .dependencies = 0,
435 };
436 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{
437 .index = @enumToInt(Feature.use_indirect_jump_hazard),
438 .name = @tagName(Feature.use_indirect_jump_hazard),
439 .llvm_name = "use-indirect-jump-hazard",
440 .description = "Use indirect jump guards to prevent certain speculation based attacks",
441 .dependencies = 0,
442 };
443 result[@enumToInt(Feature.use_tcc_in_div)] = .{
444 .index = @enumToInt(Feature.use_tcc_in_div),
445 .name = @tagName(Feature.use_tcc_in_div),
446 .llvm_name = "use-tcc-in-div",
447 .description = "Force the assembler to use trapping",
448 .dependencies = 0,
449 };
450 result[@enumToInt(Feature.vfpu)] = .{
451 .index = @enumToInt(Feature.vfpu),
452 .name = @tagName(Feature.vfpu),
453 .llvm_name = "vfpu",
454 .description = "Enable vector FPU instructions",
455 .dependencies = 0,
456 };
457 result[@enumToInt(Feature.virt)] = .{
458 .index = @enumToInt(Feature.virt),
459 .name = @tagName(Feature.virt),
460 .llvm_name = "virt",
461 .description = "Mips Virtualization ASE",
462 .dependencies = 0,
463 };
464 break :blk result;
465};
466
467pub const cpu = struct {
468 pub const mips1 = Cpu{
469 .name = "mips1",
470 .llvm_name = "mips1",
471 .features = featureSet(&[_]Feature{
472 .mips1,
473 }),
474 };
475 pub const mips2 = Cpu{
476 .name = "mips2",
477 .llvm_name = "mips2",
478 .features = featureSet(&[_]Feature{
479 .mips2,
480 }),
481 };
482 pub const mips3 = Cpu{
483 .name = "mips3",
484 .llvm_name = "mips3",
485 .features = featureSet(&[_]Feature{
486 .mips3,
487 }),
488 };
489 pub const mips32 = Cpu{
490 .name = "mips32",
491 .llvm_name = "mips32",
492 .features = featureSet(&[_]Feature{
493 .mips32,
494 }),
495 };
496 pub const mips32r2 = Cpu{
497 .name = "mips32r2",
498 .llvm_name = "mips32r2",
499 .features = featureSet(&[_]Feature{
500 .mips32r2,
501 }),
502 };
503 pub const mips32r3 = Cpu{
504 .name = "mips32r3",
505 .llvm_name = "mips32r3",
506 .features = featureSet(&[_]Feature{
507 .mips32r3,
508 }),
509 };
510 pub const mips32r5 = Cpu{
511 .name = "mips32r5",
512 .llvm_name = "mips32r5",
513 .features = featureSet(&[_]Feature{
514 .mips32r5,
515 }),
516 };
517 pub const mips32r6 = Cpu{
518 .name = "mips32r6",
519 .llvm_name = "mips32r6",
520 .features = featureSet(&[_]Feature{
521 .mips32r6,
522 }),
523 };
524 pub const mips4 = Cpu{
525 .name = "mips4",
526 .llvm_name = "mips4",
527 .features = featureSet(&[_]Feature{
528 .mips4,
529 }),
530 };
531 pub const mips5 = Cpu{
532 .name = "mips5",
533 .llvm_name = "mips5",
534 .features = featureSet(&[_]Feature{
535 .mips5,
536 }),
537 };
538 pub const mips64 = Cpu{
539 .name = "mips64",
540 .llvm_name = "mips64",
541 .features = featureSet(&[_]Feature{
542 .mips64,
543 }),
544 };
545 pub const mips64r2 = Cpu{
546 .name = "mips64r2",
547 .llvm_name = "mips64r2",
548 .features = featureSet(&[_]Feature{
549 .mips64r2,
550 }),
551 };
552 pub const mips64r3 = Cpu{
553 .name = "mips64r3",
554 .llvm_name = "mips64r3",
555 .features = featureSet(&[_]Feature{
556 .mips64r3,
557 }),
558 };
559 pub const mips64r5 = Cpu{
560 .name = "mips64r5",
561 .llvm_name = "mips64r5",
562 .features = featureSet(&[_]Feature{
563 .mips64r5,
564 }),
565 };
566 pub const mips64r6 = Cpu{
567 .name = "mips64r6",
568 .llvm_name = "mips64r6",
569 .features = featureSet(&[_]Feature{
570 .mips64r6,
571 }),
572 };
573 pub const octeon = Cpu{
574 .name = "octeon",
575 .llvm_name = "octeon",
576 .features = featureSet(&[_]Feature{
577 .cnmips,
578 .mips64r2,
579 }),
580 };
581 pub const p5600 = Cpu{
582 .name = "p5600",
583 .llvm_name = "p5600",
584 .features = featureSet(&[_]Feature{
585 .p5600,
586 }),
587 };
588};
589
590/// All mips CPUs, sorted alphabetically by name.
591/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
592/// compiler has inefficient memory and CPU usage, affecting build times.
593pub const all_cpus = &[_]*const Cpu{
594 &cpu.mips1,
595 &cpu.mips2,
596 &cpu.mips3,
597 &cpu.mips32,
598 &cpu.mips32r2,
599 &cpu.mips32r3,
600 &cpu.mips32r5,
601 &cpu.mips32r6,
602 &cpu.mips4,
603 &cpu.mips5,
604 &cpu.mips64,
605 &cpu.mips64r2,
606 &cpu.mips64r3,
607 &cpu.mips64r5,
608 &cpu.mips64r6,
609 &cpu.octeon,
610 &cpu.p5600,
819611};
lib/std/target/msp430.zig+66-60
......@@ -1,69 +1,75 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
33
4pub const feature_hwmult16 = Feature{
5 .name = "hwmult16",
6 .llvm_name = "hwmult16",
7 .description = "Enable 16-bit hardware multiplier",
8 .dependencies = &[_]*const Feature {
9 },
4pub const Feature = enum {
5 ext,
6 hwmult16,
7 hwmult32,
8 hwmultf5,
109};
1110
12pub const feature_hwmult32 = Feature{
13 .name = "hwmult32",
14 .llvm_name = "hwmult32",
15 .description = "Enable 32-bit hardware multiplier",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_hwmultf5 = Feature{
21 .name = "hwmultf5",
22 .llvm_name = "hwmultf5",
23 .description = "Enable F5 series hardware multiplier",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_ext = Feature{
29 .name = "ext",
30 .llvm_name = "ext",
31 .description = "Enable MSP430-X extensions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const features = &[_]*const Feature {
37 &feature_hwmult16,
38 &feature_hwmult32,
39 &feature_hwmultf5,
40 &feature_ext,
41};
42
43pub const cpu_generic = Cpu{
44 .name = "generic",
45 .llvm_name = "generic",
46 .dependencies = &[_]*const Feature {
47 },
48};
11pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
4912
50pub const cpu_msp430 = Cpu{
51 .name = "msp430",
52 .llvm_name = "msp430",
53 .dependencies = &[_]*const Feature {
54 },
13pub const all_features = blk: {
14 const len = @typeInfo(Feature).Enum.fields.len;
15 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
16 var result: [len]Cpu.Feature = undefined;
17 result[@enumToInt(Feature.ext)] = .{
18 .index = @enumToInt(Feature.ext),
19 .name = @tagName(Feature.ext),
20 .llvm_name = "ext",
21 .description = "Enable MSP430-X extensions",
22 .dependencies = 0,
23 };
24 result[@enumToInt(Feature.hwmult16)] = .{
25 .index = @enumToInt(Feature.hwmult16),
26 .name = @tagName(Feature.hwmult16),
27 .llvm_name = "hwmult16",
28 .description = "Enable 16-bit hardware multiplier",
29 .dependencies = 0,
30 };
31 result[@enumToInt(Feature.hwmult32)] = .{
32 .index = @enumToInt(Feature.hwmult32),
33 .name = @tagName(Feature.hwmult32),
34 .llvm_name = "hwmult32",
35 .description = "Enable 32-bit hardware multiplier",
36 .dependencies = 0,
37 };
38 result[@enumToInt(Feature.hwmultf5)] = .{
39 .index = @enumToInt(Feature.hwmultf5),
40 .name = @tagName(Feature.hwmultf5),
41 .llvm_name = "hwmultf5",
42 .description = "Enable F5 series hardware multiplier",
43 .dependencies = 0,
44 };
45 break :blk result;
5546};
5647
57pub const cpu_msp430x = Cpu{
58 .name = "msp430x",
59 .llvm_name = "msp430x",
60 .dependencies = &[_]*const Feature {
61 &feature_ext,
62 },
48pub const cpu = struct {
49 pub const generic = Cpu{
50 .name = "generic",
51 .llvm_name = "generic",
52 .features = 0,
53 };
54 pub const msp430 = Cpu{
55 .name = "msp430",
56 .llvm_name = "msp430",
57 .features = 0,
58 };
59 pub const msp430x = Cpu{
60 .name = "msp430x",
61 .llvm_name = "msp430x",
62 .features = featureSet(&[_]Feature{
63 .ext,
64 }),
65 };
6366};
6467
65pub const cpus = &[_]*const Cpu {
66 &cpu_generic,
67 &cpu_msp430,
68 &cpu_msp430x,
68/// All msp430 CPUs, sorted alphabetically by name.
69/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
70/// compiler has inefficient memory and CPU usage, affecting build times.
71pub const all_cpus = &[_]*const Cpu{
72 &cpu.generic,
73 &cpu.msp430,
74 &cpu.msp430x,
6975};
lib/std/target/nvptx.zig+353-378
......@@ -1,379 +1,354 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_ptx32 = Feature{
5 .name = "ptx32",
6 .llvm_name = "ptx32",
7 .description = "Use PTX version 3.2",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_ptx40 = Feature{
13 .name = "ptx40",
14 .llvm_name = "ptx40",
15 .description = "Use PTX version 4.0",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_ptx41 = Feature{
21 .name = "ptx41",
22 .llvm_name = "ptx41",
23 .description = "Use PTX version 4.1",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_ptx42 = Feature{
29 .name = "ptx42",
30 .llvm_name = "ptx42",
31 .description = "Use PTX version 4.2",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_ptx43 = Feature{
37 .name = "ptx43",
38 .llvm_name = "ptx43",
39 .description = "Use PTX version 4.3",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_ptx50 = Feature{
45 .name = "ptx50",
46 .llvm_name = "ptx50",
47 .description = "Use PTX version 5.0",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_ptx60 = Feature{
53 .name = "ptx60",
54 .llvm_name = "ptx60",
55 .description = "Use PTX version 6.0",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_ptx61 = Feature{
61 .name = "ptx61",
62 .llvm_name = "ptx61",
63 .description = "Use PTX version 6.1",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_ptx63 = Feature{
69 .name = "ptx63",
70 .llvm_name = "ptx63",
71 .description = "Use PTX version 6.3",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_ptx64 = Feature{
77 .name = "ptx64",
78 .llvm_name = "ptx64",
79 .description = "Use PTX version 6.4",
80 .dependencies = &[_]*const Feature {
81 },
82};
83
84pub const feature_sm_20 = Feature{
85 .name = "sm_20",
86 .llvm_name = "sm_20",
87 .description = "Target SM 2.0",
88 .dependencies = &[_]*const Feature {
89 },
90};
91
92pub const feature_sm_21 = Feature{
93 .name = "sm_21",
94 .llvm_name = "sm_21",
95 .description = "Target SM 2.1",
96 .dependencies = &[_]*const Feature {
97 },
98};
99
100pub const feature_sm_30 = Feature{
101 .name = "sm_30",
102 .llvm_name = "sm_30",
103 .description = "Target SM 3.0",
104 .dependencies = &[_]*const Feature {
105 },
106};
107
108pub const feature_sm_32 = Feature{
109 .name = "sm_32",
110 .llvm_name = "sm_32",
111 .description = "Target SM 3.2",
112 .dependencies = &[_]*const Feature {
113 },
114};
115
116pub const feature_sm_35 = Feature{
117 .name = "sm_35",
118 .llvm_name = "sm_35",
119 .description = "Target SM 3.5",
120 .dependencies = &[_]*const Feature {
121 },
122};
123
124pub const feature_sm_37 = Feature{
125 .name = "sm_37",
126 .llvm_name = "sm_37",
127 .description = "Target SM 3.7",
128 .dependencies = &[_]*const Feature {
129 },
130};
131
132pub const feature_sm_50 = Feature{
133 .name = "sm_50",
134 .llvm_name = "sm_50",
135 .description = "Target SM 5.0",
136 .dependencies = &[_]*const Feature {
137 },
138};
139
140pub const feature_sm_52 = Feature{
141 .name = "sm_52",
142 .llvm_name = "sm_52",
143 .description = "Target SM 5.2",
144 .dependencies = &[_]*const Feature {
145 },
146};
147
148pub const feature_sm_53 = Feature{
149 .name = "sm_53",
150 .llvm_name = "sm_53",
151 .description = "Target SM 5.3",
152 .dependencies = &[_]*const Feature {
153 },
154};
155
156pub const feature_sm_60 = Feature{
157 .name = "sm_60",
158 .llvm_name = "sm_60",
159 .description = "Target SM 6.0",
160 .dependencies = &[_]*const Feature {
161 },
162};
163
164pub const feature_sm_61 = Feature{
165 .name = "sm_61",
166 .llvm_name = "sm_61",
167 .description = "Target SM 6.1",
168 .dependencies = &[_]*const Feature {
169 },
170};
171
172pub const feature_sm_62 = Feature{
173 .name = "sm_62",
174 .llvm_name = "sm_62",
175 .description = "Target SM 6.2",
176 .dependencies = &[_]*const Feature {
177 },
178};
179
180pub const feature_sm_70 = Feature{
181 .name = "sm_70",
182 .llvm_name = "sm_70",
183 .description = "Target SM 7.0",
184 .dependencies = &[_]*const Feature {
185 },
186};
187
188pub const feature_sm_72 = Feature{
189 .name = "sm_72",
190 .llvm_name = "sm_72",
191 .description = "Target SM 7.2",
192 .dependencies = &[_]*const Feature {
193 },
194};
195
196pub const feature_sm_75 = Feature{
197 .name = "sm_75",
198 .llvm_name = "sm_75",
199 .description = "Target SM 7.5",
200 .dependencies = &[_]*const Feature {
201 },
202};
203
204pub const features = &[_]*const Feature {
205 &feature_ptx32,
206 &feature_ptx40,
207 &feature_ptx41,
208 &feature_ptx42,
209 &feature_ptx43,
210 &feature_ptx50,
211 &feature_ptx60,
212 &feature_ptx61,
213 &feature_ptx63,
214 &feature_ptx64,
215 &feature_sm_20,
216 &feature_sm_21,
217 &feature_sm_30,
218 &feature_sm_32,
219 &feature_sm_35,
220 &feature_sm_37,
221 &feature_sm_50,
222 &feature_sm_52,
223 &feature_sm_53,
224 &feature_sm_60,
225 &feature_sm_61,
226 &feature_sm_62,
227 &feature_sm_70,
228 &feature_sm_72,
229 &feature_sm_75,
230};
231
232pub const cpu_sm_20 = Cpu{
233 .name = "sm_20",
234 .llvm_name = "sm_20",
235 .dependencies = &[_]*const Feature {
236 &feature_sm_20,
237 },
238};
239
240pub const cpu_sm_21 = Cpu{
241 .name = "sm_21",
242 .llvm_name = "sm_21",
243 .dependencies = &[_]*const Feature {
244 &feature_sm_21,
245 },
246};
247
248pub const cpu_sm_30 = Cpu{
249 .name = "sm_30",
250 .llvm_name = "sm_30",
251 .dependencies = &[_]*const Feature {
252 &feature_sm_30,
253 },
254};
255
256pub const cpu_sm_32 = Cpu{
257 .name = "sm_32",
258 .llvm_name = "sm_32",
259 .dependencies = &[_]*const Feature {
260 &feature_ptx40,
261 &feature_sm_32,
262 },
263};
264
265pub const cpu_sm_35 = Cpu{
266 .name = "sm_35",
267 .llvm_name = "sm_35",
268 .dependencies = &[_]*const Feature {
269 &feature_sm_35,
270 },
271};
272
273pub const cpu_sm_37 = Cpu{
274 .name = "sm_37",
275 .llvm_name = "sm_37",
276 .dependencies = &[_]*const Feature {
277 &feature_ptx41,
278 &feature_sm_37,
279 },
280};
281
282pub const cpu_sm_50 = Cpu{
283 .name = "sm_50",
284 .llvm_name = "sm_50",
285 .dependencies = &[_]*const Feature {
286 &feature_ptx40,
287 &feature_sm_50,
288 },
289};
290
291pub const cpu_sm_52 = Cpu{
292 .name = "sm_52",
293 .llvm_name = "sm_52",
294 .dependencies = &[_]*const Feature {
295 &feature_ptx41,
296 &feature_sm_52,
297 },
298};
299
300pub const cpu_sm_53 = Cpu{
301 .name = "sm_53",
302 .llvm_name = "sm_53",
303 .dependencies = &[_]*const Feature {
304 &feature_ptx42,
305 &feature_sm_53,
306 },
307};
308
309pub const cpu_sm_60 = Cpu{
310 .name = "sm_60",
311 .llvm_name = "sm_60",
312 .dependencies = &[_]*const Feature {
313 &feature_ptx50,
314 &feature_sm_60,
315 },
316};
317
318pub const cpu_sm_61 = Cpu{
319 .name = "sm_61",
320 .llvm_name = "sm_61",
321 .dependencies = &[_]*const Feature {
322 &feature_ptx50,
323 &feature_sm_61,
324 },
325};
326
327pub const cpu_sm_62 = Cpu{
328 .name = "sm_62",
329 .llvm_name = "sm_62",
330 .dependencies = &[_]*const Feature {
331 &feature_ptx50,
332 &feature_sm_62,
333 },
334};
335
336pub const cpu_sm_70 = Cpu{
337 .name = "sm_70",
338 .llvm_name = "sm_70",
339 .dependencies = &[_]*const Feature {
340 &feature_ptx60,
341 &feature_sm_70,
342 },
343};
344
345pub const cpu_sm_72 = Cpu{
346 .name = "sm_72",
347 .llvm_name = "sm_72",
348 .dependencies = &[_]*const Feature {
349 &feature_ptx61,
350 &feature_sm_72,
351 },
352};
353
354pub const cpu_sm_75 = Cpu{
355 .name = "sm_75",
356 .llvm_name = "sm_75",
357 .dependencies = &[_]*const Feature {
358 &feature_ptx63,
359 &feature_sm_75,
360 },
361};
362
363pub const cpus = &[_]*const Cpu {
364 &cpu_sm_20,
365 &cpu_sm_21,
366 &cpu_sm_30,
367 &cpu_sm_32,
368 &cpu_sm_35,
369 &cpu_sm_37,
370 &cpu_sm_50,
371 &cpu_sm_52,
372 &cpu_sm_53,
373 &cpu_sm_60,
374 &cpu_sm_61,
375 &cpu_sm_62,
376 &cpu_sm_70,
377 &cpu_sm_72,
378 &cpu_sm_75,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 ptx32,
6 ptx40,
7 ptx41,
8 ptx42,
9 ptx43,
10 ptx50,
11 ptx60,
12 ptx61,
13 ptx63,
14 ptx64,
15 sm_20,
16 sm_21,
17 sm_30,
18 sm_32,
19 sm_35,
20 sm_37,
21 sm_50,
22 sm_52,
23 sm_53,
24 sm_60,
25 sm_61,
26 sm_62,
27 sm_70,
28 sm_72,
29 sm_75,
30};
31
32pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
33
34pub const all_features = blk: {
35 const len = @typeInfo(Feature).Enum.fields.len;
36 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
37 var result: [len]Cpu.Feature = undefined;
38 result[@enumToInt(Feature.ptx32)] = .{
39 .index = @enumToInt(Feature.ptx32),
40 .name = @tagName(Feature.ptx32),
41 .llvm_name = "ptx32",
42 .description = "Use PTX version 3.2",
43 .dependencies = 0,
44 };
45 result[@enumToInt(Feature.ptx40)] = .{
46 .index = @enumToInt(Feature.ptx40),
47 .name = @tagName(Feature.ptx40),
48 .llvm_name = "ptx40",
49 .description = "Use PTX version 4.0",
50 .dependencies = 0,
51 };
52 result[@enumToInt(Feature.ptx41)] = .{
53 .index = @enumToInt(Feature.ptx41),
54 .name = @tagName(Feature.ptx41),
55 .llvm_name = "ptx41",
56 .description = "Use PTX version 4.1",
57 .dependencies = 0,
58 };
59 result[@enumToInt(Feature.ptx42)] = .{
60 .index = @enumToInt(Feature.ptx42),
61 .name = @tagName(Feature.ptx42),
62 .llvm_name = "ptx42",
63 .description = "Use PTX version 4.2",
64 .dependencies = 0,
65 };
66 result[@enumToInt(Feature.ptx43)] = .{
67 .index = @enumToInt(Feature.ptx43),
68 .name = @tagName(Feature.ptx43),
69 .llvm_name = "ptx43",
70 .description = "Use PTX version 4.3",
71 .dependencies = 0,
72 };
73 result[@enumToInt(Feature.ptx50)] = .{
74 .index = @enumToInt(Feature.ptx50),
75 .name = @tagName(Feature.ptx50),
76 .llvm_name = "ptx50",
77 .description = "Use PTX version 5.0",
78 .dependencies = 0,
79 };
80 result[@enumToInt(Feature.ptx60)] = .{
81 .index = @enumToInt(Feature.ptx60),
82 .name = @tagName(Feature.ptx60),
83 .llvm_name = "ptx60",
84 .description = "Use PTX version 6.0",
85 .dependencies = 0,
86 };
87 result[@enumToInt(Feature.ptx61)] = .{
88 .index = @enumToInt(Feature.ptx61),
89 .name = @tagName(Feature.ptx61),
90 .llvm_name = "ptx61",
91 .description = "Use PTX version 6.1",
92 .dependencies = 0,
93 };
94 result[@enumToInt(Feature.ptx63)] = .{
95 .index = @enumToInt(Feature.ptx63),
96 .name = @tagName(Feature.ptx63),
97 .llvm_name = "ptx63",
98 .description = "Use PTX version 6.3",
99 .dependencies = 0,
100 };
101 result[@enumToInt(Feature.ptx64)] = .{
102 .index = @enumToInt(Feature.ptx64),
103 .name = @tagName(Feature.ptx64),
104 .llvm_name = "ptx64",
105 .description = "Use PTX version 6.4",
106 .dependencies = 0,
107 };
108 result[@enumToInt(Feature.sm_20)] = .{
109 .index = @enumToInt(Feature.sm_20),
110 .name = @tagName(Feature.sm_20),
111 .llvm_name = "sm_20",
112 .description = "Target SM 2.0",
113 .dependencies = 0,
114 };
115 result[@enumToInt(Feature.sm_21)] = .{
116 .index = @enumToInt(Feature.sm_21),
117 .name = @tagName(Feature.sm_21),
118 .llvm_name = "sm_21",
119 .description = "Target SM 2.1",
120 .dependencies = 0,
121 };
122 result[@enumToInt(Feature.sm_30)] = .{
123 .index = @enumToInt(Feature.sm_30),
124 .name = @tagName(Feature.sm_30),
125 .llvm_name = "sm_30",
126 .description = "Target SM 3.0",
127 .dependencies = 0,
128 };
129 result[@enumToInt(Feature.sm_32)] = .{
130 .index = @enumToInt(Feature.sm_32),
131 .name = @tagName(Feature.sm_32),
132 .llvm_name = "sm_32",
133 .description = "Target SM 3.2",
134 .dependencies = 0,
135 };
136 result[@enumToInt(Feature.sm_35)] = .{
137 .index = @enumToInt(Feature.sm_35),
138 .name = @tagName(Feature.sm_35),
139 .llvm_name = "sm_35",
140 .description = "Target SM 3.5",
141 .dependencies = 0,
142 };
143 result[@enumToInt(Feature.sm_37)] = .{
144 .index = @enumToInt(Feature.sm_37),
145 .name = @tagName(Feature.sm_37),
146 .llvm_name = "sm_37",
147 .description = "Target SM 3.7",
148 .dependencies = 0,
149 };
150 result[@enumToInt(Feature.sm_50)] = .{
151 .index = @enumToInt(Feature.sm_50),
152 .name = @tagName(Feature.sm_50),
153 .llvm_name = "sm_50",
154 .description = "Target SM 5.0",
155 .dependencies = 0,
156 };
157 result[@enumToInt(Feature.sm_52)] = .{
158 .index = @enumToInt(Feature.sm_52),
159 .name = @tagName(Feature.sm_52),
160 .llvm_name = "sm_52",
161 .description = "Target SM 5.2",
162 .dependencies = 0,
163 };
164 result[@enumToInt(Feature.sm_53)] = .{
165 .index = @enumToInt(Feature.sm_53),
166 .name = @tagName(Feature.sm_53),
167 .llvm_name = "sm_53",
168 .description = "Target SM 5.3",
169 .dependencies = 0,
170 };
171 result[@enumToInt(Feature.sm_60)] = .{
172 .index = @enumToInt(Feature.sm_60),
173 .name = @tagName(Feature.sm_60),
174 .llvm_name = "sm_60",
175 .description = "Target SM 6.0",
176 .dependencies = 0,
177 };
178 result[@enumToInt(Feature.sm_61)] = .{
179 .index = @enumToInt(Feature.sm_61),
180 .name = @tagName(Feature.sm_61),
181 .llvm_name = "sm_61",
182 .description = "Target SM 6.1",
183 .dependencies = 0,
184 };
185 result[@enumToInt(Feature.sm_62)] = .{
186 .index = @enumToInt(Feature.sm_62),
187 .name = @tagName(Feature.sm_62),
188 .llvm_name = "sm_62",
189 .description = "Target SM 6.2",
190 .dependencies = 0,
191 };
192 result[@enumToInt(Feature.sm_70)] = .{
193 .index = @enumToInt(Feature.sm_70),
194 .name = @tagName(Feature.sm_70),
195 .llvm_name = "sm_70",
196 .description = "Target SM 7.0",
197 .dependencies = 0,
198 };
199 result[@enumToInt(Feature.sm_72)] = .{
200 .index = @enumToInt(Feature.sm_72),
201 .name = @tagName(Feature.sm_72),
202 .llvm_name = "sm_72",
203 .description = "Target SM 7.2",
204 .dependencies = 0,
205 };
206 result[@enumToInt(Feature.sm_75)] = .{
207 .index = @enumToInt(Feature.sm_75),
208 .name = @tagName(Feature.sm_75),
209 .llvm_name = "sm_75",
210 .description = "Target SM 7.5",
211 .dependencies = 0,
212 };
213 break :blk result;
214};
215
216pub const cpu = struct {
217 pub const sm_20 = Cpu{
218 .name = "sm_20",
219 .llvm_name = "sm_20",
220 .features = featureSet(&[_]Feature{
221 .sm_20,
222 }),
223 };
224 pub const sm_21 = Cpu{
225 .name = "sm_21",
226 .llvm_name = "sm_21",
227 .features = featureSet(&[_]Feature{
228 .sm_21,
229 }),
230 };
231 pub const sm_30 = Cpu{
232 .name = "sm_30",
233 .llvm_name = "sm_30",
234 .features = featureSet(&[_]Feature{
235 .sm_30,
236 }),
237 };
238 pub const sm_32 = Cpu{
239 .name = "sm_32",
240 .llvm_name = "sm_32",
241 .features = featureSet(&[_]Feature{
242 .ptx40,
243 .sm_32,
244 }),
245 };
246 pub const sm_35 = Cpu{
247 .name = "sm_35",
248 .llvm_name = "sm_35",
249 .features = featureSet(&[_]Feature{
250 .sm_35,
251 }),
252 };
253 pub const sm_37 = Cpu{
254 .name = "sm_37",
255 .llvm_name = "sm_37",
256 .features = featureSet(&[_]Feature{
257 .ptx41,
258 .sm_37,
259 }),
260 };
261 pub const sm_50 = Cpu{
262 .name = "sm_50",
263 .llvm_name = "sm_50",
264 .features = featureSet(&[_]Feature{
265 .ptx40,
266 .sm_50,
267 }),
268 };
269 pub const sm_52 = Cpu{
270 .name = "sm_52",
271 .llvm_name = "sm_52",
272 .features = featureSet(&[_]Feature{
273 .ptx41,
274 .sm_52,
275 }),
276 };
277 pub const sm_53 = Cpu{
278 .name = "sm_53",
279 .llvm_name = "sm_53",
280 .features = featureSet(&[_]Feature{
281 .ptx42,
282 .sm_53,
283 }),
284 };
285 pub const sm_60 = Cpu{
286 .name = "sm_60",
287 .llvm_name = "sm_60",
288 .features = featureSet(&[_]Feature{
289 .ptx50,
290 .sm_60,
291 }),
292 };
293 pub const sm_61 = Cpu{
294 .name = "sm_61",
295 .llvm_name = "sm_61",
296 .features = featureSet(&[_]Feature{
297 .ptx50,
298 .sm_61,
299 }),
300 };
301 pub const sm_62 = Cpu{
302 .name = "sm_62",
303 .llvm_name = "sm_62",
304 .features = featureSet(&[_]Feature{
305 .ptx50,
306 .sm_62,
307 }),
308 };
309 pub const sm_70 = Cpu{
310 .name = "sm_70",
311 .llvm_name = "sm_70",
312 .features = featureSet(&[_]Feature{
313 .ptx60,
314 .sm_70,
315 }),
316 };
317 pub const sm_72 = Cpu{
318 .name = "sm_72",
319 .llvm_name = "sm_72",
320 .features = featureSet(&[_]Feature{
321 .ptx61,
322 .sm_72,
323 }),
324 };
325 pub const sm_75 = Cpu{
326 .name = "sm_75",
327 .llvm_name = "sm_75",
328 .features = featureSet(&[_]Feature{
329 .ptx63,
330 .sm_75,
331 }),
332 };
333};
334
335/// All nvptx CPUs, sorted alphabetically by name.
336/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
337/// compiler has inefficient memory and CPU usage, affecting build times.
338pub const all_cpus = &[_]*const Cpu{
339 &cpu.sm_20,
340 &cpu.sm_21,
341 &cpu.sm_30,
342 &cpu.sm_32,
343 &cpu.sm_35,
344 &cpu.sm_37,
345 &cpu.sm_50,
346 &cpu.sm_52,
347 &cpu.sm_53,
348 &cpu.sm_60,
349 &cpu.sm_61,
350 &cpu.sm_62,
351 &cpu.sm_70,
352 &cpu.sm_72,
353 &cpu.sm_75,
379354};
lib/std/target/powerpc.zig+1034-1114
......@@ -1,1115 +1,1035 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_bit64 = Feature{
5 .name = "bit64",
6 .llvm_name = "64bit",
7 .description = "Enable 64-bit instructions",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_bitregs64 = Feature{
13 .name = "bitregs64",
14 .llvm_name = "64bitregs",
15 .description = "Enable 64-bit registers usage for ppc32 [beta]",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_altivec = Feature{
21 .name = "altivec",
22 .llvm_name = "altivec",
23 .description = "Enable Altivec instructions",
24 .dependencies = &[_]*const Feature {
25 &feature_hardFloat,
26 },
27};
28
29pub const feature_bpermd = Feature{
30 .name = "bpermd",
31 .llvm_name = "bpermd",
32 .description = "Enable the bpermd instruction",
33 .dependencies = &[_]*const Feature {
34 },
35};
36
37pub const feature_booke = Feature{
38 .name = "booke",
39 .llvm_name = "booke",
40 .description = "Enable Book E instructions",
41 .dependencies = &[_]*const Feature {
42 &feature_icbt,
43 },
44};
45
46pub const feature_cmpb = Feature{
47 .name = "cmpb",
48 .llvm_name = "cmpb",
49 .description = "Enable the cmpb instruction",
50 .dependencies = &[_]*const Feature {
51 },
52};
53
54pub const feature_crbits = Feature{
55 .name = "crbits",
56 .llvm_name = "crbits",
57 .description = "Use condition-register bits individually",
58 .dependencies = &[_]*const Feature {
59 },
60};
61
62pub const feature_directMove = Feature{
63 .name = "directMove",
64 .llvm_name = "direct-move",
65 .description = "Enable Power8 direct move instructions",
66 .dependencies = &[_]*const Feature {
67 &feature_hardFloat,
68 },
69};
70
71pub const feature_e500 = Feature{
72 .name = "e500",
73 .llvm_name = "e500",
74 .description = "Enable E500/E500mc instructions",
75 .dependencies = &[_]*const Feature {
76 },
77};
78
79pub const feature_extdiv = Feature{
80 .name = "extdiv",
81 .llvm_name = "extdiv",
82 .description = "Enable extended divide instructions",
83 .dependencies = &[_]*const Feature {
84 },
85};
86
87pub const feature_fcpsgn = Feature{
88 .name = "fcpsgn",
89 .llvm_name = "fcpsgn",
90 .description = "Enable the fcpsgn instruction",
91 .dependencies = &[_]*const Feature {
92 &feature_hardFloat,
93 },
94};
95
96pub const feature_fpcvt = Feature{
97 .name = "fpcvt",
98 .llvm_name = "fpcvt",
99 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
100 .dependencies = &[_]*const Feature {
101 &feature_hardFloat,
102 },
103};
104
105pub const feature_fprnd = Feature{
106 .name = "fprnd",
107 .llvm_name = "fprnd",
108 .description = "Enable the fri[mnpz] instructions",
109 .dependencies = &[_]*const Feature {
110 &feature_hardFloat,
111 },
112};
113
114pub const feature_fpu = Feature{
115 .name = "fpu",
116 .llvm_name = "fpu",
117 .description = "Enable classic FPU instructions",
118 .dependencies = &[_]*const Feature {
119 &feature_hardFloat,
120 },
121};
122
123pub const feature_fre = Feature{
124 .name = "fre",
125 .llvm_name = "fre",
126 .description = "Enable the fre instruction",
127 .dependencies = &[_]*const Feature {
128 &feature_hardFloat,
129 },
130};
131
132pub const feature_fres = Feature{
133 .name = "fres",
134 .llvm_name = "fres",
135 .description = "Enable the fres instruction",
136 .dependencies = &[_]*const Feature {
137 &feature_hardFloat,
138 },
139};
140
141pub const feature_frsqrte = Feature{
142 .name = "frsqrte",
143 .llvm_name = "frsqrte",
144 .description = "Enable the frsqrte instruction",
145 .dependencies = &[_]*const Feature {
146 &feature_hardFloat,
147 },
148};
149
150pub const feature_frsqrtes = Feature{
151 .name = "frsqrtes",
152 .llvm_name = "frsqrtes",
153 .description = "Enable the frsqrtes instruction",
154 .dependencies = &[_]*const Feature {
155 &feature_hardFloat,
156 },
157};
158
159pub const feature_fsqrt = Feature{
160 .name = "fsqrt",
161 .llvm_name = "fsqrt",
162 .description = "Enable the fsqrt instruction",
163 .dependencies = &[_]*const Feature {
164 &feature_hardFloat,
165 },
166};
167
168pub const feature_float128 = Feature{
169 .name = "float128",
170 .llvm_name = "float128",
171 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
172 .dependencies = &[_]*const Feature {
173 &feature_hardFloat,
174 },
175};
176
177pub const feature_htm = Feature{
178 .name = "htm",
179 .llvm_name = "htm",
180 .description = "Enable Hardware Transactional Memory instructions",
181 .dependencies = &[_]*const Feature {
182 },
183};
184
185pub const feature_hardFloat = Feature{
186 .name = "hardFloat",
187 .llvm_name = "hard-float",
188 .description = "Enable floating-point instructions",
189 .dependencies = &[_]*const Feature {
190 },
191};
192
193pub const feature_icbt = Feature{
194 .name = "icbt",
195 .llvm_name = "icbt",
196 .description = "Enable icbt instruction",
197 .dependencies = &[_]*const Feature {
198 },
199};
200
201pub const feature_isaV30Instructions = Feature{
202 .name = "isaV30Instructions",
203 .llvm_name = "isa-v30-instructions",
204 .description = "Enable instructions added in ISA 3.0.",
205 .dependencies = &[_]*const Feature {
206 },
207};
208
209pub const feature_isel = Feature{
210 .name = "isel",
211 .llvm_name = "isel",
212 .description = "Enable the isel instruction",
213 .dependencies = &[_]*const Feature {
214 },
215};
216
217pub const feature_invariantFunctionDescriptors = Feature{
218 .name = "invariantFunctionDescriptors",
219 .llvm_name = "invariant-function-descriptors",
220 .description = "Assume function descriptors are invariant",
221 .dependencies = &[_]*const Feature {
222 },
223};
224
225pub const feature_ldbrx = Feature{
226 .name = "ldbrx",
227 .llvm_name = "ldbrx",
228 .description = "Enable the ldbrx instruction",
229 .dependencies = &[_]*const Feature {
230 },
231};
232
233pub const feature_lfiwax = Feature{
234 .name = "lfiwax",
235 .llvm_name = "lfiwax",
236 .description = "Enable the lfiwax instruction",
237 .dependencies = &[_]*const Feature {
238 &feature_hardFloat,
239 },
240};
241
242pub const feature_longcall = Feature{
243 .name = "longcall",
244 .llvm_name = "longcall",
245 .description = "Always use indirect calls",
246 .dependencies = &[_]*const Feature {
247 },
248};
249
250pub const feature_mfocrf = Feature{
251 .name = "mfocrf",
252 .llvm_name = "mfocrf",
253 .description = "Enable the MFOCRF instruction",
254 .dependencies = &[_]*const Feature {
255 },
256};
257
258pub const feature_msync = Feature{
259 .name = "msync",
260 .llvm_name = "msync",
261 .description = "Has only the msync instruction instead of sync",
262 .dependencies = &[_]*const Feature {
263 &feature_icbt,
264 },
265};
266
267pub const feature_power8Altivec = Feature{
268 .name = "power8Altivec",
269 .llvm_name = "power8-altivec",
270 .description = "Enable POWER8 Altivec instructions",
271 .dependencies = &[_]*const Feature {
272 &feature_hardFloat,
273 },
274};
275
276pub const feature_crypto = Feature{
277 .name = "crypto",
278 .llvm_name = "crypto",
279 .description = "Enable POWER8 Crypto instructions",
280 .dependencies = &[_]*const Feature {
281 &feature_hardFloat,
282 },
283};
284
285pub const feature_power8Vector = Feature{
286 .name = "power8Vector",
287 .llvm_name = "power8-vector",
288 .description = "Enable POWER8 vector instructions",
289 .dependencies = &[_]*const Feature {
290 &feature_hardFloat,
291 },
292};
293
294pub const feature_power9Altivec = Feature{
295 .name = "power9Altivec",
296 .llvm_name = "power9-altivec",
297 .description = "Enable POWER9 Altivec instructions",
298 .dependencies = &[_]*const Feature {
299 &feature_isaV30Instructions,
300 &feature_hardFloat,
301 },
302};
303
304pub const feature_power9Vector = Feature{
305 .name = "power9Vector",
306 .llvm_name = "power9-vector",
307 .description = "Enable POWER9 vector instructions",
308 .dependencies = &[_]*const Feature {
309 &feature_isaV30Instructions,
310 &feature_hardFloat,
311 },
312};
313
314pub const feature_popcntd = Feature{
315 .name = "popcntd",
316 .llvm_name = "popcntd",
317 .description = "Enable the popcnt[dw] instructions",
318 .dependencies = &[_]*const Feature {
319 },
320};
321
322pub const feature_ppc4xx = Feature{
323 .name = "ppc4xx",
324 .llvm_name = "ppc4xx",
325 .description = "Enable PPC 4xx instructions",
326 .dependencies = &[_]*const Feature {
327 },
328};
329
330pub const feature_ppc6xx = Feature{
331 .name = "ppc6xx",
332 .llvm_name = "ppc6xx",
333 .description = "Enable PPC 6xx instructions",
334 .dependencies = &[_]*const Feature {
335 },
336};
337
338pub const feature_ppcPostraSched = Feature{
339 .name = "ppcPostraSched",
340 .llvm_name = "ppc-postra-sched",
341 .description = "Use PowerPC post-RA scheduling strategy",
342 .dependencies = &[_]*const Feature {
343 },
344};
345
346pub const feature_ppcPreraSched = Feature{
347 .name = "ppcPreraSched",
348 .llvm_name = "ppc-prera-sched",
349 .description = "Use PowerPC pre-RA scheduling strategy",
350 .dependencies = &[_]*const Feature {
351 },
352};
353
354pub const feature_partwordAtomics = Feature{
355 .name = "partwordAtomics",
356 .llvm_name = "partword-atomics",
357 .description = "Enable l[bh]arx and st[bh]cx.",
358 .dependencies = &[_]*const Feature {
359 },
360};
361
362pub const feature_qpx = Feature{
363 .name = "qpx",
364 .llvm_name = "qpx",
365 .description = "Enable QPX instructions",
366 .dependencies = &[_]*const Feature {
367 &feature_hardFloat,
368 },
369};
370
371pub const feature_recipprec = Feature{
372 .name = "recipprec",
373 .llvm_name = "recipprec",
374 .description = "Assume higher precision reciprocal estimates",
375 .dependencies = &[_]*const Feature {
376 },
377};
378
379pub const feature_spe = Feature{
380 .name = "spe",
381 .llvm_name = "spe",
382 .description = "Enable SPE instructions",
383 .dependencies = &[_]*const Feature {
384 &feature_hardFloat,
385 },
386};
387
388pub const feature_stfiwx = Feature{
389 .name = "stfiwx",
390 .llvm_name = "stfiwx",
391 .description = "Enable the stfiwx instruction",
392 .dependencies = &[_]*const Feature {
393 &feature_hardFloat,
394 },
395};
396
397pub const feature_securePlt = Feature{
398 .name = "securePlt",
399 .llvm_name = "secure-plt",
400 .description = "Enable secure plt mode",
401 .dependencies = &[_]*const Feature {
402 },
403};
404
405pub const feature_slowPopcntd = Feature{
406 .name = "slowPopcntd",
407 .llvm_name = "slow-popcntd",
408 .description = "Has slow popcnt[dw] instructions",
409 .dependencies = &[_]*const Feature {
410 },
411};
412
413pub const feature_twoConstNr = Feature{
414 .name = "twoConstNr",
415 .llvm_name = "two-const-nr",
416 .description = "Requires two constant Newton-Raphson computation",
417 .dependencies = &[_]*const Feature {
418 },
419};
420
421pub const feature_vsx = Feature{
422 .name = "vsx",
423 .llvm_name = "vsx",
424 .description = "Enable VSX instructions",
425 .dependencies = &[_]*const Feature {
426 &feature_hardFloat,
427 },
428};
429
430pub const feature_vectorsUseTwoUnits = Feature{
431 .name = "vectorsUseTwoUnits",
432 .llvm_name = "vectors-use-two-units",
433 .description = "Vectors use two units",
434 .dependencies = &[_]*const Feature {
435 },
436};
437
438pub const features = &[_]*const Feature {
439 &feature_bit64,
440 &feature_bitregs64,
441 &feature_altivec,
442 &feature_bpermd,
443 &feature_booke,
444 &feature_cmpb,
445 &feature_crbits,
446 &feature_directMove,
447 &feature_e500,
448 &feature_extdiv,
449 &feature_fcpsgn,
450 &feature_fpcvt,
451 &feature_fprnd,
452 &feature_fpu,
453 &feature_fre,
454 &feature_fres,
455 &feature_frsqrte,
456 &feature_frsqrtes,
457 &feature_fsqrt,
458 &feature_float128,
459 &feature_htm,
460 &feature_hardFloat,
461 &feature_icbt,
462 &feature_isaV30Instructions,
463 &feature_isel,
464 &feature_invariantFunctionDescriptors,
465 &feature_ldbrx,
466 &feature_lfiwax,
467 &feature_longcall,
468 &feature_mfocrf,
469 &feature_msync,
470 &feature_power8Altivec,
471 &feature_crypto,
472 &feature_power8Vector,
473 &feature_power9Altivec,
474 &feature_power9Vector,
475 &feature_popcntd,
476 &feature_ppc4xx,
477 &feature_ppc6xx,
478 &feature_ppcPostraSched,
479 &feature_ppcPreraSched,
480 &feature_partwordAtomics,
481 &feature_qpx,
482 &feature_recipprec,
483 &feature_spe,
484 &feature_stfiwx,
485 &feature_securePlt,
486 &feature_slowPopcntd,
487 &feature_twoConstNr,
488 &feature_vsx,
489 &feature_vectorsUseTwoUnits,
490};
491
492pub const cpu_440 = Cpu{
493 .name = "440",
494 .llvm_name = "440",
495 .dependencies = &[_]*const Feature {
496 &feature_icbt,
497 &feature_booke,
498 &feature_hardFloat,
499 &feature_fres,
500 &feature_frsqrte,
501 &feature_isel,
502 &feature_msync,
503 },
504};
505
506pub const cpu_450 = Cpu{
507 .name = "450",
508 .llvm_name = "450",
509 .dependencies = &[_]*const Feature {
510 &feature_icbt,
511 &feature_booke,
512 &feature_hardFloat,
513 &feature_fres,
514 &feature_frsqrte,
515 &feature_isel,
516 &feature_msync,
517 },
518};
519
520pub const cpu_601 = Cpu{
521 .name = "601",
522 .llvm_name = "601",
523 .dependencies = &[_]*const Feature {
524 &feature_hardFloat,
525 &feature_fpu,
526 },
527};
528
529pub const cpu_602 = Cpu{
530 .name = "602",
531 .llvm_name = "602",
532 .dependencies = &[_]*const Feature {
533 &feature_hardFloat,
534 &feature_fpu,
535 },
536};
537
538pub const cpu_603 = Cpu{
539 .name = "603",
540 .llvm_name = "603",
541 .dependencies = &[_]*const Feature {
542 &feature_hardFloat,
543 &feature_fres,
544 &feature_frsqrte,
545 },
546};
547
548pub const cpu_e603 = Cpu{
549 .name = "e603",
550 .llvm_name = "603e",
551 .dependencies = &[_]*const Feature {
552 &feature_hardFloat,
553 &feature_fres,
554 &feature_frsqrte,
555 },
556};
557
558pub const cpu_ev603 = Cpu{
559 .name = "ev603",
560 .llvm_name = "603ev",
561 .dependencies = &[_]*const Feature {
562 &feature_hardFloat,
563 &feature_fres,
564 &feature_frsqrte,
565 },
566};
567
568pub const cpu_604 = Cpu{
569 .name = "604",
570 .llvm_name = "604",
571 .dependencies = &[_]*const Feature {
572 &feature_hardFloat,
573 &feature_fres,
574 &feature_frsqrte,
575 },
576};
577
578pub const cpu_e604 = Cpu{
579 .name = "e604",
580 .llvm_name = "604e",
581 .dependencies = &[_]*const Feature {
582 &feature_hardFloat,
583 &feature_fres,
584 &feature_frsqrte,
585 },
586};
587
588pub const cpu_620 = Cpu{
589 .name = "620",
590 .llvm_name = "620",
591 .dependencies = &[_]*const Feature {
592 &feature_hardFloat,
593 &feature_fres,
594 &feature_frsqrte,
595 },
596};
597
598pub const cpu_7400 = Cpu{
599 .name = "7400",
600 .llvm_name = "7400",
601 .dependencies = &[_]*const Feature {
602 &feature_hardFloat,
603 &feature_altivec,
604 &feature_fres,
605 &feature_frsqrte,
606 },
607};
608
609pub const cpu_7450 = Cpu{
610 .name = "7450",
611 .llvm_name = "7450",
612 .dependencies = &[_]*const Feature {
613 &feature_hardFloat,
614 &feature_altivec,
615 &feature_fres,
616 &feature_frsqrte,
617 },
618};
619
620pub const cpu_750 = Cpu{
621 .name = "750",
622 .llvm_name = "750",
623 .dependencies = &[_]*const Feature {
624 &feature_hardFloat,
625 &feature_fres,
626 &feature_frsqrte,
627 },
628};
629
630pub const cpu_970 = Cpu{
631 .name = "970",
632 .llvm_name = "970",
633 .dependencies = &[_]*const Feature {
634 &feature_bit64,
635 &feature_hardFloat,
636 &feature_altivec,
637 &feature_fres,
638 &feature_frsqrte,
639 &feature_fsqrt,
640 &feature_mfocrf,
641 &feature_stfiwx,
642 },
643};
644
645pub const cpu_a2 = Cpu{
646 .name = "a2",
647 .llvm_name = "a2",
648 .dependencies = &[_]*const Feature {
649 &feature_bit64,
650 &feature_icbt,
651 &feature_booke,
652 &feature_cmpb,
653 &feature_hardFloat,
654 &feature_fcpsgn,
655 &feature_fpcvt,
656 &feature_fprnd,
657 &feature_fre,
658 &feature_fres,
659 &feature_frsqrte,
660 &feature_frsqrtes,
661 &feature_fsqrt,
662 &feature_isel,
663 &feature_ldbrx,
664 &feature_lfiwax,
665 &feature_mfocrf,
666 &feature_recipprec,
667 &feature_stfiwx,
668 &feature_slowPopcntd,
669 },
670};
671
672pub const cpu_a2q = Cpu{
673 .name = "a2q",
674 .llvm_name = "a2q",
675 .dependencies = &[_]*const Feature {
676 &feature_bit64,
677 &feature_icbt,
678 &feature_booke,
679 &feature_cmpb,
680 &feature_hardFloat,
681 &feature_fcpsgn,
682 &feature_fpcvt,
683 &feature_fprnd,
684 &feature_fre,
685 &feature_fres,
686 &feature_frsqrte,
687 &feature_frsqrtes,
688 &feature_fsqrt,
689 &feature_isel,
690 &feature_ldbrx,
691 &feature_lfiwax,
692 &feature_mfocrf,
693 &feature_qpx,
694 &feature_recipprec,
695 &feature_stfiwx,
696 &feature_slowPopcntd,
697 },
698};
699
700pub const cpu_e500 = Cpu{
701 .name = "e500",
702 .llvm_name = "e500",
703 .dependencies = &[_]*const Feature {
704 &feature_icbt,
705 &feature_booke,
706 &feature_isel,
707 },
708};
709
710pub const cpu_e500mc = Cpu{
711 .name = "e500mc",
712 .llvm_name = "e500mc",
713 .dependencies = &[_]*const Feature {
714 &feature_icbt,
715 &feature_booke,
716 &feature_isel,
717 &feature_hardFloat,
718 &feature_stfiwx,
719 },
720};
721
722pub const cpu_e5500 = Cpu{
723 .name = "e5500",
724 .llvm_name = "e5500",
725 .dependencies = &[_]*const Feature {
726 &feature_bit64,
727 &feature_icbt,
728 &feature_booke,
729 &feature_isel,
730 &feature_mfocrf,
731 &feature_hardFloat,
732 &feature_stfiwx,
733 },
734};
735
736pub const cpu_g3 = Cpu{
737 .name = "g3",
738 .llvm_name = "g3",
739 .dependencies = &[_]*const Feature {
740 &feature_hardFloat,
741 &feature_fres,
742 &feature_frsqrte,
743 },
744};
745
746pub const cpu_g4 = Cpu{
747 .name = "g4",
748 .llvm_name = "g4",
749 .dependencies = &[_]*const Feature {
750 &feature_hardFloat,
751 &feature_altivec,
752 &feature_fres,
753 &feature_frsqrte,
754 },
755};
756
757pub const cpu_g4Plus = Cpu{
758 .name = "g4Plus",
759 .llvm_name = "g4+",
760 .dependencies = &[_]*const Feature {
761 &feature_hardFloat,
762 &feature_altivec,
763 &feature_fres,
764 &feature_frsqrte,
765 },
766};
767
768pub const cpu_g5 = Cpu{
769 .name = "g5",
770 .llvm_name = "g5",
771 .dependencies = &[_]*const Feature {
772 &feature_bit64,
773 &feature_hardFloat,
774 &feature_altivec,
775 &feature_fres,
776 &feature_frsqrte,
777 &feature_fsqrt,
778 &feature_mfocrf,
779 &feature_stfiwx,
780 },
781};
782
783pub const cpu_generic = Cpu{
784 .name = "generic",
785 .llvm_name = "generic",
786 .dependencies = &[_]*const Feature {
787 &feature_hardFloat,
788 },
789};
790
791pub const cpu_ppc = Cpu{
792 .name = "ppc",
793 .llvm_name = "ppc",
794 .dependencies = &[_]*const Feature {
795 &feature_hardFloat,
796 },
797};
798
799pub const cpu_ppc32 = Cpu{
800 .name = "ppc32",
801 .llvm_name = "ppc32",
802 .dependencies = &[_]*const Feature {
803 &feature_hardFloat,
804 },
805};
806
807pub const cpu_ppc64 = Cpu{
808 .name = "ppc64",
809 .llvm_name = "ppc64",
810 .dependencies = &[_]*const Feature {
811 &feature_bit64,
812 &feature_hardFloat,
813 &feature_altivec,
814 &feature_fres,
815 &feature_frsqrte,
816 &feature_fsqrt,
817 &feature_mfocrf,
818 &feature_stfiwx,
819 },
820};
821
822pub const cpu_ppc64le = Cpu{
823 .name = "ppc64le",
824 .llvm_name = "ppc64le",
825 .dependencies = &[_]*const Feature {
826 &feature_bit64,
827 &feature_hardFloat,
828 &feature_altivec,
829 &feature_bpermd,
830 &feature_cmpb,
831 &feature_directMove,
832 &feature_extdiv,
833 &feature_fcpsgn,
834 &feature_fpcvt,
835 &feature_fprnd,
836 &feature_fre,
837 &feature_fres,
838 &feature_frsqrte,
839 &feature_frsqrtes,
840 &feature_fsqrt,
841 &feature_htm,
842 &feature_icbt,
843 &feature_isel,
844 &feature_ldbrx,
845 &feature_lfiwax,
846 &feature_mfocrf,
847 &feature_power8Altivec,
848 &feature_crypto,
849 &feature_power8Vector,
850 &feature_popcntd,
851 &feature_partwordAtomics,
852 &feature_recipprec,
853 &feature_stfiwx,
854 &feature_twoConstNr,
855 &feature_vsx,
856 },
857};
858
859pub const cpu_pwr3 = Cpu{
860 .name = "pwr3",
861 .llvm_name = "pwr3",
862 .dependencies = &[_]*const Feature {
863 &feature_bit64,
864 &feature_hardFloat,
865 &feature_altivec,
866 &feature_fres,
867 &feature_frsqrte,
868 &feature_mfocrf,
869 &feature_stfiwx,
870 },
871};
872
873pub const cpu_pwr4 = Cpu{
874 .name = "pwr4",
875 .llvm_name = "pwr4",
876 .dependencies = &[_]*const Feature {
877 &feature_bit64,
878 &feature_hardFloat,
879 &feature_altivec,
880 &feature_fres,
881 &feature_frsqrte,
882 &feature_fsqrt,
883 &feature_mfocrf,
884 &feature_stfiwx,
885 },
886};
887
888pub const cpu_pwr5 = Cpu{
889 .name = "pwr5",
890 .llvm_name = "pwr5",
891 .dependencies = &[_]*const Feature {
892 &feature_bit64,
893 &feature_hardFloat,
894 &feature_altivec,
895 &feature_fre,
896 &feature_fres,
897 &feature_frsqrte,
898 &feature_frsqrtes,
899 &feature_fsqrt,
900 &feature_mfocrf,
901 &feature_stfiwx,
902 },
903};
904
905pub const cpu_pwr5x = Cpu{
906 .name = "pwr5x",
907 .llvm_name = "pwr5x",
908 .dependencies = &[_]*const Feature {
909 &feature_bit64,
910 &feature_hardFloat,
911 &feature_altivec,
912 &feature_fprnd,
913 &feature_fre,
914 &feature_fres,
915 &feature_frsqrte,
916 &feature_frsqrtes,
917 &feature_fsqrt,
918 &feature_mfocrf,
919 &feature_stfiwx,
920 },
921};
922
923pub const cpu_pwr6 = Cpu{
924 .name = "pwr6",
925 .llvm_name = "pwr6",
926 .dependencies = &[_]*const Feature {
927 &feature_bit64,
928 &feature_hardFloat,
929 &feature_altivec,
930 &feature_cmpb,
931 &feature_fcpsgn,
932 &feature_fprnd,
933 &feature_fre,
934 &feature_fres,
935 &feature_frsqrte,
936 &feature_frsqrtes,
937 &feature_fsqrt,
938 &feature_lfiwax,
939 &feature_mfocrf,
940 &feature_recipprec,
941 &feature_stfiwx,
942 },
943};
944
945pub const cpu_pwr6x = Cpu{
946 .name = "pwr6x",
947 .llvm_name = "pwr6x",
948 .dependencies = &[_]*const Feature {
949 &feature_bit64,
950 &feature_hardFloat,
951 &feature_altivec,
952 &feature_cmpb,
953 &feature_fcpsgn,
954 &feature_fprnd,
955 &feature_fre,
956 &feature_fres,
957 &feature_frsqrte,
958 &feature_frsqrtes,
959 &feature_fsqrt,
960 &feature_lfiwax,
961 &feature_mfocrf,
962 &feature_recipprec,
963 &feature_stfiwx,
964 },
965};
966
967pub const cpu_pwr7 = Cpu{
968 .name = "pwr7",
969 .llvm_name = "pwr7",
970 .dependencies = &[_]*const Feature {
971 &feature_bit64,
972 &feature_hardFloat,
973 &feature_altivec,
974 &feature_bpermd,
975 &feature_cmpb,
976 &feature_extdiv,
977 &feature_fcpsgn,
978 &feature_fpcvt,
979 &feature_fprnd,
980 &feature_fre,
981 &feature_fres,
982 &feature_frsqrte,
983 &feature_frsqrtes,
984 &feature_fsqrt,
985 &feature_isel,
986 &feature_ldbrx,
987 &feature_lfiwax,
988 &feature_mfocrf,
989 &feature_popcntd,
990 &feature_recipprec,
991 &feature_stfiwx,
992 &feature_twoConstNr,
993 &feature_vsx,
994 },
995};
996
997pub const cpu_pwr8 = Cpu{
998 .name = "pwr8",
999 .llvm_name = "pwr8",
1000 .dependencies = &[_]*const Feature {
1001 &feature_bit64,
1002 &feature_hardFloat,
1003 &feature_altivec,
1004 &feature_bpermd,
1005 &feature_cmpb,
1006 &feature_directMove,
1007 &feature_extdiv,
1008 &feature_fcpsgn,
1009 &feature_fpcvt,
1010 &feature_fprnd,
1011 &feature_fre,
1012 &feature_fres,
1013 &feature_frsqrte,
1014 &feature_frsqrtes,
1015 &feature_fsqrt,
1016 &feature_htm,
1017 &feature_icbt,
1018 &feature_isel,
1019 &feature_ldbrx,
1020 &feature_lfiwax,
1021 &feature_mfocrf,
1022 &feature_power8Altivec,
1023 &feature_crypto,
1024 &feature_power8Vector,
1025 &feature_popcntd,
1026 &feature_partwordAtomics,
1027 &feature_recipprec,
1028 &feature_stfiwx,
1029 &feature_twoConstNr,
1030 &feature_vsx,
1031 },
1032};
1033
1034pub const cpu_pwr9 = Cpu{
1035 .name = "pwr9",
1036 .llvm_name = "pwr9",
1037 .dependencies = &[_]*const Feature {
1038 &feature_bit64,
1039 &feature_hardFloat,
1040 &feature_altivec,
1041 &feature_bpermd,
1042 &feature_cmpb,
1043 &feature_directMove,
1044 &feature_extdiv,
1045 &feature_fcpsgn,
1046 &feature_fpcvt,
1047 &feature_fprnd,
1048 &feature_fre,
1049 &feature_fres,
1050 &feature_frsqrte,
1051 &feature_frsqrtes,
1052 &feature_fsqrt,
1053 &feature_htm,
1054 &feature_icbt,
1055 &feature_isaV30Instructions,
1056 &feature_isel,
1057 &feature_ldbrx,
1058 &feature_lfiwax,
1059 &feature_mfocrf,
1060 &feature_power8Altivec,
1061 &feature_crypto,
1062 &feature_power8Vector,
1063 &feature_power9Altivec,
1064 &feature_power9Vector,
1065 &feature_popcntd,
1066 &feature_ppcPostraSched,
1067 &feature_ppcPreraSched,
1068 &feature_partwordAtomics,
1069 &feature_recipprec,
1070 &feature_stfiwx,
1071 &feature_twoConstNr,
1072 &feature_vsx,
1073 &feature_vectorsUseTwoUnits,
1074 },
1075};
1076
1077pub const cpus = &[_]*const Cpu {
1078 &cpu_440,
1079 &cpu_450,
1080 &cpu_601,
1081 &cpu_602,
1082 &cpu_603,
1083 &cpu_e603,
1084 &cpu_ev603,
1085 &cpu_604,
1086 &cpu_e604,
1087 &cpu_620,
1088 &cpu_7400,
1089 &cpu_7450,
1090 &cpu_750,
1091 &cpu_970,
1092 &cpu_a2,
1093 &cpu_a2q,
1094 &cpu_e500,
1095 &cpu_e500mc,
1096 &cpu_e5500,
1097 &cpu_g3,
1098 &cpu_g4,
1099 &cpu_g4Plus,
1100 &cpu_g5,
1101 &cpu_generic,
1102 &cpu_ppc,
1103 &cpu_ppc32,
1104 &cpu_ppc64,
1105 &cpu_ppc64le,
1106 &cpu_pwr3,
1107 &cpu_pwr4,
1108 &cpu_pwr5,
1109 &cpu_pwr5x,
1110 &cpu_pwr6,
1111 &cpu_pwr6x,
1112 &cpu_pwr7,
1113 &cpu_pwr8,
1114 &cpu_pwr9,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 @"64bit",
6 @"64bitregs",
7 altivec,
8 booke,
9 bpermd,
10 cmpb,
11 crbits,
12 crypto,
13 direct_move,
14 e500,
15 extdiv,
16 fcpsgn,
17 float128,
18 fpcvt,
19 fprnd,
20 fpu,
21 fre,
22 fres,
23 frsqrte,
24 frsqrtes,
25 fsqrt,
26 hard_float,
27 htm,
28 icbt,
29 invariant_function_descriptors,
30 isa_v30_instructions,
31 isel,
32 ldbrx,
33 lfiwax,
34 longcall,
35 mfocrf,
36 msync,
37 partword_atomics,
38 popcntd,
39 power8_altivec,
40 power8_vector,
41 power9_altivec,
42 power9_vector,
43 ppc_postra_sched,
44 ppc_prera_sched,
45 ppc4xx,
46 ppc6xx,
47 qpx,
48 recipprec,
49 secure_plt,
50 slow_popcntd,
51 spe,
52 stfiwx,
53 two_const_nr,
54 vectors_use_two_units,
55 vsx,
56};
57
58pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
59
60pub const all_features = blk: {
61 const len = @typeInfo(Feature).Enum.fields.len;
62 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
63 var result: [len]Cpu.Feature = undefined;
64 result[@enumToInt(Feature.@"64bit")] = .{
65 .index = @enumToInt(Feature.@"64bit"),
66 .name = @tagName(Feature.@"64bit"),
67 .llvm_name = "64bit",
68 .description = "Enable 64-bit instructions",
69 .dependencies = 0,
70 };
71 result[@enumToInt(Feature.@"64bitregs")] = .{
72 .index = @enumToInt(Feature.@"64bitregs"),
73 .name = @tagName(Feature.@"64bitregs"),
74 .llvm_name = "64bitregs",
75 .description = "Enable 64-bit registers usage for ppc32 [beta]",
76 .dependencies = 0,
77 };
78 result[@enumToInt(Feature.altivec)] = .{
79 .index = @enumToInt(Feature.altivec),
80 .name = @tagName(Feature.altivec),
81 .llvm_name = "altivec",
82 .description = "Enable Altivec instructions",
83 .dependencies = featureSet(&[_]Feature{
84 .fpu,
85 }),
86 };
87 result[@enumToInt(Feature.booke)] = .{
88 .index = @enumToInt(Feature.booke),
89 .name = @tagName(Feature.booke),
90 .llvm_name = "booke",
91 .description = "Enable Book E instructions",
92 .dependencies = featureSet(&[_]Feature{
93 .icbt,
94 }),
95 };
96 result[@enumToInt(Feature.bpermd)] = .{
97 .index = @enumToInt(Feature.bpermd),
98 .name = @tagName(Feature.bpermd),
99 .llvm_name = "bpermd",
100 .description = "Enable the bpermd instruction",
101 .dependencies = 0,
102 };
103 result[@enumToInt(Feature.cmpb)] = .{
104 .index = @enumToInt(Feature.cmpb),
105 .name = @tagName(Feature.cmpb),
106 .llvm_name = "cmpb",
107 .description = "Enable the cmpb instruction",
108 .dependencies = 0,
109 };
110 result[@enumToInt(Feature.crbits)] = .{
111 .index = @enumToInt(Feature.crbits),
112 .name = @tagName(Feature.crbits),
113 .llvm_name = "crbits",
114 .description = "Use condition-register bits individually",
115 .dependencies = 0,
116 };
117 result[@enumToInt(Feature.crypto)] = .{
118 .index = @enumToInt(Feature.crypto),
119 .name = @tagName(Feature.crypto),
120 .llvm_name = "crypto",
121 .description = "Enable POWER8 Crypto instructions",
122 .dependencies = featureSet(&[_]Feature{
123 .power8_altivec,
124 }),
125 };
126 result[@enumToInt(Feature.direct_move)] = .{
127 .index = @enumToInt(Feature.direct_move),
128 .name = @tagName(Feature.direct_move),
129 .llvm_name = "direct-move",
130 .description = "Enable Power8 direct move instructions",
131 .dependencies = featureSet(&[_]Feature{
132 .vsx,
133 }),
134 };
135 result[@enumToInt(Feature.e500)] = .{
136 .index = @enumToInt(Feature.e500),
137 .name = @tagName(Feature.e500),
138 .llvm_name = "e500",
139 .description = "Enable E500/E500mc instructions",
140 .dependencies = 0,
141 };
142 result[@enumToInt(Feature.extdiv)] = .{
143 .index = @enumToInt(Feature.extdiv),
144 .name = @tagName(Feature.extdiv),
145 .llvm_name = "extdiv",
146 .description = "Enable extended divide instructions",
147 .dependencies = 0,
148 };
149 result[@enumToInt(Feature.fcpsgn)] = .{
150 .index = @enumToInt(Feature.fcpsgn),
151 .name = @tagName(Feature.fcpsgn),
152 .llvm_name = "fcpsgn",
153 .description = "Enable the fcpsgn instruction",
154 .dependencies = featureSet(&[_]Feature{
155 .fpu,
156 }),
157 };
158 result[@enumToInt(Feature.float128)] = .{
159 .index = @enumToInt(Feature.float128),
160 .name = @tagName(Feature.float128),
161 .llvm_name = "float128",
162 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
163 .dependencies = featureSet(&[_]Feature{
164 .vsx,
165 }),
166 };
167 result[@enumToInt(Feature.fpcvt)] = .{
168 .index = @enumToInt(Feature.fpcvt),
169 .name = @tagName(Feature.fpcvt),
170 .llvm_name = "fpcvt",
171 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
172 .dependencies = featureSet(&[_]Feature{
173 .fpu,
174 }),
175 };
176 result[@enumToInt(Feature.fprnd)] = .{
177 .index = @enumToInt(Feature.fprnd),
178 .name = @tagName(Feature.fprnd),
179 .llvm_name = "fprnd",
180 .description = "Enable the fri[mnpz] instructions",
181 .dependencies = featureSet(&[_]Feature{
182 .fpu,
183 }),
184 };
185 result[@enumToInt(Feature.fpu)] = .{
186 .index = @enumToInt(Feature.fpu),
187 .name = @tagName(Feature.fpu),
188 .llvm_name = "fpu",
189 .description = "Enable classic FPU instructions",
190 .dependencies = featureSet(&[_]Feature{
191 .hard_float,
192 }),
193 };
194 result[@enumToInt(Feature.fre)] = .{
195 .index = @enumToInt(Feature.fre),
196 .name = @tagName(Feature.fre),
197 .llvm_name = "fre",
198 .description = "Enable the fre instruction",
199 .dependencies = featureSet(&[_]Feature{
200 .fpu,
201 }),
202 };
203 result[@enumToInt(Feature.fres)] = .{
204 .index = @enumToInt(Feature.fres),
205 .name = @tagName(Feature.fres),
206 .llvm_name = "fres",
207 .description = "Enable the fres instruction",
208 .dependencies = featureSet(&[_]Feature{
209 .fpu,
210 }),
211 };
212 result[@enumToInt(Feature.frsqrte)] = .{
213 .index = @enumToInt(Feature.frsqrte),
214 .name = @tagName(Feature.frsqrte),
215 .llvm_name = "frsqrte",
216 .description = "Enable the frsqrte instruction",
217 .dependencies = featureSet(&[_]Feature{
218 .fpu,
219 }),
220 };
221 result[@enumToInt(Feature.frsqrtes)] = .{
222 .index = @enumToInt(Feature.frsqrtes),
223 .name = @tagName(Feature.frsqrtes),
224 .llvm_name = "frsqrtes",
225 .description = "Enable the frsqrtes instruction",
226 .dependencies = featureSet(&[_]Feature{
227 .fpu,
228 }),
229 };
230 result[@enumToInt(Feature.fsqrt)] = .{
231 .index = @enumToInt(Feature.fsqrt),
232 .name = @tagName(Feature.fsqrt),
233 .llvm_name = "fsqrt",
234 .description = "Enable the fsqrt instruction",
235 .dependencies = featureSet(&[_]Feature{
236 .fpu,
237 }),
238 };
239 result[@enumToInt(Feature.hard_float)] = .{
240 .index = @enumToInt(Feature.hard_float),
241 .name = @tagName(Feature.hard_float),
242 .llvm_name = "hard-float",
243 .description = "Enable floating-point instructions",
244 .dependencies = 0,
245 };
246 result[@enumToInt(Feature.htm)] = .{
247 .index = @enumToInt(Feature.htm),
248 .name = @tagName(Feature.htm),
249 .llvm_name = "htm",
250 .description = "Enable Hardware Transactional Memory instructions",
251 .dependencies = 0,
252 };
253 result[@enumToInt(Feature.icbt)] = .{
254 .index = @enumToInt(Feature.icbt),
255 .name = @tagName(Feature.icbt),
256 .llvm_name = "icbt",
257 .description = "Enable icbt instruction",
258 .dependencies = 0,
259 };
260 result[@enumToInt(Feature.invariant_function_descriptors)] = .{
261 .index = @enumToInt(Feature.invariant_function_descriptors),
262 .name = @tagName(Feature.invariant_function_descriptors),
263 .llvm_name = "invariant-function-descriptors",
264 .description = "Assume function descriptors are invariant",
265 .dependencies = 0,
266 };
267 result[@enumToInt(Feature.isa_v30_instructions)] = .{
268 .index = @enumToInt(Feature.isa_v30_instructions),
269 .name = @tagName(Feature.isa_v30_instructions),
270 .llvm_name = "isa-v30-instructions",
271 .description = "Enable instructions added in ISA 3.0.",
272 .dependencies = 0,
273 };
274 result[@enumToInt(Feature.isel)] = .{
275 .index = @enumToInt(Feature.isel),
276 .name = @tagName(Feature.isel),
277 .llvm_name = "isel",
278 .description = "Enable the isel instruction",
279 .dependencies = 0,
280 };
281 result[@enumToInt(Feature.ldbrx)] = .{
282 .index = @enumToInt(Feature.ldbrx),
283 .name = @tagName(Feature.ldbrx),
284 .llvm_name = "ldbrx",
285 .description = "Enable the ldbrx instruction",
286 .dependencies = 0,
287 };
288 result[@enumToInt(Feature.lfiwax)] = .{
289 .index = @enumToInt(Feature.lfiwax),
290 .name = @tagName(Feature.lfiwax),
291 .llvm_name = "lfiwax",
292 .description = "Enable the lfiwax instruction",
293 .dependencies = featureSet(&[_]Feature{
294 .fpu,
295 }),
296 };
297 result[@enumToInt(Feature.longcall)] = .{
298 .index = @enumToInt(Feature.longcall),
299 .name = @tagName(Feature.longcall),
300 .llvm_name = "longcall",
301 .description = "Always use indirect calls",
302 .dependencies = 0,
303 };
304 result[@enumToInt(Feature.mfocrf)] = .{
305 .index = @enumToInt(Feature.mfocrf),
306 .name = @tagName(Feature.mfocrf),
307 .llvm_name = "mfocrf",
308 .description = "Enable the MFOCRF instruction",
309 .dependencies = 0,
310 };
311 result[@enumToInt(Feature.msync)] = .{
312 .index = @enumToInt(Feature.msync),
313 .name = @tagName(Feature.msync),
314 .llvm_name = "msync",
315 .description = "Has only the msync instruction instead of sync",
316 .dependencies = featureSet(&[_]Feature{
317 .booke,
318 }),
319 };
320 result[@enumToInt(Feature.partword_atomics)] = .{
321 .index = @enumToInt(Feature.partword_atomics),
322 .name = @tagName(Feature.partword_atomics),
323 .llvm_name = "partword-atomics",
324 .description = "Enable l[bh]arx and st[bh]cx.",
325 .dependencies = 0,
326 };
327 result[@enumToInt(Feature.popcntd)] = .{
328 .index = @enumToInt(Feature.popcntd),
329 .name = @tagName(Feature.popcntd),
330 .llvm_name = "popcntd",
331 .description = "Enable the popcnt[dw] instructions",
332 .dependencies = 0,
333 };
334 result[@enumToInt(Feature.power8_altivec)] = .{
335 .index = @enumToInt(Feature.power8_altivec),
336 .name = @tagName(Feature.power8_altivec),
337 .llvm_name = "power8-altivec",
338 .description = "Enable POWER8 Altivec instructions",
339 .dependencies = featureSet(&[_]Feature{
340 .altivec,
341 }),
342 };
343 result[@enumToInt(Feature.power8_vector)] = .{
344 .index = @enumToInt(Feature.power8_vector),
345 .name = @tagName(Feature.power8_vector),
346 .llvm_name = "power8-vector",
347 .description = "Enable POWER8 vector instructions",
348 .dependencies = featureSet(&[_]Feature{
349 .power8_altivec,
350 .vsx,
351 }),
352 };
353 result[@enumToInt(Feature.power9_altivec)] = .{
354 .index = @enumToInt(Feature.power9_altivec),
355 .name = @tagName(Feature.power9_altivec),
356 .llvm_name = "power9-altivec",
357 .description = "Enable POWER9 Altivec instructions",
358 .dependencies = featureSet(&[_]Feature{
359 .isa_v30_instructions,
360 .power8_altivec,
361 }),
362 };
363 result[@enumToInt(Feature.power9_vector)] = .{
364 .index = @enumToInt(Feature.power9_vector),
365 .name = @tagName(Feature.power9_vector),
366 .llvm_name = "power9-vector",
367 .description = "Enable POWER9 vector instructions",
368 .dependencies = featureSet(&[_]Feature{
369 .isa_v30_instructions,
370 .power8_vector,
371 .power9_altivec,
372 }),
373 };
374 result[@enumToInt(Feature.ppc_postra_sched)] = .{
375 .index = @enumToInt(Feature.ppc_postra_sched),
376 .name = @tagName(Feature.ppc_postra_sched),
377 .llvm_name = "ppc-postra-sched",
378 .description = "Use PowerPC post-RA scheduling strategy",
379 .dependencies = 0,
380 };
381 result[@enumToInt(Feature.ppc_prera_sched)] = .{
382 .index = @enumToInt(Feature.ppc_prera_sched),
383 .name = @tagName(Feature.ppc_prera_sched),
384 .llvm_name = "ppc-prera-sched",
385 .description = "Use PowerPC pre-RA scheduling strategy",
386 .dependencies = 0,
387 };
388 result[@enumToInt(Feature.ppc4xx)] = .{
389 .index = @enumToInt(Feature.ppc4xx),
390 .name = @tagName(Feature.ppc4xx),
391 .llvm_name = "ppc4xx",
392 .description = "Enable PPC 4xx instructions",
393 .dependencies = 0,
394 };
395 result[@enumToInt(Feature.ppc6xx)] = .{
396 .index = @enumToInt(Feature.ppc6xx),
397 .name = @tagName(Feature.ppc6xx),
398 .llvm_name = "ppc6xx",
399 .description = "Enable PPC 6xx instructions",
400 .dependencies = 0,
401 };
402 result[@enumToInt(Feature.qpx)] = .{
403 .index = @enumToInt(Feature.qpx),
404 .name = @tagName(Feature.qpx),
405 .llvm_name = "qpx",
406 .description = "Enable QPX instructions",
407 .dependencies = featureSet(&[_]Feature{
408 .fpu,
409 }),
410 };
411 result[@enumToInt(Feature.recipprec)] = .{
412 .index = @enumToInt(Feature.recipprec),
413 .name = @tagName(Feature.recipprec),
414 .llvm_name = "recipprec",
415 .description = "Assume higher precision reciprocal estimates",
416 .dependencies = 0,
417 };
418 result[@enumToInt(Feature.secure_plt)] = .{
419 .index = @enumToInt(Feature.secure_plt),
420 .name = @tagName(Feature.secure_plt),
421 .llvm_name = "secure-plt",
422 .description = "Enable secure plt mode",
423 .dependencies = 0,
424 };
425 result[@enumToInt(Feature.slow_popcntd)] = .{
426 .index = @enumToInt(Feature.slow_popcntd),
427 .name = @tagName(Feature.slow_popcntd),
428 .llvm_name = "slow-popcntd",
429 .description = "Has slow popcnt[dw] instructions",
430 .dependencies = 0,
431 };
432 result[@enumToInt(Feature.spe)] = .{
433 .index = @enumToInt(Feature.spe),
434 .name = @tagName(Feature.spe),
435 .llvm_name = "spe",
436 .description = "Enable SPE instructions",
437 .dependencies = featureSet(&[_]Feature{
438 .hard_float,
439 }),
440 };
441 result[@enumToInt(Feature.stfiwx)] = .{
442 .index = @enumToInt(Feature.stfiwx),
443 .name = @tagName(Feature.stfiwx),
444 .llvm_name = "stfiwx",
445 .description = "Enable the stfiwx instruction",
446 .dependencies = featureSet(&[_]Feature{
447 .fpu,
448 }),
449 };
450 result[@enumToInt(Feature.two_const_nr)] = .{
451 .index = @enumToInt(Feature.two_const_nr),
452 .name = @tagName(Feature.two_const_nr),
453 .llvm_name = "two-const-nr",
454 .description = "Requires two constant Newton-Raphson computation",
455 .dependencies = 0,
456 };
457 result[@enumToInt(Feature.vectors_use_two_units)] = .{
458 .index = @enumToInt(Feature.vectors_use_two_units),
459 .name = @tagName(Feature.vectors_use_two_units),
460 .llvm_name = "vectors-use-two-units",
461 .description = "Vectors use two units",
462 .dependencies = 0,
463 };
464 result[@enumToInt(Feature.vsx)] = .{
465 .index = @enumToInt(Feature.vsx),
466 .name = @tagName(Feature.vsx),
467 .llvm_name = "vsx",
468 .description = "Enable VSX instructions",
469 .dependencies = featureSet(&[_]Feature{
470 .altivec,
471 }),
472 };
473 break :blk result;
474};
475
476pub const cpu = struct {
477 pub const @"440" = Cpu{
478 .name = "@"440"",
479 .llvm_name = "440",
480 .features = featureSet(&[_]Feature{
481 .booke,
482 .fres,
483 .frsqrte,
484 .icbt,
485 .isel,
486 .msync,
487 }),
488 };
489 pub const @"450" = Cpu{
490 .name = "@"450"",
491 .llvm_name = "450",
492 .features = featureSet(&[_]Feature{
493 .booke,
494 .fres,
495 .frsqrte,
496 .icbt,
497 .isel,
498 .msync,
499 }),
500 };
501 pub const @"601" = Cpu{
502 .name = "@"601"",
503 .llvm_name = "601",
504 .features = featureSet(&[_]Feature{
505 .fpu,
506 }),
507 };
508 pub const @"602" = Cpu{
509 .name = "@"602"",
510 .llvm_name = "602",
511 .features = featureSet(&[_]Feature{
512 .fpu,
513 }),
514 };
515 pub const @"603" = Cpu{
516 .name = "@"603"",
517 .llvm_name = "603",
518 .features = featureSet(&[_]Feature{
519 .fres,
520 .frsqrte,
521 }),
522 };
523 pub const @"603e" = Cpu{
524 .name = "@"603e"",
525 .llvm_name = "603e",
526 .features = featureSet(&[_]Feature{
527 .fres,
528 .frsqrte,
529 }),
530 };
531 pub const @"603ev" = Cpu{
532 .name = "@"603ev"",
533 .llvm_name = "603ev",
534 .features = featureSet(&[_]Feature{
535 .fres,
536 .frsqrte,
537 }),
538 };
539 pub const @"604" = Cpu{
540 .name = "@"604"",
541 .llvm_name = "604",
542 .features = featureSet(&[_]Feature{
543 .fres,
544 .frsqrte,
545 }),
546 };
547 pub const @"604e" = Cpu{
548 .name = "@"604e"",
549 .llvm_name = "604e",
550 .features = featureSet(&[_]Feature{
551 .fres,
552 .frsqrte,
553 }),
554 };
555 pub const @"620" = Cpu{
556 .name = "@"620"",
557 .llvm_name = "620",
558 .features = featureSet(&[_]Feature{
559 .fres,
560 .frsqrte,
561 }),
562 };
563 pub const @"7400" = Cpu{
564 .name = "@"7400"",
565 .llvm_name = "7400",
566 .features = featureSet(&[_]Feature{
567 .altivec,
568 .fres,
569 .frsqrte,
570 }),
571 };
572 pub const @"7450" = Cpu{
573 .name = "@"7450"",
574 .llvm_name = "7450",
575 .features = featureSet(&[_]Feature{
576 .altivec,
577 .fres,
578 .frsqrte,
579 }),
580 };
581 pub const @"750" = Cpu{
582 .name = "@"750"",
583 .llvm_name = "750",
584 .features = featureSet(&[_]Feature{
585 .fres,
586 .frsqrte,
587 }),
588 };
589 pub const @"970" = Cpu{
590 .name = "@"970"",
591 .llvm_name = "970",
592 .features = featureSet(&[_]Feature{
593 .@"64bit",
594 .altivec,
595 .fres,
596 .frsqrte,
597 .fsqrt,
598 .mfocrf,
599 .stfiwx,
600 }),
601 };
602 pub const a2 = Cpu{
603 .name = "a2",
604 .llvm_name = "a2",
605 .features = featureSet(&[_]Feature{
606 .@"64bit",
607 .booke,
608 .cmpb,
609 .fcpsgn,
610 .fpcvt,
611 .fprnd,
612 .fre,
613 .fres,
614 .frsqrte,
615 .frsqrtes,
616 .fsqrt,
617 .icbt,
618 .isel,
619 .ldbrx,
620 .lfiwax,
621 .mfocrf,
622 .recipprec,
623 .slow_popcntd,
624 .stfiwx,
625 }),
626 };
627 pub const a2q = Cpu{
628 .name = "a2q",
629 .llvm_name = "a2q",
630 .features = featureSet(&[_]Feature{
631 .@"64bit",
632 .booke,
633 .cmpb,
634 .fcpsgn,
635 .fpcvt,
636 .fprnd,
637 .fre,
638 .fres,
639 .frsqrte,
640 .frsqrtes,
641 .fsqrt,
642 .icbt,
643 .isel,
644 .ldbrx,
645 .lfiwax,
646 .mfocrf,
647 .qpx,
648 .recipprec,
649 .slow_popcntd,
650 .stfiwx,
651 }),
652 };
653 pub const e500 = Cpu{
654 .name = "e500",
655 .llvm_name = "e500",
656 .features = featureSet(&[_]Feature{
657 .booke,
658 .icbt,
659 .isel,
660 }),
661 };
662 pub const e500mc = Cpu{
663 .name = "e500mc",
664 .llvm_name = "e500mc",
665 .features = featureSet(&[_]Feature{
666 .booke,
667 .icbt,
668 .isel,
669 .stfiwx,
670 }),
671 };
672 pub const e5500 = Cpu{
673 .name = "e5500",
674 .llvm_name = "e5500",
675 .features = featureSet(&[_]Feature{
676 .@"64bit",
677 .booke,
678 .icbt,
679 .isel,
680 .mfocrf,
681 .stfiwx,
682 }),
683 };
684 pub const g3 = Cpu{
685 .name = "g3",
686 .llvm_name = "g3",
687 .features = featureSet(&[_]Feature{
688 .fres,
689 .frsqrte,
690 }),
691 };
692 pub const g4 = Cpu{
693 .name = "g4",
694 .llvm_name = "g4",
695 .features = featureSet(&[_]Feature{
696 .altivec,
697 .fres,
698 .frsqrte,
699 }),
700 };
701 pub const g4+ = Cpu{
702 .name = "g4+",
703 .llvm_name = "g4+",
704 .features = featureSet(&[_]Feature{
705 .altivec,
706 .fres,
707 .frsqrte,
708 }),
709 };
710 pub const g5 = Cpu{
711 .name = "g5",
712 .llvm_name = "g5",
713 .features = featureSet(&[_]Feature{
714 .@"64bit",
715 .altivec,
716 .fres,
717 .frsqrte,
718 .fsqrt,
719 .mfocrf,
720 .stfiwx,
721 }),
722 };
723 pub const generic = Cpu{
724 .name = "generic",
725 .llvm_name = "generic",
726 .features = featureSet(&[_]Feature{
727 .hard_float,
728 }),
729 };
730 pub const ppc = Cpu{
731 .name = "ppc",
732 .llvm_name = "ppc",
733 .features = featureSet(&[_]Feature{
734 .hard_float,
735 }),
736 };
737 pub const ppc32 = Cpu{
738 .name = "ppc32",
739 .llvm_name = "ppc32",
740 .features = featureSet(&[_]Feature{
741 .hard_float,
742 }),
743 };
744 pub const ppc64 = Cpu{
745 .name = "ppc64",
746 .llvm_name = "ppc64",
747 .features = featureSet(&[_]Feature{
748 .@"64bit",
749 .altivec,
750 .fres,
751 .frsqrte,
752 .fsqrt,
753 .mfocrf,
754 .stfiwx,
755 }),
756 };
757 pub const ppc64le = Cpu{
758 .name = "ppc64le",
759 .llvm_name = "ppc64le",
760 .features = featureSet(&[_]Feature{
761 .@"64bit",
762 .altivec,
763 .bpermd,
764 .cmpb,
765 .crypto,
766 .direct_move,
767 .extdiv,
768 .fcpsgn,
769 .fpcvt,
770 .fprnd,
771 .fre,
772 .fres,
773 .frsqrte,
774 .frsqrtes,
775 .fsqrt,
776 .htm,
777 .icbt,
778 .isel,
779 .ldbrx,
780 .lfiwax,
781 .mfocrf,
782 .partword_atomics,
783 .popcntd,
784 .power8_altivec,
785 .power8_vector,
786 .recipprec,
787 .stfiwx,
788 .two_const_nr,
789 .vsx,
790 }),
791 };
792 pub const pwr3 = Cpu{
793 .name = "pwr3",
794 .llvm_name = "pwr3",
795 .features = featureSet(&[_]Feature{
796 .@"64bit",
797 .altivec,
798 .fres,
799 .frsqrte,
800 .mfocrf,
801 .stfiwx,
802 }),
803 };
804 pub const pwr4 = Cpu{
805 .name = "pwr4",
806 .llvm_name = "pwr4",
807 .features = featureSet(&[_]Feature{
808 .@"64bit",
809 .altivec,
810 .fres,
811 .frsqrte,
812 .fsqrt,
813 .mfocrf,
814 .stfiwx,
815 }),
816 };
817 pub const pwr5 = Cpu{
818 .name = "pwr5",
819 .llvm_name = "pwr5",
820 .features = featureSet(&[_]Feature{
821 .@"64bit",
822 .altivec,
823 .fre,
824 .fres,
825 .frsqrte,
826 .frsqrtes,
827 .fsqrt,
828 .mfocrf,
829 .stfiwx,
830 }),
831 };
832 pub const pwr5x = Cpu{
833 .name = "pwr5x",
834 .llvm_name = "pwr5x",
835 .features = featureSet(&[_]Feature{
836 .@"64bit",
837 .altivec,
838 .fprnd,
839 .fre,
840 .fres,
841 .frsqrte,
842 .frsqrtes,
843 .fsqrt,
844 .mfocrf,
845 .stfiwx,
846 }),
847 };
848 pub const pwr6 = Cpu{
849 .name = "pwr6",
850 .llvm_name = "pwr6",
851 .features = featureSet(&[_]Feature{
852 .@"64bit",
853 .altivec,
854 .cmpb,
855 .fcpsgn,
856 .fprnd,
857 .fre,
858 .fres,
859 .frsqrte,
860 .frsqrtes,
861 .fsqrt,
862 .lfiwax,
863 .mfocrf,
864 .recipprec,
865 .stfiwx,
866 }),
867 };
868 pub const pwr6x = Cpu{
869 .name = "pwr6x",
870 .llvm_name = "pwr6x",
871 .features = featureSet(&[_]Feature{
872 .@"64bit",
873 .altivec,
874 .cmpb,
875 .fcpsgn,
876 .fprnd,
877 .fre,
878 .fres,
879 .frsqrte,
880 .frsqrtes,
881 .fsqrt,
882 .lfiwax,
883 .mfocrf,
884 .recipprec,
885 .stfiwx,
886 }),
887 };
888 pub const pwr7 = Cpu{
889 .name = "pwr7",
890 .llvm_name = "pwr7",
891 .features = featureSet(&[_]Feature{
892 .@"64bit",
893 .altivec,
894 .bpermd,
895 .cmpb,
896 .extdiv,
897 .fcpsgn,
898 .fpcvt,
899 .fprnd,
900 .fre,
901 .fres,
902 .frsqrte,
903 .frsqrtes,
904 .fsqrt,
905 .isel,
906 .ldbrx,
907 .lfiwax,
908 .mfocrf,
909 .popcntd,
910 .recipprec,
911 .stfiwx,
912 .two_const_nr,
913 .vsx,
914 }),
915 };
916 pub const pwr8 = Cpu{
917 .name = "pwr8",
918 .llvm_name = "pwr8",
919 .features = featureSet(&[_]Feature{
920 .@"64bit",
921 .altivec,
922 .bpermd,
923 .cmpb,
924 .crypto,
925 .direct_move,
926 .extdiv,
927 .fcpsgn,
928 .fpcvt,
929 .fprnd,
930 .fre,
931 .fres,
932 .frsqrte,
933 .frsqrtes,
934 .fsqrt,
935 .htm,
936 .icbt,
937 .isel,
938 .ldbrx,
939 .lfiwax,
940 .mfocrf,
941 .partword_atomics,
942 .popcntd,
943 .power8_altivec,
944 .power8_vector,
945 .recipprec,
946 .stfiwx,
947 .two_const_nr,
948 .vsx,
949 }),
950 };
951 pub const pwr9 = Cpu{
952 .name = "pwr9",
953 .llvm_name = "pwr9",
954 .features = featureSet(&[_]Feature{
955 .@"64bit",
956 .altivec,
957 .bpermd,
958 .cmpb,
959 .crypto,
960 .direct_move,
961 .extdiv,
962 .fcpsgn,
963 .fpcvt,
964 .fprnd,
965 .fre,
966 .fres,
967 .frsqrte,
968 .frsqrtes,
969 .fsqrt,
970 .htm,
971 .icbt,
972 .isa_v30_instructions,
973 .isel,
974 .ldbrx,
975 .lfiwax,
976 .mfocrf,
977 .partword_atomics,
978 .popcntd,
979 .power8_altivec,
980 .power8_vector,
981 .power9_altivec,
982 .power9_vector,
983 .ppc_postra_sched,
984 .ppc_prera_sched,
985 .recipprec,
986 .stfiwx,
987 .two_const_nr,
988 .vectors_use_two_units,
989 .vsx,
990 }),
991 };
992};
993
994/// All powerpc CPUs, sorted alphabetically by name.
995/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
996/// compiler has inefficient memory and CPU usage, affecting build times.
997pub const all_cpus = &[_]*const Cpu{
998 &cpu.@"440",
999 &cpu.@"450",
1000 &cpu.@"601",
1001 &cpu.@"602",
1002 &cpu.@"603",
1003 &cpu.@"603e",
1004 &cpu.@"603ev",
1005 &cpu.@"604",
1006 &cpu.@"604e",
1007 &cpu.@"620",
1008 &cpu.@"7400",
1009 &cpu.@"7450",
1010 &cpu.@"750",
1011 &cpu.@"970",
1012 &cpu.a2,
1013 &cpu.a2q,
1014 &cpu.e500,
1015 &cpu.e500mc,
1016 &cpu.e5500,
1017 &cpu.g3,
1018 &cpu.g4,
1019 &cpu.g4+,
1020 &cpu.g5,
1021 &cpu.generic,
1022 &cpu.ppc,
1023 &cpu.ppc32,
1024 &cpu.ppc64,
1025 &cpu.ppc64le,
1026 &cpu.pwr3,
1027 &cpu.pwr4,
1028 &cpu.pwr5,
1029 &cpu.pwr5x,
1030 &cpu.pwr6,
1031 &cpu.pwr6x,
1032 &cpu.pwr7,
1033 &cpu.pwr8,
1034 &cpu.pwr9,
11151035};
lib/std/target/riscv.zig+94-89
......@@ -1,98 +1,103 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
33
4pub const feature_bit64 = Feature{
5 .name = "bit64",
6 .llvm_name = "64bit",
7 .description = "Implements RV64",
8 .dependencies = &[_]*const Feature {
9 },
4pub const Feature = enum {
5 @"64bit",
6 a,
7 c,
8 d,
9 e,
10 f,
11 m,
12 relax,
1013};
1114
12pub const feature_e = Feature{
13 .name = "e",
14 .llvm_name = "e",
15 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_relax = Feature{
21 .name = "relax",
22 .llvm_name = "relax",
23 .description = "Enable Linker relaxation.",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_a = Feature{
29 .name = "a",
30 .llvm_name = "a",
31 .description = "'A' (Atomic Instructions)",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_c = Feature{
37 .name = "c",
38 .llvm_name = "c",
39 .description = "'C' (Compressed Instructions)",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_d = Feature{
45 .name = "d",
46 .llvm_name = "d",
47 .description = "'D' (Double-Precision Floating-Point)",
48 .dependencies = &[_]*const Feature {
49 &feature_f,
50 },
51};
52
53pub const feature_f = Feature{
54 .name = "f",
55 .llvm_name = "f",
56 .description = "'F' (Single-Precision Floating-Point)",
57 .dependencies = &[_]*const Feature {
58 },
59};
60
61pub const feature_m = Feature{
62 .name = "m",
63 .llvm_name = "m",
64 .description = "'M' (Integer Multiplication and Division)",
65 .dependencies = &[_]*const Feature {
66 },
67};
68
69pub const features = &[_]*const Feature {
70 &feature_bit64,
71 &feature_e,
72 &feature_relax,
73 &feature_a,
74 &feature_c,
75 &feature_d,
76 &feature_f,
77 &feature_m,
78};
15pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
7916
80pub const cpu_genericRv32 = Cpu{
81 .name = "genericRv32",
82 .llvm_name = "generic-rv32",
83 .dependencies = &[_]*const Feature {
84 },
17pub const all_features = blk: {
18 const len = @typeInfo(Feature).Enum.fields.len;
19 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
20 var result: [len]Cpu.Feature = undefined;
21 result[@enumToInt(Feature.@"64bit")] = .{
22 .index = @enumToInt(Feature.@"64bit"),
23 .name = @tagName(Feature.@"64bit"),
24 .llvm_name = "64bit",
25 .description = "Implements RV64",
26 .dependencies = 0,
27 };
28 result[@enumToInt(Feature.a)] = .{
29 .index = @enumToInt(Feature.a),
30 .name = @tagName(Feature.a),
31 .llvm_name = "a",
32 .description = "'A' (Atomic Instructions)",
33 .dependencies = 0,
34 };
35 result[@enumToInt(Feature.c)] = .{
36 .index = @enumToInt(Feature.c),
37 .name = @tagName(Feature.c),
38 .llvm_name = "c",
39 .description = "'C' (Compressed Instructions)",
40 .dependencies = 0,
41 };
42 result[@enumToInt(Feature.d)] = .{
43 .index = @enumToInt(Feature.d),
44 .name = @tagName(Feature.d),
45 .llvm_name = "d",
46 .description = "'D' (Double-Precision Floating-Point)",
47 .dependencies = featureSet(&[_]Feature{
48 .f,
49 }),
50 };
51 result[@enumToInt(Feature.e)] = .{
52 .index = @enumToInt(Feature.e),
53 .name = @tagName(Feature.e),
54 .llvm_name = "e",
55 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
56 .dependencies = 0,
57 };
58 result[@enumToInt(Feature.f)] = .{
59 .index = @enumToInt(Feature.f),
60 .name = @tagName(Feature.f),
61 .llvm_name = "f",
62 .description = "'F' (Single-Precision Floating-Point)",
63 .dependencies = 0,
64 };
65 result[@enumToInt(Feature.m)] = .{
66 .index = @enumToInt(Feature.m),
67 .name = @tagName(Feature.m),
68 .llvm_name = "m",
69 .description = "'M' (Integer Multiplication and Division)",
70 .dependencies = 0,
71 };
72 result[@enumToInt(Feature.relax)] = .{
73 .index = @enumToInt(Feature.relax),
74 .name = @tagName(Feature.relax),
75 .llvm_name = "relax",
76 .description = "Enable Linker relaxation.",
77 .dependencies = 0,
78 };
79 break :blk result;
8580};
8681
87pub const cpu_genericRv64 = Cpu{
88 .name = "genericRv64",
89 .llvm_name = "generic-rv64",
90 .dependencies = &[_]*const Feature {
91 &feature_bit64,
92 },
82pub const cpu = struct {
83 pub const generic_rv32 = Cpu{
84 .name = "generic_rv32",
85 .llvm_name = "generic-rv32",
86 .features = 0,
87 };
88 pub const generic_rv64 = Cpu{
89 .name = "generic_rv64",
90 .llvm_name = "generic-rv64",
91 .features = featureSet(&[_]Feature{
92 .@"64bit",
93 }),
94 };
9395};
9496
95pub const cpus = &[_]*const Cpu {
96 &cpu_genericRv32,
97 &cpu_genericRv64,
97/// All riscv CPUs, sorted alphabetically by name.
98/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
99/// compiler has inefficient memory and CPU usage, affecting build times.
100pub const all_cpus = &[_]*const Cpu{
101 &cpu.generic_rv32,
102 &cpu.generic_rv64,
98103};
lib/std/target/sparc.zig+527-488
......@@ -1,489 +1,528 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_hardQuadFloat = Feature{
5 .name = "hardQuadFloat",
6 .llvm_name = "hard-quad-float",
7 .description = "Enable quad-word floating point instructions",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_leon = Feature{
13 .name = "leon",
14 .llvm_name = "leon",
15 .description = "Enable LEON extensions",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_noFmuls = Feature{
21 .name = "noFmuls",
22 .llvm_name = "no-fmuls",
23 .description = "Disable the fmuls instruction.",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_noFsmuld = Feature{
29 .name = "noFsmuld",
30 .llvm_name = "no-fsmuld",
31 .description = "Disable the fsmuld instruction.",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_leonpwrpsr = Feature{
37 .name = "leonpwrpsr",
38 .llvm_name = "leonpwrpsr",
39 .description = "Enable the PWRPSR instruction",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_softFloat = Feature{
45 .name = "softFloat",
46 .llvm_name = "soft-float",
47 .description = "Use software emulation for floating point",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_softMulDiv = Feature{
53 .name = "softMulDiv",
54 .llvm_name = "soft-mul-div",
55 .description = "Use software emulation for integer multiply and divide",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_deprecatedV8 = Feature{
61 .name = "deprecatedV8",
62 .llvm_name = "deprecated-v8",
63 .description = "Enable deprecated V8 instructions in V9 mode",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_v9 = Feature{
69 .name = "v9",
70 .llvm_name = "v9",
71 .description = "Enable SPARC-V9 instructions",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_vis = Feature{
77 .name = "vis",
78 .llvm_name = "vis",
79 .description = "Enable UltraSPARC Visual Instruction Set extensions",
80 .dependencies = &[_]*const Feature {
81 },
82};
83
84pub const feature_vis2 = Feature{
85 .name = "vis2",
86 .llvm_name = "vis2",
87 .description = "Enable Visual Instruction Set extensions II",
88 .dependencies = &[_]*const Feature {
89 },
90};
91
92pub const feature_vis3 = Feature{
93 .name = "vis3",
94 .llvm_name = "vis3",
95 .description = "Enable Visual Instruction Set extensions III",
96 .dependencies = &[_]*const Feature {
97 },
98};
99
100pub const features = &[_]*const Feature {
101 &feature_hardQuadFloat,
102 &feature_leon,
103 &feature_noFmuls,
104 &feature_noFsmuld,
105 &feature_leonpwrpsr,
106 &feature_softFloat,
107 &feature_softMulDiv,
108 &feature_deprecatedV8,
109 &feature_v9,
110 &feature_vis,
111 &feature_vis2,
112 &feature_vis3,
113};
114
115pub const cpu_at697e = Cpu{
116 .name = "at697e",
117 .llvm_name = "at697e",
118 .dependencies = &[_]*const Feature {
119 &feature_leon,
120 },
121};
122
123pub const cpu_at697f = Cpu{
124 .name = "at697f",
125 .llvm_name = "at697f",
126 .dependencies = &[_]*const Feature {
127 &feature_leon,
128 },
129};
130
131pub const cpu_f934 = Cpu{
132 .name = "f934",
133 .llvm_name = "f934",
134 .dependencies = &[_]*const Feature {
135 },
136};
137
138pub const cpu_generic = Cpu{
139 .name = "generic",
140 .llvm_name = "generic",
141 .dependencies = &[_]*const Feature {
142 },
143};
144
145pub const cpu_gr712rc = Cpu{
146 .name = "gr712rc",
147 .llvm_name = "gr712rc",
148 .dependencies = &[_]*const Feature {
149 &feature_leon,
150 },
151};
152
153pub const cpu_gr740 = Cpu{
154 .name = "gr740",
155 .llvm_name = "gr740",
156 .dependencies = &[_]*const Feature {
157 &feature_leon,
158 &feature_leonpwrpsr,
159 },
160};
161
162pub const cpu_hypersparc = Cpu{
163 .name = "hypersparc",
164 .llvm_name = "hypersparc",
165 .dependencies = &[_]*const Feature {
166 },
167};
168
169pub const cpu_leon2 = Cpu{
170 .name = "leon2",
171 .llvm_name = "leon2",
172 .dependencies = &[_]*const Feature {
173 &feature_leon,
174 },
175};
176
177pub const cpu_leon3 = Cpu{
178 .name = "leon3",
179 .llvm_name = "leon3",
180 .dependencies = &[_]*const Feature {
181 &feature_leon,
182 },
183};
184
185pub const cpu_leon4 = Cpu{
186 .name = "leon4",
187 .llvm_name = "leon4",
188 .dependencies = &[_]*const Feature {
189 &feature_leon,
190 },
191};
192
193pub const cpu_ma2080 = Cpu{
194 .name = "ma2080",
195 .llvm_name = "ma2080",
196 .dependencies = &[_]*const Feature {
197 &feature_leon,
198 },
199};
200
201pub const cpu_ma2085 = Cpu{
202 .name = "ma2085",
203 .llvm_name = "ma2085",
204 .dependencies = &[_]*const Feature {
205 &feature_leon,
206 },
207};
208
209pub const cpu_ma2100 = Cpu{
210 .name = "ma2100",
211 .llvm_name = "ma2100",
212 .dependencies = &[_]*const Feature {
213 &feature_leon,
214 },
215};
216
217pub const cpu_ma2150 = Cpu{
218 .name = "ma2150",
219 .llvm_name = "ma2150",
220 .dependencies = &[_]*const Feature {
221 &feature_leon,
222 },
223};
224
225pub const cpu_ma2155 = Cpu{
226 .name = "ma2155",
227 .llvm_name = "ma2155",
228 .dependencies = &[_]*const Feature {
229 &feature_leon,
230 },
231};
232
233pub const cpu_ma2450 = Cpu{
234 .name = "ma2450",
235 .llvm_name = "ma2450",
236 .dependencies = &[_]*const Feature {
237 &feature_leon,
238 },
239};
240
241pub const cpu_ma2455 = Cpu{
242 .name = "ma2455",
243 .llvm_name = "ma2455",
244 .dependencies = &[_]*const Feature {
245 &feature_leon,
246 },
247};
248
249pub const cpu_ma2480 = Cpu{
250 .name = "ma2480",
251 .llvm_name = "ma2480",
252 .dependencies = &[_]*const Feature {
253 &feature_leon,
254 },
255};
256
257pub const cpu_ma2485 = Cpu{
258 .name = "ma2485",
259 .llvm_name = "ma2485",
260 .dependencies = &[_]*const Feature {
261 &feature_leon,
262 },
263};
264
265pub const cpu_ma2x5x = Cpu{
266 .name = "ma2x5x",
267 .llvm_name = "ma2x5x",
268 .dependencies = &[_]*const Feature {
269 &feature_leon,
270 },
271};
272
273pub const cpu_ma2x8x = Cpu{
274 .name = "ma2x8x",
275 .llvm_name = "ma2x8x",
276 .dependencies = &[_]*const Feature {
277 &feature_leon,
278 },
279};
280
281pub const cpu_myriad2 = Cpu{
282 .name = "myriad2",
283 .llvm_name = "myriad2",
284 .dependencies = &[_]*const Feature {
285 &feature_leon,
286 },
287};
288
289pub const cpu_myriad21 = Cpu{
290 .name = "myriad21",
291 .llvm_name = "myriad2.1",
292 .dependencies = &[_]*const Feature {
293 &feature_leon,
294 },
295};
296
297pub const cpu_myriad22 = Cpu{
298 .name = "myriad22",
299 .llvm_name = "myriad2.2",
300 .dependencies = &[_]*const Feature {
301 &feature_leon,
302 },
303};
304
305pub const cpu_myriad23 = Cpu{
306 .name = "myriad23",
307 .llvm_name = "myriad2.3",
308 .dependencies = &[_]*const Feature {
309 &feature_leon,
310 },
311};
312
313pub const cpu_niagara = Cpu{
314 .name = "niagara",
315 .llvm_name = "niagara",
316 .dependencies = &[_]*const Feature {
317 &feature_deprecatedV8,
318 &feature_v9,
319 &feature_vis,
320 &feature_vis2,
321 },
322};
323
324pub const cpu_niagara2 = Cpu{
325 .name = "niagara2",
326 .llvm_name = "niagara2",
327 .dependencies = &[_]*const Feature {
328 &feature_deprecatedV8,
329 &feature_v9,
330 &feature_vis,
331 &feature_vis2,
332 },
333};
334
335pub const cpu_niagara3 = Cpu{
336 .name = "niagara3",
337 .llvm_name = "niagara3",
338 .dependencies = &[_]*const Feature {
339 &feature_deprecatedV8,
340 &feature_v9,
341 &feature_vis,
342 &feature_vis2,
343 },
344};
345
346pub const cpu_niagara4 = Cpu{
347 .name = "niagara4",
348 .llvm_name = "niagara4",
349 .dependencies = &[_]*const Feature {
350 &feature_deprecatedV8,
351 &feature_v9,
352 &feature_vis,
353 &feature_vis2,
354 &feature_vis3,
355 },
356};
357
358pub const cpu_sparclet = Cpu{
359 .name = "sparclet",
360 .llvm_name = "sparclet",
361 .dependencies = &[_]*const Feature {
362 },
363};
364
365pub const cpu_sparclite = Cpu{
366 .name = "sparclite",
367 .llvm_name = "sparclite",
368 .dependencies = &[_]*const Feature {
369 },
370};
371
372pub const cpu_sparclite86x = Cpu{
373 .name = "sparclite86x",
374 .llvm_name = "sparclite86x",
375 .dependencies = &[_]*const Feature {
376 },
377};
378
379pub const cpu_supersparc = Cpu{
380 .name = "supersparc",
381 .llvm_name = "supersparc",
382 .dependencies = &[_]*const Feature {
383 },
384};
385
386pub const cpu_tsc701 = Cpu{
387 .name = "tsc701",
388 .llvm_name = "tsc701",
389 .dependencies = &[_]*const Feature {
390 },
391};
392
393pub const cpu_ultrasparc = Cpu{
394 .name = "ultrasparc",
395 .llvm_name = "ultrasparc",
396 .dependencies = &[_]*const Feature {
397 &feature_deprecatedV8,
398 &feature_v9,
399 &feature_vis,
400 },
401};
402
403pub const cpu_ultrasparc3 = Cpu{
404 .name = "ultrasparc3",
405 .llvm_name = "ultrasparc3",
406 .dependencies = &[_]*const Feature {
407 &feature_deprecatedV8,
408 &feature_v9,
409 &feature_vis,
410 &feature_vis2,
411 },
412};
413
414pub const cpu_ut699 = Cpu{
415 .name = "ut699",
416 .llvm_name = "ut699",
417 .dependencies = &[_]*const Feature {
418 &feature_leon,
419 &feature_noFmuls,
420 &feature_noFsmuld,
421 },
422};
423
424pub const cpu_v7 = Cpu{
425 .name = "v7",
426 .llvm_name = "v7",
427 .dependencies = &[_]*const Feature {
428 &feature_noFsmuld,
429 &feature_softMulDiv,
430 },
431};
432
433pub const cpu_v8 = Cpu{
434 .name = "v8",
435 .llvm_name = "v8",
436 .dependencies = &[_]*const Feature {
437 },
438};
439
440pub const cpu_v9 = Cpu{
441 .name = "v9",
442 .llvm_name = "v9",
443 .dependencies = &[_]*const Feature {
444 &feature_v9,
445 },
446};
447
448pub const cpus = &[_]*const Cpu {
449 &cpu_at697e,
450 &cpu_at697f,
451 &cpu_f934,
452 &cpu_generic,
453 &cpu_gr712rc,
454 &cpu_gr740,
455 &cpu_hypersparc,
456 &cpu_leon2,
457 &cpu_leon3,
458 &cpu_leon4,
459 &cpu_ma2080,
460 &cpu_ma2085,
461 &cpu_ma2100,
462 &cpu_ma2150,
463 &cpu_ma2155,
464 &cpu_ma2450,
465 &cpu_ma2455,
466 &cpu_ma2480,
467 &cpu_ma2485,
468 &cpu_ma2x5x,
469 &cpu_ma2x8x,
470 &cpu_myriad2,
471 &cpu_myriad21,
472 &cpu_myriad22,
473 &cpu_myriad23,
474 &cpu_niagara,
475 &cpu_niagara2,
476 &cpu_niagara3,
477 &cpu_niagara4,
478 &cpu_sparclet,
479 &cpu_sparclite,
480 &cpu_sparclite86x,
481 &cpu_supersparc,
482 &cpu_tsc701,
483 &cpu_ultrasparc,
484 &cpu_ultrasparc3,
485 &cpu_ut699,
486 &cpu_v7,
487 &cpu_v8,
488 &cpu_v9,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 deprecated_v8,
6 detectroundchange,
7 fixallfdivsqrt,
8 hard_quad_float,
9 hasleoncasa,
10 hasumacsmac,
11 insertnopload,
12 leon,
13 leoncyclecounter,
14 leonpwrpsr,
15 no_fmuls,
16 no_fsmuld,
17 popc,
18 soft_float,
19 soft_mul_div,
20 v9,
21 vis,
22 vis2,
23 vis3,
24};
25
26pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
27
28pub const all_features = blk: {
29 const len = @typeInfo(Feature).Enum.fields.len;
30 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
31 var result: [len]Cpu.Feature = undefined;
32 result[@enumToInt(Feature.deprecated_v8)] = .{
33 .index = @enumToInt(Feature.deprecated_v8),
34 .name = @tagName(Feature.deprecated_v8),
35 .llvm_name = "deprecated-v8",
36 .description = "Enable deprecated V8 instructions in V9 mode",
37 .dependencies = 0,
38 };
39 result[@enumToInt(Feature.detectroundchange)] = .{
40 .index = @enumToInt(Feature.detectroundchange),
41 .name = @tagName(Feature.detectroundchange),
42 .llvm_name = "detectroundchange",
43 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",
44 .dependencies = 0,
45 };
46 result[@enumToInt(Feature.fixallfdivsqrt)] = .{
47 .index = @enumToInt(Feature.fixallfdivsqrt),
48 .name = @tagName(Feature.fixallfdivsqrt),
49 .llvm_name = "fixallfdivsqrt",
50 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
51 .dependencies = 0,
52 };
53 result[@enumToInt(Feature.hard_quad_float)] = .{
54 .index = @enumToInt(Feature.hard_quad_float),
55 .name = @tagName(Feature.hard_quad_float),
56 .llvm_name = "hard-quad-float",
57 .description = "Enable quad-word floating point instructions",
58 .dependencies = 0,
59 };
60 result[@enumToInt(Feature.hasleoncasa)] = .{
61 .index = @enumToInt(Feature.hasleoncasa),
62 .name = @tagName(Feature.hasleoncasa),
63 .llvm_name = "hasleoncasa",
64 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
65 .dependencies = 0,
66 };
67 result[@enumToInt(Feature.hasumacsmac)] = .{
68 .index = @enumToInt(Feature.hasumacsmac),
69 .name = @tagName(Feature.hasumacsmac),
70 .llvm_name = "hasumacsmac",
71 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
72 .dependencies = 0,
73 };
74 result[@enumToInt(Feature.insertnopload)] = .{
75 .index = @enumToInt(Feature.insertnopload),
76 .name = @tagName(Feature.insertnopload),
77 .llvm_name = "insertnopload",
78 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",
79 .dependencies = 0,
80 };
81 result[@enumToInt(Feature.leon)] = .{
82 .index = @enumToInt(Feature.leon),
83 .name = @tagName(Feature.leon),
84 .llvm_name = "leon",
85 .description = "Enable LEON extensions",
86 .dependencies = 0,
87 };
88 result[@enumToInt(Feature.leoncyclecounter)] = .{
89 .index = @enumToInt(Feature.leoncyclecounter),
90 .name = @tagName(Feature.leoncyclecounter),
91 .llvm_name = "leoncyclecounter",
92 .description = "Use the Leon cycle counter register",
93 .dependencies = 0,
94 };
95 result[@enumToInt(Feature.leonpwrpsr)] = .{
96 .index = @enumToInt(Feature.leonpwrpsr),
97 .name = @tagName(Feature.leonpwrpsr),
98 .llvm_name = "leonpwrpsr",
99 .description = "Enable the PWRPSR instruction",
100 .dependencies = 0,
101 };
102 result[@enumToInt(Feature.no_fmuls)] = .{
103 .index = @enumToInt(Feature.no_fmuls),
104 .name = @tagName(Feature.no_fmuls),
105 .llvm_name = "no-fmuls",
106 .description = "Disable the fmuls instruction.",
107 .dependencies = 0,
108 };
109 result[@enumToInt(Feature.no_fsmuld)] = .{
110 .index = @enumToInt(Feature.no_fsmuld),
111 .name = @tagName(Feature.no_fsmuld),
112 .llvm_name = "no-fsmuld",
113 .description = "Disable the fsmuld instruction.",
114 .dependencies = 0,
115 };
116 result[@enumToInt(Feature.popc)] = .{
117 .index = @enumToInt(Feature.popc),
118 .name = @tagName(Feature.popc),
119 .llvm_name = "popc",
120 .description = "Use the popc (population count) instruction",
121 .dependencies = 0,
122 };
123 result[@enumToInt(Feature.soft_float)] = .{
124 .index = @enumToInt(Feature.soft_float),
125 .name = @tagName(Feature.soft_float),
126 .llvm_name = "soft-float",
127 .description = "Use software emulation for floating point",
128 .dependencies = 0,
129 };
130 result[@enumToInt(Feature.soft_mul_div)] = .{
131 .index = @enumToInt(Feature.soft_mul_div),
132 .name = @tagName(Feature.soft_mul_div),
133 .llvm_name = "soft-mul-div",
134 .description = "Use software emulation for integer multiply and divide",
135 .dependencies = 0,
136 };
137 result[@enumToInt(Feature.v9)] = .{
138 .index = @enumToInt(Feature.v9),
139 .name = @tagName(Feature.v9),
140 .llvm_name = "v9",
141 .description = "Enable SPARC-V9 instructions",
142 .dependencies = 0,
143 };
144 result[@enumToInt(Feature.vis)] = .{
145 .index = @enumToInt(Feature.vis),
146 .name = @tagName(Feature.vis),
147 .llvm_name = "vis",
148 .description = "Enable UltraSPARC Visual Instruction Set extensions",
149 .dependencies = 0,
150 };
151 result[@enumToInt(Feature.vis2)] = .{
152 .index = @enumToInt(Feature.vis2),
153 .name = @tagName(Feature.vis2),
154 .llvm_name = "vis2",
155 .description = "Enable Visual Instruction Set extensions II",
156 .dependencies = 0,
157 };
158 result[@enumToInt(Feature.vis3)] = .{
159 .index = @enumToInt(Feature.vis3),
160 .name = @tagName(Feature.vis3),
161 .llvm_name = "vis3",
162 .description = "Enable Visual Instruction Set extensions III",
163 .dependencies = 0,
164 };
165 break :blk result;
166};
167
168pub const cpu = struct {
169 pub const at697e = Cpu{
170 .name = "at697e",
171 .llvm_name = "at697e",
172 .features = featureSet(&[_]Feature{
173 .insertnopload,
174 .leon,
175 }),
176 };
177 pub const at697f = Cpu{
178 .name = "at697f",
179 .llvm_name = "at697f",
180 .features = featureSet(&[_]Feature{
181 .insertnopload,
182 .leon,
183 }),
184 };
185 pub const f934 = Cpu{
186 .name = "f934",
187 .llvm_name = "f934",
188 .features = 0,
189 };
190 pub const generic = Cpu{
191 .name = "generic",
192 .llvm_name = "generic",
193 .features = 0,
194 };
195 pub const gr712rc = Cpu{
196 .name = "gr712rc",
197 .llvm_name = "gr712rc",
198 .features = featureSet(&[_]Feature{
199 .hasleoncasa,
200 .leon,
201 }),
202 };
203 pub const gr740 = Cpu{
204 .name = "gr740",
205 .llvm_name = "gr740",
206 .features = featureSet(&[_]Feature{
207 .hasleoncasa,
208 .hasumacsmac,
209 .leon,
210 .leoncyclecounter,
211 .leonpwrpsr,
212 }),
213 };
214 pub const hypersparc = Cpu{
215 .name = "hypersparc",
216 .llvm_name = "hypersparc",
217 .features = 0,
218 };
219 pub const leon2 = Cpu{
220 .name = "leon2",
221 .llvm_name = "leon2",
222 .features = featureSet(&[_]Feature{
223 .leon,
224 }),
225 };
226 pub const leon3 = Cpu{
227 .name = "leon3",
228 .llvm_name = "leon3",
229 .features = featureSet(&[_]Feature{
230 .hasumacsmac,
231 .leon,
232 }),
233 };
234 pub const leon4 = Cpu{
235 .name = "leon4",
236 .llvm_name = "leon4",
237 .features = featureSet(&[_]Feature{
238 .hasleoncasa,
239 .hasumacsmac,
240 .leon,
241 }),
242 };
243 pub const ma2080 = Cpu{
244 .name = "ma2080",
245 .llvm_name = "ma2080",
246 .features = featureSet(&[_]Feature{
247 .hasleoncasa,
248 .leon,
249 }),
250 };
251 pub const ma2085 = Cpu{
252 .name = "ma2085",
253 .llvm_name = "ma2085",
254 .features = featureSet(&[_]Feature{
255 .hasleoncasa,
256 .leon,
257 }),
258 };
259 pub const ma2100 = Cpu{
260 .name = "ma2100",
261 .llvm_name = "ma2100",
262 .features = featureSet(&[_]Feature{
263 .hasleoncasa,
264 .leon,
265 }),
266 };
267 pub const ma2150 = Cpu{
268 .name = "ma2150",
269 .llvm_name = "ma2150",
270 .features = featureSet(&[_]Feature{
271 .hasleoncasa,
272 .leon,
273 }),
274 };
275 pub const ma2155 = Cpu{
276 .name = "ma2155",
277 .llvm_name = "ma2155",
278 .features = featureSet(&[_]Feature{
279 .hasleoncasa,
280 .leon,
281 }),
282 };
283 pub const ma2450 = Cpu{
284 .name = "ma2450",
285 .llvm_name = "ma2450",
286 .features = featureSet(&[_]Feature{
287 .hasleoncasa,
288 .leon,
289 }),
290 };
291 pub const ma2455 = Cpu{
292 .name = "ma2455",
293 .llvm_name = "ma2455",
294 .features = featureSet(&[_]Feature{
295 .hasleoncasa,
296 .leon,
297 }),
298 };
299 pub const ma2480 = Cpu{
300 .name = "ma2480",
301 .llvm_name = "ma2480",
302 .features = featureSet(&[_]Feature{
303 .hasleoncasa,
304 .leon,
305 }),
306 };
307 pub const ma2485 = Cpu{
308 .name = "ma2485",
309 .llvm_name = "ma2485",
310 .features = featureSet(&[_]Feature{
311 .hasleoncasa,
312 .leon,
313 }),
314 };
315 pub const ma2x5x = Cpu{
316 .name = "ma2x5x",
317 .llvm_name = "ma2x5x",
318 .features = featureSet(&[_]Feature{
319 .hasleoncasa,
320 .leon,
321 }),
322 };
323 pub const ma2x8x = Cpu{
324 .name = "ma2x8x",
325 .llvm_name = "ma2x8x",
326 .features = featureSet(&[_]Feature{
327 .hasleoncasa,
328 .leon,
329 }),
330 };
331 pub const myriad2 = Cpu{
332 .name = "myriad2",
333 .llvm_name = "myriad2",
334 .features = featureSet(&[_]Feature{
335 .hasleoncasa,
336 .leon,
337 }),
338 };
339 pub const myriad2_1 = Cpu{
340 .name = "myriad2_1",
341 .llvm_name = "myriad2.1",
342 .features = featureSet(&[_]Feature{
343 .hasleoncasa,
344 .leon,
345 }),
346 };
347 pub const myriad2_2 = Cpu{
348 .name = "myriad2_2",
349 .llvm_name = "myriad2.2",
350 .features = featureSet(&[_]Feature{
351 .hasleoncasa,
352 .leon,
353 }),
354 };
355 pub const myriad2_3 = Cpu{
356 .name = "myriad2_3",
357 .llvm_name = "myriad2.3",
358 .features = featureSet(&[_]Feature{
359 .hasleoncasa,
360 .leon,
361 }),
362 };
363 pub const niagara = Cpu{
364 .name = "niagara",
365 .llvm_name = "niagara",
366 .features = featureSet(&[_]Feature{
367 .deprecated_v8,
368 .v9,
369 .vis,
370 .vis2,
371 }),
372 };
373 pub const niagara2 = Cpu{
374 .name = "niagara2",
375 .llvm_name = "niagara2",
376 .features = featureSet(&[_]Feature{
377 .deprecated_v8,
378 .popc,
379 .v9,
380 .vis,
381 .vis2,
382 }),
383 };
384 pub const niagara3 = Cpu{
385 .name = "niagara3",
386 .llvm_name = "niagara3",
387 .features = featureSet(&[_]Feature{
388 .deprecated_v8,
389 .popc,
390 .v9,
391 .vis,
392 .vis2,
393 }),
394 };
395 pub const niagara4 = Cpu{
396 .name = "niagara4",
397 .llvm_name = "niagara4",
398 .features = featureSet(&[_]Feature{
399 .deprecated_v8,
400 .popc,
401 .v9,
402 .vis,
403 .vis2,
404 .vis3,
405 }),
406 };
407 pub const sparclet = Cpu{
408 .name = "sparclet",
409 .llvm_name = "sparclet",
410 .features = 0,
411 };
412 pub const sparclite = Cpu{
413 .name = "sparclite",
414 .llvm_name = "sparclite",
415 .features = 0,
416 };
417 pub const sparclite86x = Cpu{
418 .name = "sparclite86x",
419 .llvm_name = "sparclite86x",
420 .features = 0,
421 };
422 pub const supersparc = Cpu{
423 .name = "supersparc",
424 .llvm_name = "supersparc",
425 .features = 0,
426 };
427 pub const tsc701 = Cpu{
428 .name = "tsc701",
429 .llvm_name = "tsc701",
430 .features = 0,
431 };
432 pub const ultrasparc = Cpu{
433 .name = "ultrasparc",
434 .llvm_name = "ultrasparc",
435 .features = featureSet(&[_]Feature{
436 .deprecated_v8,
437 .v9,
438 .vis,
439 }),
440 };
441 pub const ultrasparc3 = Cpu{
442 .name = "ultrasparc3",
443 .llvm_name = "ultrasparc3",
444 .features = featureSet(&[_]Feature{
445 .deprecated_v8,
446 .v9,
447 .vis,
448 .vis2,
449 }),
450 };
451 pub const ut699 = Cpu{
452 .name = "ut699",
453 .llvm_name = "ut699",
454 .features = featureSet(&[_]Feature{
455 .fixallfdivsqrt,
456 .insertnopload,
457 .leon,
458 .no_fmuls,
459 .no_fsmuld,
460 }),
461 };
462 pub const v7 = Cpu{
463 .name = "v7",
464 .llvm_name = "v7",
465 .features = featureSet(&[_]Feature{
466 .no_fsmuld,
467 .soft_mul_div,
468 }),
469 };
470 pub const v8 = Cpu{
471 .name = "v8",
472 .llvm_name = "v8",
473 .features = 0,
474 };
475 pub const v9 = Cpu{
476 .name = "v9",
477 .llvm_name = "v9",
478 .features = featureSet(&[_]Feature{
479 .v9,
480 }),
481 };
482};
483
484/// All sparc CPUs, sorted alphabetically by name.
485/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
486/// compiler has inefficient memory and CPU usage, affecting build times.
487pub const all_cpus = &[_]*const Cpu{
488 &cpu.at697e,
489 &cpu.at697f,
490 &cpu.f934,
491 &cpu.generic,
492 &cpu.gr712rc,
493 &cpu.gr740,
494 &cpu.hypersparc,
495 &cpu.leon2,
496 &cpu.leon3,
497 &cpu.leon4,
498 &cpu.ma2080,
499 &cpu.ma2085,
500 &cpu.ma2100,
501 &cpu.ma2150,
502 &cpu.ma2155,
503 &cpu.ma2450,
504 &cpu.ma2455,
505 &cpu.ma2480,
506 &cpu.ma2485,
507 &cpu.ma2x5x,
508 &cpu.ma2x8x,
509 &cpu.myriad2,
510 &cpu.myriad2_1,
511 &cpu.myriad2_2,
512 &cpu.myriad2_3,
513 &cpu.niagara,
514 &cpu.niagara2,
515 &cpu.niagara3,
516 &cpu.niagara4,
517 &cpu.sparclet,
518 &cpu.sparclite,
519 &cpu.sparclite86x,
520 &cpu.supersparc,
521 &cpu.tsc701,
522 &cpu.ultrasparc,
523 &cpu.ultrasparc3,
524 &cpu.ut699,
525 &cpu.v7,
526 &cpu.v8,
527 &cpu.v9,
489528};
lib/std/target/systemz.zig+574-609
......@@ -1,610 +1,575 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
3
4pub const feature_dfpPackedConversion = Feature{
5 .name = "dfpPackedConversion",
6 .llvm_name = "dfp-packed-conversion",
7 .description = "Assume that the DFP packed-conversion facility is installed",
8 .dependencies = &[_]*const Feature {
9 },
10};
11
12pub const feature_dfpZonedConversion = Feature{
13 .name = "dfpZonedConversion",
14 .llvm_name = "dfp-zoned-conversion",
15 .description = "Assume that the DFP zoned-conversion facility is installed",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_deflateConversion = Feature{
21 .name = "deflateConversion",
22 .llvm_name = "deflate-conversion",
23 .description = "Assume that the deflate-conversion facility is installed",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_distinctOps = Feature{
29 .name = "distinctOps",
30 .llvm_name = "distinct-ops",
31 .description = "Assume that the distinct-operands facility is installed",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_enhancedDat2 = Feature{
37 .name = "enhancedDat2",
38 .llvm_name = "enhanced-dat-2",
39 .description = "Assume that the enhanced-DAT facility 2 is installed",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_enhancedSort = Feature{
45 .name = "enhancedSort",
46 .llvm_name = "enhanced-sort",
47 .description = "Assume that the enhanced-sort facility is installed",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_executionHint = Feature{
53 .name = "executionHint",
54 .llvm_name = "execution-hint",
55 .description = "Assume that the execution-hint facility is installed",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_fpExtension = Feature{
61 .name = "fpExtension",
62 .llvm_name = "fp-extension",
63 .description = "Assume that the floating-point extension facility is installed",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_fastSerialization = Feature{
69 .name = "fastSerialization",
70 .llvm_name = "fast-serialization",
71 .description = "Assume that the fast-serialization facility is installed",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_guardedStorage = Feature{
77 .name = "guardedStorage",
78 .llvm_name = "guarded-storage",
79 .description = "Assume that the guarded-storage facility is installed",
80 .dependencies = &[_]*const Feature {
81 },
82};
83
84pub const feature_highWord = Feature{
85 .name = "highWord",
86 .llvm_name = "high-word",
87 .description = "Assume that the high-word facility is installed",
88 .dependencies = &[_]*const Feature {
89 },
90};
91
92pub const feature_insertReferenceBitsMultiple = Feature{
93 .name = "insertReferenceBitsMultiple",
94 .llvm_name = "insert-reference-bits-multiple",
95 .description = "Assume that the insert-reference-bits-multiple facility is installed",
96 .dependencies = &[_]*const Feature {
97 },
98};
99
100pub const feature_interlockedAccess1 = Feature{
101 .name = "interlockedAccess1",
102 .llvm_name = "interlocked-access1",
103 .description = "Assume that interlocked-access facility 1 is installed",
104 .dependencies = &[_]*const Feature {
105 },
106};
107
108pub const feature_loadAndTrap = Feature{
109 .name = "loadAndTrap",
110 .llvm_name = "load-and-trap",
111 .description = "Assume that the load-and-trap facility is installed",
112 .dependencies = &[_]*const Feature {
113 },
114};
115
116pub const feature_loadAndZeroRightmostByte = Feature{
117 .name = "loadAndZeroRightmostByte",
118 .llvm_name = "load-and-zero-rightmost-byte",
119 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
120 .dependencies = &[_]*const Feature {
121 },
122};
123
124pub const feature_loadStoreOnCond = Feature{
125 .name = "loadStoreOnCond",
126 .llvm_name = "load-store-on-cond",
127 .description = "Assume that the load/store-on-condition facility is installed",
128 .dependencies = &[_]*const Feature {
129 },
130};
131
132pub const feature_loadStoreOnCond2 = Feature{
133 .name = "loadStoreOnCond2",
134 .llvm_name = "load-store-on-cond-2",
135 .description = "Assume that the load/store-on-condition facility 2 is installed",
136 .dependencies = &[_]*const Feature {
137 },
138};
139
140pub const feature_messageSecurityAssistExtension3 = Feature{
141 .name = "messageSecurityAssistExtension3",
142 .llvm_name = "message-security-assist-extension3",
143 .description = "Assume that the message-security-assist extension facility 3 is installed",
144 .dependencies = &[_]*const Feature {
145 },
146};
147
148pub const feature_messageSecurityAssistExtension4 = Feature{
149 .name = "messageSecurityAssistExtension4",
150 .llvm_name = "message-security-assist-extension4",
151 .description = "Assume that the message-security-assist extension facility 4 is installed",
152 .dependencies = &[_]*const Feature {
153 },
154};
155
156pub const feature_messageSecurityAssistExtension5 = Feature{
157 .name = "messageSecurityAssistExtension5",
158 .llvm_name = "message-security-assist-extension5",
159 .description = "Assume that the message-security-assist extension facility 5 is installed",
160 .dependencies = &[_]*const Feature {
161 },
162};
163
164pub const feature_messageSecurityAssistExtension7 = Feature{
165 .name = "messageSecurityAssistExtension7",
166 .llvm_name = "message-security-assist-extension7",
167 .description = "Assume that the message-security-assist extension facility 7 is installed",
168 .dependencies = &[_]*const Feature {
169 },
170};
171
172pub const feature_messageSecurityAssistExtension8 = Feature{
173 .name = "messageSecurityAssistExtension8",
174 .llvm_name = "message-security-assist-extension8",
175 .description = "Assume that the message-security-assist extension facility 8 is installed",
176 .dependencies = &[_]*const Feature {
177 },
178};
179
180pub const feature_messageSecurityAssistExtension9 = Feature{
181 .name = "messageSecurityAssistExtension9",
182 .llvm_name = "message-security-assist-extension9",
183 .description = "Assume that the message-security-assist extension facility 9 is installed",
184 .dependencies = &[_]*const Feature {
185 },
186};
187
188pub const feature_miscellaneousExtensions = Feature{
189 .name = "miscellaneousExtensions",
190 .llvm_name = "miscellaneous-extensions",
191 .description = "Assume that the miscellaneous-extensions facility is installed",
192 .dependencies = &[_]*const Feature {
193 },
194};
195
196pub const feature_miscellaneousExtensions2 = Feature{
197 .name = "miscellaneousExtensions2",
198 .llvm_name = "miscellaneous-extensions-2",
199 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
200 .dependencies = &[_]*const Feature {
201 },
202};
203
204pub const feature_miscellaneousExtensions3 = Feature{
205 .name = "miscellaneousExtensions3",
206 .llvm_name = "miscellaneous-extensions-3",
207 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
208 .dependencies = &[_]*const Feature {
209 },
210};
211
212pub const feature_populationCount = Feature{
213 .name = "populationCount",
214 .llvm_name = "population-count",
215 .description = "Assume that the population-count facility is installed",
216 .dependencies = &[_]*const Feature {
217 },
218};
219
220pub const feature_processorAssist = Feature{
221 .name = "processorAssist",
222 .llvm_name = "processor-assist",
223 .description = "Assume that the processor-assist facility is installed",
224 .dependencies = &[_]*const Feature {
225 },
226};
227
228pub const feature_resetReferenceBitsMultiple = Feature{
229 .name = "resetReferenceBitsMultiple",
230 .llvm_name = "reset-reference-bits-multiple",
231 .description = "Assume that the reset-reference-bits-multiple facility is installed",
232 .dependencies = &[_]*const Feature {
233 },
234};
235
236pub const feature_transactionalExecution = Feature{
237 .name = "transactionalExecution",
238 .llvm_name = "transactional-execution",
239 .description = "Assume that the transactional-execution facility is installed",
240 .dependencies = &[_]*const Feature {
241 },
242};
243
244pub const feature_vector = Feature{
245 .name = "vector",
246 .llvm_name = "vector",
247 .description = "Assume that the vectory facility is installed",
248 .dependencies = &[_]*const Feature {
249 },
250};
251
252pub const feature_vectorEnhancements1 = Feature{
253 .name = "vectorEnhancements1",
254 .llvm_name = "vector-enhancements-1",
255 .description = "Assume that the vector enhancements facility 1 is installed",
256 .dependencies = &[_]*const Feature {
257 },
258};
259
260pub const feature_vectorEnhancements2 = Feature{
261 .name = "vectorEnhancements2",
262 .llvm_name = "vector-enhancements-2",
263 .description = "Assume that the vector enhancements facility 2 is installed",
264 .dependencies = &[_]*const Feature {
265 },
266};
267
268pub const feature_vectorPackedDecimal = Feature{
269 .name = "vectorPackedDecimal",
270 .llvm_name = "vector-packed-decimal",
271 .description = "Assume that the vector packed decimal facility is installed",
272 .dependencies = &[_]*const Feature {
273 },
274};
275
276pub const feature_vectorPackedDecimalEnhancement = Feature{
277 .name = "vectorPackedDecimalEnhancement",
278 .llvm_name = "vector-packed-decimal-enhancement",
279 .description = "Assume that the vector packed decimal enhancement facility is installed",
280 .dependencies = &[_]*const Feature {
281 },
282};
283
284pub const features = &[_]*const Feature {
285 &feature_dfpPackedConversion,
286 &feature_dfpZonedConversion,
287 &feature_deflateConversion,
288 &feature_distinctOps,
289 &feature_enhancedDat2,
290 &feature_enhancedSort,
291 &feature_executionHint,
292 &feature_fpExtension,
293 &feature_fastSerialization,
294 &feature_guardedStorage,
295 &feature_highWord,
296 &feature_insertReferenceBitsMultiple,
297 &feature_interlockedAccess1,
298 &feature_loadAndTrap,
299 &feature_loadAndZeroRightmostByte,
300 &feature_loadStoreOnCond,
301 &feature_loadStoreOnCond2,
302 &feature_messageSecurityAssistExtension3,
303 &feature_messageSecurityAssistExtension4,
304 &feature_messageSecurityAssistExtension5,
305 &feature_messageSecurityAssistExtension7,
306 &feature_messageSecurityAssistExtension8,
307 &feature_messageSecurityAssistExtension9,
308 &feature_miscellaneousExtensions,
309 &feature_miscellaneousExtensions2,
310 &feature_miscellaneousExtensions3,
311 &feature_populationCount,
312 &feature_processorAssist,
313 &feature_resetReferenceBitsMultiple,
314 &feature_transactionalExecution,
315 &feature_vector,
316 &feature_vectorEnhancements1,
317 &feature_vectorEnhancements2,
318 &feature_vectorPackedDecimal,
319 &feature_vectorPackedDecimalEnhancement,
320};
321
322pub const cpu_arch10 = Cpu{
323 .name = "arch10",
324 .llvm_name = "arch10",
325 .dependencies = &[_]*const Feature {
326 &feature_dfpZonedConversion,
327 &feature_distinctOps,
328 &feature_enhancedDat2,
329 &feature_executionHint,
330 &feature_fpExtension,
331 &feature_fastSerialization,
332 &feature_highWord,
333 &feature_interlockedAccess1,
334 &feature_loadAndTrap,
335 &feature_loadStoreOnCond,
336 &feature_messageSecurityAssistExtension3,
337 &feature_messageSecurityAssistExtension4,
338 &feature_miscellaneousExtensions,
339 &feature_populationCount,
340 &feature_processorAssist,
341 &feature_resetReferenceBitsMultiple,
342 &feature_transactionalExecution,
343 },
344};
345
346pub const cpu_arch11 = Cpu{
347 .name = "arch11",
348 .llvm_name = "arch11",
349 .dependencies = &[_]*const Feature {
350 &feature_dfpPackedConversion,
351 &feature_dfpZonedConversion,
352 &feature_distinctOps,
353 &feature_enhancedDat2,
354 &feature_executionHint,
355 &feature_fpExtension,
356 &feature_fastSerialization,
357 &feature_highWord,
358 &feature_interlockedAccess1,
359 &feature_loadAndTrap,
360 &feature_loadAndZeroRightmostByte,
361 &feature_loadStoreOnCond,
362 &feature_loadStoreOnCond2,
363 &feature_messageSecurityAssistExtension3,
364 &feature_messageSecurityAssistExtension4,
365 &feature_messageSecurityAssistExtension5,
366 &feature_miscellaneousExtensions,
367 &feature_populationCount,
368 &feature_processorAssist,
369 &feature_resetReferenceBitsMultiple,
370 &feature_transactionalExecution,
371 &feature_vector,
372 },
373};
374
375pub const cpu_arch12 = Cpu{
376 .name = "arch12",
377 .llvm_name = "arch12",
378 .dependencies = &[_]*const Feature {
379 &feature_dfpPackedConversion,
380 &feature_dfpZonedConversion,
381 &feature_distinctOps,
382 &feature_enhancedDat2,
383 &feature_executionHint,
384 &feature_fpExtension,
385 &feature_fastSerialization,
386 &feature_guardedStorage,
387 &feature_highWord,
388 &feature_insertReferenceBitsMultiple,
389 &feature_interlockedAccess1,
390 &feature_loadAndTrap,
391 &feature_loadAndZeroRightmostByte,
392 &feature_loadStoreOnCond,
393 &feature_loadStoreOnCond2,
394 &feature_messageSecurityAssistExtension3,
395 &feature_messageSecurityAssistExtension4,
396 &feature_messageSecurityAssistExtension5,
397 &feature_messageSecurityAssistExtension7,
398 &feature_messageSecurityAssistExtension8,
399 &feature_miscellaneousExtensions,
400 &feature_miscellaneousExtensions2,
401 &feature_populationCount,
402 &feature_processorAssist,
403 &feature_resetReferenceBitsMultiple,
404 &feature_transactionalExecution,
405 &feature_vector,
406 &feature_vectorEnhancements1,
407 &feature_vectorPackedDecimal,
408 },
409};
410
411pub const cpu_arch13 = Cpu{
412 .name = "arch13",
413 .llvm_name = "arch13",
414 .dependencies = &[_]*const Feature {
415 &feature_dfpPackedConversion,
416 &feature_dfpZonedConversion,
417 &feature_deflateConversion,
418 &feature_distinctOps,
419 &feature_enhancedDat2,
420 &feature_enhancedSort,
421 &feature_executionHint,
422 &feature_fpExtension,
423 &feature_fastSerialization,
424 &feature_guardedStorage,
425 &feature_highWord,
426 &feature_insertReferenceBitsMultiple,
427 &feature_interlockedAccess1,
428 &feature_loadAndTrap,
429 &feature_loadAndZeroRightmostByte,
430 &feature_loadStoreOnCond,
431 &feature_loadStoreOnCond2,
432 &feature_messageSecurityAssistExtension3,
433 &feature_messageSecurityAssistExtension4,
434 &feature_messageSecurityAssistExtension5,
435 &feature_messageSecurityAssistExtension7,
436 &feature_messageSecurityAssistExtension8,
437 &feature_messageSecurityAssistExtension9,
438 &feature_miscellaneousExtensions,
439 &feature_miscellaneousExtensions2,
440 &feature_miscellaneousExtensions3,
441 &feature_populationCount,
442 &feature_processorAssist,
443 &feature_resetReferenceBitsMultiple,
444 &feature_transactionalExecution,
445 &feature_vector,
446 &feature_vectorEnhancements1,
447 &feature_vectorEnhancements2,
448 &feature_vectorPackedDecimal,
449 &feature_vectorPackedDecimalEnhancement,
450 },
451};
452
453pub const cpu_arch8 = Cpu{
454 .name = "arch8",
455 .llvm_name = "arch8",
456 .dependencies = &[_]*const Feature {
457 },
458};
459
460pub const cpu_arch9 = Cpu{
461 .name = "arch9",
462 .llvm_name = "arch9",
463 .dependencies = &[_]*const Feature {
464 &feature_distinctOps,
465 &feature_fpExtension,
466 &feature_fastSerialization,
467 &feature_highWord,
468 &feature_interlockedAccess1,
469 &feature_loadStoreOnCond,
470 &feature_messageSecurityAssistExtension3,
471 &feature_messageSecurityAssistExtension4,
472 &feature_populationCount,
473 &feature_resetReferenceBitsMultiple,
474 },
475};
476
477pub const cpu_generic = Cpu{
478 .name = "generic",
479 .llvm_name = "generic",
480 .dependencies = &[_]*const Feature {
481 },
482};
483
484pub const cpu_z10 = Cpu{
485 .name = "z10",
486 .llvm_name = "z10",
487 .dependencies = &[_]*const Feature {
488 },
489};
490
491pub const cpu_z13 = Cpu{
492 .name = "z13",
493 .llvm_name = "z13",
494 .dependencies = &[_]*const Feature {
495 &feature_dfpPackedConversion,
496 &feature_dfpZonedConversion,
497 &feature_distinctOps,
498 &feature_enhancedDat2,
499 &feature_executionHint,
500 &feature_fpExtension,
501 &feature_fastSerialization,
502 &feature_highWord,
503 &feature_interlockedAccess1,
504 &feature_loadAndTrap,
505 &feature_loadAndZeroRightmostByte,
506 &feature_loadStoreOnCond,
507 &feature_loadStoreOnCond2,
508 &feature_messageSecurityAssistExtension3,
509 &feature_messageSecurityAssistExtension4,
510 &feature_messageSecurityAssistExtension5,
511 &feature_miscellaneousExtensions,
512 &feature_populationCount,
513 &feature_processorAssist,
514 &feature_resetReferenceBitsMultiple,
515 &feature_transactionalExecution,
516 &feature_vector,
517 },
518};
519
520pub const cpu_z14 = Cpu{
521 .name = "z14",
522 .llvm_name = "z14",
523 .dependencies = &[_]*const Feature {
524 &feature_dfpPackedConversion,
525 &feature_dfpZonedConversion,
526 &feature_distinctOps,
527 &feature_enhancedDat2,
528 &feature_executionHint,
529 &feature_fpExtension,
530 &feature_fastSerialization,
531 &feature_guardedStorage,
532 &feature_highWord,
533 &feature_insertReferenceBitsMultiple,
534 &feature_interlockedAccess1,
535 &feature_loadAndTrap,
536 &feature_loadAndZeroRightmostByte,
537 &feature_loadStoreOnCond,
538 &feature_loadStoreOnCond2,
539 &feature_messageSecurityAssistExtension3,
540 &feature_messageSecurityAssistExtension4,
541 &feature_messageSecurityAssistExtension5,
542 &feature_messageSecurityAssistExtension7,
543 &feature_messageSecurityAssistExtension8,
544 &feature_miscellaneousExtensions,
545 &feature_miscellaneousExtensions2,
546 &feature_populationCount,
547 &feature_processorAssist,
548 &feature_resetReferenceBitsMultiple,
549 &feature_transactionalExecution,
550 &feature_vector,
551 &feature_vectorEnhancements1,
552 &feature_vectorPackedDecimal,
553 },
554};
555
556pub const cpu_z196 = Cpu{
557 .name = "z196",
558 .llvm_name = "z196",
559 .dependencies = &[_]*const Feature {
560 &feature_distinctOps,
561 &feature_fpExtension,
562 &feature_fastSerialization,
563 &feature_highWord,
564 &feature_interlockedAccess1,
565 &feature_loadStoreOnCond,
566 &feature_messageSecurityAssistExtension3,
567 &feature_messageSecurityAssistExtension4,
568 &feature_populationCount,
569 &feature_resetReferenceBitsMultiple,
570 },
571};
572
573pub const cpu_zEC12 = Cpu{
574 .name = "zEC12",
575 .llvm_name = "zEC12",
576 .dependencies = &[_]*const Feature {
577 &feature_dfpZonedConversion,
578 &feature_distinctOps,
579 &feature_enhancedDat2,
580 &feature_executionHint,
581 &feature_fpExtension,
582 &feature_fastSerialization,
583 &feature_highWord,
584 &feature_interlockedAccess1,
585 &feature_loadAndTrap,
586 &feature_loadStoreOnCond,
587 &feature_messageSecurityAssistExtension3,
588 &feature_messageSecurityAssistExtension4,
589 &feature_miscellaneousExtensions,
590 &feature_populationCount,
591 &feature_processorAssist,
592 &feature_resetReferenceBitsMultiple,
593 &feature_transactionalExecution,
594 },
595};
596
597pub const cpus = &[_]*const Cpu {
598 &cpu_arch10,
599 &cpu_arch11,
600 &cpu_arch12,
601 &cpu_arch13,
602 &cpu_arch8,
603 &cpu_arch9,
604 &cpu_generic,
605 &cpu_z10,
606 &cpu_z13,
607 &cpu_z14,
608 &cpu_z196,
609 &cpu_zEC12,
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
3
4pub const Feature = enum {
5 deflate_conversion,
6 dfp_packed_conversion,
7 dfp_zoned_conversion,
8 distinct_ops,
9 enhanced_dat_2,
10 enhanced_sort,
11 execution_hint,
12 fast_serialization,
13 fp_extension,
14 guarded_storage,
15 high_word,
16 insert_reference_bits_multiple,
17 interlocked_access1,
18 load_and_trap,
19 load_and_zero_rightmost_byte,
20 load_store_on_cond,
21 load_store_on_cond_2,
22 message_security_assist_extension3,
23 message_security_assist_extension4,
24 message_security_assist_extension5,
25 message_security_assist_extension7,
26 message_security_assist_extension8,
27 message_security_assist_extension9,
28 miscellaneous_extensions,
29 miscellaneous_extensions_2,
30 miscellaneous_extensions_3,
31 population_count,
32 processor_assist,
33 reset_reference_bits_multiple,
34 transactional_execution,
35 vector,
36 vector_enhancements_1,
37 vector_enhancements_2,
38 vector_packed_decimal,
39 vector_packed_decimal_enhancement,
40};
41
42pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
43
44pub const all_features = blk: {
45 const len = @typeInfo(Feature).Enum.fields.len;
46 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
47 var result: [len]Cpu.Feature = undefined;
48 result[@enumToInt(Feature.deflate_conversion)] = .{
49 .index = @enumToInt(Feature.deflate_conversion),
50 .name = @tagName(Feature.deflate_conversion),
51 .llvm_name = "deflate-conversion",
52 .description = "Assume that the deflate-conversion facility is installed",
53 .dependencies = 0,
54 };
55 result[@enumToInt(Feature.dfp_packed_conversion)] = .{
56 .index = @enumToInt(Feature.dfp_packed_conversion),
57 .name = @tagName(Feature.dfp_packed_conversion),
58 .llvm_name = "dfp-packed-conversion",
59 .description = "Assume that the DFP packed-conversion facility is installed",
60 .dependencies = 0,
61 };
62 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{
63 .index = @enumToInt(Feature.dfp_zoned_conversion),
64 .name = @tagName(Feature.dfp_zoned_conversion),
65 .llvm_name = "dfp-zoned-conversion",
66 .description = "Assume that the DFP zoned-conversion facility is installed",
67 .dependencies = 0,
68 };
69 result[@enumToInt(Feature.distinct_ops)] = .{
70 .index = @enumToInt(Feature.distinct_ops),
71 .name = @tagName(Feature.distinct_ops),
72 .llvm_name = "distinct-ops",
73 .description = "Assume that the distinct-operands facility is installed",
74 .dependencies = 0,
75 };
76 result[@enumToInt(Feature.enhanced_dat_2)] = .{
77 .index = @enumToInt(Feature.enhanced_dat_2),
78 .name = @tagName(Feature.enhanced_dat_2),
79 .llvm_name = "enhanced-dat-2",
80 .description = "Assume that the enhanced-DAT facility 2 is installed",
81 .dependencies = 0,
82 };
83 result[@enumToInt(Feature.enhanced_sort)] = .{
84 .index = @enumToInt(Feature.enhanced_sort),
85 .name = @tagName(Feature.enhanced_sort),
86 .llvm_name = "enhanced-sort",
87 .description = "Assume that the enhanced-sort facility is installed",
88 .dependencies = 0,
89 };
90 result[@enumToInt(Feature.execution_hint)] = .{
91 .index = @enumToInt(Feature.execution_hint),
92 .name = @tagName(Feature.execution_hint),
93 .llvm_name = "execution-hint",
94 .description = "Assume that the execution-hint facility is installed",
95 .dependencies = 0,
96 };
97 result[@enumToInt(Feature.fast_serialization)] = .{
98 .index = @enumToInt(Feature.fast_serialization),
99 .name = @tagName(Feature.fast_serialization),
100 .llvm_name = "fast-serialization",
101 .description = "Assume that the fast-serialization facility is installed",
102 .dependencies = 0,
103 };
104 result[@enumToInt(Feature.fp_extension)] = .{
105 .index = @enumToInt(Feature.fp_extension),
106 .name = @tagName(Feature.fp_extension),
107 .llvm_name = "fp-extension",
108 .description = "Assume that the floating-point extension facility is installed",
109 .dependencies = 0,
110 };
111 result[@enumToInt(Feature.guarded_storage)] = .{
112 .index = @enumToInt(Feature.guarded_storage),
113 .name = @tagName(Feature.guarded_storage),
114 .llvm_name = "guarded-storage",
115 .description = "Assume that the guarded-storage facility is installed",
116 .dependencies = 0,
117 };
118 result[@enumToInt(Feature.high_word)] = .{
119 .index = @enumToInt(Feature.high_word),
120 .name = @tagName(Feature.high_word),
121 .llvm_name = "high-word",
122 .description = "Assume that the high-word facility is installed",
123 .dependencies = 0,
124 };
125 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{
126 .index = @enumToInt(Feature.insert_reference_bits_multiple),
127 .name = @tagName(Feature.insert_reference_bits_multiple),
128 .llvm_name = "insert-reference-bits-multiple",
129 .description = "Assume that the insert-reference-bits-multiple facility is installed",
130 .dependencies = 0,
131 };
132 result[@enumToInt(Feature.interlocked_access1)] = .{
133 .index = @enumToInt(Feature.interlocked_access1),
134 .name = @tagName(Feature.interlocked_access1),
135 .llvm_name = "interlocked-access1",
136 .description = "Assume that interlocked-access facility 1 is installed",
137 .dependencies = 0,
138 };
139 result[@enumToInt(Feature.load_and_trap)] = .{
140 .index = @enumToInt(Feature.load_and_trap),
141 .name = @tagName(Feature.load_and_trap),
142 .llvm_name = "load-and-trap",
143 .description = "Assume that the load-and-trap facility is installed",
144 .dependencies = 0,
145 };
146 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{
147 .index = @enumToInt(Feature.load_and_zero_rightmost_byte),
148 .name = @tagName(Feature.load_and_zero_rightmost_byte),
149 .llvm_name = "load-and-zero-rightmost-byte",
150 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
151 .dependencies = 0,
152 };
153 result[@enumToInt(Feature.load_store_on_cond)] = .{
154 .index = @enumToInt(Feature.load_store_on_cond),
155 .name = @tagName(Feature.load_store_on_cond),
156 .llvm_name = "load-store-on-cond",
157 .description = "Assume that the load/store-on-condition facility is installed",
158 .dependencies = 0,
159 };
160 result[@enumToInt(Feature.load_store_on_cond_2)] = .{
161 .index = @enumToInt(Feature.load_store_on_cond_2),
162 .name = @tagName(Feature.load_store_on_cond_2),
163 .llvm_name = "load-store-on-cond-2",
164 .description = "Assume that the load/store-on-condition facility 2 is installed",
165 .dependencies = 0,
166 };
167 result[@enumToInt(Feature.message_security_assist_extension3)] = .{
168 .index = @enumToInt(Feature.message_security_assist_extension3),
169 .name = @tagName(Feature.message_security_assist_extension3),
170 .llvm_name = "message-security-assist-extension3",
171 .description = "Assume that the message-security-assist extension facility 3 is installed",
172 .dependencies = 0,
173 };
174 result[@enumToInt(Feature.message_security_assist_extension4)] = .{
175 .index = @enumToInt(Feature.message_security_assist_extension4),
176 .name = @tagName(Feature.message_security_assist_extension4),
177 .llvm_name = "message-security-assist-extension4",
178 .description = "Assume that the message-security-assist extension facility 4 is installed",
179 .dependencies = 0,
180 };
181 result[@enumToInt(Feature.message_security_assist_extension5)] = .{
182 .index = @enumToInt(Feature.message_security_assist_extension5),
183 .name = @tagName(Feature.message_security_assist_extension5),
184 .llvm_name = "message-security-assist-extension5",
185 .description = "Assume that the message-security-assist extension facility 5 is installed",
186 .dependencies = 0,
187 };
188 result[@enumToInt(Feature.message_security_assist_extension7)] = .{
189 .index = @enumToInt(Feature.message_security_assist_extension7),
190 .name = @tagName(Feature.message_security_assist_extension7),
191 .llvm_name = "message-security-assist-extension7",
192 .description = "Assume that the message-security-assist extension facility 7 is installed",
193 .dependencies = 0,
194 };
195 result[@enumToInt(Feature.message_security_assist_extension8)] = .{
196 .index = @enumToInt(Feature.message_security_assist_extension8),
197 .name = @tagName(Feature.message_security_assist_extension8),
198 .llvm_name = "message-security-assist-extension8",
199 .description = "Assume that the message-security-assist extension facility 8 is installed",
200 .dependencies = 0,
201 };
202 result[@enumToInt(Feature.message_security_assist_extension9)] = .{
203 .index = @enumToInt(Feature.message_security_assist_extension9),
204 .name = @tagName(Feature.message_security_assist_extension9),
205 .llvm_name = "message-security-assist-extension9",
206 .description = "Assume that the message-security-assist extension facility 9 is installed",
207 .dependencies = 0,
208 };
209 result[@enumToInt(Feature.miscellaneous_extensions)] = .{
210 .index = @enumToInt(Feature.miscellaneous_extensions),
211 .name = @tagName(Feature.miscellaneous_extensions),
212 .llvm_name = "miscellaneous-extensions",
213 .description = "Assume that the miscellaneous-extensions facility is installed",
214 .dependencies = 0,
215 };
216 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{
217 .index = @enumToInt(Feature.miscellaneous_extensions_2),
218 .name = @tagName(Feature.miscellaneous_extensions_2),
219 .llvm_name = "miscellaneous-extensions-2",
220 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
221 .dependencies = 0,
222 };
223 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{
224 .index = @enumToInt(Feature.miscellaneous_extensions_3),
225 .name = @tagName(Feature.miscellaneous_extensions_3),
226 .llvm_name = "miscellaneous-extensions-3",
227 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
228 .dependencies = 0,
229 };
230 result[@enumToInt(Feature.population_count)] = .{
231 .index = @enumToInt(Feature.population_count),
232 .name = @tagName(Feature.population_count),
233 .llvm_name = "population-count",
234 .description = "Assume that the population-count facility is installed",
235 .dependencies = 0,
236 };
237 result[@enumToInt(Feature.processor_assist)] = .{
238 .index = @enumToInt(Feature.processor_assist),
239 .name = @tagName(Feature.processor_assist),
240 .llvm_name = "processor-assist",
241 .description = "Assume that the processor-assist facility is installed",
242 .dependencies = 0,
243 };
244 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
245 .index = @enumToInt(Feature.reset_reference_bits_multiple),
246 .name = @tagName(Feature.reset_reference_bits_multiple),
247 .llvm_name = "reset-reference-bits-multiple",
248 .description = "Assume that the reset-reference-bits-multiple facility is installed",
249 .dependencies = 0,
250 };
251 result[@enumToInt(Feature.transactional_execution)] = .{
252 .index = @enumToInt(Feature.transactional_execution),
253 .name = @tagName(Feature.transactional_execution),
254 .llvm_name = "transactional-execution",
255 .description = "Assume that the transactional-execution facility is installed",
256 .dependencies = 0,
257 };
258 result[@enumToInt(Feature.vector)] = .{
259 .index = @enumToInt(Feature.vector),
260 .name = @tagName(Feature.vector),
261 .llvm_name = "vector",
262 .description = "Assume that the vectory facility is installed",
263 .dependencies = 0,
264 };
265 result[@enumToInt(Feature.vector_enhancements_1)] = .{
266 .index = @enumToInt(Feature.vector_enhancements_1),
267 .name = @tagName(Feature.vector_enhancements_1),
268 .llvm_name = "vector-enhancements-1",
269 .description = "Assume that the vector enhancements facility 1 is installed",
270 .dependencies = 0,
271 };
272 result[@enumToInt(Feature.vector_enhancements_2)] = .{
273 .index = @enumToInt(Feature.vector_enhancements_2),
274 .name = @tagName(Feature.vector_enhancements_2),
275 .llvm_name = "vector-enhancements-2",
276 .description = "Assume that the vector enhancements facility 2 is installed",
277 .dependencies = 0,
278 };
279 result[@enumToInt(Feature.vector_packed_decimal)] = .{
280 .index = @enumToInt(Feature.vector_packed_decimal),
281 .name = @tagName(Feature.vector_packed_decimal),
282 .llvm_name = "vector-packed-decimal",
283 .description = "Assume that the vector packed decimal facility is installed",
284 .dependencies = 0,
285 };
286 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{
287 .index = @enumToInt(Feature.vector_packed_decimal_enhancement),
288 .name = @tagName(Feature.vector_packed_decimal_enhancement),
289 .llvm_name = "vector-packed-decimal-enhancement",
290 .description = "Assume that the vector packed decimal enhancement facility is installed",
291 .dependencies = 0,
292 };
293 break :blk result;
294};
295
296pub const cpu = struct {
297 pub const arch10 = Cpu{
298 .name = "arch10",
299 .llvm_name = "arch10",
300 .features = featureSet(&[_]Feature{
301 .dfp_zoned_conversion,
302 .distinct_ops,
303 .enhanced_dat_2,
304 .execution_hint,
305 .fast_serialization,
306 .fp_extension,
307 .high_word,
308 .interlocked_access1,
309 .load_and_trap,
310 .load_store_on_cond,
311 .message_security_assist_extension3,
312 .message_security_assist_extension4,
313 .miscellaneous_extensions,
314 .population_count,
315 .processor_assist,
316 .reset_reference_bits_multiple,
317 .transactional_execution,
318 }),
319 };
320 pub const arch11 = Cpu{
321 .name = "arch11",
322 .llvm_name = "arch11",
323 .features = featureSet(&[_]Feature{
324 .dfp_packed_conversion,
325 .dfp_zoned_conversion,
326 .distinct_ops,
327 .enhanced_dat_2,
328 .execution_hint,
329 .fast_serialization,
330 .fp_extension,
331 .high_word,
332 .interlocked_access1,
333 .load_and_trap,
334 .load_and_zero_rightmost_byte,
335 .load_store_on_cond,
336 .load_store_on_cond_2,
337 .message_security_assist_extension3,
338 .message_security_assist_extension4,
339 .message_security_assist_extension5,
340 .miscellaneous_extensions,
341 .population_count,
342 .processor_assist,
343 .reset_reference_bits_multiple,
344 .transactional_execution,
345 .vector,
346 }),
347 };
348 pub const arch12 = Cpu{
349 .name = "arch12",
350 .llvm_name = "arch12",
351 .features = featureSet(&[_]Feature{
352 .dfp_packed_conversion,
353 .dfp_zoned_conversion,
354 .distinct_ops,
355 .enhanced_dat_2,
356 .execution_hint,
357 .fast_serialization,
358 .fp_extension,
359 .guarded_storage,
360 .high_word,
361 .insert_reference_bits_multiple,
362 .interlocked_access1,
363 .load_and_trap,
364 .load_and_zero_rightmost_byte,
365 .load_store_on_cond,
366 .load_store_on_cond_2,
367 .message_security_assist_extension3,
368 .message_security_assist_extension4,
369 .message_security_assist_extension5,
370 .message_security_assist_extension7,
371 .message_security_assist_extension8,
372 .miscellaneous_extensions,
373 .miscellaneous_extensions_2,
374 .population_count,
375 .processor_assist,
376 .reset_reference_bits_multiple,
377 .transactional_execution,
378 .vector,
379 .vector_enhancements_1,
380 .vector_packed_decimal,
381 }),
382 };
383 pub const arch13 = Cpu{
384 .name = "arch13",
385 .llvm_name = "arch13",
386 .features = featureSet(&[_]Feature{
387 .deflate_conversion,
388 .dfp_packed_conversion,
389 .dfp_zoned_conversion,
390 .distinct_ops,
391 .enhanced_dat_2,
392 .enhanced_sort,
393 .execution_hint,
394 .fast_serialization,
395 .fp_extension,
396 .guarded_storage,
397 .high_word,
398 .insert_reference_bits_multiple,
399 .interlocked_access1,
400 .load_and_trap,
401 .load_and_zero_rightmost_byte,
402 .load_store_on_cond,
403 .load_store_on_cond_2,
404 .message_security_assist_extension3,
405 .message_security_assist_extension4,
406 .message_security_assist_extension5,
407 .message_security_assist_extension7,
408 .message_security_assist_extension8,
409 .message_security_assist_extension9,
410 .miscellaneous_extensions,
411 .miscellaneous_extensions_2,
412 .miscellaneous_extensions_3,
413 .population_count,
414 .processor_assist,
415 .reset_reference_bits_multiple,
416 .transactional_execution,
417 .vector,
418 .vector_enhancements_1,
419 .vector_enhancements_2,
420 .vector_packed_decimal,
421 .vector_packed_decimal_enhancement,
422 }),
423 };
424 pub const arch8 = Cpu{
425 .name = "arch8",
426 .llvm_name = "arch8",
427 .features = 0,
428 };
429 pub const arch9 = Cpu{
430 .name = "arch9",
431 .llvm_name = "arch9",
432 .features = featureSet(&[_]Feature{
433 .distinct_ops,
434 .fast_serialization,
435 .fp_extension,
436 .high_word,
437 .interlocked_access1,
438 .load_store_on_cond,
439 .message_security_assist_extension3,
440 .message_security_assist_extension4,
441 .population_count,
442 .reset_reference_bits_multiple,
443 }),
444 };
445 pub const generic = Cpu{
446 .name = "generic",
447 .llvm_name = "generic",
448 .features = 0,
449 };
450 pub const z10 = Cpu{
451 .name = "z10",
452 .llvm_name = "z10",
453 .features = 0,
454 };
455 pub const z13 = Cpu{
456 .name = "z13",
457 .llvm_name = "z13",
458 .features = featureSet(&[_]Feature{
459 .dfp_packed_conversion,
460 .dfp_zoned_conversion,
461 .distinct_ops,
462 .enhanced_dat_2,
463 .execution_hint,
464 .fast_serialization,
465 .fp_extension,
466 .high_word,
467 .interlocked_access1,
468 .load_and_trap,
469 .load_and_zero_rightmost_byte,
470 .load_store_on_cond,
471 .load_store_on_cond_2,
472 .message_security_assist_extension3,
473 .message_security_assist_extension4,
474 .message_security_assist_extension5,
475 .miscellaneous_extensions,
476 .population_count,
477 .processor_assist,
478 .reset_reference_bits_multiple,
479 .transactional_execution,
480 .vector,
481 }),
482 };
483 pub const z14 = Cpu{
484 .name = "z14",
485 .llvm_name = "z14",
486 .features = featureSet(&[_]Feature{
487 .dfp_packed_conversion,
488 .dfp_zoned_conversion,
489 .distinct_ops,
490 .enhanced_dat_2,
491 .execution_hint,
492 .fast_serialization,
493 .fp_extension,
494 .guarded_storage,
495 .high_word,
496 .insert_reference_bits_multiple,
497 .interlocked_access1,
498 .load_and_trap,
499 .load_and_zero_rightmost_byte,
500 .load_store_on_cond,
501 .load_store_on_cond_2,
502 .message_security_assist_extension3,
503 .message_security_assist_extension4,
504 .message_security_assist_extension5,
505 .message_security_assist_extension7,
506 .message_security_assist_extension8,
507 .miscellaneous_extensions,
508 .miscellaneous_extensions_2,
509 .population_count,
510 .processor_assist,
511 .reset_reference_bits_multiple,
512 .transactional_execution,
513 .vector,
514 .vector_enhancements_1,
515 .vector_packed_decimal,
516 }),
517 };
518 pub const z196 = Cpu{
519 .name = "z196",
520 .llvm_name = "z196",
521 .features = featureSet(&[_]Feature{
522 .distinct_ops,
523 .fast_serialization,
524 .fp_extension,
525 .high_word,
526 .interlocked_access1,
527 .load_store_on_cond,
528 .message_security_assist_extension3,
529 .message_security_assist_extension4,
530 .population_count,
531 .reset_reference_bits_multiple,
532 }),
533 };
534 pub const zEC12 = Cpu{
535 .name = "zEC12",
536 .llvm_name = "zEC12",
537 .features = featureSet(&[_]Feature{
538 .dfp_zoned_conversion,
539 .distinct_ops,
540 .enhanced_dat_2,
541 .execution_hint,
542 .fast_serialization,
543 .fp_extension,
544 .high_word,
545 .interlocked_access1,
546 .load_and_trap,
547 .load_store_on_cond,
548 .message_security_assist_extension3,
549 .message_security_assist_extension4,
550 .miscellaneous_extensions,
551 .population_count,
552 .processor_assist,
553 .reset_reference_bits_multiple,
554 .transactional_execution,
555 }),
556 };
557};
558
559/// All systemz CPUs, sorted alphabetically by name.
560/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
561/// compiler has inefficient memory and CPU usage, affecting build times.
562pub const all_cpus = &[_]*const Cpu{
563 &cpu.arch10,
564 &cpu.arch11,
565 &cpu.arch12,
566 &cpu.arch13,
567 &cpu.arch8,
568 &cpu.arch9,
569 &cpu.generic,
570 &cpu.z10,
571 &cpu.z13,
572 &cpu.z14,
573 &cpu.z196,
574 &cpu.zEC12,
610575};
lib/std/target/wasm.zig+120-119
......@@ -1,128 +1,129 @@
1const Feature = @import("std").target.Feature;
2const Cpu = @import("std").target.Cpu;
1const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;
33
4pub const feature_atomics = Feature{
5 .name = "atomics",
6 .llvm_name = "atomics",
7 .description = "Enable Atomics",
8 .dependencies = &[_]*const Feature {
9 },
4pub const Feature = enum {
5 atomics,
6 bulk_memory,
7 exception_handling,
8 multivalue,
9 mutable_globals,
10 nontrapping_fptoint,
11 sign_ext,
12 simd128,
13 tail_call,
14 unimplemented_simd128,
1015};
1116
12pub const feature_bulkMemory = Feature{
13 .name = "bulkMemory",
14 .llvm_name = "bulk-memory",
15 .description = "Enable bulk memory operations",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_exceptionHandling = Feature{
21 .name = "exceptionHandling",
22 .llvm_name = "exception-handling",
23 .description = "Enable Wasm exception handling",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_multivalue = Feature{
29 .name = "multivalue",
30 .llvm_name = "multivalue",
31 .description = "Enable multivalue blocks, instructions, and functions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_mutableGlobals = Feature{
37 .name = "mutableGlobals",
38 .llvm_name = "mutable-globals",
39 .description = "Enable mutable globals",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_nontrappingFptoint = Feature{
45 .name = "nontrappingFptoint",
46 .llvm_name = "nontrapping-fptoint",
47 .description = "Enable non-trapping float-to-int conversion operators",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_simd128 = Feature{
53 .name = "simd128",
54 .llvm_name = "simd128",
55 .description = "Enable 128-bit SIMD",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_signExt = Feature{
61 .name = "signExt",
62 .llvm_name = "sign-ext",
63 .description = "Enable sign extension operators",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_tailCall = Feature{
69 .name = "tailCall",
70 .llvm_name = "tail-call",
71 .description = "Enable tail call instructions",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_unimplementedSimd128 = Feature{
77 .name = "unimplementedSimd128",
78 .llvm_name = "unimplemented-simd128",
79 .description = "Enable 128-bit SIMD not yet implemented in engines",
80 .dependencies = &[_]*const Feature {
81 &feature_simd128,
82 },
83};
84
85pub const features = &[_]*const Feature {
86 &feature_atomics,
87 &feature_bulkMemory,
88 &feature_exceptionHandling,
89 &feature_multivalue,
90 &feature_mutableGlobals,
91 &feature_nontrappingFptoint,
92 &feature_simd128,
93 &feature_signExt,
94 &feature_tailCall,
95 &feature_unimplementedSimd128,
96};
97
98pub const cpu_bleedingEdge = Cpu{
99 .name = "bleedingEdge",
100 .llvm_name = "bleeding-edge",
101 .dependencies = &[_]*const Feature {
102 &feature_atomics,
103 &feature_mutableGlobals,
104 &feature_nontrappingFptoint,
105 &feature_simd128,
106 &feature_signExt,
107 },
108};
17pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
10918
110pub const cpu_generic = Cpu{
111 .name = "generic",
112 .llvm_name = "generic",
113 .dependencies = &[_]*const Feature {
114 },
19pub const all_features = blk: {
20 const len = @typeInfo(Feature).Enum.fields.len;
21 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
22 var result: [len]Cpu.Feature = undefined;
23 result[@enumToInt(Feature.atomics)] = .{
24 .index = @enumToInt(Feature.atomics),
25 .name = @tagName(Feature.atomics),
26 .llvm_name = "atomics",
27 .description = "Enable Atomics",
28 .dependencies = 0,
29 };
30 result[@enumToInt(Feature.bulk_memory)] = .{
31 .index = @enumToInt(Feature.bulk_memory),
32 .name = @tagName(Feature.bulk_memory),
33 .llvm_name = "bulk-memory",
34 .description = "Enable bulk memory operations",
35 .dependencies = 0,
36 };
37 result[@enumToInt(Feature.exception_handling)] = .{
38 .index = @enumToInt(Feature.exception_handling),
39 .name = @tagName(Feature.exception_handling),
40 .llvm_name = "exception-handling",
41 .description = "Enable Wasm exception handling",
42 .dependencies = 0,
43 };
44 result[@enumToInt(Feature.multivalue)] = .{
45 .index = @enumToInt(Feature.multivalue),
46 .name = @tagName(Feature.multivalue),
47 .llvm_name = "multivalue",
48 .description = "Enable multivalue blocks, instructions, and functions",
49 .dependencies = 0,
50 };
51 result[@enumToInt(Feature.mutable_globals)] = .{
52 .index = @enumToInt(Feature.mutable_globals),
53 .name = @tagName(Feature.mutable_globals),
54 .llvm_name = "mutable-globals",
55 .description = "Enable mutable globals",
56 .dependencies = 0,
57 };
58 result[@enumToInt(Feature.nontrapping_fptoint)] = .{
59 .index = @enumToInt(Feature.nontrapping_fptoint),
60 .name = @tagName(Feature.nontrapping_fptoint),
61 .llvm_name = "nontrapping-fptoint",
62 .description = "Enable non-trapping float-to-int conversion operators",
63 .dependencies = 0,
64 };
65 result[@enumToInt(Feature.sign_ext)] = .{
66 .index = @enumToInt(Feature.sign_ext),
67 .name = @tagName(Feature.sign_ext),
68 .llvm_name = "sign-ext",
69 .description = "Enable sign extension operators",
70 .dependencies = 0,
71 };
72 result[@enumToInt(Feature.simd128)] = .{
73 .index = @enumToInt(Feature.simd128),
74 .name = @tagName(Feature.simd128),
75 .llvm_name = "simd128",
76 .description = "Enable 128-bit SIMD",
77 .dependencies = 0,
78 };
79 result[@enumToInt(Feature.tail_call)] = .{
80 .index = @enumToInt(Feature.tail_call),
81 .name = @tagName(Feature.tail_call),
82 .llvm_name = "tail-call",
83 .description = "Enable tail call instructions",
84 .dependencies = 0,
85 };
86 result[@enumToInt(Feature.unimplemented_simd128)] = .{
87 .index = @enumToInt(Feature.unimplemented_simd128),
88 .name = @tagName(Feature.unimplemented_simd128),
89 .llvm_name = "unimplemented-simd128",
90 .description = "Enable 128-bit SIMD not yet implemented in engines",
91 .dependencies = featureSet(&[_]Feature{
92 .simd128,
93 }),
94 };
95 break :blk result;
11596};
11697
117pub const cpu_mvp = Cpu{
118 .name = "mvp",
119 .llvm_name = "mvp",
120 .dependencies = &[_]*const Feature {
121 },
98pub const cpu = struct {
99 pub const bleeding_edge = Cpu{
100 .name = "bleeding_edge",
101 .llvm_name = "bleeding-edge",
102 .features = featureSet(&[_]Feature{
103 .atomics,
104 .mutable_globals,
105 .nontrapping_fptoint,
106 .sign_ext,
107 .simd128,
108 }),
109 };
110 pub const generic = Cpu{
111 .name = "generic",
112 .llvm_name = "generic",
113 .features = 0,
114 };
115 pub const mvp = Cpu{
116 .name = "mvp",
117 .llvm_name = "mvp",
118 .features = 0,
119 };
122120};
123121
124pub const cpus = &[_]*const Cpu {
125 &cpu_bleedingEdge,
126 &cpu_generic,
127 &cpu_mvp,
122/// All wasm CPUs, sorted alphabetically by name.
123/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
124/// compiler has inefficient memory and CPU usage, affecting build times.
125pub const all_cpus = &[_]*const Cpu{
126 &cpu.bleeding_edge,
127 &cpu.generic,
128 &cpu.mvp,
128129};
lib/std/target/x86.zig+696-964
......@@ -108,12 +108,12 @@ pub const Feature = enum {
108108 slow_unaligned_mem_32,
109109 soft_float,
110110 sse,
111 sse_unaligned_mem,
111112 sse2,
112113 sse3,
113114 sse4_1,
114115 sse4_2,
115116 sse4a,
116 sse_unaligned_mem,
117117 ssse3,
118118 tbm,
119119 vaes,
......@@ -134,7 +134,6 @@ pub const all_features = blk: {
134134 const len = @typeInfo(Feature).Enum.fields.len;
135135 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
136136 var result: [len]Cpu.Feature = undefined;
137
138137 result[@enumToInt(Feature.@"16bit_mode")] = .{
139138 .index = @enumToInt(Feature.@"16bit_mode"),
140139 .name = @tagName(Feature.@"16bit_mode"),
......@@ -142,7 +141,6 @@ pub const all_features = blk: {
142141 .description = "16-bit mode (i8086)",
143142 .dependencies = 0,
144143 };
145
146144 result[@enumToInt(Feature.@"32bit_mode")] = .{
147145 .index = @enumToInt(Feature.@"32bit_mode"),
148146 .name = @tagName(Feature.@"32bit_mode"),
......@@ -150,7 +148,6 @@ pub const all_features = blk: {
150148 .description = "32-bit mode (80386)",
151149 .dependencies = 0,
152150 };
153
154151 result[@enumToInt(Feature.@"3dnow")] = .{
155152 .index = @enumToInt(Feature.@"3dnow"),
156153 .name = @tagName(Feature.@"3dnow"),
......@@ -160,17 +157,15 @@ pub const all_features = blk: {
160157 .mmx,
161158 }),
162159 };
163
164160 result[@enumToInt(Feature.@"3dnowa")] = .{
165161 .index = @enumToInt(Feature.@"3dnowa"),
166162 .name = @tagName(Feature.@"3dnowa"),
167163 .llvm_name = "3dnowa",
168164 .description = "Enable 3DNow! Athlon instructions",
169165 .dependencies = featureSet(&[_]Feature{
170 .mmx,
166 .@"3dnow",
171167 }),
172168 };
173
174169 result[@enumToInt(Feature.@"64bit")] = .{
175170 .index = @enumToInt(Feature.@"64bit"),
176171 .name = @tagName(Feature.@"64bit"),
......@@ -178,7 +173,6 @@ pub const all_features = blk: {
178173 .description = "Support 64-bit instructions",
179174 .dependencies = 0,
180175 };
181
182176 result[@enumToInt(Feature.@"64bit_mode")] = .{
183177 .index = @enumToInt(Feature.@"64bit_mode"),
184178 .name = @tagName(Feature.@"64bit_mode"),
......@@ -186,167 +180,233 @@ pub const all_features = blk: {
186180 .description = "64-bit mode (x86_64)",
187181 .dependencies = 0,
188182 };
189
190183 result[@enumToInt(Feature.adx)] = .{
191184 .index = @enumToInt(Feature.adx),
192185 .name = @tagName(Feature.adx),
193186 .llvm_name = "adx",
194187 .description = "Support ADX instructions",
195 .dependencies = featureSet(&[_]Feature{}),
188 .dependencies = 0,
196189 };
197
198190 result[@enumToInt(Feature.aes)] = .{
199191 .index = @enumToInt(Feature.aes),
200192 .name = @tagName(Feature.aes),
201193 .llvm_name = "aes",
202194 .description = "Enable AES instructions",
203195 .dependencies = featureSet(&[_]Feature{
204 .sse,
196 .sse2,
205197 }),
206198 };
207
208199 result[@enumToInt(Feature.avx)] = .{
209200 .index = @enumToInt(Feature.avx),
210201 .name = @tagName(Feature.avx),
211202 .llvm_name = "avx",
212203 .description = "Enable AVX instructions",
213204 .dependencies = featureSet(&[_]Feature{
214 .sse,
205 .sse4_2,
215206 }),
216207 };
217
218208 result[@enumToInt(Feature.avx2)] = .{
219209 .index = @enumToInt(Feature.avx2),
220210 .name = @tagName(Feature.avx2),
221211 .llvm_name = "avx2",
222212 .description = "Enable AVX2 instructions",
223213 .dependencies = featureSet(&[_]Feature{
224 .sse,
225 }),
226 };
227
228 result[@enumToInt(Feature.avx512f)] = .{
229 .index = @enumToInt(Feature.avx512f),
230 .name = @tagName(Feature.avx512f),
231 .llvm_name = "avx512f",
232 .description = "Enable AVX-512 instructions",
233 .dependencies = featureSet(&[_]Feature{
234 .sse,
214 .avx,
235215 }),
236216 };
237
238217 result[@enumToInt(Feature.avx512bf16)] = .{
239218 .index = @enumToInt(Feature.avx512bf16),
240219 .name = @tagName(Feature.avx512bf16),
241220 .llvm_name = "avx512bf16",
242221 .description = "Support bfloat16 floating point",
243222 .dependencies = featureSet(&[_]Feature{
244 .sse,
223 .avx512bw,
245224 }),
246225 };
247
248226 result[@enumToInt(Feature.avx512bitalg)] = .{
249227 .index = @enumToInt(Feature.avx512bitalg),
250228 .name = @tagName(Feature.avx512bitalg),
251229 .llvm_name = "avx512bitalg",
252230 .description = "Enable AVX-512 Bit Algorithms",
253231 .dependencies = featureSet(&[_]Feature{
254 .sse,
232 .avx512bw,
233 }),
234 };
235 result[@enumToInt(Feature.avx512bw)] = .{
236 .index = @enumToInt(Feature.avx512bw),
237 .name = @tagName(Feature.avx512bw),
238 .llvm_name = "avx512bw",
239 .description = "Enable AVX-512 Byte and Word Instructions",
240 .dependencies = featureSet(&[_]Feature{
241 .avx512f,
242 }),
243 };
244 result[@enumToInt(Feature.avx512cd)] = .{
245 .index = @enumToInt(Feature.avx512cd),
246 .name = @tagName(Feature.avx512cd),
247 .llvm_name = "avx512cd",
248 .description = "Enable AVX-512 Conflict Detection Instructions",
249 .dependencies = featureSet(&[_]Feature{
250 .avx512f,
251 }),
252 };
253 result[@enumToInt(Feature.avx512dq)] = .{
254 .index = @enumToInt(Feature.avx512dq),
255 .name = @tagName(Feature.avx512dq),
256 .llvm_name = "avx512dq",
257 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
258 .dependencies = featureSet(&[_]Feature{
259 .avx512f,
260 }),
261 };
262 result[@enumToInt(Feature.avx512er)] = .{
263 .index = @enumToInt(Feature.avx512er),
264 .name = @tagName(Feature.avx512er),
265 .llvm_name = "avx512er",
266 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
267 .dependencies = featureSet(&[_]Feature{
268 .avx512f,
269 }),
270 };
271 result[@enumToInt(Feature.avx512f)] = .{
272 .index = @enumToInt(Feature.avx512f),
273 .name = @tagName(Feature.avx512f),
274 .llvm_name = "avx512f",
275 .description = "Enable AVX-512 instructions",
276 .dependencies = featureSet(&[_]Feature{
277 .avx2,
278 .f16c,
279 .fma,
280 }),
281 };
282 result[@enumToInt(Feature.avx512ifma)] = .{
283 .index = @enumToInt(Feature.avx512ifma),
284 .name = @tagName(Feature.avx512ifma),
285 .llvm_name = "avx512ifma",
286 .description = "Enable AVX-512 Integer Fused Multiple-Add",
287 .dependencies = featureSet(&[_]Feature{
288 .avx512f,
289 }),
290 };
291 result[@enumToInt(Feature.avx512pf)] = .{
292 .index = @enumToInt(Feature.avx512pf),
293 .name = @tagName(Feature.avx512pf),
294 .llvm_name = "avx512pf",
295 .description = "Enable AVX-512 PreFetch Instructions",
296 .dependencies = featureSet(&[_]Feature{
297 .avx512f,
298 }),
299 };
300 result[@enumToInt(Feature.avx512vbmi)] = .{
301 .index = @enumToInt(Feature.avx512vbmi),
302 .name = @tagName(Feature.avx512vbmi),
303 .llvm_name = "avx512vbmi",
304 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
305 .dependencies = featureSet(&[_]Feature{
306 .avx512bw,
307 }),
308 };
309 result[@enumToInt(Feature.avx512vbmi2)] = .{
310 .index = @enumToInt(Feature.avx512vbmi2),
311 .name = @tagName(Feature.avx512vbmi2),
312 .llvm_name = "avx512vbmi2",
313 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
314 .dependencies = featureSet(&[_]Feature{
315 .avx512bw,
316 }),
317 };
318 result[@enumToInt(Feature.avx512vl)] = .{
319 .index = @enumToInt(Feature.avx512vl),
320 .name = @tagName(Feature.avx512vl),
321 .llvm_name = "avx512vl",
322 .description = "Enable AVX-512 Vector Length eXtensions",
323 .dependencies = featureSet(&[_]Feature{
324 .avx512f,
325 }),
326 };
327 result[@enumToInt(Feature.avx512vnni)] = .{
328 .index = @enumToInt(Feature.avx512vnni),
329 .name = @tagName(Feature.avx512vnni),
330 .llvm_name = "avx512vnni",
331 .description = "Enable AVX-512 Vector Neural Network Instructions",
332 .dependencies = featureSet(&[_]Feature{
333 .avx512f,
334 }),
335 };
336 result[@enumToInt(Feature.avx512vp2intersect)] = .{
337 .index = @enumToInt(Feature.avx512vp2intersect),
338 .name = @tagName(Feature.avx512vp2intersect),
339 .llvm_name = "avx512vp2intersect",
340 .description = "Enable AVX-512 vp2intersect",
341 .dependencies = featureSet(&[_]Feature{
342 .avx512f,
343 }),
344 };
345 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
346 .index = @enumToInt(Feature.avx512vpopcntdq),
347 .name = @tagName(Feature.avx512vpopcntdq),
348 .llvm_name = "avx512vpopcntdq",
349 .description = "Enable AVX-512 Population Count Instructions",
350 .dependencies = featureSet(&[_]Feature{
351 .avx512f,
255352 }),
256353 };
257
258354 result[@enumToInt(Feature.bmi)] = .{
259355 .index = @enumToInt(Feature.bmi),
260356 .name = @tagName(Feature.bmi),
261357 .llvm_name = "bmi",
262358 .description = "Support BMI instructions",
263 .dependencies = featureSet(&[_]Feature{}),
359 .dependencies = 0,
264360 };
265
266361 result[@enumToInt(Feature.bmi2)] = .{
267362 .index = @enumToInt(Feature.bmi2),
268363 .name = @tagName(Feature.bmi2),
269364 .llvm_name = "bmi2",
270365 .description = "Support BMI2 instructions",
271 .dependencies = featureSet(&[_]Feature{}),
272 };
273
274 result[@enumToInt(Feature.avx512bw)] = .{
275 .index = @enumToInt(Feature.avx512bw),
276 .name = @tagName(Feature.avx512bw),
277 .llvm_name = "avx512bw",
278 .description = "Enable AVX-512 Byte and Word Instructions",
279 .dependencies = featureSet(&[_]Feature{
280 .sse,
281 }),
366 .dependencies = 0,
282367 };
283
284368 result[@enumToInt(Feature.branchfusion)] = .{
285369 .index = @enumToInt(Feature.branchfusion),
286370 .name = @tagName(Feature.branchfusion),
287371 .llvm_name = "branchfusion",
288372 .description = "CMP/TEST can be fused with conditional branches",
289 .dependencies = featureSet(&[_]Feature{}),
290 };
291
292 result[@enumToInt(Feature.avx512cd)] = .{
293 .index = @enumToInt(Feature.avx512cd),
294 .name = @tagName(Feature.avx512cd),
295 .llvm_name = "avx512cd",
296 .description = "Enable AVX-512 Conflict Detection Instructions",
297 .dependencies = featureSet(&[_]Feature{
298 .sse,
299 }),
373 .dependencies = 0,
300374 };
301
302375 result[@enumToInt(Feature.cldemote)] = .{
303376 .index = @enumToInt(Feature.cldemote),
304377 .name = @tagName(Feature.cldemote),
305378 .llvm_name = "cldemote",
306379 .description = "Enable Cache Demote",
307 .dependencies = featureSet(&[_]Feature{}),
380 .dependencies = 0,
308381 };
309
310382 result[@enumToInt(Feature.clflushopt)] = .{
311383 .index = @enumToInt(Feature.clflushopt),
312384 .name = @tagName(Feature.clflushopt),
313385 .llvm_name = "clflushopt",
314386 .description = "Flush A Cache Line Optimized",
315 .dependencies = featureSet(&[_]Feature{}),
387 .dependencies = 0,
316388 };
317
318389 result[@enumToInt(Feature.clwb)] = .{
319390 .index = @enumToInt(Feature.clwb),
320391 .name = @tagName(Feature.clwb),
321392 .llvm_name = "clwb",
322393 .description = "Cache Line Write Back",
323 .dependencies = featureSet(&[_]Feature{}),
394 .dependencies = 0,
324395 };
325
326396 result[@enumToInt(Feature.clzero)] = .{
327397 .index = @enumToInt(Feature.clzero),
328398 .name = @tagName(Feature.clzero),
329399 .llvm_name = "clzero",
330400 .description = "Enable Cache Line Zero",
331 .dependencies = featureSet(&[_]Feature{}),
401 .dependencies = 0,
332402 };
333
334403 result[@enumToInt(Feature.cmov)] = .{
335404 .index = @enumToInt(Feature.cmov),
336405 .name = @tagName(Feature.cmov),
337406 .llvm_name = "cmov",
338407 .description = "Enable conditional move instructions",
339 .dependencies = featureSet(&[_]Feature{}),
340 };
341
342 result[@enumToInt(Feature.cx8)] = .{
343 .index = @enumToInt(Feature.cx8),
344 .name = @tagName(Feature.cx8),
345 .llvm_name = "cx8",
346 .description = "Support CMPXCHG8B instructions",
347 .dependencies = featureSet(&[_]Feature{}),
408 .dependencies = 0,
348409 };
349
350410 result[@enumToInt(Feature.cx16)] = .{
351411 .index = @enumToInt(Feature.cx16),
352412 .name = @tagName(Feature.cx16),
......@@ -356,17 +416,13 @@ pub const all_features = blk: {
356416 .cx8,
357417 }),
358418 };
359
360 result[@enumToInt(Feature.avx512dq)] = .{
361 .index = @enumToInt(Feature.avx512dq),
362 .name = @tagName(Feature.avx512dq),
363 .llvm_name = "avx512dq",
364 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
365 .dependencies = featureSet(&[_]Feature{
366 .sse,
367 }),
419 result[@enumToInt(Feature.cx8)] = .{
420 .index = @enumToInt(Feature.cx8),
421 .name = @tagName(Feature.cx8),
422 .llvm_name = "cx8",
423 .description = "Support CMPXCHG8B instructions",
424 .dependencies = 0,
368425 };
369
370426 result[@enumToInt(Feature.enqcmd)] = .{
371427 .index = @enumToInt(Feature.enqcmd),
372428 .name = @tagName(Feature.enqcmd),
......@@ -374,17 +430,6 @@ pub const all_features = blk: {
374430 .description = "Has ENQCMD instructions",
375431 .dependencies = 0,
376432 };
377
378 result[@enumToInt(Feature.avx512er)] = .{
379 .index = @enumToInt(Feature.avx512er),
380 .name = @tagName(Feature.avx512er),
381 .llvm_name = "avx512er",
382 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
383 .dependencies = featureSet(&[_]Feature{
384 .sse,
385 }),
386 };
387
388433 result[@enumToInt(Feature.ermsb)] = .{
389434 .index = @enumToInt(Feature.ermsb),
390435 .name = @tagName(Feature.ermsb),
......@@ -392,53 +437,29 @@ pub const all_features = blk: {
392437 .description = "REP MOVS/STOS are fast",
393438 .dependencies = 0,
394439 };
395
396440 result[@enumToInt(Feature.f16c)] = .{
397441 .index = @enumToInt(Feature.f16c),
398442 .name = @tagName(Feature.f16c),
399443 .llvm_name = "f16c",
400444 .description = "Support 16-bit floating point conversion instructions",
401445 .dependencies = featureSet(&[_]Feature{
402 .sse,
403 }),
404 };
405
406 result[@enumToInt(Feature.fma)] = .{
407 .index = @enumToInt(Feature.fma),
408 .name = @tagName(Feature.fma),
409 .llvm_name = "fma",
410 .description = "Enable three-operand fused multiple-add",
411 .dependencies = featureSet(&[_]Feature{
412 .sse,
413 }),
414 };
415
416 result[@enumToInt(Feature.fma4)] = .{
417 .index = @enumToInt(Feature.fma4),
418 .name = @tagName(Feature.fma4),
419 .llvm_name = "fma4",
420 .description = "Enable four-operand fused multiple-add",
421 .dependencies = featureSet(&[_]Feature{
422 .sse,
446 .avx,
423447 }),
424448 };
425
426 result[@enumToInt(Feature.fsgsbase)] = .{
427 .index = @enumToInt(Feature.fsgsbase),
428 .name = @tagName(Feature.fsgsbase),
429 .llvm_name = "fsgsbase",
430 .description = "Support FS/GS Base instructions",
449 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{
450 .index = @enumToInt(Feature.false_deps_lzcnt_tzcnt),
451 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),
452 .llvm_name = "false-deps-lzcnt-tzcnt",
453 .description = "LZCNT/TZCNT have a false dependency on dest register",
431454 .dependencies = 0,
432455 };
433
434 result[@enumToInt(Feature.fxsr)] = .{
435 .index = @enumToInt(Feature.fxsr),
436 .name = @tagName(Feature.fxsr),
437 .llvm_name = "fxsr",
438 .description = "Support fxsave/fxrestore instructions",
456 result[@enumToInt(Feature.false_deps_popcnt)] = .{
457 .index = @enumToInt(Feature.false_deps_popcnt),
458 .name = @tagName(Feature.false_deps_popcnt),
459 .llvm_name = "false-deps-popcnt",
460 .description = "POPCNT has a false dependency on dest register",
439461 .dependencies = 0,
440462 };
441
442463 result[@enumToInt(Feature.fast_11bytenop)] = .{
443464 .index = @enumToInt(Feature.fast_11bytenop),
444465 .name = @tagName(Feature.fast_11bytenop),
......@@ -446,7 +467,6 @@ pub const all_features = blk: {
446467 .description = "Target can quickly decode up to 11 byte NOPs",
447468 .dependencies = 0,
448469 };
449
450470 result[@enumToInt(Feature.fast_15bytenop)] = .{
451471 .index = @enumToInt(Feature.fast_15bytenop),
452472 .name = @tagName(Feature.fast_15bytenop),
......@@ -454,7 +474,6 @@ pub const all_features = blk: {
454474 .description = "Target can quickly decode up to 15 byte NOPs",
455475 .dependencies = 0,
456476 };
457
458477 result[@enumToInt(Feature.fast_bextr)] = .{
459478 .index = @enumToInt(Feature.fast_bextr),
460479 .name = @tagName(Feature.fast_bextr),
......@@ -462,17 +481,22 @@ pub const all_features = blk: {
462481 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
463482 .dependencies = 0,
464483 };
465
484 result[@enumToInt(Feature.fast_gather)] = .{
485 .index = @enumToInt(Feature.fast_gather),
486 .name = @tagName(Feature.fast_gather),
487 .llvm_name = "fast-gather",
488 .description = "Indicates if gather is reasonably fast",
489 .dependencies = 0,
490 };
466491 result[@enumToInt(Feature.fast_hops)] = .{
467492 .index = @enumToInt(Feature.fast_hops),
468493 .name = @tagName(Feature.fast_hops),
469494 .llvm_name = "fast-hops",
470495 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
471496 .dependencies = featureSet(&[_]Feature{
472 .sse,
497 .sse3,
473498 }),
474499 };
475
476500 result[@enumToInt(Feature.fast_lzcnt)] = .{
477501 .index = @enumToInt(Feature.fast_lzcnt),
478502 .name = @tagName(Feature.fast_lzcnt),
......@@ -480,7 +504,6 @@ pub const all_features = blk: {
480504 .description = "LZCNT instructions are as fast as most simple integer ops",
481505 .dependencies = 0,
482506 };
483
484507 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{
485508 .index = @enumToInt(Feature.fast_partial_ymm_or_zmm_write),
486509 .name = @tagName(Feature.fast_partial_ymm_or_zmm_write),
......@@ -488,15 +511,6 @@ pub const all_features = blk: {
488511 .description = "Partial writes to YMM/ZMM registers are fast",
489512 .dependencies = 0,
490513 };
491
492 result[@enumToInt(Feature.fast_shld_rotate)] = .{
493 .index = @enumToInt(Feature.fast_shld_rotate),
494 .name = @tagName(Feature.fast_shld_rotate),
495 .llvm_name = "fast-shld-rotate",
496 .description = "SHLD can be used as a faster rotate",
497 .dependencies = 0,
498 };
499
500514 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
501515 .index = @enumToInt(Feature.fast_scalar_fsqrt),
502516 .name = @tagName(Feature.fast_scalar_fsqrt),
......@@ -504,7 +518,6 @@ pub const all_features = blk: {
504518 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
505519 .dependencies = 0,
506520 };
507
508521 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{
509522 .index = @enumToInt(Feature.fast_scalar_shift_masks),
510523 .name = @tagName(Feature.fast_scalar_shift_masks),
......@@ -512,7 +525,13 @@ pub const all_features = blk: {
512525 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
513526 .dependencies = 0,
514527 };
515
528 result[@enumToInt(Feature.fast_shld_rotate)] = .{
529 .index = @enumToInt(Feature.fast_shld_rotate),
530 .name = @tagName(Feature.fast_shld_rotate),
531 .llvm_name = "fast-shld-rotate",
532 .description = "SHLD can be used as a faster rotate",
533 .dependencies = 0,
534 };
516535 result[@enumToInt(Feature.fast_variable_shuffle)] = .{
517536 .index = @enumToInt(Feature.fast_variable_shuffle),
518537 .name = @tagName(Feature.fast_variable_shuffle),
......@@ -520,7 +539,6 @@ pub const all_features = blk: {
520539 .description = "Shuffles with variable masks are fast",
521540 .dependencies = 0,
522541 };
523
524542 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
525543 .index = @enumToInt(Feature.fast_vector_fsqrt),
526544 .name = @tagName(Feature.fast_vector_fsqrt),
......@@ -528,7 +546,6 @@ pub const all_features = blk: {
528546 .description = "Vector SQRT is fast (disable Newton-Raphson)",
529547 .dependencies = 0,
530548 };
531
532549 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{
533550 .index = @enumToInt(Feature.fast_vector_shift_masks),
534551 .name = @tagName(Feature.fast_vector_shift_masks),
......@@ -536,35 +553,62 @@ pub const all_features = blk: {
536553 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",
537554 .dependencies = 0,
538555 };
539
540 result[@enumToInt(Feature.gfni)] = .{
541 .index = @enumToInt(Feature.gfni),
542 .name = @tagName(Feature.gfni),
543 .llvm_name = "gfni",
544 .description = "Enable Galois Field Arithmetic Instructions",
556 result[@enumToInt(Feature.fma)] = .{
557 .index = @enumToInt(Feature.fma),
558 .name = @tagName(Feature.fma),
559 .llvm_name = "fma",
560 .description = "Enable three-operand fused multiple-add",
545561 .dependencies = featureSet(&[_]Feature{
546 .sse,
562 .avx,
547563 }),
548564 };
549
550 result[@enumToInt(Feature.fast_gather)] = .{
551 .index = @enumToInt(Feature.fast_gather),
552 .name = @tagName(Feature.fast_gather),
553 .llvm_name = "fast-gather",
554 .description = "Indicates if gather is reasonably fast",
565 result[@enumToInt(Feature.fma4)] = .{
566 .index = @enumToInt(Feature.fma4),
567 .name = @tagName(Feature.fma4),
568 .llvm_name = "fma4",
569 .description = "Enable four-operand fused multiple-add",
570 .dependencies = featureSet(&[_]Feature{
571 .avx,
572 .sse4a,
573 }),
574 };
575 result[@enumToInt(Feature.fsgsbase)] = .{
576 .index = @enumToInt(Feature.fsgsbase),
577 .name = @tagName(Feature.fsgsbase),
578 .llvm_name = "fsgsbase",
579 .description = "Support FS/GS Base instructions",
555580 .dependencies = 0,
556581 };
557
558 result[@enumToInt(Feature.avx512ifma)] = .{
559 .index = @enumToInt(Feature.avx512ifma),
560 .name = @tagName(Feature.avx512ifma),
561 .llvm_name = "avx512ifma",
562 .description = "Enable AVX-512 Integer Fused Multiple-Add",
582 result[@enumToInt(Feature.fxsr)] = .{
583 .index = @enumToInt(Feature.fxsr),
584 .name = @tagName(Feature.fxsr),
585 .llvm_name = "fxsr",
586 .description = "Support fxsave/fxrestore instructions",
587 .dependencies = 0,
588 };
589 result[@enumToInt(Feature.gfni)] = .{
590 .index = @enumToInt(Feature.gfni),
591 .name = @tagName(Feature.gfni),
592 .llvm_name = "gfni",
593 .description = "Enable Galois Field Arithmetic Instructions",
563594 .dependencies = featureSet(&[_]Feature{
564 .sse,
595 .sse2,
565596 }),
566597 };
567
598 result[@enumToInt(Feature.idivl_to_divb)] = .{
599 .index = @enumToInt(Feature.idivl_to_divb),
600 .name = @tagName(Feature.idivl_to_divb),
601 .llvm_name = "idivl-to-divb",
602 .description = "Use 8-bit divide for positive values less than 256",
603 .dependencies = 0,
604 };
605 result[@enumToInt(Feature.idivq_to_divl)] = .{
606 .index = @enumToInt(Feature.idivq_to_divl),
607 .name = @tagName(Feature.idivq_to_divl),
608 .llvm_name = "idivq-to-divl",
609 .description = "Use 32-bit divide for positive values less than 2^32",
610 .dependencies = 0,
611 };
568612 result[@enumToInt(Feature.invpcid)] = .{
569613 .index = @enumToInt(Feature.invpcid),
570614 .name = @tagName(Feature.invpcid),
......@@ -572,15 +616,6 @@ pub const all_features = blk: {
572616 .description = "Invalidate Process-Context Identifier",
573617 .dependencies = 0,
574618 };
575
576 result[@enumToInt(Feature.sahf)] = .{
577 .index = @enumToInt(Feature.sahf),
578 .name = @tagName(Feature.sahf),
579 .llvm_name = "sahf",
580 .description = "Support LAHF and SAHF instructions",
581 .dependencies = 0,
582 };
583
584619 result[@enumToInt(Feature.lea_sp)] = .{
585620 .index = @enumToInt(Feature.lea_sp),
586621 .name = @tagName(Feature.lea_sp),
......@@ -588,7 +623,6 @@ pub const all_features = blk: {
588623 .description = "Use LEA for adjusting the stack pointer",
589624 .dependencies = 0,
590625 };
591
592626 result[@enumToInt(Feature.lea_uses_ag)] = .{
593627 .index = @enumToInt(Feature.lea_uses_ag),
594628 .name = @tagName(Feature.lea_uses_ag),
......@@ -596,7 +630,6 @@ pub const all_features = blk: {
596630 .description = "LEA instruction needs inputs at AG stage",
597631 .dependencies = 0,
598632 };
599
600633 result[@enumToInt(Feature.lwp)] = .{
601634 .index = @enumToInt(Feature.lwp),
602635 .name = @tagName(Feature.lwp),
......@@ -604,7 +637,6 @@ pub const all_features = blk: {
604637 .description = "Enable LWP instructions",
605638 .dependencies = 0,
606639 };
607
608640 result[@enumToInt(Feature.lzcnt)] = .{
609641 .index = @enumToInt(Feature.lzcnt),
610642 .name = @tagName(Feature.lzcnt),
......@@ -612,15 +644,20 @@ pub const all_features = blk: {
612644 .description = "Support LZCNT instruction",
613645 .dependencies = 0,
614646 };
615
616 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{
617 .index = @enumToInt(Feature.false_deps_lzcnt_tzcnt),
618 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),
619 .llvm_name = "false-deps-lzcnt-tzcnt",
620 .description = "LZCNT/TZCNT have a false dependency on dest register",
647 result[@enumToInt(Feature.macrofusion)] = .{
648 .index = @enumToInt(Feature.macrofusion),
649 .name = @tagName(Feature.macrofusion),
650 .llvm_name = "macrofusion",
651 .description = "Various instructions can be fused with conditional branches",
652 .dependencies = 0,
653 };
654 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
655 .index = @enumToInt(Feature.merge_to_threeway_branch),
656 .name = @tagName(Feature.merge_to_threeway_branch),
657 .llvm_name = "merge-to-threeway-branch",
658 .description = "Merge branches to a three-way conditional branch",
621659 .dependencies = 0,
622660 };
623
624661 result[@enumToInt(Feature.mmx)] = .{
625662 .index = @enumToInt(Feature.mmx),
626663 .name = @tagName(Feature.mmx),
......@@ -628,7 +665,6 @@ pub const all_features = blk: {
628665 .description = "Enable MMX instructions",
629666 .dependencies = 0,
630667 };
631
632668 result[@enumToInt(Feature.movbe)] = .{
633669 .index = @enumToInt(Feature.movbe),
634670 .name = @tagName(Feature.movbe),
......@@ -636,7 +672,6 @@ pub const all_features = blk: {
636672 .description = "Support MOVBE instruction",
637673 .dependencies = 0,
638674 };
639
640675 result[@enumToInt(Feature.movdir64b)] = .{
641676 .index = @enumToInt(Feature.movdir64b),
642677 .name = @tagName(Feature.movdir64b),
......@@ -644,7 +679,6 @@ pub const all_features = blk: {
644679 .description = "Support movdir64b instruction",
645680 .dependencies = 0,
646681 };
647
648682 result[@enumToInt(Feature.movdiri)] = .{
649683 .index = @enumToInt(Feature.movdiri),
650684 .name = @tagName(Feature.movdiri),
......@@ -652,7 +686,6 @@ pub const all_features = blk: {
652686 .description = "Support movdiri instruction",
653687 .dependencies = 0,
654688 };
655
656689 result[@enumToInt(Feature.mpx)] = .{
657690 .index = @enumToInt(Feature.mpx),
658691 .name = @tagName(Feature.mpx),
......@@ -660,7 +693,6 @@ pub const all_features = blk: {
660693 .description = "Support MPX instructions",
661694 .dependencies = 0,
662695 };
663
664696 result[@enumToInt(Feature.mwaitx)] = .{
665697 .index = @enumToInt(Feature.mwaitx),
666698 .name = @tagName(Feature.mwaitx),
......@@ -668,23 +700,6 @@ pub const all_features = blk: {
668700 .description = "Enable MONITORX/MWAITX timer functionality",
669701 .dependencies = 0,
670702 };
671
672 result[@enumToInt(Feature.macrofusion)] = .{
673 .index = @enumToInt(Feature.macrofusion),
674 .name = @tagName(Feature.macrofusion),
675 .llvm_name = "macrofusion",
676 .description = "Various instructions can be fused with conditional branches",
677 .dependencies = 0,
678 };
679
680 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
681 .index = @enumToInt(Feature.merge_to_threeway_branch),
682 .name = @tagName(Feature.merge_to_threeway_branch),
683 .llvm_name = "merge-to-threeway-branch",
684 .description = "Merge branches to a three-way conditional branch",
685 .dependencies = 0,
686 };
687
688703 result[@enumToInt(Feature.nopl)] = .{
689704 .index = @enumToInt(Feature.nopl),
690705 .name = @tagName(Feature.nopl),
......@@ -692,17 +707,22 @@ pub const all_features = blk: {
692707 .description = "Enable NOPL instruction",
693708 .dependencies = 0,
694709 };
695
710 result[@enumToInt(Feature.pad_short_functions)] = .{
711 .index = @enumToInt(Feature.pad_short_functions),
712 .name = @tagName(Feature.pad_short_functions),
713 .llvm_name = "pad-short-functions",
714 .description = "Pad short functions",
715 .dependencies = 0,
716 };
696717 result[@enumToInt(Feature.pclmul)] = .{
697718 .index = @enumToInt(Feature.pclmul),
698719 .name = @tagName(Feature.pclmul),
699720 .llvm_name = "pclmul",
700721 .description = "Enable packed carry-less multiplication instructions",
701722 .dependencies = featureSet(&[_]Feature{
702 .sse,
723 .sse2,
703724 }),
704725 };
705
706726 result[@enumToInt(Feature.pconfig)] = .{
707727 .index = @enumToInt(Feature.pconfig),
708728 .name = @tagName(Feature.pconfig),
......@@ -710,17 +730,6 @@ pub const all_features = blk: {
710730 .description = "platform configuration instruction",
711731 .dependencies = 0,
712732 };
713
714 result[@enumToInt(Feature.avx512pf)] = .{
715 .index = @enumToInt(Feature.avx512pf),
716 .name = @tagName(Feature.avx512pf),
717 .llvm_name = "avx512pf",
718 .description = "Enable AVX-512 PreFetch Instructions",
719 .dependencies = featureSet(&[_]Feature{
720 .sse,
721 }),
722 };
723
724733 result[@enumToInt(Feature.pku)] = .{
725734 .index = @enumToInt(Feature.pku),
726735 .name = @tagName(Feature.pku),
......@@ -728,7 +737,6 @@ pub const all_features = blk: {
728737 .description = "Enable protection keys",
729738 .dependencies = 0,
730739 };
731
732740 result[@enumToInt(Feature.popcnt)] = .{
733741 .index = @enumToInt(Feature.popcnt),
734742 .name = @tagName(Feature.popcnt),
......@@ -736,15 +744,13 @@ pub const all_features = blk: {
736744 .description = "Support POPCNT instruction",
737745 .dependencies = 0,
738746 };
739
740 result[@enumToInt(Feature.false_deps_popcnt)] = .{
741 .index = @enumToInt(Feature.false_deps_popcnt),
742 .name = @tagName(Feature.false_deps_popcnt),
743 .llvm_name = "false-deps-popcnt",
744 .description = "POPCNT has a false dependency on dest register",
747 result[@enumToInt(Feature.prefer_256_bit)] = .{
748 .index = @enumToInt(Feature.prefer_256_bit),
749 .name = @tagName(Feature.prefer_256_bit),
750 .llvm_name = "prefer-256-bit",
751 .description = "Prefer 256-bit AVX instructions",
745752 .dependencies = 0,
746753 };
747
748754 result[@enumToInt(Feature.prefetchwt1)] = .{
749755 .index = @enumToInt(Feature.prefetchwt1),
750756 .name = @tagName(Feature.prefetchwt1),
......@@ -752,7 +758,6 @@ pub const all_features = blk: {
752758 .description = "Prefetch with Intent to Write and T1 Hint",
753759 .dependencies = 0,
754760 };
755
756761 result[@enumToInt(Feature.prfchw)] = .{
757762 .index = @enumToInt(Feature.prfchw),
758763 .name = @tagName(Feature.prfchw),
......@@ -760,7 +765,6 @@ pub const all_features = blk: {
760765 .description = "Support PRFCHW instructions",
761766 .dependencies = 0,
762767 };
763
764768 result[@enumToInt(Feature.ptwrite)] = .{
765769 .index = @enumToInt(Feature.ptwrite),
766770 .name = @tagName(Feature.ptwrite),
......@@ -768,23 +772,6 @@ pub const all_features = blk: {
768772 .description = "Support ptwrite instruction",
769773 .dependencies = 0,
770774 };
771
772 result[@enumToInt(Feature.pad_short_functions)] = .{
773 .index = @enumToInt(Feature.pad_short_functions),
774 .name = @tagName(Feature.pad_short_functions),
775 .llvm_name = "pad-short-functions",
776 .description = "Pad short functions",
777 .dependencies = 0,
778 };
779
780 result[@enumToInt(Feature.prefer_256_bit)] = .{
781 .index = @enumToInt(Feature.prefer_256_bit),
782 .name = @tagName(Feature.prefer_256_bit),
783 .llvm_name = "prefer-256-bit",
784 .description = "Prefer 256-bit AVX instructions",
785 .dependencies = 0,
786 };
787
788775 result[@enumToInt(Feature.rdpid)] = .{
789776 .index = @enumToInt(Feature.rdpid),
790777 .name = @tagName(Feature.rdpid),
......@@ -792,7 +779,6 @@ pub const all_features = blk: {
792779 .description = "Support RDPID instructions",
793780 .dependencies = 0,
794781 };
795
796782 result[@enumToInt(Feature.rdrnd)] = .{
797783 .index = @enumToInt(Feature.rdrnd),
798784 .name = @tagName(Feature.rdrnd),
......@@ -800,7 +786,6 @@ pub const all_features = blk: {
800786 .description = "Support RDRAND instruction",
801787 .dependencies = 0,
802788 };
803
804789 result[@enumToInt(Feature.rdseed)] = .{
805790 .index = @enumToInt(Feature.rdseed),
806791 .name = @tagName(Feature.rdseed),
......@@ -808,26 +793,16 @@ pub const all_features = blk: {
808793 .description = "Support RDSEED instruction",
809794 .dependencies = 0,
810795 };
811
812 result[@enumToInt(Feature.rtm)] = .{
813 .index = @enumToInt(Feature.rtm),
814 .name = @tagName(Feature.rtm),
815 .llvm_name = "rtm",
816 .description = "Support RTM instructions",
817 .dependencies = 0,
818 };
819
820796 result[@enumToInt(Feature.retpoline)] = .{
821797 .index = @enumToInt(Feature.retpoline),
822798 .name = @tagName(Feature.retpoline),
823799 .llvm_name = "retpoline",
824800 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",
825801 .dependencies = featureSet(&[_]Feature{
826 .retpoline_indirect_calls,
827802 .retpoline_indirect_branches,
803 .retpoline_indirect_calls,
828804 }),
829805 };
830
831806 result[@enumToInt(Feature.retpoline_external_thunk)] = .{
832807 .index = @enumToInt(Feature.retpoline_external_thunk),
833808 .name = @tagName(Feature.retpoline_external_thunk),
......@@ -837,7 +812,6 @@ pub const all_features = blk: {
837812 .retpoline_indirect_calls,
838813 }),
839814 };
840
841815 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{
842816 .index = @enumToInt(Feature.retpoline_indirect_branches),
843817 .name = @tagName(Feature.retpoline_indirect_branches),
......@@ -845,7 +819,6 @@ pub const all_features = blk: {
845819 .description = "Remove speculation of indirect branches from the generated code",
846820 .dependencies = 0,
847821 };
848
849822 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{
850823 .index = @enumToInt(Feature.retpoline_indirect_calls),
851824 .name = @tagName(Feature.retpoline_indirect_calls),
......@@ -853,109 +826,43 @@ pub const all_features = blk: {
853826 .description = "Remove speculation of indirect calls from the generated code",
854827 .dependencies = 0,
855828 };
856
857 result[@enumToInt(Feature.sgx)] = .{
858 .index = @enumToInt(Feature.sgx),
859 .name = @tagName(Feature.sgx),
860 .llvm_name = "sgx",
861 .description = "Enable Software Guard Extensions",
862 .dependencies = 0,
863 };
864
865 result[@enumToInt(Feature.sha)] = .{
866 .index = @enumToInt(Feature.sha),
867 .name = @tagName(Feature.sha),
868 .llvm_name = "sha",
869 .description = "Enable SHA instructions",
870 .dependencies = featureSet(&[_]Feature{
871 .sse,
872 }),
873 };
874
875 result[@enumToInt(Feature.shstk)] = .{
876 .index = @enumToInt(Feature.shstk),
877 .name = @tagName(Feature.shstk),
878 .llvm_name = "shstk",
879 .description = "Support CET Shadow-Stack instructions",
880 .dependencies = 0,
881 };
882
883 result[@enumToInt(Feature.sse)] = .{
884 .index = @enumToInt(Feature.sse),
885 .name = @tagName(Feature.sse),
886 .llvm_name = "sse",
887 .description = "Enable SSE instructions",
829 result[@enumToInt(Feature.rtm)] = .{
830 .index = @enumToInt(Feature.rtm),
831 .name = @tagName(Feature.rtm),
832 .llvm_name = "rtm",
833 .description = "Support RTM instructions",
888834 .dependencies = 0,
889835 };
890
891 result[@enumToInt(Feature.sse2)] = .{
892 .index = @enumToInt(Feature.sse2),
893 .name = @tagName(Feature.sse2),
894 .llvm_name = "sse2",
895 .description = "Enable SSE2 instructions",
896 .dependencies = featureSet(&[_]Feature{
897 .sse,
898 }),
899 };
900
901 result[@enumToInt(Feature.sse3)] = .{
902 .index = @enumToInt(Feature.sse3),
903 .name = @tagName(Feature.sse3),
904 .llvm_name = "sse3",
905 .description = "Enable SSE3 instructions",
906 .dependencies = featureSet(&[_]Feature{
907 .sse,
908 }),
909 };
910
911 result[@enumToInt(Feature.sse4a)] = .{
912 .index = @enumToInt(Feature.sse4a),
913 .name = @tagName(Feature.sse4a),
914 .llvm_name = "sse4a",
915 .description = "Support SSE 4a instructions",
916 .dependencies = featureSet(&[_]Feature{
917 .sse,
918 }),
919 };
920
921 result[@enumToInt(Feature.sse4_1)] = .{
922 .index = @enumToInt(Feature.sse4_1),
923 .name = @tagName(Feature.sse4_1),
924 .llvm_name = "sse4.1",
925 .description = "Enable SSE 4.1 instructions",
926 .dependencies = featureSet(&[_]Feature{
927 .sse,
928 }),
929 };
930
931 result[@enumToInt(Feature.sse4_2)] = .{
932 .index = @enumToInt(Feature.sse4_2),
933 .name = @tagName(Feature.sse4_2),
934 .llvm_name = "sse4.2",
935 .description = "Enable SSE 4.2 instructions",
936 .dependencies = featureSet(&[_]Feature{
937 .sse,
938 }),
939 };
940
941 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
942 .index = @enumToInt(Feature.sse_unaligned_mem),
943 .name = @tagName(Feature.sse_unaligned_mem),
944 .llvm_name = "sse-unaligned-mem",
945 .description = "Allow unaligned memory operands with SSE instructions",
836 result[@enumToInt(Feature.sahf)] = .{
837 .index = @enumToInt(Feature.sahf),
838 .name = @tagName(Feature.sahf),
839 .llvm_name = "sahf",
840 .description = "Support LAHF and SAHF instructions",
946841 .dependencies = 0,
947842 };
948
949 result[@enumToInt(Feature.ssse3)] = .{
950 .index = @enumToInt(Feature.ssse3),
951 .name = @tagName(Feature.ssse3),
952 .llvm_name = "ssse3",
953 .description = "Enable SSSE3 instructions",
843 result[@enumToInt(Feature.sgx)] = .{
844 .index = @enumToInt(Feature.sgx),
845 .name = @tagName(Feature.sgx),
846 .llvm_name = "sgx",
847 .description = "Enable Software Guard Extensions",
848 .dependencies = 0,
849 };
850 result[@enumToInt(Feature.sha)] = .{
851 .index = @enumToInt(Feature.sha),
852 .name = @tagName(Feature.sha),
853 .llvm_name = "sha",
854 .description = "Enable SHA instructions",
954855 .dependencies = featureSet(&[_]Feature{
955 .sse,
856 .sse2,
956857 }),
957858 };
958
859 result[@enumToInt(Feature.shstk)] = .{
860 .index = @enumToInt(Feature.shstk),
861 .name = @tagName(Feature.shstk),
862 .llvm_name = "shstk",
863 .description = "Support CET Shadow-Stack instructions",
864 .dependencies = 0,
865 };
959866 result[@enumToInt(Feature.slow_3ops_lea)] = .{
960867 .index = @enumToInt(Feature.slow_3ops_lea),
961868 .name = @tagName(Feature.slow_3ops_lea),
......@@ -963,23 +870,6 @@ pub const all_features = blk: {
963870 .description = "LEA instruction with 3 ops or certain registers is slow",
964871 .dependencies = 0,
965872 };
966
967 result[@enumToInt(Feature.idivl_to_divb)] = .{
968 .index = @enumToInt(Feature.idivl_to_divb),
969 .name = @tagName(Feature.idivl_to_divb),
970 .llvm_name = "idivl-to-divb",
971 .description = "Use 8-bit divide for positive values less than 256",
972 .dependencies = 0,
973 };
974
975 result[@enumToInt(Feature.idivq_to_divl)] = .{
976 .index = @enumToInt(Feature.idivq_to_divl),
977 .name = @tagName(Feature.idivq_to_divl),
978 .llvm_name = "idivq-to-divl",
979 .description = "Use 32-bit divide for positive values less than 2^32",
980 .dependencies = 0,
981 };
982
983873 result[@enumToInt(Feature.slow_incdec)] = .{
984874 .index = @enumToInt(Feature.slow_incdec),
985875 .name = @tagName(Feature.slow_incdec),
......@@ -987,7 +877,6 @@ pub const all_features = blk: {
987877 .description = "INC and DEC instructions are slower than ADD and SUB",
988878 .dependencies = 0,
989879 };
990
991880 result[@enumToInt(Feature.slow_lea)] = .{
992881 .index = @enumToInt(Feature.slow_lea),
993882 .name = @tagName(Feature.slow_lea),
......@@ -995,7 +884,6 @@ pub const all_features = blk: {
995884 .description = "LEA instruction with certain arguments is slow",
996885 .dependencies = 0,
997886 };
998
999887 result[@enumToInt(Feature.slow_pmaddwd)] = .{
1000888 .index = @enumToInt(Feature.slow_pmaddwd),
1001889 .name = @tagName(Feature.slow_pmaddwd),
......@@ -1003,7 +891,6 @@ pub const all_features = blk: {
1003891 .description = "PMADDWD is slower than PMULLD",
1004892 .dependencies = 0,
1005893 };
1006
1007894 result[@enumToInt(Feature.slow_pmulld)] = .{
1008895 .index = @enumToInt(Feature.slow_pmulld),
1009896 .name = @tagName(Feature.slow_pmulld),
......@@ -1011,7 +898,6 @@ pub const all_features = blk: {
1011898 .description = "PMULLD instruction is slow",
1012899 .dependencies = 0,
1013900 };
1014
1015901 result[@enumToInt(Feature.slow_shld)] = .{
1016902 .index = @enumToInt(Feature.slow_shld),
1017903 .name = @tagName(Feature.slow_shld),
......@@ -1019,7 +905,6 @@ pub const all_features = blk: {
1019905 .description = "SHLD instruction is slow",
1020906 .dependencies = 0,
1021907 };
1022
1023908 result[@enumToInt(Feature.slow_two_mem_ops)] = .{
1024909 .index = @enumToInt(Feature.slow_two_mem_ops),
1025910 .name = @tagName(Feature.slow_two_mem_ops),
......@@ -1027,7 +912,6 @@ pub const all_features = blk: {
1027912 .description = "Two memory operand instructions are slow",
1028913 .dependencies = 0,
1029914 };
1030
1031915 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{
1032916 .index = @enumToInt(Feature.slow_unaligned_mem_16),
1033917 .name = @tagName(Feature.slow_unaligned_mem_16),
......@@ -1035,7 +919,6 @@ pub const all_features = blk: {
1035919 .description = "Slow unaligned 16-byte memory access",
1036920 .dependencies = 0,
1037921 };
1038
1039922 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{
1040923 .index = @enumToInt(Feature.slow_unaligned_mem_32),
1041924 .name = @tagName(Feature.slow_unaligned_mem_32),
......@@ -1043,7 +926,6 @@ pub const all_features = blk: {
1043926 .description = "Slow unaligned 32-byte memory access",
1044927 .dependencies = 0,
1045928 };
1046
1047929 result[@enumToInt(Feature.soft_float)] = .{
1048930 .index = @enumToInt(Feature.soft_float),
1049931 .name = @tagName(Feature.soft_float),
......@@ -1051,95 +933,101 @@ pub const all_features = blk: {
1051933 .description = "Use software floating point features",
1052934 .dependencies = 0,
1053935 };
1054
1055 result[@enumToInt(Feature.tbm)] = .{
1056 .index = @enumToInt(Feature.tbm),
1057 .name = @tagName(Feature.tbm),
1058 .llvm_name = "tbm",
1059 .description = "Enable TBM instructions",
936 result[@enumToInt(Feature.sse)] = .{
937 .index = @enumToInt(Feature.sse),
938 .name = @tagName(Feature.sse),
939 .llvm_name = "sse",
940 .description = "Enable SSE instructions",
1060941 .dependencies = 0,
1061942 };
1062
1063 result[@enumToInt(Feature.vaes)] = .{
1064 .index = @enumToInt(Feature.vaes),
1065 .name = @tagName(Feature.vaes),
1066 .llvm_name = "vaes",
1067 .description = "Promote selected AES instructions to AVX512/AVX registers",
943 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
944 .index = @enumToInt(Feature.sse_unaligned_mem),
945 .name = @tagName(Feature.sse_unaligned_mem),
946 .llvm_name = "sse-unaligned-mem",
947 .description = "Allow unaligned memory operands with SSE instructions",
948 .dependencies = 0,
949 };
950 result[@enumToInt(Feature.sse2)] = .{
951 .index = @enumToInt(Feature.sse2),
952 .name = @tagName(Feature.sse2),
953 .llvm_name = "sse2",
954 .description = "Enable SSE2 instructions",
1068955 .dependencies = featureSet(&[_]Feature{
1069956 .sse,
1070957 }),
1071958 };
1072
1073 result[@enumToInt(Feature.avx512vbmi)] = .{
1074 .index = @enumToInt(Feature.avx512vbmi),
1075 .name = @tagName(Feature.avx512vbmi),
1076 .llvm_name = "avx512vbmi",
1077 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
959 result[@enumToInt(Feature.sse3)] = .{
960 .index = @enumToInt(Feature.sse3),
961 .name = @tagName(Feature.sse3),
962 .llvm_name = "sse3",
963 .description = "Enable SSE3 instructions",
1078964 .dependencies = featureSet(&[_]Feature{
1079 .sse,
965 .sse2,
1080966 }),
1081967 };
1082
1083 result[@enumToInt(Feature.avx512vbmi2)] = .{
1084 .index = @enumToInt(Feature.avx512vbmi2),
1085 .name = @tagName(Feature.avx512vbmi2),
1086 .llvm_name = "avx512vbmi2",
1087 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
968 result[@enumToInt(Feature.sse4_1)] = .{
969 .index = @enumToInt(Feature.sse4_1),
970 .name = @tagName(Feature.sse4_1),
971 .llvm_name = "sse4.1",
972 .description = "Enable SSE 4.1 instructions",
1088973 .dependencies = featureSet(&[_]Feature{
1089 .sse,
974 .ssse3,
1090975 }),
1091976 };
1092
1093 result[@enumToInt(Feature.avx512vl)] = .{
1094 .index = @enumToInt(Feature.avx512vl),
1095 .name = @tagName(Feature.avx512vl),
1096 .llvm_name = "avx512vl",
1097 .description = "Enable AVX-512 Vector Length eXtensions",
977 result[@enumToInt(Feature.sse4_2)] = .{
978 .index = @enumToInt(Feature.sse4_2),
979 .name = @tagName(Feature.sse4_2),
980 .llvm_name = "sse4.2",
981 .description = "Enable SSE 4.2 instructions",
1098982 .dependencies = featureSet(&[_]Feature{
1099 .sse,
983 .sse4_1,
1100984 }),
1101985 };
1102
1103 result[@enumToInt(Feature.avx512vnni)] = .{
1104 .index = @enumToInt(Feature.avx512vnni),
1105 .name = @tagName(Feature.avx512vnni),
1106 .llvm_name = "avx512vnni",
1107 .description = "Enable AVX-512 Vector Neural Network Instructions",
986 result[@enumToInt(Feature.sse4a)] = .{
987 .index = @enumToInt(Feature.sse4a),
988 .name = @tagName(Feature.sse4a),
989 .llvm_name = "sse4a",
990 .description = "Support SSE 4a instructions",
1108991 .dependencies = featureSet(&[_]Feature{
1109 .sse,
992 .sse3,
1110993 }),
1111994 };
1112
1113 result[@enumToInt(Feature.avx512vp2intersect)] = .{
1114 .index = @enumToInt(Feature.avx512vp2intersect),
1115 .name = @tagName(Feature.avx512vp2intersect),
1116 .llvm_name = "avx512vp2intersect",
1117 .description = "Enable AVX-512 vp2intersect",
995 result[@enumToInt(Feature.ssse3)] = .{
996 .index = @enumToInt(Feature.ssse3),
997 .name = @tagName(Feature.ssse3),
998 .llvm_name = "ssse3",
999 .description = "Enable SSSE3 instructions",
11181000 .dependencies = featureSet(&[_]Feature{
1119 .sse,
1001 .sse3,
1002 }),
1003 };
1004 result[@enumToInt(Feature.tbm)] = .{
1005 .index = @enumToInt(Feature.tbm),
1006 .name = @tagName(Feature.tbm),
1007 .llvm_name = "tbm",
1008 .description = "Enable TBM instructions",
1009 .dependencies = 0,
1010 };
1011 result[@enumToInt(Feature.vaes)] = .{
1012 .index = @enumToInt(Feature.vaes),
1013 .name = @tagName(Feature.vaes),
1014 .llvm_name = "vaes",
1015 .description = "Promote selected AES instructions to AVX512/AVX registers",
1016 .dependencies = featureSet(&[_]Feature{
1017 .aes,
1018 .avx,
11201019 }),
11211020 };
1122
11231021 result[@enumToInt(Feature.vpclmulqdq)] = .{
11241022 .index = @enumToInt(Feature.vpclmulqdq),
11251023 .name = @tagName(Feature.vpclmulqdq),
11261024 .llvm_name = "vpclmulqdq",
11271025 .description = "Enable vpclmulqdq instructions",
11281026 .dependencies = featureSet(&[_]Feature{
1129 .sse,
1130 }),
1131 };
1132
1133 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
1134 .index = @enumToInt(Feature.avx512vpopcntdq),
1135 .name = @tagName(Feature.avx512vpopcntdq),
1136 .llvm_name = "avx512vpopcntdq",
1137 .description = "Enable AVX-512 Population Count Instructions",
1138 .dependencies = featureSet(&[_]Feature{
1139 .sse,
1027 .avx,
1028 .pclmul,
11401029 }),
11411030 };
1142
11431031 result[@enumToInt(Feature.waitpkg)] = .{
11441032 .index = @enumToInt(Feature.waitpkg),
11451033 .name = @tagName(Feature.waitpkg),
......@@ -1147,7 +1035,6 @@ pub const all_features = blk: {
11471035 .description = "Wait and pause enhancements",
11481036 .dependencies = 0,
11491037 };
1150
11511038 result[@enumToInt(Feature.wbnoinvd)] = .{
11521039 .index = @enumToInt(Feature.wbnoinvd),
11531040 .name = @tagName(Feature.wbnoinvd),
......@@ -1155,7 +1042,6 @@ pub const all_features = blk: {
11551042 .description = "Write Back No Invalidate",
11561043 .dependencies = 0,
11571044 };
1158
11591045 result[@enumToInt(Feature.x87)] = .{
11601046 .index = @enumToInt(Feature.x87),
11611047 .name = @tagName(Feature.x87),
......@@ -1163,17 +1049,15 @@ pub const all_features = blk: {
11631049 .description = "Enable X87 float instructions",
11641050 .dependencies = 0,
11651051 };
1166
11671052 result[@enumToInt(Feature.xop)] = .{
11681053 .index = @enumToInt(Feature.xop),
11691054 .name = @tagName(Feature.xop),
11701055 .llvm_name = "xop",
11711056 .description = "Enable XOP instructions",
11721057 .dependencies = featureSet(&[_]Feature{
1173 .sse,
1058 .fma4,
11741059 }),
11751060 };
1176
11771061 result[@enumToInt(Feature.xsave)] = .{
11781062 .index = @enumToInt(Feature.xsave),
11791063 .name = @tagName(Feature.xsave),
......@@ -1181,7 +1065,6 @@ pub const all_features = blk: {
11811065 .description = "Support xsave instructions",
11821066 .dependencies = 0,
11831067 };
1184
11851068 result[@enumToInt(Feature.xsavec)] = .{
11861069 .index = @enumToInt(Feature.xsavec),
11871070 .name = @tagName(Feature.xsavec),
......@@ -1189,7 +1072,6 @@ pub const all_features = blk: {
11891072 .description = "Support xsavec instructions",
11901073 .dependencies = 0,
11911074 };
1192
11931075 result[@enumToInt(Feature.xsaveopt)] = .{
11941076 .index = @enumToInt(Feature.xsaveopt),
11951077 .name = @tagName(Feature.xsaveopt),
......@@ -1197,7 +1079,6 @@ pub const all_features = blk: {
11971079 .description = "Support xsaveopt instructions",
11981080 .dependencies = 0,
11991081 };
1200
12011082 result[@enumToInt(Feature.xsaves)] = .{
12021083 .index = @enumToInt(Feature.xsaves),
12031084 .name = @tagName(Feature.xsaves),
......@@ -1205,7 +1086,6 @@ pub const all_features = blk: {
12051086 .description = "Support xsaves instructions",
12061087 .dependencies = 0,
12071088 };
1208
12091089 break :blk result;
12101090};
12111091
......@@ -1214,30 +1094,26 @@ pub const cpu = struct {
12141094 .name = "amdfam10",
12151095 .llvm_name = "amdfam10",
12161096 .features = featureSet(&[_]Feature{
1217 .mmx,
12181097 .@"3dnowa",
12191098 .@"64bit",
12201099 .cmov,
1221 .cx8,
12221100 .cx16,
1223 .fxsr,
1101 .cx8,
12241102 .fast_scalar_shift_masks,
1225 .sahf,
1103 .fxsr,
12261104 .lzcnt,
12271105 .nopl,
12281106 .popcnt,
1229 .sse,
1230 .sse4a,
1107 .sahf,
12311108 .slow_shld,
1109 .sse4a,
12321110 .x87,
12331111 }),
12341112 };
1235
12361113 pub const athlon = Cpu{
12371114 .name = "athlon",
12381115 .llvm_name = "athlon",
12391116 .features = featureSet(&[_]Feature{
1240 .mmx,
12411117 .@"3dnowa",
12421118 .cmov,
12431119 .cx8,
......@@ -1247,66 +1123,57 @@ pub const cpu = struct {
12471123 .x87,
12481124 }),
12491125 };
1250
1251 pub const athlon4 = Cpu{
1126 pub const athlon_4 = Cpu{
12521127 .name = "athlon_4",
12531128 .llvm_name = "athlon-4",
12541129 .features = featureSet(&[_]Feature{
1255 .mmx,
12561130 .@"3dnowa",
12571131 .cmov,
12581132 .cx8,
12591133 .fxsr,
12601134 .nopl,
1261 .sse,
12621135 .slow_shld,
12631136 .slow_unaligned_mem_16,
1137 .sse,
12641138 .x87,
12651139 }),
12661140 };
1267
12681141 pub const athlon_fx = Cpu{
12691142 .name = "athlon_fx",
12701143 .llvm_name = "athlon-fx",
12711144 .features = featureSet(&[_]Feature{
1272 .mmx,
12731145 .@"3dnowa",
12741146 .@"64bit",
12751147 .cmov,
12761148 .cx8,
1277 .fxsr,
12781149 .fast_scalar_shift_masks,
1150 .fxsr,
12791151 .nopl,
1280 .sse,
1281 .sse2,
12821152 .slow_shld,
12831153 .slow_unaligned_mem_16,
1154 .sse2,
12841155 .x87,
12851156 }),
12861157 };
1287
12881158 pub const athlon_mp = Cpu{
12891159 .name = "athlon_mp",
12901160 .llvm_name = "athlon-mp",
12911161 .features = featureSet(&[_]Feature{
1292 .mmx,
12931162 .@"3dnowa",
12941163 .cmov,
12951164 .cx8,
12961165 .fxsr,
12971166 .nopl,
1298 .sse,
12991167 .slow_shld,
13001168 .slow_unaligned_mem_16,
1169 .sse,
13011170 .x87,
13021171 }),
13031172 };
1304
13051173 pub const athlon_tbird = Cpu{
13061174 .name = "athlon_tbird",
13071175 .llvm_name = "athlon-tbird",
13081176 .features = featureSet(&[_]Feature{
1309 .mmx,
13101177 .@"3dnowa",
13111178 .cmov,
13121179 .cx8,
......@@ -1316,129 +1183,113 @@ pub const cpu = struct {
13161183 .x87,
13171184 }),
13181185 };
1319
13201186 pub const athlon_xp = Cpu{
13211187 .name = "athlon_xp",
13221188 .llvm_name = "athlon-xp",
13231189 .features = featureSet(&[_]Feature{
1324 .mmx,
13251190 .@"3dnowa",
13261191 .cmov,
13271192 .cx8,
13281193 .fxsr,
13291194 .nopl,
1330 .sse,
13311195 .slow_shld,
13321196 .slow_unaligned_mem_16,
1197 .sse,
13331198 .x87,
13341199 }),
13351200 };
1336
13371201 pub const athlon64 = Cpu{
13381202 .name = "athlon64",
13391203 .llvm_name = "athlon64",
13401204 .features = featureSet(&[_]Feature{
1341 .mmx,
13421205 .@"3dnowa",
13431206 .@"64bit",
13441207 .cmov,
13451208 .cx8,
1346 .fxsr,
13471209 .fast_scalar_shift_masks,
1210 .fxsr,
13481211 .nopl,
1349 .sse,
1350 .sse2,
13511212 .slow_shld,
13521213 .slow_unaligned_mem_16,
1214 .sse2,
13531215 .x87,
13541216 }),
13551217 };
1356
13571218 pub const athlon64_sse3 = Cpu{
13581219 .name = "athlon64_sse3",
13591220 .llvm_name = "athlon64-sse3",
13601221 .features = featureSet(&[_]Feature{
1361 .mmx,
13621222 .@"3dnowa",
13631223 .@"64bit",
13641224 .cmov,
1365 .cx8,
13661225 .cx16,
1367 .fxsr,
1226 .cx8,
13681227 .fast_scalar_shift_masks,
1228 .fxsr,
13691229 .nopl,
1370 .sse,
1371 .sse3,
13721230 .slow_shld,
13731231 .slow_unaligned_mem_16,
1232 .sse3,
13741233 .x87,
13751234 }),
13761235 };
1377
13781236 pub const atom = Cpu{
13791237 .name = "atom",
13801238 .llvm_name = "atom",
13811239 .features = featureSet(&[_]Feature{
13821240 .@"64bit",
13831241 .cmov,
1384 .cx8,
13851242 .cx16,
1243 .cx8,
13861244 .fxsr,
1387 .sahf,
1245 .idivl_to_divb,
1246 .idivq_to_divl,
13881247 .lea_sp,
13891248 .lea_uses_ag,
13901249 .mmx,
13911250 .movbe,
13921251 .nopl,
13931252 .pad_short_functions,
1394 .sse,
1395 .ssse3,
1396 .idivl_to_divb,
1397 .idivq_to_divl,
1253 .sahf,
13981254 .slow_two_mem_ops,
13991255 .slow_unaligned_mem_16,
1256 .ssse3,
14001257 .x87,
14011258 }),
14021259 };
1403
14041260 pub const barcelona = Cpu{
14051261 .name = "barcelona",
14061262 .llvm_name = "barcelona",
14071263 .features = featureSet(&[_]Feature{
1408 .mmx,
14091264 .@"3dnowa",
14101265 .@"64bit",
14111266 .cmov,
1412 .cx8,
14131267 .cx16,
1414 .fxsr,
1268 .cx8,
14151269 .fast_scalar_shift_masks,
1416 .sahf,
1270 .fxsr,
14171271 .lzcnt,
14181272 .nopl,
14191273 .popcnt,
1420 .sse,
1421 .sse4a,
1274 .sahf,
14221275 .slow_shld,
1276 .sse4a,
14231277 .x87,
14241278 }),
14251279 };
1426
14271280 pub const bdver1 = Cpu{
14281281 .name = "bdver1",
14291282 .llvm_name = "bdver1",
14301283 .features = featureSet(&[_]Feature{
14311284 .@"64bit",
1432 .sse,
14331285 .aes,
14341286 .branchfusion,
14351287 .cmov,
1436 .cx8,
14371288 .cx16,
1438 .fxsr,
1289 .cx8,
14391290 .fast_11bytenop,
14401291 .fast_scalar_shift_masks,
1441 .sahf,
1292 .fxsr,
14421293 .lwp,
14431294 .lzcnt,
14441295 .mmx,
......@@ -1446,32 +1297,30 @@ pub const cpu = struct {
14461297 .pclmul,
14471298 .popcnt,
14481299 .prfchw,
1300 .sahf,
14491301 .slow_shld,
14501302 .x87,
14511303 .xop,
14521304 .xsave,
14531305 }),
14541306 };
1455
14561307 pub const bdver2 = Cpu{
14571308 .name = "bdver2",
14581309 .llvm_name = "bdver2",
14591310 .features = featureSet(&[_]Feature{
14601311 .@"64bit",
1461 .sse,
14621312 .aes,
14631313 .bmi,
14641314 .branchfusion,
14651315 .cmov,
1466 .cx8,
14671316 .cx16,
1317 .cx8,
14681318 .f16c,
1469 .fma,
1470 .fxsr,
14711319 .fast_11bytenop,
14721320 .fast_bextr,
14731321 .fast_scalar_shift_masks,
1474 .sahf,
1322 .fma,
1323 .fxsr,
14751324 .lwp,
14761325 .lzcnt,
14771326 .mmx,
......@@ -1479,6 +1328,7 @@ pub const cpu = struct {
14791328 .pclmul,
14801329 .popcnt,
14811330 .prfchw,
1331 .sahf,
14821332 .slow_shld,
14831333 .tbm,
14841334 .x87,
......@@ -1486,27 +1336,24 @@ pub const cpu = struct {
14861336 .xsave,
14871337 }),
14881338 };
1489
14901339 pub const bdver3 = Cpu{
14911340 .name = "bdver3",
14921341 .llvm_name = "bdver3",
14931342 .features = featureSet(&[_]Feature{
14941343 .@"64bit",
1495 .sse,
14961344 .aes,
14971345 .bmi,
14981346 .branchfusion,
14991347 .cmov,
1500 .cx8,
15011348 .cx16,
1349 .cx8,
15021350 .f16c,
1503 .fma,
1504 .fsgsbase,
1505 .fxsr,
15061351 .fast_11bytenop,
15071352 .fast_bextr,
15081353 .fast_scalar_shift_masks,
1509 .sahf,
1354 .fma,
1355 .fsgsbase,
1356 .fxsr,
15101357 .lwp,
15111358 .lzcnt,
15121359 .mmx,
......@@ -1514,6 +1361,7 @@ pub const cpu = struct {
15141361 .pclmul,
15151362 .popcnt,
15161363 .prfchw,
1364 .sahf,
15171365 .slow_shld,
15181366 .tbm,
15191367 .x87,
......@@ -1522,29 +1370,26 @@ pub const cpu = struct {
15221370 .xsaveopt,
15231371 }),
15241372 };
1525
15261373 pub const bdver4 = Cpu{
15271374 .name = "bdver4",
15281375 .llvm_name = "bdver4",
15291376 .features = featureSet(&[_]Feature{
15301377 .@"64bit",
1531 .sse,
15321378 .aes,
15331379 .avx2,
15341380 .bmi,
15351381 .bmi2,
15361382 .branchfusion,
15371383 .cmov,
1538 .cx8,
15391384 .cx16,
1385 .cx8,
15401386 .f16c,
1541 .fma,
1542 .fsgsbase,
1543 .fxsr,
15441387 .fast_11bytenop,
15451388 .fast_bextr,
15461389 .fast_scalar_shift_masks,
1547 .sahf,
1390 .fma,
1391 .fsgsbase,
1392 .fxsr,
15481393 .lwp,
15491394 .lzcnt,
15501395 .mmx,
......@@ -1553,6 +1398,7 @@ pub const cpu = struct {
15531398 .pclmul,
15541399 .popcnt,
15551400 .prfchw,
1401 .sahf,
15561402 .slow_shld,
15571403 .tbm,
15581404 .x87,
......@@ -1561,119 +1407,110 @@ pub const cpu = struct {
15611407 .xsaveopt,
15621408 }),
15631409 };
1564
15651410 pub const bonnell = Cpu{
15661411 .name = "bonnell",
15671412 .llvm_name = "bonnell",
15681413 .features = featureSet(&[_]Feature{
15691414 .@"64bit",
15701415 .cmov,
1571 .cx8,
15721416 .cx16,
1417 .cx8,
15731418 .fxsr,
1574 .sahf,
1419 .idivl_to_divb,
1420 .idivq_to_divl,
15751421 .lea_sp,
15761422 .lea_uses_ag,
15771423 .mmx,
15781424 .movbe,
15791425 .nopl,
15801426 .pad_short_functions,
1581 .sse,
1582 .ssse3,
1583 .idivl_to_divb,
1584 .idivq_to_divl,
1427 .sahf,
15851428 .slow_two_mem_ops,
15861429 .slow_unaligned_mem_16,
1430 .ssse3,
15871431 .x87,
15881432 }),
15891433 };
1590
15911434 pub const broadwell = Cpu{
15921435 .name = "broadwell",
15931436 .llvm_name = "broadwell",
15941437 .features = featureSet(&[_]Feature{
15951438 .@"64bit",
15961439 .adx,
1597 .sse,
15981440 .avx,
15991441 .avx2,
16001442 .bmi,
16011443 .bmi2,
16021444 .cmov,
1603 .cx8,
16041445 .cx16,
1446 .cx8,
16051447 .ermsb,
16061448 .f16c,
1449 .false_deps_lzcnt_tzcnt,
1450 .false_deps_popcnt,
1451 .fast_scalar_fsqrt,
1452 .fast_shld_rotate,
1453 .fast_variable_shuffle,
16071454 .fma,
16081455 .fsgsbase,
16091456 .fxsr,
1610 .fast_shld_rotate,
1611 .fast_scalar_fsqrt,
1612 .fast_variable_shuffle,
1457 .idivq_to_divl,
16131458 .invpcid,
1614 .sahf,
16151459 .lzcnt,
1616 .false_deps_lzcnt_tzcnt,
1617 .mmx,
1618 .movbe,
16191460 .macrofusion,
16201461 .merge_to_threeway_branch,
1462 .mmx,
1463 .movbe,
16211464 .nopl,
16221465 .pclmul,
16231466 .popcnt,
1624 .false_deps_popcnt,
16251467 .prfchw,
16261468 .rdrnd,
16271469 .rdseed,
1628 .sse4_2,
1470 .sahf,
16291471 .slow_3ops_lea,
1630 .idivq_to_divl,
1472 .sse4_2,
16311473 .x87,
16321474 .xsave,
16331475 .xsaveopt,
16341476 }),
16351477 };
1636
16371478 pub const btver1 = Cpu{
16381479 .name = "btver1",
16391480 .llvm_name = "btver1",
16401481 .features = featureSet(&[_]Feature{
16411482 .@"64bit",
16421483 .cmov,
1643 .cx8,
16441484 .cx16,
1645 .fxsr,
1485 .cx8,
16461486 .fast_15bytenop,
16471487 .fast_scalar_shift_masks,
16481488 .fast_vector_shift_masks,
1649 .sahf,
1489 .fxsr,
16501490 .lzcnt,
16511491 .mmx,
16521492 .nopl,
16531493 .popcnt,
16541494 .prfchw,
1655 .sse,
1495 .sahf,
1496 .slow_shld,
16561497 .sse4a,
16571498 .ssse3,
1658 .slow_shld,
16591499 .x87,
16601500 }),
16611501 };
1662
16631502 pub const btver2 = Cpu{
16641503 .name = "btver2",
16651504 .llvm_name = "btver2",
16661505 .features = featureSet(&[_]Feature{
16671506 .@"64bit",
1668 .sse,
16691507 .aes,
16701508 .avx,
16711509 .bmi,
16721510 .cmov,
1673 .cx8,
16741511 .cx16,
1512 .cx8,
16751513 .f16c,
1676 .fxsr,
16771514 .fast_15bytenop,
16781515 .fast_bextr,
16791516 .fast_hops,
......@@ -1681,7 +1518,7 @@ pub const cpu = struct {
16811518 .fast_partial_ymm_or_zmm_write,
16821519 .fast_scalar_shift_masks,
16831520 .fast_vector_shift_masks,
1684 .sahf,
1521 .fxsr,
16851522 .lzcnt,
16861523 .mmx,
16871524 .movbe,
......@@ -1689,27 +1526,25 @@ pub const cpu = struct {
16891526 .pclmul,
16901527 .popcnt,
16911528 .prfchw,
1529 .sahf,
1530 .slow_shld,
16921531 .sse4a,
16931532 .ssse3,
1694 .slow_shld,
16951533 .x87,
16961534 .xsave,
16971535 .xsaveopt,
16981536 }),
16991537 };
1700
17011538 pub const c3 = Cpu{
17021539 .name = "c3",
17031540 .llvm_name = "c3",
17041541 .features = featureSet(&[_]Feature{
1705 .mmx,
17061542 .@"3dnow",
17071543 .slow_unaligned_mem_16,
17081544 .x87,
17091545 }),
17101546 };
1711
1712 pub const c32 = Cpu{
1547 pub const c3_2 = Cpu{
17131548 .name = "c3_2",
17141549 .llvm_name = "c3-2",
17151550 .features = featureSet(&[_]Feature{
......@@ -1717,51 +1552,51 @@ pub const cpu = struct {
17171552 .cx8,
17181553 .fxsr,
17191554 .mmx,
1720 .sse,
17211555 .slow_unaligned_mem_16,
1556 .sse,
17221557 .x87,
17231558 }),
17241559 };
1725
17261560 pub const cannonlake = Cpu{
17271561 .name = "cannonlake",
17281562 .llvm_name = "cannonlake",
17291563 .features = featureSet(&[_]Feature{
17301564 .@"64bit",
17311565 .adx,
1732 .sse,
17331566 .aes,
17341567 .avx,
17351568 .avx2,
1569 .avx512bw,
1570 .avx512cd,
1571 .avx512dq,
17361572 .avx512f,
1573 .avx512ifma,
1574 .avx512vbmi,
1575 .avx512vl,
17371576 .bmi,
17381577 .bmi2,
1739 .avx512bw,
1740 .avx512cd,
17411578 .clflushopt,
17421579 .cmov,
1743 .cx8,
17441580 .cx16,
1745 .avx512dq,
1581 .cx8,
17461582 .ermsb,
17471583 .f16c,
1748 .fma,
1749 .fsgsbase,
1750 .fxsr,
1751 .fast_shld_rotate,
1584 .fast_gather,
17521585 .fast_scalar_fsqrt,
1586 .fast_shld_rotate,
17531587 .fast_variable_shuffle,
17541588 .fast_vector_fsqrt,
1755 .fast_gather,
1756 .avx512ifma,
1589 .fma,
1590 .fsgsbase,
1591 .fxsr,
1592 .idivq_to_divl,
17571593 .invpcid,
1758 .sahf,
17591594 .lzcnt,
1595 .macrofusion,
1596 .merge_to_threeway_branch,
17601597 .mmx,
17611598 .movbe,
17621599 .mpx,
1763 .macrofusion,
1764 .merge_to_threeway_branch,
17651600 .nopl,
17661601 .pclmul,
17671602 .pku,
......@@ -1769,13 +1604,11 @@ pub const cpu = struct {
17691604 .prfchw,
17701605 .rdrnd,
17711606 .rdseed,
1607 .sahf,
17721608 .sgx,
17731609 .sha,
1774 .sse4_2,
17751610 .slow_3ops_lea,
1776 .idivq_to_divl,
1777 .avx512vbmi,
1778 .avx512vl,
1611 .sse4_2,
17791612 .x87,
17801613 .xsave,
17811614 .xsavec,
......@@ -1783,59 +1616,57 @@ pub const cpu = struct {
17831616 .xsaves,
17841617 }),
17851618 };
1786
17871619 pub const cascadelake = Cpu{
17881620 .name = "cascadelake",
17891621 .llvm_name = "cascadelake",
17901622 .features = featureSet(&[_]Feature{
17911623 .@"64bit",
17921624 .adx,
1793 .sse,
17941625 .aes,
17951626 .avx,
17961627 .avx2,
1628 .avx512bw,
1629 .avx512cd,
1630 .avx512dq,
17971631 .avx512f,
1632 .avx512vl,
1633 .avx512vnni,
17981634 .bmi,
17991635 .bmi2,
1800 .avx512bw,
1801 .avx512cd,
18021636 .clflushopt,
18031637 .clwb,
18041638 .cmov,
1805 .cx8,
18061639 .cx16,
1807 .avx512dq,
1640 .cx8,
18081641 .ermsb,
18091642 .f16c,
1810 .fma,
1811 .fsgsbase,
1812 .fxsr,
1813 .fast_shld_rotate,
1643 .false_deps_popcnt,
1644 .fast_gather,
18141645 .fast_scalar_fsqrt,
1646 .fast_shld_rotate,
18151647 .fast_variable_shuffle,
18161648 .fast_vector_fsqrt,
1817 .fast_gather,
1649 .fma,
1650 .fsgsbase,
1651 .fxsr,
1652 .idivq_to_divl,
18181653 .invpcid,
1819 .sahf,
18201654 .lzcnt,
1655 .macrofusion,
1656 .merge_to_threeway_branch,
18211657 .mmx,
18221658 .movbe,
18231659 .mpx,
1824 .macrofusion,
1825 .merge_to_threeway_branch,
18261660 .nopl,
18271661 .pclmul,
18281662 .pku,
18291663 .popcnt,
1830 .false_deps_popcnt,
18311664 .prfchw,
18321665 .rdrnd,
18331666 .rdseed,
1834 .sse4_2,
1667 .sahf,
18351668 .slow_3ops_lea,
1836 .idivq_to_divl,
1837 .avx512vl,
1838 .avx512vnni,
1669 .sse4_2,
18391670 .x87,
18401671 .xsave,
18411672 .xsavec,
......@@ -1843,60 +1674,58 @@ pub const cpu = struct {
18431674 .xsaves,
18441675 }),
18451676 };
1846
18471677 pub const cooperlake = Cpu{
18481678 .name = "cooperlake",
18491679 .llvm_name = "cooperlake",
18501680 .features = featureSet(&[_]Feature{
18511681 .@"64bit",
18521682 .adx,
1853 .sse,
18541683 .aes,
18551684 .avx,
18561685 .avx2,
1857 .avx512f,
18581686 .avx512bf16,
1859 .bmi,
1860 .bmi2,
18611687 .avx512bw,
18621688 .avx512cd,
1689 .avx512dq,
1690 .avx512f,
1691 .avx512vl,
1692 .avx512vnni,
1693 .bmi,
1694 .bmi2,
18631695 .clflushopt,
18641696 .clwb,
18651697 .cmov,
1866 .cx8,
18671698 .cx16,
1868 .avx512dq,
1699 .cx8,
18691700 .ermsb,
18701701 .f16c,
1871 .fma,
1872 .fsgsbase,
1873 .fxsr,
1874 .fast_shld_rotate,
1702 .false_deps_popcnt,
1703 .fast_gather,
18751704 .fast_scalar_fsqrt,
1705 .fast_shld_rotate,
18761706 .fast_variable_shuffle,
18771707 .fast_vector_fsqrt,
1878 .fast_gather,
1708 .fma,
1709 .fsgsbase,
1710 .fxsr,
1711 .idivq_to_divl,
18791712 .invpcid,
1880 .sahf,
18811713 .lzcnt,
1714 .macrofusion,
1715 .merge_to_threeway_branch,
18821716 .mmx,
18831717 .movbe,
18841718 .mpx,
1885 .macrofusion,
1886 .merge_to_threeway_branch,
18871719 .nopl,
18881720 .pclmul,
18891721 .pku,
18901722 .popcnt,
1891 .false_deps_popcnt,
18921723 .prfchw,
18931724 .rdrnd,
18941725 .rdseed,
1895 .sse4_2,
1726 .sahf,
18961727 .slow_3ops_lea,
1897 .idivq_to_divl,
1898 .avx512vl,
1899 .avx512vnni,
1728 .sse4_2,
19001729 .x87,
19011730 .xsave,
19021731 .xsavec,
......@@ -1904,155 +1733,144 @@ pub const cpu = struct {
19041733 .xsaves,
19051734 }),
19061735 };
1907
19081736 pub const core_avx_i = Cpu{
19091737 .name = "core_avx_i",
19101738 .llvm_name = "core-avx-i",
19111739 .features = featureSet(&[_]Feature{
19121740 .@"64bit",
1913 .sse,
19141741 .avx,
19151742 .cmov,
1916 .cx8,
19171743 .cx16,
1744 .cx8,
19181745 .f16c,
1746 .false_deps_popcnt,
1747 .fast_scalar_fsqrt,
1748 .fast_shld_rotate,
19191749 .fsgsbase,
19201750 .fxsr,
1921 .fast_shld_rotate,
1922 .fast_scalar_fsqrt,
1923 .sahf,
1924 .mmx,
1751 .idivq_to_divl,
19251752 .macrofusion,
19261753 .merge_to_threeway_branch,
1754 .mmx,
19271755 .nopl,
19281756 .pclmul,
19291757 .popcnt,
1930 .false_deps_popcnt,
19311758 .rdrnd,
1932 .sse4_2,
1759 .sahf,
19331760 .slow_3ops_lea,
1934 .idivq_to_divl,
19351761 .slow_unaligned_mem_32,
1762 .sse4_2,
19361763 .x87,
19371764 .xsave,
19381765 .xsaveopt,
19391766 }),
19401767 };
1941
19421768 pub const core_avx2 = Cpu{
19431769 .name = "core_avx2",
19441770 .llvm_name = "core-avx2",
19451771 .features = featureSet(&[_]Feature{
19461772 .@"64bit",
1947 .sse,
19481773 .avx,
19491774 .avx2,
19501775 .bmi,
19511776 .bmi2,
19521777 .cmov,
1953 .cx8,
19541778 .cx16,
1779 .cx8,
19551780 .ermsb,
19561781 .f16c,
1782 .false_deps_lzcnt_tzcnt,
1783 .false_deps_popcnt,
1784 .fast_scalar_fsqrt,
1785 .fast_shld_rotate,
1786 .fast_variable_shuffle,
19571787 .fma,
19581788 .fsgsbase,
19591789 .fxsr,
1960 .fast_shld_rotate,
1961 .fast_scalar_fsqrt,
1962 .fast_variable_shuffle,
1790 .idivq_to_divl,
19631791 .invpcid,
1964 .sahf,
19651792 .lzcnt,
1966 .false_deps_lzcnt_tzcnt,
1967 .mmx,
1968 .movbe,
19691793 .macrofusion,
19701794 .merge_to_threeway_branch,
1795 .mmx,
1796 .movbe,
19711797 .nopl,
19721798 .pclmul,
19731799 .popcnt,
1974 .false_deps_popcnt,
19751800 .rdrnd,
1976 .sse4_2,
1801 .sahf,
19771802 .slow_3ops_lea,
1978 .idivq_to_divl,
1803 .sse4_2,
19791804 .x87,
19801805 .xsave,
19811806 .xsaveopt,
19821807 }),
19831808 };
1984
19851809 pub const core2 = Cpu{
19861810 .name = "core2",
19871811 .llvm_name = "core2",
19881812 .features = featureSet(&[_]Feature{
19891813 .@"64bit",
19901814 .cmov,
1991 .cx8,
19921815 .cx16,
1816 .cx8,
19931817 .fxsr,
1994 .sahf,
1995 .mmx,
19961818 .macrofusion,
1819 .mmx,
19971820 .nopl,
1998 .sse,
1999 .ssse3,
1821 .sahf,
20001822 .slow_unaligned_mem_16,
1823 .ssse3,
20011824 .x87,
20021825 }),
20031826 };
2004
20051827 pub const corei7 = Cpu{
20061828 .name = "corei7",
20071829 .llvm_name = "corei7",
20081830 .features = featureSet(&[_]Feature{
20091831 .@"64bit",
20101832 .cmov,
2011 .cx8,
20121833 .cx16,
1834 .cx8,
20131835 .fxsr,
2014 .sahf,
2015 .mmx,
20161836 .macrofusion,
1837 .mmx,
20171838 .nopl,
20181839 .popcnt,
2019 .sse,
1840 .sahf,
20201841 .sse4_2,
20211842 .x87,
20221843 }),
20231844 };
2024
20251845 pub const corei7_avx = Cpu{
20261846 .name = "corei7_avx",
20271847 .llvm_name = "corei7-avx",
20281848 .features = featureSet(&[_]Feature{
20291849 .@"64bit",
2030 .sse,
20311850 .avx,
20321851 .cmov,
2033 .cx8,
20341852 .cx16,
2035 .fxsr,
2036 .fast_shld_rotate,
1853 .cx8,
1854 .false_deps_popcnt,
20371855 .fast_scalar_fsqrt,
2038 .sahf,
2039 .mmx,
1856 .fast_shld_rotate,
1857 .fxsr,
1858 .idivq_to_divl,
20401859 .macrofusion,
20411860 .merge_to_threeway_branch,
1861 .mmx,
20421862 .nopl,
20431863 .pclmul,
20441864 .popcnt,
2045 .false_deps_popcnt,
2046 .sse4_2,
1865 .sahf,
20471866 .slow_3ops_lea,
2048 .idivq_to_divl,
20491867 .slow_unaligned_mem_32,
1868 .sse4_2,
20501869 .x87,
20511870 .xsave,
20521871 .xsaveopt,
20531872 }),
20541873 };
2055
20561874 pub const generic = Cpu{
20571875 .name = "generic",
20581876 .llvm_name = "generic",
......@@ -2062,49 +1880,45 @@ pub const cpu = struct {
20621880 .x87,
20631881 }),
20641882 };
2065
20661883 pub const geode = Cpu{
20671884 .name = "geode",
20681885 .llvm_name = "geode",
20691886 .features = featureSet(&[_]Feature{
2070 .mmx,
20711887 .@"3dnowa",
20721888 .cx8,
20731889 .slow_unaligned_mem_16,
20741890 .x87,
20751891 }),
20761892 };
2077
20781893 pub const goldmont = Cpu{
20791894 .name = "goldmont",
20801895 .llvm_name = "goldmont",
20811896 .features = featureSet(&[_]Feature{
20821897 .@"64bit",
2083 .sse,
20841898 .aes,
20851899 .clflushopt,
20861900 .cmov,
2087 .cx8,
20881901 .cx16,
1902 .cx8,
1903 .false_deps_popcnt,
20891904 .fsgsbase,
20901905 .fxsr,
2091 .sahf,
20921906 .mmx,
20931907 .movbe,
20941908 .mpx,
20951909 .nopl,
20961910 .pclmul,
20971911 .popcnt,
2098 .false_deps_popcnt,
20991912 .prfchw,
21001913 .rdrnd,
21011914 .rdseed,
1915 .sahf,
21021916 .sha,
2103 .sse4_2,
2104 .ssse3,
21051917 .slow_incdec,
21061918 .slow_lea,
21071919 .slow_two_mem_ops,
1920 .sse4_2,
1921 .ssse3,
21081922 .x87,
21091923 .xsave,
21101924 .xsavec,
......@@ -2112,21 +1926,18 @@ pub const cpu = struct {
21121926 .xsaves,
21131927 }),
21141928 };
2115
21161929 pub const goldmont_plus = Cpu{
21171930 .name = "goldmont_plus",
21181931 .llvm_name = "goldmont-plus",
21191932 .features = featureSet(&[_]Feature{
21201933 .@"64bit",
2121 .sse,
21221934 .aes,
21231935 .clflushopt,
21241936 .cmov,
2125 .cx8,
21261937 .cx16,
1938 .cx8,
21271939 .fsgsbase,
21281940 .fxsr,
2129 .sahf,
21301941 .mmx,
21311942 .movbe,
21321943 .mpx,
......@@ -2138,13 +1949,14 @@ pub const cpu = struct {
21381949 .rdpid,
21391950 .rdrnd,
21401951 .rdseed,
1952 .sahf,
21411953 .sgx,
21421954 .sha,
2143 .sse4_2,
2144 .ssse3,
21451955 .slow_incdec,
21461956 .slow_lea,
21471957 .slow_two_mem_ops,
1958 .sse4_2,
1959 .ssse3,
21481960 .x87,
21491961 .xsave,
21501962 .xsavec,
......@@ -2152,50 +1964,47 @@ pub const cpu = struct {
21521964 .xsaves,
21531965 }),
21541966 };
2155
21561967 pub const haswell = Cpu{
21571968 .name = "haswell",
21581969 .llvm_name = "haswell",
21591970 .features = featureSet(&[_]Feature{
21601971 .@"64bit",
2161 .sse,
21621972 .avx,
21631973 .avx2,
21641974 .bmi,
21651975 .bmi2,
21661976 .cmov,
2167 .cx8,
21681977 .cx16,
1978 .cx8,
21691979 .ermsb,
21701980 .f16c,
1981 .false_deps_lzcnt_tzcnt,
1982 .false_deps_popcnt,
1983 .fast_scalar_fsqrt,
1984 .fast_shld_rotate,
1985 .fast_variable_shuffle,
21711986 .fma,
21721987 .fsgsbase,
21731988 .fxsr,
2174 .fast_shld_rotate,
2175 .fast_scalar_fsqrt,
2176 .fast_variable_shuffle,
1989 .idivq_to_divl,
21771990 .invpcid,
2178 .sahf,
21791991 .lzcnt,
2180 .false_deps_lzcnt_tzcnt,
2181 .mmx,
2182 .movbe,
21831992 .macrofusion,
21841993 .merge_to_threeway_branch,
1994 .mmx,
1995 .movbe,
21851996 .nopl,
21861997 .pclmul,
21871998 .popcnt,
2188 .false_deps_popcnt,
21891999 .rdrnd,
2190 .sse4_2,
2000 .sahf,
21912001 .slow_3ops_lea,
2192 .idivq_to_divl,
2002 .sse4_2,
21932003 .x87,
21942004 .xsave,
21952005 .xsaveopt,
21962006 }),
21972007 };
2198
21992008 pub const _i386 = Cpu{
22002009 .name = "_i386",
22012010 .llvm_name = "i386",
......@@ -2204,7 +2013,6 @@ pub const cpu = struct {
22042013 .x87,
22052014 }),
22062015 };
2207
22082016 pub const _i486 = Cpu{
22092017 .name = "_i486",
22102018 .llvm_name = "i486",
......@@ -2213,7 +2021,6 @@ pub const cpu = struct {
22132021 .x87,
22142022 }),
22152023 };
2216
22172024 pub const _i586 = Cpu{
22182025 .name = "_i586",
22192026 .llvm_name = "i586",
......@@ -2223,7 +2030,6 @@ pub const cpu = struct {
22232030 .x87,
22242031 }),
22252032 };
2226
22272033 pub const _i686 = Cpu{
22282034 .name = "_i686",
22292035 .llvm_name = "i686",
......@@ -2234,49 +2040,52 @@ pub const cpu = struct {
22342040 .x87,
22352041 }),
22362042 };
2237
22382043 pub const icelake_client = Cpu{
22392044 .name = "icelake_client",
22402045 .llvm_name = "icelake-client",
22412046 .features = featureSet(&[_]Feature{
22422047 .@"64bit",
22432048 .adx,
2244 .sse,
22452049 .aes,
22462050 .avx,
22472051 .avx2,
2248 .avx512f,
22492052 .avx512bitalg,
2250 .bmi,
2251 .bmi2,
22522053 .avx512bw,
22532054 .avx512cd,
2055 .avx512dq,
2056 .avx512f,
2057 .avx512ifma,
2058 .avx512vbmi,
2059 .avx512vbmi2,
2060 .avx512vl,
2061 .avx512vnni,
2062 .avx512vpopcntdq,
2063 .bmi,
2064 .bmi2,
22542065 .clflushopt,
22552066 .clwb,
22562067 .cmov,
2257 .cx8,
22582068 .cx16,
2259 .avx512dq,
2069 .cx8,
22602070 .ermsb,
22612071 .f16c,
2262 .fma,
2263 .fsgsbase,
2264 .fxsr,
2265 .fast_shld_rotate,
2072 .fast_gather,
22662073 .fast_scalar_fsqrt,
2074 .fast_shld_rotate,
22672075 .fast_variable_shuffle,
22682076 .fast_vector_fsqrt,
2077 .fma,
2078 .fsgsbase,
2079 .fxsr,
22692080 .gfni,
2270 .fast_gather,
2271 .avx512ifma,
2081 .idivq_to_divl,
22722082 .invpcid,
2273 .sahf,
22742083 .lzcnt,
2084 .macrofusion,
2085 .merge_to_threeway_branch,
22752086 .mmx,
22762087 .movbe,
22772088 .mpx,
2278 .macrofusion,
2279 .merge_to_threeway_branch,
22802089 .nopl,
22812090 .pclmul,
22822091 .pku,
......@@ -2285,18 +2094,13 @@ pub const cpu = struct {
22852094 .rdpid,
22862095 .rdrnd,
22872096 .rdseed,
2097 .sahf,
22882098 .sgx,
22892099 .sha,
2290 .sse4_2,
22912100 .slow_3ops_lea,
2292 .idivq_to_divl,
2101 .sse4_2,
22932102 .vaes,
2294 .avx512vbmi,
2295 .avx512vbmi2,
2296 .avx512vl,
2297 .avx512vnni,
22982103 .vpclmulqdq,
2299 .avx512vpopcntdq,
23002104 .x87,
23012105 .xsave,
23022106 .xsavec,
......@@ -2304,49 +2108,52 @@ pub const cpu = struct {
23042108 .xsaves,
23052109 }),
23062110 };
2307
23082111 pub const icelake_server = Cpu{
23092112 .name = "icelake_server",
23102113 .llvm_name = "icelake-server",
23112114 .features = featureSet(&[_]Feature{
23122115 .@"64bit",
23132116 .adx,
2314 .sse,
23152117 .aes,
23162118 .avx,
23172119 .avx2,
2318 .avx512f,
23192120 .avx512bitalg,
2320 .bmi,
2321 .bmi2,
23222121 .avx512bw,
23232122 .avx512cd,
2123 .avx512dq,
2124 .avx512f,
2125 .avx512ifma,
2126 .avx512vbmi,
2127 .avx512vbmi2,
2128 .avx512vl,
2129 .avx512vnni,
2130 .avx512vpopcntdq,
2131 .bmi,
2132 .bmi2,
23242133 .clflushopt,
23252134 .clwb,
23262135 .cmov,
2327 .cx8,
23282136 .cx16,
2329 .avx512dq,
2137 .cx8,
23302138 .ermsb,
23312139 .f16c,
2332 .fma,
2333 .fsgsbase,
2334 .fxsr,
2335 .fast_shld_rotate,
2140 .fast_gather,
23362141 .fast_scalar_fsqrt,
2142 .fast_shld_rotate,
23372143 .fast_variable_shuffle,
23382144 .fast_vector_fsqrt,
2145 .fma,
2146 .fsgsbase,
2147 .fxsr,
23392148 .gfni,
2340 .fast_gather,
2341 .avx512ifma,
2149 .idivq_to_divl,
23422150 .invpcid,
2343 .sahf,
23442151 .lzcnt,
2152 .macrofusion,
2153 .merge_to_threeway_branch,
23452154 .mmx,
23462155 .movbe,
23472156 .mpx,
2348 .macrofusion,
2349 .merge_to_threeway_branch,
23502157 .nopl,
23512158 .pclmul,
23522159 .pconfig,
......@@ -2356,18 +2163,13 @@ pub const cpu = struct {
23562163 .rdpid,
23572164 .rdrnd,
23582165 .rdseed,
2166 .sahf,
23592167 .sgx,
23602168 .sha,
2361 .sse4_2,
23622169 .slow_3ops_lea,
2363 .idivq_to_divl,
2170 .sse4_2,
23642171 .vaes,
2365 .avx512vbmi,
2366 .avx512vbmi2,
2367 .avx512vl,
2368 .avx512vnni,
23692172 .vpclmulqdq,
2370 .avx512vpopcntdq,
23712173 .wbnoinvd,
23722174 .x87,
23732175 .xsave,
......@@ -2376,41 +2178,38 @@ pub const cpu = struct {
23762178 .xsaves,
23772179 }),
23782180 };
2379
23802181 pub const ivybridge = Cpu{
23812182 .name = "ivybridge",
23822183 .llvm_name = "ivybridge",
23832184 .features = featureSet(&[_]Feature{
23842185 .@"64bit",
2385 .sse,
23862186 .avx,
23872187 .cmov,
2388 .cx8,
23892188 .cx16,
2189 .cx8,
23902190 .f16c,
2191 .false_deps_popcnt,
2192 .fast_scalar_fsqrt,
2193 .fast_shld_rotate,
23912194 .fsgsbase,
23922195 .fxsr,
2393 .fast_shld_rotate,
2394 .fast_scalar_fsqrt,
2395 .sahf,
2396 .mmx,
2196 .idivq_to_divl,
23972197 .macrofusion,
23982198 .merge_to_threeway_branch,
2199 .mmx,
23992200 .nopl,
24002201 .pclmul,
24012202 .popcnt,
2402 .false_deps_popcnt,
24032203 .rdrnd,
2404 .sse4_2,
2204 .sahf,
24052205 .slow_3ops_lea,
2406 .idivq_to_divl,
24072206 .slow_unaligned_mem_32,
2207 .sse4_2,
24082208 .x87,
24092209 .xsave,
24102210 .xsaveopt,
24112211 }),
24122212 };
2413
24142213 pub const k6 = Cpu{
24152214 .name = "k6",
24162215 .llvm_name = "k6",
......@@ -2421,108 +2220,96 @@ pub const cpu = struct {
24212220 .x87,
24222221 }),
24232222 };
2424
2425 pub const k62 = Cpu{
2223 pub const k6_2 = Cpu{
24262224 .name = "k6_2",
24272225 .llvm_name = "k6-2",
24282226 .features = featureSet(&[_]Feature{
2429 .mmx,
24302227 .@"3dnow",
24312228 .cx8,
24322229 .slow_unaligned_mem_16,
24332230 .x87,
24342231 }),
24352232 };
2436
2437 pub const k63 = Cpu{
2233 pub const k6_3 = Cpu{
24382234 .name = "k6_3",
24392235 .llvm_name = "k6-3",
24402236 .features = featureSet(&[_]Feature{
2441 .mmx,
24422237 .@"3dnow",
24432238 .cx8,
24442239 .slow_unaligned_mem_16,
24452240 .x87,
24462241 }),
24472242 };
2448
24492243 pub const k8 = Cpu{
24502244 .name = "k8",
24512245 .llvm_name = "k8",
24522246 .features = featureSet(&[_]Feature{
2453 .mmx,
24542247 .@"3dnowa",
24552248 .@"64bit",
24562249 .cmov,
24572250 .cx8,
2458 .fxsr,
24592251 .fast_scalar_shift_masks,
2252 .fxsr,
24602253 .nopl,
2461 .sse,
2462 .sse2,
24632254 .slow_shld,
24642255 .slow_unaligned_mem_16,
2256 .sse2,
24652257 .x87,
24662258 }),
24672259 };
2468
24692260 pub const k8_sse3 = Cpu{
24702261 .name = "k8_sse3",
24712262 .llvm_name = "k8-sse3",
24722263 .features = featureSet(&[_]Feature{
2473 .mmx,
24742264 .@"3dnowa",
24752265 .@"64bit",
24762266 .cmov,
2477 .cx8,
24782267 .cx16,
2479 .fxsr,
2268 .cx8,
24802269 .fast_scalar_shift_masks,
2270 .fxsr,
24812271 .nopl,
2482 .sse,
2483 .sse3,
24842272 .slow_shld,
24852273 .slow_unaligned_mem_16,
2274 .sse3,
24862275 .x87,
24872276 }),
24882277 };
2489
24902278 pub const knl = Cpu{
24912279 .name = "knl",
24922280 .llvm_name = "knl",
24932281 .features = featureSet(&[_]Feature{
24942282 .@"64bit",
24952283 .adx,
2496 .sse,
24972284 .aes,
2285 .avx512cd,
2286 .avx512er,
24982287 .avx512f,
2288 .avx512pf,
24992289 .bmi,
25002290 .bmi2,
2501 .avx512cd,
25022291 .cmov,
2503 .cx8,
25042292 .cx16,
2505 .avx512er,
2293 .cx8,
25062294 .f16c,
2295 .fast_gather,
2296 .fast_partial_ymm_or_zmm_write,
25072297 .fma,
25082298 .fsgsbase,
25092299 .fxsr,
2510 .fast_partial_ymm_or_zmm_write,
2511 .fast_gather,
2512 .sahf,
2300 .idivq_to_divl,
25132301 .lzcnt,
25142302 .mmx,
25152303 .movbe,
25162304 .nopl,
25172305 .pclmul,
2518 .avx512pf,
25192306 .popcnt,
25202307 .prefetchwt1,
25212308 .prfchw,
25222309 .rdrnd,
25232310 .rdseed,
2311 .sahf,
25242312 .slow_3ops_lea,
2525 .idivq_to_divl,
25262313 .slow_incdec,
25272314 .slow_pmaddwd,
25282315 .slow_two_mem_ops,
......@@ -2531,158 +2318,142 @@ pub const cpu = struct {
25312318 .xsaveopt,
25322319 }),
25332320 };
2534
25352321 pub const knm = Cpu{
25362322 .name = "knm",
25372323 .llvm_name = "knm",
25382324 .features = featureSet(&[_]Feature{
25392325 .@"64bit",
25402326 .adx,
2541 .sse,
25422327 .aes,
2328 .avx512cd,
2329 .avx512er,
25432330 .avx512f,
2331 .avx512pf,
2332 .avx512vpopcntdq,
25442333 .bmi,
25452334 .bmi2,
2546 .avx512cd,
25472335 .cmov,
2548 .cx8,
25492336 .cx16,
2550 .avx512er,
2337 .cx8,
25512338 .f16c,
2339 .fast_gather,
2340 .fast_partial_ymm_or_zmm_write,
25522341 .fma,
25532342 .fsgsbase,
25542343 .fxsr,
2555 .fast_partial_ymm_or_zmm_write,
2556 .fast_gather,
2557 .sahf,
2344 .idivq_to_divl,
25582345 .lzcnt,
25592346 .mmx,
25602347 .movbe,
25612348 .nopl,
25622349 .pclmul,
2563 .avx512pf,
25642350 .popcnt,
25652351 .prefetchwt1,
25662352 .prfchw,
25672353 .rdrnd,
25682354 .rdseed,
2355 .sahf,
25692356 .slow_3ops_lea,
2570 .idivq_to_divl,
25712357 .slow_incdec,
25722358 .slow_pmaddwd,
25732359 .slow_two_mem_ops,
2574 .avx512vpopcntdq,
25752360 .x87,
25762361 .xsave,
25772362 .xsaveopt,
25782363 }),
25792364 };
2580
25812365 pub const lakemont = Cpu{
25822366 .name = "lakemont",
25832367 .llvm_name = "lakemont",
25842368 .features = 0,
25852369 };
2586
25872370 pub const nehalem = Cpu{
25882371 .name = "nehalem",
25892372 .llvm_name = "nehalem",
25902373 .features = featureSet(&[_]Feature{
25912374 .@"64bit",
25922375 .cmov,
2593 .cx8,
25942376 .cx16,
2377 .cx8,
25952378 .fxsr,
2596 .sahf,
2597 .mmx,
25982379 .macrofusion,
2380 .mmx,
25992381 .nopl,
26002382 .popcnt,
2601 .sse,
2383 .sahf,
26022384 .sse4_2,
26032385 .x87,
26042386 }),
26052387 };
2606
26072388 pub const nocona = Cpu{
26082389 .name = "nocona",
26092390 .llvm_name = "nocona",
26102391 .features = featureSet(&[_]Feature{
26112392 .@"64bit",
26122393 .cmov,
2613 .cx8,
26142394 .cx16,
2395 .cx8,
26152396 .fxsr,
26162397 .mmx,
26172398 .nopl,
2618 .sse,
2619 .sse3,
26202399 .slow_unaligned_mem_16,
2400 .sse3,
26212401 .x87,
26222402 }),
26232403 };
2624
26252404 pub const opteron = Cpu{
26262405 .name = "opteron",
26272406 .llvm_name = "opteron",
26282407 .features = featureSet(&[_]Feature{
2629 .mmx,
26302408 .@"3dnowa",
26312409 .@"64bit",
26322410 .cmov,
26332411 .cx8,
2634 .fxsr,
26352412 .fast_scalar_shift_masks,
2413 .fxsr,
26362414 .nopl,
2637 .sse,
2638 .sse2,
26392415 .slow_shld,
26402416 .slow_unaligned_mem_16,
2417 .sse2,
26412418 .x87,
26422419 }),
26432420 };
2644
26452421 pub const opteron_sse3 = Cpu{
26462422 .name = "opteron_sse3",
26472423 .llvm_name = "opteron-sse3",
26482424 .features = featureSet(&[_]Feature{
2649 .mmx,
26502425 .@"3dnowa",
26512426 .@"64bit",
26522427 .cmov,
2653 .cx8,
26542428 .cx16,
2655 .fxsr,
2429 .cx8,
26562430 .fast_scalar_shift_masks,
2431 .fxsr,
26572432 .nopl,
2658 .sse,
2659 .sse3,
26602433 .slow_shld,
26612434 .slow_unaligned_mem_16,
2435 .sse3,
26622436 .x87,
26632437 }),
26642438 };
2665
26662439 pub const penryn = Cpu{
26672440 .name = "penryn",
26682441 .llvm_name = "penryn",
26692442 .features = featureSet(&[_]Feature{
26702443 .@"64bit",
26712444 .cmov,
2672 .cx8,
26732445 .cx16,
2446 .cx8,
26742447 .fxsr,
2675 .sahf,
2676 .mmx,
26772448 .macrofusion,
2449 .mmx,
26782450 .nopl,
2679 .sse,
2680 .sse4_1,
2451 .sahf,
26812452 .slow_unaligned_mem_16,
2453 .sse4_1,
26822454 .x87,
26832455 }),
26842456 };
2685
26862457 pub const pentium = Cpu{
26872458 .name = "pentium",
26882459 .llvm_name = "pentium",
......@@ -2692,7 +2463,6 @@ pub const cpu = struct {
26922463 .x87,
26932464 }),
26942465 };
2695
26962466 pub const pentium_m = Cpu{
26972467 .name = "pentium_m",
26982468 .llvm_name = "pentium-m",
......@@ -2702,13 +2472,11 @@ pub const cpu = struct {
27022472 .fxsr,
27032473 .mmx,
27042474 .nopl,
2705 .sse,
2706 .sse2,
27072475 .slow_unaligned_mem_16,
2476 .sse2,
27082477 .x87,
27092478 }),
27102479 };
2711
27122480 pub const pentium_mmx = Cpu{
27132481 .name = "pentium_mmx",
27142482 .llvm_name = "pentium-mmx",
......@@ -2719,7 +2487,6 @@ pub const cpu = struct {
27192487 .x87,
27202488 }),
27212489 };
2722
27232490 pub const pentium2 = Cpu{
27242491 .name = "pentium2",
27252492 .llvm_name = "pentium2",
......@@ -2733,7 +2500,6 @@ pub const cpu = struct {
27332500 .x87,
27342501 }),
27352502 };
2736
27372503 pub const pentium3 = Cpu{
27382504 .name = "pentium3",
27392505 .llvm_name = "pentium3",
......@@ -2743,12 +2509,11 @@ pub const cpu = struct {
27432509 .fxsr,
27442510 .mmx,
27452511 .nopl,
2746 .sse,
27472512 .slow_unaligned_mem_16,
2513 .sse,
27482514 .x87,
27492515 }),
27502516 };
2751
27522517 pub const pentium3m = Cpu{
27532518 .name = "pentium3m",
27542519 .llvm_name = "pentium3m",
......@@ -2758,12 +2523,11 @@ pub const cpu = struct {
27582523 .fxsr,
27592524 .mmx,
27602525 .nopl,
2761 .sse,
27622526 .slow_unaligned_mem_16,
2527 .sse,
27632528 .x87,
27642529 }),
27652530 };
2766
27672531 pub const pentium4 = Cpu{
27682532 .name = "pentium4",
27692533 .llvm_name = "pentium4",
......@@ -2773,13 +2537,11 @@ pub const cpu = struct {
27732537 .fxsr,
27742538 .mmx,
27752539 .nopl,
2776 .sse,
2777 .sse2,
27782540 .slow_unaligned_mem_16,
2541 .sse2,
27792542 .x87,
27802543 }),
27812544 };
2782
27832545 pub const pentium4m = Cpu{
27842546 .name = "pentium4m",
27852547 .llvm_name = "pentium4m",
......@@ -2789,13 +2551,11 @@ pub const cpu = struct {
27892551 .fxsr,
27902552 .mmx,
27912553 .nopl,
2792 .sse,
2793 .sse2,
27942554 .slow_unaligned_mem_16,
2555 .sse2,
27952556 .x87,
27962557 }),
27972558 };
2798
27992559 pub const pentiumpro = Cpu{
28002560 .name = "pentiumpro",
28012561 .llvm_name = "pentiumpro",
......@@ -2807,7 +2567,6 @@ pub const cpu = struct {
28072567 .x87,
28082568 }),
28092569 };
2810
28112570 pub const prescott = Cpu{
28122571 .name = "prescott",
28132572 .llvm_name = "prescott",
......@@ -2817,125 +2576,118 @@ pub const cpu = struct {
28172576 .fxsr,
28182577 .mmx,
28192578 .nopl,
2820 .sse,
2821 .sse3,
28222579 .slow_unaligned_mem_16,
2580 .sse3,
28232581 .x87,
28242582 }),
28252583 };
2826
28272584 pub const sandybridge = Cpu{
28282585 .name = "sandybridge",
28292586 .llvm_name = "sandybridge",
28302587 .features = featureSet(&[_]Feature{
28312588 .@"64bit",
2832 .sse,
28332589 .avx,
28342590 .cmov,
2835 .cx8,
28362591 .cx16,
2837 .fxsr,
2838 .fast_shld_rotate,
2592 .cx8,
2593 .false_deps_popcnt,
28392594 .fast_scalar_fsqrt,
2840 .sahf,
2841 .mmx,
2595 .fast_shld_rotate,
2596 .fxsr,
2597 .idivq_to_divl,
28422598 .macrofusion,
28432599 .merge_to_threeway_branch,
2600 .mmx,
28442601 .nopl,
28452602 .pclmul,
28462603 .popcnt,
2847 .false_deps_popcnt,
2848 .sse4_2,
2604 .sahf,
28492605 .slow_3ops_lea,
2850 .idivq_to_divl,
28512606 .slow_unaligned_mem_32,
2607 .sse4_2,
28522608 .x87,
28532609 .xsave,
28542610 .xsaveopt,
28552611 }),
28562612 };
2857
28582613 pub const silvermont = Cpu{
28592614 .name = "silvermont",
28602615 .llvm_name = "silvermont",
28612616 .features = featureSet(&[_]Feature{
28622617 .@"64bit",
28632618 .cmov,
2864 .cx8,
28652619 .cx16,
2620 .cx8,
2621 .false_deps_popcnt,
28662622 .fxsr,
2867 .sahf,
2623 .idivq_to_divl,
28682624 .mmx,
28692625 .movbe,
28702626 .nopl,
2871 .sse,
28722627 .pclmul,
28732628 .popcnt,
2874 .false_deps_popcnt,
28752629 .prfchw,
28762630 .rdrnd,
2877 .sse4_2,
2878 .ssse3,
2879 .idivq_to_divl,
2631 .sahf,
28802632 .slow_incdec,
28812633 .slow_lea,
28822634 .slow_pmulld,
28832635 .slow_two_mem_ops,
2636 .sse4_2,
2637 .ssse3,
28842638 .x87,
28852639 }),
28862640 };
2887
28882641 pub const skx = Cpu{
28892642 .name = "skx",
28902643 .llvm_name = "skx",
28912644 .features = featureSet(&[_]Feature{
28922645 .@"64bit",
28932646 .adx,
2894 .sse,
28952647 .aes,
28962648 .avx,
28972649 .avx2,
2650 .avx512bw,
2651 .avx512cd,
2652 .avx512dq,
28982653 .avx512f,
2654 .avx512vl,
28992655 .bmi,
29002656 .bmi2,
2901 .avx512bw,
2902 .avx512cd,
29032657 .clflushopt,
29042658 .clwb,
29052659 .cmov,
2906 .cx8,
29072660 .cx16,
2908 .avx512dq,
2661 .cx8,
29092662 .ermsb,
29102663 .f16c,
2911 .fma,
2912 .fsgsbase,
2913 .fxsr,
2914 .fast_shld_rotate,
2664 .false_deps_popcnt,
2665 .fast_gather,
29152666 .fast_scalar_fsqrt,
2667 .fast_shld_rotate,
29162668 .fast_variable_shuffle,
29172669 .fast_vector_fsqrt,
2918 .fast_gather,
2670 .fma,
2671 .fsgsbase,
2672 .fxsr,
2673 .idivq_to_divl,
29192674 .invpcid,
2920 .sahf,
29212675 .lzcnt,
2676 .macrofusion,
2677 .merge_to_threeway_branch,
29222678 .mmx,
29232679 .movbe,
29242680 .mpx,
2925 .macrofusion,
2926 .merge_to_threeway_branch,
29272681 .nopl,
29282682 .pclmul,
29292683 .pku,
29302684 .popcnt,
2931 .false_deps_popcnt,
29322685 .prfchw,
29332686 .rdrnd,
29342687 .rdseed,
2935 .sse4_2,
2688 .sahf,
29362689 .slow_3ops_lea,
2937 .idivq_to_divl,
2938 .avx512vl,
2690 .sse4_2,
29392691 .x87,
29402692 .xsave,
29412693 .xsavec,
......@@ -2943,14 +2695,12 @@ pub const cpu = struct {
29432695 .xsaves,
29442696 }),
29452697 };
2946
29472698 pub const skylake = Cpu{
29482699 .name = "skylake",
29492700 .llvm_name = "skylake",
29502701 .features = featureSet(&[_]Feature{
29512702 .@"64bit",
29522703 .adx,
2953 .sse,
29542704 .aes,
29552705 .avx,
29562706 .avx2,
......@@ -2958,37 +2708,37 @@ pub const cpu = struct {
29582708 .bmi2,
29592709 .clflushopt,
29602710 .cmov,
2961 .cx8,
29622711 .cx16,
2712 .cx8,
29632713 .ermsb,
29642714 .f16c,
2965 .fma,
2966 .fsgsbase,
2967 .fxsr,
2968 .fast_shld_rotate,
2715 .false_deps_popcnt,
2716 .fast_gather,
29692717 .fast_scalar_fsqrt,
2718 .fast_shld_rotate,
29702719 .fast_variable_shuffle,
29712720 .fast_vector_fsqrt,
2972 .fast_gather,
2721 .fma,
2722 .fsgsbase,
2723 .fxsr,
2724 .idivq_to_divl,
29732725 .invpcid,
2974 .sahf,
29752726 .lzcnt,
2727 .macrofusion,
2728 .merge_to_threeway_branch,
29762729 .mmx,
29772730 .movbe,
29782731 .mpx,
2979 .macrofusion,
2980 .merge_to_threeway_branch,
29812732 .nopl,
29822733 .pclmul,
29832734 .popcnt,
2984 .false_deps_popcnt,
29852735 .prfchw,
29862736 .rdrnd,
29872737 .rdseed,
2738 .sahf,
29882739 .sgx,
2989 .sse4_2,
29902740 .slow_3ops_lea,
2991 .idivq_to_divl,
2741 .sse4_2,
29922742 .x87,
29932743 .xsave,
29942744 .xsavec,
......@@ -2996,58 +2746,56 @@ pub const cpu = struct {
29962746 .xsaves,
29972747 }),
29982748 };
2999
30002749 pub const skylake_avx512 = Cpu{
30012750 .name = "skylake_avx512",
30022751 .llvm_name = "skylake-avx512",
30032752 .features = featureSet(&[_]Feature{
30042753 .@"64bit",
30052754 .adx,
3006 .sse,
30072755 .aes,
30082756 .avx,
30092757 .avx2,
2758 .avx512bw,
2759 .avx512cd,
2760 .avx512dq,
30102761 .avx512f,
2762 .avx512vl,
30112763 .bmi,
30122764 .bmi2,
3013 .avx512bw,
3014 .avx512cd,
30152765 .clflushopt,
30162766 .clwb,
30172767 .cmov,
3018 .cx8,
30192768 .cx16,
3020 .avx512dq,
2769 .cx8,
30212770 .ermsb,
30222771 .f16c,
3023 .fma,
3024 .fsgsbase,
3025 .fxsr,
3026 .fast_shld_rotate,
2772 .false_deps_popcnt,
2773 .fast_gather,
30272774 .fast_scalar_fsqrt,
2775 .fast_shld_rotate,
30282776 .fast_variable_shuffle,
30292777 .fast_vector_fsqrt,
3030 .fast_gather,
2778 .fma,
2779 .fsgsbase,
2780 .fxsr,
2781 .idivq_to_divl,
30312782 .invpcid,
3032 .sahf,
30332783 .lzcnt,
2784 .macrofusion,
2785 .merge_to_threeway_branch,
30342786 .mmx,
30352787 .movbe,
30362788 .mpx,
3037 .macrofusion,
3038 .merge_to_threeway_branch,
30392789 .nopl,
30402790 .pclmul,
30412791 .pku,
30422792 .popcnt,
3043 .false_deps_popcnt,
30442793 .prfchw,
30452794 .rdrnd,
30462795 .rdseed,
3047 .sse4_2,
2796 .sahf,
30482797 .slow_3ops_lea,
3049 .idivq_to_divl,
3050 .avx512vl,
2798 .sse4_2,
30512799 .x87,
30522800 .xsave,
30532801 .xsavec,
......@@ -3055,53 +2803,48 @@ pub const cpu = struct {
30552803 .xsaves,
30562804 }),
30572805 };
3058
30592806 pub const slm = Cpu{
30602807 .name = "slm",
30612808 .llvm_name = "slm",
30622809 .features = featureSet(&[_]Feature{
30632810 .@"64bit",
30642811 .cmov,
3065 .cx8,
30662812 .cx16,
2813 .cx8,
2814 .false_deps_popcnt,
30672815 .fxsr,
3068 .sahf,
2816 .idivq_to_divl,
30692817 .mmx,
30702818 .movbe,
30712819 .nopl,
3072 .sse,
30732820 .pclmul,
30742821 .popcnt,
3075 .false_deps_popcnt,
30762822 .prfchw,
30772823 .rdrnd,
3078 .sse4_2,
3079 .ssse3,
3080 .idivq_to_divl,
2824 .sahf,
30812825 .slow_incdec,
30822826 .slow_lea,
30832827 .slow_pmulld,
30842828 .slow_two_mem_ops,
2829 .sse4_2,
2830 .ssse3,
30852831 .x87,
30862832 }),
30872833 };
3088
30892834 pub const tremont = Cpu{
30902835 .name = "tremont",
30912836 .llvm_name = "tremont",
30922837 .features = featureSet(&[_]Feature{
30932838 .@"64bit",
3094 .sse,
30952839 .aes,
30962840 .cldemote,
30972841 .clflushopt,
30982842 .cmov,
3099 .cx8,
31002843 .cx16,
2844 .cx8,
31012845 .fsgsbase,
31022846 .fxsr,
31032847 .gfni,
3104 .sahf,
31052848 .mmx,
31062849 .movbe,
31072850 .movdir64b,
......@@ -3115,13 +2858,14 @@ pub const cpu = struct {
31152858 .rdpid,
31162859 .rdrnd,
31172860 .rdseed,
2861 .sahf,
31182862 .sgx,
31192863 .sha,
3120 .sse4_2,
3121 .ssse3,
31222864 .slow_incdec,
31232865 .slow_lea,
31242866 .slow_two_mem_ops,
2867 .sse4_2,
2868 .ssse3,
31252869 .waitpkg,
31262870 .x87,
31272871 .xsave,
......@@ -3130,28 +2874,25 @@ pub const cpu = struct {
31302874 .xsaves,
31312875 }),
31322876 };
3133
31342877 pub const westmere = Cpu{
31352878 .name = "westmere",
31362879 .llvm_name = "westmere",
31372880 .features = featureSet(&[_]Feature{
31382881 .@"64bit",
31392882 .cmov,
3140 .cx8,
31412883 .cx16,
2884 .cx8,
31422885 .fxsr,
3143 .sahf,
3144 .mmx,
31452886 .macrofusion,
2887 .mmx,
31462888 .nopl,
3147 .sse,
31482889 .pclmul,
31492890 .popcnt,
2891 .sahf,
31502892 .sse4_2,
31512893 .x87,
31522894 }),
31532895 };
3154
31552896 pub const winchip_c6 = Cpu{
31562897 .name = "winchip_c6",
31572898 .llvm_name = "winchip-c6",
......@@ -3161,18 +2902,15 @@ pub const cpu = struct {
31612902 .x87,
31622903 }),
31632904 };
3164
31652905 pub const winchip2 = Cpu{
31662906 .name = "winchip2",
31672907 .llvm_name = "winchip2",
31682908 .features = featureSet(&[_]Feature{
3169 .mmx,
31702909 .@"3dnow",
31712910 .slow_unaligned_mem_16,
31722911 .x87,
31732912 }),
31742913 };
3175
31762914 pub const x86_64 = Cpu{
31772915 .name = "x86_64",
31782916 .llvm_name = "x86-64",
......@@ -3181,17 +2919,15 @@ pub const cpu = struct {
31812919 .cmov,
31822920 .cx8,
31832921 .fxsr,
3184 .mmx,
31852922 .macrofusion,
2923 .mmx,
31862924 .nopl,
3187 .sse,
3188 .sse2,
31892925 .slow_3ops_lea,
31902926 .slow_incdec,
2927 .sse2,
31912928 .x87,
31922929 }),
31932930 };
3194
31952931 pub const yonah = Cpu{
31962932 .name = "yonah",
31972933 .llvm_name = "yonah",
......@@ -3201,20 +2937,17 @@ pub const cpu = struct {
32012937 .fxsr,
32022938 .mmx,
32032939 .nopl,
3204 .sse,
3205 .sse3,
32062940 .slow_unaligned_mem_16,
2941 .sse3,
32072942 .x87,
32082943 }),
32092944 };
3210
32112945 pub const znver1 = Cpu{
32122946 .name = "znver1",
32132947 .llvm_name = "znver1",
32142948 .features = featureSet(&[_]Feature{
32152949 .@"64bit",
32162950 .adx,
3217 .sse,
32182951 .aes,
32192952 .avx2,
32202953 .bmi,
......@@ -3223,17 +2956,15 @@ pub const cpu = struct {
32232956 .clflushopt,
32242957 .clzero,
32252958 .cmov,
3226 .cx8,
32272959 .cx16,
32282960 .f16c,
3229 .fma,
3230 .fsgsbase,
3231 .fxsr,
32322961 .fast_15bytenop,
32332962 .fast_bextr,
32342963 .fast_lzcnt,
32352964 .fast_scalar_shift_masks,
3236 .sahf,
2965 .fma,
2966 .fsgsbase,
2967 .fxsr,
32372968 .lzcnt,
32382969 .mmx,
32392970 .movbe,
......@@ -3244,9 +2975,10 @@ pub const cpu = struct {
32442975 .prfchw,
32452976 .rdrnd,
32462977 .rdseed,
2978 .sahf,
32472979 .sha,
3248 .sse4a,
32492980 .slow_shld,
2981 .sse4a,
32502982 .x87,
32512983 .xsave,
32522984 .xsavec,
......@@ -3254,14 +2986,12 @@ pub const cpu = struct {
32542986 .xsaves,
32552987 }),
32562988 };
3257
32582989 pub const znver2 = Cpu{
32592990 .name = "znver2",
32602991 .llvm_name = "znver2",
32612992 .features = featureSet(&[_]Feature{
32622993 .@"64bit",
32632994 .adx,
3264 .sse,
32652995 .aes,
32662996 .avx2,
32672997 .bmi,
......@@ -3271,17 +3001,15 @@ pub const cpu = struct {
32713001 .clwb,
32723002 .clzero,
32733003 .cmov,
3274 .cx8,
32753004 .cx16,
32763005 .f16c,
3277 .fma,
3278 .fsgsbase,
3279 .fxsr,
32803006 .fast_15bytenop,
32813007 .fast_bextr,
32823008 .fast_lzcnt,
32833009 .fast_scalar_shift_masks,
3284 .sahf,
3010 .fma,
3011 .fsgsbase,
3012 .fxsr,
32853013 .lzcnt,
32863014 .mmx,
32873015 .movbe,
......@@ -3293,9 +3021,10 @@ pub const cpu = struct {
32933021 .rdpid,
32943022 .rdrnd,
32953023 .rdseed,
3024 .sahf,
32963025 .sha,
3297 .sse4a,
32983026 .slow_shld,
3027 .sse4a,
32993028 .wbnoinvd,
33003029 .x87,
33013030 .xsave,
......@@ -3306,10 +3035,13 @@ pub const cpu = struct {
33063035 };
33073036};
33083037
3038/// All x86 CPUs, sorted alphabetically by name.
3039/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
3040/// compiler has inefficient memory and CPU usage, affecting build times.
33093041pub const all_cpus = &[_]*const Cpu{
33103042 &cpu.amdfam10,
33113043 &cpu.athlon,
3312 &cpu.athlon4,
3044 &cpu.athlon_4,
33133045 &cpu.athlon_fx,
33143046 &cpu.athlon_mp,
33153047 &cpu.athlon_tbird,
......@@ -3327,7 +3059,7 @@ pub const all_cpus = &[_]*const Cpu{
33273059 &cpu.btver1,
33283060 &cpu.btver2,
33293061 &cpu.c3,
3330 &cpu.c32,
3062 &cpu.c3_2,
33313063 &cpu.cannonlake,
33323064 &cpu.cascadelake,
33333065 &cpu.cooperlake,
......@@ -3349,8 +3081,8 @@ pub const all_cpus = &[_]*const Cpu{
33493081 &cpu.icelake_server,
33503082 &cpu.ivybridge,
33513083 &cpu.k6,
3352 &cpu.k62,
3353 &cpu.k63,
3084 &cpu.k6_2,
3085 &cpu.k6_3,
33543086 &cpu.k8,
33553087 &cpu.k8_sse3,
33563088 &cpu.knl,