authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-21 20:11:36-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-21 20:11:36-05:00
log68b6867e7689617b3dcef72a88414deaf3ede43b
treefada3908313c8c50a714a61d9c3b5aac02bcea38
parent92559cd02cbf6497b99eb5193c9094e6d92c214e
signaturelock-open Commit is signed but in an unrecognized format.

lazily compute the full cpu features dependencies


17 files changed, 1459 insertions(+), 1519 deletions(-)

lib/std/target.zig+20-63
......@@ -304,12 +304,12 @@ pub const Target = union(enum) {
304304 if (mem.eql(u8, feature_name, feature.name)) {
305305 switch (op) {
306306 .add => {
307 baseline_set.addFeature(index, all_features);
308 whitelist_set.addFeature(index, all_features);
307 baseline_set.addFeature(index);
308 whitelist_set.addFeature(index);
309309 },
310310 .sub => {
311 baseline_set.removeFeature(index, all_features);
312 whitelist_set.removeFeature(index, all_features);
311 baseline_set.removeFeature(index);
312 whitelist_set.removeFeature(index);
313313 },
314314 }
315315 break;
......@@ -580,12 +580,8 @@ pub const Target = union(enum) {
580580 /// Human-friendly UTF-8 text.
581581 description: []const u8,
582582
583 /// `Set` of all features this depends on, and this feature itself.
584 /// Can be "or"ed with another set to remove this feature and all
585 /// its dependencies.
586 /// Has a default value of `undefined` because the canonical
587 /// structures are populated via comptime logic.
588 dependencies: Set = undefined,
583 /// Sparse `Set` of features this depends on.
584 dependencies: Set,
589585
590586 /// A bit set of all the features.
591587 pub const Set = struct {
......@@ -598,6 +594,9 @@ pub const Target = union(enum) {
598594 pub const ShiftInt = std.math.Log2Int(usize);
599595
600596 pub const empty = Set{ .ints = [1]usize{0} ** usize_count };
597 pub fn empty_workaround() Set {
598 return Set{ .ints = [1]usize{0} ** usize_count };
599 }
601600
602601 pub fn isEnabled(set: Set, arch_feature_index: Index) bool {
603602 const usize_index = arch_feature_index / @bitSizeOf(usize);
......@@ -605,60 +604,28 @@ pub const Target = union(enum) {
605604 return (set.ints[usize_index] & (@as(usize, 1) << bit_index)) != 0;
606605 }
607606
608 /// Adds the specified feature and all its dependencies to the set. O(1).
609 pub fn addFeature(
610 set: *Set,
611 arch_feature_index: Index,
612 all_features_list: []const Cpu.Feature,
613 ) void {
614 set.ints = @as(@Vector(usize_count, usize), set.ints) |
615 @as(@Vector(usize_count, usize), all_features_list[arch_feature_index].dependencies.ints);
616 }
617
618 /// Removes the specified feature (TODO and all its dependents) from the set. O(1).
619 /// TODO improve this function to actually handle dependants rather than just calling
620 /// `removeSparseFeature`.
621 pub fn removeFeature(
622 set: *Set,
623 arch_feature_index: Index,
624 all_features_list: []const Cpu.Feature,
625 ) void {
626 set.removeSparseFeature(arch_feature_index);
627 }
628
629607 /// Adds the specified feature but not its dependencies.
630 pub fn addSparseFeature(set: *Set, arch_feature_index: Index) void {
608 pub fn addFeature(set: *Set, arch_feature_index: Index) void {
631609 const usize_index = arch_feature_index / @bitSizeOf(usize);
632610 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
633611 set.ints[usize_index] |= @as(usize, 1) << bit_index;
634612 }
635613
636614 /// Removes the specified feature but not its dependents.
637 pub fn removeSparseFeature(set: *Set, arch_feature_index: Index) void {
615 pub fn removeFeature(set: *Set, arch_feature_index: Index) void {
638616 const usize_index = arch_feature_index / @bitSizeOf(usize);
639617 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
640618 set.ints[usize_index] &= ~(@as(usize, 1) << bit_index);
641619 }
642620
643 pub fn initAsDependencies(
644 set: *Set,
645 arch_feature_index: Index,
646 all_features_list: []const Cpu.Feature,
647 ) void {
648 // fast-case to help reduce how much comptime code must execute
649 const no_deps = for (set.ints) |elem| {
650 if (elem != 0) break false;
651 } else true;
652 // add itself to its own dependencies for easy "or"ing later
653 set.addSparseFeature(arch_feature_index);
654 if (no_deps) return;
655
621 pub fn populateDependencies(set: *Set, all_features_list: []const Cpu.Feature) void {
656622 var old = set.ints;
657623 while (true) {
658 for (all_features_list) |feature, index| {
659 const casted_index = @intCast(Index, index);
660 if (set.isEnabled(casted_index)) {
661 set.addFeature(casted_index, all_features_list);
624 for (all_features_list) |feature, index_usize| {
625 const index = @intCast(Index, index_usize);
626 if (set.isEnabled(index)) {
627 set.ints = @as(@Vector(usize_count, usize), set.ints) |
628 @as(@Vector(usize_count, usize), feature.dependencies.ints);
662629 }
663630 }
664631 const nothing_changed = mem.eql(usize, &old, &set.ints);
......@@ -674,21 +641,11 @@ pub const Target = union(enum) {
674641
675642 pub fn feature_set_fns(comptime F: type) type {
676643 return struct {
677 /// Populates a set with the list of features and all their dependencies included.
678 pub fn featureSet(all_features_list: []const Feature, features: []const F) Set {
679 var x: Set = Set.empty;
680 for (features) |feature| {
681 x.addFeature(@enumToInt(feature), all_features_list);
682 }
683 @compileLog(Set.empty);
684 return x;
685 }
686
687644 /// Populates only the feature bits specified.
688 pub fn sparseFeatureSet(features: []const F) Set {
689 var x = Set.empty;
645 pub fn featureSet(features: []const F) Set {
646 var x = Set.empty_workaround(); // TODO remove empty_workaround
690647 for (features) |feature| {
691 x.addSparseFeature(@enumToInt(feature));
648 x.addFeature(@enumToInt(feature));
692649 }
693650 return x;
694651 }
lib/std/target/aarch64.zig+172-174
......@@ -153,14 +153,13 @@ pub const Feature = enum {
153153pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
154154
155155pub const all_features = blk: {
156 @setEvalBranchQuota(10000);
157156 const len = @typeInfo(Feature).Enum.fields.len;
158157 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
159158 var result: [len]Cpu.Feature = undefined;
160159 result[@enumToInt(Feature.a35)] = .{
161160 .llvm_name = "a35",
162161 .description = "Cortex-A35 ARM processors",
163 .dependencies = sparseFeatureSet(&[_]Feature{
162 .dependencies = featureSet(&[_]Feature{
164163 .crc,
165164 .crypto,
166165 .fp_armv8,
......@@ -171,7 +170,7 @@ pub const all_features = blk: {
171170 result[@enumToInt(Feature.a53)] = .{
172171 .llvm_name = "a53",
173172 .description = "Cortex-A53 ARM processors",
174 .dependencies = sparseFeatureSet(&[_]Feature{
173 .dependencies = featureSet(&[_]Feature{
175174 .balance_fp_ops,
176175 .crc,
177176 .crypto,
......@@ -187,7 +186,7 @@ pub const all_features = blk: {
187186 result[@enumToInt(Feature.a55)] = .{
188187 .llvm_name = "a55",
189188 .description = "Cortex-A55 ARM processors",
190 .dependencies = sparseFeatureSet(&[_]Feature{
189 .dependencies = featureSet(&[_]Feature{
191190 .crypto,
192191 .dotprod,
193192 .fp_armv8,
......@@ -202,7 +201,7 @@ pub const all_features = blk: {
202201 result[@enumToInt(Feature.a57)] = .{
203202 .llvm_name = "a57",
204203 .description = "Cortex-A57 ARM processors",
205 .dependencies = sparseFeatureSet(&[_]Feature{
204 .dependencies = featureSet(&[_]Feature{
206205 .balance_fp_ops,
207206 .crc,
208207 .crypto,
......@@ -219,7 +218,7 @@ pub const all_features = blk: {
219218 result[@enumToInt(Feature.a72)] = .{
220219 .llvm_name = "a72",
221220 .description = "Cortex-A72 ARM processors",
222 .dependencies = sparseFeatureSet(&[_]Feature{
221 .dependencies = featureSet(&[_]Feature{
223222 .crc,
224223 .crypto,
225224 .fp_armv8,
......@@ -231,7 +230,7 @@ pub const all_features = blk: {
231230 result[@enumToInt(Feature.a73)] = .{
232231 .llvm_name = "a73",
233232 .description = "Cortex-A73 ARM processors",
234 .dependencies = sparseFeatureSet(&[_]Feature{
233 .dependencies = featureSet(&[_]Feature{
235234 .crc,
236235 .crypto,
237236 .fp_armv8,
......@@ -243,7 +242,7 @@ pub const all_features = blk: {
243242 result[@enumToInt(Feature.a75)] = .{
244243 .llvm_name = "a75",
245244 .description = "Cortex-A75 ARM processors",
246 .dependencies = sparseFeatureSet(&[_]Feature{
245 .dependencies = featureSet(&[_]Feature{
247246 .crypto,
248247 .dotprod,
249248 .fp_armv8,
......@@ -258,7 +257,7 @@ pub const all_features = blk: {
258257 result[@enumToInt(Feature.a76)] = .{
259258 .llvm_name = "a76",
260259 .description = "Cortex-A76 ARM processors",
261 .dependencies = sparseFeatureSet(&[_]Feature{
260 .dependencies = featureSet(&[_]Feature{
262261 .crypto,
263262 .dotprod,
264263 .fp_armv8,
......@@ -272,126 +271,126 @@ pub const all_features = blk: {
272271 result[@enumToInt(Feature.aes)] = .{
273272 .llvm_name = "aes",
274273 .description = "Enable AES support",
275 .dependencies = sparseFeatureSet(&[_]Feature{
274 .dependencies = featureSet(&[_]Feature{
276275 .neon,
277276 }),
278277 };
279278 result[@enumToInt(Feature.aggressive_fma)] = .{
280279 .llvm_name = "aggressive-fma",
281280 .description = "Enable Aggressive FMA for floating-point.",
282 .dependencies = sparseFeatureSet(&[_]Feature{}),
281 .dependencies = featureSet(&[_]Feature{}),
283282 };
284283 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
285284 .llvm_name = "alternate-sextload-cvt-f32-pattern",
286285 .description = "Use alternative pattern for sextload convert to f32",
287 .dependencies = sparseFeatureSet(&[_]Feature{}),
286 .dependencies = featureSet(&[_]Feature{}),
288287 };
289288 result[@enumToInt(Feature.altnzcv)] = .{
290289 .llvm_name = "altnzcv",
291290 .description = "Enable alternative NZCV format for floating point comparisons",
292 .dependencies = sparseFeatureSet(&[_]Feature{}),
291 .dependencies = featureSet(&[_]Feature{}),
293292 };
294293 result[@enumToInt(Feature.am)] = .{
295294 .llvm_name = "am",
296295 .description = "Enable v8.4-A Activity Monitors extension",
297 .dependencies = sparseFeatureSet(&[_]Feature{}),
296 .dependencies = featureSet(&[_]Feature{}),
298297 };
299298 result[@enumToInt(Feature.arith_bcc_fusion)] = .{
300299 .llvm_name = "arith-bcc-fusion",
301300 .description = "CPU fuses arithmetic+bcc operations",
302 .dependencies = sparseFeatureSet(&[_]Feature{}),
301 .dependencies = featureSet(&[_]Feature{}),
303302 };
304303 result[@enumToInt(Feature.arith_cbz_fusion)] = .{
305304 .llvm_name = "arith-cbz-fusion",
306305 .description = "CPU fuses arithmetic + cbz/cbnz operations",
307 .dependencies = sparseFeatureSet(&[_]Feature{}),
306 .dependencies = featureSet(&[_]Feature{}),
308307 };
309308 result[@enumToInt(Feature.balance_fp_ops)] = .{
310309 .llvm_name = "balance-fp-ops",
311310 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",
312 .dependencies = sparseFeatureSet(&[_]Feature{}),
311 .dependencies = featureSet(&[_]Feature{}),
313312 };
314313 result[@enumToInt(Feature.bti)] = .{
315314 .llvm_name = "bti",
316315 .description = "Enable Branch Target Identification",
317 .dependencies = sparseFeatureSet(&[_]Feature{}),
316 .dependencies = featureSet(&[_]Feature{}),
318317 };
319318 result[@enumToInt(Feature.call_saved_x10)] = .{
320319 .llvm_name = "call-saved-x10",
321320 .description = "Make X10 callee saved.",
322 .dependencies = sparseFeatureSet(&[_]Feature{}),
321 .dependencies = featureSet(&[_]Feature{}),
323322 };
324323 result[@enumToInt(Feature.call_saved_x11)] = .{
325324 .llvm_name = "call-saved-x11",
326325 .description = "Make X11 callee saved.",
327 .dependencies = sparseFeatureSet(&[_]Feature{}),
326 .dependencies = featureSet(&[_]Feature{}),
328327 };
329328 result[@enumToInt(Feature.call_saved_x12)] = .{
330329 .llvm_name = "call-saved-x12",
331330 .description = "Make X12 callee saved.",
332 .dependencies = sparseFeatureSet(&[_]Feature{}),
331 .dependencies = featureSet(&[_]Feature{}),
333332 };
334333 result[@enumToInt(Feature.call_saved_x13)] = .{
335334 .llvm_name = "call-saved-x13",
336335 .description = "Make X13 callee saved.",
337 .dependencies = sparseFeatureSet(&[_]Feature{}),
336 .dependencies = featureSet(&[_]Feature{}),
338337 };
339338 result[@enumToInt(Feature.call_saved_x14)] = .{
340339 .llvm_name = "call-saved-x14",
341340 .description = "Make X14 callee saved.",
342 .dependencies = sparseFeatureSet(&[_]Feature{}),
341 .dependencies = featureSet(&[_]Feature{}),
343342 };
344343 result[@enumToInt(Feature.call_saved_x15)] = .{
345344 .llvm_name = "call-saved-x15",
346345 .description = "Make X15 callee saved.",
347 .dependencies = sparseFeatureSet(&[_]Feature{}),
346 .dependencies = featureSet(&[_]Feature{}),
348347 };
349348 result[@enumToInt(Feature.call_saved_x18)] = .{
350349 .llvm_name = "call-saved-x18",
351350 .description = "Make X18 callee saved.",
352 .dependencies = sparseFeatureSet(&[_]Feature{}),
351 .dependencies = featureSet(&[_]Feature{}),
353352 };
354353 result[@enumToInt(Feature.call_saved_x8)] = .{
355354 .llvm_name = "call-saved-x8",
356355 .description = "Make X8 callee saved.",
357 .dependencies = sparseFeatureSet(&[_]Feature{}),
356 .dependencies = featureSet(&[_]Feature{}),
358357 };
359358 result[@enumToInt(Feature.call_saved_x9)] = .{
360359 .llvm_name = "call-saved-x9",
361360 .description = "Make X9 callee saved.",
362 .dependencies = sparseFeatureSet(&[_]Feature{}),
361 .dependencies = featureSet(&[_]Feature{}),
363362 };
364363 result[@enumToInt(Feature.ccdp)] = .{
365364 .llvm_name = "ccdp",
366365 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
367 .dependencies = sparseFeatureSet(&[_]Feature{}),
366 .dependencies = featureSet(&[_]Feature{}),
368367 };
369368 result[@enumToInt(Feature.ccidx)] = .{
370369 .llvm_name = "ccidx",
371370 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
372 .dependencies = sparseFeatureSet(&[_]Feature{}),
371 .dependencies = featureSet(&[_]Feature{}),
373372 };
374373 result[@enumToInt(Feature.ccpp)] = .{
375374 .llvm_name = "ccpp",
376375 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
377 .dependencies = sparseFeatureSet(&[_]Feature{}),
376 .dependencies = featureSet(&[_]Feature{}),
378377 };
379378 result[@enumToInt(Feature.complxnum)] = .{
380379 .llvm_name = "complxnum",
381380 .description = "Enable v8.3-A Floating-point complex number support",
382 .dependencies = sparseFeatureSet(&[_]Feature{
381 .dependencies = featureSet(&[_]Feature{
383382 .neon,
384383 }),
385384 };
386385 result[@enumToInt(Feature.crc)] = .{
387386 .llvm_name = "crc",
388387 .description = "Enable ARMv8 CRC-32 checksum instructions",
389 .dependencies = sparseFeatureSet(&[_]Feature{}),
388 .dependencies = featureSet(&[_]Feature{}),
390389 };
391390 result[@enumToInt(Feature.crypto)] = .{
392391 .llvm_name = "crypto",
393392 .description = "Enable cryptographic instructions",
394 .dependencies = sparseFeatureSet(&[_]Feature{
393 .dependencies = featureSet(&[_]Feature{
395394 .aes,
396395 .neon,
397396 .sha2,
......@@ -400,12 +399,12 @@ pub const all_features = blk: {
400399 result[@enumToInt(Feature.custom_cheap_as_move)] = .{
401400 .llvm_name = "custom-cheap-as-move",
402401 .description = "Use custom handling of cheap instructions",
403 .dependencies = sparseFeatureSet(&[_]Feature{}),
402 .dependencies = featureSet(&[_]Feature{}),
404403 };
405404 result[@enumToInt(Feature.cyclone)] = .{
406405 .llvm_name = "cyclone",
407406 .description = "Cyclone",
408 .dependencies = sparseFeatureSet(&[_]Feature{
407 .dependencies = featureSet(&[_]Feature{
409408 .alternate_sextload_cvt_f32_pattern,
410409 .arith_bcc_fusion,
411410 .arith_cbz_fusion,
......@@ -424,29 +423,29 @@ pub const all_features = blk: {
424423 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
425424 .llvm_name = "disable-latency-sched-heuristic",
426425 .description = "Disable latency scheduling heuristic",
427 .dependencies = sparseFeatureSet(&[_]Feature{}),
426 .dependencies = featureSet(&[_]Feature{}),
428427 };
429428 result[@enumToInt(Feature.dit)] = .{
430429 .llvm_name = "dit",
431430 .description = "Enable v8.4-A Data Independent Timing instructions",
432 .dependencies = sparseFeatureSet(&[_]Feature{}),
431 .dependencies = featureSet(&[_]Feature{}),
433432 };
434433 result[@enumToInt(Feature.dotprod)] = .{
435434 .llvm_name = "dotprod",
436435 .description = "Enable dot product support",
437 .dependencies = sparseFeatureSet(&[_]Feature{}),
436 .dependencies = featureSet(&[_]Feature{}),
438437 };
439438 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{
440439 .llvm_name = "exynos-cheap-as-move",
441440 .description = "Use Exynos specific handling of cheap instructions",
442 .dependencies = sparseFeatureSet(&[_]Feature{
441 .dependencies = featureSet(&[_]Feature{
443442 .custom_cheap_as_move,
444443 }),
445444 };
446445 result[@enumToInt(Feature.exynosm1)] = .{
447446 .llvm_name = "exynosm1",
448447 .description = "Samsung Exynos-M1 processors",
449 .dependencies = sparseFeatureSet(&[_]Feature{
448 .dependencies = featureSet(&[_]Feature{
450449 .crc,
451450 .crypto,
452451 .exynos_cheap_as_move,
......@@ -463,7 +462,7 @@ pub const all_features = blk: {
463462 result[@enumToInt(Feature.exynosm2)] = .{
464463 .llvm_name = "exynosm2",
465464 .description = "Samsung Exynos-M2 processors",
466 .dependencies = sparseFeatureSet(&[_]Feature{
465 .dependencies = featureSet(&[_]Feature{
467466 .crc,
468467 .crypto,
469468 .exynos_cheap_as_move,
......@@ -479,7 +478,7 @@ pub const all_features = blk: {
479478 result[@enumToInt(Feature.exynosm3)] = .{
480479 .llvm_name = "exynosm3",
481480 .description = "Samsung Exynos-M3 processors",
482 .dependencies = sparseFeatureSet(&[_]Feature{
481 .dependencies = featureSet(&[_]Feature{
483482 .crc,
484483 .crypto,
485484 .exynos_cheap_as_move,
......@@ -498,7 +497,7 @@ pub const all_features = blk: {
498497 result[@enumToInt(Feature.exynosm4)] = .{
499498 .llvm_name = "exynosm4",
500499 .description = "Samsung Exynos-M4 processors",
501 .dependencies = sparseFeatureSet(&[_]Feature{
500 .dependencies = featureSet(&[_]Feature{
502501 .arith_bcc_fusion,
503502 .arith_cbz_fusion,
504503 .crypto,
......@@ -521,7 +520,7 @@ pub const all_features = blk: {
521520 result[@enumToInt(Feature.falkor)] = .{
522521 .llvm_name = "falkor",
523522 .description = "Qualcomm Falkor processors",
524 .dependencies = sparseFeatureSet(&[_]Feature{
523 .dependencies = featureSet(&[_]Feature{
525524 .crc,
526525 .crypto,
527526 .custom_cheap_as_move,
......@@ -539,78 +538,78 @@ pub const all_features = blk: {
539538 result[@enumToInt(Feature.fmi)] = .{
540539 .llvm_name = "fmi",
541540 .description = "Enable v8.4-A Flag Manipulation Instructions",
542 .dependencies = sparseFeatureSet(&[_]Feature{}),
541 .dependencies = featureSet(&[_]Feature{}),
543542 };
544543 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
545544 .llvm_name = "force-32bit-jump-tables",
546545 .description = "Force jump table entries to be 32-bits wide except at MinSize",
547 .dependencies = sparseFeatureSet(&[_]Feature{}),
546 .dependencies = featureSet(&[_]Feature{}),
548547 };
549548 result[@enumToInt(Feature.fp_armv8)] = .{
550549 .llvm_name = "fp-armv8",
551550 .description = "Enable ARMv8 FP",
552 .dependencies = sparseFeatureSet(&[_]Feature{}),
551 .dependencies = featureSet(&[_]Feature{}),
553552 };
554553 result[@enumToInt(Feature.fp16fml)] = .{
555554 .llvm_name = "fp16fml",
556555 .description = "Enable FP16 FML instructions",
557 .dependencies = sparseFeatureSet(&[_]Feature{
556 .dependencies = featureSet(&[_]Feature{
558557 .fullfp16,
559558 }),
560559 };
561560 result[@enumToInt(Feature.fptoint)] = .{
562561 .llvm_name = "fptoint",
563562 .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",
564 .dependencies = sparseFeatureSet(&[_]Feature{}),
563 .dependencies = featureSet(&[_]Feature{}),
565564 };
566565 result[@enumToInt(Feature.fullfp16)] = .{
567566 .llvm_name = "fullfp16",
568567 .description = "Full FP16",
569 .dependencies = sparseFeatureSet(&[_]Feature{
568 .dependencies = featureSet(&[_]Feature{
570569 .fp_armv8,
571570 }),
572571 };
573572 result[@enumToInt(Feature.fuse_address)] = .{
574573 .llvm_name = "fuse-address",
575574 .description = "CPU fuses address generation and memory operations",
576 .dependencies = sparseFeatureSet(&[_]Feature{}),
575 .dependencies = featureSet(&[_]Feature{}),
577576 };
578577 result[@enumToInt(Feature.fuse_aes)] = .{
579578 .llvm_name = "fuse-aes",
580579 .description = "CPU fuses AES crypto operations",
581 .dependencies = sparseFeatureSet(&[_]Feature{}),
580 .dependencies = featureSet(&[_]Feature{}),
582581 };
583582 result[@enumToInt(Feature.fuse_arith_logic)] = .{
584583 .llvm_name = "fuse-arith-logic",
585584 .description = "CPU fuses arithmetic and logic operations",
586 .dependencies = sparseFeatureSet(&[_]Feature{}),
585 .dependencies = featureSet(&[_]Feature{}),
587586 };
588587 result[@enumToInt(Feature.fuse_crypto_eor)] = .{
589588 .llvm_name = "fuse-crypto-eor",
590589 .description = "CPU fuses AES/PMULL and EOR operations",
591 .dependencies = sparseFeatureSet(&[_]Feature{}),
590 .dependencies = featureSet(&[_]Feature{}),
592591 };
593592 result[@enumToInt(Feature.fuse_csel)] = .{
594593 .llvm_name = "fuse-csel",
595594 .description = "CPU fuses conditional select operations",
596 .dependencies = sparseFeatureSet(&[_]Feature{}),
595 .dependencies = featureSet(&[_]Feature{}),
597596 };
598597 result[@enumToInt(Feature.fuse_literals)] = .{
599598 .llvm_name = "fuse-literals",
600599 .description = "CPU fuses literal generation operations",
601 .dependencies = sparseFeatureSet(&[_]Feature{}),
600 .dependencies = featureSet(&[_]Feature{}),
602601 };
603602 result[@enumToInt(Feature.jsconv)] = .{
604603 .llvm_name = "jsconv",
605604 .description = "Enable v8.3-A JavaScript FP conversion enchancement",
606 .dependencies = sparseFeatureSet(&[_]Feature{
605 .dependencies = featureSet(&[_]Feature{
607606 .fp_armv8,
608607 }),
609608 };
610609 result[@enumToInt(Feature.kryo)] = .{
611610 .llvm_name = "kryo",
612611 .description = "Qualcomm Kryo processors",
613 .dependencies = sparseFeatureSet(&[_]Feature{
612 .dependencies = featureSet(&[_]Feature{
614613 .crc,
615614 .crypto,
616615 .custom_cheap_as_move,
......@@ -626,235 +625,235 @@ pub const all_features = blk: {
626625 result[@enumToInt(Feature.lor)] = .{
627626 .llvm_name = "lor",
628627 .description = "Enables ARM v8.1 Limited Ordering Regions extension",
629 .dependencies = sparseFeatureSet(&[_]Feature{}),
628 .dependencies = featureSet(&[_]Feature{}),
630629 };
631630 result[@enumToInt(Feature.lse)] = .{
632631 .llvm_name = "lse",
633632 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",
634 .dependencies = sparseFeatureSet(&[_]Feature{}),
633 .dependencies = featureSet(&[_]Feature{}),
635634 };
636635 result[@enumToInt(Feature.lsl_fast)] = .{
637636 .llvm_name = "lsl-fast",
638637 .description = "CPU has a fastpath logical shift of up to 3 places",
639 .dependencies = sparseFeatureSet(&[_]Feature{}),
638 .dependencies = featureSet(&[_]Feature{}),
640639 };
641640 result[@enumToInt(Feature.mpam)] = .{
642641 .llvm_name = "mpam",
643642 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",
644 .dependencies = sparseFeatureSet(&[_]Feature{}),
643 .dependencies = featureSet(&[_]Feature{}),
645644 };
646645 result[@enumToInt(Feature.mte)] = .{
647646 .llvm_name = "mte",
648647 .description = "Enable Memory Tagging Extension",
649 .dependencies = sparseFeatureSet(&[_]Feature{}),
648 .dependencies = featureSet(&[_]Feature{}),
650649 };
651650 result[@enumToInt(Feature.neon)] = .{
652651 .llvm_name = "neon",
653652 .description = "Enable Advanced SIMD instructions",
654 .dependencies = sparseFeatureSet(&[_]Feature{
653 .dependencies = featureSet(&[_]Feature{
655654 .fp_armv8,
656655 }),
657656 };
658657 result[@enumToInt(Feature.no_neg_immediates)] = .{
659658 .llvm_name = "no-neg-immediates",
660659 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
661 .dependencies = sparseFeatureSet(&[_]Feature{}),
660 .dependencies = featureSet(&[_]Feature{}),
662661 };
663662 result[@enumToInt(Feature.nv)] = .{
664663 .llvm_name = "nv",
665664 .description = "Enable v8.4-A Nested Virtualization Enchancement",
666 .dependencies = sparseFeatureSet(&[_]Feature{}),
665 .dependencies = featureSet(&[_]Feature{}),
667666 };
668667 result[@enumToInt(Feature.pa)] = .{
669668 .llvm_name = "pa",
670669 .description = "Enable v8.3-A Pointer Authentication enchancement",
671 .dependencies = sparseFeatureSet(&[_]Feature{}),
670 .dependencies = featureSet(&[_]Feature{}),
672671 };
673672 result[@enumToInt(Feature.pan)] = .{
674673 .llvm_name = "pan",
675674 .description = "Enables ARM v8.1 Privileged Access-Never extension",
676 .dependencies = sparseFeatureSet(&[_]Feature{}),
675 .dependencies = featureSet(&[_]Feature{}),
677676 };
678677 result[@enumToInt(Feature.pan_rwv)] = .{
679678 .llvm_name = "pan-rwv",
680679 .description = "Enable v8.2 PAN s1e1R and s1e1W Variants",
681 .dependencies = sparseFeatureSet(&[_]Feature{
680 .dependencies = featureSet(&[_]Feature{
682681 .pan,
683682 }),
684683 };
685684 result[@enumToInt(Feature.perfmon)] = .{
686685 .llvm_name = "perfmon",
687686 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",
688 .dependencies = sparseFeatureSet(&[_]Feature{}),
687 .dependencies = featureSet(&[_]Feature{}),
689688 };
690689 result[@enumToInt(Feature.predictable_select_expensive)] = .{
691690 .llvm_name = "predictable-select-expensive",
692691 .description = "Prefer likely predicted branches over selects",
693 .dependencies = sparseFeatureSet(&[_]Feature{}),
692 .dependencies = featureSet(&[_]Feature{}),
694693 };
695694 result[@enumToInt(Feature.predres)] = .{
696695 .llvm_name = "predres",
697696 .description = "Enable v8.5a execution and data prediction invalidation instructions",
698 .dependencies = sparseFeatureSet(&[_]Feature{}),
697 .dependencies = featureSet(&[_]Feature{}),
699698 };
700699 result[@enumToInt(Feature.rand)] = .{
701700 .llvm_name = "rand",
702701 .description = "Enable Random Number generation instructions",
703 .dependencies = sparseFeatureSet(&[_]Feature{}),
702 .dependencies = featureSet(&[_]Feature{}),
704703 };
705704 result[@enumToInt(Feature.ras)] = .{
706705 .llvm_name = "ras",
707706 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",
708 .dependencies = sparseFeatureSet(&[_]Feature{}),
707 .dependencies = featureSet(&[_]Feature{}),
709708 };
710709 result[@enumToInt(Feature.rasv8_4)] = .{
711710 .llvm_name = "rasv8_4",
712711 .description = "Enable v8.4-A Reliability, Availability and Serviceability extension",
713 .dependencies = sparseFeatureSet(&[_]Feature{
712 .dependencies = featureSet(&[_]Feature{
714713 .ras,
715714 }),
716715 };
717716 result[@enumToInt(Feature.rcpc)] = .{
718717 .llvm_name = "rcpc",
719718 .description = "Enable support for RCPC extension",
720 .dependencies = sparseFeatureSet(&[_]Feature{}),
719 .dependencies = featureSet(&[_]Feature{}),
721720 };
722721 result[@enumToInt(Feature.rcpc_immo)] = .{
723722 .llvm_name = "rcpc-immo",
724723 .description = "Enable v8.4-A RCPC instructions with Immediate Offsets",
725 .dependencies = sparseFeatureSet(&[_]Feature{
724 .dependencies = featureSet(&[_]Feature{
726725 .rcpc,
727726 }),
728727 };
729728 result[@enumToInt(Feature.rdm)] = .{
730729 .llvm_name = "rdm",
731730 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",
732 .dependencies = sparseFeatureSet(&[_]Feature{}),
731 .dependencies = featureSet(&[_]Feature{}),
733732 };
734733 result[@enumToInt(Feature.reserve_x1)] = .{
735734 .llvm_name = "reserve-x1",
736735 .description = "Reserve X1, making it unavailable as a GPR",
737 .dependencies = sparseFeatureSet(&[_]Feature{}),
736 .dependencies = featureSet(&[_]Feature{}),
738737 };
739738 result[@enumToInt(Feature.reserve_x10)] = .{
740739 .llvm_name = "reserve-x10",
741740 .description = "Reserve X10, making it unavailable as a GPR",
742 .dependencies = sparseFeatureSet(&[_]Feature{}),
741 .dependencies = featureSet(&[_]Feature{}),
743742 };
744743 result[@enumToInt(Feature.reserve_x11)] = .{
745744 .llvm_name = "reserve-x11",
746745 .description = "Reserve X11, making it unavailable as a GPR",
747 .dependencies = sparseFeatureSet(&[_]Feature{}),
746 .dependencies = featureSet(&[_]Feature{}),
748747 };
749748 result[@enumToInt(Feature.reserve_x12)] = .{
750749 .llvm_name = "reserve-x12",
751750 .description = "Reserve X12, making it unavailable as a GPR",
752 .dependencies = sparseFeatureSet(&[_]Feature{}),
751 .dependencies = featureSet(&[_]Feature{}),
753752 };
754753 result[@enumToInt(Feature.reserve_x13)] = .{
755754 .llvm_name = "reserve-x13",
756755 .description = "Reserve X13, making it unavailable as a GPR",
757 .dependencies = sparseFeatureSet(&[_]Feature{}),
756 .dependencies = featureSet(&[_]Feature{}),
758757 };
759758 result[@enumToInt(Feature.reserve_x14)] = .{
760759 .llvm_name = "reserve-x14",
761760 .description = "Reserve X14, making it unavailable as a GPR",
762 .dependencies = sparseFeatureSet(&[_]Feature{}),
761 .dependencies = featureSet(&[_]Feature{}),
763762 };
764763 result[@enumToInt(Feature.reserve_x15)] = .{
765764 .llvm_name = "reserve-x15",
766765 .description = "Reserve X15, making it unavailable as a GPR",
767 .dependencies = sparseFeatureSet(&[_]Feature{}),
766 .dependencies = featureSet(&[_]Feature{}),
768767 };
769768 result[@enumToInt(Feature.reserve_x18)] = .{
770769 .llvm_name = "reserve-x18",
771770 .description = "Reserve X18, making it unavailable as a GPR",
772 .dependencies = sparseFeatureSet(&[_]Feature{}),
771 .dependencies = featureSet(&[_]Feature{}),
773772 };
774773 result[@enumToInt(Feature.reserve_x2)] = .{
775774 .llvm_name = "reserve-x2",
776775 .description = "Reserve X2, making it unavailable as a GPR",
777 .dependencies = sparseFeatureSet(&[_]Feature{}),
776 .dependencies = featureSet(&[_]Feature{}),
778777 };
779778 result[@enumToInt(Feature.reserve_x20)] = .{
780779 .llvm_name = "reserve-x20",
781780 .description = "Reserve X20, making it unavailable as a GPR",
782 .dependencies = sparseFeatureSet(&[_]Feature{}),
781 .dependencies = featureSet(&[_]Feature{}),
783782 };
784783 result[@enumToInt(Feature.reserve_x21)] = .{
785784 .llvm_name = "reserve-x21",
786785 .description = "Reserve X21, making it unavailable as a GPR",
787 .dependencies = sparseFeatureSet(&[_]Feature{}),
786 .dependencies = featureSet(&[_]Feature{}),
788787 };
789788 result[@enumToInt(Feature.reserve_x22)] = .{
790789 .llvm_name = "reserve-x22",
791790 .description = "Reserve X22, making it unavailable as a GPR",
792 .dependencies = sparseFeatureSet(&[_]Feature{}),
791 .dependencies = featureSet(&[_]Feature{}),
793792 };
794793 result[@enumToInt(Feature.reserve_x23)] = .{
795794 .llvm_name = "reserve-x23",
796795 .description = "Reserve X23, making it unavailable as a GPR",
797 .dependencies = sparseFeatureSet(&[_]Feature{}),
796 .dependencies = featureSet(&[_]Feature{}),
798797 };
799798 result[@enumToInt(Feature.reserve_x24)] = .{
800799 .llvm_name = "reserve-x24",
801800 .description = "Reserve X24, making it unavailable as a GPR",
802 .dependencies = sparseFeatureSet(&[_]Feature{}),
801 .dependencies = featureSet(&[_]Feature{}),
803802 };
804803 result[@enumToInt(Feature.reserve_x25)] = .{
805804 .llvm_name = "reserve-x25",
806805 .description = "Reserve X25, making it unavailable as a GPR",
807 .dependencies = sparseFeatureSet(&[_]Feature{}),
806 .dependencies = featureSet(&[_]Feature{}),
808807 };
809808 result[@enumToInt(Feature.reserve_x26)] = .{
810809 .llvm_name = "reserve-x26",
811810 .description = "Reserve X26, making it unavailable as a GPR",
812 .dependencies = sparseFeatureSet(&[_]Feature{}),
811 .dependencies = featureSet(&[_]Feature{}),
813812 };
814813 result[@enumToInt(Feature.reserve_x27)] = .{
815814 .llvm_name = "reserve-x27",
816815 .description = "Reserve X27, making it unavailable as a GPR",
817 .dependencies = sparseFeatureSet(&[_]Feature{}),
816 .dependencies = featureSet(&[_]Feature{}),
818817 };
819818 result[@enumToInt(Feature.reserve_x28)] = .{
820819 .llvm_name = "reserve-x28",
821820 .description = "Reserve X28, making it unavailable as a GPR",
822 .dependencies = sparseFeatureSet(&[_]Feature{}),
821 .dependencies = featureSet(&[_]Feature{}),
823822 };
824823 result[@enumToInt(Feature.reserve_x3)] = .{
825824 .llvm_name = "reserve-x3",
826825 .description = "Reserve X3, making it unavailable as a GPR",
827 .dependencies = sparseFeatureSet(&[_]Feature{}),
826 .dependencies = featureSet(&[_]Feature{}),
828827 };
829828 result[@enumToInt(Feature.reserve_x4)] = .{
830829 .llvm_name = "reserve-x4",
831830 .description = "Reserve X4, making it unavailable as a GPR",
832 .dependencies = sparseFeatureSet(&[_]Feature{}),
831 .dependencies = featureSet(&[_]Feature{}),
833832 };
834833 result[@enumToInt(Feature.reserve_x5)] = .{
835834 .llvm_name = "reserve-x5",
836835 .description = "Reserve X5, making it unavailable as a GPR",
837 .dependencies = sparseFeatureSet(&[_]Feature{}),
836 .dependencies = featureSet(&[_]Feature{}),
838837 };
839838 result[@enumToInt(Feature.reserve_x6)] = .{
840839 .llvm_name = "reserve-x6",
841840 .description = "Reserve X6, making it unavailable as a GPR",
842 .dependencies = sparseFeatureSet(&[_]Feature{}),
841 .dependencies = featureSet(&[_]Feature{}),
843842 };
844843 result[@enumToInt(Feature.reserve_x7)] = .{
845844 .llvm_name = "reserve-x7",
846845 .description = "Reserve X7, making it unavailable as a GPR",
847 .dependencies = sparseFeatureSet(&[_]Feature{}),
846 .dependencies = featureSet(&[_]Feature{}),
848847 };
849848 result[@enumToInt(Feature.reserve_x9)] = .{
850849 .llvm_name = "reserve-x9",
851850 .description = "Reserve X9, making it unavailable as a GPR",
852 .dependencies = sparseFeatureSet(&[_]Feature{}),
851 .dependencies = featureSet(&[_]Feature{}),
853852 };
854853 result[@enumToInt(Feature.saphira)] = .{
855854 .llvm_name = "saphira",
856855 .description = "Qualcomm Saphira processors",
857 .dependencies = sparseFeatureSet(&[_]Feature{
856 .dependencies = featureSet(&[_]Feature{
858857 .crypto,
859858 .custom_cheap_as_move,
860859 .fp_armv8,
......@@ -871,24 +870,24 @@ pub const all_features = blk: {
871870 result[@enumToInt(Feature.sb)] = .{
872871 .llvm_name = "sb",
873872 .description = "Enable v8.5 Speculation Barrier",
874 .dependencies = sparseFeatureSet(&[_]Feature{}),
873 .dependencies = featureSet(&[_]Feature{}),
875874 };
876875 result[@enumToInt(Feature.sel2)] = .{
877876 .llvm_name = "sel2",
878877 .description = "Enable v8.4-A Secure Exception Level 2 extension",
879 .dependencies = sparseFeatureSet(&[_]Feature{}),
878 .dependencies = featureSet(&[_]Feature{}),
880879 };
881880 result[@enumToInt(Feature.sha2)] = .{
882881 .llvm_name = "sha2",
883882 .description = "Enable SHA1 and SHA256 support",
884 .dependencies = sparseFeatureSet(&[_]Feature{
883 .dependencies = featureSet(&[_]Feature{
885884 .neon,
886885 }),
887886 };
888887 result[@enumToInt(Feature.sha3)] = .{
889888 .llvm_name = "sha3",
890889 .description = "Enable SHA512 and SHA3 support",
891 .dependencies = sparseFeatureSet(&[_]Feature{
890 .dependencies = featureSet(&[_]Feature{
892891 .neon,
893892 .sha2,
894893 }),
......@@ -896,61 +895,61 @@ pub const all_features = blk: {
896895 result[@enumToInt(Feature.slow_misaligned_128store)] = .{
897896 .llvm_name = "slow-misaligned-128store",
898897 .description = "Misaligned 128 bit stores are slow",
899 .dependencies = sparseFeatureSet(&[_]Feature{}),
898 .dependencies = featureSet(&[_]Feature{}),
900899 };
901900 result[@enumToInt(Feature.slow_paired_128)] = .{
902901 .llvm_name = "slow-paired-128",
903902 .description = "Paired 128 bit loads and stores are slow",
904 .dependencies = sparseFeatureSet(&[_]Feature{}),
903 .dependencies = featureSet(&[_]Feature{}),
905904 };
906905 result[@enumToInt(Feature.slow_strqro_store)] = .{
907906 .llvm_name = "slow-strqro-store",
908907 .description = "STR of Q register with register offset is slow",
909 .dependencies = sparseFeatureSet(&[_]Feature{}),
908 .dependencies = featureSet(&[_]Feature{}),
910909 };
911910 result[@enumToInt(Feature.sm4)] = .{
912911 .llvm_name = "sm4",
913912 .description = "Enable SM3 and SM4 support",
914 .dependencies = sparseFeatureSet(&[_]Feature{
913 .dependencies = featureSet(&[_]Feature{
915914 .neon,
916915 }),
917916 };
918917 result[@enumToInt(Feature.spe)] = .{
919918 .llvm_name = "spe",
920919 .description = "Enable Statistical Profiling extension",
921 .dependencies = sparseFeatureSet(&[_]Feature{}),
920 .dependencies = featureSet(&[_]Feature{}),
922921 };
923922 result[@enumToInt(Feature.specrestrict)] = .{
924923 .llvm_name = "specrestrict",
925924 .description = "Enable architectural speculation restriction",
926 .dependencies = sparseFeatureSet(&[_]Feature{}),
925 .dependencies = featureSet(&[_]Feature{}),
927926 };
928927 result[@enumToInt(Feature.ssbs)] = .{
929928 .llvm_name = "ssbs",
930929 .description = "Enable Speculative Store Bypass Safe bit",
931 .dependencies = sparseFeatureSet(&[_]Feature{}),
930 .dependencies = featureSet(&[_]Feature{}),
932931 };
933932 result[@enumToInt(Feature.strict_align)] = .{
934933 .llvm_name = "strict-align",
935934 .description = "Disallow all unaligned memory access",
936 .dependencies = sparseFeatureSet(&[_]Feature{}),
935 .dependencies = featureSet(&[_]Feature{}),
937936 };
938937 result[@enumToInt(Feature.sve)] = .{
939938 .llvm_name = "sve",
940939 .description = "Enable Scalable Vector Extension (SVE) instructions",
941 .dependencies = sparseFeatureSet(&[_]Feature{}),
940 .dependencies = featureSet(&[_]Feature{}),
942941 };
943942 result[@enumToInt(Feature.sve2)] = .{
944943 .llvm_name = "sve2",
945944 .description = "Enable Scalable Vector Extension 2 (SVE2) instructions",
946 .dependencies = sparseFeatureSet(&[_]Feature{
945 .dependencies = featureSet(&[_]Feature{
947946 .sve,
948947 }),
949948 };
950949 result[@enumToInt(Feature.sve2_aes)] = .{
951950 .llvm_name = "sve2-aes",
952951 .description = "Enable AES SVE2 instructions",
953 .dependencies = sparseFeatureSet(&[_]Feature{
952 .dependencies = featureSet(&[_]Feature{
954953 .aes,
955954 .sve2,
956955 }),
......@@ -958,14 +957,14 @@ pub const all_features = blk: {
958957 result[@enumToInt(Feature.sve2_bitperm)] = .{
959958 .llvm_name = "sve2-bitperm",
960959 .description = "Enable bit permutation SVE2 instructions",
961 .dependencies = sparseFeatureSet(&[_]Feature{
960 .dependencies = featureSet(&[_]Feature{
962961 .sve2,
963962 }),
964963 };
965964 result[@enumToInt(Feature.sve2_sha3)] = .{
966965 .llvm_name = "sve2-sha3",
967966 .description = "Enable SHA3 SVE2 instructions",
968 .dependencies = sparseFeatureSet(&[_]Feature{
967 .dependencies = featureSet(&[_]Feature{
969968 .sha3,
970969 .sve2,
971970 }),
......@@ -973,7 +972,7 @@ pub const all_features = blk: {
973972 result[@enumToInt(Feature.sve2_sm4)] = .{
974973 .llvm_name = "sve2-sm4",
975974 .description = "Enable SM4 SVE2 instructions",
976 .dependencies = sparseFeatureSet(&[_]Feature{
975 .dependencies = featureSet(&[_]Feature{
977976 .sm4,
978977 .sve2,
979978 }),
......@@ -981,7 +980,7 @@ pub const all_features = blk: {
981980 result[@enumToInt(Feature.thunderx)] = .{
982981 .llvm_name = "thunderx",
983982 .description = "Cavium ThunderX processors",
984 .dependencies = sparseFeatureSet(&[_]Feature{
983 .dependencies = featureSet(&[_]Feature{
985984 .crc,
986985 .crypto,
987986 .fp_armv8,
......@@ -994,7 +993,7 @@ pub const all_features = blk: {
994993 result[@enumToInt(Feature.thunderx2t99)] = .{
995994 .llvm_name = "thunderx2t99",
996995 .description = "Cavium ThunderX2 processors",
997 .dependencies = sparseFeatureSet(&[_]Feature{
996 .dependencies = featureSet(&[_]Feature{
998997 .aggressive_fma,
999998 .arith_bcc_fusion,
1000999 .crc,
......@@ -1010,7 +1009,7 @@ pub const all_features = blk: {
10101009 result[@enumToInt(Feature.thunderxt81)] = .{
10111010 .llvm_name = "thunderxt81",
10121011 .description = "Cavium ThunderX processors",
1013 .dependencies = sparseFeatureSet(&[_]Feature{
1012 .dependencies = featureSet(&[_]Feature{
10141013 .crc,
10151014 .crypto,
10161015 .fp_armv8,
......@@ -1023,7 +1022,7 @@ pub const all_features = blk: {
10231022 result[@enumToInt(Feature.thunderxt83)] = .{
10241023 .llvm_name = "thunderxt83",
10251024 .description = "Cavium ThunderX processors",
1026 .dependencies = sparseFeatureSet(&[_]Feature{
1025 .dependencies = featureSet(&[_]Feature{
10271026 .crc,
10281027 .crypto,
10291028 .fp_armv8,
......@@ -1036,7 +1035,7 @@ pub const all_features = blk: {
10361035 result[@enumToInt(Feature.thunderxt88)] = .{
10371036 .llvm_name = "thunderxt88",
10381037 .description = "Cavium ThunderX processors",
1039 .dependencies = sparseFeatureSet(&[_]Feature{
1038 .dependencies = featureSet(&[_]Feature{
10401039 .crc,
10411040 .crypto,
10421041 .fp_armv8,
......@@ -1049,32 +1048,32 @@ pub const all_features = blk: {
10491048 result[@enumToInt(Feature.tlb_rmi)] = .{
10501049 .llvm_name = "tlb-rmi",
10511050 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1052 .dependencies = sparseFeatureSet(&[_]Feature{}),
1051 .dependencies = featureSet(&[_]Feature{}),
10531052 };
10541053 result[@enumToInt(Feature.tpidr_el1)] = .{
10551054 .llvm_name = "tpidr-el1",
10561055 .description = "Permit use of TPIDR_EL1 for the TLS base",
1057 .dependencies = sparseFeatureSet(&[_]Feature{}),
1056 .dependencies = featureSet(&[_]Feature{}),
10581057 };
10591058 result[@enumToInt(Feature.tpidr_el2)] = .{
10601059 .llvm_name = "tpidr-el2",
10611060 .description = "Permit use of TPIDR_EL2 for the TLS base",
1062 .dependencies = sparseFeatureSet(&[_]Feature{}),
1061 .dependencies = featureSet(&[_]Feature{}),
10631062 };
10641063 result[@enumToInt(Feature.tpidr_el3)] = .{
10651064 .llvm_name = "tpidr-el3",
10661065 .description = "Permit use of TPIDR_EL3 for the TLS base",
1067 .dependencies = sparseFeatureSet(&[_]Feature{}),
1066 .dependencies = featureSet(&[_]Feature{}),
10681067 };
10691068 result[@enumToInt(Feature.tracev8_4)] = .{
10701069 .llvm_name = "tracev8.4",
10711070 .description = "Enable v8.4-A Trace extension",
1072 .dependencies = sparseFeatureSet(&[_]Feature{}),
1071 .dependencies = featureSet(&[_]Feature{}),
10731072 };
10741073 result[@enumToInt(Feature.tsv110)] = .{
10751074 .llvm_name = "tsv110",
10761075 .description = "HiSilicon TS-V110 processors",
1077 .dependencies = sparseFeatureSet(&[_]Feature{
1076 .dependencies = featureSet(&[_]Feature{
10781077 .crypto,
10791078 .custom_cheap_as_move,
10801079 .dotprod,
......@@ -1092,27 +1091,27 @@ pub const all_features = blk: {
10921091 result[@enumToInt(Feature.uaops)] = .{
10931092 .llvm_name = "uaops",
10941093 .description = "Enable v8.2 UAO PState",
1095 .dependencies = sparseFeatureSet(&[_]Feature{}),
1094 .dependencies = featureSet(&[_]Feature{}),
10961095 };
10971096 result[@enumToInt(Feature.use_aa)] = .{
10981097 .llvm_name = "use-aa",
10991098 .description = "Use alias analysis during codegen",
1100 .dependencies = sparseFeatureSet(&[_]Feature{}),
1099 .dependencies = featureSet(&[_]Feature{}),
11011100 };
11021101 result[@enumToInt(Feature.use_postra_scheduler)] = .{
11031102 .llvm_name = "use-postra-scheduler",
11041103 .description = "Schedule again after register allocation",
1105 .dependencies = sparseFeatureSet(&[_]Feature{}),
1104 .dependencies = featureSet(&[_]Feature{}),
11061105 };
11071106 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{
11081107 .llvm_name = "use-reciprocal-square-root",
11091108 .description = "Use the reciprocal square root approximation",
1110 .dependencies = sparseFeatureSet(&[_]Feature{}),
1109 .dependencies = featureSet(&[_]Feature{}),
11111110 };
11121111 result[@enumToInt(Feature.v8_1a)] = .{
11131112 .llvm_name = "v8.1a",
11141113 .description = "Support ARM v8.1a instructions",
1115 .dependencies = sparseFeatureSet(&[_]Feature{
1114 .dependencies = featureSet(&[_]Feature{
11161115 .crc,
11171116 .lor,
11181117 .lse,
......@@ -1124,7 +1123,7 @@ pub const all_features = blk: {
11241123 result[@enumToInt(Feature.v8_2a)] = .{
11251124 .llvm_name = "v8.2a",
11261125 .description = "Support ARM v8.2a instructions",
1127 .dependencies = sparseFeatureSet(&[_]Feature{
1126 .dependencies = featureSet(&[_]Feature{
11281127 .ccpp,
11291128 .pan_rwv,
11301129 .ras,
......@@ -1135,7 +1134,7 @@ pub const all_features = blk: {
11351134 result[@enumToInt(Feature.v8_3a)] = .{
11361135 .llvm_name = "v8.3a",
11371136 .description = "Support ARM v8.3a instructions",
1138 .dependencies = sparseFeatureSet(&[_]Feature{
1137 .dependencies = featureSet(&[_]Feature{
11391138 .ccidx,
11401139 .complxnum,
11411140 .jsconv,
......@@ -1147,7 +1146,7 @@ pub const all_features = blk: {
11471146 result[@enumToInt(Feature.v8_4a)] = .{
11481147 .llvm_name = "v8.4a",
11491148 .description = "Support ARM v8.4a instructions",
1150 .dependencies = sparseFeatureSet(&[_]Feature{
1149 .dependencies = featureSet(&[_]Feature{
11511150 .am,
11521151 .dit,
11531152 .dotprod,
......@@ -1165,7 +1164,7 @@ pub const all_features = blk: {
11651164 result[@enumToInt(Feature.v8_5a)] = .{
11661165 .llvm_name = "v8.5a",
11671166 .description = "Support ARM v8.5a instructions",
1168 .dependencies = sparseFeatureSet(&[_]Feature{
1167 .dependencies = featureSet(&[_]Feature{
11691168 .altnzcv,
11701169 .bti,
11711170 .ccdp,
......@@ -1180,17 +1179,17 @@ pub const all_features = blk: {
11801179 result[@enumToInt(Feature.vh)] = .{
11811180 .llvm_name = "vh",
11821181 .description = "Enables ARM v8.1 Virtual Host extension",
1183 .dependencies = sparseFeatureSet(&[_]Feature{}),
1182 .dependencies = featureSet(&[_]Feature{}),
11841183 };
11851184 result[@enumToInt(Feature.zcm)] = .{
11861185 .llvm_name = "zcm",
11871186 .description = "Has zero-cycle register moves",
1188 .dependencies = sparseFeatureSet(&[_]Feature{}),
1187 .dependencies = featureSet(&[_]Feature{}),
11891188 };
11901189 result[@enumToInt(Feature.zcz)] = .{
11911190 .llvm_name = "zcz",
11921191 .description = "Has zero-cycle zeroing instructions",
1193 .dependencies = sparseFeatureSet(&[_]Feature{
1192 .dependencies = featureSet(&[_]Feature{
11941193 .zcz_fp,
11951194 .zcz_gp,
11961195 }),
......@@ -1198,23 +1197,22 @@ pub const all_features = blk: {
11981197 result[@enumToInt(Feature.zcz_fp)] = .{
11991198 .llvm_name = "zcz-fp",
12001199 .description = "Has zero-cycle zeroing instructions for FP registers",
1201 .dependencies = sparseFeatureSet(&[_]Feature{}),
1200 .dependencies = featureSet(&[_]Feature{}),
12021201 };
12031202 result[@enumToInt(Feature.zcz_fp_workaround)] = .{
12041203 .llvm_name = "zcz-fp-workaround",
12051204 .description = "The zero-cycle floating-point zeroing instruction has a bug",
1206 .dependencies = sparseFeatureSet(&[_]Feature{}),
1205 .dependencies = featureSet(&[_]Feature{}),
12071206 };
12081207 result[@enumToInt(Feature.zcz_gp)] = .{
12091208 .llvm_name = "zcz-gp",
12101209 .description = "Has zero-cycle zeroing instructions for generic registers",
1211 .dependencies = sparseFeatureSet(&[_]Feature{}),
1210 .dependencies = featureSet(&[_]Feature{}),
12121211 };
12131212 const ti = @typeInfo(Feature);
12141213 for (result) |*elem, i| {
12151214 elem.index = i;
12161215 elem.name = ti.Enum.fields[i].name;
1217 elem.dependencies.initAsDependencies(i, &result);
12181216 }
12191217 break :blk result;
12201218};
......@@ -1223,126 +1221,126 @@ pub const cpu = struct {
12231221 pub const apple_latest = Cpu{
12241222 .name = "apple_latest",
12251223 .llvm_name = "apple-latest",
1226 .features = featureSet(&all_features, &[_]Feature{
1224 .features = featureSet(&[_]Feature{
12271225 .cyclone,
12281226 }),
12291227 };
12301228 pub const cortex_a35 = Cpu{
12311229 .name = "cortex_a35",
12321230 .llvm_name = "cortex-a35",
1233 .features = featureSet(&all_features, &[_]Feature{
1231 .features = featureSet(&[_]Feature{
12341232 .a35,
12351233 }),
12361234 };
12371235 pub const cortex_a53 = Cpu{
12381236 .name = "cortex_a53",
12391237 .llvm_name = "cortex-a53",
1240 .features = featureSet(&all_features, &[_]Feature{
1238 .features = featureSet(&[_]Feature{
12411239 .a53,
12421240 }),
12431241 };
12441242 pub const cortex_a55 = Cpu{
12451243 .name = "cortex_a55",
12461244 .llvm_name = "cortex-a55",
1247 .features = featureSet(&all_features, &[_]Feature{
1245 .features = featureSet(&[_]Feature{
12481246 .a55,
12491247 }),
12501248 };
12511249 pub const cortex_a57 = Cpu{
12521250 .name = "cortex_a57",
12531251 .llvm_name = "cortex-a57",
1254 .features = featureSet(&all_features, &[_]Feature{
1252 .features = featureSet(&[_]Feature{
12551253 .a57,
12561254 }),
12571255 };
12581256 pub const cortex_a72 = Cpu{
12591257 .name = "cortex_a72",
12601258 .llvm_name = "cortex-a72",
1261 .features = featureSet(&all_features, &[_]Feature{
1259 .features = featureSet(&[_]Feature{
12621260 .a72,
12631261 }),
12641262 };
12651263 pub const cortex_a73 = Cpu{
12661264 .name = "cortex_a73",
12671265 .llvm_name = "cortex-a73",
1268 .features = featureSet(&all_features, &[_]Feature{
1266 .features = featureSet(&[_]Feature{
12691267 .a73,
12701268 }),
12711269 };
12721270 pub const cortex_a75 = Cpu{
12731271 .name = "cortex_a75",
12741272 .llvm_name = "cortex-a75",
1275 .features = featureSet(&all_features, &[_]Feature{
1273 .features = featureSet(&[_]Feature{
12761274 .a75,
12771275 }),
12781276 };
12791277 pub const cortex_a76 = Cpu{
12801278 .name = "cortex_a76",
12811279 .llvm_name = "cortex-a76",
1282 .features = featureSet(&all_features, &[_]Feature{
1280 .features = featureSet(&[_]Feature{
12831281 .a76,
12841282 }),
12851283 };
12861284 pub const cortex_a76ae = Cpu{
12871285 .name = "cortex_a76ae",
12881286 .llvm_name = "cortex-a76ae",
1289 .features = featureSet(&all_features, &[_]Feature{
1287 .features = featureSet(&[_]Feature{
12901288 .a76,
12911289 }),
12921290 };
12931291 pub const cyclone = Cpu{
12941292 .name = "cyclone",
12951293 .llvm_name = "cyclone",
1296 .features = featureSet(&all_features, &[_]Feature{
1294 .features = featureSet(&[_]Feature{
12971295 .cyclone,
12981296 }),
12991297 };
13001298 pub const exynos_m1 = Cpu{
13011299 .name = "exynos_m1",
13021300 .llvm_name = "exynos-m1",
1303 .features = featureSet(&all_features, &[_]Feature{
1301 .features = featureSet(&[_]Feature{
13041302 .exynosm1,
13051303 }),
13061304 };
13071305 pub const exynos_m2 = Cpu{
13081306 .name = "exynos_m2",
13091307 .llvm_name = "exynos-m2",
1310 .features = featureSet(&all_features, &[_]Feature{
1308 .features = featureSet(&[_]Feature{
13111309 .exynosm2,
13121310 }),
13131311 };
13141312 pub const exynos_m3 = Cpu{
13151313 .name = "exynos_m3",
13161314 .llvm_name = "exynos-m3",
1317 .features = featureSet(&all_features, &[_]Feature{
1315 .features = featureSet(&[_]Feature{
13181316 .exynosm3,
13191317 }),
13201318 };
13211319 pub const exynos_m4 = Cpu{
13221320 .name = "exynos_m4",
13231321 .llvm_name = "exynos-m4",
1324 .features = featureSet(&all_features, &[_]Feature{
1322 .features = featureSet(&[_]Feature{
13251323 .exynosm4,
13261324 }),
13271325 };
13281326 pub const exynos_m5 = Cpu{
13291327 .name = "exynos_m5",
13301328 .llvm_name = "exynos-m5",
1331 .features = featureSet(&all_features, &[_]Feature{
1329 .features = featureSet(&[_]Feature{
13321330 .exynosm4,
13331331 }),
13341332 };
13351333 pub const falkor = Cpu{
13361334 .name = "falkor",
13371335 .llvm_name = "falkor",
1338 .features = featureSet(&all_features, &[_]Feature{
1336 .features = featureSet(&[_]Feature{
13391337 .falkor,
13401338 }),
13411339 };
13421340 pub const generic = Cpu{
13431341 .name = "generic",
13441342 .llvm_name = "generic",
1345 .features = featureSet(&all_features, &[_]Feature{
1343 .features = featureSet(&[_]Feature{
13461344 .fp_armv8,
13471345 .fuse_aes,
13481346 .neon,
......@@ -1353,56 +1351,56 @@ pub const cpu = struct {
13531351 pub const kryo = Cpu{
13541352 .name = "kryo",
13551353 .llvm_name = "kryo",
1356 .features = featureSet(&all_features, &[_]Feature{
1354 .features = featureSet(&[_]Feature{
13571355 .kryo,
13581356 }),
13591357 };
13601358 pub const saphira = Cpu{
13611359 .name = "saphira",
13621360 .llvm_name = "saphira",
1363 .features = featureSet(&all_features, &[_]Feature{
1361 .features = featureSet(&[_]Feature{
13641362 .saphira,
13651363 }),
13661364 };
13671365 pub const thunderx = Cpu{
13681366 .name = "thunderx",
13691367 .llvm_name = "thunderx",
1370 .features = featureSet(&all_features, &[_]Feature{
1368 .features = featureSet(&[_]Feature{
13711369 .thunderx,
13721370 }),
13731371 };
13741372 pub const thunderx2t99 = Cpu{
13751373 .name = "thunderx2t99",
13761374 .llvm_name = "thunderx2t99",
1377 .features = featureSet(&all_features, &[_]Feature{
1375 .features = featureSet(&[_]Feature{
13781376 .thunderx2t99,
13791377 }),
13801378 };
13811379 pub const thunderxt81 = Cpu{
13821380 .name = "thunderxt81",
13831381 .llvm_name = "thunderxt81",
1384 .features = featureSet(&all_features, &[_]Feature{
1382 .features = featureSet(&[_]Feature{
13851383 .thunderxt81,
13861384 }),
13871385 };
13881386 pub const thunderxt83 = Cpu{
13891387 .name = "thunderxt83",
13901388 .llvm_name = "thunderxt83",
1391 .features = featureSet(&all_features, &[_]Feature{
1389 .features = featureSet(&[_]Feature{
13921390 .thunderxt83,
13931391 }),
13941392 };
13951393 pub const thunderxt88 = Cpu{
13961394 .name = "thunderxt88",
13971395 .llvm_name = "thunderxt88",
1398 .features = featureSet(&all_features, &[_]Feature{
1396 .features = featureSet(&[_]Feature{
13991397 .thunderxt88,
14001398 }),
14011399 };
14021400 pub const tsv110 = Cpu{
14031401 .name = "tsv110",
14041402 .llvm_name = "tsv110",
1405 .features = featureSet(&all_features, &[_]Feature{
1403 .features = featureSet(&[_]Feature{
14061404 .tsv110,
14071405 }),
14081406 };
lib/std/target/amdgpu.zig+146-148
......@@ -114,186 +114,185 @@ pub const Feature = enum {
114114pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
115115
116116pub const all_features = blk: {
117 @setEvalBranchQuota(10000);
118117 const len = @typeInfo(Feature).Enum.fields.len;
119118 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
120119 var result: [len]Cpu.Feature = undefined;
121120 result[@enumToInt(Feature.@"16_bit_insts")] = .{
122121 .llvm_name = "16-bit-insts",
123122 .description = "Has i16/f16 instructions",
124 .dependencies = sparseFeatureSet(&[_]Feature{}),
123 .dependencies = featureSet(&[_]Feature{}),
125124 };
126125 result[@enumToInt(Feature.DumpCode)] = .{
127126 .llvm_name = "DumpCode",
128127 .description = "Dump MachineInstrs in the CodeEmitter",
129 .dependencies = sparseFeatureSet(&[_]Feature{}),
128 .dependencies = featureSet(&[_]Feature{}),
130129 };
131130 result[@enumToInt(Feature.add_no_carry_insts)] = .{
132131 .llvm_name = "add-no-carry-insts",
133132 .description = "Have VALU add/sub instructions without carry out",
134 .dependencies = sparseFeatureSet(&[_]Feature{}),
133 .dependencies = featureSet(&[_]Feature{}),
135134 };
136135 result[@enumToInt(Feature.aperture_regs)] = .{
137136 .llvm_name = "aperture-regs",
138137 .description = "Has Memory Aperture Base and Size Registers",
139 .dependencies = sparseFeatureSet(&[_]Feature{}),
138 .dependencies = featureSet(&[_]Feature{}),
140139 };
141140 result[@enumToInt(Feature.atomic_fadd_insts)] = .{
142141 .llvm_name = "atomic-fadd-insts",
143142 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
144 .dependencies = sparseFeatureSet(&[_]Feature{}),
143 .dependencies = featureSet(&[_]Feature{}),
145144 };
146145 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
147146 .llvm_name = "auto-waitcnt-before-barrier",
148147 .description = "Hardware automatically inserts waitcnt before barrier",
149 .dependencies = sparseFeatureSet(&[_]Feature{}),
148 .dependencies = featureSet(&[_]Feature{}),
150149 };
151150 result[@enumToInt(Feature.ci_insts)] = .{
152151 .llvm_name = "ci-insts",
153152 .description = "Additional instructions for CI+",
154 .dependencies = sparseFeatureSet(&[_]Feature{}),
153 .dependencies = featureSet(&[_]Feature{}),
155154 };
156155 result[@enumToInt(Feature.code_object_v3)] = .{
157156 .llvm_name = "code-object-v3",
158157 .description = "Generate code object version 3",
159 .dependencies = sparseFeatureSet(&[_]Feature{}),
158 .dependencies = featureSet(&[_]Feature{}),
160159 };
161160 result[@enumToInt(Feature.cumode)] = .{
162161 .llvm_name = "cumode",
163162 .description = "Enable CU wavefront execution mode",
164 .dependencies = sparseFeatureSet(&[_]Feature{}),
163 .dependencies = featureSet(&[_]Feature{}),
165164 };
166165 result[@enumToInt(Feature.dl_insts)] = .{
167166 .llvm_name = "dl-insts",
168167 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
169 .dependencies = sparseFeatureSet(&[_]Feature{}),
168 .dependencies = featureSet(&[_]Feature{}),
170169 };
171170 result[@enumToInt(Feature.dot1_insts)] = .{
172171 .llvm_name = "dot1-insts",
173172 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
174 .dependencies = sparseFeatureSet(&[_]Feature{}),
173 .dependencies = featureSet(&[_]Feature{}),
175174 };
176175 result[@enumToInt(Feature.dot2_insts)] = .{
177176 .llvm_name = "dot2-insts",
178177 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",
179 .dependencies = sparseFeatureSet(&[_]Feature{}),
178 .dependencies = featureSet(&[_]Feature{}),
180179 };
181180 result[@enumToInt(Feature.dot3_insts)] = .{
182181 .llvm_name = "dot3-insts",
183182 .description = "Has v_dot8c_i32_i4 instruction",
184 .dependencies = sparseFeatureSet(&[_]Feature{}),
183 .dependencies = featureSet(&[_]Feature{}),
185184 };
186185 result[@enumToInt(Feature.dot4_insts)] = .{
187186 .llvm_name = "dot4-insts",
188187 .description = "Has v_dot2c_i32_i16 instruction",
189 .dependencies = sparseFeatureSet(&[_]Feature{}),
188 .dependencies = featureSet(&[_]Feature{}),
190189 };
191190 result[@enumToInt(Feature.dot5_insts)] = .{
192191 .llvm_name = "dot5-insts",
193192 .description = "Has v_dot2c_f32_f16 instruction",
194 .dependencies = sparseFeatureSet(&[_]Feature{}),
193 .dependencies = featureSet(&[_]Feature{}),
195194 };
196195 result[@enumToInt(Feature.dot6_insts)] = .{
197196 .llvm_name = "dot6-insts",
198197 .description = "Has v_dot4c_i32_i8 instruction",
199 .dependencies = sparseFeatureSet(&[_]Feature{}),
198 .dependencies = featureSet(&[_]Feature{}),
200199 };
201200 result[@enumToInt(Feature.dpp)] = .{
202201 .llvm_name = "dpp",
203202 .description = "Support DPP (Data Parallel Primitives) extension",
204 .dependencies = sparseFeatureSet(&[_]Feature{}),
203 .dependencies = featureSet(&[_]Feature{}),
205204 };
206205 result[@enumToInt(Feature.dpp8)] = .{
207206 .llvm_name = "dpp8",
208207 .description = "Support DPP8 (Data Parallel Primitives) extension",
209 .dependencies = sparseFeatureSet(&[_]Feature{}),
208 .dependencies = featureSet(&[_]Feature{}),
210209 };
211210 result[@enumToInt(Feature.dumpcode)] = .{
212211 .llvm_name = "dumpcode",
213212 .description = "Dump MachineInstrs in the CodeEmitter",
214 .dependencies = sparseFeatureSet(&[_]Feature{}),
213 .dependencies = featureSet(&[_]Feature{}),
215214 };
216215 result[@enumToInt(Feature.enable_ds128)] = .{
217216 .llvm_name = "enable-ds128",
218217 .description = "Use ds_read|write_b128",
219 .dependencies = sparseFeatureSet(&[_]Feature{}),
218 .dependencies = featureSet(&[_]Feature{}),
220219 };
221220 result[@enumToInt(Feature.enable_prt_strict_null)] = .{
222221 .llvm_name = "enable-prt-strict-null",
223222 .description = "Enable zeroing of result registers for sparse texture fetches",
224 .dependencies = sparseFeatureSet(&[_]Feature{}),
223 .dependencies = featureSet(&[_]Feature{}),
225224 };
226225 result[@enumToInt(Feature.fast_fmaf)] = .{
227226 .llvm_name = "fast-fmaf",
228227 .description = "Assuming f32 fma is at least as fast as mul + add",
229 .dependencies = sparseFeatureSet(&[_]Feature{}),
228 .dependencies = featureSet(&[_]Feature{}),
230229 };
231230 result[@enumToInt(Feature.flat_address_space)] = .{
232231 .llvm_name = "flat-address-space",
233232 .description = "Support flat address space",
234 .dependencies = sparseFeatureSet(&[_]Feature{}),
233 .dependencies = featureSet(&[_]Feature{}),
235234 };
236235 result[@enumToInt(Feature.flat_for_global)] = .{
237236 .llvm_name = "flat-for-global",
238237 .description = "Force to generate flat instruction for global",
239 .dependencies = sparseFeatureSet(&[_]Feature{}),
238 .dependencies = featureSet(&[_]Feature{}),
240239 };
241240 result[@enumToInt(Feature.flat_global_insts)] = .{
242241 .llvm_name = "flat-global-insts",
243242 .description = "Have global_* flat memory instructions",
244 .dependencies = sparseFeatureSet(&[_]Feature{}),
243 .dependencies = featureSet(&[_]Feature{}),
245244 };
246245 result[@enumToInt(Feature.flat_inst_offsets)] = .{
247246 .llvm_name = "flat-inst-offsets",
248247 .description = "Flat instructions have immediate offset addressing mode",
249 .dependencies = sparseFeatureSet(&[_]Feature{}),
248 .dependencies = featureSet(&[_]Feature{}),
250249 };
251250 result[@enumToInt(Feature.flat_scratch_insts)] = .{
252251 .llvm_name = "flat-scratch-insts",
253252 .description = "Have scratch_* flat memory instructions",
254 .dependencies = sparseFeatureSet(&[_]Feature{}),
253 .dependencies = featureSet(&[_]Feature{}),
255254 };
256255 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
257256 .llvm_name = "flat-segment-offset-bug",
258257 .description = "GFX10 bug, inst_offset ignored in flat segment",
259 .dependencies = sparseFeatureSet(&[_]Feature{}),
258 .dependencies = featureSet(&[_]Feature{}),
260259 };
261260 result[@enumToInt(Feature.fma_mix_insts)] = .{
262261 .llvm_name = "fma-mix-insts",
263262 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
264 .dependencies = sparseFeatureSet(&[_]Feature{}),
263 .dependencies = featureSet(&[_]Feature{}),
265264 };
266265 result[@enumToInt(Feature.fmaf)] = .{
267266 .llvm_name = "fmaf",
268267 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
269 .dependencies = sparseFeatureSet(&[_]Feature{}),
268 .dependencies = featureSet(&[_]Feature{}),
270269 };
271270 result[@enumToInt(Feature.fp_exceptions)] = .{
272271 .llvm_name = "fp-exceptions",
273272 .description = "Enable floating point exceptions",
274 .dependencies = sparseFeatureSet(&[_]Feature{}),
273 .dependencies = featureSet(&[_]Feature{}),
275274 };
276275 result[@enumToInt(Feature.fp16_denormals)] = .{
277276 .llvm_name = "fp16-denormals",
278277 .description = "Enable half precision denormal handling",
279 .dependencies = sparseFeatureSet(&[_]Feature{
278 .dependencies = featureSet(&[_]Feature{
280279 .fp64_fp16_denormals,
281280 }),
282281 };
283282 result[@enumToInt(Feature.fp32_denormals)] = .{
284283 .llvm_name = "fp32-denormals",
285284 .description = "Enable single precision denormal handling",
286 .dependencies = sparseFeatureSet(&[_]Feature{}),
285 .dependencies = featureSet(&[_]Feature{}),
287286 };
288287 result[@enumToInt(Feature.fp64)] = .{
289288 .llvm_name = "fp64",
290289 .description = "Enable double precision operations",
291 .dependencies = sparseFeatureSet(&[_]Feature{}),
290 .dependencies = featureSet(&[_]Feature{}),
292291 };
293292 result[@enumToInt(Feature.fp64_denormals)] = .{
294293 .llvm_name = "fp64-denormals",
295294 .description = "Enable double and half precision denormal handling",
296 .dependencies = sparseFeatureSet(&[_]Feature{
295 .dependencies = featureSet(&[_]Feature{
297296 .fp64,
298297 .fp64_fp16_denormals,
299298 }),
......@@ -301,19 +300,19 @@ pub const all_features = blk: {
301300 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{
302301 .llvm_name = "fp64-fp16-denormals",
303302 .description = "Enable double and half precision denormal handling",
304 .dependencies = sparseFeatureSet(&[_]Feature{
303 .dependencies = featureSet(&[_]Feature{
305304 .fp64,
306305 }),
307306 };
308307 result[@enumToInt(Feature.gcn3_encoding)] = .{
309308 .llvm_name = "gcn3-encoding",
310309 .description = "Encoding format for VI",
311 .dependencies = sparseFeatureSet(&[_]Feature{}),
310 .dependencies = featureSet(&[_]Feature{}),
312311 };
313312 result[@enumToInt(Feature.gfx10)] = .{
314313 .llvm_name = "gfx10",
315314 .description = "GFX10 GPU generation",
316 .dependencies = sparseFeatureSet(&[_]Feature{
315 .dependencies = featureSet(&[_]Feature{
317316 .@"16_bit_insts",
318317 .add_no_carry_insts,
319318 .aperture_regs,
......@@ -353,22 +352,22 @@ pub const all_features = blk: {
353352 result[@enumToInt(Feature.gfx10_insts)] = .{
354353 .llvm_name = "gfx10-insts",
355354 .description = "Additional instructions for GFX10+",
356 .dependencies = sparseFeatureSet(&[_]Feature{}),
355 .dependencies = featureSet(&[_]Feature{}),
357356 };
358357 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
359358 .llvm_name = "gfx7-gfx8-gfx9-insts",
360359 .description = "Instructions shared in GFX7, GFX8, GFX9",
361 .dependencies = sparseFeatureSet(&[_]Feature{}),
360 .dependencies = featureSet(&[_]Feature{}),
362361 };
363362 result[@enumToInt(Feature.gfx8_insts)] = .{
364363 .llvm_name = "gfx8-insts",
365364 .description = "Additional instructions for GFX8+",
366 .dependencies = sparseFeatureSet(&[_]Feature{}),
365 .dependencies = featureSet(&[_]Feature{}),
367366 };
368367 result[@enumToInt(Feature.gfx9)] = .{
369368 .llvm_name = "gfx9",
370369 .description = "GFX9 GPU generation",
371 .dependencies = sparseFeatureSet(&[_]Feature{
370 .dependencies = featureSet(&[_]Feature{
372371 .@"16_bit_insts",
373372 .add_no_carry_insts,
374373 .aperture_regs,
......@@ -404,212 +403,212 @@ pub const all_features = blk: {
404403 result[@enumToInt(Feature.gfx9_insts)] = .{
405404 .llvm_name = "gfx9-insts",
406405 .description = "Additional instructions for GFX9+",
407 .dependencies = sparseFeatureSet(&[_]Feature{}),
406 .dependencies = featureSet(&[_]Feature{}),
408407 };
409408 result[@enumToInt(Feature.half_rate_64_ops)] = .{
410409 .llvm_name = "half-rate-64-ops",
411410 .description = "Most fp64 instructions are half rate instead of quarter",
412 .dependencies = sparseFeatureSet(&[_]Feature{}),
411 .dependencies = featureSet(&[_]Feature{}),
413412 };
414413 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{
415414 .llvm_name = "inst-fwd-prefetch-bug",
416415 .description = "S_INST_PREFETCH instruction causes shader to hang",
417 .dependencies = sparseFeatureSet(&[_]Feature{}),
416 .dependencies = featureSet(&[_]Feature{}),
418417 };
419418 result[@enumToInt(Feature.int_clamp_insts)] = .{
420419 .llvm_name = "int-clamp-insts",
421420 .description = "Support clamp for integer destination",
422 .dependencies = sparseFeatureSet(&[_]Feature{}),
421 .dependencies = featureSet(&[_]Feature{}),
423422 };
424423 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{
425424 .llvm_name = "inv-2pi-inline-imm",
426425 .description = "Has 1 / (2 * pi) as inline immediate",
427 .dependencies = sparseFeatureSet(&[_]Feature{}),
426 .dependencies = featureSet(&[_]Feature{}),
428427 };
429428 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{
430429 .llvm_name = "lds-branch-vmem-war-hazard",
431430 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
432 .dependencies = sparseFeatureSet(&[_]Feature{}),
431 .dependencies = featureSet(&[_]Feature{}),
433432 };
434433 result[@enumToInt(Feature.lds_misaligned_bug)] = .{
435434 .llvm_name = "lds-misaligned-bug",
436435 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
437 .dependencies = sparseFeatureSet(&[_]Feature{}),
436 .dependencies = featureSet(&[_]Feature{}),
438437 };
439438 result[@enumToInt(Feature.ldsbankcount16)] = .{
440439 .llvm_name = "ldsbankcount16",
441440 .description = "The number of LDS banks per compute unit.",
442 .dependencies = sparseFeatureSet(&[_]Feature{}),
441 .dependencies = featureSet(&[_]Feature{}),
443442 };
444443 result[@enumToInt(Feature.ldsbankcount32)] = .{
445444 .llvm_name = "ldsbankcount32",
446445 .description = "The number of LDS banks per compute unit.",
447 .dependencies = sparseFeatureSet(&[_]Feature{}),
446 .dependencies = featureSet(&[_]Feature{}),
448447 };
449448 result[@enumToInt(Feature.load_store_opt)] = .{
450449 .llvm_name = "load-store-opt",
451450 .description = "Enable SI load/store optimizer pass",
452 .dependencies = sparseFeatureSet(&[_]Feature{}),
451 .dependencies = featureSet(&[_]Feature{}),
453452 };
454453 result[@enumToInt(Feature.localmemorysize0)] = .{
455454 .llvm_name = "localmemorysize0",
456455 .description = "The size of local memory in bytes",
457 .dependencies = sparseFeatureSet(&[_]Feature{}),
456 .dependencies = featureSet(&[_]Feature{}),
458457 };
459458 result[@enumToInt(Feature.localmemorysize32768)] = .{
460459 .llvm_name = "localmemorysize32768",
461460 .description = "The size of local memory in bytes",
462 .dependencies = sparseFeatureSet(&[_]Feature{}),
461 .dependencies = featureSet(&[_]Feature{}),
463462 };
464463 result[@enumToInt(Feature.localmemorysize65536)] = .{
465464 .llvm_name = "localmemorysize65536",
466465 .description = "The size of local memory in bytes",
467 .dependencies = sparseFeatureSet(&[_]Feature{}),
466 .dependencies = featureSet(&[_]Feature{}),
468467 };
469468 result[@enumToInt(Feature.mad_mix_insts)] = .{
470469 .llvm_name = "mad-mix-insts",
471470 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
472 .dependencies = sparseFeatureSet(&[_]Feature{}),
471 .dependencies = featureSet(&[_]Feature{}),
473472 };
474473 result[@enumToInt(Feature.mai_insts)] = .{
475474 .llvm_name = "mai-insts",
476475 .description = "Has mAI instructions",
477 .dependencies = sparseFeatureSet(&[_]Feature{}),
476 .dependencies = featureSet(&[_]Feature{}),
478477 };
479478 result[@enumToInt(Feature.max_private_element_size_16)] = .{
480479 .llvm_name = "max-private-element-size-16",
481480 .description = "Maximum private access size may be 16",
482 .dependencies = sparseFeatureSet(&[_]Feature{}),
481 .dependencies = featureSet(&[_]Feature{}),
483482 };
484483 result[@enumToInt(Feature.max_private_element_size_4)] = .{
485484 .llvm_name = "max-private-element-size-4",
486485 .description = "Maximum private access size may be 4",
487 .dependencies = sparseFeatureSet(&[_]Feature{}),
486 .dependencies = featureSet(&[_]Feature{}),
488487 };
489488 result[@enumToInt(Feature.max_private_element_size_8)] = .{
490489 .llvm_name = "max-private-element-size-8",
491490 .description = "Maximum private access size may be 8",
492 .dependencies = sparseFeatureSet(&[_]Feature{}),
491 .dependencies = featureSet(&[_]Feature{}),
493492 };
494493 result[@enumToInt(Feature.mimg_r128)] = .{
495494 .llvm_name = "mimg-r128",
496495 .description = "Support 128-bit texture resources",
497 .dependencies = sparseFeatureSet(&[_]Feature{}),
496 .dependencies = featureSet(&[_]Feature{}),
498497 };
499498 result[@enumToInt(Feature.movrel)] = .{
500499 .llvm_name = "movrel",
501500 .description = "Has v_movrel*_b32 instructions",
502 .dependencies = sparseFeatureSet(&[_]Feature{}),
501 .dependencies = featureSet(&[_]Feature{}),
503502 };
504503 result[@enumToInt(Feature.no_data_dep_hazard)] = .{
505504 .llvm_name = "no-data-dep-hazard",
506505 .description = "Does not need SW waitstates",
507 .dependencies = sparseFeatureSet(&[_]Feature{}),
506 .dependencies = featureSet(&[_]Feature{}),
508507 };
509508 result[@enumToInt(Feature.no_sdst_cmpx)] = .{
510509 .llvm_name = "no-sdst-cmpx",
511510 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
512 .dependencies = sparseFeatureSet(&[_]Feature{}),
511 .dependencies = featureSet(&[_]Feature{}),
513512 };
514513 result[@enumToInt(Feature.no_sram_ecc_support)] = .{
515514 .llvm_name = "no-sram-ecc-support",
516515 .description = "Hardware does not support SRAM ECC",
517 .dependencies = sparseFeatureSet(&[_]Feature{}),
516 .dependencies = featureSet(&[_]Feature{}),
518517 };
519518 result[@enumToInt(Feature.no_xnack_support)] = .{
520519 .llvm_name = "no-xnack-support",
521520 .description = "Hardware does not support XNACK",
522 .dependencies = sparseFeatureSet(&[_]Feature{}),
521 .dependencies = featureSet(&[_]Feature{}),
523522 };
524523 result[@enumToInt(Feature.nsa_encoding)] = .{
525524 .llvm_name = "nsa-encoding",
526525 .description = "Support NSA encoding for image instructions",
527 .dependencies = sparseFeatureSet(&[_]Feature{}),
526 .dependencies = featureSet(&[_]Feature{}),
528527 };
529528 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
530529 .llvm_name = "nsa-to-vmem-bug",
531530 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
532 .dependencies = sparseFeatureSet(&[_]Feature{}),
531 .dependencies = featureSet(&[_]Feature{}),
533532 };
534533 result[@enumToInt(Feature.offset_3f_bug)] = .{
535534 .llvm_name = "offset-3f-bug",
536535 .description = "Branch offset of 3f hardware bug",
537 .dependencies = sparseFeatureSet(&[_]Feature{}),
536 .dependencies = featureSet(&[_]Feature{}),
538537 };
539538 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
540539 .llvm_name = "pk-fmac-f16-inst",
541540 .description = "Has v_pk_fmac_f16 instruction",
542 .dependencies = sparseFeatureSet(&[_]Feature{}),
541 .dependencies = featureSet(&[_]Feature{}),
543542 };
544543 result[@enumToInt(Feature.promote_alloca)] = .{
545544 .llvm_name = "promote-alloca",
546545 .description = "Enable promote alloca pass",
547 .dependencies = sparseFeatureSet(&[_]Feature{}),
546 .dependencies = featureSet(&[_]Feature{}),
548547 };
549548 result[@enumToInt(Feature.r128_a16)] = .{
550549 .llvm_name = "r128-a16",
551550 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
552 .dependencies = sparseFeatureSet(&[_]Feature{}),
551 .dependencies = featureSet(&[_]Feature{}),
553552 };
554553 result[@enumToInt(Feature.register_banking)] = .{
555554 .llvm_name = "register-banking",
556555 .description = "Has register banking",
557 .dependencies = sparseFeatureSet(&[_]Feature{}),
556 .dependencies = featureSet(&[_]Feature{}),
558557 };
559558 result[@enumToInt(Feature.s_memrealtime)] = .{
560559 .llvm_name = "s-memrealtime",
561560 .description = "Has s_memrealtime instruction",
562 .dependencies = sparseFeatureSet(&[_]Feature{}),
561 .dependencies = featureSet(&[_]Feature{}),
563562 };
564563 result[@enumToInt(Feature.scalar_atomics)] = .{
565564 .llvm_name = "scalar-atomics",
566565 .description = "Has atomic scalar memory instructions",
567 .dependencies = sparseFeatureSet(&[_]Feature{}),
566 .dependencies = featureSet(&[_]Feature{}),
568567 };
569568 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{
570569 .llvm_name = "scalar-flat-scratch-insts",
571570 .description = "Have s_scratch_* flat memory instructions",
572 .dependencies = sparseFeatureSet(&[_]Feature{}),
571 .dependencies = featureSet(&[_]Feature{}),
573572 };
574573 result[@enumToInt(Feature.scalar_stores)] = .{
575574 .llvm_name = "scalar-stores",
576575 .description = "Has store scalar memory instructions",
577 .dependencies = sparseFeatureSet(&[_]Feature{}),
576 .dependencies = featureSet(&[_]Feature{}),
578577 };
579578 result[@enumToInt(Feature.sdwa)] = .{
580579 .llvm_name = "sdwa",
581580 .description = "Support SDWA (Sub-DWORD Addressing) extension",
582 .dependencies = sparseFeatureSet(&[_]Feature{}),
581 .dependencies = featureSet(&[_]Feature{}),
583582 };
584583 result[@enumToInt(Feature.sdwa_mav)] = .{
585584 .llvm_name = "sdwa-mav",
586585 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
587 .dependencies = sparseFeatureSet(&[_]Feature{}),
586 .dependencies = featureSet(&[_]Feature{}),
588587 };
589588 result[@enumToInt(Feature.sdwa_omod)] = .{
590589 .llvm_name = "sdwa-omod",
591590 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
592 .dependencies = sparseFeatureSet(&[_]Feature{}),
591 .dependencies = featureSet(&[_]Feature{}),
593592 };
594593 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{
595594 .llvm_name = "sdwa-out-mods-vopc",
596595 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
597 .dependencies = sparseFeatureSet(&[_]Feature{}),
596 .dependencies = featureSet(&[_]Feature{}),
598597 };
599598 result[@enumToInt(Feature.sdwa_scalar)] = .{
600599 .llvm_name = "sdwa-scalar",
601600 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
602 .dependencies = sparseFeatureSet(&[_]Feature{}),
601 .dependencies = featureSet(&[_]Feature{}),
603602 };
604603 result[@enumToInt(Feature.sdwa_sdst)] = .{
605604 .llvm_name = "sdwa-sdst",
606605 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
607 .dependencies = sparseFeatureSet(&[_]Feature{}),
606 .dependencies = featureSet(&[_]Feature{}),
608607 };
609608 result[@enumToInt(Feature.sea_islands)] = .{
610609 .llvm_name = "sea-islands",
611610 .description = "SEA_ISLANDS GPU generation",
612 .dependencies = sparseFeatureSet(&[_]Feature{
611 .dependencies = featureSet(&[_]Feature{
613612 .ci_insts,
614613 .flat_address_space,
615614 .fp64,
......@@ -625,22 +624,22 @@ pub const all_features = blk: {
625624 result[@enumToInt(Feature.sgpr_init_bug)] = .{
626625 .llvm_name = "sgpr-init-bug",
627626 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
628 .dependencies = sparseFeatureSet(&[_]Feature{}),
627 .dependencies = featureSet(&[_]Feature{}),
629628 };
630629 result[@enumToInt(Feature.si_scheduler)] = .{
631630 .llvm_name = "si-scheduler",
632631 .description = "Enable SI Machine Scheduler",
633 .dependencies = sparseFeatureSet(&[_]Feature{}),
632 .dependencies = featureSet(&[_]Feature{}),
634633 };
635634 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{
636635 .llvm_name = "smem-to-vector-write-hazard",
637636 .description = "s_load_dword followed by v_cmp page faults",
638 .dependencies = sparseFeatureSet(&[_]Feature{}),
637 .dependencies = featureSet(&[_]Feature{}),
639638 };
640639 result[@enumToInt(Feature.southern_islands)] = .{
641640 .llvm_name = "southern-islands",
642641 .description = "SOUTHERN_ISLANDS GPU generation",
643 .dependencies = sparseFeatureSet(&[_]Feature{
642 .dependencies = featureSet(&[_]Feature{
644643 .fp64,
645644 .ldsbankcount32,
646645 .localmemorysize32768,
......@@ -655,62 +654,62 @@ pub const all_features = blk: {
655654 result[@enumToInt(Feature.sram_ecc)] = .{
656655 .llvm_name = "sram-ecc",
657656 .description = "Enable SRAM ECC",
658 .dependencies = sparseFeatureSet(&[_]Feature{}),
657 .dependencies = featureSet(&[_]Feature{}),
659658 };
660659 result[@enumToInt(Feature.trap_handler)] = .{
661660 .llvm_name = "trap-handler",
662661 .description = "Trap handler support",
663 .dependencies = sparseFeatureSet(&[_]Feature{}),
662 .dependencies = featureSet(&[_]Feature{}),
664663 };
665664 result[@enumToInt(Feature.trig_reduced_range)] = .{
666665 .llvm_name = "trig-reduced-range",
667666 .description = "Requires use of fract on arguments to trig instructions",
668 .dependencies = sparseFeatureSet(&[_]Feature{}),
667 .dependencies = featureSet(&[_]Feature{}),
669668 };
670669 result[@enumToInt(Feature.unaligned_buffer_access)] = .{
671670 .llvm_name = "unaligned-buffer-access",
672671 .description = "Support unaligned global loads and stores",
673 .dependencies = sparseFeatureSet(&[_]Feature{}),
672 .dependencies = featureSet(&[_]Feature{}),
674673 };
675674 result[@enumToInt(Feature.unaligned_scratch_access)] = .{
676675 .llvm_name = "unaligned-scratch-access",
677676 .description = "Support unaligned scratch loads and stores",
678 .dependencies = sparseFeatureSet(&[_]Feature{}),
677 .dependencies = featureSet(&[_]Feature{}),
679678 };
680679 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{
681680 .llvm_name = "unpacked-d16-vmem",
682681 .description = "Has unpacked d16 vmem instructions",
683 .dependencies = sparseFeatureSet(&[_]Feature{}),
682 .dependencies = featureSet(&[_]Feature{}),
684683 };
685684 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{
686685 .llvm_name = "unsafe-ds-offset-folding",
687686 .description = "Force using DS instruction immediate offsets on SI",
688 .dependencies = sparseFeatureSet(&[_]Feature{}),
687 .dependencies = featureSet(&[_]Feature{}),
689688 };
690689 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{
691690 .llvm_name = "vcmpx-exec-war-hazard",
692691 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
693 .dependencies = sparseFeatureSet(&[_]Feature{}),
692 .dependencies = featureSet(&[_]Feature{}),
694693 };
695694 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{
696695 .llvm_name = "vcmpx-permlane-hazard",
697696 .description = "TODO: describe me",
698 .dependencies = sparseFeatureSet(&[_]Feature{}),
697 .dependencies = featureSet(&[_]Feature{}),
699698 };
700699 result[@enumToInt(Feature.vgpr_index_mode)] = .{
701700 .llvm_name = "vgpr-index-mode",
702701 .description = "Has VGPR mode register indexing",
703 .dependencies = sparseFeatureSet(&[_]Feature{}),
702 .dependencies = featureSet(&[_]Feature{}),
704703 };
705704 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{
706705 .llvm_name = "vmem-to-scalar-write-hazard",
707706 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
708 .dependencies = sparseFeatureSet(&[_]Feature{}),
707 .dependencies = featureSet(&[_]Feature{}),
709708 };
710709 result[@enumToInt(Feature.volcanic_islands)] = .{
711710 .llvm_name = "volcanic-islands",
712711 .description = "VOLCANIC_ISLANDS GPU generation",
713 .dependencies = sparseFeatureSet(&[_]Feature{
712 .dependencies = featureSet(&[_]Feature{
714713 .@"16_bit_insts",
715714 .ci_insts,
716715 .dpp,
......@@ -738,43 +737,42 @@ pub const all_features = blk: {
738737 result[@enumToInt(Feature.vop3_literal)] = .{
739738 .llvm_name = "vop3-literal",
740739 .description = "Can use one literal in VOP3",
741 .dependencies = sparseFeatureSet(&[_]Feature{}),
740 .dependencies = featureSet(&[_]Feature{}),
742741 };
743742 result[@enumToInt(Feature.vop3p)] = .{
744743 .llvm_name = "vop3p",
745744 .description = "Has VOP3P packed instructions",
746 .dependencies = sparseFeatureSet(&[_]Feature{}),
745 .dependencies = featureSet(&[_]Feature{}),
747746 };
748747 result[@enumToInt(Feature.vscnt)] = .{
749748 .llvm_name = "vscnt",
750749 .description = "Has separate store vscnt counter",
751 .dependencies = sparseFeatureSet(&[_]Feature{}),
750 .dependencies = featureSet(&[_]Feature{}),
752751 };
753752 result[@enumToInt(Feature.wavefrontsize16)] = .{
754753 .llvm_name = "wavefrontsize16",
755754 .description = "The number of threads per wavefront",
756 .dependencies = sparseFeatureSet(&[_]Feature{}),
755 .dependencies = featureSet(&[_]Feature{}),
757756 };
758757 result[@enumToInt(Feature.wavefrontsize32)] = .{
759758 .llvm_name = "wavefrontsize32",
760759 .description = "The number of threads per wavefront",
761 .dependencies = sparseFeatureSet(&[_]Feature{}),
760 .dependencies = featureSet(&[_]Feature{}),
762761 };
763762 result[@enumToInt(Feature.wavefrontsize64)] = .{
764763 .llvm_name = "wavefrontsize64",
765764 .description = "The number of threads per wavefront",
766 .dependencies = sparseFeatureSet(&[_]Feature{}),
765 .dependencies = featureSet(&[_]Feature{}),
767766 };
768767 result[@enumToInt(Feature.xnack)] = .{
769768 .llvm_name = "xnack",
770769 .description = "Enable XNACK support",
771 .dependencies = sparseFeatureSet(&[_]Feature{}),
770 .dependencies = featureSet(&[_]Feature{}),
772771 };
773772 const ti = @typeInfo(Feature);
774773 for (result) |*elem, i| {
775774 elem.index = i;
776775 elem.name = ti.Enum.fields[i].name;
777 elem.dependencies.initAsDependencies(i, &result);
778776 }
779777 break :blk result;
780778};
......@@ -783,7 +781,7 @@ pub const cpu = struct {
783781 pub const bonaire = Cpu{
784782 .name = "bonaire",
785783 .llvm_name = "bonaire",
786 .features = featureSet(&all_features, &[_]Feature{
784 .features = featureSet(&[_]Feature{
787785 .code_object_v3,
788786 .ldsbankcount32,
789787 .no_xnack_support,
......@@ -793,7 +791,7 @@ pub const cpu = struct {
793791 pub const carrizo = Cpu{
794792 .name = "carrizo",
795793 .llvm_name = "carrizo",
796 .features = featureSet(&all_features, &[_]Feature{
794 .features = featureSet(&[_]Feature{
797795 .code_object_v3,
798796 .fast_fmaf,
799797 .half_rate_64_ops,
......@@ -806,7 +804,7 @@ pub const cpu = struct {
806804 pub const fiji = Cpu{
807805 .name = "fiji",
808806 .llvm_name = "fiji",
809 .features = featureSet(&all_features, &[_]Feature{
807 .features = featureSet(&[_]Feature{
810808 .code_object_v3,
811809 .ldsbankcount32,
812810 .no_xnack_support,
......@@ -817,14 +815,14 @@ pub const cpu = struct {
817815 pub const generic = Cpu{
818816 .name = "generic",
819817 .llvm_name = "generic",
820 .features = featureSet(&all_features, &[_]Feature{
818 .features = featureSet(&[_]Feature{
821819 .wavefrontsize64,
822820 }),
823821 };
824822 pub const generic_hsa = Cpu{
825823 .name = "generic_hsa",
826824 .llvm_name = "generic-hsa",
827 .features = featureSet(&all_features, &[_]Feature{
825 .features = featureSet(&[_]Feature{
828826 .flat_address_space,
829827 .wavefrontsize64,
830828 }),
......@@ -832,7 +830,7 @@ pub const cpu = struct {
832830 pub const gfx1010 = Cpu{
833831 .name = "gfx1010",
834832 .llvm_name = "gfx1010",
835 .features = featureSet(&all_features, &[_]Feature{
833 .features = featureSet(&[_]Feature{
836834 .code_object_v3,
837835 .dl_insts,
838836 .flat_segment_offset_bug,
......@@ -858,7 +856,7 @@ pub const cpu = struct {
858856 pub const gfx1011 = Cpu{
859857 .name = "gfx1011",
860858 .llvm_name = "gfx1011",
861 .features = featureSet(&all_features, &[_]Feature{
859 .features = featureSet(&[_]Feature{
862860 .code_object_v3,
863861 .dl_insts,
864862 .dot1_insts,
......@@ -887,7 +885,7 @@ pub const cpu = struct {
887885 pub const gfx1012 = Cpu{
888886 .name = "gfx1012",
889887 .llvm_name = "gfx1012",
890 .features = featureSet(&all_features, &[_]Feature{
888 .features = featureSet(&[_]Feature{
891889 .code_object_v3,
892890 .dl_insts,
893891 .dot1_insts,
......@@ -917,7 +915,7 @@ pub const cpu = struct {
917915 pub const gfx600 = Cpu{
918916 .name = "gfx600",
919917 .llvm_name = "gfx600",
920 .features = featureSet(&all_features, &[_]Feature{
918 .features = featureSet(&[_]Feature{
921919 .code_object_v3,
922920 .fast_fmaf,
923921 .half_rate_64_ops,
......@@ -929,7 +927,7 @@ pub const cpu = struct {
929927 pub const gfx601 = Cpu{
930928 .name = "gfx601",
931929 .llvm_name = "gfx601",
932 .features = featureSet(&all_features, &[_]Feature{
930 .features = featureSet(&[_]Feature{
933931 .code_object_v3,
934932 .ldsbankcount32,
935933 .no_xnack_support,
......@@ -939,7 +937,7 @@ pub const cpu = struct {
939937 pub const gfx700 = Cpu{
940938 .name = "gfx700",
941939 .llvm_name = "gfx700",
942 .features = featureSet(&all_features, &[_]Feature{
940 .features = featureSet(&[_]Feature{
943941 .code_object_v3,
944942 .ldsbankcount32,
945943 .no_xnack_support,
......@@ -949,7 +947,7 @@ pub const cpu = struct {
949947 pub const gfx701 = Cpu{
950948 .name = "gfx701",
951949 .llvm_name = "gfx701",
952 .features = featureSet(&all_features, &[_]Feature{
950 .features = featureSet(&[_]Feature{
953951 .code_object_v3,
954952 .fast_fmaf,
955953 .half_rate_64_ops,
......@@ -961,7 +959,7 @@ pub const cpu = struct {
961959 pub const gfx702 = Cpu{
962960 .name = "gfx702",
963961 .llvm_name = "gfx702",
964 .features = featureSet(&all_features, &[_]Feature{
962 .features = featureSet(&[_]Feature{
965963 .code_object_v3,
966964 .fast_fmaf,
967965 .ldsbankcount16,
......@@ -972,7 +970,7 @@ pub const cpu = struct {
972970 pub const gfx703 = Cpu{
973971 .name = "gfx703",
974972 .llvm_name = "gfx703",
975 .features = featureSet(&all_features, &[_]Feature{
973 .features = featureSet(&[_]Feature{
976974 .code_object_v3,
977975 .ldsbankcount16,
978976 .no_xnack_support,
......@@ -982,7 +980,7 @@ pub const cpu = struct {
982980 pub const gfx704 = Cpu{
983981 .name = "gfx704",
984982 .llvm_name = "gfx704",
985 .features = featureSet(&all_features, &[_]Feature{
983 .features = featureSet(&[_]Feature{
986984 .code_object_v3,
987985 .ldsbankcount32,
988986 .no_xnack_support,
......@@ -992,7 +990,7 @@ pub const cpu = struct {
992990 pub const gfx801 = Cpu{
993991 .name = "gfx801",
994992 .llvm_name = "gfx801",
995 .features = featureSet(&all_features, &[_]Feature{
993 .features = featureSet(&[_]Feature{
996994 .code_object_v3,
997995 .fast_fmaf,
998996 .half_rate_64_ops,
......@@ -1005,7 +1003,7 @@ pub const cpu = struct {
10051003 pub const gfx802 = Cpu{
10061004 .name = "gfx802",
10071005 .llvm_name = "gfx802",
1008 .features = featureSet(&all_features, &[_]Feature{
1006 .features = featureSet(&[_]Feature{
10091007 .code_object_v3,
10101008 .ldsbankcount32,
10111009 .no_xnack_support,
......@@ -1017,7 +1015,7 @@ pub const cpu = struct {
10171015 pub const gfx803 = Cpu{
10181016 .name = "gfx803",
10191017 .llvm_name = "gfx803",
1020 .features = featureSet(&all_features, &[_]Feature{
1018 .features = featureSet(&[_]Feature{
10211019 .code_object_v3,
10221020 .ldsbankcount32,
10231021 .no_xnack_support,
......@@ -1028,7 +1026,7 @@ pub const cpu = struct {
10281026 pub const gfx810 = Cpu{
10291027 .name = "gfx810",
10301028 .llvm_name = "gfx810",
1031 .features = featureSet(&all_features, &[_]Feature{
1029 .features = featureSet(&[_]Feature{
10321030 .code_object_v3,
10331031 .ldsbankcount16,
10341032 .volcanic_islands,
......@@ -1038,7 +1036,7 @@ pub const cpu = struct {
10381036 pub const gfx900 = Cpu{
10391037 .name = "gfx900",
10401038 .llvm_name = "gfx900",
1041 .features = featureSet(&all_features, &[_]Feature{
1039 .features = featureSet(&[_]Feature{
10421040 .code_object_v3,
10431041 .gfx9,
10441042 .ldsbankcount32,
......@@ -1050,7 +1048,7 @@ pub const cpu = struct {
10501048 pub const gfx902 = Cpu{
10511049 .name = "gfx902",
10521050 .llvm_name = "gfx902",
1053 .features = featureSet(&all_features, &[_]Feature{
1051 .features = featureSet(&[_]Feature{
10541052 .code_object_v3,
10551053 .gfx9,
10561054 .ldsbankcount32,
......@@ -1062,7 +1060,7 @@ pub const cpu = struct {
10621060 pub const gfx904 = Cpu{
10631061 .name = "gfx904",
10641062 .llvm_name = "gfx904",
1065 .features = featureSet(&all_features, &[_]Feature{
1063 .features = featureSet(&[_]Feature{
10661064 .code_object_v3,
10671065 .fma_mix_insts,
10681066 .gfx9,
......@@ -1074,7 +1072,7 @@ pub const cpu = struct {
10741072 pub const gfx906 = Cpu{
10751073 .name = "gfx906",
10761074 .llvm_name = "gfx906",
1077 .features = featureSet(&all_features, &[_]Feature{
1075 .features = featureSet(&[_]Feature{
10781076 .code_object_v3,
10791077 .dl_insts,
10801078 .dot1_insts,
......@@ -1089,7 +1087,7 @@ pub const cpu = struct {
10891087 pub const gfx908 = Cpu{
10901088 .name = "gfx908",
10911089 .llvm_name = "gfx908",
1092 .features = featureSet(&all_features, &[_]Feature{
1090 .features = featureSet(&[_]Feature{
10931091 .atomic_fadd_insts,
10941092 .code_object_v3,
10951093 .dl_insts,
......@@ -1111,7 +1109,7 @@ pub const cpu = struct {
11111109 pub const gfx909 = Cpu{
11121110 .name = "gfx909",
11131111 .llvm_name = "gfx909",
1114 .features = featureSet(&all_features, &[_]Feature{
1112 .features = featureSet(&[_]Feature{
11151113 .code_object_v3,
11161114 .gfx9,
11171115 .ldsbankcount32,
......@@ -1122,7 +1120,7 @@ pub const cpu = struct {
11221120 pub const hainan = Cpu{
11231121 .name = "hainan",
11241122 .llvm_name = "hainan",
1125 .features = featureSet(&all_features, &[_]Feature{
1123 .features = featureSet(&[_]Feature{
11261124 .code_object_v3,
11271125 .ldsbankcount32,
11281126 .no_xnack_support,
......@@ -1132,7 +1130,7 @@ pub const cpu = struct {
11321130 pub const hawaii = Cpu{
11331131 .name = "hawaii",
11341132 .llvm_name = "hawaii",
1135 .features = featureSet(&all_features, &[_]Feature{
1133 .features = featureSet(&[_]Feature{
11361134 .code_object_v3,
11371135 .fast_fmaf,
11381136 .half_rate_64_ops,
......@@ -1144,7 +1142,7 @@ pub const cpu = struct {
11441142 pub const iceland = Cpu{
11451143 .name = "iceland",
11461144 .llvm_name = "iceland",
1147 .features = featureSet(&all_features, &[_]Feature{
1145 .features = featureSet(&[_]Feature{
11481146 .code_object_v3,
11491147 .ldsbankcount32,
11501148 .no_xnack_support,
......@@ -1156,7 +1154,7 @@ pub const cpu = struct {
11561154 pub const kabini = Cpu{
11571155 .name = "kabini",
11581156 .llvm_name = "kabini",
1159 .features = featureSet(&all_features, &[_]Feature{
1157 .features = featureSet(&[_]Feature{
11601158 .code_object_v3,
11611159 .ldsbankcount16,
11621160 .no_xnack_support,
......@@ -1166,7 +1164,7 @@ pub const cpu = struct {
11661164 pub const kaveri = Cpu{
11671165 .name = "kaveri",
11681166 .llvm_name = "kaveri",
1169 .features = featureSet(&all_features, &[_]Feature{
1167 .features = featureSet(&[_]Feature{
11701168 .code_object_v3,
11711169 .ldsbankcount32,
11721170 .no_xnack_support,
......@@ -1176,7 +1174,7 @@ pub const cpu = struct {
11761174 pub const mullins = Cpu{
11771175 .name = "mullins",
11781176 .llvm_name = "mullins",
1179 .features = featureSet(&all_features, &[_]Feature{
1177 .features = featureSet(&[_]Feature{
11801178 .code_object_v3,
11811179 .ldsbankcount16,
11821180 .no_xnack_support,
......@@ -1186,7 +1184,7 @@ pub const cpu = struct {
11861184 pub const oland = Cpu{
11871185 .name = "oland",
11881186 .llvm_name = "oland",
1189 .features = featureSet(&all_features, &[_]Feature{
1187 .features = featureSet(&[_]Feature{
11901188 .code_object_v3,
11911189 .ldsbankcount32,
11921190 .no_xnack_support,
......@@ -1196,7 +1194,7 @@ pub const cpu = struct {
11961194 pub const pitcairn = Cpu{
11971195 .name = "pitcairn",
11981196 .llvm_name = "pitcairn",
1199 .features = featureSet(&all_features, &[_]Feature{
1197 .features = featureSet(&[_]Feature{
12001198 .code_object_v3,
12011199 .ldsbankcount32,
12021200 .no_xnack_support,
......@@ -1206,7 +1204,7 @@ pub const cpu = struct {
12061204 pub const polaris10 = Cpu{
12071205 .name = "polaris10",
12081206 .llvm_name = "polaris10",
1209 .features = featureSet(&all_features, &[_]Feature{
1207 .features = featureSet(&[_]Feature{
12101208 .code_object_v3,
12111209 .ldsbankcount32,
12121210 .no_xnack_support,
......@@ -1217,7 +1215,7 @@ pub const cpu = struct {
12171215 pub const polaris11 = Cpu{
12181216 .name = "polaris11",
12191217 .llvm_name = "polaris11",
1220 .features = featureSet(&all_features, &[_]Feature{
1218 .features = featureSet(&[_]Feature{
12211219 .code_object_v3,
12221220 .ldsbankcount32,
12231221 .no_xnack_support,
......@@ -1228,7 +1226,7 @@ pub const cpu = struct {
12281226 pub const stoney = Cpu{
12291227 .name = "stoney",
12301228 .llvm_name = "stoney",
1231 .features = featureSet(&all_features, &[_]Feature{
1229 .features = featureSet(&[_]Feature{
12321230 .code_object_v3,
12331231 .ldsbankcount16,
12341232 .volcanic_islands,
......@@ -1238,7 +1236,7 @@ pub const cpu = struct {
12381236 pub const tahiti = Cpu{
12391237 .name = "tahiti",
12401238 .llvm_name = "tahiti",
1241 .features = featureSet(&all_features, &[_]Feature{
1239 .features = featureSet(&[_]Feature{
12421240 .code_object_v3,
12431241 .fast_fmaf,
12441242 .half_rate_64_ops,
......@@ -1250,7 +1248,7 @@ pub const cpu = struct {
12501248 pub const tonga = Cpu{
12511249 .name = "tonga",
12521250 .llvm_name = "tonga",
1253 .features = featureSet(&all_features, &[_]Feature{
1251 .features = featureSet(&[_]Feature{
12541252 .code_object_v3,
12551253 .ldsbankcount32,
12561254 .no_xnack_support,
......@@ -1262,7 +1260,7 @@ pub const cpu = struct {
12621260 pub const verde = Cpu{
12631261 .name = "verde",
12641262 .llvm_name = "verde",
1265 .features = featureSet(&all_features, &[_]Feature{
1263 .features = featureSet(&[_]Feature{
12661264 .code_object_v3,
12671265 .ldsbankcount32,
12681266 .no_xnack_support,
lib/std/target/arm.zig+256-257
......@@ -188,167 +188,167 @@ pub const all_features = blk: {
188188 result[@enumToInt(Feature.@"32bit")] = .{
189189 .llvm_name = "32bit",
190190 .description = "Prefer 32-bit Thumb instrs",
191 .dependencies = sparseFeatureSet(&[_]Feature{}),
191 .dependencies = featureSet(&[_]Feature{}),
192192 };
193193 result[@enumToInt(Feature.@"8msecext")] = .{
194194 .llvm_name = "8msecext",
195195 .description = "Enable support for ARMv8-M Security Extensions",
196 .dependencies = sparseFeatureSet(&[_]Feature{}),
196 .dependencies = featureSet(&[_]Feature{}),
197197 };
198198 result[@enumToInt(Feature.a12)] = .{
199199 .llvm_name = "a12",
200200 .description = "Cortex-A12 ARM processors",
201 .dependencies = sparseFeatureSet(&[_]Feature{}),
201 .dependencies = featureSet(&[_]Feature{}),
202202 };
203203 result[@enumToInt(Feature.a15)] = .{
204204 .llvm_name = "a15",
205205 .description = "Cortex-A15 ARM processors",
206 .dependencies = sparseFeatureSet(&[_]Feature{}),
206 .dependencies = featureSet(&[_]Feature{}),
207207 };
208208 result[@enumToInt(Feature.a17)] = .{
209209 .llvm_name = "a17",
210210 .description = "Cortex-A17 ARM processors",
211 .dependencies = sparseFeatureSet(&[_]Feature{}),
211 .dependencies = featureSet(&[_]Feature{}),
212212 };
213213 result[@enumToInt(Feature.a32)] = .{
214214 .llvm_name = "a32",
215215 .description = "Cortex-A32 ARM processors",
216 .dependencies = sparseFeatureSet(&[_]Feature{}),
216 .dependencies = featureSet(&[_]Feature{}),
217217 };
218218 result[@enumToInt(Feature.a35)] = .{
219219 .llvm_name = "a35",
220220 .description = "Cortex-A35 ARM processors",
221 .dependencies = sparseFeatureSet(&[_]Feature{}),
221 .dependencies = featureSet(&[_]Feature{}),
222222 };
223223 result[@enumToInt(Feature.a5)] = .{
224224 .llvm_name = "a5",
225225 .description = "Cortex-A5 ARM processors",
226 .dependencies = sparseFeatureSet(&[_]Feature{}),
226 .dependencies = featureSet(&[_]Feature{}),
227227 };
228228 result[@enumToInt(Feature.a53)] = .{
229229 .llvm_name = "a53",
230230 .description = "Cortex-A53 ARM processors",
231 .dependencies = sparseFeatureSet(&[_]Feature{}),
231 .dependencies = featureSet(&[_]Feature{}),
232232 };
233233 result[@enumToInt(Feature.a55)] = .{
234234 .llvm_name = "a55",
235235 .description = "Cortex-A55 ARM processors",
236 .dependencies = sparseFeatureSet(&[_]Feature{}),
236 .dependencies = featureSet(&[_]Feature{}),
237237 };
238238 result[@enumToInt(Feature.a57)] = .{
239239 .llvm_name = "a57",
240240 .description = "Cortex-A57 ARM processors",
241 .dependencies = sparseFeatureSet(&[_]Feature{}),
241 .dependencies = featureSet(&[_]Feature{}),
242242 };
243243 result[@enumToInt(Feature.a7)] = .{
244244 .llvm_name = "a7",
245245 .description = "Cortex-A7 ARM processors",
246 .dependencies = sparseFeatureSet(&[_]Feature{}),
246 .dependencies = featureSet(&[_]Feature{}),
247247 };
248248 result[@enumToInt(Feature.a72)] = .{
249249 .llvm_name = "a72",
250250 .description = "Cortex-A72 ARM processors",
251 .dependencies = sparseFeatureSet(&[_]Feature{}),
251 .dependencies = featureSet(&[_]Feature{}),
252252 };
253253 result[@enumToInt(Feature.a73)] = .{
254254 .llvm_name = "a73",
255255 .description = "Cortex-A73 ARM processors",
256 .dependencies = sparseFeatureSet(&[_]Feature{}),
256 .dependencies = featureSet(&[_]Feature{}),
257257 };
258258 result[@enumToInt(Feature.a75)] = .{
259259 .llvm_name = "a75",
260260 .description = "Cortex-A75 ARM processors",
261 .dependencies = sparseFeatureSet(&[_]Feature{}),
261 .dependencies = featureSet(&[_]Feature{}),
262262 };
263263 result[@enumToInt(Feature.a76)] = .{
264264 .llvm_name = "a76",
265265 .description = "Cortex-A76 ARM processors",
266 .dependencies = sparseFeatureSet(&[_]Feature{}),
266 .dependencies = featureSet(&[_]Feature{}),
267267 };
268268 result[@enumToInt(Feature.a8)] = .{
269269 .llvm_name = "a8",
270270 .description = "Cortex-A8 ARM processors",
271 .dependencies = sparseFeatureSet(&[_]Feature{}),
271 .dependencies = featureSet(&[_]Feature{}),
272272 };
273273 result[@enumToInt(Feature.a9)] = .{
274274 .llvm_name = "a9",
275275 .description = "Cortex-A9 ARM processors",
276 .dependencies = sparseFeatureSet(&[_]Feature{}),
276 .dependencies = featureSet(&[_]Feature{}),
277277 };
278278 result[@enumToInt(Feature.aclass)] = .{
279279 .llvm_name = "aclass",
280280 .description = "Is application profile ('A' series)",
281 .dependencies = sparseFeatureSet(&[_]Feature{}),
281 .dependencies = featureSet(&[_]Feature{}),
282282 };
283283 result[@enumToInt(Feature.acquire_release)] = .{
284284 .llvm_name = "acquire-release",
285285 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
286 .dependencies = sparseFeatureSet(&[_]Feature{}),
286 .dependencies = featureSet(&[_]Feature{}),
287287 };
288288 result[@enumToInt(Feature.aes)] = .{
289289 .llvm_name = "aes",
290290 .description = "Enable AES support",
291 .dependencies = sparseFeatureSet(&[_]Feature{
291 .dependencies = featureSet(&[_]Feature{
292292 .neon,
293293 }),
294294 };
295295 result[@enumToInt(Feature.armv2)] = .{
296296 .llvm_name = "armv2",
297297 .description = "ARMv2 architecture",
298 .dependencies = sparseFeatureSet(&[_]Feature{}),
298 .dependencies = featureSet(&[_]Feature{}),
299299 };
300300 result[@enumToInt(Feature.armv2a)] = .{
301301 .llvm_name = "armv2a",
302302 .description = "ARMv2a architecture",
303 .dependencies = sparseFeatureSet(&[_]Feature{}),
303 .dependencies = featureSet(&[_]Feature{}),
304304 };
305305 result[@enumToInt(Feature.armv3)] = .{
306306 .llvm_name = "armv3",
307307 .description = "ARMv3 architecture",
308 .dependencies = sparseFeatureSet(&[_]Feature{}),
308 .dependencies = featureSet(&[_]Feature{}),
309309 };
310310 result[@enumToInt(Feature.armv3m)] = .{
311311 .llvm_name = "armv3m",
312312 .description = "ARMv3m architecture",
313 .dependencies = sparseFeatureSet(&[_]Feature{}),
313 .dependencies = featureSet(&[_]Feature{}),
314314 };
315315 result[@enumToInt(Feature.armv4)] = .{
316316 .llvm_name = "armv4",
317317 .description = "ARMv4 architecture",
318 .dependencies = sparseFeatureSet(&[_]Feature{}),
318 .dependencies = featureSet(&[_]Feature{}),
319319 };
320320 result[@enumToInt(Feature.armv4t)] = .{
321321 .llvm_name = "armv4t",
322322 .description = "ARMv4t architecture",
323 .dependencies = sparseFeatureSet(&[_]Feature{
323 .dependencies = featureSet(&[_]Feature{
324324 .v4t,
325325 }),
326326 };
327327 result[@enumToInt(Feature.armv5t)] = .{
328328 .llvm_name = "armv5t",
329329 .description = "ARMv5t architecture",
330 .dependencies = sparseFeatureSet(&[_]Feature{
330 .dependencies = featureSet(&[_]Feature{
331331 .v5t,
332332 }),
333333 };
334334 result[@enumToInt(Feature.armv5te)] = .{
335335 .llvm_name = "armv5te",
336336 .description = "ARMv5te architecture",
337 .dependencies = sparseFeatureSet(&[_]Feature{
337 .dependencies = featureSet(&[_]Feature{
338338 .v5te,
339339 }),
340340 };
341341 result[@enumToInt(Feature.armv5tej)] = .{
342342 .llvm_name = "armv5tej",
343343 .description = "ARMv5tej architecture",
344 .dependencies = sparseFeatureSet(&[_]Feature{
344 .dependencies = featureSet(&[_]Feature{
345345 .v5te,
346346 }),
347347 };
348348 result[@enumToInt(Feature.armv6)] = .{
349349 .llvm_name = "armv6",
350350 .description = "ARMv6 architecture",
351 .dependencies = sparseFeatureSet(&[_]Feature{
351 .dependencies = featureSet(&[_]Feature{
352352 .dsp,
353353 .v6,
354354 }),
......@@ -356,7 +356,7 @@ pub const all_features = blk: {
356356 result[@enumToInt(Feature.armv6_m)] = .{
357357 .llvm_name = "armv6-m",
358358 .description = "ARMv6m architecture",
359 .dependencies = sparseFeatureSet(&[_]Feature{
359 .dependencies = featureSet(&[_]Feature{
360360 .db,
361361 .mclass,
362362 .noarm,
......@@ -368,21 +368,21 @@ pub const all_features = blk: {
368368 result[@enumToInt(Feature.armv6j)] = .{
369369 .llvm_name = "armv6j",
370370 .description = "ARMv7a architecture",
371 .dependencies = sparseFeatureSet(&[_]Feature{
371 .dependencies = featureSet(&[_]Feature{
372372 .armv6,
373373 }),
374374 };
375375 result[@enumToInt(Feature.armv6k)] = .{
376376 .llvm_name = "armv6k",
377377 .description = "ARMv6k architecture",
378 .dependencies = sparseFeatureSet(&[_]Feature{
378 .dependencies = featureSet(&[_]Feature{
379379 .v6k,
380380 }),
381381 };
382382 result[@enumToInt(Feature.armv6kz)] = .{
383383 .llvm_name = "armv6kz",
384384 .description = "ARMv6kz architecture",
385 .dependencies = sparseFeatureSet(&[_]Feature{
385 .dependencies = featureSet(&[_]Feature{
386386 .trustzone,
387387 .v6k,
388388 }),
......@@ -390,7 +390,7 @@ pub const all_features = blk: {
390390 result[@enumToInt(Feature.armv6s_m)] = .{
391391 .llvm_name = "armv6s-m",
392392 .description = "ARMv6sm architecture",
393 .dependencies = sparseFeatureSet(&[_]Feature{
393 .dependencies = featureSet(&[_]Feature{
394394 .db,
395395 .mclass,
396396 .noarm,
......@@ -402,7 +402,7 @@ pub const all_features = blk: {
402402 result[@enumToInt(Feature.armv6t2)] = .{
403403 .llvm_name = "armv6t2",
404404 .description = "ARMv6t2 architecture",
405 .dependencies = sparseFeatureSet(&[_]Feature{
405 .dependencies = featureSet(&[_]Feature{
406406 .dsp,
407407 .v6t2,
408408 }),
......@@ -410,7 +410,7 @@ pub const all_features = blk: {
410410 result[@enumToInt(Feature.armv7_a)] = .{
411411 .llvm_name = "armv7-a",
412412 .description = "ARMv7a architecture",
413 .dependencies = sparseFeatureSet(&[_]Feature{
413 .dependencies = featureSet(&[_]Feature{
414414 .aclass,
415415 .db,
416416 .dsp,
......@@ -421,7 +421,7 @@ pub const all_features = blk: {
421421 result[@enumToInt(Feature.armv7_m)] = .{
422422 .llvm_name = "armv7-m",
423423 .description = "ARMv7m architecture",
424 .dependencies = sparseFeatureSet(&[_]Feature{
424 .dependencies = featureSet(&[_]Feature{
425425 .db,
426426 .hwdiv,
427427 .mclass,
......@@ -434,7 +434,7 @@ pub const all_features = blk: {
434434 result[@enumToInt(Feature.armv7_r)] = .{
435435 .llvm_name = "armv7-r",
436436 .description = "ARMv7r architecture",
437 .dependencies = sparseFeatureSet(&[_]Feature{
437 .dependencies = featureSet(&[_]Feature{
438438 .db,
439439 .dsp,
440440 .hwdiv,
......@@ -445,7 +445,7 @@ pub const all_features = blk: {
445445 result[@enumToInt(Feature.armv7e_m)] = .{
446446 .llvm_name = "armv7e-m",
447447 .description = "ARMv7em architecture",
448 .dependencies = sparseFeatureSet(&[_]Feature{
448 .dependencies = featureSet(&[_]Feature{
449449 .db,
450450 .dsp,
451451 .hwdiv,
......@@ -459,21 +459,21 @@ pub const all_features = blk: {
459459 result[@enumToInt(Feature.armv7k)] = .{
460460 .llvm_name = "armv7k",
461461 .description = "ARMv7a architecture",
462 .dependencies = sparseFeatureSet(&[_]Feature{
462 .dependencies = featureSet(&[_]Feature{
463463 .armv7_a,
464464 }),
465465 };
466466 result[@enumToInt(Feature.armv7s)] = .{
467467 .llvm_name = "armv7s",
468468 .description = "ARMv7a architecture",
469 .dependencies = sparseFeatureSet(&[_]Feature{
469 .dependencies = featureSet(&[_]Feature{
470470 .armv7_a,
471471 }),
472472 };
473473 result[@enumToInt(Feature.armv7ve)] = .{
474474 .llvm_name = "armv7ve",
475475 .description = "ARMv7ve architecture",
476 .dependencies = sparseFeatureSet(&[_]Feature{
476 .dependencies = featureSet(&[_]Feature{
477477 .aclass,
478478 .db,
479479 .dsp,
......@@ -487,7 +487,7 @@ pub const all_features = blk: {
487487 result[@enumToInt(Feature.armv8_a)] = .{
488488 .llvm_name = "armv8-a",
489489 .description = "ARMv8a architecture",
490 .dependencies = sparseFeatureSet(&[_]Feature{
490 .dependencies = featureSet(&[_]Feature{
491491 .aclass,
492492 .crc,
493493 .crypto,
......@@ -504,7 +504,7 @@ pub const all_features = blk: {
504504 result[@enumToInt(Feature.armv8_m_base)] = .{
505505 .llvm_name = "armv8-m.base",
506506 .description = "ARMv8mBaseline architecture",
507 .dependencies = sparseFeatureSet(&[_]Feature{
507 .dependencies = featureSet(&[_]Feature{
508508 .@"8msecext",
509509 .acquire_release,
510510 .db,
......@@ -520,7 +520,7 @@ pub const all_features = blk: {
520520 result[@enumToInt(Feature.armv8_m_main)] = .{
521521 .llvm_name = "armv8-m.main",
522522 .description = "ARMv8mMainline architecture",
523 .dependencies = sparseFeatureSet(&[_]Feature{
523 .dependencies = featureSet(&[_]Feature{
524524 .@"8msecext",
525525 .acquire_release,
526526 .db,
......@@ -534,7 +534,7 @@ pub const all_features = blk: {
534534 result[@enumToInt(Feature.armv8_r)] = .{
535535 .llvm_name = "armv8-r",
536536 .description = "ARMv8r architecture",
537 .dependencies = sparseFeatureSet(&[_]Feature{
537 .dependencies = featureSet(&[_]Feature{
538538 .crc,
539539 .db,
540540 .dfb,
......@@ -550,7 +550,7 @@ pub const all_features = blk: {
550550 result[@enumToInt(Feature.armv8_1_a)] = .{
551551 .llvm_name = "armv8.1-a",
552552 .description = "ARMv81a architecture",
553 .dependencies = sparseFeatureSet(&[_]Feature{
553 .dependencies = featureSet(&[_]Feature{
554554 .aclass,
555555 .crc,
556556 .crypto,
......@@ -567,7 +567,7 @@ pub const all_features = blk: {
567567 result[@enumToInt(Feature.armv8_1_m_main)] = .{
568568 .llvm_name = "armv8.1-m.main",
569569 .description = "ARMv81mMainline architecture",
570 .dependencies = sparseFeatureSet(&[_]Feature{
570 .dependencies = featureSet(&[_]Feature{
571571 .@"8msecext",
572572 .acquire_release,
573573 .db,
......@@ -583,7 +583,7 @@ pub const all_features = blk: {
583583 result[@enumToInt(Feature.armv8_2_a)] = .{
584584 .llvm_name = "armv8.2-a",
585585 .description = "ARMv82a architecture",
586 .dependencies = sparseFeatureSet(&[_]Feature{
586 .dependencies = featureSet(&[_]Feature{
587587 .aclass,
588588 .crc,
589589 .crypto,
......@@ -601,7 +601,7 @@ pub const all_features = blk: {
601601 result[@enumToInt(Feature.armv8_3_a)] = .{
602602 .llvm_name = "armv8.3-a",
603603 .description = "ARMv83a architecture",
604 .dependencies = sparseFeatureSet(&[_]Feature{
604 .dependencies = featureSet(&[_]Feature{
605605 .aclass,
606606 .crc,
607607 .crypto,
......@@ -619,7 +619,7 @@ pub const all_features = blk: {
619619 result[@enumToInt(Feature.armv8_4_a)] = .{
620620 .llvm_name = "armv8.4-a",
621621 .description = "ARMv84a architecture",
622 .dependencies = sparseFeatureSet(&[_]Feature{
622 .dependencies = featureSet(&[_]Feature{
623623 .aclass,
624624 .crc,
625625 .crypto,
......@@ -638,7 +638,7 @@ pub const all_features = blk: {
638638 result[@enumToInt(Feature.armv8_5_a)] = .{
639639 .llvm_name = "armv8.5-a",
640640 .description = "ARMv85a architecture",
641 .dependencies = sparseFeatureSet(&[_]Feature{
641 .dependencies = featureSet(&[_]Feature{
642642 .aclass,
643643 .crc,
644644 .crypto,
......@@ -657,27 +657,27 @@ pub const all_features = blk: {
657657 result[@enumToInt(Feature.avoid_movs_shop)] = .{
658658 .llvm_name = "avoid-movs-shop",
659659 .description = "Avoid movs instructions with shifter operand",
660 .dependencies = sparseFeatureSet(&[_]Feature{}),
660 .dependencies = featureSet(&[_]Feature{}),
661661 };
662662 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{
663663 .llvm_name = "avoid-partial-cpsr",
664664 .description = "Avoid CPSR partial update for OOO execution",
665 .dependencies = sparseFeatureSet(&[_]Feature{}),
665 .dependencies = featureSet(&[_]Feature{}),
666666 };
667667 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
668668 .llvm_name = "cheap-predicable-cpsr",
669669 .description = "Disable +1 predication cost for instructions updating CPSR",
670 .dependencies = sparseFeatureSet(&[_]Feature{}),
670 .dependencies = featureSet(&[_]Feature{}),
671671 };
672672 result[@enumToInt(Feature.crc)] = .{
673673 .llvm_name = "crc",
674674 .description = "Enable support for CRC instructions",
675 .dependencies = sparseFeatureSet(&[_]Feature{}),
675 .dependencies = featureSet(&[_]Feature{}),
676676 };
677677 result[@enumToInt(Feature.crypto)] = .{
678678 .llvm_name = "crypto",
679679 .description = "Enable support for Cryptography extensions",
680 .dependencies = sparseFeatureSet(&[_]Feature{
680 .dependencies = featureSet(&[_]Feature{
681681 .aes,
682682 .neon,
683683 .sha2,
......@@ -686,54 +686,54 @@ pub const all_features = blk: {
686686 result[@enumToInt(Feature.d32)] = .{
687687 .llvm_name = "d32",
688688 .description = "Extend FP to 32 double registers",
689 .dependencies = sparseFeatureSet(&[_]Feature{}),
689 .dependencies = featureSet(&[_]Feature{}),
690690 };
691691 result[@enumToInt(Feature.db)] = .{
692692 .llvm_name = "db",
693693 .description = "Has data barrier (dmb/dsb) instructions",
694 .dependencies = sparseFeatureSet(&[_]Feature{}),
694 .dependencies = featureSet(&[_]Feature{}),
695695 };
696696 result[@enumToInt(Feature.dfb)] = .{
697697 .llvm_name = "dfb",
698698 .description = "Has full data barrier (dfb) instruction",
699 .dependencies = sparseFeatureSet(&[_]Feature{}),
699 .dependencies = featureSet(&[_]Feature{}),
700700 };
701701 result[@enumToInt(Feature.disable_postra_scheduler)] = .{
702702 .llvm_name = "disable-postra-scheduler",
703703 .description = "Don't schedule again after register allocation",
704 .dependencies = sparseFeatureSet(&[_]Feature{}),
704 .dependencies = featureSet(&[_]Feature{}),
705705 };
706706 result[@enumToInt(Feature.dont_widen_vmovs)] = .{
707707 .llvm_name = "dont-widen-vmovs",
708708 .description = "Don't widen VMOVS to VMOVD",
709 .dependencies = sparseFeatureSet(&[_]Feature{}),
709 .dependencies = featureSet(&[_]Feature{}),
710710 };
711711 result[@enumToInt(Feature.dotprod)] = .{
712712 .llvm_name = "dotprod",
713713 .description = "Enable support for dot product instructions",
714 .dependencies = sparseFeatureSet(&[_]Feature{
714 .dependencies = featureSet(&[_]Feature{
715715 .neon,
716716 }),
717717 };
718718 result[@enumToInt(Feature.dsp)] = .{
719719 .llvm_name = "dsp",
720720 .description = "Supports DSP instructions in ARM and/or Thumb2",
721 .dependencies = sparseFeatureSet(&[_]Feature{}),
721 .dependencies = featureSet(&[_]Feature{}),
722722 };
723723 result[@enumToInt(Feature.execute_only)] = .{
724724 .llvm_name = "execute-only",
725725 .description = "Enable the generation of execute only code.",
726 .dependencies = sparseFeatureSet(&[_]Feature{}),
726 .dependencies = featureSet(&[_]Feature{}),
727727 };
728728 result[@enumToInt(Feature.expand_fp_mlx)] = .{
729729 .llvm_name = "expand-fp-mlx",
730730 .description = "Expand VFP/NEON MLA/MLS instructions",
731 .dependencies = sparseFeatureSet(&[_]Feature{}),
731 .dependencies = featureSet(&[_]Feature{}),
732732 };
733733 result[@enumToInt(Feature.exynos)] = .{
734734 .llvm_name = "exynos",
735735 .description = "Samsung Exynos processors",
736 .dependencies = sparseFeatureSet(&[_]Feature{
736 .dependencies = featureSet(&[_]Feature{
737737 .crc,
738738 .crypto,
739739 .expand_fp_mlx,
......@@ -756,7 +756,7 @@ pub const all_features = blk: {
756756 result[@enumToInt(Feature.fp_armv8)] = .{
757757 .llvm_name = "fp-armv8",
758758 .description = "Enable ARMv8 FP",
759 .dependencies = sparseFeatureSet(&[_]Feature{
759 .dependencies = featureSet(&[_]Feature{
760760 .fp_armv8d16,
761761 .fp_armv8sp,
762762 .vfp4,
......@@ -765,7 +765,7 @@ pub const all_features = blk: {
765765 result[@enumToInt(Feature.fp_armv8d16)] = .{
766766 .llvm_name = "fp-armv8d16",
767767 .description = "Enable ARMv8 FP with only 16 d-registers",
768 .dependencies = sparseFeatureSet(&[_]Feature{
768 .dependencies = featureSet(&[_]Feature{
769769 .fp_armv8d16sp,
770770 .fp64,
771771 .vfp4d16,
......@@ -774,14 +774,14 @@ pub const all_features = blk: {
774774 result[@enumToInt(Feature.fp_armv8d16sp)] = .{
775775 .llvm_name = "fp-armv8d16sp",
776776 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",
777 .dependencies = sparseFeatureSet(&[_]Feature{
777 .dependencies = featureSet(&[_]Feature{
778778 .vfp4d16sp,
779779 }),
780780 };
781781 result[@enumToInt(Feature.fp_armv8sp)] = .{
782782 .llvm_name = "fp-armv8sp",
783783 .description = "Enable ARMv8 FP with no double precision",
784 .dependencies = sparseFeatureSet(&[_]Feature{
784 .dependencies = featureSet(&[_]Feature{
785785 .d32,
786786 .fp_armv8d16sp,
787787 .vfp4sp,
......@@ -790,50 +790,50 @@ pub const all_features = blk: {
790790 result[@enumToInt(Feature.fp16)] = .{
791791 .llvm_name = "fp16",
792792 .description = "Enable half-precision floating point",
793 .dependencies = sparseFeatureSet(&[_]Feature{}),
793 .dependencies = featureSet(&[_]Feature{}),
794794 };
795795 result[@enumToInt(Feature.fp16fml)] = .{
796796 .llvm_name = "fp16fml",
797797 .description = "Enable full half-precision floating point fml instructions",
798 .dependencies = sparseFeatureSet(&[_]Feature{
798 .dependencies = featureSet(&[_]Feature{
799799 .fullfp16,
800800 }),
801801 };
802802 result[@enumToInt(Feature.fp64)] = .{
803803 .llvm_name = "fp64",
804804 .description = "Floating point unit supports double precision",
805 .dependencies = sparseFeatureSet(&[_]Feature{
805 .dependencies = featureSet(&[_]Feature{
806806 .fpregs64,
807807 }),
808808 };
809809 result[@enumToInt(Feature.fpao)] = .{
810810 .llvm_name = "fpao",
811811 .description = "Enable fast computation of positive address offsets",
812 .dependencies = sparseFeatureSet(&[_]Feature{}),
812 .dependencies = featureSet(&[_]Feature{}),
813813 };
814814 result[@enumToInt(Feature.fpregs)] = .{
815815 .llvm_name = "fpregs",
816816 .description = "Enable FP registers",
817 .dependencies = sparseFeatureSet(&[_]Feature{}),
817 .dependencies = featureSet(&[_]Feature{}),
818818 };
819819 result[@enumToInt(Feature.fpregs16)] = .{
820820 .llvm_name = "fpregs16",
821821 .description = "Enable 16-bit FP registers",
822 .dependencies = sparseFeatureSet(&[_]Feature{
822 .dependencies = featureSet(&[_]Feature{
823823 .fpregs,
824824 }),
825825 };
826826 result[@enumToInt(Feature.fpregs64)] = .{
827827 .llvm_name = "fpregs64",
828828 .description = "Enable 64-bit FP registers",
829 .dependencies = sparseFeatureSet(&[_]Feature{
829 .dependencies = featureSet(&[_]Feature{
830830 .fpregs,
831831 }),
832832 };
833833 result[@enumToInt(Feature.fullfp16)] = .{
834834 .llvm_name = "fullfp16",
835835 .description = "Enable full half-precision floating point",
836 .dependencies = sparseFeatureSet(&[_]Feature{
836 .dependencies = featureSet(&[_]Feature{
837837 .fp_armv8d16sp,
838838 .fpregs16,
839839 }),
......@@ -841,86 +841,86 @@ pub const all_features = blk: {
841841 result[@enumToInt(Feature.fuse_aes)] = .{
842842 .llvm_name = "fuse-aes",
843843 .description = "CPU fuses AES crypto operations",
844 .dependencies = sparseFeatureSet(&[_]Feature{}),
844 .dependencies = featureSet(&[_]Feature{}),
845845 };
846846 result[@enumToInt(Feature.fuse_literals)] = .{
847847 .llvm_name = "fuse-literals",
848848 .description = "CPU fuses literal generation operations",
849 .dependencies = sparseFeatureSet(&[_]Feature{}),
849 .dependencies = featureSet(&[_]Feature{}),
850850 };
851851 result[@enumToInt(Feature.hwdiv)] = .{
852852 .llvm_name = "hwdiv",
853853 .description = "Enable divide instructions in Thumb",
854 .dependencies = sparseFeatureSet(&[_]Feature{}),
854 .dependencies = featureSet(&[_]Feature{}),
855855 };
856856 result[@enumToInt(Feature.hwdiv_arm)] = .{
857857 .llvm_name = "hwdiv-arm",
858858 .description = "Enable divide instructions in ARM mode",
859 .dependencies = sparseFeatureSet(&[_]Feature{}),
859 .dependencies = featureSet(&[_]Feature{}),
860860 };
861861 result[@enumToInt(Feature.iwmmxt)] = .{
862862 .llvm_name = "iwmmxt",
863863 .description = "ARMv5te architecture",
864 .dependencies = sparseFeatureSet(&[_]Feature{
864 .dependencies = featureSet(&[_]Feature{
865865 .armv5te,
866866 }),
867867 };
868868 result[@enumToInt(Feature.iwmmxt2)] = .{
869869 .llvm_name = "iwmmxt2",
870870 .description = "ARMv5te architecture",
871 .dependencies = sparseFeatureSet(&[_]Feature{
871 .dependencies = featureSet(&[_]Feature{
872872 .armv5te,
873873 }),
874874 };
875875 result[@enumToInt(Feature.krait)] = .{
876876 .llvm_name = "krait",
877877 .description = "Qualcomm Krait processors",
878 .dependencies = sparseFeatureSet(&[_]Feature{}),
878 .dependencies = featureSet(&[_]Feature{}),
879879 };
880880 result[@enumToInt(Feature.kryo)] = .{
881881 .llvm_name = "kryo",
882882 .description = "Qualcomm Kryo processors",
883 .dependencies = sparseFeatureSet(&[_]Feature{}),
883 .dependencies = featureSet(&[_]Feature{}),
884884 };
885885 result[@enumToInt(Feature.lob)] = .{
886886 .llvm_name = "lob",
887887 .description = "Enable Low Overhead Branch extensions",
888 .dependencies = sparseFeatureSet(&[_]Feature{}),
888 .dependencies = featureSet(&[_]Feature{}),
889889 };
890890 result[@enumToInt(Feature.long_calls)] = .{
891891 .llvm_name = "long-calls",
892892 .description = "Generate calls via indirect call instructions",
893 .dependencies = sparseFeatureSet(&[_]Feature{}),
893 .dependencies = featureSet(&[_]Feature{}),
894894 };
895895 result[@enumToInt(Feature.loop_align)] = .{
896896 .llvm_name = "loop-align",
897897 .description = "Prefer 32-bit alignment for loops",
898 .dependencies = sparseFeatureSet(&[_]Feature{}),
898 .dependencies = featureSet(&[_]Feature{}),
899899 };
900900 result[@enumToInt(Feature.m3)] = .{
901901 .llvm_name = "m3",
902902 .description = "Cortex-M3 ARM processors",
903 .dependencies = sparseFeatureSet(&[_]Feature{}),
903 .dependencies = featureSet(&[_]Feature{}),
904904 };
905905 result[@enumToInt(Feature.mclass)] = .{
906906 .llvm_name = "mclass",
907907 .description = "Is microcontroller profile ('M' series)",
908 .dependencies = sparseFeatureSet(&[_]Feature{}),
908 .dependencies = featureSet(&[_]Feature{}),
909909 };
910910 result[@enumToInt(Feature.mp)] = .{
911911 .llvm_name = "mp",
912912 .description = "Supports Multiprocessing extension",
913 .dependencies = sparseFeatureSet(&[_]Feature{}),
913 .dependencies = featureSet(&[_]Feature{}),
914914 };
915915 result[@enumToInt(Feature.muxed_units)] = .{
916916 .llvm_name = "muxed-units",
917917 .description = "Has muxed AGU and NEON/FPU",
918 .dependencies = sparseFeatureSet(&[_]Feature{}),
918 .dependencies = featureSet(&[_]Feature{}),
919919 };
920920 result[@enumToInt(Feature.mve)] = .{
921921 .llvm_name = "mve",
922922 .description = "Support M-Class Vector Extension with integer ops",
923 .dependencies = sparseFeatureSet(&[_]Feature{
923 .dependencies = featureSet(&[_]Feature{
924924 .dsp,
925925 .fpregs16,
926926 .fpregs64,
......@@ -930,7 +930,7 @@ pub const all_features = blk: {
930930 result[@enumToInt(Feature.mve_fp)] = .{
931931 .llvm_name = "mve.fp",
932932 .description = "Support M-Class Vector Extension with integer and floating ops",
933 .dependencies = sparseFeatureSet(&[_]Feature{
933 .dependencies = featureSet(&[_]Feature{
934934 .fp_armv8d16sp,
935935 .fullfp16,
936936 .mve,
......@@ -939,248 +939,248 @@ pub const all_features = blk: {
939939 result[@enumToInt(Feature.nacl_trap)] = .{
940940 .llvm_name = "nacl-trap",
941941 .description = "NaCl trap",
942 .dependencies = sparseFeatureSet(&[_]Feature{}),
942 .dependencies = featureSet(&[_]Feature{}),
943943 };
944944 result[@enumToInt(Feature.neon)] = .{
945945 .llvm_name = "neon",
946946 .description = "Enable NEON instructions",
947 .dependencies = sparseFeatureSet(&[_]Feature{
947 .dependencies = featureSet(&[_]Feature{
948948 .vfp3,
949949 }),
950950 };
951951 result[@enumToInt(Feature.neon_fpmovs)] = .{
952952 .llvm_name = "neon-fpmovs",
953953 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
954 .dependencies = sparseFeatureSet(&[_]Feature{}),
954 .dependencies = featureSet(&[_]Feature{}),
955955 };
956956 result[@enumToInt(Feature.neonfp)] = .{
957957 .llvm_name = "neonfp",
958958 .description = "Use NEON for single precision FP",
959 .dependencies = sparseFeatureSet(&[_]Feature{}),
959 .dependencies = featureSet(&[_]Feature{}),
960960 };
961961 result[@enumToInt(Feature.no_branch_predictor)] = .{
962962 .llvm_name = "no-branch-predictor",
963963 .description = "Has no branch predictor",
964 .dependencies = sparseFeatureSet(&[_]Feature{}),
964 .dependencies = featureSet(&[_]Feature{}),
965965 };
966966 result[@enumToInt(Feature.no_movt)] = .{
967967 .llvm_name = "no-movt",
968968 .description = "Don't use movt/movw pairs for 32-bit imms",
969 .dependencies = sparseFeatureSet(&[_]Feature{}),
969 .dependencies = featureSet(&[_]Feature{}),
970970 };
971971 result[@enumToInt(Feature.no_neg_immediates)] = .{
972972 .llvm_name = "no-neg-immediates",
973973 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
974 .dependencies = sparseFeatureSet(&[_]Feature{}),
974 .dependencies = featureSet(&[_]Feature{}),
975975 };
976976 result[@enumToInt(Feature.noarm)] = .{
977977 .llvm_name = "noarm",
978978 .description = "Does not support ARM mode execution",
979 .dependencies = sparseFeatureSet(&[_]Feature{}),
979 .dependencies = featureSet(&[_]Feature{}),
980980 };
981981 result[@enumToInt(Feature.nonpipelined_vfp)] = .{
982982 .llvm_name = "nonpipelined-vfp",
983983 .description = "VFP instructions are not pipelined",
984 .dependencies = sparseFeatureSet(&[_]Feature{}),
984 .dependencies = featureSet(&[_]Feature{}),
985985 };
986986 result[@enumToInt(Feature.perfmon)] = .{
987987 .llvm_name = "perfmon",
988988 .description = "Enable support for Performance Monitor extensions",
989 .dependencies = sparseFeatureSet(&[_]Feature{}),
989 .dependencies = featureSet(&[_]Feature{}),
990990 };
991991 result[@enumToInt(Feature.prefer_ishst)] = .{
992992 .llvm_name = "prefer-ishst",
993993 .description = "Prefer ISHST barriers",
994 .dependencies = sparseFeatureSet(&[_]Feature{}),
994 .dependencies = featureSet(&[_]Feature{}),
995995 };
996996 result[@enumToInt(Feature.prefer_vmovsr)] = .{
997997 .llvm_name = "prefer-vmovsr",
998998 .description = "Prefer VMOVSR",
999 .dependencies = sparseFeatureSet(&[_]Feature{}),
999 .dependencies = featureSet(&[_]Feature{}),
10001000 };
10011001 result[@enumToInt(Feature.prof_unpr)] = .{
10021002 .llvm_name = "prof-unpr",
10031003 .description = "Is profitable to unpredicate",
1004 .dependencies = sparseFeatureSet(&[_]Feature{}),
1004 .dependencies = featureSet(&[_]Feature{}),
10051005 };
10061006 result[@enumToInt(Feature.r4)] = .{
10071007 .llvm_name = "r4",
10081008 .description = "Cortex-R4 ARM processors",
1009 .dependencies = sparseFeatureSet(&[_]Feature{}),
1009 .dependencies = featureSet(&[_]Feature{}),
10101010 };
10111011 result[@enumToInt(Feature.r5)] = .{
10121012 .llvm_name = "r5",
10131013 .description = "Cortex-R5 ARM processors",
1014 .dependencies = sparseFeatureSet(&[_]Feature{}),
1014 .dependencies = featureSet(&[_]Feature{}),
10151015 };
10161016 result[@enumToInt(Feature.r52)] = .{
10171017 .llvm_name = "r52",
10181018 .description = "Cortex-R52 ARM processors",
1019 .dependencies = sparseFeatureSet(&[_]Feature{}),
1019 .dependencies = featureSet(&[_]Feature{}),
10201020 };
10211021 result[@enumToInt(Feature.r7)] = .{
10221022 .llvm_name = "r7",
10231023 .description = "Cortex-R7 ARM processors",
1024 .dependencies = sparseFeatureSet(&[_]Feature{}),
1024 .dependencies = featureSet(&[_]Feature{}),
10251025 };
10261026 result[@enumToInt(Feature.ras)] = .{
10271027 .llvm_name = "ras",
10281028 .description = "Enable Reliability, Availability and Serviceability extensions",
1029 .dependencies = sparseFeatureSet(&[_]Feature{}),
1029 .dependencies = featureSet(&[_]Feature{}),
10301030 };
10311031 result[@enumToInt(Feature.rclass)] = .{
10321032 .llvm_name = "rclass",
10331033 .description = "Is realtime profile ('R' series)",
1034 .dependencies = sparseFeatureSet(&[_]Feature{}),
1034 .dependencies = featureSet(&[_]Feature{}),
10351035 };
10361036 result[@enumToInt(Feature.read_tp_hard)] = .{
10371037 .llvm_name = "read-tp-hard",
10381038 .description = "Reading thread pointer from register",
1039 .dependencies = sparseFeatureSet(&[_]Feature{}),
1039 .dependencies = featureSet(&[_]Feature{}),
10401040 };
10411041 result[@enumToInt(Feature.reserve_r9)] = .{
10421042 .llvm_name = "reserve-r9",
10431043 .description = "Reserve R9, making it unavailable as GPR",
1044 .dependencies = sparseFeatureSet(&[_]Feature{}),
1044 .dependencies = featureSet(&[_]Feature{}),
10451045 };
10461046 result[@enumToInt(Feature.ret_addr_stack)] = .{
10471047 .llvm_name = "ret-addr-stack",
10481048 .description = "Has return address stack",
1049 .dependencies = sparseFeatureSet(&[_]Feature{}),
1049 .dependencies = featureSet(&[_]Feature{}),
10501050 };
10511051 result[@enumToInt(Feature.sb)] = .{
10521052 .llvm_name = "sb",
10531053 .description = "Enable v8.5a Speculation Barrier",
1054 .dependencies = sparseFeatureSet(&[_]Feature{}),
1054 .dependencies = featureSet(&[_]Feature{}),
10551055 };
10561056 result[@enumToInt(Feature.sha2)] = .{
10571057 .llvm_name = "sha2",
10581058 .description = "Enable SHA1 and SHA256 support",
1059 .dependencies = sparseFeatureSet(&[_]Feature{
1059 .dependencies = featureSet(&[_]Feature{
10601060 .neon,
10611061 }),
10621062 };
10631063 result[@enumToInt(Feature.slow_fp_brcc)] = .{
10641064 .llvm_name = "slow-fp-brcc",
10651065 .description = "FP compare + branch is slow",
1066 .dependencies = sparseFeatureSet(&[_]Feature{}),
1066 .dependencies = featureSet(&[_]Feature{}),
10671067 };
10681068 result[@enumToInt(Feature.slow_load_D_subreg)] = .{
10691069 .llvm_name = "slow-load-D-subreg",
10701070 .description = "Loading into D subregs is slow",
1071 .dependencies = sparseFeatureSet(&[_]Feature{}),
1071 .dependencies = featureSet(&[_]Feature{}),
10721072 };
10731073 result[@enumToInt(Feature.slow_odd_reg)] = .{
10741074 .llvm_name = "slow-odd-reg",
10751075 .description = "VLDM/VSTM starting with an odd register is slow",
1076 .dependencies = sparseFeatureSet(&[_]Feature{}),
1076 .dependencies = featureSet(&[_]Feature{}),
10771077 };
10781078 result[@enumToInt(Feature.slow_vdup32)] = .{
10791079 .llvm_name = "slow-vdup32",
10801080 .description = "Has slow VDUP32 - prefer VMOV",
1081 .dependencies = sparseFeatureSet(&[_]Feature{}),
1081 .dependencies = featureSet(&[_]Feature{}),
10821082 };
10831083 result[@enumToInt(Feature.slow_vgetlni32)] = .{
10841084 .llvm_name = "slow-vgetlni32",
10851085 .description = "Has slow VGETLNi32 - prefer VMOV",
1086 .dependencies = sparseFeatureSet(&[_]Feature{}),
1086 .dependencies = featureSet(&[_]Feature{}),
10871087 };
10881088 result[@enumToInt(Feature.slowfpvmlx)] = .{
10891089 .llvm_name = "slowfpvmlx",
10901090 .description = "Disable VFP / NEON MAC instructions",
1091 .dependencies = sparseFeatureSet(&[_]Feature{}),
1091 .dependencies = featureSet(&[_]Feature{}),
10921092 };
10931093 result[@enumToInt(Feature.soft_float)] = .{
10941094 .llvm_name = "soft-float",
10951095 .description = "Use software floating point features.",
1096 .dependencies = sparseFeatureSet(&[_]Feature{}),
1096 .dependencies = featureSet(&[_]Feature{}),
10971097 };
10981098 result[@enumToInt(Feature.splat_vfp_neon)] = .{
10991099 .llvm_name = "splat-vfp-neon",
11001100 .description = "Splat register from VFP to NEON",
1101 .dependencies = sparseFeatureSet(&[_]Feature{
1101 .dependencies = featureSet(&[_]Feature{
11021102 .dont_widen_vmovs,
11031103 }),
11041104 };
11051105 result[@enumToInt(Feature.strict_align)] = .{
11061106 .llvm_name = "strict-align",
11071107 .description = "Disallow all unaligned memory access",
1108 .dependencies = sparseFeatureSet(&[_]Feature{}),
1108 .dependencies = featureSet(&[_]Feature{}),
11091109 };
11101110 result[@enumToInt(Feature.swift)] = .{
11111111 .llvm_name = "swift",
11121112 .description = "Swift ARM processors",
1113 .dependencies = sparseFeatureSet(&[_]Feature{}),
1113 .dependencies = featureSet(&[_]Feature{}),
11141114 };
11151115 result[@enumToInt(Feature.thumb_mode)] = .{
11161116 .llvm_name = "thumb-mode",
11171117 .description = "Thumb mode",
1118 .dependencies = sparseFeatureSet(&[_]Feature{}),
1118 .dependencies = featureSet(&[_]Feature{}),
11191119 };
11201120 result[@enumToInt(Feature.thumb2)] = .{
11211121 .llvm_name = "thumb2",
11221122 .description = "Enable Thumb2 instructions",
1123 .dependencies = sparseFeatureSet(&[_]Feature{}),
1123 .dependencies = featureSet(&[_]Feature{}),
11241124 };
11251125 result[@enumToInt(Feature.trustzone)] = .{
11261126 .llvm_name = "trustzone",
11271127 .description = "Enable support for TrustZone security extensions",
1128 .dependencies = sparseFeatureSet(&[_]Feature{}),
1128 .dependencies = featureSet(&[_]Feature{}),
11291129 };
11301130 result[@enumToInt(Feature.use_aa)] = .{
11311131 .llvm_name = "use-aa",
11321132 .description = "Use alias analysis during codegen",
1133 .dependencies = sparseFeatureSet(&[_]Feature{}),
1133 .dependencies = featureSet(&[_]Feature{}),
11341134 };
11351135 result[@enumToInt(Feature.use_misched)] = .{
11361136 .llvm_name = "use-misched",
11371137 .description = "Use the MachineScheduler",
1138 .dependencies = sparseFeatureSet(&[_]Feature{}),
1138 .dependencies = featureSet(&[_]Feature{}),
11391139 };
11401140 result[@enumToInt(Feature.v4t)] = .{
11411141 .llvm_name = "v4t",
11421142 .description = "Support ARM v4T instructions",
1143 .dependencies = sparseFeatureSet(&[_]Feature{}),
1143 .dependencies = featureSet(&[_]Feature{}),
11441144 };
11451145 result[@enumToInt(Feature.v5t)] = .{
11461146 .llvm_name = "v5t",
11471147 .description = "Support ARM v5T instructions",
1148 .dependencies = sparseFeatureSet(&[_]Feature{
1148 .dependencies = featureSet(&[_]Feature{
11491149 .v4t,
11501150 }),
11511151 };
11521152 result[@enumToInt(Feature.v5te)] = .{
11531153 .llvm_name = "v5te",
11541154 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
1155 .dependencies = sparseFeatureSet(&[_]Feature{
1155 .dependencies = featureSet(&[_]Feature{
11561156 .v5t,
11571157 }),
11581158 };
11591159 result[@enumToInt(Feature.v6)] = .{
11601160 .llvm_name = "v6",
11611161 .description = "Support ARM v6 instructions",
1162 .dependencies = sparseFeatureSet(&[_]Feature{
1162 .dependencies = featureSet(&[_]Feature{
11631163 .v5te,
11641164 }),
11651165 };
11661166 result[@enumToInt(Feature.v6k)] = .{
11671167 .llvm_name = "v6k",
11681168 .description = "Support ARM v6k instructions",
1169 .dependencies = sparseFeatureSet(&[_]Feature{
1169 .dependencies = featureSet(&[_]Feature{
11701170 .v6,
11711171 }),
11721172 };
11731173 result[@enumToInt(Feature.v6m)] = .{
11741174 .llvm_name = "v6m",
11751175 .description = "Support ARM v6M instructions",
1176 .dependencies = sparseFeatureSet(&[_]Feature{
1176 .dependencies = featureSet(&[_]Feature{
11771177 .v6,
11781178 }),
11791179 };
11801180 result[@enumToInt(Feature.v6t2)] = .{
11811181 .llvm_name = "v6t2",
11821182 .description = "Support ARM v6t2 instructions",
1183 .dependencies = sparseFeatureSet(&[_]Feature{
1183 .dependencies = featureSet(&[_]Feature{
11841184 .thumb2,
11851185 .v6k,
11861186 .v8m,
......@@ -1189,7 +1189,7 @@ pub const all_features = blk: {
11891189 result[@enumToInt(Feature.v7)] = .{
11901190 .llvm_name = "v7",
11911191 .description = "Support ARM v7 instructions",
1192 .dependencies = sparseFeatureSet(&[_]Feature{
1192 .dependencies = featureSet(&[_]Feature{
11931193 .perfmon,
11941194 .v6t2,
11951195 .v7clrex,
......@@ -1198,12 +1198,12 @@ pub const all_features = blk: {
11981198 result[@enumToInt(Feature.v7clrex)] = .{
11991199 .llvm_name = "v7clrex",
12001200 .description = "Has v7 clrex instruction",
1201 .dependencies = sparseFeatureSet(&[_]Feature{}),
1201 .dependencies = featureSet(&[_]Feature{}),
12021202 };
12031203 result[@enumToInt(Feature.v8)] = .{
12041204 .llvm_name = "v8",
12051205 .description = "Support ARM v8 instructions",
1206 .dependencies = sparseFeatureSet(&[_]Feature{
1206 .dependencies = featureSet(&[_]Feature{
12071207 .acquire_release,
12081208 .v7,
12091209 }),
......@@ -1211,35 +1211,35 @@ pub const all_features = blk: {
12111211 result[@enumToInt(Feature.v8_1a)] = .{
12121212 .llvm_name = "v8.1a",
12131213 .description = "Support ARM v8.1a instructions",
1214 .dependencies = sparseFeatureSet(&[_]Feature{
1214 .dependencies = featureSet(&[_]Feature{
12151215 .v8,
12161216 }),
12171217 };
12181218 result[@enumToInt(Feature.v8_1m_main)] = .{
12191219 .llvm_name = "v8.1m.main",
12201220 .description = "Support ARM v8-1M Mainline instructions",
1221 .dependencies = sparseFeatureSet(&[_]Feature{
1221 .dependencies = featureSet(&[_]Feature{
12221222 .v8m_main,
12231223 }),
12241224 };
12251225 result[@enumToInt(Feature.v8_2a)] = .{
12261226 .llvm_name = "v8.2a",
12271227 .description = "Support ARM v8.2a instructions",
1228 .dependencies = sparseFeatureSet(&[_]Feature{
1228 .dependencies = featureSet(&[_]Feature{
12291229 .v8_1a,
12301230 }),
12311231 };
12321232 result[@enumToInt(Feature.v8_3a)] = .{
12331233 .llvm_name = "v8.3a",
12341234 .description = "Support ARM v8.3a instructions",
1235 .dependencies = sparseFeatureSet(&[_]Feature{
1235 .dependencies = featureSet(&[_]Feature{
12361236 .v8_2a,
12371237 }),
12381238 };
12391239 result[@enumToInt(Feature.v8_4a)] = .{
12401240 .llvm_name = "v8.4a",
12411241 .description = "Support ARM v8.4a instructions",
1242 .dependencies = sparseFeatureSet(&[_]Feature{
1242 .dependencies = featureSet(&[_]Feature{
12431243 .dotprod,
12441244 .v8_3a,
12451245 }),
......@@ -1247,7 +1247,7 @@ pub const all_features = blk: {
12471247 result[@enumToInt(Feature.v8_5a)] = .{
12481248 .llvm_name = "v8.5a",
12491249 .description = "Support ARM v8.5a instructions",
1250 .dependencies = sparseFeatureSet(&[_]Feature{
1250 .dependencies = featureSet(&[_]Feature{
12511251 .sb,
12521252 .v8_4a,
12531253 }),
......@@ -1255,21 +1255,21 @@ pub const all_features = blk: {
12551255 result[@enumToInt(Feature.v8m)] = .{
12561256 .llvm_name = "v8m",
12571257 .description = "Support ARM v8M Baseline instructions",
1258 .dependencies = sparseFeatureSet(&[_]Feature{
1258 .dependencies = featureSet(&[_]Feature{
12591259 .v6m,
12601260 }),
12611261 };
12621262 result[@enumToInt(Feature.v8m_main)] = .{
12631263 .llvm_name = "v8m.main",
12641264 .description = "Support ARM v8M Mainline instructions",
1265 .dependencies = sparseFeatureSet(&[_]Feature{
1265 .dependencies = featureSet(&[_]Feature{
12661266 .v7,
12671267 }),
12681268 };
12691269 result[@enumToInt(Feature.vfp2)] = .{
12701270 .llvm_name = "vfp2",
12711271 .description = "Enable VFP2 instructions",
1272 .dependencies = sparseFeatureSet(&[_]Feature{
1272 .dependencies = featureSet(&[_]Feature{
12731273 .vfp2d16,
12741274 .vfp2sp,
12751275 }),
......@@ -1277,7 +1277,7 @@ pub const all_features = blk: {
12771277 result[@enumToInt(Feature.vfp2d16)] = .{
12781278 .llvm_name = "vfp2d16",
12791279 .description = "Enable VFP2 instructions",
1280 .dependencies = sparseFeatureSet(&[_]Feature{
1280 .dependencies = featureSet(&[_]Feature{
12811281 .fp64,
12821282 .vfp2d16sp,
12831283 }),
......@@ -1285,21 +1285,21 @@ pub const all_features = blk: {
12851285 result[@enumToInt(Feature.vfp2d16sp)] = .{
12861286 .llvm_name = "vfp2d16sp",
12871287 .description = "Enable VFP2 instructions with no double precision",
1288 .dependencies = sparseFeatureSet(&[_]Feature{
1288 .dependencies = featureSet(&[_]Feature{
12891289 .fpregs,
12901290 }),
12911291 };
12921292 result[@enumToInt(Feature.vfp2sp)] = .{
12931293 .llvm_name = "vfp2sp",
12941294 .description = "Enable VFP2 instructions with no double precision",
1295 .dependencies = sparseFeatureSet(&[_]Feature{
1295 .dependencies = featureSet(&[_]Feature{
12961296 .vfp2d16sp,
12971297 }),
12981298 };
12991299 result[@enumToInt(Feature.vfp3)] = .{
13001300 .llvm_name = "vfp3",
13011301 .description = "Enable VFP3 instructions",
1302 .dependencies = sparseFeatureSet(&[_]Feature{
1302 .dependencies = featureSet(&[_]Feature{
13031303 .vfp3d16,
13041304 .vfp3sp,
13051305 }),
......@@ -1307,7 +1307,7 @@ pub const all_features = blk: {
13071307 result[@enumToInt(Feature.vfp3d16)] = .{
13081308 .llvm_name = "vfp3d16",
13091309 .description = "Enable VFP3 instructions with only 16 d-registers",
1310 .dependencies = sparseFeatureSet(&[_]Feature{
1310 .dependencies = featureSet(&[_]Feature{
13111311 .fp64,
13121312 .vfp2,
13131313 .vfp3d16sp,
......@@ -1316,14 +1316,14 @@ pub const all_features = blk: {
13161316 result[@enumToInt(Feature.vfp3d16sp)] = .{
13171317 .llvm_name = "vfp3d16sp",
13181318 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",
1319 .dependencies = sparseFeatureSet(&[_]Feature{
1319 .dependencies = featureSet(&[_]Feature{
13201320 .vfp2sp,
13211321 }),
13221322 };
13231323 result[@enumToInt(Feature.vfp3sp)] = .{
13241324 .llvm_name = "vfp3sp",
13251325 .description = "Enable VFP3 instructions with no double precision",
1326 .dependencies = sparseFeatureSet(&[_]Feature{
1326 .dependencies = featureSet(&[_]Feature{
13271327 .d32,
13281328 .vfp3d16sp,
13291329 }),
......@@ -1331,7 +1331,7 @@ pub const all_features = blk: {
13311331 result[@enumToInt(Feature.vfp4)] = .{
13321332 .llvm_name = "vfp4",
13331333 .description = "Enable VFP4 instructions",
1334 .dependencies = sparseFeatureSet(&[_]Feature{
1334 .dependencies = featureSet(&[_]Feature{
13351335 .fp16,
13361336 .vfp3,
13371337 .vfp4d16,
......@@ -1341,7 +1341,7 @@ pub const all_features = blk: {
13411341 result[@enumToInt(Feature.vfp4d16)] = .{
13421342 .llvm_name = "vfp4d16",
13431343 .description = "Enable VFP4 instructions with only 16 d-registers",
1344 .dependencies = sparseFeatureSet(&[_]Feature{
1344 .dependencies = featureSet(&[_]Feature{
13451345 .fp16,
13461346 .fp64,
13471347 .vfp3d16,
......@@ -1351,7 +1351,7 @@ pub const all_features = blk: {
13511351 result[@enumToInt(Feature.vfp4d16sp)] = .{
13521352 .llvm_name = "vfp4d16sp",
13531353 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",
1354 .dependencies = sparseFeatureSet(&[_]Feature{
1354 .dependencies = featureSet(&[_]Feature{
13551355 .fp16,
13561356 .vfp3d16sp,
13571357 }),
......@@ -1359,7 +1359,7 @@ pub const all_features = blk: {
13591359 result[@enumToInt(Feature.vfp4sp)] = .{
13601360 .llvm_name = "vfp4sp",
13611361 .description = "Enable VFP4 instructions with no double precision",
1362 .dependencies = sparseFeatureSet(&[_]Feature{
1362 .dependencies = featureSet(&[_]Feature{
13631363 .d32,
13641364 .fp16,
13651365 .vfp3sp,
......@@ -1369,7 +1369,7 @@ pub const all_features = blk: {
13691369 result[@enumToInt(Feature.virtualization)] = .{
13701370 .llvm_name = "virtualization",
13711371 .description = "Supports Virtualization extension",
1372 .dependencies = sparseFeatureSet(&[_]Feature{
1372 .dependencies = featureSet(&[_]Feature{
13731373 .hwdiv,
13741374 .hwdiv_arm,
13751375 }),
......@@ -1377,40 +1377,39 @@ pub const all_features = blk: {
13771377 result[@enumToInt(Feature.vldn_align)] = .{
13781378 .llvm_name = "vldn-align",
13791379 .description = "Check for VLDn unaligned access",
1380 .dependencies = sparseFeatureSet(&[_]Feature{}),
1380 .dependencies = featureSet(&[_]Feature{}),
13811381 };
13821382 result[@enumToInt(Feature.vmlx_forwarding)] = .{
13831383 .llvm_name = "vmlx-forwarding",
13841384 .description = "Has multiplier accumulator forwarding",
1385 .dependencies = sparseFeatureSet(&[_]Feature{}),
1385 .dependencies = featureSet(&[_]Feature{}),
13861386 };
13871387 result[@enumToInt(Feature.vmlx_hazards)] = .{
13881388 .llvm_name = "vmlx-hazards",
13891389 .description = "Has VMLx hazards",
1390 .dependencies = sparseFeatureSet(&[_]Feature{}),
1390 .dependencies = featureSet(&[_]Feature{}),
13911391 };
13921392 result[@enumToInt(Feature.wide_stride_vfp)] = .{
13931393 .llvm_name = "wide-stride-vfp",
13941394 .description = "Use a wide stride when allocating VFP registers",
1395 .dependencies = sparseFeatureSet(&[_]Feature{}),
1395 .dependencies = featureSet(&[_]Feature{}),
13961396 };
13971397 result[@enumToInt(Feature.xscale)] = .{
13981398 .llvm_name = "xscale",
13991399 .description = "ARMv5te architecture",
1400 .dependencies = sparseFeatureSet(&[_]Feature{
1400 .dependencies = featureSet(&[_]Feature{
14011401 .armv5te,
14021402 }),
14031403 };
14041404 result[@enumToInt(Feature.zcz)] = .{
14051405 .llvm_name = "zcz",
14061406 .description = "Has zero-cycle zeroing instructions",
1407 .dependencies = sparseFeatureSet(&[_]Feature{}),
1407 .dependencies = featureSet(&[_]Feature{}),
14081408 };
14091409 const ti = @typeInfo(Feature);
14101410 for (result) |*elem, i| {
14111411 elem.index = i;
14121412 elem.name = ti.Enum.fields[i].name;
1413 elem.dependencies.initAsDependencies(i, &result);
14141413 }
14151414 break :blk result;
14161415};
......@@ -1419,49 +1418,49 @@ pub const cpu = struct {
14191418 pub const arm1020e = Cpu{
14201419 .name = "arm1020e",
14211420 .llvm_name = "arm1020e",
1422 .features = featureSet(&all_features, &[_]Feature{
1421 .features = featureSet(&[_]Feature{
14231422 .armv5te,
14241423 }),
14251424 };
14261425 pub const arm1020t = Cpu{
14271426 .name = "arm1020t",
14281427 .llvm_name = "arm1020t",
1429 .features = featureSet(&all_features, &[_]Feature{
1428 .features = featureSet(&[_]Feature{
14301429 .armv5t,
14311430 }),
14321431 };
14331432 pub const arm1022e = Cpu{
14341433 .name = "arm1022e",
14351434 .llvm_name = "arm1022e",
1436 .features = featureSet(&all_features, &[_]Feature{
1435 .features = featureSet(&[_]Feature{
14371436 .armv5te,
14381437 }),
14391438 };
14401439 pub const arm10e = Cpu{
14411440 .name = "arm10e",
14421441 .llvm_name = "arm10e",
1443 .features = featureSet(&all_features, &[_]Feature{
1442 .features = featureSet(&[_]Feature{
14441443 .armv5te,
14451444 }),
14461445 };
14471446 pub const arm10tdmi = Cpu{
14481447 .name = "arm10tdmi",
14491448 .llvm_name = "arm10tdmi",
1450 .features = featureSet(&all_features, &[_]Feature{
1449 .features = featureSet(&[_]Feature{
14511450 .armv5t,
14521451 }),
14531452 };
14541453 pub const arm1136j_s = Cpu{
14551454 .name = "arm1136j_s",
14561455 .llvm_name = "arm1136j-s",
1457 .features = featureSet(&all_features, &[_]Feature{
1456 .features = featureSet(&[_]Feature{
14581457 .armv6,
14591458 }),
14601459 };
14611460 pub const arm1136jf_s = Cpu{
14621461 .name = "arm1136jf_s",
14631462 .llvm_name = "arm1136jf-s",
1464 .features = featureSet(&all_features, &[_]Feature{
1463 .features = featureSet(&[_]Feature{
14651464 .armv6,
14661465 .slowfpvmlx,
14671466 .vfp2,
......@@ -1470,14 +1469,14 @@ pub const cpu = struct {
14701469 pub const arm1156t2_s = Cpu{
14711470 .name = "arm1156t2_s",
14721471 .llvm_name = "arm1156t2-s",
1473 .features = featureSet(&all_features, &[_]Feature{
1472 .features = featureSet(&[_]Feature{
14741473 .armv6t2,
14751474 }),
14761475 };
14771476 pub const arm1156t2f_s = Cpu{
14781477 .name = "arm1156t2f_s",
14791478 .llvm_name = "arm1156t2f-s",
1480 .features = featureSet(&all_features, &[_]Feature{
1479 .features = featureSet(&[_]Feature{
14811480 .armv6t2,
14821481 .slowfpvmlx,
14831482 .vfp2,
......@@ -1486,21 +1485,21 @@ pub const cpu = struct {
14861485 pub const arm1176j_s = Cpu{
14871486 .name = "arm1176j_s",
14881487 .llvm_name = "arm1176j-s",
1489 .features = featureSet(&all_features, &[_]Feature{
1488 .features = featureSet(&[_]Feature{
14901489 .armv6kz,
14911490 }),
14921491 };
14931492 pub const arm1176jz_s = Cpu{
14941493 .name = "arm1176jz_s",
14951494 .llvm_name = "arm1176jz-s",
1496 .features = featureSet(&all_features, &[_]Feature{
1495 .features = featureSet(&[_]Feature{
14971496 .armv6kz,
14981497 }),
14991498 };
15001499 pub const arm1176jzf_s = Cpu{
15011500 .name = "arm1176jzf_s",
15021501 .llvm_name = "arm1176jzf-s",
1503 .features = featureSet(&all_features, &[_]Feature{
1502 .features = featureSet(&[_]Feature{
15041503 .armv6kz,
15051504 .slowfpvmlx,
15061505 .vfp2,
......@@ -1509,126 +1508,126 @@ pub const cpu = struct {
15091508 pub const arm710t = Cpu{
15101509 .name = "arm710t",
15111510 .llvm_name = "arm710t",
1512 .features = featureSet(&all_features, &[_]Feature{
1511 .features = featureSet(&[_]Feature{
15131512 .armv4t,
15141513 }),
15151514 };
15161515 pub const arm720t = Cpu{
15171516 .name = "arm720t",
15181517 .llvm_name = "arm720t",
1519 .features = featureSet(&all_features, &[_]Feature{
1518 .features = featureSet(&[_]Feature{
15201519 .armv4t,
15211520 }),
15221521 };
15231522 pub const arm7tdmi = Cpu{
15241523 .name = "arm7tdmi",
15251524 .llvm_name = "arm7tdmi",
1526 .features = featureSet(&all_features, &[_]Feature{
1525 .features = featureSet(&[_]Feature{
15271526 .armv4t,
15281527 }),
15291528 };
15301529 pub const arm7tdmi_s = Cpu{
15311530 .name = "arm7tdmi_s",
15321531 .llvm_name = "arm7tdmi-s",
1533 .features = featureSet(&all_features, &[_]Feature{
1532 .features = featureSet(&[_]Feature{
15341533 .armv4t,
15351534 }),
15361535 };
15371536 pub const arm8 = Cpu{
15381537 .name = "arm8",
15391538 .llvm_name = "arm8",
1540 .features = featureSet(&all_features, &[_]Feature{
1539 .features = featureSet(&[_]Feature{
15411540 .armv4,
15421541 }),
15431542 };
15441543 pub const arm810 = Cpu{
15451544 .name = "arm810",
15461545 .llvm_name = "arm810",
1547 .features = featureSet(&all_features, &[_]Feature{
1546 .features = featureSet(&[_]Feature{
15481547 .armv4,
15491548 }),
15501549 };
15511550 pub const arm9 = Cpu{
15521551 .name = "arm9",
15531552 .llvm_name = "arm9",
1554 .features = featureSet(&all_features, &[_]Feature{
1553 .features = featureSet(&[_]Feature{
15551554 .armv4t,
15561555 }),
15571556 };
15581557 pub const arm920 = Cpu{
15591558 .name = "arm920",
15601559 .llvm_name = "arm920",
1561 .features = featureSet(&all_features, &[_]Feature{
1560 .features = featureSet(&[_]Feature{
15621561 .armv4t,
15631562 }),
15641563 };
15651564 pub const arm920t = Cpu{
15661565 .name = "arm920t",
15671566 .llvm_name = "arm920t",
1568 .features = featureSet(&all_features, &[_]Feature{
1567 .features = featureSet(&[_]Feature{
15691568 .armv4t,
15701569 }),
15711570 };
15721571 pub const arm922t = Cpu{
15731572 .name = "arm922t",
15741573 .llvm_name = "arm922t",
1575 .features = featureSet(&all_features, &[_]Feature{
1574 .features = featureSet(&[_]Feature{
15761575 .armv4t,
15771576 }),
15781577 };
15791578 pub const arm926ej_s = Cpu{
15801579 .name = "arm926ej_s",
15811580 .llvm_name = "arm926ej-s",
1582 .features = featureSet(&all_features, &[_]Feature{
1581 .features = featureSet(&[_]Feature{
15831582 .armv5te,
15841583 }),
15851584 };
15861585 pub const arm940t = Cpu{
15871586 .name = "arm940t",
15881587 .llvm_name = "arm940t",
1589 .features = featureSet(&all_features, &[_]Feature{
1588 .features = featureSet(&[_]Feature{
15901589 .armv4t,
15911590 }),
15921591 };
15931592 pub const arm946e_s = Cpu{
15941593 .name = "arm946e_s",
15951594 .llvm_name = "arm946e-s",
1596 .features = featureSet(&all_features, &[_]Feature{
1595 .features = featureSet(&[_]Feature{
15971596 .armv5te,
15981597 }),
15991598 };
16001599 pub const arm966e_s = Cpu{
16011600 .name = "arm966e_s",
16021601 .llvm_name = "arm966e-s",
1603 .features = featureSet(&all_features, &[_]Feature{
1602 .features = featureSet(&[_]Feature{
16041603 .armv5te,
16051604 }),
16061605 };
16071606 pub const arm968e_s = Cpu{
16081607 .name = "arm968e_s",
16091608 .llvm_name = "arm968e-s",
1610 .features = featureSet(&all_features, &[_]Feature{
1609 .features = featureSet(&[_]Feature{
16111610 .armv5te,
16121611 }),
16131612 };
16141613 pub const arm9e = Cpu{
16151614 .name = "arm9e",
16161615 .llvm_name = "arm9e",
1617 .features = featureSet(&all_features, &[_]Feature{
1616 .features = featureSet(&[_]Feature{
16181617 .armv5te,
16191618 }),
16201619 };
16211620 pub const arm9tdmi = Cpu{
16221621 .name = "arm9tdmi",
16231622 .llvm_name = "arm9tdmi",
1624 .features = featureSet(&all_features, &[_]Feature{
1623 .features = featureSet(&[_]Feature{
16251624 .armv4t,
16261625 }),
16271626 };
16281627 pub const cortex_a12 = Cpu{
16291628 .name = "cortex_a12",
16301629 .llvm_name = "cortex-a12",
1631 .features = featureSet(&all_features, &[_]Feature{
1630 .features = featureSet(&[_]Feature{
16321631 .a12,
16331632 .armv7_a,
16341633 .avoid_partial_cpsr,
......@@ -1643,7 +1642,7 @@ pub const cpu = struct {
16431642 pub const cortex_a15 = Cpu{
16441643 .name = "cortex_a15",
16451644 .llvm_name = "cortex-a15",
1646 .features = featureSet(&all_features, &[_]Feature{
1645 .features = featureSet(&[_]Feature{
16471646 .a15,
16481647 .armv7_a,
16491648 .avoid_partial_cpsr,
......@@ -1661,7 +1660,7 @@ pub const cpu = struct {
16611660 pub const cortex_a17 = Cpu{
16621661 .name = "cortex_a17",
16631662 .llvm_name = "cortex-a17",
1664 .features = featureSet(&all_features, &[_]Feature{
1663 .features = featureSet(&[_]Feature{
16651664 .a17,
16661665 .armv7_a,
16671666 .avoid_partial_cpsr,
......@@ -1676,7 +1675,7 @@ pub const cpu = struct {
16761675 pub const cortex_a32 = Cpu{
16771676 .name = "cortex_a32",
16781677 .llvm_name = "cortex-a32",
1679 .features = featureSet(&all_features, &[_]Feature{
1678 .features = featureSet(&[_]Feature{
16801679 .armv8_a,
16811680 .crc,
16821681 .crypto,
......@@ -1687,7 +1686,7 @@ pub const cpu = struct {
16871686 pub const cortex_a35 = Cpu{
16881687 .name = "cortex_a35",
16891688 .llvm_name = "cortex-a35",
1690 .features = featureSet(&all_features, &[_]Feature{
1689 .features = featureSet(&[_]Feature{
16911690 .a35,
16921691 .armv8_a,
16931692 .crc,
......@@ -1699,7 +1698,7 @@ pub const cpu = struct {
16991698 pub const cortex_a5 = Cpu{
17001699 .name = "cortex_a5",
17011700 .llvm_name = "cortex-a5",
1702 .features = featureSet(&all_features, &[_]Feature{
1701 .features = featureSet(&[_]Feature{
17031702 .a5,
17041703 .armv7_a,
17051704 .mp,
......@@ -1714,7 +1713,7 @@ pub const cpu = struct {
17141713 pub const cortex_a53 = Cpu{
17151714 .name = "cortex_a53",
17161715 .llvm_name = "cortex-a53",
1717 .features = featureSet(&all_features, &[_]Feature{
1716 .features = featureSet(&[_]Feature{
17181717 .a53,
17191718 .armv8_a,
17201719 .crc,
......@@ -1727,7 +1726,7 @@ pub const cpu = struct {
17271726 pub const cortex_a55 = Cpu{
17281727 .name = "cortex_a55",
17291728 .llvm_name = "cortex-a55",
1730 .features = featureSet(&all_features, &[_]Feature{
1729 .features = featureSet(&[_]Feature{
17311730 .a55,
17321731 .armv8_2_a,
17331732 .dotprod,
......@@ -1738,7 +1737,7 @@ pub const cpu = struct {
17381737 pub const cortex_a57 = Cpu{
17391738 .name = "cortex_a57",
17401739 .llvm_name = "cortex-a57",
1741 .features = featureSet(&all_features, &[_]Feature{
1740 .features = featureSet(&[_]Feature{
17421741 .a57,
17431742 .armv8_a,
17441743 .avoid_partial_cpsr,
......@@ -1753,7 +1752,7 @@ pub const cpu = struct {
17531752 pub const cortex_a7 = Cpu{
17541753 .name = "cortex_a7",
17551754 .llvm_name = "cortex-a7",
1756 .features = featureSet(&all_features, &[_]Feature{
1755 .features = featureSet(&[_]Feature{
17571756 .a7,
17581757 .armv7_a,
17591758 .mp,
......@@ -1770,7 +1769,7 @@ pub const cpu = struct {
17701769 pub const cortex_a72 = Cpu{
17711770 .name = "cortex_a72",
17721771 .llvm_name = "cortex-a72",
1773 .features = featureSet(&all_features, &[_]Feature{
1772 .features = featureSet(&[_]Feature{
17741773 .a72,
17751774 .armv8_a,
17761775 .crc,
......@@ -1782,7 +1781,7 @@ pub const cpu = struct {
17821781 pub const cortex_a73 = Cpu{
17831782 .name = "cortex_a73",
17841783 .llvm_name = "cortex-a73",
1785 .features = featureSet(&all_features, &[_]Feature{
1784 .features = featureSet(&[_]Feature{
17861785 .a73,
17871786 .armv8_a,
17881787 .crc,
......@@ -1794,7 +1793,7 @@ pub const cpu = struct {
17941793 pub const cortex_a75 = Cpu{
17951794 .name = "cortex_a75",
17961795 .llvm_name = "cortex-a75",
1797 .features = featureSet(&all_features, &[_]Feature{
1796 .features = featureSet(&[_]Feature{
17981797 .a75,
17991798 .armv8_2_a,
18001799 .dotprod,
......@@ -1805,7 +1804,7 @@ pub const cpu = struct {
18051804 pub const cortex_a76 = Cpu{
18061805 .name = "cortex_a76",
18071806 .llvm_name = "cortex-a76",
1808 .features = featureSet(&all_features, &[_]Feature{
1807 .features = featureSet(&[_]Feature{
18091808 .a76,
18101809 .armv8_2_a,
18111810 .crc,
......@@ -1819,7 +1818,7 @@ pub const cpu = struct {
18191818 pub const cortex_a76ae = Cpu{
18201819 .name = "cortex_a76ae",
18211820 .llvm_name = "cortex-a76ae",
1822 .features = featureSet(&all_features, &[_]Feature{
1821 .features = featureSet(&[_]Feature{
18231822 .a76,
18241823 .armv8_2_a,
18251824 .crc,
......@@ -1833,7 +1832,7 @@ pub const cpu = struct {
18331832 pub const cortex_a8 = Cpu{
18341833 .name = "cortex_a8",
18351834 .llvm_name = "cortex-a8",
1836 .features = featureSet(&all_features, &[_]Feature{
1835 .features = featureSet(&[_]Feature{
18371836 .a8,
18381837 .armv7_a,
18391838 .nonpipelined_vfp,
......@@ -1848,7 +1847,7 @@ pub const cpu = struct {
18481847 pub const cortex_a9 = Cpu{
18491848 .name = "cortex_a9",
18501849 .llvm_name = "cortex-a9",
1851 .features = featureSet(&all_features, &[_]Feature{
1850 .features = featureSet(&[_]Feature{
18521851 .a9,
18531852 .armv7_a,
18541853 .avoid_partial_cpsr,
......@@ -1868,28 +1867,28 @@ pub const cpu = struct {
18681867 pub const cortex_m0 = Cpu{
18691868 .name = "cortex_m0",
18701869 .llvm_name = "cortex-m0",
1871 .features = featureSet(&all_features, &[_]Feature{
1870 .features = featureSet(&[_]Feature{
18721871 .armv6_m,
18731872 }),
18741873 };
18751874 pub const cortex_m0plus = Cpu{
18761875 .name = "cortex_m0plus",
18771876 .llvm_name = "cortex-m0plus",
1878 .features = featureSet(&all_features, &[_]Feature{
1877 .features = featureSet(&[_]Feature{
18791878 .armv6_m,
18801879 }),
18811880 };
18821881 pub const cortex_m1 = Cpu{
18831882 .name = "cortex_m1",
18841883 .llvm_name = "cortex-m1",
1885 .features = featureSet(&all_features, &[_]Feature{
1884 .features = featureSet(&[_]Feature{
18861885 .armv6_m,
18871886 }),
18881887 };
18891888 pub const cortex_m23 = Cpu{
18901889 .name = "cortex_m23",
18911890 .llvm_name = "cortex-m23",
1892 .features = featureSet(&all_features, &[_]Feature{
1891 .features = featureSet(&[_]Feature{
18931892 .armv8_m_base,
18941893 .no_movt,
18951894 }),
......@@ -1897,7 +1896,7 @@ pub const cpu = struct {
18971896 pub const cortex_m3 = Cpu{
18981897 .name = "cortex_m3",
18991898 .llvm_name = "cortex-m3",
1900 .features = featureSet(&all_features, &[_]Feature{
1899 .features = featureSet(&[_]Feature{
19011900 .armv7_m,
19021901 .loop_align,
19031902 .m3,
......@@ -1909,7 +1908,7 @@ pub const cpu = struct {
19091908 pub const cortex_m33 = Cpu{
19101909 .name = "cortex_m33",
19111910 .llvm_name = "cortex-m33",
1912 .features = featureSet(&all_features, &[_]Feature{
1911 .features = featureSet(&[_]Feature{
19131912 .armv8_m_main,
19141913 .dsp,
19151914 .fp_armv8d16sp,
......@@ -1923,7 +1922,7 @@ pub const cpu = struct {
19231922 pub const cortex_m35p = Cpu{
19241923 .name = "cortex_m35p",
19251924 .llvm_name = "cortex-m35p",
1926 .features = featureSet(&all_features, &[_]Feature{
1925 .features = featureSet(&[_]Feature{
19271926 .armv8_m_main,
19281927 .dsp,
19291928 .fp_armv8d16sp,
......@@ -1937,7 +1936,7 @@ pub const cpu = struct {
19371936 pub const cortex_m4 = Cpu{
19381937 .name = "cortex_m4",
19391938 .llvm_name = "cortex-m4",
1940 .features = featureSet(&all_features, &[_]Feature{
1939 .features = featureSet(&[_]Feature{
19411940 .armv7e_m,
19421941 .loop_align,
19431942 .no_branch_predictor,
......@@ -1950,7 +1949,7 @@ pub const cpu = struct {
19501949 pub const cortex_m7 = Cpu{
19511950 .name = "cortex_m7",
19521951 .llvm_name = "cortex-m7",
1953 .features = featureSet(&all_features, &[_]Feature{
1952 .features = featureSet(&[_]Feature{
19541953 .armv7e_m,
19551954 .fp_armv8d16,
19561955 }),
......@@ -1958,7 +1957,7 @@ pub const cpu = struct {
19581957 pub const cortex_r4 = Cpu{
19591958 .name = "cortex_r4",
19601959 .llvm_name = "cortex-r4",
1961 .features = featureSet(&all_features, &[_]Feature{
1960 .features = featureSet(&[_]Feature{
19621961 .armv7_r,
19631962 .avoid_partial_cpsr,
19641963 .r4,
......@@ -1968,7 +1967,7 @@ pub const cpu = struct {
19681967 pub const cortex_r4f = Cpu{
19691968 .name = "cortex_r4f",
19701969 .llvm_name = "cortex-r4f",
1971 .features = featureSet(&all_features, &[_]Feature{
1970 .features = featureSet(&[_]Feature{
19721971 .armv7_r,
19731972 .avoid_partial_cpsr,
19741973 .r4,
......@@ -1981,7 +1980,7 @@ pub const cpu = struct {
19811980 pub const cortex_r5 = Cpu{
19821981 .name = "cortex_r5",
19831982 .llvm_name = "cortex-r5",
1984 .features = featureSet(&all_features, &[_]Feature{
1983 .features = featureSet(&[_]Feature{
19851984 .armv7_r,
19861985 .avoid_partial_cpsr,
19871986 .hwdiv_arm,
......@@ -1995,7 +1994,7 @@ pub const cpu = struct {
19951994 pub const cortex_r52 = Cpu{
19961995 .name = "cortex_r52",
19971996 .llvm_name = "cortex-r52",
1998 .features = featureSet(&all_features, &[_]Feature{
1997 .features = featureSet(&[_]Feature{
19991998 .armv8_r,
20001999 .fpao,
20012000 .r52,
......@@ -2006,7 +2005,7 @@ pub const cpu = struct {
20062005 pub const cortex_r7 = Cpu{
20072006 .name = "cortex_r7",
20082007 .llvm_name = "cortex-r7",
2009 .features = featureSet(&all_features, &[_]Feature{
2008 .features = featureSet(&[_]Feature{
20102009 .armv7_r,
20112010 .avoid_partial_cpsr,
20122011 .fp16,
......@@ -2022,7 +2021,7 @@ pub const cpu = struct {
20222021 pub const cortex_r8 = Cpu{
20232022 .name = "cortex_r8",
20242023 .llvm_name = "cortex-r8",
2025 .features = featureSet(&all_features, &[_]Feature{
2024 .features = featureSet(&[_]Feature{
20262025 .armv7_r,
20272026 .avoid_partial_cpsr,
20282027 .fp16,
......@@ -2037,7 +2036,7 @@ pub const cpu = struct {
20372036 pub const cyclone = Cpu{
20382037 .name = "cyclone",
20392038 .llvm_name = "cyclone",
2040 .features = featureSet(&all_features, &[_]Feature{
2039 .features = featureSet(&[_]Feature{
20412040 .armv8_a,
20422041 .avoid_movs_shop,
20432042 .avoid_partial_cpsr,
......@@ -2058,14 +2057,14 @@ pub const cpu = struct {
20582057 pub const ep9312 = Cpu{
20592058 .name = "ep9312",
20602059 .llvm_name = "ep9312",
2061 .features = featureSet(&all_features, &[_]Feature{
2060 .features = featureSet(&[_]Feature{
20622061 .armv4t,
20632062 }),
20642063 };
20652064 pub const exynos_m1 = Cpu{
20662065 .name = "exynos_m1",
20672066 .llvm_name = "exynos-m1",
2068 .features = featureSet(&all_features, &[_]Feature{
2067 .features = featureSet(&[_]Feature{
20692068 .armv8_a,
20702069 .exynos,
20712070 }),
......@@ -2073,7 +2072,7 @@ pub const cpu = struct {
20732072 pub const exynos_m2 = Cpu{
20742073 .name = "exynos_m2",
20752074 .llvm_name = "exynos-m2",
2076 .features = featureSet(&all_features, &[_]Feature{
2075 .features = featureSet(&[_]Feature{
20772076 .armv8_a,
20782077 .exynos,
20792078 }),
......@@ -2081,7 +2080,7 @@ pub const cpu = struct {
20812080 pub const exynos_m3 = Cpu{
20822081 .name = "exynos_m3",
20832082 .llvm_name = "exynos-m3",
2084 .features = featureSet(&all_features, &[_]Feature{
2083 .features = featureSet(&[_]Feature{
20852084 .armv8_a,
20862085 .exynos,
20872086 }),
......@@ -2089,7 +2088,7 @@ pub const cpu = struct {
20892088 pub const exynos_m4 = Cpu{
20902089 .name = "exynos_m4",
20912090 .llvm_name = "exynos-m4",
2092 .features = featureSet(&all_features, &[_]Feature{
2091 .features = featureSet(&[_]Feature{
20932092 .armv8_2_a,
20942093 .dotprod,
20952094 .exynos,
......@@ -2099,7 +2098,7 @@ pub const cpu = struct {
20992098 pub const exynos_m5 = Cpu{
21002099 .name = "exynos_m5",
21012100 .llvm_name = "exynos-m5",
2102 .features = featureSet(&all_features, &[_]Feature{
2101 .features = featureSet(&[_]Feature{
21032102 .armv8_2_a,
21042103 .dotprod,
21052104 .exynos,
......@@ -2109,19 +2108,19 @@ pub const cpu = struct {
21092108 pub const generic = Cpu{
21102109 .name = "generic",
21112110 .llvm_name = "generic",
2112 .features = featureSet(&all_features, &[_]Feature{}),
2111 .features = featureSet(&[_]Feature{}),
21132112 };
21142113 pub const iwmmxt = Cpu{
21152114 .name = "iwmmxt",
21162115 .llvm_name = "iwmmxt",
2117 .features = featureSet(&all_features, &[_]Feature{
2116 .features = featureSet(&[_]Feature{
21182117 .armv5te,
21192118 }),
21202119 };
21212120 pub const krait = Cpu{
21222121 .name = "krait",
21232122 .llvm_name = "krait",
2124 .features = featureSet(&all_features, &[_]Feature{
2123 .features = featureSet(&[_]Feature{
21252124 .armv7_a,
21262125 .avoid_partial_cpsr,
21272126 .fp16,
......@@ -2138,7 +2137,7 @@ pub const cpu = struct {
21382137 pub const kryo = Cpu{
21392138 .name = "kryo",
21402139 .llvm_name = "kryo",
2141 .features = featureSet(&all_features, &[_]Feature{
2140 .features = featureSet(&[_]Feature{
21422141 .armv8_a,
21432142 .crc,
21442143 .crypto,
......@@ -2150,7 +2149,7 @@ pub const cpu = struct {
21502149 pub const mpcore = Cpu{
21512150 .name = "mpcore",
21522151 .llvm_name = "mpcore",
2153 .features = featureSet(&all_features, &[_]Feature{
2152 .features = featureSet(&[_]Feature{
21542153 .armv6k,
21552154 .slowfpvmlx,
21562155 .vfp2,
......@@ -2159,21 +2158,21 @@ pub const cpu = struct {
21592158 pub const mpcorenovfp = Cpu{
21602159 .name = "mpcorenovfp",
21612160 .llvm_name = "mpcorenovfp",
2162 .features = featureSet(&all_features, &[_]Feature{
2161 .features = featureSet(&[_]Feature{
21632162 .armv6k,
21642163 }),
21652164 };
21662165 pub const sc000 = Cpu{
21672166 .name = "sc000",
21682167 .llvm_name = "sc000",
2169 .features = featureSet(&all_features, &[_]Feature{
2168 .features = featureSet(&[_]Feature{
21702169 .armv6_m,
21712170 }),
21722171 };
21732172 pub const sc300 = Cpu{
21742173 .name = "sc300",
21752174 .llvm_name = "sc300",
2176 .features = featureSet(&all_features, &[_]Feature{
2175 .features = featureSet(&[_]Feature{
21772176 .armv7_m,
21782177 .m3,
21792178 .no_branch_predictor,
......@@ -2184,35 +2183,35 @@ pub const cpu = struct {
21842183 pub const strongarm = Cpu{
21852184 .name = "strongarm",
21862185 .llvm_name = "strongarm",
2187 .features = featureSet(&all_features, &[_]Feature{
2186 .features = featureSet(&[_]Feature{
21882187 .armv4,
21892188 }),
21902189 };
21912190 pub const strongarm110 = Cpu{
21922191 .name = "strongarm110",
21932192 .llvm_name = "strongarm110",
2194 .features = featureSet(&all_features, &[_]Feature{
2193 .features = featureSet(&[_]Feature{
21952194 .armv4,
21962195 }),
21972196 };
21982197 pub const strongarm1100 = Cpu{
21992198 .name = "strongarm1100",
22002199 .llvm_name = "strongarm1100",
2201 .features = featureSet(&all_features, &[_]Feature{
2200 .features = featureSet(&[_]Feature{
22022201 .armv4,
22032202 }),
22042203 };
22052204 pub const strongarm1110 = Cpu{
22062205 .name = "strongarm1110",
22072206 .llvm_name = "strongarm1110",
2208 .features = featureSet(&all_features, &[_]Feature{
2207 .features = featureSet(&[_]Feature{
22092208 .armv4,
22102209 }),
22112210 };
22122211 pub const swift = Cpu{
22132212 .name = "swift",
22142213 .llvm_name = "swift",
2215 .features = featureSet(&all_features, &[_]Feature{
2214 .features = featureSet(&[_]Feature{
22162215 .armv7_a,
22172216 .avoid_movs_shop,
22182217 .avoid_partial_cpsr,
......@@ -2239,7 +2238,7 @@ pub const cpu = struct {
22392238 pub const xscale = Cpu{
22402239 .name = "xscale",
22412240 .llvm_name = "xscale",
2242 .features = featureSet(&all_features, &[_]Feature{
2241 .features = featureSet(&[_]Feature{
22432242 .armv5te,
22442243 }),
22452244 };
lib/std/target/avr.zig+291-292
......@@ -46,17 +46,17 @@ pub const all_features = blk: {
4646 result[@enumToInt(Feature.addsubiw)] = .{
4747 .llvm_name = "addsubiw",
4848 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
49 .dependencies = sparseFeatureSet(&[_]Feature{}),
49 .dependencies = featureSet(&[_]Feature{}),
5050 };
5151 result[@enumToInt(Feature.avr0)] = .{
5252 .llvm_name = "avr0",
5353 .description = "The device is a part of the avr0 family",
54 .dependencies = sparseFeatureSet(&[_]Feature{}),
54 .dependencies = featureSet(&[_]Feature{}),
5555 };
5656 result[@enumToInt(Feature.avr1)] = .{
5757 .llvm_name = "avr1",
5858 .description = "The device is a part of the avr1 family",
59 .dependencies = sparseFeatureSet(&[_]Feature{
59 .dependencies = featureSet(&[_]Feature{
6060 .avr0,
6161 .lpm,
6262 }),
......@@ -64,7 +64,7 @@ pub const all_features = blk: {
6464 result[@enumToInt(Feature.avr2)] = .{
6565 .llvm_name = "avr2",
6666 .description = "The device is a part of the avr2 family",
67 .dependencies = sparseFeatureSet(&[_]Feature{
67 .dependencies = featureSet(&[_]Feature{
6868 .addsubiw,
6969 .avr1,
7070 .ijmpcall,
......@@ -74,7 +74,7 @@ pub const all_features = blk: {
7474 result[@enumToInt(Feature.avr25)] = .{
7575 .llvm_name = "avr25",
7676 .description = "The device is a part of the avr25 family",
77 .dependencies = sparseFeatureSet(&[_]Feature{
77 .dependencies = featureSet(&[_]Feature{
7878 .avr2,
7979 .@"break",
8080 .lpmx,
......@@ -85,7 +85,7 @@ pub const all_features = blk: {
8585 result[@enumToInt(Feature.avr3)] = .{
8686 .llvm_name = "avr3",
8787 .description = "The device is a part of the avr3 family",
88 .dependencies = sparseFeatureSet(&[_]Feature{
88 .dependencies = featureSet(&[_]Feature{
8989 .avr2,
9090 .jmpcall,
9191 }),
......@@ -93,7 +93,7 @@ pub const all_features = blk: {
9393 result[@enumToInt(Feature.avr31)] = .{
9494 .llvm_name = "avr31",
9595 .description = "The device is a part of the avr31 family",
96 .dependencies = sparseFeatureSet(&[_]Feature{
96 .dependencies = featureSet(&[_]Feature{
9797 .avr3,
9898 .elpm,
9999 }),
......@@ -101,7 +101,7 @@ pub const all_features = blk: {
101101 result[@enumToInt(Feature.avr35)] = .{
102102 .llvm_name = "avr35",
103103 .description = "The device is a part of the avr35 family",
104 .dependencies = sparseFeatureSet(&[_]Feature{
104 .dependencies = featureSet(&[_]Feature{
105105 .avr3,
106106 .@"break",
107107 .lpmx,
......@@ -112,7 +112,7 @@ pub const all_features = blk: {
112112 result[@enumToInt(Feature.avr4)] = .{
113113 .llvm_name = "avr4",
114114 .description = "The device is a part of the avr4 family",
115 .dependencies = sparseFeatureSet(&[_]Feature{
115 .dependencies = featureSet(&[_]Feature{
116116 .avr2,
117117 .@"break",
118118 .lpmx,
......@@ -124,7 +124,7 @@ pub const all_features = blk: {
124124 result[@enumToInt(Feature.avr5)] = .{
125125 .llvm_name = "avr5",
126126 .description = "The device is a part of the avr5 family",
127 .dependencies = sparseFeatureSet(&[_]Feature{
127 .dependencies = featureSet(&[_]Feature{
128128 .avr3,
129129 .@"break",
130130 .lpmx,
......@@ -136,7 +136,7 @@ pub const all_features = blk: {
136136 result[@enumToInt(Feature.avr51)] = .{
137137 .llvm_name = "avr51",
138138 .description = "The device is a part of the avr51 family",
139 .dependencies = sparseFeatureSet(&[_]Feature{
139 .dependencies = featureSet(&[_]Feature{
140140 .avr5,
141141 .elpm,
142142 .elpmx,
......@@ -145,14 +145,14 @@ pub const all_features = blk: {
145145 result[@enumToInt(Feature.avr6)] = .{
146146 .llvm_name = "avr6",
147147 .description = "The device is a part of the avr6 family",
148 .dependencies = sparseFeatureSet(&[_]Feature{
148 .dependencies = featureSet(&[_]Feature{
149149 .avr51,
150150 }),
151151 };
152152 result[@enumToInt(Feature.avrtiny)] = .{
153153 .llvm_name = "avrtiny",
154154 .description = "The device is a part of the avrtiny family",
155 .dependencies = sparseFeatureSet(&[_]Feature{
155 .dependencies = featureSet(&[_]Feature{
156156 .avr0,
157157 .@"break",
158158 .sram,
......@@ -162,72 +162,72 @@ pub const all_features = blk: {
162162 result[@enumToInt(Feature.@"break")] = .{
163163 .llvm_name = "break",
164164 .description = "The device supports the `BREAK` debugging instruction",
165 .dependencies = sparseFeatureSet(&[_]Feature{}),
165 .dependencies = featureSet(&[_]Feature{}),
166166 };
167167 result[@enumToInt(Feature.des)] = .{
168168 .llvm_name = "des",
169169 .description = "The device supports the `DES k` encryption instruction",
170 .dependencies = sparseFeatureSet(&[_]Feature{}),
170 .dependencies = featureSet(&[_]Feature{}),
171171 };
172172 result[@enumToInt(Feature.eijmpcall)] = .{
173173 .llvm_name = "eijmpcall",
174174 .description = "The device supports the `EIJMP`/`EICALL` instructions",
175 .dependencies = sparseFeatureSet(&[_]Feature{}),
175 .dependencies = featureSet(&[_]Feature{}),
176176 };
177177 result[@enumToInt(Feature.elpm)] = .{
178178 .llvm_name = "elpm",
179179 .description = "The device supports the ELPM instruction",
180 .dependencies = sparseFeatureSet(&[_]Feature{}),
180 .dependencies = featureSet(&[_]Feature{}),
181181 };
182182 result[@enumToInt(Feature.elpmx)] = .{
183183 .llvm_name = "elpmx",
184184 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
185 .dependencies = sparseFeatureSet(&[_]Feature{}),
185 .dependencies = featureSet(&[_]Feature{}),
186186 };
187187 result[@enumToInt(Feature.ijmpcall)] = .{
188188 .llvm_name = "ijmpcall",
189189 .description = "The device supports `IJMP`/`ICALL`instructions",
190 .dependencies = sparseFeatureSet(&[_]Feature{}),
190 .dependencies = featureSet(&[_]Feature{}),
191191 };
192192 result[@enumToInt(Feature.jmpcall)] = .{
193193 .llvm_name = "jmpcall",
194194 .description = "The device supports the `JMP` and `CALL` instructions",
195 .dependencies = sparseFeatureSet(&[_]Feature{}),
195 .dependencies = featureSet(&[_]Feature{}),
196196 };
197197 result[@enumToInt(Feature.lpm)] = .{
198198 .llvm_name = "lpm",
199199 .description = "The device supports the `LPM` instruction",
200 .dependencies = sparseFeatureSet(&[_]Feature{}),
200 .dependencies = featureSet(&[_]Feature{}),
201201 };
202202 result[@enumToInt(Feature.lpmx)] = .{
203203 .llvm_name = "lpmx",
204204 .description = "The device supports the `LPM Rd, Z[+]` instruction",
205 .dependencies = sparseFeatureSet(&[_]Feature{}),
205 .dependencies = featureSet(&[_]Feature{}),
206206 };
207207 result[@enumToInt(Feature.movw)] = .{
208208 .llvm_name = "movw",
209209 .description = "The device supports the 16-bit MOVW instruction",
210 .dependencies = sparseFeatureSet(&[_]Feature{}),
210 .dependencies = featureSet(&[_]Feature{}),
211211 };
212212 result[@enumToInt(Feature.mul)] = .{
213213 .llvm_name = "mul",
214214 .description = "The device supports the multiplication instructions",
215 .dependencies = sparseFeatureSet(&[_]Feature{}),
215 .dependencies = featureSet(&[_]Feature{}),
216216 };
217217 result[@enumToInt(Feature.rmw)] = .{
218218 .llvm_name = "rmw",
219219 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
220 .dependencies = sparseFeatureSet(&[_]Feature{}),
220 .dependencies = featureSet(&[_]Feature{}),
221221 };
222222 result[@enumToInt(Feature.smallstack)] = .{
223223 .llvm_name = "smallstack",
224224 .description = "The device has an 8-bit stack pointer",
225 .dependencies = sparseFeatureSet(&[_]Feature{}),
225 .dependencies = featureSet(&[_]Feature{}),
226226 };
227227 result[@enumToInt(Feature.special)] = .{
228228 .llvm_name = "special",
229229 .description = "Enable use of the entire instruction set - used for debugging",
230 .dependencies = sparseFeatureSet(&[_]Feature{
230 .dependencies = featureSet(&[_]Feature{
231231 .addsubiw,
232232 .@"break",
233233 .des,
......@@ -249,27 +249,27 @@ pub const all_features = blk: {
249249 result[@enumToInt(Feature.spm)] = .{
250250 .llvm_name = "spm",
251251 .description = "The device supports the `SPM` instruction",
252 .dependencies = sparseFeatureSet(&[_]Feature{}),
252 .dependencies = featureSet(&[_]Feature{}),
253253 };
254254 result[@enumToInt(Feature.spmx)] = .{
255255 .llvm_name = "spmx",
256256 .description = "The device supports the `SPM Z+` instruction",
257 .dependencies = sparseFeatureSet(&[_]Feature{}),
257 .dependencies = featureSet(&[_]Feature{}),
258258 };
259259 result[@enumToInt(Feature.sram)] = .{
260260 .llvm_name = "sram",
261261 .description = "The device has random access memory",
262 .dependencies = sparseFeatureSet(&[_]Feature{}),
262 .dependencies = featureSet(&[_]Feature{}),
263263 };
264264 result[@enumToInt(Feature.tinyencoding)] = .{
265265 .llvm_name = "tinyencoding",
266266 .description = "The device has Tiny core specific instruction encodings",
267 .dependencies = sparseFeatureSet(&[_]Feature{}),
267 .dependencies = featureSet(&[_]Feature{}),
268268 };
269269 result[@enumToInt(Feature.xmega)] = .{
270270 .llvm_name = "xmega",
271271 .description = "The device is a part of the xmega family",
272 .dependencies = sparseFeatureSet(&[_]Feature{
272 .dependencies = featureSet(&[_]Feature{
273273 .avr51,
274274 .des,
275275 .eijmpcall,
......@@ -279,7 +279,7 @@ pub const all_features = blk: {
279279 result[@enumToInt(Feature.xmegau)] = .{
280280 .llvm_name = "xmegau",
281281 .description = "The device is a part of the xmegau family",
282 .dependencies = sparseFeatureSet(&[_]Feature{
282 .dependencies = featureSet(&[_]Feature{
283283 .rmw,
284284 .xmega,
285285 }),
......@@ -288,7 +288,6 @@ pub const all_features = blk: {
288288 for (result) |*elem, i| {
289289 elem.index = i;
290290 elem.name = ti.Enum.fields[i].name;
291 elem.dependencies.initAsDependencies(i, &result);
292291 }
293292 break :blk result;
294293};
......@@ -297,28 +296,28 @@ pub const cpu = struct {
297296 pub const at43usb320 = Cpu{
298297 .name = "at43usb320",
299298 .llvm_name = "at43usb320",
300 .features = featureSet(&all_features, &[_]Feature{
299 .features = featureSet(&[_]Feature{
301300 .avr31,
302301 }),
303302 };
304303 pub const at43usb355 = Cpu{
305304 .name = "at43usb355",
306305 .llvm_name = "at43usb355",
307 .features = featureSet(&all_features, &[_]Feature{
306 .features = featureSet(&[_]Feature{
308307 .avr3,
309308 }),
310309 };
311310 pub const at76c711 = Cpu{
312311 .name = "at76c711",
313312 .llvm_name = "at76c711",
314 .features = featureSet(&all_features, &[_]Feature{
313 .features = featureSet(&[_]Feature{
315314 .avr3,
316315 }),
317316 };
318317 pub const at86rf401 = Cpu{
319318 .name = "at86rf401",
320319 .llvm_name = "at86rf401",
321 .features = featureSet(&all_features, &[_]Feature{
320 .features = featureSet(&[_]Feature{
322321 .avr2,
323322 .lpmx,
324323 .movw,
......@@ -327,217 +326,217 @@ pub const cpu = struct {
327326 pub const at90c8534 = Cpu{
328327 .name = "at90c8534",
329328 .llvm_name = "at90c8534",
330 .features = featureSet(&all_features, &[_]Feature{
329 .features = featureSet(&[_]Feature{
331330 .avr2,
332331 }),
333332 };
334333 pub const at90can128 = Cpu{
335334 .name = "at90can128",
336335 .llvm_name = "at90can128",
337 .features = featureSet(&all_features, &[_]Feature{
336 .features = featureSet(&[_]Feature{
338337 .avr51,
339338 }),
340339 };
341340 pub const at90can32 = Cpu{
342341 .name = "at90can32",
343342 .llvm_name = "at90can32",
344 .features = featureSet(&all_features, &[_]Feature{
343 .features = featureSet(&[_]Feature{
345344 .avr5,
346345 }),
347346 };
348347 pub const at90can64 = Cpu{
349348 .name = "at90can64",
350349 .llvm_name = "at90can64",
351 .features = featureSet(&all_features, &[_]Feature{
350 .features = featureSet(&[_]Feature{
352351 .avr5,
353352 }),
354353 };
355354 pub const at90pwm1 = Cpu{
356355 .name = "at90pwm1",
357356 .llvm_name = "at90pwm1",
358 .features = featureSet(&all_features, &[_]Feature{
357 .features = featureSet(&[_]Feature{
359358 .avr4,
360359 }),
361360 };
362361 pub const at90pwm161 = Cpu{
363362 .name = "at90pwm161",
364363 .llvm_name = "at90pwm161",
365 .features = featureSet(&all_features, &[_]Feature{
364 .features = featureSet(&[_]Feature{
366365 .avr5,
367366 }),
368367 };
369368 pub const at90pwm2 = Cpu{
370369 .name = "at90pwm2",
371370 .llvm_name = "at90pwm2",
372 .features = featureSet(&all_features, &[_]Feature{
371 .features = featureSet(&[_]Feature{
373372 .avr4,
374373 }),
375374 };
376375 pub const at90pwm216 = Cpu{
377376 .name = "at90pwm216",
378377 .llvm_name = "at90pwm216",
379 .features = featureSet(&all_features, &[_]Feature{
378 .features = featureSet(&[_]Feature{
380379 .avr5,
381380 }),
382381 };
383382 pub const at90pwm2b = Cpu{
384383 .name = "at90pwm2b",
385384 .llvm_name = "at90pwm2b",
386 .features = featureSet(&all_features, &[_]Feature{
385 .features = featureSet(&[_]Feature{
387386 .avr4,
388387 }),
389388 };
390389 pub const at90pwm3 = Cpu{
391390 .name = "at90pwm3",
392391 .llvm_name = "at90pwm3",
393 .features = featureSet(&all_features, &[_]Feature{
392 .features = featureSet(&[_]Feature{
394393 .avr4,
395394 }),
396395 };
397396 pub const at90pwm316 = Cpu{
398397 .name = "at90pwm316",
399398 .llvm_name = "at90pwm316",
400 .features = featureSet(&all_features, &[_]Feature{
399 .features = featureSet(&[_]Feature{
401400 .avr5,
402401 }),
403402 };
404403 pub const at90pwm3b = Cpu{
405404 .name = "at90pwm3b",
406405 .llvm_name = "at90pwm3b",
407 .features = featureSet(&all_features, &[_]Feature{
406 .features = featureSet(&[_]Feature{
408407 .avr4,
409408 }),
410409 };
411410 pub const at90pwm81 = Cpu{
412411 .name = "at90pwm81",
413412 .llvm_name = "at90pwm81",
414 .features = featureSet(&all_features, &[_]Feature{
413 .features = featureSet(&[_]Feature{
415414 .avr4,
416415 }),
417416 };
418417 pub const at90s1200 = Cpu{
419418 .name = "at90s1200",
420419 .llvm_name = "at90s1200",
421 .features = featureSet(&all_features, &[_]Feature{
420 .features = featureSet(&[_]Feature{
422421 .avr0,
423422 }),
424423 };
425424 pub const at90s2313 = Cpu{
426425 .name = "at90s2313",
427426 .llvm_name = "at90s2313",
428 .features = featureSet(&all_features, &[_]Feature{
427 .features = featureSet(&[_]Feature{
429428 .avr2,
430429 }),
431430 };
432431 pub const at90s2323 = Cpu{
433432 .name = "at90s2323",
434433 .llvm_name = "at90s2323",
435 .features = featureSet(&all_features, &[_]Feature{
434 .features = featureSet(&[_]Feature{
436435 .avr2,
437436 }),
438437 };
439438 pub const at90s2333 = Cpu{
440439 .name = "at90s2333",
441440 .llvm_name = "at90s2333",
442 .features = featureSet(&all_features, &[_]Feature{
441 .features = featureSet(&[_]Feature{
443442 .avr2,
444443 }),
445444 };
446445 pub const at90s2343 = Cpu{
447446 .name = "at90s2343",
448447 .llvm_name = "at90s2343",
449 .features = featureSet(&all_features, &[_]Feature{
448 .features = featureSet(&[_]Feature{
450449 .avr2,
451450 }),
452451 };
453452 pub const at90s4414 = Cpu{
454453 .name = "at90s4414",
455454 .llvm_name = "at90s4414",
456 .features = featureSet(&all_features, &[_]Feature{
455 .features = featureSet(&[_]Feature{
457456 .avr2,
458457 }),
459458 };
460459 pub const at90s4433 = Cpu{
461460 .name = "at90s4433",
462461 .llvm_name = "at90s4433",
463 .features = featureSet(&all_features, &[_]Feature{
462 .features = featureSet(&[_]Feature{
464463 .avr2,
465464 }),
466465 };
467466 pub const at90s4434 = Cpu{
468467 .name = "at90s4434",
469468 .llvm_name = "at90s4434",
470 .features = featureSet(&all_features, &[_]Feature{
469 .features = featureSet(&[_]Feature{
471470 .avr2,
472471 }),
473472 };
474473 pub const at90s8515 = Cpu{
475474 .name = "at90s8515",
476475 .llvm_name = "at90s8515",
477 .features = featureSet(&all_features, &[_]Feature{
476 .features = featureSet(&[_]Feature{
478477 .avr2,
479478 }),
480479 };
481480 pub const at90s8535 = Cpu{
482481 .name = "at90s8535",
483482 .llvm_name = "at90s8535",
484 .features = featureSet(&all_features, &[_]Feature{
483 .features = featureSet(&[_]Feature{
485484 .avr2,
486485 }),
487486 };
488487 pub const at90scr100 = Cpu{
489488 .name = "at90scr100",
490489 .llvm_name = "at90scr100",
491 .features = featureSet(&all_features, &[_]Feature{
490 .features = featureSet(&[_]Feature{
492491 .avr5,
493492 }),
494493 };
495494 pub const at90usb1286 = Cpu{
496495 .name = "at90usb1286",
497496 .llvm_name = "at90usb1286",
498 .features = featureSet(&all_features, &[_]Feature{
497 .features = featureSet(&[_]Feature{
499498 .avr51,
500499 }),
501500 };
502501 pub const at90usb1287 = Cpu{
503502 .name = "at90usb1287",
504503 .llvm_name = "at90usb1287",
505 .features = featureSet(&all_features, &[_]Feature{
504 .features = featureSet(&[_]Feature{
506505 .avr51,
507506 }),
508507 };
509508 pub const at90usb162 = Cpu{
510509 .name = "at90usb162",
511510 .llvm_name = "at90usb162",
512 .features = featureSet(&all_features, &[_]Feature{
511 .features = featureSet(&[_]Feature{
513512 .avr35,
514513 }),
515514 };
516515 pub const at90usb646 = Cpu{
517516 .name = "at90usb646",
518517 .llvm_name = "at90usb646",
519 .features = featureSet(&all_features, &[_]Feature{
518 .features = featureSet(&[_]Feature{
520519 .avr5,
521520 }),
522521 };
523522 pub const at90usb647 = Cpu{
524523 .name = "at90usb647",
525524 .llvm_name = "at90usb647",
526 .features = featureSet(&all_features, &[_]Feature{
525 .features = featureSet(&[_]Feature{
527526 .avr5,
528527 }),
529528 };
530529 pub const at90usb82 = Cpu{
531530 .name = "at90usb82",
532531 .llvm_name = "at90usb82",
533 .features = featureSet(&all_features, &[_]Feature{
532 .features = featureSet(&[_]Feature{
534533 .avr35,
535534 }),
536535 };
537536 pub const at94k = Cpu{
538537 .name = "at94k",
539538 .llvm_name = "at94k",
540 .features = featureSet(&all_features, &[_]Feature{
539 .features = featureSet(&[_]Feature{
541540 .avr3,
542541 .lpmx,
543542 .movw,
......@@ -547,133 +546,133 @@ pub const cpu = struct {
547546 pub const ata5272 = Cpu{
548547 .name = "ata5272",
549548 .llvm_name = "ata5272",
550 .features = featureSet(&all_features, &[_]Feature{
549 .features = featureSet(&[_]Feature{
551550 .avr25,
552551 }),
553552 };
554553 pub const ata5505 = Cpu{
555554 .name = "ata5505",
556555 .llvm_name = "ata5505",
557 .features = featureSet(&all_features, &[_]Feature{
556 .features = featureSet(&[_]Feature{
558557 .avr35,
559558 }),
560559 };
561560 pub const ata5790 = Cpu{
562561 .name = "ata5790",
563562 .llvm_name = "ata5790",
564 .features = featureSet(&all_features, &[_]Feature{
563 .features = featureSet(&[_]Feature{
565564 .avr5,
566565 }),
567566 };
568567 pub const ata5795 = Cpu{
569568 .name = "ata5795",
570569 .llvm_name = "ata5795",
571 .features = featureSet(&all_features, &[_]Feature{
570 .features = featureSet(&[_]Feature{
572571 .avr5,
573572 }),
574573 };
575574 pub const ata6285 = Cpu{
576575 .name = "ata6285",
577576 .llvm_name = "ata6285",
578 .features = featureSet(&all_features, &[_]Feature{
577 .features = featureSet(&[_]Feature{
579578 .avr4,
580579 }),
581580 };
582581 pub const ata6286 = Cpu{
583582 .name = "ata6286",
584583 .llvm_name = "ata6286",
585 .features = featureSet(&all_features, &[_]Feature{
584 .features = featureSet(&[_]Feature{
586585 .avr4,
587586 }),
588587 };
589588 pub const ata6289 = Cpu{
590589 .name = "ata6289",
591590 .llvm_name = "ata6289",
592 .features = featureSet(&all_features, &[_]Feature{
591 .features = featureSet(&[_]Feature{
593592 .avr4,
594593 }),
595594 };
596595 pub const atmega103 = Cpu{
597596 .name = "atmega103",
598597 .llvm_name = "atmega103",
599 .features = featureSet(&all_features, &[_]Feature{
598 .features = featureSet(&[_]Feature{
600599 .avr31,
601600 }),
602601 };
603602 pub const atmega128 = Cpu{
604603 .name = "atmega128",
605604 .llvm_name = "atmega128",
606 .features = featureSet(&all_features, &[_]Feature{
605 .features = featureSet(&[_]Feature{
607606 .avr51,
608607 }),
609608 };
610609 pub const atmega1280 = Cpu{
611610 .name = "atmega1280",
612611 .llvm_name = "atmega1280",
613 .features = featureSet(&all_features, &[_]Feature{
612 .features = featureSet(&[_]Feature{
614613 .avr51,
615614 }),
616615 };
617616 pub const atmega1281 = Cpu{
618617 .name = "atmega1281",
619618 .llvm_name = "atmega1281",
620 .features = featureSet(&all_features, &[_]Feature{
619 .features = featureSet(&[_]Feature{
621620 .avr51,
622621 }),
623622 };
624623 pub const atmega1284 = Cpu{
625624 .name = "atmega1284",
626625 .llvm_name = "atmega1284",
627 .features = featureSet(&all_features, &[_]Feature{
626 .features = featureSet(&[_]Feature{
628627 .avr51,
629628 }),
630629 };
631630 pub const atmega1284p = Cpu{
632631 .name = "atmega1284p",
633632 .llvm_name = "atmega1284p",
634 .features = featureSet(&all_features, &[_]Feature{
633 .features = featureSet(&[_]Feature{
635634 .avr51,
636635 }),
637636 };
638637 pub const atmega1284rfr2 = Cpu{
639638 .name = "atmega1284rfr2",
640639 .llvm_name = "atmega1284rfr2",
641 .features = featureSet(&all_features, &[_]Feature{
640 .features = featureSet(&[_]Feature{
642641 .avr51,
643642 }),
644643 };
645644 pub const atmega128a = Cpu{
646645 .name = "atmega128a",
647646 .llvm_name = "atmega128a",
648 .features = featureSet(&all_features, &[_]Feature{
647 .features = featureSet(&[_]Feature{
649648 .avr51,
650649 }),
651650 };
652651 pub const atmega128rfa1 = Cpu{
653652 .name = "atmega128rfa1",
654653 .llvm_name = "atmega128rfa1",
655 .features = featureSet(&all_features, &[_]Feature{
654 .features = featureSet(&[_]Feature{
656655 .avr51,
657656 }),
658657 };
659658 pub const atmega128rfr2 = Cpu{
660659 .name = "atmega128rfr2",
661660 .llvm_name = "atmega128rfr2",
662 .features = featureSet(&all_features, &[_]Feature{
661 .features = featureSet(&[_]Feature{
663662 .avr51,
664663 }),
665664 };
666665 pub const atmega16 = Cpu{
667666 .name = "atmega16",
668667 .llvm_name = "atmega16",
669 .features = featureSet(&all_features, &[_]Feature{
668 .features = featureSet(&[_]Feature{
670669 .avr5,
671670 }),
672671 };
673672 pub const atmega161 = Cpu{
674673 .name = "atmega161",
675674 .llvm_name = "atmega161",
676 .features = featureSet(&all_features, &[_]Feature{
675 .features = featureSet(&[_]Feature{
677676 .avr3,
678677 .lpmx,
679678 .movw,
......@@ -684,14 +683,14 @@ pub const cpu = struct {
684683 pub const atmega162 = Cpu{
685684 .name = "atmega162",
686685 .llvm_name = "atmega162",
687 .features = featureSet(&all_features, &[_]Feature{
686 .features = featureSet(&[_]Feature{
688687 .avr5,
689688 }),
690689 };
691690 pub const atmega163 = Cpu{
692691 .name = "atmega163",
693692 .llvm_name = "atmega163",
694 .features = featureSet(&all_features, &[_]Feature{
693 .features = featureSet(&[_]Feature{
695694 .avr3,
696695 .lpmx,
697696 .movw,
......@@ -702,623 +701,623 @@ pub const cpu = struct {
702701 pub const atmega164a = Cpu{
703702 .name = "atmega164a",
704703 .llvm_name = "atmega164a",
705 .features = featureSet(&all_features, &[_]Feature{
704 .features = featureSet(&[_]Feature{
706705 .avr5,
707706 }),
708707 };
709708 pub const atmega164p = Cpu{
710709 .name = "atmega164p",
711710 .llvm_name = "atmega164p",
712 .features = featureSet(&all_features, &[_]Feature{
711 .features = featureSet(&[_]Feature{
713712 .avr5,
714713 }),
715714 };
716715 pub const atmega164pa = Cpu{
717716 .name = "atmega164pa",
718717 .llvm_name = "atmega164pa",
719 .features = featureSet(&all_features, &[_]Feature{
718 .features = featureSet(&[_]Feature{
720719 .avr5,
721720 }),
722721 };
723722 pub const atmega165 = Cpu{
724723 .name = "atmega165",
725724 .llvm_name = "atmega165",
726 .features = featureSet(&all_features, &[_]Feature{
725 .features = featureSet(&[_]Feature{
727726 .avr5,
728727 }),
729728 };
730729 pub const atmega165a = Cpu{
731730 .name = "atmega165a",
732731 .llvm_name = "atmega165a",
733 .features = featureSet(&all_features, &[_]Feature{
732 .features = featureSet(&[_]Feature{
734733 .avr5,
735734 }),
736735 };
737736 pub const atmega165p = Cpu{
738737 .name = "atmega165p",
739738 .llvm_name = "atmega165p",
740 .features = featureSet(&all_features, &[_]Feature{
739 .features = featureSet(&[_]Feature{
741740 .avr5,
742741 }),
743742 };
744743 pub const atmega165pa = Cpu{
745744 .name = "atmega165pa",
746745 .llvm_name = "atmega165pa",
747 .features = featureSet(&all_features, &[_]Feature{
746 .features = featureSet(&[_]Feature{
748747 .avr5,
749748 }),
750749 };
751750 pub const atmega168 = Cpu{
752751 .name = "atmega168",
753752 .llvm_name = "atmega168",
754 .features = featureSet(&all_features, &[_]Feature{
753 .features = featureSet(&[_]Feature{
755754 .avr5,
756755 }),
757756 };
758757 pub const atmega168a = Cpu{
759758 .name = "atmega168a",
760759 .llvm_name = "atmega168a",
761 .features = featureSet(&all_features, &[_]Feature{
760 .features = featureSet(&[_]Feature{
762761 .avr5,
763762 }),
764763 };
765764 pub const atmega168p = Cpu{
766765 .name = "atmega168p",
767766 .llvm_name = "atmega168p",
768 .features = featureSet(&all_features, &[_]Feature{
767 .features = featureSet(&[_]Feature{
769768 .avr5,
770769 }),
771770 };
772771 pub const atmega168pa = Cpu{
773772 .name = "atmega168pa",
774773 .llvm_name = "atmega168pa",
775 .features = featureSet(&all_features, &[_]Feature{
774 .features = featureSet(&[_]Feature{
776775 .avr5,
777776 }),
778777 };
779778 pub const atmega169 = Cpu{
780779 .name = "atmega169",
781780 .llvm_name = "atmega169",
782 .features = featureSet(&all_features, &[_]Feature{
781 .features = featureSet(&[_]Feature{
783782 .avr5,
784783 }),
785784 };
786785 pub const atmega169a = Cpu{
787786 .name = "atmega169a",
788787 .llvm_name = "atmega169a",
789 .features = featureSet(&all_features, &[_]Feature{
788 .features = featureSet(&[_]Feature{
790789 .avr5,
791790 }),
792791 };
793792 pub const atmega169p = Cpu{
794793 .name = "atmega169p",
795794 .llvm_name = "atmega169p",
796 .features = featureSet(&all_features, &[_]Feature{
795 .features = featureSet(&[_]Feature{
797796 .avr5,
798797 }),
799798 };
800799 pub const atmega169pa = Cpu{
801800 .name = "atmega169pa",
802801 .llvm_name = "atmega169pa",
803 .features = featureSet(&all_features, &[_]Feature{
802 .features = featureSet(&[_]Feature{
804803 .avr5,
805804 }),
806805 };
807806 pub const atmega16a = Cpu{
808807 .name = "atmega16a",
809808 .llvm_name = "atmega16a",
810 .features = featureSet(&all_features, &[_]Feature{
809 .features = featureSet(&[_]Feature{
811810 .avr5,
812811 }),
813812 };
814813 pub const atmega16hva = Cpu{
815814 .name = "atmega16hva",
816815 .llvm_name = "atmega16hva",
817 .features = featureSet(&all_features, &[_]Feature{
816 .features = featureSet(&[_]Feature{
818817 .avr5,
819818 }),
820819 };
821820 pub const atmega16hva2 = Cpu{
822821 .name = "atmega16hva2",
823822 .llvm_name = "atmega16hva2",
824 .features = featureSet(&all_features, &[_]Feature{
823 .features = featureSet(&[_]Feature{
825824 .avr5,
826825 }),
827826 };
828827 pub const atmega16hvb = Cpu{
829828 .name = "atmega16hvb",
830829 .llvm_name = "atmega16hvb",
831 .features = featureSet(&all_features, &[_]Feature{
830 .features = featureSet(&[_]Feature{
832831 .avr5,
833832 }),
834833 };
835834 pub const atmega16hvbrevb = Cpu{
836835 .name = "atmega16hvbrevb",
837836 .llvm_name = "atmega16hvbrevb",
838 .features = featureSet(&all_features, &[_]Feature{
837 .features = featureSet(&[_]Feature{
839838 .avr5,
840839 }),
841840 };
842841 pub const atmega16m1 = Cpu{
843842 .name = "atmega16m1",
844843 .llvm_name = "atmega16m1",
845 .features = featureSet(&all_features, &[_]Feature{
844 .features = featureSet(&[_]Feature{
846845 .avr5,
847846 }),
848847 };
849848 pub const atmega16u2 = Cpu{
850849 .name = "atmega16u2",
851850 .llvm_name = "atmega16u2",
852 .features = featureSet(&all_features, &[_]Feature{
851 .features = featureSet(&[_]Feature{
853852 .avr35,
854853 }),
855854 };
856855 pub const atmega16u4 = Cpu{
857856 .name = "atmega16u4",
858857 .llvm_name = "atmega16u4",
859 .features = featureSet(&all_features, &[_]Feature{
858 .features = featureSet(&[_]Feature{
860859 .avr5,
861860 }),
862861 };
863862 pub const atmega2560 = Cpu{
864863 .name = "atmega2560",
865864 .llvm_name = "atmega2560",
866 .features = featureSet(&all_features, &[_]Feature{
865 .features = featureSet(&[_]Feature{
867866 .avr6,
868867 }),
869868 };
870869 pub const atmega2561 = Cpu{
871870 .name = "atmega2561",
872871 .llvm_name = "atmega2561",
873 .features = featureSet(&all_features, &[_]Feature{
872 .features = featureSet(&[_]Feature{
874873 .avr6,
875874 }),
876875 };
877876 pub const atmega2564rfr2 = Cpu{
878877 .name = "atmega2564rfr2",
879878 .llvm_name = "atmega2564rfr2",
880 .features = featureSet(&all_features, &[_]Feature{
879 .features = featureSet(&[_]Feature{
881880 .avr6,
882881 }),
883882 };
884883 pub const atmega256rfr2 = Cpu{
885884 .name = "atmega256rfr2",
886885 .llvm_name = "atmega256rfr2",
887 .features = featureSet(&all_features, &[_]Feature{
886 .features = featureSet(&[_]Feature{
888887 .avr6,
889888 }),
890889 };
891890 pub const atmega32 = Cpu{
892891 .name = "atmega32",
893892 .llvm_name = "atmega32",
894 .features = featureSet(&all_features, &[_]Feature{
893 .features = featureSet(&[_]Feature{
895894 .avr5,
896895 }),
897896 };
898897 pub const atmega323 = Cpu{
899898 .name = "atmega323",
900899 .llvm_name = "atmega323",
901 .features = featureSet(&all_features, &[_]Feature{
900 .features = featureSet(&[_]Feature{
902901 .avr5,
903902 }),
904903 };
905904 pub const atmega324a = Cpu{
906905 .name = "atmega324a",
907906 .llvm_name = "atmega324a",
908 .features = featureSet(&all_features, &[_]Feature{
907 .features = featureSet(&[_]Feature{
909908 .avr5,
910909 }),
911910 };
912911 pub const atmega324p = Cpu{
913912 .name = "atmega324p",
914913 .llvm_name = "atmega324p",
915 .features = featureSet(&all_features, &[_]Feature{
914 .features = featureSet(&[_]Feature{
916915 .avr5,
917916 }),
918917 };
919918 pub const atmega324pa = Cpu{
920919 .name = "atmega324pa",
921920 .llvm_name = "atmega324pa",
922 .features = featureSet(&all_features, &[_]Feature{
921 .features = featureSet(&[_]Feature{
923922 .avr5,
924923 }),
925924 };
926925 pub const atmega325 = Cpu{
927926 .name = "atmega325",
928927 .llvm_name = "atmega325",
929 .features = featureSet(&all_features, &[_]Feature{
928 .features = featureSet(&[_]Feature{
930929 .avr5,
931930 }),
932931 };
933932 pub const atmega3250 = Cpu{
934933 .name = "atmega3250",
935934 .llvm_name = "atmega3250",
936 .features = featureSet(&all_features, &[_]Feature{
935 .features = featureSet(&[_]Feature{
937936 .avr5,
938937 }),
939938 };
940939 pub const atmega3250a = Cpu{
941940 .name = "atmega3250a",
942941 .llvm_name = "atmega3250a",
943 .features = featureSet(&all_features, &[_]Feature{
942 .features = featureSet(&[_]Feature{
944943 .avr5,
945944 }),
946945 };
947946 pub const atmega3250p = Cpu{
948947 .name = "atmega3250p",
949948 .llvm_name = "atmega3250p",
950 .features = featureSet(&all_features, &[_]Feature{
949 .features = featureSet(&[_]Feature{
951950 .avr5,
952951 }),
953952 };
954953 pub const atmega3250pa = Cpu{
955954 .name = "atmega3250pa",
956955 .llvm_name = "atmega3250pa",
957 .features = featureSet(&all_features, &[_]Feature{
956 .features = featureSet(&[_]Feature{
958957 .avr5,
959958 }),
960959 };
961960 pub const atmega325a = Cpu{
962961 .name = "atmega325a",
963962 .llvm_name = "atmega325a",
964 .features = featureSet(&all_features, &[_]Feature{
963 .features = featureSet(&[_]Feature{
965964 .avr5,
966965 }),
967966 };
968967 pub const atmega325p = Cpu{
969968 .name = "atmega325p",
970969 .llvm_name = "atmega325p",
971 .features = featureSet(&all_features, &[_]Feature{
970 .features = featureSet(&[_]Feature{
972971 .avr5,
973972 }),
974973 };
975974 pub const atmega325pa = Cpu{
976975 .name = "atmega325pa",
977976 .llvm_name = "atmega325pa",
978 .features = featureSet(&all_features, &[_]Feature{
977 .features = featureSet(&[_]Feature{
979978 .avr5,
980979 }),
981980 };
982981 pub const atmega328 = Cpu{
983982 .name = "atmega328",
984983 .llvm_name = "atmega328",
985 .features = featureSet(&all_features, &[_]Feature{
984 .features = featureSet(&[_]Feature{
986985 .avr5,
987986 }),
988987 };
989988 pub const atmega328p = Cpu{
990989 .name = "atmega328p",
991990 .llvm_name = "atmega328p",
992 .features = featureSet(&all_features, &[_]Feature{
991 .features = featureSet(&[_]Feature{
993992 .avr5,
994993 }),
995994 };
996995 pub const atmega329 = Cpu{
997996 .name = "atmega329",
998997 .llvm_name = "atmega329",
999 .features = featureSet(&all_features, &[_]Feature{
998 .features = featureSet(&[_]Feature{
1000999 .avr5,
10011000 }),
10021001 };
10031002 pub const atmega3290 = Cpu{
10041003 .name = "atmega3290",
10051004 .llvm_name = "atmega3290",
1006 .features = featureSet(&all_features, &[_]Feature{
1005 .features = featureSet(&[_]Feature{
10071006 .avr5,
10081007 }),
10091008 };
10101009 pub const atmega3290a = Cpu{
10111010 .name = "atmega3290a",
10121011 .llvm_name = "atmega3290a",
1013 .features = featureSet(&all_features, &[_]Feature{
1012 .features = featureSet(&[_]Feature{
10141013 .avr5,
10151014 }),
10161015 };
10171016 pub const atmega3290p = Cpu{
10181017 .name = "atmega3290p",
10191018 .llvm_name = "atmega3290p",
1020 .features = featureSet(&all_features, &[_]Feature{
1019 .features = featureSet(&[_]Feature{
10211020 .avr5,
10221021 }),
10231022 };
10241023 pub const atmega3290pa = Cpu{
10251024 .name = "atmega3290pa",
10261025 .llvm_name = "atmega3290pa",
1027 .features = featureSet(&all_features, &[_]Feature{
1026 .features = featureSet(&[_]Feature{
10281027 .avr5,
10291028 }),
10301029 };
10311030 pub const atmega329a = Cpu{
10321031 .name = "atmega329a",
10331032 .llvm_name = "atmega329a",
1034 .features = featureSet(&all_features, &[_]Feature{
1033 .features = featureSet(&[_]Feature{
10351034 .avr5,
10361035 }),
10371036 };
10381037 pub const atmega329p = Cpu{
10391038 .name = "atmega329p",
10401039 .llvm_name = "atmega329p",
1041 .features = featureSet(&all_features, &[_]Feature{
1040 .features = featureSet(&[_]Feature{
10421041 .avr5,
10431042 }),
10441043 };
10451044 pub const atmega329pa = Cpu{
10461045 .name = "atmega329pa",
10471046 .llvm_name = "atmega329pa",
1048 .features = featureSet(&all_features, &[_]Feature{
1047 .features = featureSet(&[_]Feature{
10491048 .avr5,
10501049 }),
10511050 };
10521051 pub const atmega32a = Cpu{
10531052 .name = "atmega32a",
10541053 .llvm_name = "atmega32a",
1055 .features = featureSet(&all_features, &[_]Feature{
1054 .features = featureSet(&[_]Feature{
10561055 .avr5,
10571056 }),
10581057 };
10591058 pub const atmega32c1 = Cpu{
10601059 .name = "atmega32c1",
10611060 .llvm_name = "atmega32c1",
1062 .features = featureSet(&all_features, &[_]Feature{
1061 .features = featureSet(&[_]Feature{
10631062 .avr5,
10641063 }),
10651064 };
10661065 pub const atmega32hvb = Cpu{
10671066 .name = "atmega32hvb",
10681067 .llvm_name = "atmega32hvb",
1069 .features = featureSet(&all_features, &[_]Feature{
1068 .features = featureSet(&[_]Feature{
10701069 .avr5,
10711070 }),
10721071 };
10731072 pub const atmega32hvbrevb = Cpu{
10741073 .name = "atmega32hvbrevb",
10751074 .llvm_name = "atmega32hvbrevb",
1076 .features = featureSet(&all_features, &[_]Feature{
1075 .features = featureSet(&[_]Feature{
10771076 .avr5,
10781077 }),
10791078 };
10801079 pub const atmega32m1 = Cpu{
10811080 .name = "atmega32m1",
10821081 .llvm_name = "atmega32m1",
1083 .features = featureSet(&all_features, &[_]Feature{
1082 .features = featureSet(&[_]Feature{
10841083 .avr5,
10851084 }),
10861085 };
10871086 pub const atmega32u2 = Cpu{
10881087 .name = "atmega32u2",
10891088 .llvm_name = "atmega32u2",
1090 .features = featureSet(&all_features, &[_]Feature{
1089 .features = featureSet(&[_]Feature{
10911090 .avr35,
10921091 }),
10931092 };
10941093 pub const atmega32u4 = Cpu{
10951094 .name = "atmega32u4",
10961095 .llvm_name = "atmega32u4",
1097 .features = featureSet(&all_features, &[_]Feature{
1096 .features = featureSet(&[_]Feature{
10981097 .avr5,
10991098 }),
11001099 };
11011100 pub const atmega32u6 = Cpu{
11021101 .name = "atmega32u6",
11031102 .llvm_name = "atmega32u6",
1104 .features = featureSet(&all_features, &[_]Feature{
1103 .features = featureSet(&[_]Feature{
11051104 .avr5,
11061105 }),
11071106 };
11081107 pub const atmega406 = Cpu{
11091108 .name = "atmega406",
11101109 .llvm_name = "atmega406",
1111 .features = featureSet(&all_features, &[_]Feature{
1110 .features = featureSet(&[_]Feature{
11121111 .avr5,
11131112 }),
11141113 };
11151114 pub const atmega48 = Cpu{
11161115 .name = "atmega48",
11171116 .llvm_name = "atmega48",
1118 .features = featureSet(&all_features, &[_]Feature{
1117 .features = featureSet(&[_]Feature{
11191118 .avr4,
11201119 }),
11211120 };
11221121 pub const atmega48a = Cpu{
11231122 .name = "atmega48a",
11241123 .llvm_name = "atmega48a",
1125 .features = featureSet(&all_features, &[_]Feature{
1124 .features = featureSet(&[_]Feature{
11261125 .avr4,
11271126 }),
11281127 };
11291128 pub const atmega48p = Cpu{
11301129 .name = "atmega48p",
11311130 .llvm_name = "atmega48p",
1132 .features = featureSet(&all_features, &[_]Feature{
1131 .features = featureSet(&[_]Feature{
11331132 .avr4,
11341133 }),
11351134 };
11361135 pub const atmega48pa = Cpu{
11371136 .name = "atmega48pa",
11381137 .llvm_name = "atmega48pa",
1139 .features = featureSet(&all_features, &[_]Feature{
1138 .features = featureSet(&[_]Feature{
11401139 .avr4,
11411140 }),
11421141 };
11431142 pub const atmega64 = Cpu{
11441143 .name = "atmega64",
11451144 .llvm_name = "atmega64",
1146 .features = featureSet(&all_features, &[_]Feature{
1145 .features = featureSet(&[_]Feature{
11471146 .avr5,
11481147 }),
11491148 };
11501149 pub const atmega640 = Cpu{
11511150 .name = "atmega640",
11521151 .llvm_name = "atmega640",
1153 .features = featureSet(&all_features, &[_]Feature{
1152 .features = featureSet(&[_]Feature{
11541153 .avr5,
11551154 }),
11561155 };
11571156 pub const atmega644 = Cpu{
11581157 .name = "atmega644",
11591158 .llvm_name = "atmega644",
1160 .features = featureSet(&all_features, &[_]Feature{
1159 .features = featureSet(&[_]Feature{
11611160 .avr5,
11621161 }),
11631162 };
11641163 pub const atmega644a = Cpu{
11651164 .name = "atmega644a",
11661165 .llvm_name = "atmega644a",
1167 .features = featureSet(&all_features, &[_]Feature{
1166 .features = featureSet(&[_]Feature{
11681167 .avr5,
11691168 }),
11701169 };
11711170 pub const atmega644p = Cpu{
11721171 .name = "atmega644p",
11731172 .llvm_name = "atmega644p",
1174 .features = featureSet(&all_features, &[_]Feature{
1173 .features = featureSet(&[_]Feature{
11751174 .avr5,
11761175 }),
11771176 };
11781177 pub const atmega644pa = Cpu{
11791178 .name = "atmega644pa",
11801179 .llvm_name = "atmega644pa",
1181 .features = featureSet(&all_features, &[_]Feature{
1180 .features = featureSet(&[_]Feature{
11821181 .avr5,
11831182 }),
11841183 };
11851184 pub const atmega644rfr2 = Cpu{
11861185 .name = "atmega644rfr2",
11871186 .llvm_name = "atmega644rfr2",
1188 .features = featureSet(&all_features, &[_]Feature{
1187 .features = featureSet(&[_]Feature{
11891188 .avr5,
11901189 }),
11911190 };
11921191 pub const atmega645 = Cpu{
11931192 .name = "atmega645",
11941193 .llvm_name = "atmega645",
1195 .features = featureSet(&all_features, &[_]Feature{
1194 .features = featureSet(&[_]Feature{
11961195 .avr5,
11971196 }),
11981197 };
11991198 pub const atmega6450 = Cpu{
12001199 .name = "atmega6450",
12011200 .llvm_name = "atmega6450",
1202 .features = featureSet(&all_features, &[_]Feature{
1201 .features = featureSet(&[_]Feature{
12031202 .avr5,
12041203 }),
12051204 };
12061205 pub const atmega6450a = Cpu{
12071206 .name = "atmega6450a",
12081207 .llvm_name = "atmega6450a",
1209 .features = featureSet(&all_features, &[_]Feature{
1208 .features = featureSet(&[_]Feature{
12101209 .avr5,
12111210 }),
12121211 };
12131212 pub const atmega6450p = Cpu{
12141213 .name = "atmega6450p",
12151214 .llvm_name = "atmega6450p",
1216 .features = featureSet(&all_features, &[_]Feature{
1215 .features = featureSet(&[_]Feature{
12171216 .avr5,
12181217 }),
12191218 };
12201219 pub const atmega645a = Cpu{
12211220 .name = "atmega645a",
12221221 .llvm_name = "atmega645a",
1223 .features = featureSet(&all_features, &[_]Feature{
1222 .features = featureSet(&[_]Feature{
12241223 .avr5,
12251224 }),
12261225 };
12271226 pub const atmega645p = Cpu{
12281227 .name = "atmega645p",
12291228 .llvm_name = "atmega645p",
1230 .features = featureSet(&all_features, &[_]Feature{
1229 .features = featureSet(&[_]Feature{
12311230 .avr5,
12321231 }),
12331232 };
12341233 pub const atmega649 = Cpu{
12351234 .name = "atmega649",
12361235 .llvm_name = "atmega649",
1237 .features = featureSet(&all_features, &[_]Feature{
1236 .features = featureSet(&[_]Feature{
12381237 .avr5,
12391238 }),
12401239 };
12411240 pub const atmega6490 = Cpu{
12421241 .name = "atmega6490",
12431242 .llvm_name = "atmega6490",
1244 .features = featureSet(&all_features, &[_]Feature{
1243 .features = featureSet(&[_]Feature{
12451244 .avr5,
12461245 }),
12471246 };
12481247 pub const atmega6490a = Cpu{
12491248 .name = "atmega6490a",
12501249 .llvm_name = "atmega6490a",
1251 .features = featureSet(&all_features, &[_]Feature{
1250 .features = featureSet(&[_]Feature{
12521251 .avr5,
12531252 }),
12541253 };
12551254 pub const atmega6490p = Cpu{
12561255 .name = "atmega6490p",
12571256 .llvm_name = "atmega6490p",
1258 .features = featureSet(&all_features, &[_]Feature{
1257 .features = featureSet(&[_]Feature{
12591258 .avr5,
12601259 }),
12611260 };
12621261 pub const atmega649a = Cpu{
12631262 .name = "atmega649a",
12641263 .llvm_name = "atmega649a",
1265 .features = featureSet(&all_features, &[_]Feature{
1264 .features = featureSet(&[_]Feature{
12661265 .avr5,
12671266 }),
12681267 };
12691268 pub const atmega649p = Cpu{
12701269 .name = "atmega649p",
12711270 .llvm_name = "atmega649p",
1272 .features = featureSet(&all_features, &[_]Feature{
1271 .features = featureSet(&[_]Feature{
12731272 .avr5,
12741273 }),
12751274 };
12761275 pub const atmega64a = Cpu{
12771276 .name = "atmega64a",
12781277 .llvm_name = "atmega64a",
1279 .features = featureSet(&all_features, &[_]Feature{
1278 .features = featureSet(&[_]Feature{
12801279 .avr5,
12811280 }),
12821281 };
12831282 pub const atmega64c1 = Cpu{
12841283 .name = "atmega64c1",
12851284 .llvm_name = "atmega64c1",
1286 .features = featureSet(&all_features, &[_]Feature{
1285 .features = featureSet(&[_]Feature{
12871286 .avr5,
12881287 }),
12891288 };
12901289 pub const atmega64hve = Cpu{
12911290 .name = "atmega64hve",
12921291 .llvm_name = "atmega64hve",
1293 .features = featureSet(&all_features, &[_]Feature{
1292 .features = featureSet(&[_]Feature{
12941293 .avr5,
12951294 }),
12961295 };
12971296 pub const atmega64m1 = Cpu{
12981297 .name = "atmega64m1",
12991298 .llvm_name = "atmega64m1",
1300 .features = featureSet(&all_features, &[_]Feature{
1299 .features = featureSet(&[_]Feature{
13011300 .avr5,
13021301 }),
13031302 };
13041303 pub const atmega64rfr2 = Cpu{
13051304 .name = "atmega64rfr2",
13061305 .llvm_name = "atmega64rfr2",
1307 .features = featureSet(&all_features, &[_]Feature{
1306 .features = featureSet(&[_]Feature{
13081307 .avr5,
13091308 }),
13101309 };
13111310 pub const atmega8 = Cpu{
13121311 .name = "atmega8",
13131312 .llvm_name = "atmega8",
1314 .features = featureSet(&all_features, &[_]Feature{
1313 .features = featureSet(&[_]Feature{
13151314 .avr4,
13161315 }),
13171316 };
13181317 pub const atmega8515 = Cpu{
13191318 .name = "atmega8515",
13201319 .llvm_name = "atmega8515",
1321 .features = featureSet(&all_features, &[_]Feature{
1320 .features = featureSet(&[_]Feature{
13221321 .avr2,
13231322 .lpmx,
13241323 .movw,
......@@ -1329,7 +1328,7 @@ pub const cpu = struct {
13291328 pub const atmega8535 = Cpu{
13301329 .name = "atmega8535",
13311330 .llvm_name = "atmega8535",
1332 .features = featureSet(&all_features, &[_]Feature{
1331 .features = featureSet(&[_]Feature{
13331332 .avr2,
13341333 .lpmx,
13351334 .movw,
......@@ -1340,175 +1339,175 @@ pub const cpu = struct {
13401339 pub const atmega88 = Cpu{
13411340 .name = "atmega88",
13421341 .llvm_name = "atmega88",
1343 .features = featureSet(&all_features, &[_]Feature{
1342 .features = featureSet(&[_]Feature{
13441343 .avr4,
13451344 }),
13461345 };
13471346 pub const atmega88a = Cpu{
13481347 .name = "atmega88a",
13491348 .llvm_name = "atmega88a",
1350 .features = featureSet(&all_features, &[_]Feature{
1349 .features = featureSet(&[_]Feature{
13511350 .avr4,
13521351 }),
13531352 };
13541353 pub const atmega88p = Cpu{
13551354 .name = "atmega88p",
13561355 .llvm_name = "atmega88p",
1357 .features = featureSet(&all_features, &[_]Feature{
1356 .features = featureSet(&[_]Feature{
13581357 .avr4,
13591358 }),
13601359 };
13611360 pub const atmega88pa = Cpu{
13621361 .name = "atmega88pa",
13631362 .llvm_name = "atmega88pa",
1364 .features = featureSet(&all_features, &[_]Feature{
1363 .features = featureSet(&[_]Feature{
13651364 .avr4,
13661365 }),
13671366 };
13681367 pub const atmega8a = Cpu{
13691368 .name = "atmega8a",
13701369 .llvm_name = "atmega8a",
1371 .features = featureSet(&all_features, &[_]Feature{
1370 .features = featureSet(&[_]Feature{
13721371 .avr4,
13731372 }),
13741373 };
13751374 pub const atmega8hva = Cpu{
13761375 .name = "atmega8hva",
13771376 .llvm_name = "atmega8hva",
1378 .features = featureSet(&all_features, &[_]Feature{
1377 .features = featureSet(&[_]Feature{
13791378 .avr4,
13801379 }),
13811380 };
13821381 pub const atmega8u2 = Cpu{
13831382 .name = "atmega8u2",
13841383 .llvm_name = "atmega8u2",
1385 .features = featureSet(&all_features, &[_]Feature{
1384 .features = featureSet(&[_]Feature{
13861385 .avr35,
13871386 }),
13881387 };
13891388 pub const attiny10 = Cpu{
13901389 .name = "attiny10",
13911390 .llvm_name = "attiny10",
1392 .features = featureSet(&all_features, &[_]Feature{
1391 .features = featureSet(&[_]Feature{
13931392 .avrtiny,
13941393 }),
13951394 };
13961395 pub const attiny102 = Cpu{
13971396 .name = "attiny102",
13981397 .llvm_name = "attiny102",
1399 .features = featureSet(&all_features, &[_]Feature{
1398 .features = featureSet(&[_]Feature{
14001399 .avrtiny,
14011400 }),
14021401 };
14031402 pub const attiny104 = Cpu{
14041403 .name = "attiny104",
14051404 .llvm_name = "attiny104",
1406 .features = featureSet(&all_features, &[_]Feature{
1405 .features = featureSet(&[_]Feature{
14071406 .avrtiny,
14081407 }),
14091408 };
14101409 pub const attiny11 = Cpu{
14111410 .name = "attiny11",
14121411 .llvm_name = "attiny11",
1413 .features = featureSet(&all_features, &[_]Feature{
1412 .features = featureSet(&[_]Feature{
14141413 .avr1,
14151414 }),
14161415 };
14171416 pub const attiny12 = Cpu{
14181417 .name = "attiny12",
14191418 .llvm_name = "attiny12",
1420 .features = featureSet(&all_features, &[_]Feature{
1419 .features = featureSet(&[_]Feature{
14211420 .avr1,
14221421 }),
14231422 };
14241423 pub const attiny13 = Cpu{
14251424 .name = "attiny13",
14261425 .llvm_name = "attiny13",
1427 .features = featureSet(&all_features, &[_]Feature{
1426 .features = featureSet(&[_]Feature{
14281427 .avr25,
14291428 }),
14301429 };
14311430 pub const attiny13a = Cpu{
14321431 .name = "attiny13a",
14331432 .llvm_name = "attiny13a",
1434 .features = featureSet(&all_features, &[_]Feature{
1433 .features = featureSet(&[_]Feature{
14351434 .avr25,
14361435 }),
14371436 };
14381437 pub const attiny15 = Cpu{
14391438 .name = "attiny15",
14401439 .llvm_name = "attiny15",
1441 .features = featureSet(&all_features, &[_]Feature{
1440 .features = featureSet(&[_]Feature{
14421441 .avr1,
14431442 }),
14441443 };
14451444 pub const attiny1634 = Cpu{
14461445 .name = "attiny1634",
14471446 .llvm_name = "attiny1634",
1448 .features = featureSet(&all_features, &[_]Feature{
1447 .features = featureSet(&[_]Feature{
14491448 .avr35,
14501449 }),
14511450 };
14521451 pub const attiny167 = Cpu{
14531452 .name = "attiny167",
14541453 .llvm_name = "attiny167",
1455 .features = featureSet(&all_features, &[_]Feature{
1454 .features = featureSet(&[_]Feature{
14561455 .avr35,
14571456 }),
14581457 };
14591458 pub const attiny20 = Cpu{
14601459 .name = "attiny20",
14611460 .llvm_name = "attiny20",
1462 .features = featureSet(&all_features, &[_]Feature{
1461 .features = featureSet(&[_]Feature{
14631462 .avrtiny,
14641463 }),
14651464 };
14661465 pub const attiny22 = Cpu{
14671466 .name = "attiny22",
14681467 .llvm_name = "attiny22",
1469 .features = featureSet(&all_features, &[_]Feature{
1468 .features = featureSet(&[_]Feature{
14701469 .avr2,
14711470 }),
14721471 };
14731472 pub const attiny2313 = Cpu{
14741473 .name = "attiny2313",
14751474 .llvm_name = "attiny2313",
1476 .features = featureSet(&all_features, &[_]Feature{
1475 .features = featureSet(&[_]Feature{
14771476 .avr25,
14781477 }),
14791478 };
14801479 pub const attiny2313a = Cpu{
14811480 .name = "attiny2313a",
14821481 .llvm_name = "attiny2313a",
1483 .features = featureSet(&all_features, &[_]Feature{
1482 .features = featureSet(&[_]Feature{
14841483 .avr25,
14851484 }),
14861485 };
14871486 pub const attiny24 = Cpu{
14881487 .name = "attiny24",
14891488 .llvm_name = "attiny24",
1490 .features = featureSet(&all_features, &[_]Feature{
1489 .features = featureSet(&[_]Feature{
14911490 .avr25,
14921491 }),
14931492 };
14941493 pub const attiny24a = Cpu{
14951494 .name = "attiny24a",
14961495 .llvm_name = "attiny24a",
1497 .features = featureSet(&all_features, &[_]Feature{
1496 .features = featureSet(&[_]Feature{
14981497 .avr25,
14991498 }),
15001499 };
15011500 pub const attiny25 = Cpu{
15021501 .name = "attiny25",
15031502 .llvm_name = "attiny25",
1504 .features = featureSet(&all_features, &[_]Feature{
1503 .features = featureSet(&[_]Feature{
15051504 .avr25,
15061505 }),
15071506 };
15081507 pub const attiny26 = Cpu{
15091508 .name = "attiny26",
15101509 .llvm_name = "attiny26",
1511 .features = featureSet(&all_features, &[_]Feature{
1510 .features = featureSet(&[_]Feature{
15121511 .avr2,
15131512 .lpmx,
15141513 }),
......@@ -1516,602 +1515,602 @@ pub const cpu = struct {
15161515 pub const attiny261 = Cpu{
15171516 .name = "attiny261",
15181517 .llvm_name = "attiny261",
1519 .features = featureSet(&all_features, &[_]Feature{
1518 .features = featureSet(&[_]Feature{
15201519 .avr25,
15211520 }),
15221521 };
15231522 pub const attiny261a = Cpu{
15241523 .name = "attiny261a",
15251524 .llvm_name = "attiny261a",
1526 .features = featureSet(&all_features, &[_]Feature{
1525 .features = featureSet(&[_]Feature{
15271526 .avr25,
15281527 }),
15291528 };
15301529 pub const attiny28 = Cpu{
15311530 .name = "attiny28",
15321531 .llvm_name = "attiny28",
1533 .features = featureSet(&all_features, &[_]Feature{
1532 .features = featureSet(&[_]Feature{
15341533 .avr1,
15351534 }),
15361535 };
15371536 pub const attiny4 = Cpu{
15381537 .name = "attiny4",
15391538 .llvm_name = "attiny4",
1540 .features = featureSet(&all_features, &[_]Feature{
1539 .features = featureSet(&[_]Feature{
15411540 .avrtiny,
15421541 }),
15431542 };
15441543 pub const attiny40 = Cpu{
15451544 .name = "attiny40",
15461545 .llvm_name = "attiny40",
1547 .features = featureSet(&all_features, &[_]Feature{
1546 .features = featureSet(&[_]Feature{
15481547 .avrtiny,
15491548 }),
15501549 };
15511550 pub const attiny4313 = Cpu{
15521551 .name = "attiny4313",
15531552 .llvm_name = "attiny4313",
1554 .features = featureSet(&all_features, &[_]Feature{
1553 .features = featureSet(&[_]Feature{
15551554 .avr25,
15561555 }),
15571556 };
15581557 pub const attiny43u = Cpu{
15591558 .name = "attiny43u",
15601559 .llvm_name = "attiny43u",
1561 .features = featureSet(&all_features, &[_]Feature{
1560 .features = featureSet(&[_]Feature{
15621561 .avr25,
15631562 }),
15641563 };
15651564 pub const attiny44 = Cpu{
15661565 .name = "attiny44",
15671566 .llvm_name = "attiny44",
1568 .features = featureSet(&all_features, &[_]Feature{
1567 .features = featureSet(&[_]Feature{
15691568 .avr25,
15701569 }),
15711570 };
15721571 pub const attiny44a = Cpu{
15731572 .name = "attiny44a",
15741573 .llvm_name = "attiny44a",
1575 .features = featureSet(&all_features, &[_]Feature{
1574 .features = featureSet(&[_]Feature{
15761575 .avr25,
15771576 }),
15781577 };
15791578 pub const attiny45 = Cpu{
15801579 .name = "attiny45",
15811580 .llvm_name = "attiny45",
1582 .features = featureSet(&all_features, &[_]Feature{
1581 .features = featureSet(&[_]Feature{
15831582 .avr25,
15841583 }),
15851584 };
15861585 pub const attiny461 = Cpu{
15871586 .name = "attiny461",
15881587 .llvm_name = "attiny461",
1589 .features = featureSet(&all_features, &[_]Feature{
1588 .features = featureSet(&[_]Feature{
15901589 .avr25,
15911590 }),
15921591 };
15931592 pub const attiny461a = Cpu{
15941593 .name = "attiny461a",
15951594 .llvm_name = "attiny461a",
1596 .features = featureSet(&all_features, &[_]Feature{
1595 .features = featureSet(&[_]Feature{
15971596 .avr25,
15981597 }),
15991598 };
16001599 pub const attiny48 = Cpu{
16011600 .name = "attiny48",
16021601 .llvm_name = "attiny48",
1603 .features = featureSet(&all_features, &[_]Feature{
1602 .features = featureSet(&[_]Feature{
16041603 .avr25,
16051604 }),
16061605 };
16071606 pub const attiny5 = Cpu{
16081607 .name = "attiny5",
16091608 .llvm_name = "attiny5",
1610 .features = featureSet(&all_features, &[_]Feature{
1609 .features = featureSet(&[_]Feature{
16111610 .avrtiny,
16121611 }),
16131612 };
16141613 pub const attiny828 = Cpu{
16151614 .name = "attiny828",
16161615 .llvm_name = "attiny828",
1617 .features = featureSet(&all_features, &[_]Feature{
1616 .features = featureSet(&[_]Feature{
16181617 .avr25,
16191618 }),
16201619 };
16211620 pub const attiny84 = Cpu{
16221621 .name = "attiny84",
16231622 .llvm_name = "attiny84",
1624 .features = featureSet(&all_features, &[_]Feature{
1623 .features = featureSet(&[_]Feature{
16251624 .avr25,
16261625 }),
16271626 };
16281627 pub const attiny84a = Cpu{
16291628 .name = "attiny84a",
16301629 .llvm_name = "attiny84a",
1631 .features = featureSet(&all_features, &[_]Feature{
1630 .features = featureSet(&[_]Feature{
16321631 .avr25,
16331632 }),
16341633 };
16351634 pub const attiny85 = Cpu{
16361635 .name = "attiny85",
16371636 .llvm_name = "attiny85",
1638 .features = featureSet(&all_features, &[_]Feature{
1637 .features = featureSet(&[_]Feature{
16391638 .avr25,
16401639 }),
16411640 };
16421641 pub const attiny861 = Cpu{
16431642 .name = "attiny861",
16441643 .llvm_name = "attiny861",
1645 .features = featureSet(&all_features, &[_]Feature{
1644 .features = featureSet(&[_]Feature{
16461645 .avr25,
16471646 }),
16481647 };
16491648 pub const attiny861a = Cpu{
16501649 .name = "attiny861a",
16511650 .llvm_name = "attiny861a",
1652 .features = featureSet(&all_features, &[_]Feature{
1651 .features = featureSet(&[_]Feature{
16531652 .avr25,
16541653 }),
16551654 };
16561655 pub const attiny87 = Cpu{
16571656 .name = "attiny87",
16581657 .llvm_name = "attiny87",
1659 .features = featureSet(&all_features, &[_]Feature{
1658 .features = featureSet(&[_]Feature{
16601659 .avr25,
16611660 }),
16621661 };
16631662 pub const attiny88 = Cpu{
16641663 .name = "attiny88",
16651664 .llvm_name = "attiny88",
1666 .features = featureSet(&all_features, &[_]Feature{
1665 .features = featureSet(&[_]Feature{
16671666 .avr25,
16681667 }),
16691668 };
16701669 pub const attiny9 = Cpu{
16711670 .name = "attiny9",
16721671 .llvm_name = "attiny9",
1673 .features = featureSet(&all_features, &[_]Feature{
1672 .features = featureSet(&[_]Feature{
16741673 .avrtiny,
16751674 }),
16761675 };
16771676 pub const atxmega128a1 = Cpu{
16781677 .name = "atxmega128a1",
16791678 .llvm_name = "atxmega128a1",
1680 .features = featureSet(&all_features, &[_]Feature{
1679 .features = featureSet(&[_]Feature{
16811680 .xmega,
16821681 }),
16831682 };
16841683 pub const atxmega128a1u = Cpu{
16851684 .name = "atxmega128a1u",
16861685 .llvm_name = "atxmega128a1u",
1687 .features = featureSet(&all_features, &[_]Feature{
1686 .features = featureSet(&[_]Feature{
16881687 .xmegau,
16891688 }),
16901689 };
16911690 pub const atxmega128a3 = Cpu{
16921691 .name = "atxmega128a3",
16931692 .llvm_name = "atxmega128a3",
1694 .features = featureSet(&all_features, &[_]Feature{
1693 .features = featureSet(&[_]Feature{
16951694 .xmega,
16961695 }),
16971696 };
16981697 pub const atxmega128a3u = Cpu{
16991698 .name = "atxmega128a3u",
17001699 .llvm_name = "atxmega128a3u",
1701 .features = featureSet(&all_features, &[_]Feature{
1700 .features = featureSet(&[_]Feature{
17021701 .xmegau,
17031702 }),
17041703 };
17051704 pub const atxmega128a4u = Cpu{
17061705 .name = "atxmega128a4u",
17071706 .llvm_name = "atxmega128a4u",
1708 .features = featureSet(&all_features, &[_]Feature{
1707 .features = featureSet(&[_]Feature{
17091708 .xmegau,
17101709 }),
17111710 };
17121711 pub const atxmega128b1 = Cpu{
17131712 .name = "atxmega128b1",
17141713 .llvm_name = "atxmega128b1",
1715 .features = featureSet(&all_features, &[_]Feature{
1714 .features = featureSet(&[_]Feature{
17161715 .xmegau,
17171716 }),
17181717 };
17191718 pub const atxmega128b3 = Cpu{
17201719 .name = "atxmega128b3",
17211720 .llvm_name = "atxmega128b3",
1722 .features = featureSet(&all_features, &[_]Feature{
1721 .features = featureSet(&[_]Feature{
17231722 .xmegau,
17241723 }),
17251724 };
17261725 pub const atxmega128c3 = Cpu{
17271726 .name = "atxmega128c3",
17281727 .llvm_name = "atxmega128c3",
1729 .features = featureSet(&all_features, &[_]Feature{
1728 .features = featureSet(&[_]Feature{
17301729 .xmegau,
17311730 }),
17321731 };
17331732 pub const atxmega128d3 = Cpu{
17341733 .name = "atxmega128d3",
17351734 .llvm_name = "atxmega128d3",
1736 .features = featureSet(&all_features, &[_]Feature{
1735 .features = featureSet(&[_]Feature{
17371736 .xmega,
17381737 }),
17391738 };
17401739 pub const atxmega128d4 = Cpu{
17411740 .name = "atxmega128d4",
17421741 .llvm_name = "atxmega128d4",
1743 .features = featureSet(&all_features, &[_]Feature{
1742 .features = featureSet(&[_]Feature{
17441743 .xmega,
17451744 }),
17461745 };
17471746 pub const atxmega16a4 = Cpu{
17481747 .name = "atxmega16a4",
17491748 .llvm_name = "atxmega16a4",
1750 .features = featureSet(&all_features, &[_]Feature{
1749 .features = featureSet(&[_]Feature{
17511750 .xmega,
17521751 }),
17531752 };
17541753 pub const atxmega16a4u = Cpu{
17551754 .name = "atxmega16a4u",
17561755 .llvm_name = "atxmega16a4u",
1757 .features = featureSet(&all_features, &[_]Feature{
1756 .features = featureSet(&[_]Feature{
17581757 .xmegau,
17591758 }),
17601759 };
17611760 pub const atxmega16c4 = Cpu{
17621761 .name = "atxmega16c4",
17631762 .llvm_name = "atxmega16c4",
1764 .features = featureSet(&all_features, &[_]Feature{
1763 .features = featureSet(&[_]Feature{
17651764 .xmegau,
17661765 }),
17671766 };
17681767 pub const atxmega16d4 = Cpu{
17691768 .name = "atxmega16d4",
17701769 .llvm_name = "atxmega16d4",
1771 .features = featureSet(&all_features, &[_]Feature{
1770 .features = featureSet(&[_]Feature{
17721771 .xmega,
17731772 }),
17741773 };
17751774 pub const atxmega16e5 = Cpu{
17761775 .name = "atxmega16e5",
17771776 .llvm_name = "atxmega16e5",
1778 .features = featureSet(&all_features, &[_]Feature{
1777 .features = featureSet(&[_]Feature{
17791778 .xmega,
17801779 }),
17811780 };
17821781 pub const atxmega192a3 = Cpu{
17831782 .name = "atxmega192a3",
17841783 .llvm_name = "atxmega192a3",
1785 .features = featureSet(&all_features, &[_]Feature{
1784 .features = featureSet(&[_]Feature{
17861785 .xmega,
17871786 }),
17881787 };
17891788 pub const atxmega192a3u = Cpu{
17901789 .name = "atxmega192a3u",
17911790 .llvm_name = "atxmega192a3u",
1792 .features = featureSet(&all_features, &[_]Feature{
1791 .features = featureSet(&[_]Feature{
17931792 .xmegau,
17941793 }),
17951794 };
17961795 pub const atxmega192c3 = Cpu{
17971796 .name = "atxmega192c3",
17981797 .llvm_name = "atxmega192c3",
1799 .features = featureSet(&all_features, &[_]Feature{
1798 .features = featureSet(&[_]Feature{
18001799 .xmegau,
18011800 }),
18021801 };
18031802 pub const atxmega192d3 = Cpu{
18041803 .name = "atxmega192d3",
18051804 .llvm_name = "atxmega192d3",
1806 .features = featureSet(&all_features, &[_]Feature{
1805 .features = featureSet(&[_]Feature{
18071806 .xmega,
18081807 }),
18091808 };
18101809 pub const atxmega256a3 = Cpu{
18111810 .name = "atxmega256a3",
18121811 .llvm_name = "atxmega256a3",
1813 .features = featureSet(&all_features, &[_]Feature{
1812 .features = featureSet(&[_]Feature{
18141813 .xmega,
18151814 }),
18161815 };
18171816 pub const atxmega256a3b = Cpu{
18181817 .name = "atxmega256a3b",
18191818 .llvm_name = "atxmega256a3b",
1820 .features = featureSet(&all_features, &[_]Feature{
1819 .features = featureSet(&[_]Feature{
18211820 .xmega,
18221821 }),
18231822 };
18241823 pub const atxmega256a3bu = Cpu{
18251824 .name = "atxmega256a3bu",
18261825 .llvm_name = "atxmega256a3bu",
1827 .features = featureSet(&all_features, &[_]Feature{
1826 .features = featureSet(&[_]Feature{
18281827 .xmegau,
18291828 }),
18301829 };
18311830 pub const atxmega256a3u = Cpu{
18321831 .name = "atxmega256a3u",
18331832 .llvm_name = "atxmega256a3u",
1834 .features = featureSet(&all_features, &[_]Feature{
1833 .features = featureSet(&[_]Feature{
18351834 .xmegau,
18361835 }),
18371836 };
18381837 pub const atxmega256c3 = Cpu{
18391838 .name = "atxmega256c3",
18401839 .llvm_name = "atxmega256c3",
1841 .features = featureSet(&all_features, &[_]Feature{
1840 .features = featureSet(&[_]Feature{
18421841 .xmegau,
18431842 }),
18441843 };
18451844 pub const atxmega256d3 = Cpu{
18461845 .name = "atxmega256d3",
18471846 .llvm_name = "atxmega256d3",
1848 .features = featureSet(&all_features, &[_]Feature{
1847 .features = featureSet(&[_]Feature{
18491848 .xmega,
18501849 }),
18511850 };
18521851 pub const atxmega32a4 = Cpu{
18531852 .name = "atxmega32a4",
18541853 .llvm_name = "atxmega32a4",
1855 .features = featureSet(&all_features, &[_]Feature{
1854 .features = featureSet(&[_]Feature{
18561855 .xmega,
18571856 }),
18581857 };
18591858 pub const atxmega32a4u = Cpu{
18601859 .name = "atxmega32a4u",
18611860 .llvm_name = "atxmega32a4u",
1862 .features = featureSet(&all_features, &[_]Feature{
1861 .features = featureSet(&[_]Feature{
18631862 .xmegau,
18641863 }),
18651864 };
18661865 pub const atxmega32c4 = Cpu{
18671866 .name = "atxmega32c4",
18681867 .llvm_name = "atxmega32c4",
1869 .features = featureSet(&all_features, &[_]Feature{
1868 .features = featureSet(&[_]Feature{
18701869 .xmegau,
18711870 }),
18721871 };
18731872 pub const atxmega32d4 = Cpu{
18741873 .name = "atxmega32d4",
18751874 .llvm_name = "atxmega32d4",
1876 .features = featureSet(&all_features, &[_]Feature{
1875 .features = featureSet(&[_]Feature{
18771876 .xmega,
18781877 }),
18791878 };
18801879 pub const atxmega32e5 = Cpu{
18811880 .name = "atxmega32e5",
18821881 .llvm_name = "atxmega32e5",
1883 .features = featureSet(&all_features, &[_]Feature{
1882 .features = featureSet(&[_]Feature{
18841883 .xmega,
18851884 }),
18861885 };
18871886 pub const atxmega32x1 = Cpu{
18881887 .name = "atxmega32x1",
18891888 .llvm_name = "atxmega32x1",
1890 .features = featureSet(&all_features, &[_]Feature{
1889 .features = featureSet(&[_]Feature{
18911890 .xmega,
18921891 }),
18931892 };
18941893 pub const atxmega384c3 = Cpu{
18951894 .name = "atxmega384c3",
18961895 .llvm_name = "atxmega384c3",
1897 .features = featureSet(&all_features, &[_]Feature{
1896 .features = featureSet(&[_]Feature{
18981897 .xmegau,
18991898 }),
19001899 };
19011900 pub const atxmega384d3 = Cpu{
19021901 .name = "atxmega384d3",
19031902 .llvm_name = "atxmega384d3",
1904 .features = featureSet(&all_features, &[_]Feature{
1903 .features = featureSet(&[_]Feature{
19051904 .xmega,
19061905 }),
19071906 };
19081907 pub const atxmega64a1 = Cpu{
19091908 .name = "atxmega64a1",
19101909 .llvm_name = "atxmega64a1",
1911 .features = featureSet(&all_features, &[_]Feature{
1910 .features = featureSet(&[_]Feature{
19121911 .xmega,
19131912 }),
19141913 };
19151914 pub const atxmega64a1u = Cpu{
19161915 .name = "atxmega64a1u",
19171916 .llvm_name = "atxmega64a1u",
1918 .features = featureSet(&all_features, &[_]Feature{
1917 .features = featureSet(&[_]Feature{
19191918 .xmegau,
19201919 }),
19211920 };
19221921 pub const atxmega64a3 = Cpu{
19231922 .name = "atxmega64a3",
19241923 .llvm_name = "atxmega64a3",
1925 .features = featureSet(&all_features, &[_]Feature{
1924 .features = featureSet(&[_]Feature{
19261925 .xmega,
19271926 }),
19281927 };
19291928 pub const atxmega64a3u = Cpu{
19301929 .name = "atxmega64a3u",
19311930 .llvm_name = "atxmega64a3u",
1932 .features = featureSet(&all_features, &[_]Feature{
1931 .features = featureSet(&[_]Feature{
19331932 .xmegau,
19341933 }),
19351934 };
19361935 pub const atxmega64a4u = Cpu{
19371936 .name = "atxmega64a4u",
19381937 .llvm_name = "atxmega64a4u",
1939 .features = featureSet(&all_features, &[_]Feature{
1938 .features = featureSet(&[_]Feature{
19401939 .xmegau,
19411940 }),
19421941 };
19431942 pub const atxmega64b1 = Cpu{
19441943 .name = "atxmega64b1",
19451944 .llvm_name = "atxmega64b1",
1946 .features = featureSet(&all_features, &[_]Feature{
1945 .features = featureSet(&[_]Feature{
19471946 .xmegau,
19481947 }),
19491948 };
19501949 pub const atxmega64b3 = Cpu{
19511950 .name = "atxmega64b3",
19521951 .llvm_name = "atxmega64b3",
1953 .features = featureSet(&all_features, &[_]Feature{
1952 .features = featureSet(&[_]Feature{
19541953 .xmegau,
19551954 }),
19561955 };
19571956 pub const atxmega64c3 = Cpu{
19581957 .name = "atxmega64c3",
19591958 .llvm_name = "atxmega64c3",
1960 .features = featureSet(&all_features, &[_]Feature{
1959 .features = featureSet(&[_]Feature{
19611960 .xmegau,
19621961 }),
19631962 };
19641963 pub const atxmega64d3 = Cpu{
19651964 .name = "atxmega64d3",
19661965 .llvm_name = "atxmega64d3",
1967 .features = featureSet(&all_features, &[_]Feature{
1966 .features = featureSet(&[_]Feature{
19681967 .xmega,
19691968 }),
19701969 };
19711970 pub const atxmega64d4 = Cpu{
19721971 .name = "atxmega64d4",
19731972 .llvm_name = "atxmega64d4",
1974 .features = featureSet(&all_features, &[_]Feature{
1973 .features = featureSet(&[_]Feature{
19751974 .xmega,
19761975 }),
19771976 };
19781977 pub const atxmega8e5 = Cpu{
19791978 .name = "atxmega8e5",
19801979 .llvm_name = "atxmega8e5",
1981 .features = featureSet(&all_features, &[_]Feature{
1980 .features = featureSet(&[_]Feature{
19821981 .xmega,
19831982 }),
19841983 };
19851984 pub const avr1 = Cpu{
19861985 .name = "avr1",
19871986 .llvm_name = "avr1",
1988 .features = featureSet(&all_features, &[_]Feature{
1987 .features = featureSet(&[_]Feature{
19891988 .avr1,
19901989 }),
19911990 };
19921991 pub const avr2 = Cpu{
19931992 .name = "avr2",
19941993 .llvm_name = "avr2",
1995 .features = featureSet(&all_features, &[_]Feature{
1994 .features = featureSet(&[_]Feature{
19961995 .avr2,
19971996 }),
19981997 };
19991998 pub const avr25 = Cpu{
20001999 .name = "avr25",
20012000 .llvm_name = "avr25",
2002 .features = featureSet(&all_features, &[_]Feature{
2001 .features = featureSet(&[_]Feature{
20032002 .avr25,
20042003 }),
20052004 };
20062005 pub const avr3 = Cpu{
20072006 .name = "avr3",
20082007 .llvm_name = "avr3",
2009 .features = featureSet(&all_features, &[_]Feature{
2008 .features = featureSet(&[_]Feature{
20102009 .avr3,
20112010 }),
20122011 };
20132012 pub const avr31 = Cpu{
20142013 .name = "avr31",
20152014 .llvm_name = "avr31",
2016 .features = featureSet(&all_features, &[_]Feature{
2015 .features = featureSet(&[_]Feature{
20172016 .avr31,
20182017 }),
20192018 };
20202019 pub const avr35 = Cpu{
20212020 .name = "avr35",
20222021 .llvm_name = "avr35",
2023 .features = featureSet(&all_features, &[_]Feature{
2022 .features = featureSet(&[_]Feature{
20242023 .avr35,
20252024 }),
20262025 };
20272026 pub const avr4 = Cpu{
20282027 .name = "avr4",
20292028 .llvm_name = "avr4",
2030 .features = featureSet(&all_features, &[_]Feature{
2029 .features = featureSet(&[_]Feature{
20312030 .avr4,
20322031 }),
20332032 };
20342033 pub const avr5 = Cpu{
20352034 .name = "avr5",
20362035 .llvm_name = "avr5",
2037 .features = featureSet(&all_features, &[_]Feature{
2036 .features = featureSet(&[_]Feature{
20382037 .avr5,
20392038 }),
20402039 };
20412040 pub const avr51 = Cpu{
20422041 .name = "avr51",
20432042 .llvm_name = "avr51",
2044 .features = featureSet(&all_features, &[_]Feature{
2043 .features = featureSet(&[_]Feature{
20452044 .avr51,
20462045 }),
20472046 };
20482047 pub const avr6 = Cpu{
20492048 .name = "avr6",
20502049 .llvm_name = "avr6",
2051 .features = featureSet(&all_features, &[_]Feature{
2050 .features = featureSet(&[_]Feature{
20522051 .avr6,
20532052 }),
20542053 };
20552054 pub const avrtiny = Cpu{
20562055 .name = "avrtiny",
20572056 .llvm_name = "avrtiny",
2058 .features = featureSet(&all_features, &[_]Feature{
2057 .features = featureSet(&[_]Feature{
20592058 .avrtiny,
20602059 }),
20612060 };
20622061 pub const avrxmega1 = Cpu{
20632062 .name = "avrxmega1",
20642063 .llvm_name = "avrxmega1",
2065 .features = featureSet(&all_features, &[_]Feature{
2064 .features = featureSet(&[_]Feature{
20662065 .xmega,
20672066 }),
20682067 };
20692068 pub const avrxmega2 = Cpu{
20702069 .name = "avrxmega2",
20712070 .llvm_name = "avrxmega2",
2072 .features = featureSet(&all_features, &[_]Feature{
2071 .features = featureSet(&[_]Feature{
20732072 .xmega,
20742073 }),
20752074 };
20762075 pub const avrxmega3 = Cpu{
20772076 .name = "avrxmega3",
20782077 .llvm_name = "avrxmega3",
2079 .features = featureSet(&all_features, &[_]Feature{
2078 .features = featureSet(&[_]Feature{
20802079 .xmega,
20812080 }),
20822081 };
20832082 pub const avrxmega4 = Cpu{
20842083 .name = "avrxmega4",
20852084 .llvm_name = "avrxmega4",
2086 .features = featureSet(&all_features, &[_]Feature{
2085 .features = featureSet(&[_]Feature{
20872086 .xmega,
20882087 }),
20892088 };
20902089 pub const avrxmega5 = Cpu{
20912090 .name = "avrxmega5",
20922091 .llvm_name = "avrxmega5",
2093 .features = featureSet(&all_features, &[_]Feature{
2092 .features = featureSet(&[_]Feature{
20942093 .xmega,
20952094 }),
20962095 };
20972096 pub const avrxmega6 = Cpu{
20982097 .name = "avrxmega6",
20992098 .llvm_name = "avrxmega6",
2100 .features = featureSet(&all_features, &[_]Feature{
2099 .features = featureSet(&[_]Feature{
21012100 .xmega,
21022101 }),
21032102 };
21042103 pub const avrxmega7 = Cpu{
21052104 .name = "avrxmega7",
21062105 .llvm_name = "avrxmega7",
2107 .features = featureSet(&all_features, &[_]Feature{
2106 .features = featureSet(&[_]Feature{
21082107 .xmega,
21092108 }),
21102109 };
21112110 pub const m3000 = Cpu{
21122111 .name = "m3000",
21132112 .llvm_name = "m3000",
2114 .features = featureSet(&all_features, &[_]Feature{
2113 .features = featureSet(&[_]Feature{
21152114 .avr5,
21162115 }),
21172116 };
......@@ -2380,6 +2379,6 @@ pub const all_cpus = &[_]*const Cpu{
23802379 &cpu.m3000,
23812380};
23822381
2383pub const baseline_features = featureSet(&all_features, &[_]Feature{
2382pub const baseline_features = featureSet(&[_]Feature{
23842383 .avr0,
23852384});
lib/std/target/bpf.zig+8-9
......@@ -16,23 +16,22 @@ pub const all_features = blk: {
1616 result[@enumToInt(Feature.alu32)] = .{
1717 .llvm_name = "alu32",
1818 .description = "Enable ALU32 instructions",
19 .dependencies = sparseFeatureSet(&[_]Feature{}),
19 .dependencies = featureSet(&[_]Feature{}),
2020 };
2121 result[@enumToInt(Feature.dummy)] = .{
2222 .llvm_name = "dummy",
2323 .description = "unused feature",
24 .dependencies = sparseFeatureSet(&[_]Feature{}),
24 .dependencies = featureSet(&[_]Feature{}),
2525 };
2626 result[@enumToInt(Feature.dwarfris)] = .{
2727 .llvm_name = "dwarfris",
2828 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
29 .dependencies = sparseFeatureSet(&[_]Feature{}),
29 .dependencies = featureSet(&[_]Feature{}),
3030 };
3131 const ti = @typeInfo(Feature);
3232 for (result) |*elem, i| {
3333 elem.index = i;
3434 elem.name = ti.Enum.fields[i].name;
35 elem.dependencies.initAsDependencies(i, &result);
3635 }
3736 break :blk result;
3837};
......@@ -41,27 +40,27 @@ pub const cpu = struct {
4140 pub const generic = Cpu{
4241 .name = "generic",
4342 .llvm_name = "generic",
44 .features = featureSet(&all_features, &[_]Feature{}),
43 .features = featureSet(&[_]Feature{}),
4544 };
4645 pub const probe = Cpu{
4746 .name = "probe",
4847 .llvm_name = "probe",
49 .features = featureSet(&all_features, &[_]Feature{}),
48 .features = featureSet(&[_]Feature{}),
5049 };
5150 pub const v1 = Cpu{
5251 .name = "v1",
5352 .llvm_name = "v1",
54 .features = featureSet(&all_features, &[_]Feature{}),
53 .features = featureSet(&[_]Feature{}),
5554 };
5655 pub const v2 = Cpu{
5756 .name = "v2",
5857 .llvm_name = "v2",
59 .features = featureSet(&all_features, &[_]Feature{}),
58 .features = featureSet(&[_]Feature{}),
6059 };
6160 pub const v3 = Cpu{
6261 .name = "v3",
6362 .llvm_name = "v3",
64 .features = featureSet(&all_features, &[_]Feature{}),
63 .features = featureSet(&[_]Feature{}),
6564 };
6665};
6766
lib/std/target/hexagon.zig+31-32
......@@ -37,38 +37,38 @@ pub const all_features = blk: {
3737 result[@enumToInt(Feature.duplex)] = .{
3838 .llvm_name = "duplex",
3939 .description = "Enable generation of duplex instruction",
40 .dependencies = sparseFeatureSet(&[_]Feature{}),
40 .dependencies = featureSet(&[_]Feature{}),
4141 };
4242 result[@enumToInt(Feature.hvx)] = .{
4343 .llvm_name = "hvx",
4444 .description = "Hexagon HVX instructions",
45 .dependencies = sparseFeatureSet(&[_]Feature{}),
45 .dependencies = featureSet(&[_]Feature{}),
4646 };
4747 result[@enumToInt(Feature.hvx_length128b)] = .{
4848 .llvm_name = "hvx-length128b",
4949 .description = "Hexagon HVX 128B instructions",
50 .dependencies = sparseFeatureSet(&[_]Feature{
50 .dependencies = featureSet(&[_]Feature{
5151 .hvx,
5252 }),
5353 };
5454 result[@enumToInt(Feature.hvx_length64b)] = .{
5555 .llvm_name = "hvx-length64b",
5656 .description = "Hexagon HVX 64B instructions",
57 .dependencies = sparseFeatureSet(&[_]Feature{
57 .dependencies = featureSet(&[_]Feature{
5858 .hvx,
5959 }),
6060 };
6161 result[@enumToInt(Feature.hvxv60)] = .{
6262 .llvm_name = "hvxv60",
6363 .description = "Hexagon HVX instructions",
64 .dependencies = sparseFeatureSet(&[_]Feature{
64 .dependencies = featureSet(&[_]Feature{
6565 .hvx,
6666 }),
6767 };
6868 result[@enumToInt(Feature.hvxv62)] = .{
6969 .llvm_name = "hvxv62",
7070 .description = "Hexagon HVX instructions",
71 .dependencies = sparseFeatureSet(&[_]Feature{
71 .dependencies = featureSet(&[_]Feature{
7272 .hvx,
7373 .hvxv60,
7474 }),
......@@ -76,7 +76,7 @@ pub const all_features = blk: {
7676 result[@enumToInt(Feature.hvxv65)] = .{
7777 .llvm_name = "hvxv65",
7878 .description = "Hexagon HVX instructions",
79 .dependencies = sparseFeatureSet(&[_]Feature{
79 .dependencies = featureSet(&[_]Feature{
8080 .hvx,
8181 .hvxv60,
8282 .hvxv62,
......@@ -85,7 +85,7 @@ pub const all_features = blk: {
8585 result[@enumToInt(Feature.hvxv66)] = .{
8686 .llvm_name = "hvxv66",
8787 .description = "Hexagon HVX instructions",
88 .dependencies = sparseFeatureSet(&[_]Feature{
88 .dependencies = featureSet(&[_]Feature{
8989 .hvx,
9090 .hvxv60,
9191 .hvxv62,
......@@ -96,92 +96,91 @@ pub const all_features = blk: {
9696 result[@enumToInt(Feature.long_calls)] = .{
9797 .llvm_name = "long-calls",
9898 .description = "Use constant-extended calls",
99 .dependencies = sparseFeatureSet(&[_]Feature{}),
99 .dependencies = featureSet(&[_]Feature{}),
100100 };
101101 result[@enumToInt(Feature.mem_noshuf)] = .{
102102 .llvm_name = "mem_noshuf",
103103 .description = "Supports mem_noshuf feature",
104 .dependencies = sparseFeatureSet(&[_]Feature{}),
104 .dependencies = featureSet(&[_]Feature{}),
105105 };
106106 result[@enumToInt(Feature.memops)] = .{
107107 .llvm_name = "memops",
108108 .description = "Use memop instructions",
109 .dependencies = sparseFeatureSet(&[_]Feature{}),
109 .dependencies = featureSet(&[_]Feature{}),
110110 };
111111 result[@enumToInt(Feature.noreturn_stack_elim)] = .{
112112 .llvm_name = "noreturn-stack-elim",
113113 .description = "Eliminate stack allocation in a noreturn function when possible",
114 .dependencies = sparseFeatureSet(&[_]Feature{}),
114 .dependencies = featureSet(&[_]Feature{}),
115115 };
116116 result[@enumToInt(Feature.nvj)] = .{
117117 .llvm_name = "nvj",
118118 .description = "Support for new-value jumps",
119 .dependencies = sparseFeatureSet(&[_]Feature{
119 .dependencies = featureSet(&[_]Feature{
120120 .packets,
121121 }),
122122 };
123123 result[@enumToInt(Feature.nvs)] = .{
124124 .llvm_name = "nvs",
125125 .description = "Support for new-value stores",
126 .dependencies = sparseFeatureSet(&[_]Feature{
126 .dependencies = featureSet(&[_]Feature{
127127 .packets,
128128 }),
129129 };
130130 result[@enumToInt(Feature.packets)] = .{
131131 .llvm_name = "packets",
132132 .description = "Support for instruction packets",
133 .dependencies = sparseFeatureSet(&[_]Feature{}),
133 .dependencies = featureSet(&[_]Feature{}),
134134 };
135135 result[@enumToInt(Feature.reserved_r19)] = .{
136136 .llvm_name = "reserved-r19",
137137 .description = "Reserve register R19",
138 .dependencies = sparseFeatureSet(&[_]Feature{}),
138 .dependencies = featureSet(&[_]Feature{}),
139139 };
140140 result[@enumToInt(Feature.small_data)] = .{
141141 .llvm_name = "small-data",
142142 .description = "Allow GP-relative addressing of global variables",
143 .dependencies = sparseFeatureSet(&[_]Feature{}),
143 .dependencies = featureSet(&[_]Feature{}),
144144 };
145145 result[@enumToInt(Feature.v5)] = .{
146146 .llvm_name = "v5",
147147 .description = "Enable Hexagon V5 architecture",
148 .dependencies = sparseFeatureSet(&[_]Feature{}),
148 .dependencies = featureSet(&[_]Feature{}),
149149 };
150150 result[@enumToInt(Feature.v55)] = .{
151151 .llvm_name = "v55",
152152 .description = "Enable Hexagon V55 architecture",
153 .dependencies = sparseFeatureSet(&[_]Feature{}),
153 .dependencies = featureSet(&[_]Feature{}),
154154 };
155155 result[@enumToInt(Feature.v60)] = .{
156156 .llvm_name = "v60",
157157 .description = "Enable Hexagon V60 architecture",
158 .dependencies = sparseFeatureSet(&[_]Feature{}),
158 .dependencies = featureSet(&[_]Feature{}),
159159 };
160160 result[@enumToInt(Feature.v62)] = .{
161161 .llvm_name = "v62",
162162 .description = "Enable Hexagon V62 architecture",
163 .dependencies = sparseFeatureSet(&[_]Feature{}),
163 .dependencies = featureSet(&[_]Feature{}),
164164 };
165165 result[@enumToInt(Feature.v65)] = .{
166166 .llvm_name = "v65",
167167 .description = "Enable Hexagon V65 architecture",
168 .dependencies = sparseFeatureSet(&[_]Feature{}),
168 .dependencies = featureSet(&[_]Feature{}),
169169 };
170170 result[@enumToInt(Feature.v66)] = .{
171171 .llvm_name = "v66",
172172 .description = "Enable Hexagon V66 architecture",
173 .dependencies = sparseFeatureSet(&[_]Feature{}),
173 .dependencies = featureSet(&[_]Feature{}),
174174 };
175175 result[@enumToInt(Feature.zreg)] = .{
176176 .llvm_name = "zreg",
177177 .description = "Hexagon ZReg extension instructions",
178 .dependencies = sparseFeatureSet(&[_]Feature{}),
178 .dependencies = featureSet(&[_]Feature{}),
179179 };
180180 const ti = @typeInfo(Feature);
181181 for (result) |*elem, i| {
182182 elem.index = i;
183183 elem.name = ti.Enum.fields[i].name;
184 elem.dependencies.initAsDependencies(i, &result);
185184 }
186185 break :blk result;
187186};
......@@ -190,7 +189,7 @@ pub const cpu = struct {
190189 pub const generic = Cpu{
191190 .name = "generic",
192191 .llvm_name = "generic",
193 .features = featureSet(&all_features, &[_]Feature{
192 .features = featureSet(&[_]Feature{
194193 .duplex,
195194 .memops,
196195 .nvj,
......@@ -205,7 +204,7 @@ pub const cpu = struct {
205204 pub const hexagonv5 = Cpu{
206205 .name = "hexagonv5",
207206 .llvm_name = "hexagonv5",
208 .features = featureSet(&all_features, &[_]Feature{
207 .features = featureSet(&[_]Feature{
209208 .duplex,
210209 .memops,
211210 .nvj,
......@@ -218,7 +217,7 @@ pub const cpu = struct {
218217 pub const hexagonv55 = Cpu{
219218 .name = "hexagonv55",
220219 .llvm_name = "hexagonv55",
221 .features = featureSet(&all_features, &[_]Feature{
220 .features = featureSet(&[_]Feature{
222221 .duplex,
223222 .memops,
224223 .nvj,
......@@ -232,7 +231,7 @@ pub const cpu = struct {
232231 pub const hexagonv60 = Cpu{
233232 .name = "hexagonv60",
234233 .llvm_name = "hexagonv60",
235 .features = featureSet(&all_features, &[_]Feature{
234 .features = featureSet(&[_]Feature{
236235 .duplex,
237236 .memops,
238237 .nvj,
......@@ -247,7 +246,7 @@ pub const cpu = struct {
247246 pub const hexagonv62 = Cpu{
248247 .name = "hexagonv62",
249248 .llvm_name = "hexagonv62",
250 .features = featureSet(&all_features, &[_]Feature{
249 .features = featureSet(&[_]Feature{
251250 .duplex,
252251 .memops,
253252 .nvj,
......@@ -263,7 +262,7 @@ pub const cpu = struct {
263262 pub const hexagonv65 = Cpu{
264263 .name = "hexagonv65",
265264 .llvm_name = "hexagonv65",
266 .features = featureSet(&all_features, &[_]Feature{
265 .features = featureSet(&[_]Feature{
267266 .duplex,
268267 .mem_noshuf,
269268 .memops,
......@@ -281,7 +280,7 @@ pub const cpu = struct {
281280 pub const hexagonv66 = Cpu{
282281 .name = "hexagonv66",
283282 .llvm_name = "hexagonv66",
284 .features = featureSet(&all_features, &[_]Feature{
283 .features = featureSet(&[_]Feature{
285284 .duplex,
286285 .mem_noshuf,
287286 .memops,
lib/std/target/mips.zig+66-67
......@@ -62,36 +62,36 @@ pub const all_features = blk: {
6262 result[@enumToInt(Feature.abs2008)] = .{
6363 .llvm_name = "abs2008",
6464 .description = "Disable IEEE 754-2008 abs.fmt mode",
65 .dependencies = sparseFeatureSet(&[_]Feature{}),
65 .dependencies = featureSet(&[_]Feature{}),
6666 };
6767 result[@enumToInt(Feature.cnmips)] = .{
6868 .llvm_name = "cnmips",
6969 .description = "Octeon cnMIPS Support",
70 .dependencies = sparseFeatureSet(&[_]Feature{
70 .dependencies = featureSet(&[_]Feature{
7171 .mips64r2,
7272 }),
7373 };
7474 result[@enumToInt(Feature.crc)] = .{
7575 .llvm_name = "crc",
7676 .description = "Mips R6 CRC ASE",
77 .dependencies = sparseFeatureSet(&[_]Feature{}),
77 .dependencies = featureSet(&[_]Feature{}),
7878 };
7979 result[@enumToInt(Feature.dsp)] = .{
8080 .llvm_name = "dsp",
8181 .description = "Mips DSP ASE",
82 .dependencies = sparseFeatureSet(&[_]Feature{}),
82 .dependencies = featureSet(&[_]Feature{}),
8383 };
8484 result[@enumToInt(Feature.dspr2)] = .{
8585 .llvm_name = "dspr2",
8686 .description = "Mips DSP-R2 ASE",
87 .dependencies = sparseFeatureSet(&[_]Feature{
87 .dependencies = featureSet(&[_]Feature{
8888 .dsp,
8989 }),
9090 };
9191 result[@enumToInt(Feature.dspr3)] = .{
9292 .llvm_name = "dspr3",
9393 .description = "Mips DSP-R3 ASE",
94 .dependencies = sparseFeatureSet(&[_]Feature{
94 .dependencies = featureSet(&[_]Feature{
9595 .dsp,
9696 .dspr2,
9797 }),
......@@ -99,59 +99,59 @@ pub const all_features = blk: {
9999 result[@enumToInt(Feature.eva)] = .{
100100 .llvm_name = "eva",
101101 .description = "Mips EVA ASE",
102 .dependencies = sparseFeatureSet(&[_]Feature{}),
102 .dependencies = featureSet(&[_]Feature{}),
103103 };
104104 result[@enumToInt(Feature.fp64)] = .{
105105 .llvm_name = "fp64",
106106 .description = "Support 64-bit FP registers",
107 .dependencies = sparseFeatureSet(&[_]Feature{}),
107 .dependencies = featureSet(&[_]Feature{}),
108108 };
109109 result[@enumToInt(Feature.fpxx)] = .{
110110 .llvm_name = "fpxx",
111111 .description = "Support for FPXX",
112 .dependencies = sparseFeatureSet(&[_]Feature{}),
112 .dependencies = featureSet(&[_]Feature{}),
113113 };
114114 result[@enumToInt(Feature.ginv)] = .{
115115 .llvm_name = "ginv",
116116 .description = "Mips Global Invalidate ASE",
117 .dependencies = sparseFeatureSet(&[_]Feature{}),
117 .dependencies = featureSet(&[_]Feature{}),
118118 };
119119 result[@enumToInt(Feature.gp64)] = .{
120120 .llvm_name = "gp64",
121121 .description = "General Purpose Registers are 64-bit wide",
122 .dependencies = sparseFeatureSet(&[_]Feature{}),
122 .dependencies = featureSet(&[_]Feature{}),
123123 };
124124 result[@enumToInt(Feature.long_calls)] = .{
125125 .llvm_name = "long-calls",
126126 .description = "Disable use of the jal instruction",
127 .dependencies = sparseFeatureSet(&[_]Feature{}),
127 .dependencies = featureSet(&[_]Feature{}),
128128 };
129129 result[@enumToInt(Feature.micromips)] = .{
130130 .llvm_name = "micromips",
131131 .description = "microMips mode",
132 .dependencies = sparseFeatureSet(&[_]Feature{}),
132 .dependencies = featureSet(&[_]Feature{}),
133133 };
134134 result[@enumToInt(Feature.mips1)] = .{
135135 .llvm_name = "mips1",
136136 .description = "Mips I ISA Support [highly experimental]",
137 .dependencies = sparseFeatureSet(&[_]Feature{}),
137 .dependencies = featureSet(&[_]Feature{}),
138138 };
139139 result[@enumToInt(Feature.mips16)] = .{
140140 .llvm_name = "mips16",
141141 .description = "Mips16 mode",
142 .dependencies = sparseFeatureSet(&[_]Feature{}),
142 .dependencies = featureSet(&[_]Feature{}),
143143 };
144144 result[@enumToInt(Feature.mips2)] = .{
145145 .llvm_name = "mips2",
146146 .description = "Mips II ISA Support [highly experimental]",
147 .dependencies = sparseFeatureSet(&[_]Feature{
147 .dependencies = featureSet(&[_]Feature{
148148 .mips1,
149149 }),
150150 };
151151 result[@enumToInt(Feature.mips3)] = .{
152152 .llvm_name = "mips3",
153153 .description = "MIPS III ISA Support [highly experimental]",
154 .dependencies = sparseFeatureSet(&[_]Feature{
154 .dependencies = featureSet(&[_]Feature{
155155 .fp64,
156156 .gp64,
157157 .mips2,
......@@ -162,7 +162,7 @@ pub const all_features = blk: {
162162 result[@enumToInt(Feature.mips32)] = .{
163163 .llvm_name = "mips32",
164164 .description = "Mips32 ISA Support",
165 .dependencies = sparseFeatureSet(&[_]Feature{
165 .dependencies = featureSet(&[_]Feature{
166166 .mips2,
167167 .mips3_32,
168168 .mips4_32,
......@@ -171,7 +171,7 @@ pub const all_features = blk: {
171171 result[@enumToInt(Feature.mips32r2)] = .{
172172 .llvm_name = "mips32r2",
173173 .description = "Mips32r2 ISA Support",
174 .dependencies = sparseFeatureSet(&[_]Feature{
174 .dependencies = featureSet(&[_]Feature{
175175 .mips32,
176176 .mips3_32r2,
177177 .mips4_32r2,
......@@ -181,21 +181,21 @@ pub const all_features = blk: {
181181 result[@enumToInt(Feature.mips32r3)] = .{
182182 .llvm_name = "mips32r3",
183183 .description = "Mips32r3 ISA Support",
184 .dependencies = sparseFeatureSet(&[_]Feature{
184 .dependencies = featureSet(&[_]Feature{
185185 .mips32r2,
186186 }),
187187 };
188188 result[@enumToInt(Feature.mips32r5)] = .{
189189 .llvm_name = "mips32r5",
190190 .description = "Mips32r5 ISA Support",
191 .dependencies = sparseFeatureSet(&[_]Feature{
191 .dependencies = featureSet(&[_]Feature{
192192 .mips32r3,
193193 }),
194194 };
195195 result[@enumToInt(Feature.mips32r6)] = .{
196196 .llvm_name = "mips32r6",
197197 .description = "Mips32r6 ISA Support [experimental]",
198 .dependencies = sparseFeatureSet(&[_]Feature{
198 .dependencies = featureSet(&[_]Feature{
199199 .abs2008,
200200 .fp64,
201201 .mips32r5,
......@@ -205,17 +205,17 @@ pub const all_features = blk: {
205205 result[@enumToInt(Feature.mips3_32)] = .{
206206 .llvm_name = "mips3_32",
207207 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
208 .dependencies = sparseFeatureSet(&[_]Feature{}),
208 .dependencies = featureSet(&[_]Feature{}),
209209 };
210210 result[@enumToInt(Feature.mips3_32r2)] = .{
211211 .llvm_name = "mips3_32r2",
212212 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
213 .dependencies = sparseFeatureSet(&[_]Feature{}),
213 .dependencies = featureSet(&[_]Feature{}),
214214 };
215215 result[@enumToInt(Feature.mips4)] = .{
216216 .llvm_name = "mips4",
217217 .description = "MIPS IV ISA Support",
218 .dependencies = sparseFeatureSet(&[_]Feature{
218 .dependencies = featureSet(&[_]Feature{
219219 .mips3,
220220 .mips4_32,
221221 .mips4_32r2,
......@@ -224,17 +224,17 @@ pub const all_features = blk: {
224224 result[@enumToInt(Feature.mips4_32)] = .{
225225 .llvm_name = "mips4_32",
226226 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
227 .dependencies = sparseFeatureSet(&[_]Feature{}),
227 .dependencies = featureSet(&[_]Feature{}),
228228 };
229229 result[@enumToInt(Feature.mips4_32r2)] = .{
230230 .llvm_name = "mips4_32r2",
231231 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
232 .dependencies = sparseFeatureSet(&[_]Feature{}),
232 .dependencies = featureSet(&[_]Feature{}),
233233 };
234234 result[@enumToInt(Feature.mips5)] = .{
235235 .llvm_name = "mips5",
236236 .description = "MIPS V ISA Support [highly experimental]",
237 .dependencies = sparseFeatureSet(&[_]Feature{
237 .dependencies = featureSet(&[_]Feature{
238238 .mips4,
239239 .mips5_32r2,
240240 }),
......@@ -242,12 +242,12 @@ pub const all_features = blk: {
242242 result[@enumToInt(Feature.mips5_32r2)] = .{
243243 .llvm_name = "mips5_32r2",
244244 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
245 .dependencies = sparseFeatureSet(&[_]Feature{}),
245 .dependencies = featureSet(&[_]Feature{}),
246246 };
247247 result[@enumToInt(Feature.mips64)] = .{
248248 .llvm_name = "mips64",
249249 .description = "Mips64 ISA Support",
250 .dependencies = sparseFeatureSet(&[_]Feature{
250 .dependencies = featureSet(&[_]Feature{
251251 .mips32,
252252 .mips5,
253253 }),
......@@ -255,7 +255,7 @@ pub const all_features = blk: {
255255 result[@enumToInt(Feature.mips64r2)] = .{
256256 .llvm_name = "mips64r2",
257257 .description = "Mips64r2 ISA Support",
258 .dependencies = sparseFeatureSet(&[_]Feature{
258 .dependencies = featureSet(&[_]Feature{
259259 .mips32r2,
260260 .mips64,
261261 }),
......@@ -263,7 +263,7 @@ pub const all_features = blk: {
263263 result[@enumToInt(Feature.mips64r3)] = .{
264264 .llvm_name = "mips64r3",
265265 .description = "Mips64r3 ISA Support",
266 .dependencies = sparseFeatureSet(&[_]Feature{
266 .dependencies = featureSet(&[_]Feature{
267267 .mips32r3,
268268 .mips64r2,
269269 }),
......@@ -271,7 +271,7 @@ pub const all_features = blk: {
271271 result[@enumToInt(Feature.mips64r5)] = .{
272272 .llvm_name = "mips64r5",
273273 .description = "Mips64r5 ISA Support",
274 .dependencies = sparseFeatureSet(&[_]Feature{
274 .dependencies = featureSet(&[_]Feature{
275275 .mips32r5,
276276 .mips64r3,
277277 }),
......@@ -279,7 +279,7 @@ pub const all_features = blk: {
279279 result[@enumToInt(Feature.mips64r6)] = .{
280280 .llvm_name = "mips64r6",
281281 .description = "Mips64r6 ISA Support [experimental]",
282 .dependencies = sparseFeatureSet(&[_]Feature{
282 .dependencies = featureSet(&[_]Feature{
283283 .abs2008,
284284 .mips32r6,
285285 .mips64r5,
......@@ -289,85 +289,84 @@ pub const all_features = blk: {
289289 result[@enumToInt(Feature.msa)] = .{
290290 .llvm_name = "msa",
291291 .description = "Mips MSA ASE",
292 .dependencies = sparseFeatureSet(&[_]Feature{}),
292 .dependencies = featureSet(&[_]Feature{}),
293293 };
294294 result[@enumToInt(Feature.mt)] = .{
295295 .llvm_name = "mt",
296296 .description = "Mips MT ASE",
297 .dependencies = sparseFeatureSet(&[_]Feature{}),
297 .dependencies = featureSet(&[_]Feature{}),
298298 };
299299 result[@enumToInt(Feature.nan2008)] = .{
300300 .llvm_name = "nan2008",
301301 .description = "IEEE 754-2008 NaN encoding",
302 .dependencies = sparseFeatureSet(&[_]Feature{}),
302 .dependencies = featureSet(&[_]Feature{}),
303303 };
304304 result[@enumToInt(Feature.noabicalls)] = .{
305305 .llvm_name = "noabicalls",
306306 .description = "Disable SVR4-style position-independent code",
307 .dependencies = sparseFeatureSet(&[_]Feature{}),
307 .dependencies = featureSet(&[_]Feature{}),
308308 };
309309 result[@enumToInt(Feature.nomadd4)] = .{
310310 .llvm_name = "nomadd4",
311311 .description = "Disable 4-operand madd.fmt and related instructions",
312 .dependencies = sparseFeatureSet(&[_]Feature{}),
312 .dependencies = featureSet(&[_]Feature{}),
313313 };
314314 result[@enumToInt(Feature.nooddspreg)] = .{
315315 .llvm_name = "nooddspreg",
316316 .description = "Disable odd numbered single-precision registers",
317 .dependencies = sparseFeatureSet(&[_]Feature{}),
317 .dependencies = featureSet(&[_]Feature{}),
318318 };
319319 result[@enumToInt(Feature.p5600)] = .{
320320 .llvm_name = "p5600",
321321 .description = "The P5600 Processor",
322 .dependencies = sparseFeatureSet(&[_]Feature{
322 .dependencies = featureSet(&[_]Feature{
323323 .mips32r5,
324324 }),
325325 };
326326 result[@enumToInt(Feature.ptr64)] = .{
327327 .llvm_name = "ptr64",
328328 .description = "Pointers are 64-bit wide",
329 .dependencies = sparseFeatureSet(&[_]Feature{}),
329 .dependencies = featureSet(&[_]Feature{}),
330330 };
331331 result[@enumToInt(Feature.single_float)] = .{
332332 .llvm_name = "single-float",
333333 .description = "Only supports single precision float",
334 .dependencies = sparseFeatureSet(&[_]Feature{}),
334 .dependencies = featureSet(&[_]Feature{}),
335335 };
336336 result[@enumToInt(Feature.soft_float)] = .{
337337 .llvm_name = "soft-float",
338338 .description = "Does not support floating point instructions",
339 .dependencies = sparseFeatureSet(&[_]Feature{}),
339 .dependencies = featureSet(&[_]Feature{}),
340340 };
341341 result[@enumToInt(Feature.sym32)] = .{
342342 .llvm_name = "sym32",
343343 .description = "Symbols are 32 bit on Mips64",
344 .dependencies = sparseFeatureSet(&[_]Feature{}),
344 .dependencies = featureSet(&[_]Feature{}),
345345 };
346346 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{
347347 .llvm_name = "use-indirect-jump-hazard",
348348 .description = "Use indirect jump guards to prevent certain speculation based attacks",
349 .dependencies = sparseFeatureSet(&[_]Feature{}),
349 .dependencies = featureSet(&[_]Feature{}),
350350 };
351351 result[@enumToInt(Feature.use_tcc_in_div)] = .{
352352 .llvm_name = "use-tcc-in-div",
353353 .description = "Force the assembler to use trapping",
354 .dependencies = sparseFeatureSet(&[_]Feature{}),
354 .dependencies = featureSet(&[_]Feature{}),
355355 };
356356 result[@enumToInt(Feature.vfpu)] = .{
357357 .llvm_name = "vfpu",
358358 .description = "Enable vector FPU instructions",
359 .dependencies = sparseFeatureSet(&[_]Feature{}),
359 .dependencies = featureSet(&[_]Feature{}),
360360 };
361361 result[@enumToInt(Feature.virt)] = .{
362362 .llvm_name = "virt",
363363 .description = "Mips Virtualization ASE",
364 .dependencies = sparseFeatureSet(&[_]Feature{}),
364 .dependencies = featureSet(&[_]Feature{}),
365365 };
366366 const ti = @typeInfo(Feature);
367367 for (result) |*elem, i| {
368368 elem.index = i;
369369 elem.name = ti.Enum.fields[i].name;
370 elem.dependencies.initAsDependencies(i, &result);
371370 }
372371 break :blk result;
373372};
......@@ -376,112 +375,112 @@ pub const cpu = struct {
376375 pub const mips1 = Cpu{
377376 .name = "mips1",
378377 .llvm_name = "mips1",
379 .features = featureSet(&all_features, &[_]Feature{
378 .features = featureSet(&[_]Feature{
380379 .mips1,
381380 }),
382381 };
383382 pub const mips2 = Cpu{
384383 .name = "mips2",
385384 .llvm_name = "mips2",
386 .features = featureSet(&all_features, &[_]Feature{
385 .features = featureSet(&[_]Feature{
387386 .mips2,
388387 }),
389388 };
390389 pub const mips3 = Cpu{
391390 .name = "mips3",
392391 .llvm_name = "mips3",
393 .features = featureSet(&all_features, &[_]Feature{
392 .features = featureSet(&[_]Feature{
394393 .mips3,
395394 }),
396395 };
397396 pub const mips32 = Cpu{
398397 .name = "mips32",
399398 .llvm_name = "mips32",
400 .features = featureSet(&all_features, &[_]Feature{
399 .features = featureSet(&[_]Feature{
401400 .mips32,
402401 }),
403402 };
404403 pub const mips32r2 = Cpu{
405404 .name = "mips32r2",
406405 .llvm_name = "mips32r2",
407 .features = featureSet(&all_features, &[_]Feature{
406 .features = featureSet(&[_]Feature{
408407 .mips32r2,
409408 }),
410409 };
411410 pub const mips32r3 = Cpu{
412411 .name = "mips32r3",
413412 .llvm_name = "mips32r3",
414 .features = featureSet(&all_features, &[_]Feature{
413 .features = featureSet(&[_]Feature{
415414 .mips32r3,
416415 }),
417416 };
418417 pub const mips32r5 = Cpu{
419418 .name = "mips32r5",
420419 .llvm_name = "mips32r5",
421 .features = featureSet(&all_features, &[_]Feature{
420 .features = featureSet(&[_]Feature{
422421 .mips32r5,
423422 }),
424423 };
425424 pub const mips32r6 = Cpu{
426425 .name = "mips32r6",
427426 .llvm_name = "mips32r6",
428 .features = featureSet(&all_features, &[_]Feature{
427 .features = featureSet(&[_]Feature{
429428 .mips32r6,
430429 }),
431430 };
432431 pub const mips4 = Cpu{
433432 .name = "mips4",
434433 .llvm_name = "mips4",
435 .features = featureSet(&all_features, &[_]Feature{
434 .features = featureSet(&[_]Feature{
436435 .mips4,
437436 }),
438437 };
439438 pub const mips5 = Cpu{
440439 .name = "mips5",
441440 .llvm_name = "mips5",
442 .features = featureSet(&all_features, &[_]Feature{
441 .features = featureSet(&[_]Feature{
443442 .mips5,
444443 }),
445444 };
446445 pub const mips64 = Cpu{
447446 .name = "mips64",
448447 .llvm_name = "mips64",
449 .features = featureSet(&all_features, &[_]Feature{
448 .features = featureSet(&[_]Feature{
450449 .mips64,
451450 }),
452451 };
453452 pub const mips64r2 = Cpu{
454453 .name = "mips64r2",
455454 .llvm_name = "mips64r2",
456 .features = featureSet(&all_features, &[_]Feature{
455 .features = featureSet(&[_]Feature{
457456 .mips64r2,
458457 }),
459458 };
460459 pub const mips64r3 = Cpu{
461460 .name = "mips64r3",
462461 .llvm_name = "mips64r3",
463 .features = featureSet(&all_features, &[_]Feature{
462 .features = featureSet(&[_]Feature{
464463 .mips64r3,
465464 }),
466465 };
467466 pub const mips64r5 = Cpu{
468467 .name = "mips64r5",
469468 .llvm_name = "mips64r5",
470 .features = featureSet(&all_features, &[_]Feature{
469 .features = featureSet(&[_]Feature{
471470 .mips64r5,
472471 }),
473472 };
474473 pub const mips64r6 = Cpu{
475474 .name = "mips64r6",
476475 .llvm_name = "mips64r6",
477 .features = featureSet(&all_features, &[_]Feature{
476 .features = featureSet(&[_]Feature{
478477 .mips64r6,
479478 }),
480479 };
481480 pub const octeon = Cpu{
482481 .name = "octeon",
483482 .llvm_name = "octeon",
484 .features = featureSet(&all_features, &[_]Feature{
483 .features = featureSet(&[_]Feature{
485484 .cnmips,
486485 .mips64r2,
487486 }),
......@@ -489,7 +488,7 @@ pub const cpu = struct {
489488 pub const p5600 = Cpu{
490489 .name = "p5600",
491490 .llvm_name = "p5600",
492 .features = featureSet(&all_features, &[_]Feature{
491 .features = featureSet(&[_]Feature{
493492 .p5600,
494493 }),
495494 };
lib/std/target/msp430.zig+7-8
......@@ -17,28 +17,27 @@ pub const all_features = blk: {
1717 result[@enumToInt(Feature.ext)] = .{
1818 .llvm_name = "ext",
1919 .description = "Enable MSP430-X extensions",
20 .dependencies = sparseFeatureSet(&[_]Feature{}),
20 .dependencies = featureSet(&[_]Feature{}),
2121 };
2222 result[@enumToInt(Feature.hwmult16)] = .{
2323 .llvm_name = "hwmult16",
2424 .description = "Enable 16-bit hardware multiplier",
25 .dependencies = sparseFeatureSet(&[_]Feature{}),
25 .dependencies = featureSet(&[_]Feature{}),
2626 };
2727 result[@enumToInt(Feature.hwmult32)] = .{
2828 .llvm_name = "hwmult32",
2929 .description = "Enable 32-bit hardware multiplier",
30 .dependencies = sparseFeatureSet(&[_]Feature{}),
30 .dependencies = featureSet(&[_]Feature{}),
3131 };
3232 result[@enumToInt(Feature.hwmultf5)] = .{
3333 .llvm_name = "hwmultf5",
3434 .description = "Enable F5 series hardware multiplier",
35 .dependencies = sparseFeatureSet(&[_]Feature{}),
35 .dependencies = featureSet(&[_]Feature{}),
3636 };
3737 const ti = @typeInfo(Feature);
3838 for (result) |*elem, i| {
3939 elem.index = i;
4040 elem.name = ti.Enum.fields[i].name;
41 elem.dependencies.initAsDependencies(i, &result);
4241 }
4342 break :blk result;
4443};
......@@ -47,17 +46,17 @@ pub const cpu = struct {
4746 pub const generic = Cpu{
4847 .name = "generic",
4948 .llvm_name = "generic",
50 .features = featureSet(&all_features, &[_]Feature{}),
49 .features = featureSet(&[_]Feature{}),
5150 };
5251 pub const msp430 = Cpu{
5352 .name = "msp430",
5453 .llvm_name = "msp430",
55 .features = featureSet(&all_features, &[_]Feature{}),
54 .features = featureSet(&[_]Feature{}),
5655 };
5756 pub const msp430x = Cpu{
5857 .name = "msp430x",
5958 .llvm_name = "msp430x",
60 .features = featureSet(&all_features, &[_]Feature{
59 .features = featureSet(&[_]Feature{
6160 .ext,
6261 }),
6362 };
lib/std/target/nvptx.zig+40-41
......@@ -38,133 +38,132 @@ pub const all_features = blk: {
3838 result[@enumToInt(Feature.ptx32)] = .{
3939 .llvm_name = "ptx32",
4040 .description = "Use PTX version 3.2",
41 .dependencies = sparseFeatureSet(&[_]Feature{}),
41 .dependencies = featureSet(&[_]Feature{}),
4242 };
4343 result[@enumToInt(Feature.ptx40)] = .{
4444 .llvm_name = "ptx40",
4545 .description = "Use PTX version 4.0",
46 .dependencies = sparseFeatureSet(&[_]Feature{}),
46 .dependencies = featureSet(&[_]Feature{}),
4747 };
4848 result[@enumToInt(Feature.ptx41)] = .{
4949 .llvm_name = "ptx41",
5050 .description = "Use PTX version 4.1",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),
51 .dependencies = featureSet(&[_]Feature{}),
5252 };
5353 result[@enumToInt(Feature.ptx42)] = .{
5454 .llvm_name = "ptx42",
5555 .description = "Use PTX version 4.2",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),
56 .dependencies = featureSet(&[_]Feature{}),
5757 };
5858 result[@enumToInt(Feature.ptx43)] = .{
5959 .llvm_name = "ptx43",
6060 .description = "Use PTX version 4.3",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),
61 .dependencies = featureSet(&[_]Feature{}),
6262 };
6363 result[@enumToInt(Feature.ptx50)] = .{
6464 .llvm_name = "ptx50",
6565 .description = "Use PTX version 5.0",
66 .dependencies = sparseFeatureSet(&[_]Feature{}),
66 .dependencies = featureSet(&[_]Feature{}),
6767 };
6868 result[@enumToInt(Feature.ptx60)] = .{
6969 .llvm_name = "ptx60",
7070 .description = "Use PTX version 6.0",
71 .dependencies = sparseFeatureSet(&[_]Feature{}),
71 .dependencies = featureSet(&[_]Feature{}),
7272 };
7373 result[@enumToInt(Feature.ptx61)] = .{
7474 .llvm_name = "ptx61",
7575 .description = "Use PTX version 6.1",
76 .dependencies = sparseFeatureSet(&[_]Feature{}),
76 .dependencies = featureSet(&[_]Feature{}),
7777 };
7878 result[@enumToInt(Feature.ptx63)] = .{
7979 .llvm_name = "ptx63",
8080 .description = "Use PTX version 6.3",
81 .dependencies = sparseFeatureSet(&[_]Feature{}),
81 .dependencies = featureSet(&[_]Feature{}),
8282 };
8383 result[@enumToInt(Feature.ptx64)] = .{
8484 .llvm_name = "ptx64",
8585 .description = "Use PTX version 6.4",
86 .dependencies = sparseFeatureSet(&[_]Feature{}),
86 .dependencies = featureSet(&[_]Feature{}),
8787 };
8888 result[@enumToInt(Feature.sm_20)] = .{
8989 .llvm_name = "sm_20",
9090 .description = "Target SM 2.0",
91 .dependencies = sparseFeatureSet(&[_]Feature{}),
91 .dependencies = featureSet(&[_]Feature{}),
9292 };
9393 result[@enumToInt(Feature.sm_21)] = .{
9494 .llvm_name = "sm_21",
9595 .description = "Target SM 2.1",
96 .dependencies = sparseFeatureSet(&[_]Feature{}),
96 .dependencies = featureSet(&[_]Feature{}),
9797 };
9898 result[@enumToInt(Feature.sm_30)] = .{
9999 .llvm_name = "sm_30",
100100 .description = "Target SM 3.0",
101 .dependencies = sparseFeatureSet(&[_]Feature{}),
101 .dependencies = featureSet(&[_]Feature{}),
102102 };
103103 result[@enumToInt(Feature.sm_32)] = .{
104104 .llvm_name = "sm_32",
105105 .description = "Target SM 3.2",
106 .dependencies = sparseFeatureSet(&[_]Feature{}),
106 .dependencies = featureSet(&[_]Feature{}),
107107 };
108108 result[@enumToInt(Feature.sm_35)] = .{
109109 .llvm_name = "sm_35",
110110 .description = "Target SM 3.5",
111 .dependencies = sparseFeatureSet(&[_]Feature{}),
111 .dependencies = featureSet(&[_]Feature{}),
112112 };
113113 result[@enumToInt(Feature.sm_37)] = .{
114114 .llvm_name = "sm_37",
115115 .description = "Target SM 3.7",
116 .dependencies = sparseFeatureSet(&[_]Feature{}),
116 .dependencies = featureSet(&[_]Feature{}),
117117 };
118118 result[@enumToInt(Feature.sm_50)] = .{
119119 .llvm_name = "sm_50",
120120 .description = "Target SM 5.0",
121 .dependencies = sparseFeatureSet(&[_]Feature{}),
121 .dependencies = featureSet(&[_]Feature{}),
122122 };
123123 result[@enumToInt(Feature.sm_52)] = .{
124124 .llvm_name = "sm_52",
125125 .description = "Target SM 5.2",
126 .dependencies = sparseFeatureSet(&[_]Feature{}),
126 .dependencies = featureSet(&[_]Feature{}),
127127 };
128128 result[@enumToInt(Feature.sm_53)] = .{
129129 .llvm_name = "sm_53",
130130 .description = "Target SM 5.3",
131 .dependencies = sparseFeatureSet(&[_]Feature{}),
131 .dependencies = featureSet(&[_]Feature{}),
132132 };
133133 result[@enumToInt(Feature.sm_60)] = .{
134134 .llvm_name = "sm_60",
135135 .description = "Target SM 6.0",
136 .dependencies = sparseFeatureSet(&[_]Feature{}),
136 .dependencies = featureSet(&[_]Feature{}),
137137 };
138138 result[@enumToInt(Feature.sm_61)] = .{
139139 .llvm_name = "sm_61",
140140 .description = "Target SM 6.1",
141 .dependencies = sparseFeatureSet(&[_]Feature{}),
141 .dependencies = featureSet(&[_]Feature{}),
142142 };
143143 result[@enumToInt(Feature.sm_62)] = .{
144144 .llvm_name = "sm_62",
145145 .description = "Target SM 6.2",
146 .dependencies = sparseFeatureSet(&[_]Feature{}),
146 .dependencies = featureSet(&[_]Feature{}),
147147 };
148148 result[@enumToInt(Feature.sm_70)] = .{
149149 .llvm_name = "sm_70",
150150 .description = "Target SM 7.0",
151 .dependencies = sparseFeatureSet(&[_]Feature{}),
151 .dependencies = featureSet(&[_]Feature{}),
152152 };
153153 result[@enumToInt(Feature.sm_72)] = .{
154154 .llvm_name = "sm_72",
155155 .description = "Target SM 7.2",
156 .dependencies = sparseFeatureSet(&[_]Feature{}),
156 .dependencies = featureSet(&[_]Feature{}),
157157 };
158158 result[@enumToInt(Feature.sm_75)] = .{
159159 .llvm_name = "sm_75",
160160 .description = "Target SM 7.5",
161 .dependencies = sparseFeatureSet(&[_]Feature{}),
161 .dependencies = featureSet(&[_]Feature{}),
162162 };
163163 const ti = @typeInfo(Feature);
164164 for (result) |*elem, i| {
165165 elem.index = i;
166166 elem.name = ti.Enum.fields[i].name;
167 elem.dependencies.initAsDependencies(i, &result);
168167 }
169168 break :blk result;
170169};
......@@ -173,28 +172,28 @@ pub const cpu = struct {
173172 pub const sm_20 = Cpu{
174173 .name = "sm_20",
175174 .llvm_name = "sm_20",
176 .features = featureSet(&all_features, &[_]Feature{
175 .features = featureSet(&[_]Feature{
177176 .sm_20,
178177 }),
179178 };
180179 pub const sm_21 = Cpu{
181180 .name = "sm_21",
182181 .llvm_name = "sm_21",
183 .features = featureSet(&all_features, &[_]Feature{
182 .features = featureSet(&[_]Feature{
184183 .sm_21,
185184 }),
186185 };
187186 pub const sm_30 = Cpu{
188187 .name = "sm_30",
189188 .llvm_name = "sm_30",
190 .features = featureSet(&all_features, &[_]Feature{
189 .features = featureSet(&[_]Feature{
191190 .sm_30,
192191 }),
193192 };
194193 pub const sm_32 = Cpu{
195194 .name = "sm_32",
196195 .llvm_name = "sm_32",
197 .features = featureSet(&all_features, &[_]Feature{
196 .features = featureSet(&[_]Feature{
198197 .ptx40,
199198 .sm_32,
200199 }),
......@@ -202,14 +201,14 @@ pub const cpu = struct {
202201 pub const sm_35 = Cpu{
203202 .name = "sm_35",
204203 .llvm_name = "sm_35",
205 .features = featureSet(&all_features, &[_]Feature{
204 .features = featureSet(&[_]Feature{
206205 .sm_35,
207206 }),
208207 };
209208 pub const sm_37 = Cpu{
210209 .name = "sm_37",
211210 .llvm_name = "sm_37",
212 .features = featureSet(&all_features, &[_]Feature{
211 .features = featureSet(&[_]Feature{
213212 .ptx41,
214213 .sm_37,
215214 }),
......@@ -217,7 +216,7 @@ pub const cpu = struct {
217216 pub const sm_50 = Cpu{
218217 .name = "sm_50",
219218 .llvm_name = "sm_50",
220 .features = featureSet(&all_features, &[_]Feature{
219 .features = featureSet(&[_]Feature{
221220 .ptx40,
222221 .sm_50,
223222 }),
......@@ -225,7 +224,7 @@ pub const cpu = struct {
225224 pub const sm_52 = Cpu{
226225 .name = "sm_52",
227226 .llvm_name = "sm_52",
228 .features = featureSet(&all_features, &[_]Feature{
227 .features = featureSet(&[_]Feature{
229228 .ptx41,
230229 .sm_52,
231230 }),
......@@ -233,7 +232,7 @@ pub const cpu = struct {
233232 pub const sm_53 = Cpu{
234233 .name = "sm_53",
235234 .llvm_name = "sm_53",
236 .features = featureSet(&all_features, &[_]Feature{
235 .features = featureSet(&[_]Feature{
237236 .ptx42,
238237 .sm_53,
239238 }),
......@@ -241,7 +240,7 @@ pub const cpu = struct {
241240 pub const sm_60 = Cpu{
242241 .name = "sm_60",
243242 .llvm_name = "sm_60",
244 .features = featureSet(&all_features, &[_]Feature{
243 .features = featureSet(&[_]Feature{
245244 .ptx50,
246245 .sm_60,
247246 }),
......@@ -249,7 +248,7 @@ pub const cpu = struct {
249248 pub const sm_61 = Cpu{
250249 .name = "sm_61",
251250 .llvm_name = "sm_61",
252 .features = featureSet(&all_features, &[_]Feature{
251 .features = featureSet(&[_]Feature{
253252 .ptx50,
254253 .sm_61,
255254 }),
......@@ -257,7 +256,7 @@ pub const cpu = struct {
257256 pub const sm_62 = Cpu{
258257 .name = "sm_62",
259258 .llvm_name = "sm_62",
260 .features = featureSet(&all_features, &[_]Feature{
259 .features = featureSet(&[_]Feature{
261260 .ptx50,
262261 .sm_62,
263262 }),
......@@ -265,7 +264,7 @@ pub const cpu = struct {
265264 pub const sm_70 = Cpu{
266265 .name = "sm_70",
267266 .llvm_name = "sm_70",
268 .features = featureSet(&all_features, &[_]Feature{
267 .features = featureSet(&[_]Feature{
269268 .ptx60,
270269 .sm_70,
271270 }),
......@@ -273,7 +272,7 @@ pub const cpu = struct {
273272 pub const sm_72 = Cpu{
274273 .name = "sm_72",
275274 .llvm_name = "sm_72",
276 .features = featureSet(&all_features, &[_]Feature{
275 .features = featureSet(&[_]Feature{
277276 .ptx61,
278277 .sm_72,
279278 }),
......@@ -281,7 +280,7 @@ pub const cpu = struct {
281280 pub const sm_75 = Cpu{
282281 .name = "sm_75",
283282 .llvm_name = "sm_75",
284 .features = featureSet(&all_features, &[_]Feature{
283 .features = featureSet(&[_]Feature{
285284 .ptx63,
286285 .sm_75,
287286 }),
lib/std/target/powerpc.zig+88-89
......@@ -64,216 +64,216 @@ pub const all_features = blk: {
6464 result[@enumToInt(Feature.@"64bit")] = .{
6565 .llvm_name = "64bit",
6666 .description = "Enable 64-bit instructions",
67 .dependencies = sparseFeatureSet(&[_]Feature{}),
67 .dependencies = featureSet(&[_]Feature{}),
6868 };
6969 result[@enumToInt(Feature.@"64bitregs")] = .{
7070 .llvm_name = "64bitregs",
7171 .description = "Enable 64-bit registers usage for ppc32 [beta]",
72 .dependencies = sparseFeatureSet(&[_]Feature{}),
72 .dependencies = featureSet(&[_]Feature{}),
7373 };
7474 result[@enumToInt(Feature.altivec)] = .{
7575 .llvm_name = "altivec",
7676 .description = "Enable Altivec instructions",
77 .dependencies = sparseFeatureSet(&[_]Feature{
77 .dependencies = featureSet(&[_]Feature{
7878 .fpu,
7979 }),
8080 };
8181 result[@enumToInt(Feature.booke)] = .{
8282 .llvm_name = "booke",
8383 .description = "Enable Book E instructions",
84 .dependencies = sparseFeatureSet(&[_]Feature{
84 .dependencies = featureSet(&[_]Feature{
8585 .icbt,
8686 }),
8787 };
8888 result[@enumToInt(Feature.bpermd)] = .{
8989 .llvm_name = "bpermd",
9090 .description = "Enable the bpermd instruction",
91 .dependencies = sparseFeatureSet(&[_]Feature{}),
91 .dependencies = featureSet(&[_]Feature{}),
9292 };
9393 result[@enumToInt(Feature.cmpb)] = .{
9494 .llvm_name = "cmpb",
9595 .description = "Enable the cmpb instruction",
96 .dependencies = sparseFeatureSet(&[_]Feature{}),
96 .dependencies = featureSet(&[_]Feature{}),
9797 };
9898 result[@enumToInt(Feature.crbits)] = .{
9999 .llvm_name = "crbits",
100100 .description = "Use condition-register bits individually",
101 .dependencies = sparseFeatureSet(&[_]Feature{}),
101 .dependencies = featureSet(&[_]Feature{}),
102102 };
103103 result[@enumToInt(Feature.crypto)] = .{
104104 .llvm_name = "crypto",
105105 .description = "Enable POWER8 Crypto instructions",
106 .dependencies = sparseFeatureSet(&[_]Feature{
106 .dependencies = featureSet(&[_]Feature{
107107 .power8_altivec,
108108 }),
109109 };
110110 result[@enumToInt(Feature.direct_move)] = .{
111111 .llvm_name = "direct-move",
112112 .description = "Enable Power8 direct move instructions",
113 .dependencies = sparseFeatureSet(&[_]Feature{
113 .dependencies = featureSet(&[_]Feature{
114114 .vsx,
115115 }),
116116 };
117117 result[@enumToInt(Feature.e500)] = .{
118118 .llvm_name = "e500",
119119 .description = "Enable E500/E500mc instructions",
120 .dependencies = sparseFeatureSet(&[_]Feature{}),
120 .dependencies = featureSet(&[_]Feature{}),
121121 };
122122 result[@enumToInt(Feature.extdiv)] = .{
123123 .llvm_name = "extdiv",
124124 .description = "Enable extended divide instructions",
125 .dependencies = sparseFeatureSet(&[_]Feature{}),
125 .dependencies = featureSet(&[_]Feature{}),
126126 };
127127 result[@enumToInt(Feature.fcpsgn)] = .{
128128 .llvm_name = "fcpsgn",
129129 .description = "Enable the fcpsgn instruction",
130 .dependencies = sparseFeatureSet(&[_]Feature{
130 .dependencies = featureSet(&[_]Feature{
131131 .fpu,
132132 }),
133133 };
134134 result[@enumToInt(Feature.float128)] = .{
135135 .llvm_name = "float128",
136136 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
137 .dependencies = sparseFeatureSet(&[_]Feature{
137 .dependencies = featureSet(&[_]Feature{
138138 .vsx,
139139 }),
140140 };
141141 result[@enumToInt(Feature.fpcvt)] = .{
142142 .llvm_name = "fpcvt",
143143 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
144 .dependencies = sparseFeatureSet(&[_]Feature{
144 .dependencies = featureSet(&[_]Feature{
145145 .fpu,
146146 }),
147147 };
148148 result[@enumToInt(Feature.fprnd)] = .{
149149 .llvm_name = "fprnd",
150150 .description = "Enable the fri[mnpz] instructions",
151 .dependencies = sparseFeatureSet(&[_]Feature{
151 .dependencies = featureSet(&[_]Feature{
152152 .fpu,
153153 }),
154154 };
155155 result[@enumToInt(Feature.fpu)] = .{
156156 .llvm_name = "fpu",
157157 .description = "Enable classic FPU instructions",
158 .dependencies = sparseFeatureSet(&[_]Feature{
158 .dependencies = featureSet(&[_]Feature{
159159 .hard_float,
160160 }),
161161 };
162162 result[@enumToInt(Feature.fre)] = .{
163163 .llvm_name = "fre",
164164 .description = "Enable the fre instruction",
165 .dependencies = sparseFeatureSet(&[_]Feature{
165 .dependencies = featureSet(&[_]Feature{
166166 .fpu,
167167 }),
168168 };
169169 result[@enumToInt(Feature.fres)] = .{
170170 .llvm_name = "fres",
171171 .description = "Enable the fres instruction",
172 .dependencies = sparseFeatureSet(&[_]Feature{
172 .dependencies = featureSet(&[_]Feature{
173173 .fpu,
174174 }),
175175 };
176176 result[@enumToInt(Feature.frsqrte)] = .{
177177 .llvm_name = "frsqrte",
178178 .description = "Enable the frsqrte instruction",
179 .dependencies = sparseFeatureSet(&[_]Feature{
179 .dependencies = featureSet(&[_]Feature{
180180 .fpu,
181181 }),
182182 };
183183 result[@enumToInt(Feature.frsqrtes)] = .{
184184 .llvm_name = "frsqrtes",
185185 .description = "Enable the frsqrtes instruction",
186 .dependencies = sparseFeatureSet(&[_]Feature{
186 .dependencies = featureSet(&[_]Feature{
187187 .fpu,
188188 }),
189189 };
190190 result[@enumToInt(Feature.fsqrt)] = .{
191191 .llvm_name = "fsqrt",
192192 .description = "Enable the fsqrt instruction",
193 .dependencies = sparseFeatureSet(&[_]Feature{
193 .dependencies = featureSet(&[_]Feature{
194194 .fpu,
195195 }),
196196 };
197197 result[@enumToInt(Feature.hard_float)] = .{
198198 .llvm_name = "hard-float",
199199 .description = "Enable floating-point instructions",
200 .dependencies = sparseFeatureSet(&[_]Feature{}),
200 .dependencies = featureSet(&[_]Feature{}),
201201 };
202202 result[@enumToInt(Feature.htm)] = .{
203203 .llvm_name = "htm",
204204 .description = "Enable Hardware Transactional Memory instructions",
205 .dependencies = sparseFeatureSet(&[_]Feature{}),
205 .dependencies = featureSet(&[_]Feature{}),
206206 };
207207 result[@enumToInt(Feature.icbt)] = .{
208208 .llvm_name = "icbt",
209209 .description = "Enable icbt instruction",
210 .dependencies = sparseFeatureSet(&[_]Feature{}),
210 .dependencies = featureSet(&[_]Feature{}),
211211 };
212212 result[@enumToInt(Feature.invariant_function_descriptors)] = .{
213213 .llvm_name = "invariant-function-descriptors",
214214 .description = "Assume function descriptors are invariant",
215 .dependencies = sparseFeatureSet(&[_]Feature{}),
215 .dependencies = featureSet(&[_]Feature{}),
216216 };
217217 result[@enumToInt(Feature.isa_v30_instructions)] = .{
218218 .llvm_name = "isa-v30-instructions",
219219 .description = "Enable instructions added in ISA 3.0.",
220 .dependencies = sparseFeatureSet(&[_]Feature{}),
220 .dependencies = featureSet(&[_]Feature{}),
221221 };
222222 result[@enumToInt(Feature.isel)] = .{
223223 .llvm_name = "isel",
224224 .description = "Enable the isel instruction",
225 .dependencies = sparseFeatureSet(&[_]Feature{}),
225 .dependencies = featureSet(&[_]Feature{}),
226226 };
227227 result[@enumToInt(Feature.ldbrx)] = .{
228228 .llvm_name = "ldbrx",
229229 .description = "Enable the ldbrx instruction",
230 .dependencies = sparseFeatureSet(&[_]Feature{}),
230 .dependencies = featureSet(&[_]Feature{}),
231231 };
232232 result[@enumToInt(Feature.lfiwax)] = .{
233233 .llvm_name = "lfiwax",
234234 .description = "Enable the lfiwax instruction",
235 .dependencies = sparseFeatureSet(&[_]Feature{
235 .dependencies = featureSet(&[_]Feature{
236236 .fpu,
237237 }),
238238 };
239239 result[@enumToInt(Feature.longcall)] = .{
240240 .llvm_name = "longcall",
241241 .description = "Always use indirect calls",
242 .dependencies = sparseFeatureSet(&[_]Feature{}),
242 .dependencies = featureSet(&[_]Feature{}),
243243 };
244244 result[@enumToInt(Feature.mfocrf)] = .{
245245 .llvm_name = "mfocrf",
246246 .description = "Enable the MFOCRF instruction",
247 .dependencies = sparseFeatureSet(&[_]Feature{}),
247 .dependencies = featureSet(&[_]Feature{}),
248248 };
249249 result[@enumToInt(Feature.msync)] = .{
250250 .llvm_name = "msync",
251251 .description = "Has only the msync instruction instead of sync",
252 .dependencies = sparseFeatureSet(&[_]Feature{
252 .dependencies = featureSet(&[_]Feature{
253253 .booke,
254254 }),
255255 };
256256 result[@enumToInt(Feature.partword_atomics)] = .{
257257 .llvm_name = "partword-atomics",
258258 .description = "Enable l[bh]arx and st[bh]cx.",
259 .dependencies = sparseFeatureSet(&[_]Feature{}),
259 .dependencies = featureSet(&[_]Feature{}),
260260 };
261261 result[@enumToInt(Feature.popcntd)] = .{
262262 .llvm_name = "popcntd",
263263 .description = "Enable the popcnt[dw] instructions",
264 .dependencies = sparseFeatureSet(&[_]Feature{}),
264 .dependencies = featureSet(&[_]Feature{}),
265265 };
266266 result[@enumToInt(Feature.power8_altivec)] = .{
267267 .llvm_name = "power8-altivec",
268268 .description = "Enable POWER8 Altivec instructions",
269 .dependencies = sparseFeatureSet(&[_]Feature{
269 .dependencies = featureSet(&[_]Feature{
270270 .altivec,
271271 }),
272272 };
273273 result[@enumToInt(Feature.power8_vector)] = .{
274274 .llvm_name = "power8-vector",
275275 .description = "Enable POWER8 vector instructions",
276 .dependencies = sparseFeatureSet(&[_]Feature{
276 .dependencies = featureSet(&[_]Feature{
277277 .power8_altivec,
278278 .vsx,
279279 }),
......@@ -281,7 +281,7 @@ pub const all_features = blk: {
281281 result[@enumToInt(Feature.power9_altivec)] = .{
282282 .llvm_name = "power9-altivec",
283283 .description = "Enable POWER9 Altivec instructions",
284 .dependencies = sparseFeatureSet(&[_]Feature{
284 .dependencies = featureSet(&[_]Feature{
285285 .isa_v30_instructions,
286286 .power8_altivec,
287287 }),
......@@ -289,7 +289,7 @@ pub const all_features = blk: {
289289 result[@enumToInt(Feature.power9_vector)] = .{
290290 .llvm_name = "power9-vector",
291291 .description = "Enable POWER9 vector instructions",
292 .dependencies = sparseFeatureSet(&[_]Feature{
292 .dependencies = featureSet(&[_]Feature{
293293 .isa_v30_instructions,
294294 .power8_vector,
295295 .power9_altivec,
......@@ -298,73 +298,73 @@ pub const all_features = blk: {
298298 result[@enumToInt(Feature.ppc_postra_sched)] = .{
299299 .llvm_name = "ppc-postra-sched",
300300 .description = "Use PowerPC post-RA scheduling strategy",
301 .dependencies = sparseFeatureSet(&[_]Feature{}),
301 .dependencies = featureSet(&[_]Feature{}),
302302 };
303303 result[@enumToInt(Feature.ppc_prera_sched)] = .{
304304 .llvm_name = "ppc-prera-sched",
305305 .description = "Use PowerPC pre-RA scheduling strategy",
306 .dependencies = sparseFeatureSet(&[_]Feature{}),
306 .dependencies = featureSet(&[_]Feature{}),
307307 };
308308 result[@enumToInt(Feature.ppc4xx)] = .{
309309 .llvm_name = "ppc4xx",
310310 .description = "Enable PPC 4xx instructions",
311 .dependencies = sparseFeatureSet(&[_]Feature{}),
311 .dependencies = featureSet(&[_]Feature{}),
312312 };
313313 result[@enumToInt(Feature.ppc6xx)] = .{
314314 .llvm_name = "ppc6xx",
315315 .description = "Enable PPC 6xx instructions",
316 .dependencies = sparseFeatureSet(&[_]Feature{}),
316 .dependencies = featureSet(&[_]Feature{}),
317317 };
318318 result[@enumToInt(Feature.qpx)] = .{
319319 .llvm_name = "qpx",
320320 .description = "Enable QPX instructions",
321 .dependencies = sparseFeatureSet(&[_]Feature{
321 .dependencies = featureSet(&[_]Feature{
322322 .fpu,
323323 }),
324324 };
325325 result[@enumToInt(Feature.recipprec)] = .{
326326 .llvm_name = "recipprec",
327327 .description = "Assume higher precision reciprocal estimates",
328 .dependencies = sparseFeatureSet(&[_]Feature{}),
328 .dependencies = featureSet(&[_]Feature{}),
329329 };
330330 result[@enumToInt(Feature.secure_plt)] = .{
331331 .llvm_name = "secure-plt",
332332 .description = "Enable secure plt mode",
333 .dependencies = sparseFeatureSet(&[_]Feature{}),
333 .dependencies = featureSet(&[_]Feature{}),
334334 };
335335 result[@enumToInt(Feature.slow_popcntd)] = .{
336336 .llvm_name = "slow-popcntd",
337337 .description = "Has slow popcnt[dw] instructions",
338 .dependencies = sparseFeatureSet(&[_]Feature{}),
338 .dependencies = featureSet(&[_]Feature{}),
339339 };
340340 result[@enumToInt(Feature.spe)] = .{
341341 .llvm_name = "spe",
342342 .description = "Enable SPE instructions",
343 .dependencies = sparseFeatureSet(&[_]Feature{
343 .dependencies = featureSet(&[_]Feature{
344344 .hard_float,
345345 }),
346346 };
347347 result[@enumToInt(Feature.stfiwx)] = .{
348348 .llvm_name = "stfiwx",
349349 .description = "Enable the stfiwx instruction",
350 .dependencies = sparseFeatureSet(&[_]Feature{
350 .dependencies = featureSet(&[_]Feature{
351351 .fpu,
352352 }),
353353 };
354354 result[@enumToInt(Feature.two_const_nr)] = .{
355355 .llvm_name = "two-const-nr",
356356 .description = "Requires two constant Newton-Raphson computation",
357 .dependencies = sparseFeatureSet(&[_]Feature{}),
357 .dependencies = featureSet(&[_]Feature{}),
358358 };
359359 result[@enumToInt(Feature.vectors_use_two_units)] = .{
360360 .llvm_name = "vectors-use-two-units",
361361 .description = "Vectors use two units",
362 .dependencies = sparseFeatureSet(&[_]Feature{}),
362 .dependencies = featureSet(&[_]Feature{}),
363363 };
364364 result[@enumToInt(Feature.vsx)] = .{
365365 .llvm_name = "vsx",
366366 .description = "Enable VSX instructions",
367 .dependencies = sparseFeatureSet(&[_]Feature{
367 .dependencies = featureSet(&[_]Feature{
368368 .altivec,
369369 }),
370370 };
......@@ -372,7 +372,6 @@ pub const all_features = blk: {
372372 for (result) |*elem, i| {
373373 elem.index = i;
374374 elem.name = ti.Enum.fields[i].name;
375 elem.dependencies.initAsDependencies(i, &result);
376375 }
377376 break :blk result;
378377};
......@@ -381,7 +380,7 @@ pub const cpu = struct {
381380 pub const @"440" = Cpu{
382381 .name = "440",
383382 .llvm_name = "440",
384 .features = featureSet(&all_features, &[_]Feature{
383 .features = featureSet(&[_]Feature{
385384 .booke,
386385 .fres,
387386 .frsqrte,
......@@ -393,7 +392,7 @@ pub const cpu = struct {
393392 pub const @"450" = Cpu{
394393 .name = "450",
395394 .llvm_name = "450",
396 .features = featureSet(&all_features, &[_]Feature{
395 .features = featureSet(&[_]Feature{
397396 .booke,
398397 .fres,
399398 .frsqrte,
......@@ -405,21 +404,21 @@ pub const cpu = struct {
405404 pub const @"601" = Cpu{
406405 .name = "601",
407406 .llvm_name = "601",
408 .features = featureSet(&all_features, &[_]Feature{
407 .features = featureSet(&[_]Feature{
409408 .fpu,
410409 }),
411410 };
412411 pub const @"602" = Cpu{
413412 .name = "602",
414413 .llvm_name = "602",
415 .features = featureSet(&all_features, &[_]Feature{
414 .features = featureSet(&[_]Feature{
416415 .fpu,
417416 }),
418417 };
419418 pub const @"603" = Cpu{
420419 .name = "603",
421420 .llvm_name = "603",
422 .features = featureSet(&all_features, &[_]Feature{
421 .features = featureSet(&[_]Feature{
423422 .fres,
424423 .frsqrte,
425424 }),
......@@ -427,7 +426,7 @@ pub const cpu = struct {
427426 pub const @"603e" = Cpu{
428427 .name = "603e",
429428 .llvm_name = "603e",
430 .features = featureSet(&all_features, &[_]Feature{
429 .features = featureSet(&[_]Feature{
431430 .fres,
432431 .frsqrte,
433432 }),
......@@ -435,7 +434,7 @@ pub const cpu = struct {
435434 pub const @"603ev" = Cpu{
436435 .name = "603ev",
437436 .llvm_name = "603ev",
438 .features = featureSet(&all_features, &[_]Feature{
437 .features = featureSet(&[_]Feature{
439438 .fres,
440439 .frsqrte,
441440 }),
......@@ -443,7 +442,7 @@ pub const cpu = struct {
443442 pub const @"604" = Cpu{
444443 .name = "604",
445444 .llvm_name = "604",
446 .features = featureSet(&all_features, &[_]Feature{
445 .features = featureSet(&[_]Feature{
447446 .fres,
448447 .frsqrte,
449448 }),
......@@ -451,7 +450,7 @@ pub const cpu = struct {
451450 pub const @"604e" = Cpu{
452451 .name = "604e",
453452 .llvm_name = "604e",
454 .features = featureSet(&all_features, &[_]Feature{
453 .features = featureSet(&[_]Feature{
455454 .fres,
456455 .frsqrte,
457456 }),
......@@ -459,7 +458,7 @@ pub const cpu = struct {
459458 pub const @"620" = Cpu{
460459 .name = "620",
461460 .llvm_name = "620",
462 .features = featureSet(&all_features, &[_]Feature{
461 .features = featureSet(&[_]Feature{
463462 .fres,
464463 .frsqrte,
465464 }),
......@@ -467,7 +466,7 @@ pub const cpu = struct {
467466 pub const @"7400" = Cpu{
468467 .name = "7400",
469468 .llvm_name = "7400",
470 .features = featureSet(&all_features, &[_]Feature{
469 .features = featureSet(&[_]Feature{
471470 .altivec,
472471 .fres,
473472 .frsqrte,
......@@ -476,7 +475,7 @@ pub const cpu = struct {
476475 pub const @"7450" = Cpu{
477476 .name = "7450",
478477 .llvm_name = "7450",
479 .features = featureSet(&all_features, &[_]Feature{
478 .features = featureSet(&[_]Feature{
480479 .altivec,
481480 .fres,
482481 .frsqrte,
......@@ -485,7 +484,7 @@ pub const cpu = struct {
485484 pub const @"750" = Cpu{
486485 .name = "750",
487486 .llvm_name = "750",
488 .features = featureSet(&all_features, &[_]Feature{
487 .features = featureSet(&[_]Feature{
489488 .fres,
490489 .frsqrte,
491490 }),
......@@ -493,7 +492,7 @@ pub const cpu = struct {
493492 pub const @"970" = Cpu{
494493 .name = "970",
495494 .llvm_name = "970",
496 .features = featureSet(&all_features, &[_]Feature{
495 .features = featureSet(&[_]Feature{
497496 .@"64bit",
498497 .altivec,
499498 .fres,
......@@ -506,7 +505,7 @@ pub const cpu = struct {
506505 pub const a2 = Cpu{
507506 .name = "a2",
508507 .llvm_name = "a2",
509 .features = featureSet(&all_features, &[_]Feature{
508 .features = featureSet(&[_]Feature{
510509 .@"64bit",
511510 .booke,
512511 .cmpb,
......@@ -531,7 +530,7 @@ pub const cpu = struct {
531530 pub const a2q = Cpu{
532531 .name = "a2q",
533532 .llvm_name = "a2q",
534 .features = featureSet(&all_features, &[_]Feature{
533 .features = featureSet(&[_]Feature{
535534 .@"64bit",
536535 .booke,
537536 .cmpb,
......@@ -557,7 +556,7 @@ pub const cpu = struct {
557556 pub const e500 = Cpu{
558557 .name = "e500",
559558 .llvm_name = "e500",
560 .features = featureSet(&all_features, &[_]Feature{
559 .features = featureSet(&[_]Feature{
561560 .booke,
562561 .icbt,
563562 .isel,
......@@ -566,7 +565,7 @@ pub const cpu = struct {
566565 pub const e500mc = Cpu{
567566 .name = "e500mc",
568567 .llvm_name = "e500mc",
569 .features = featureSet(&all_features, &[_]Feature{
568 .features = featureSet(&[_]Feature{
570569 .booke,
571570 .icbt,
572571 .isel,
......@@ -576,7 +575,7 @@ pub const cpu = struct {
576575 pub const e5500 = Cpu{
577576 .name = "e5500",
578577 .llvm_name = "e5500",
579 .features = featureSet(&all_features, &[_]Feature{
578 .features = featureSet(&[_]Feature{
580579 .@"64bit",
581580 .booke,
582581 .icbt,
......@@ -588,7 +587,7 @@ pub const cpu = struct {
588587 pub const g3 = Cpu{
589588 .name = "g3",
590589 .llvm_name = "g3",
591 .features = featureSet(&all_features, &[_]Feature{
590 .features = featureSet(&[_]Feature{
592591 .fres,
593592 .frsqrte,
594593 }),
......@@ -596,7 +595,7 @@ pub const cpu = struct {
596595 pub const g4 = Cpu{
597596 .name = "g4",
598597 .llvm_name = "g4",
599 .features = featureSet(&all_features, &[_]Feature{
598 .features = featureSet(&[_]Feature{
600599 .altivec,
601600 .fres,
602601 .frsqrte,
......@@ -605,7 +604,7 @@ pub const cpu = struct {
605604 pub const @"g4+" = Cpu{
606605 .name = "g4+",
607606 .llvm_name = "g4+",
608 .features = featureSet(&all_features, &[_]Feature{
607 .features = featureSet(&[_]Feature{
609608 .altivec,
610609 .fres,
611610 .frsqrte,
......@@ -614,7 +613,7 @@ pub const cpu = struct {
614613 pub const g5 = Cpu{
615614 .name = "g5",
616615 .llvm_name = "g5",
617 .features = featureSet(&all_features, &[_]Feature{
616 .features = featureSet(&[_]Feature{
618617 .@"64bit",
619618 .altivec,
620619 .fres,
......@@ -627,28 +626,28 @@ pub const cpu = struct {
627626 pub const generic = Cpu{
628627 .name = "generic",
629628 .llvm_name = "generic",
630 .features = featureSet(&all_features, &[_]Feature{
629 .features = featureSet(&[_]Feature{
631630 .hard_float,
632631 }),
633632 };
634633 pub const ppc = Cpu{
635634 .name = "ppc",
636635 .llvm_name = "ppc",
637 .features = featureSet(&all_features, &[_]Feature{
636 .features = featureSet(&[_]Feature{
638637 .hard_float,
639638 }),
640639 };
641640 pub const ppc32 = Cpu{
642641 .name = "ppc32",
643642 .llvm_name = "ppc32",
644 .features = featureSet(&all_features, &[_]Feature{
643 .features = featureSet(&[_]Feature{
645644 .hard_float,
646645 }),
647646 };
648647 pub const ppc64 = Cpu{
649648 .name = "ppc64",
650649 .llvm_name = "ppc64",
651 .features = featureSet(&all_features, &[_]Feature{
650 .features = featureSet(&[_]Feature{
652651 .@"64bit",
653652 .altivec,
654653 .fres,
......@@ -661,7 +660,7 @@ pub const cpu = struct {
661660 pub const ppc64le = Cpu{
662661 .name = "ppc64le",
663662 .llvm_name = "ppc64le",
664 .features = featureSet(&all_features, &[_]Feature{
663 .features = featureSet(&[_]Feature{
665664 .@"64bit",
666665 .altivec,
667666 .bpermd,
......@@ -696,7 +695,7 @@ pub const cpu = struct {
696695 pub const pwr3 = Cpu{
697696 .name = "pwr3",
698697 .llvm_name = "pwr3",
699 .features = featureSet(&all_features, &[_]Feature{
698 .features = featureSet(&[_]Feature{
700699 .@"64bit",
701700 .altivec,
702701 .fres,
......@@ -708,7 +707,7 @@ pub const cpu = struct {
708707 pub const pwr4 = Cpu{
709708 .name = "pwr4",
710709 .llvm_name = "pwr4",
711 .features = featureSet(&all_features, &[_]Feature{
710 .features = featureSet(&[_]Feature{
712711 .@"64bit",
713712 .altivec,
714713 .fres,
......@@ -721,7 +720,7 @@ pub const cpu = struct {
721720 pub const pwr5 = Cpu{
722721 .name = "pwr5",
723722 .llvm_name = "pwr5",
724 .features = featureSet(&all_features, &[_]Feature{
723 .features = featureSet(&[_]Feature{
725724 .@"64bit",
726725 .altivec,
727726 .fre,
......@@ -736,7 +735,7 @@ pub const cpu = struct {
736735 pub const pwr5x = Cpu{
737736 .name = "pwr5x",
738737 .llvm_name = "pwr5x",
739 .features = featureSet(&all_features, &[_]Feature{
738 .features = featureSet(&[_]Feature{
740739 .@"64bit",
741740 .altivec,
742741 .fprnd,
......@@ -752,7 +751,7 @@ pub const cpu = struct {
752751 pub const pwr6 = Cpu{
753752 .name = "pwr6",
754753 .llvm_name = "pwr6",
755 .features = featureSet(&all_features, &[_]Feature{
754 .features = featureSet(&[_]Feature{
756755 .@"64bit",
757756 .altivec,
758757 .cmpb,
......@@ -772,7 +771,7 @@ pub const cpu = struct {
772771 pub const pwr6x = Cpu{
773772 .name = "pwr6x",
774773 .llvm_name = "pwr6x",
775 .features = featureSet(&all_features, &[_]Feature{
774 .features = featureSet(&[_]Feature{
776775 .@"64bit",
777776 .altivec,
778777 .cmpb,
......@@ -792,7 +791,7 @@ pub const cpu = struct {
792791 pub const pwr7 = Cpu{
793792 .name = "pwr7",
794793 .llvm_name = "pwr7",
795 .features = featureSet(&all_features, &[_]Feature{
794 .features = featureSet(&[_]Feature{
796795 .@"64bit",
797796 .altivec,
798797 .bpermd,
......@@ -820,7 +819,7 @@ pub const cpu = struct {
820819 pub const pwr8 = Cpu{
821820 .name = "pwr8",
822821 .llvm_name = "pwr8",
823 .features = featureSet(&all_features, &[_]Feature{
822 .features = featureSet(&[_]Feature{
824823 .@"64bit",
825824 .altivec,
826825 .bpermd,
......@@ -855,7 +854,7 @@ pub const cpu = struct {
855854 pub const pwr9 = Cpu{
856855 .name = "pwr9",
857856 .llvm_name = "pwr9",
858 .features = featureSet(&all_features, &[_]Feature{
857 .features = featureSet(&[_]Feature{
859858 .@"64bit",
860859 .altivec,
861860 .bpermd,
lib/std/target/riscv.zig+12-13
......@@ -21,50 +21,49 @@ pub const all_features = blk: {
2121 result[@enumToInt(Feature.@"64bit")] = .{
2222 .llvm_name = "64bit",
2323 .description = "Implements RV64",
24 .dependencies = sparseFeatureSet(&[_]Feature{}),
24 .dependencies = featureSet(&[_]Feature{}),
2525 };
2626 result[@enumToInt(Feature.a)] = .{
2727 .llvm_name = "a",
2828 .description = "'A' (Atomic Instructions)",
29 .dependencies = sparseFeatureSet(&[_]Feature{}),
29 .dependencies = featureSet(&[_]Feature{}),
3030 };
3131 result[@enumToInt(Feature.c)] = .{
3232 .llvm_name = "c",
3333 .description = "'C' (Compressed Instructions)",
34 .dependencies = sparseFeatureSet(&[_]Feature{}),
34 .dependencies = featureSet(&[_]Feature{}),
3535 };
3636 result[@enumToInt(Feature.d)] = .{
3737 .llvm_name = "d",
3838 .description = "'D' (Double-Precision Floating-Point)",
39 .dependencies = sparseFeatureSet(&[_]Feature{
39 .dependencies = featureSet(&[_]Feature{
4040 .f,
4141 }),
4242 };
4343 result[@enumToInt(Feature.e)] = .{
4444 .llvm_name = "e",
4545 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
46 .dependencies = sparseFeatureSet(&[_]Feature{}),
46 .dependencies = featureSet(&[_]Feature{}),
4747 };
4848 result[@enumToInt(Feature.f)] = .{
4949 .llvm_name = "f",
5050 .description = "'F' (Single-Precision Floating-Point)",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),
51 .dependencies = featureSet(&[_]Feature{}),
5252 };
5353 result[@enumToInt(Feature.m)] = .{
5454 .llvm_name = "m",
5555 .description = "'M' (Integer Multiplication and Division)",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),
56 .dependencies = featureSet(&[_]Feature{}),
5757 };
5858 result[@enumToInt(Feature.relax)] = .{
5959 .llvm_name = "relax",
6060 .description = "Enable Linker relaxation.",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),
61 .dependencies = featureSet(&[_]Feature{}),
6262 };
6363 const ti = @typeInfo(Feature);
6464 for (result) |*elem, i| {
6565 elem.index = i;
6666 elem.name = ti.Enum.fields[i].name;
67 elem.dependencies.initAsDependencies(i, &result);
6867 }
6968 break :blk result;
7069};
......@@ -73,12 +72,12 @@ pub const cpu = struct {
7372 pub const generic_rv32 = Cpu{
7473 .name = "generic_rv32",
7574 .llvm_name = "generic-rv32",
76 .features = featureSet(&all_features, &[_]Feature{}),
75 .features = featureSet(&[_]Feature{}),
7776 };
7877 pub const generic_rv64 = Cpu{
7978 .name = "generic_rv64",
8079 .llvm_name = "generic-rv64",
81 .features = featureSet(&all_features, &[_]Feature{
80 .features = featureSet(&[_]Feature{
8281 .@"64bit",
8382 }),
8483 };
......@@ -92,7 +91,7 @@ pub const all_cpus = &[_]*const Cpu{
9291 &cpu.generic_rv64,
9392};
9493
95pub const baseline_32_features = featureSet(&all_features, &[_]Feature{
94pub const baseline_32_features = featureSet(&[_]Feature{
9695 .a,
9796 .c,
9897 .d,
......@@ -101,7 +100,7 @@ pub const baseline_32_features = featureSet(&all_features, &[_]Feature{
101100 .relax,
102101});
103102
104pub const baseline_64_features = featureSet(&all_features, &[_]Feature{
103pub const baseline_64_features = featureSet(&[_]Feature{
105104 .@"64bit",
106105 .a,
107106 .c,
lib/std/target/sparc.zig+59-60
......@@ -32,103 +32,102 @@ pub const all_features = blk: {
3232 result[@enumToInt(Feature.deprecated_v8)] = .{
3333 .llvm_name = "deprecated-v8",
3434 .description = "Enable deprecated V8 instructions in V9 mode",
35 .dependencies = sparseFeatureSet(&[_]Feature{}),
35 .dependencies = featureSet(&[_]Feature{}),
3636 };
3737 result[@enumToInt(Feature.detectroundchange)] = .{
3838 .llvm_name = "detectroundchange",
3939 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",
40 .dependencies = sparseFeatureSet(&[_]Feature{}),
40 .dependencies = featureSet(&[_]Feature{}),
4141 };
4242 result[@enumToInt(Feature.fixallfdivsqrt)] = .{
4343 .llvm_name = "fixallfdivsqrt",
4444 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
45 .dependencies = sparseFeatureSet(&[_]Feature{}),
45 .dependencies = featureSet(&[_]Feature{}),
4646 };
4747 result[@enumToInt(Feature.hard_quad_float)] = .{
4848 .llvm_name = "hard-quad-float",
4949 .description = "Enable quad-word floating point instructions",
50 .dependencies = sparseFeatureSet(&[_]Feature{}),
50 .dependencies = featureSet(&[_]Feature{}),
5151 };
5252 result[@enumToInt(Feature.hasleoncasa)] = .{
5353 .llvm_name = "hasleoncasa",
5454 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
55 .dependencies = sparseFeatureSet(&[_]Feature{}),
55 .dependencies = featureSet(&[_]Feature{}),
5656 };
5757 result[@enumToInt(Feature.hasumacsmac)] = .{
5858 .llvm_name = "hasumacsmac",
5959 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
60 .dependencies = sparseFeatureSet(&[_]Feature{}),
60 .dependencies = featureSet(&[_]Feature{}),
6161 };
6262 result[@enumToInt(Feature.insertnopload)] = .{
6363 .llvm_name = "insertnopload",
6464 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",
65 .dependencies = sparseFeatureSet(&[_]Feature{}),
65 .dependencies = featureSet(&[_]Feature{}),
6666 };
6767 result[@enumToInt(Feature.leon)] = .{
6868 .llvm_name = "leon",
6969 .description = "Enable LEON extensions",
70 .dependencies = sparseFeatureSet(&[_]Feature{}),
70 .dependencies = featureSet(&[_]Feature{}),
7171 };
7272 result[@enumToInt(Feature.leoncyclecounter)] = .{
7373 .llvm_name = "leoncyclecounter",
7474 .description = "Use the Leon cycle counter register",
75 .dependencies = sparseFeatureSet(&[_]Feature{}),
75 .dependencies = featureSet(&[_]Feature{}),
7676 };
7777 result[@enumToInt(Feature.leonpwrpsr)] = .{
7878 .llvm_name = "leonpwrpsr",
7979 .description = "Enable the PWRPSR instruction",
80 .dependencies = sparseFeatureSet(&[_]Feature{}),
80 .dependencies = featureSet(&[_]Feature{}),
8181 };
8282 result[@enumToInt(Feature.no_fmuls)] = .{
8383 .llvm_name = "no-fmuls",
8484 .description = "Disable the fmuls instruction.",
85 .dependencies = sparseFeatureSet(&[_]Feature{}),
85 .dependencies = featureSet(&[_]Feature{}),
8686 };
8787 result[@enumToInt(Feature.no_fsmuld)] = .{
8888 .llvm_name = "no-fsmuld",
8989 .description = "Disable the fsmuld instruction.",
90 .dependencies = sparseFeatureSet(&[_]Feature{}),
90 .dependencies = featureSet(&[_]Feature{}),
9191 };
9292 result[@enumToInt(Feature.popc)] = .{
9393 .llvm_name = "popc",
9494 .description = "Use the popc (population count) instruction",
95 .dependencies = sparseFeatureSet(&[_]Feature{}),
95 .dependencies = featureSet(&[_]Feature{}),
9696 };
9797 result[@enumToInt(Feature.soft_float)] = .{
9898 .llvm_name = "soft-float",
9999 .description = "Use software emulation for floating point",
100 .dependencies = sparseFeatureSet(&[_]Feature{}),
100 .dependencies = featureSet(&[_]Feature{}),
101101 };
102102 result[@enumToInt(Feature.soft_mul_div)] = .{
103103 .llvm_name = "soft-mul-div",
104104 .description = "Use software emulation for integer multiply and divide",
105 .dependencies = sparseFeatureSet(&[_]Feature{}),
105 .dependencies = featureSet(&[_]Feature{}),
106106 };
107107 result[@enumToInt(Feature.v9)] = .{
108108 .llvm_name = "v9",
109109 .description = "Enable SPARC-V9 instructions",
110 .dependencies = sparseFeatureSet(&[_]Feature{}),
110 .dependencies = featureSet(&[_]Feature{}),
111111 };
112112 result[@enumToInt(Feature.vis)] = .{
113113 .llvm_name = "vis",
114114 .description = "Enable UltraSPARC Visual Instruction Set extensions",
115 .dependencies = sparseFeatureSet(&[_]Feature{}),
115 .dependencies = featureSet(&[_]Feature{}),
116116 };
117117 result[@enumToInt(Feature.vis2)] = .{
118118 .llvm_name = "vis2",
119119 .description = "Enable Visual Instruction Set extensions II",
120 .dependencies = sparseFeatureSet(&[_]Feature{}),
120 .dependencies = featureSet(&[_]Feature{}),
121121 };
122122 result[@enumToInt(Feature.vis3)] = .{
123123 .llvm_name = "vis3",
124124 .description = "Enable Visual Instruction Set extensions III",
125 .dependencies = sparseFeatureSet(&[_]Feature{}),
125 .dependencies = featureSet(&[_]Feature{}),
126126 };
127127 const ti = @typeInfo(Feature);
128128 for (result) |*elem, i| {
129129 elem.index = i;
130130 elem.name = ti.Enum.fields[i].name;
131 elem.dependencies.initAsDependencies(i, &result);
132131 }
133132 break :blk result;
134133};
......@@ -137,7 +136,7 @@ pub const cpu = struct {
137136 pub const at697e = Cpu{
138137 .name = "at697e",
139138 .llvm_name = "at697e",
140 .features = featureSet(&all_features, &[_]Feature{
139 .features = featureSet(&[_]Feature{
141140 .insertnopload,
142141 .leon,
143142 }),
......@@ -145,7 +144,7 @@ pub const cpu = struct {
145144 pub const at697f = Cpu{
146145 .name = "at697f",
147146 .llvm_name = "at697f",
148 .features = featureSet(&all_features, &[_]Feature{
147 .features = featureSet(&[_]Feature{
149148 .insertnopload,
150149 .leon,
151150 }),
......@@ -153,17 +152,17 @@ pub const cpu = struct {
153152 pub const f934 = Cpu{
154153 .name = "f934",
155154 .llvm_name = "f934",
156 .features = featureSet(&all_features, &[_]Feature{}),
155 .features = featureSet(&[_]Feature{}),
157156 };
158157 pub const generic = Cpu{
159158 .name = "generic",
160159 .llvm_name = "generic",
161 .features = featureSet(&all_features, &[_]Feature{}),
160 .features = featureSet(&[_]Feature{}),
162161 };
163162 pub const gr712rc = Cpu{
164163 .name = "gr712rc",
165164 .llvm_name = "gr712rc",
166 .features = featureSet(&all_features, &[_]Feature{
165 .features = featureSet(&[_]Feature{
167166 .hasleoncasa,
168167 .leon,
169168 }),
......@@ -171,7 +170,7 @@ pub const cpu = struct {
171170 pub const gr740 = Cpu{
172171 .name = "gr740",
173172 .llvm_name = "gr740",
174 .features = featureSet(&all_features, &[_]Feature{
173 .features = featureSet(&[_]Feature{
175174 .hasleoncasa,
176175 .hasumacsmac,
177176 .leon,
......@@ -182,19 +181,19 @@ pub const cpu = struct {
182181 pub const hypersparc = Cpu{
183182 .name = "hypersparc",
184183 .llvm_name = "hypersparc",
185 .features = featureSet(&all_features, &[_]Feature{}),
184 .features = featureSet(&[_]Feature{}),
186185 };
187186 pub const leon2 = Cpu{
188187 .name = "leon2",
189188 .llvm_name = "leon2",
190 .features = featureSet(&all_features, &[_]Feature{
189 .features = featureSet(&[_]Feature{
191190 .leon,
192191 }),
193192 };
194193 pub const leon3 = Cpu{
195194 .name = "leon3",
196195 .llvm_name = "leon3",
197 .features = featureSet(&all_features, &[_]Feature{
196 .features = featureSet(&[_]Feature{
198197 .hasumacsmac,
199198 .leon,
200199 }),
......@@ -202,7 +201,7 @@ pub const cpu = struct {
202201 pub const leon4 = Cpu{
203202 .name = "leon4",
204203 .llvm_name = "leon4",
205 .features = featureSet(&all_features, &[_]Feature{
204 .features = featureSet(&[_]Feature{
206205 .hasleoncasa,
207206 .hasumacsmac,
208207 .leon,
......@@ -211,7 +210,7 @@ pub const cpu = struct {
211210 pub const ma2080 = Cpu{
212211 .name = "ma2080",
213212 .llvm_name = "ma2080",
214 .features = featureSet(&all_features, &[_]Feature{
213 .features = featureSet(&[_]Feature{
215214 .hasleoncasa,
216215 .leon,
217216 }),
......@@ -219,7 +218,7 @@ pub const cpu = struct {
219218 pub const ma2085 = Cpu{
220219 .name = "ma2085",
221220 .llvm_name = "ma2085",
222 .features = featureSet(&all_features, &[_]Feature{
221 .features = featureSet(&[_]Feature{
223222 .hasleoncasa,
224223 .leon,
225224 }),
......@@ -227,7 +226,7 @@ pub const cpu = struct {
227226 pub const ma2100 = Cpu{
228227 .name = "ma2100",
229228 .llvm_name = "ma2100",
230 .features = featureSet(&all_features, &[_]Feature{
229 .features = featureSet(&[_]Feature{
231230 .hasleoncasa,
232231 .leon,
233232 }),
......@@ -235,7 +234,7 @@ pub const cpu = struct {
235234 pub const ma2150 = Cpu{
236235 .name = "ma2150",
237236 .llvm_name = "ma2150",
238 .features = featureSet(&all_features, &[_]Feature{
237 .features = featureSet(&[_]Feature{
239238 .hasleoncasa,
240239 .leon,
241240 }),
......@@ -243,7 +242,7 @@ pub const cpu = struct {
243242 pub const ma2155 = Cpu{
244243 .name = "ma2155",
245244 .llvm_name = "ma2155",
246 .features = featureSet(&all_features, &[_]Feature{
245 .features = featureSet(&[_]Feature{
247246 .hasleoncasa,
248247 .leon,
249248 }),
......@@ -251,7 +250,7 @@ pub const cpu = struct {
251250 pub const ma2450 = Cpu{
252251 .name = "ma2450",
253252 .llvm_name = "ma2450",
254 .features = featureSet(&all_features, &[_]Feature{
253 .features = featureSet(&[_]Feature{
255254 .hasleoncasa,
256255 .leon,
257256 }),
......@@ -259,7 +258,7 @@ pub const cpu = struct {
259258 pub const ma2455 = Cpu{
260259 .name = "ma2455",
261260 .llvm_name = "ma2455",
262 .features = featureSet(&all_features, &[_]Feature{
261 .features = featureSet(&[_]Feature{
263262 .hasleoncasa,
264263 .leon,
265264 }),
......@@ -267,7 +266,7 @@ pub const cpu = struct {
267266 pub const ma2480 = Cpu{
268267 .name = "ma2480",
269268 .llvm_name = "ma2480",
270 .features = featureSet(&all_features, &[_]Feature{
269 .features = featureSet(&[_]Feature{
271270 .hasleoncasa,
272271 .leon,
273272 }),
......@@ -275,7 +274,7 @@ pub const cpu = struct {
275274 pub const ma2485 = Cpu{
276275 .name = "ma2485",
277276 .llvm_name = "ma2485",
278 .features = featureSet(&all_features, &[_]Feature{
277 .features = featureSet(&[_]Feature{
279278 .hasleoncasa,
280279 .leon,
281280 }),
......@@ -283,7 +282,7 @@ pub const cpu = struct {
283282 pub const ma2x5x = Cpu{
284283 .name = "ma2x5x",
285284 .llvm_name = "ma2x5x",
286 .features = featureSet(&all_features, &[_]Feature{
285 .features = featureSet(&[_]Feature{
287286 .hasleoncasa,
288287 .leon,
289288 }),
......@@ -291,7 +290,7 @@ pub const cpu = struct {
291290 pub const ma2x8x = Cpu{
292291 .name = "ma2x8x",
293292 .llvm_name = "ma2x8x",
294 .features = featureSet(&all_features, &[_]Feature{
293 .features = featureSet(&[_]Feature{
295294 .hasleoncasa,
296295 .leon,
297296 }),
......@@ -299,7 +298,7 @@ pub const cpu = struct {
299298 pub const myriad2 = Cpu{
300299 .name = "myriad2",
301300 .llvm_name = "myriad2",
302 .features = featureSet(&all_features, &[_]Feature{
301 .features = featureSet(&[_]Feature{
303302 .hasleoncasa,
304303 .leon,
305304 }),
......@@ -307,7 +306,7 @@ pub const cpu = struct {
307306 pub const myriad2_1 = Cpu{
308307 .name = "myriad2_1",
309308 .llvm_name = "myriad2.1",
310 .features = featureSet(&all_features, &[_]Feature{
309 .features = featureSet(&[_]Feature{
311310 .hasleoncasa,
312311 .leon,
313312 }),
......@@ -315,7 +314,7 @@ pub const cpu = struct {
315314 pub const myriad2_2 = Cpu{
316315 .name = "myriad2_2",
317316 .llvm_name = "myriad2.2",
318 .features = featureSet(&all_features, &[_]Feature{
317 .features = featureSet(&[_]Feature{
319318 .hasleoncasa,
320319 .leon,
321320 }),
......@@ -323,7 +322,7 @@ pub const cpu = struct {
323322 pub const myriad2_3 = Cpu{
324323 .name = "myriad2_3",
325324 .llvm_name = "myriad2.3",
326 .features = featureSet(&all_features, &[_]Feature{
325 .features = featureSet(&[_]Feature{
327326 .hasleoncasa,
328327 .leon,
329328 }),
......@@ -331,7 +330,7 @@ pub const cpu = struct {
331330 pub const niagara = Cpu{
332331 .name = "niagara",
333332 .llvm_name = "niagara",
334 .features = featureSet(&all_features, &[_]Feature{
333 .features = featureSet(&[_]Feature{
335334 .deprecated_v8,
336335 .v9,
337336 .vis,
......@@ -341,7 +340,7 @@ pub const cpu = struct {
341340 pub const niagara2 = Cpu{
342341 .name = "niagara2",
343342 .llvm_name = "niagara2",
344 .features = featureSet(&all_features, &[_]Feature{
343 .features = featureSet(&[_]Feature{
345344 .deprecated_v8,
346345 .popc,
347346 .v9,
......@@ -352,7 +351,7 @@ pub const cpu = struct {
352351 pub const niagara3 = Cpu{
353352 .name = "niagara3",
354353 .llvm_name = "niagara3",
355 .features = featureSet(&all_features, &[_]Feature{
354 .features = featureSet(&[_]Feature{
356355 .deprecated_v8,
357356 .popc,
358357 .v9,
......@@ -363,7 +362,7 @@ pub const cpu = struct {
363362 pub const niagara4 = Cpu{
364363 .name = "niagara4",
365364 .llvm_name = "niagara4",
366 .features = featureSet(&all_features, &[_]Feature{
365 .features = featureSet(&[_]Feature{
367366 .deprecated_v8,
368367 .popc,
369368 .v9,
......@@ -375,32 +374,32 @@ pub const cpu = struct {
375374 pub const sparclet = Cpu{
376375 .name = "sparclet",
377376 .llvm_name = "sparclet",
378 .features = featureSet(&all_features, &[_]Feature{}),
377 .features = featureSet(&[_]Feature{}),
379378 };
380379 pub const sparclite = Cpu{
381380 .name = "sparclite",
382381 .llvm_name = "sparclite",
383 .features = featureSet(&all_features, &[_]Feature{}),
382 .features = featureSet(&[_]Feature{}),
384383 };
385384 pub const sparclite86x = Cpu{
386385 .name = "sparclite86x",
387386 .llvm_name = "sparclite86x",
388 .features = featureSet(&all_features, &[_]Feature{}),
387 .features = featureSet(&[_]Feature{}),
389388 };
390389 pub const supersparc = Cpu{
391390 .name = "supersparc",
392391 .llvm_name = "supersparc",
393 .features = featureSet(&all_features, &[_]Feature{}),
392 .features = featureSet(&[_]Feature{}),
394393 };
395394 pub const tsc701 = Cpu{
396395 .name = "tsc701",
397396 .llvm_name = "tsc701",
398 .features = featureSet(&all_features, &[_]Feature{}),
397 .features = featureSet(&[_]Feature{}),
399398 };
400399 pub const ultrasparc = Cpu{
401400 .name = "ultrasparc",
402401 .llvm_name = "ultrasparc",
403 .features = featureSet(&all_features, &[_]Feature{
402 .features = featureSet(&[_]Feature{
404403 .deprecated_v8,
405404 .v9,
406405 .vis,
......@@ -409,7 +408,7 @@ pub const cpu = struct {
409408 pub const ultrasparc3 = Cpu{
410409 .name = "ultrasparc3",
411410 .llvm_name = "ultrasparc3",
412 .features = featureSet(&all_features, &[_]Feature{
411 .features = featureSet(&[_]Feature{
413412 .deprecated_v8,
414413 .v9,
415414 .vis,
......@@ -419,7 +418,7 @@ pub const cpu = struct {
419418 pub const ut699 = Cpu{
420419 .name = "ut699",
421420 .llvm_name = "ut699",
422 .features = featureSet(&all_features, &[_]Feature{
421 .features = featureSet(&[_]Feature{
423422 .fixallfdivsqrt,
424423 .insertnopload,
425424 .leon,
......@@ -430,7 +429,7 @@ pub const cpu = struct {
430429 pub const v7 = Cpu{
431430 .name = "v7",
432431 .llvm_name = "v7",
433 .features = featureSet(&all_features, &[_]Feature{
432 .features = featureSet(&[_]Feature{
434433 .no_fsmuld,
435434 .soft_mul_div,
436435 }),
......@@ -438,12 +437,12 @@ pub const cpu = struct {
438437 pub const v8 = Cpu{
439438 .name = "v8",
440439 .llvm_name = "v8",
441 .features = featureSet(&all_features, &[_]Feature{}),
440 .features = featureSet(&[_]Feature{}),
442441 };
443442 pub const v9 = Cpu{
444443 .name = "v9",
445444 .llvm_name = "v9",
446 .features = featureSet(&all_features, &[_]Feature{
445 .features = featureSet(&[_]Feature{
447446 .v9,
448447 }),
449448 };
lib/std/target/systemz.zig+47-48
......@@ -48,183 +48,182 @@ pub const all_features = blk: {
4848 result[@enumToInt(Feature.deflate_conversion)] = .{
4949 .llvm_name = "deflate-conversion",
5050 .description = "Assume that the deflate-conversion facility is installed",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),
51 .dependencies = featureSet(&[_]Feature{}),
5252 };
5353 result[@enumToInt(Feature.dfp_packed_conversion)] = .{
5454 .llvm_name = "dfp-packed-conversion",
5555 .description = "Assume that the DFP packed-conversion facility is installed",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),
56 .dependencies = featureSet(&[_]Feature{}),
5757 };
5858 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{
5959 .llvm_name = "dfp-zoned-conversion",
6060 .description = "Assume that the DFP zoned-conversion facility is installed",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),
61 .dependencies = featureSet(&[_]Feature{}),
6262 };
6363 result[@enumToInt(Feature.distinct_ops)] = .{
6464 .llvm_name = "distinct-ops",
6565 .description = "Assume that the distinct-operands facility is installed",
66 .dependencies = sparseFeatureSet(&[_]Feature{}),
66 .dependencies = featureSet(&[_]Feature{}),
6767 };
6868 result[@enumToInt(Feature.enhanced_dat_2)] = .{
6969 .llvm_name = "enhanced-dat-2",
7070 .description = "Assume that the enhanced-DAT facility 2 is installed",
71 .dependencies = sparseFeatureSet(&[_]Feature{}),
71 .dependencies = featureSet(&[_]Feature{}),
7272 };
7373 result[@enumToInt(Feature.enhanced_sort)] = .{
7474 .llvm_name = "enhanced-sort",
7575 .description = "Assume that the enhanced-sort facility is installed",
76 .dependencies = sparseFeatureSet(&[_]Feature{}),
76 .dependencies = featureSet(&[_]Feature{}),
7777 };
7878 result[@enumToInt(Feature.execution_hint)] = .{
7979 .llvm_name = "execution-hint",
8080 .description = "Assume that the execution-hint facility is installed",
81 .dependencies = sparseFeatureSet(&[_]Feature{}),
81 .dependencies = featureSet(&[_]Feature{}),
8282 };
8383 result[@enumToInt(Feature.fast_serialization)] = .{
8484 .llvm_name = "fast-serialization",
8585 .description = "Assume that the fast-serialization facility is installed",
86 .dependencies = sparseFeatureSet(&[_]Feature{}),
86 .dependencies = featureSet(&[_]Feature{}),
8787 };
8888 result[@enumToInt(Feature.fp_extension)] = .{
8989 .llvm_name = "fp-extension",
9090 .description = "Assume that the floating-point extension facility is installed",
91 .dependencies = sparseFeatureSet(&[_]Feature{}),
91 .dependencies = featureSet(&[_]Feature{}),
9292 };
9393 result[@enumToInt(Feature.guarded_storage)] = .{
9494 .llvm_name = "guarded-storage",
9595 .description = "Assume that the guarded-storage facility is installed",
96 .dependencies = sparseFeatureSet(&[_]Feature{}),
96 .dependencies = featureSet(&[_]Feature{}),
9797 };
9898 result[@enumToInt(Feature.high_word)] = .{
9999 .llvm_name = "high-word",
100100 .description = "Assume that the high-word facility is installed",
101 .dependencies = sparseFeatureSet(&[_]Feature{}),
101 .dependencies = featureSet(&[_]Feature{}),
102102 };
103103 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{
104104 .llvm_name = "insert-reference-bits-multiple",
105105 .description = "Assume that the insert-reference-bits-multiple facility is installed",
106 .dependencies = sparseFeatureSet(&[_]Feature{}),
106 .dependencies = featureSet(&[_]Feature{}),
107107 };
108108 result[@enumToInt(Feature.interlocked_access1)] = .{
109109 .llvm_name = "interlocked-access1",
110110 .description = "Assume that interlocked-access facility 1 is installed",
111 .dependencies = sparseFeatureSet(&[_]Feature{}),
111 .dependencies = featureSet(&[_]Feature{}),
112112 };
113113 result[@enumToInt(Feature.load_and_trap)] = .{
114114 .llvm_name = "load-and-trap",
115115 .description = "Assume that the load-and-trap facility is installed",
116 .dependencies = sparseFeatureSet(&[_]Feature{}),
116 .dependencies = featureSet(&[_]Feature{}),
117117 };
118118 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{
119119 .llvm_name = "load-and-zero-rightmost-byte",
120120 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
121 .dependencies = sparseFeatureSet(&[_]Feature{}),
121 .dependencies = featureSet(&[_]Feature{}),
122122 };
123123 result[@enumToInt(Feature.load_store_on_cond)] = .{
124124 .llvm_name = "load-store-on-cond",
125125 .description = "Assume that the load/store-on-condition facility is installed",
126 .dependencies = sparseFeatureSet(&[_]Feature{}),
126 .dependencies = featureSet(&[_]Feature{}),
127127 };
128128 result[@enumToInt(Feature.load_store_on_cond_2)] = .{
129129 .llvm_name = "load-store-on-cond-2",
130130 .description = "Assume that the load/store-on-condition facility 2 is installed",
131 .dependencies = sparseFeatureSet(&[_]Feature{}),
131 .dependencies = featureSet(&[_]Feature{}),
132132 };
133133 result[@enumToInt(Feature.message_security_assist_extension3)] = .{
134134 .llvm_name = "message-security-assist-extension3",
135135 .description = "Assume that the message-security-assist extension facility 3 is installed",
136 .dependencies = sparseFeatureSet(&[_]Feature{}),
136 .dependencies = featureSet(&[_]Feature{}),
137137 };
138138 result[@enumToInt(Feature.message_security_assist_extension4)] = .{
139139 .llvm_name = "message-security-assist-extension4",
140140 .description = "Assume that the message-security-assist extension facility 4 is installed",
141 .dependencies = sparseFeatureSet(&[_]Feature{}),
141 .dependencies = featureSet(&[_]Feature{}),
142142 };
143143 result[@enumToInt(Feature.message_security_assist_extension5)] = .{
144144 .llvm_name = "message-security-assist-extension5",
145145 .description = "Assume that the message-security-assist extension facility 5 is installed",
146 .dependencies = sparseFeatureSet(&[_]Feature{}),
146 .dependencies = featureSet(&[_]Feature{}),
147147 };
148148 result[@enumToInt(Feature.message_security_assist_extension7)] = .{
149149 .llvm_name = "message-security-assist-extension7",
150150 .description = "Assume that the message-security-assist extension facility 7 is installed",
151 .dependencies = sparseFeatureSet(&[_]Feature{}),
151 .dependencies = featureSet(&[_]Feature{}),
152152 };
153153 result[@enumToInt(Feature.message_security_assist_extension8)] = .{
154154 .llvm_name = "message-security-assist-extension8",
155155 .description = "Assume that the message-security-assist extension facility 8 is installed",
156 .dependencies = sparseFeatureSet(&[_]Feature{}),
156 .dependencies = featureSet(&[_]Feature{}),
157157 };
158158 result[@enumToInt(Feature.message_security_assist_extension9)] = .{
159159 .llvm_name = "message-security-assist-extension9",
160160 .description = "Assume that the message-security-assist extension facility 9 is installed",
161 .dependencies = sparseFeatureSet(&[_]Feature{}),
161 .dependencies = featureSet(&[_]Feature{}),
162162 };
163163 result[@enumToInt(Feature.miscellaneous_extensions)] = .{
164164 .llvm_name = "miscellaneous-extensions",
165165 .description = "Assume that the miscellaneous-extensions facility is installed",
166 .dependencies = sparseFeatureSet(&[_]Feature{}),
166 .dependencies = featureSet(&[_]Feature{}),
167167 };
168168 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{
169169 .llvm_name = "miscellaneous-extensions-2",
170170 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
171 .dependencies = sparseFeatureSet(&[_]Feature{}),
171 .dependencies = featureSet(&[_]Feature{}),
172172 };
173173 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{
174174 .llvm_name = "miscellaneous-extensions-3",
175175 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
176 .dependencies = sparseFeatureSet(&[_]Feature{}),
176 .dependencies = featureSet(&[_]Feature{}),
177177 };
178178 result[@enumToInt(Feature.population_count)] = .{
179179 .llvm_name = "population-count",
180180 .description = "Assume that the population-count facility is installed",
181 .dependencies = sparseFeatureSet(&[_]Feature{}),
181 .dependencies = featureSet(&[_]Feature{}),
182182 };
183183 result[@enumToInt(Feature.processor_assist)] = .{
184184 .llvm_name = "processor-assist",
185185 .description = "Assume that the processor-assist facility is installed",
186 .dependencies = sparseFeatureSet(&[_]Feature{}),
186 .dependencies = featureSet(&[_]Feature{}),
187187 };
188188 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
189189 .llvm_name = "reset-reference-bits-multiple",
190190 .description = "Assume that the reset-reference-bits-multiple facility is installed",
191 .dependencies = sparseFeatureSet(&[_]Feature{}),
191 .dependencies = featureSet(&[_]Feature{}),
192192 };
193193 result[@enumToInt(Feature.transactional_execution)] = .{
194194 .llvm_name = "transactional-execution",
195195 .description = "Assume that the transactional-execution facility is installed",
196 .dependencies = sparseFeatureSet(&[_]Feature{}),
196 .dependencies = featureSet(&[_]Feature{}),
197197 };
198198 result[@enumToInt(Feature.vector)] = .{
199199 .llvm_name = "vector",
200200 .description = "Assume that the vectory facility is installed",
201 .dependencies = sparseFeatureSet(&[_]Feature{}),
201 .dependencies = featureSet(&[_]Feature{}),
202202 };
203203 result[@enumToInt(Feature.vector_enhancements_1)] = .{
204204 .llvm_name = "vector-enhancements-1",
205205 .description = "Assume that the vector enhancements facility 1 is installed",
206 .dependencies = sparseFeatureSet(&[_]Feature{}),
206 .dependencies = featureSet(&[_]Feature{}),
207207 };
208208 result[@enumToInt(Feature.vector_enhancements_2)] = .{
209209 .llvm_name = "vector-enhancements-2",
210210 .description = "Assume that the vector enhancements facility 2 is installed",
211 .dependencies = sparseFeatureSet(&[_]Feature{}),
211 .dependencies = featureSet(&[_]Feature{}),
212212 };
213213 result[@enumToInt(Feature.vector_packed_decimal)] = .{
214214 .llvm_name = "vector-packed-decimal",
215215 .description = "Assume that the vector packed decimal facility is installed",
216 .dependencies = sparseFeatureSet(&[_]Feature{}),
216 .dependencies = featureSet(&[_]Feature{}),
217217 };
218218 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{
219219 .llvm_name = "vector-packed-decimal-enhancement",
220220 .description = "Assume that the vector packed decimal enhancement facility is installed",
221 .dependencies = sparseFeatureSet(&[_]Feature{}),
221 .dependencies = featureSet(&[_]Feature{}),
222222 };
223223 const ti = @typeInfo(Feature);
224224 for (result) |*elem, i| {
225225 elem.index = i;
226226 elem.name = ti.Enum.fields[i].name;
227 elem.dependencies.initAsDependencies(i, &result);
228227 }
229228 break :blk result;
230229};
......@@ -233,7 +232,7 @@ pub const cpu = struct {
233232 pub const arch10 = Cpu{
234233 .name = "arch10",
235234 .llvm_name = "arch10",
236 .features = featureSet(&all_features, &[_]Feature{
235 .features = featureSet(&[_]Feature{
237236 .dfp_zoned_conversion,
238237 .distinct_ops,
239238 .enhanced_dat_2,
......@@ -256,7 +255,7 @@ pub const cpu = struct {
256255 pub const arch11 = Cpu{
257256 .name = "arch11",
258257 .llvm_name = "arch11",
259 .features = featureSet(&all_features, &[_]Feature{
258 .features = featureSet(&[_]Feature{
260259 .dfp_packed_conversion,
261260 .dfp_zoned_conversion,
262261 .distinct_ops,
......@@ -284,7 +283,7 @@ pub const cpu = struct {
284283 pub const arch12 = Cpu{
285284 .name = "arch12",
286285 .llvm_name = "arch12",
287 .features = featureSet(&all_features, &[_]Feature{
286 .features = featureSet(&[_]Feature{
288287 .dfp_packed_conversion,
289288 .dfp_zoned_conversion,
290289 .distinct_ops,
......@@ -319,7 +318,7 @@ pub const cpu = struct {
319318 pub const arch13 = Cpu{
320319 .name = "arch13",
321320 .llvm_name = "arch13",
322 .features = featureSet(&all_features, &[_]Feature{
321 .features = featureSet(&[_]Feature{
323322 .deflate_conversion,
324323 .dfp_packed_conversion,
325324 .dfp_zoned_conversion,
......@@ -360,12 +359,12 @@ pub const cpu = struct {
360359 pub const arch8 = Cpu{
361360 .name = "arch8",
362361 .llvm_name = "arch8",
363 .features = featureSet(&all_features, &[_]Feature{}),
362 .features = featureSet(&[_]Feature{}),
364363 };
365364 pub const arch9 = Cpu{
366365 .name = "arch9",
367366 .llvm_name = "arch9",
368 .features = featureSet(&all_features, &[_]Feature{
367 .features = featureSet(&[_]Feature{
369368 .distinct_ops,
370369 .fast_serialization,
371370 .fp_extension,
......@@ -381,17 +380,17 @@ pub const cpu = struct {
381380 pub const generic = Cpu{
382381 .name = "generic",
383382 .llvm_name = "generic",
384 .features = featureSet(&all_features, &[_]Feature{}),
383 .features = featureSet(&[_]Feature{}),
385384 };
386385 pub const z10 = Cpu{
387386 .name = "z10",
388387 .llvm_name = "z10",
389 .features = featureSet(&all_features, &[_]Feature{}),
388 .features = featureSet(&[_]Feature{}),
390389 };
391390 pub const z13 = Cpu{
392391 .name = "z13",
393392 .llvm_name = "z13",
394 .features = featureSet(&all_features, &[_]Feature{
393 .features = featureSet(&[_]Feature{
395394 .dfp_packed_conversion,
396395 .dfp_zoned_conversion,
397396 .distinct_ops,
......@@ -419,7 +418,7 @@ pub const cpu = struct {
419418 pub const z14 = Cpu{
420419 .name = "z14",
421420 .llvm_name = "z14",
422 .features = featureSet(&all_features, &[_]Feature{
421 .features = featureSet(&[_]Feature{
423422 .dfp_packed_conversion,
424423 .dfp_zoned_conversion,
425424 .distinct_ops,
......@@ -454,7 +453,7 @@ pub const cpu = struct {
454453 pub const z196 = Cpu{
455454 .name = "z196",
456455 .llvm_name = "z196",
457 .features = featureSet(&all_features, &[_]Feature{
456 .features = featureSet(&[_]Feature{
458457 .distinct_ops,
459458 .fast_serialization,
460459 .fp_extension,
......@@ -470,7 +469,7 @@ pub const cpu = struct {
470469 pub const zEC12 = Cpu{
471470 .name = "zEC12",
472471 .llvm_name = "zEC12",
473 .features = featureSet(&all_features, &[_]Feature{
472 .features = featureSet(&[_]Feature{
474473 .dfp_zoned_conversion,
475474 .distinct_ops,
476475 .enhanced_dat_2,
lib/std/target/wasm.zig+13-14
......@@ -23,52 +23,52 @@ pub const all_features = blk: {
2323 result[@enumToInt(Feature.atomics)] = .{
2424 .llvm_name = "atomics",
2525 .description = "Enable Atomics",
26 .dependencies = sparseFeatureSet(&[_]Feature{}),
26 .dependencies = featureSet(&[_]Feature{}),
2727 };
2828 result[@enumToInt(Feature.bulk_memory)] = .{
2929 .llvm_name = "bulk-memory",
3030 .description = "Enable bulk memory operations",
31 .dependencies = sparseFeatureSet(&[_]Feature{}),
31 .dependencies = featureSet(&[_]Feature{}),
3232 };
3333 result[@enumToInt(Feature.exception_handling)] = .{
3434 .llvm_name = "exception-handling",
3535 .description = "Enable Wasm exception handling",
36 .dependencies = sparseFeatureSet(&[_]Feature{}),
36 .dependencies = featureSet(&[_]Feature{}),
3737 };
3838 result[@enumToInt(Feature.multivalue)] = .{
3939 .llvm_name = "multivalue",
4040 .description = "Enable multivalue blocks, instructions, and functions",
41 .dependencies = sparseFeatureSet(&[_]Feature{}),
41 .dependencies = featureSet(&[_]Feature{}),
4242 };
4343 result[@enumToInt(Feature.mutable_globals)] = .{
4444 .llvm_name = "mutable-globals",
4545 .description = "Enable mutable globals",
46 .dependencies = sparseFeatureSet(&[_]Feature{}),
46 .dependencies = featureSet(&[_]Feature{}),
4747 };
4848 result[@enumToInt(Feature.nontrapping_fptoint)] = .{
4949 .llvm_name = "nontrapping-fptoint",
5050 .description = "Enable non-trapping float-to-int conversion operators",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),
51 .dependencies = featureSet(&[_]Feature{}),
5252 };
5353 result[@enumToInt(Feature.sign_ext)] = .{
5454 .llvm_name = "sign-ext",
5555 .description = "Enable sign extension operators",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),
56 .dependencies = featureSet(&[_]Feature{}),
5757 };
5858 result[@enumToInt(Feature.simd128)] = .{
5959 .llvm_name = "simd128",
6060 .description = "Enable 128-bit SIMD",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),
61 .dependencies = featureSet(&[_]Feature{}),
6262 };
6363 result[@enumToInt(Feature.tail_call)] = .{
6464 .llvm_name = "tail-call",
6565 .description = "Enable tail call instructions",
66 .dependencies = sparseFeatureSet(&[_]Feature{}),
66 .dependencies = featureSet(&[_]Feature{}),
6767 };
6868 result[@enumToInt(Feature.unimplemented_simd128)] = .{
6969 .llvm_name = "unimplemented-simd128",
7070 .description = "Enable 128-bit SIMD not yet implemented in engines",
71 .dependencies = sparseFeatureSet(&[_]Feature{
71 .dependencies = featureSet(&[_]Feature{
7272 .simd128,
7373 }),
7474 };
......@@ -76,7 +76,6 @@ pub const all_features = blk: {
7676 for (result) |*elem, i| {
7777 elem.index = i;
7878 elem.name = ti.Enum.fields[i].name;
79 elem.dependencies.initAsDependencies(i, &result);
8079 }
8180 break :blk result;
8281};
......@@ -85,7 +84,7 @@ pub const cpu = struct {
8584 pub const bleeding_edge = Cpu{
8685 .name = "bleeding_edge",
8786 .llvm_name = "bleeding-edge",
88 .features = featureSet(&all_features, &[_]Feature{
87 .features = featureSet(&[_]Feature{
8988 .atomics,
9089 .mutable_globals,
9190 .nontrapping_fptoint,
......@@ -96,12 +95,12 @@ pub const cpu = struct {
9695 pub const generic = Cpu{
9796 .name = "generic",
9897 .llvm_name = "generic",
99 .features = featureSet(&all_features, &[_]Feature{}),
98 .features = featureSet(&[_]Feature{}),
10099 };
101100 pub const mvp = Cpu{
102101 .name = "mvp",
103102 .llvm_name = "mvp",
104 .features = featureSet(&all_features, &[_]Feature{}),
103 .features = featureSet(&[_]Feature{}),
105104 };
106105};
107106
lib/std/target/x86.zig+199-201
......@@ -128,101 +128,100 @@ pub const Feature = enum {
128128pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
129129
130130pub const all_features = blk: {
131 @setEvalBranchQuota(10000);
132131 const len = @typeInfo(Feature).Enum.fields.len;
133132 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
134133 var result: [len]Cpu.Feature = undefined;
135134 result[@enumToInt(Feature.@"3dnow")] = .{
136135 .llvm_name = "3dnow",
137136 .description = "Enable 3DNow! instructions",
138 .dependencies = sparseFeatureSet(&[_]Feature{
137 .dependencies = featureSet(&[_]Feature{
139138 .mmx,
140139 }),
141140 };
142141 result[@enumToInt(Feature.@"3dnowa")] = .{
143142 .llvm_name = "3dnowa",
144143 .description = "Enable 3DNow! Athlon instructions",
145 .dependencies = sparseFeatureSet(&[_]Feature{
144 .dependencies = featureSet(&[_]Feature{
146145 .@"3dnow",
147146 }),
148147 };
149148 result[@enumToInt(Feature.@"64bit")] = .{
150149 .llvm_name = "64bit",
151150 .description = "Support 64-bit instructions",
152 .dependencies = sparseFeatureSet(&[_]Feature{}),
151 .dependencies = featureSet(&[_]Feature{}),
153152 };
154153 result[@enumToInt(Feature.adx)] = .{
155154 .llvm_name = "adx",
156155 .description = "Support ADX instructions",
157 .dependencies = sparseFeatureSet(&[_]Feature{}),
156 .dependencies = featureSet(&[_]Feature{}),
158157 };
159158 result[@enumToInt(Feature.aes)] = .{
160159 .llvm_name = "aes",
161160 .description = "Enable AES instructions",
162 .dependencies = sparseFeatureSet(&[_]Feature{
161 .dependencies = featureSet(&[_]Feature{
163162 .sse2,
164163 }),
165164 };
166165 result[@enumToInt(Feature.avx)] = .{
167166 .llvm_name = "avx",
168167 .description = "Enable AVX instructions",
169 .dependencies = sparseFeatureSet(&[_]Feature{
168 .dependencies = featureSet(&[_]Feature{
170169 .sse4_2,
171170 }),
172171 };
173172 result[@enumToInt(Feature.avx2)] = .{
174173 .llvm_name = "avx2",
175174 .description = "Enable AVX2 instructions",
176 .dependencies = sparseFeatureSet(&[_]Feature{
175 .dependencies = featureSet(&[_]Feature{
177176 .avx,
178177 }),
179178 };
180179 result[@enumToInt(Feature.avx512bf16)] = .{
181180 .llvm_name = "avx512bf16",
182181 .description = "Support bfloat16 floating point",
183 .dependencies = sparseFeatureSet(&[_]Feature{
182 .dependencies = featureSet(&[_]Feature{
184183 .avx512bw,
185184 }),
186185 };
187186 result[@enumToInt(Feature.avx512bitalg)] = .{
188187 .llvm_name = "avx512bitalg",
189188 .description = "Enable AVX-512 Bit Algorithms",
190 .dependencies = sparseFeatureSet(&[_]Feature{
189 .dependencies = featureSet(&[_]Feature{
191190 .avx512bw,
192191 }),
193192 };
194193 result[@enumToInt(Feature.avx512bw)] = .{
195194 .llvm_name = "avx512bw",
196195 .description = "Enable AVX-512 Byte and Word Instructions",
197 .dependencies = sparseFeatureSet(&[_]Feature{
196 .dependencies = featureSet(&[_]Feature{
198197 .avx512f,
199198 }),
200199 };
201200 result[@enumToInt(Feature.avx512cd)] = .{
202201 .llvm_name = "avx512cd",
203202 .description = "Enable AVX-512 Conflict Detection Instructions",
204 .dependencies = sparseFeatureSet(&[_]Feature{
203 .dependencies = featureSet(&[_]Feature{
205204 .avx512f,
206205 }),
207206 };
208207 result[@enumToInt(Feature.avx512dq)] = .{
209208 .llvm_name = "avx512dq",
210209 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
211 .dependencies = sparseFeatureSet(&[_]Feature{
210 .dependencies = featureSet(&[_]Feature{
212211 .avx512f,
213212 }),
214213 };
215214 result[@enumToInt(Feature.avx512er)] = .{
216215 .llvm_name = "avx512er",
217216 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
218 .dependencies = sparseFeatureSet(&[_]Feature{
217 .dependencies = featureSet(&[_]Feature{
219218 .avx512f,
220219 }),
221220 };
222221 result[@enumToInt(Feature.avx512f)] = .{
223222 .llvm_name = "avx512f",
224223 .description = "Enable AVX-512 instructions",
225 .dependencies = sparseFeatureSet(&[_]Feature{
224 .dependencies = featureSet(&[_]Feature{
226225 .avx2,
227226 .f16c,
228227 .fma,
......@@ -231,216 +230,216 @@ pub const all_features = blk: {
231230 result[@enumToInt(Feature.avx512ifma)] = .{
232231 .llvm_name = "avx512ifma",
233232 .description = "Enable AVX-512 Integer Fused Multiple-Add",
234 .dependencies = sparseFeatureSet(&[_]Feature{
233 .dependencies = featureSet(&[_]Feature{
235234 .avx512f,
236235 }),
237236 };
238237 result[@enumToInt(Feature.avx512pf)] = .{
239238 .llvm_name = "avx512pf",
240239 .description = "Enable AVX-512 PreFetch Instructions",
241 .dependencies = sparseFeatureSet(&[_]Feature{
240 .dependencies = featureSet(&[_]Feature{
242241 .avx512f,
243242 }),
244243 };
245244 result[@enumToInt(Feature.avx512vbmi)] = .{
246245 .llvm_name = "avx512vbmi",
247246 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
248 .dependencies = sparseFeatureSet(&[_]Feature{
247 .dependencies = featureSet(&[_]Feature{
249248 .avx512bw,
250249 }),
251250 };
252251 result[@enumToInt(Feature.avx512vbmi2)] = .{
253252 .llvm_name = "avx512vbmi2",
254253 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
255 .dependencies = sparseFeatureSet(&[_]Feature{
254 .dependencies = featureSet(&[_]Feature{
256255 .avx512bw,
257256 }),
258257 };
259258 result[@enumToInt(Feature.avx512vl)] = .{
260259 .llvm_name = "avx512vl",
261260 .description = "Enable AVX-512 Vector Length eXtensions",
262 .dependencies = sparseFeatureSet(&[_]Feature{
261 .dependencies = featureSet(&[_]Feature{
263262 .avx512f,
264263 }),
265264 };
266265 result[@enumToInt(Feature.avx512vnni)] = .{
267266 .llvm_name = "avx512vnni",
268267 .description = "Enable AVX-512 Vector Neural Network Instructions",
269 .dependencies = sparseFeatureSet(&[_]Feature{
268 .dependencies = featureSet(&[_]Feature{
270269 .avx512f,
271270 }),
272271 };
273272 result[@enumToInt(Feature.avx512vp2intersect)] = .{
274273 .llvm_name = "avx512vp2intersect",
275274 .description = "Enable AVX-512 vp2intersect",
276 .dependencies = sparseFeatureSet(&[_]Feature{
275 .dependencies = featureSet(&[_]Feature{
277276 .avx512f,
278277 }),
279278 };
280279 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
281280 .llvm_name = "avx512vpopcntdq",
282281 .description = "Enable AVX-512 Population Count Instructions",
283 .dependencies = sparseFeatureSet(&[_]Feature{
282 .dependencies = featureSet(&[_]Feature{
284283 .avx512f,
285284 }),
286285 };
287286 result[@enumToInt(Feature.bmi)] = .{
288287 .llvm_name = "bmi",
289288 .description = "Support BMI instructions",
290 .dependencies = sparseFeatureSet(&[_]Feature{}),
289 .dependencies = featureSet(&[_]Feature{}),
291290 };
292291 result[@enumToInt(Feature.bmi2)] = .{
293292 .llvm_name = "bmi2",
294293 .description = "Support BMI2 instructions",
295 .dependencies = sparseFeatureSet(&[_]Feature{}),
294 .dependencies = featureSet(&[_]Feature{}),
296295 };
297296 result[@enumToInt(Feature.branchfusion)] = .{
298297 .llvm_name = "branchfusion",
299298 .description = "CMP/TEST can be fused with conditional branches",
300 .dependencies = sparseFeatureSet(&[_]Feature{}),
299 .dependencies = featureSet(&[_]Feature{}),
301300 };
302301 result[@enumToInt(Feature.cldemote)] = .{
303302 .llvm_name = "cldemote",
304303 .description = "Enable Cache Demote",
305 .dependencies = sparseFeatureSet(&[_]Feature{}),
304 .dependencies = featureSet(&[_]Feature{}),
306305 };
307306 result[@enumToInt(Feature.clflushopt)] = .{
308307 .llvm_name = "clflushopt",
309308 .description = "Flush A Cache Line Optimized",
310 .dependencies = sparseFeatureSet(&[_]Feature{}),
309 .dependencies = featureSet(&[_]Feature{}),
311310 };
312311 result[@enumToInt(Feature.clwb)] = .{
313312 .llvm_name = "clwb",
314313 .description = "Cache Line Write Back",
315 .dependencies = sparseFeatureSet(&[_]Feature{}),
314 .dependencies = featureSet(&[_]Feature{}),
316315 };
317316 result[@enumToInt(Feature.clzero)] = .{
318317 .llvm_name = "clzero",
319318 .description = "Enable Cache Line Zero",
320 .dependencies = sparseFeatureSet(&[_]Feature{}),
319 .dependencies = featureSet(&[_]Feature{}),
321320 };
322321 result[@enumToInt(Feature.cmov)] = .{
323322 .llvm_name = "cmov",
324323 .description = "Enable conditional move instructions",
325 .dependencies = sparseFeatureSet(&[_]Feature{}),
324 .dependencies = featureSet(&[_]Feature{}),
326325 };
327326 result[@enumToInt(Feature.cx16)] = .{
328327 .llvm_name = "cx16",
329328 .description = "64-bit with cmpxchg16b",
330 .dependencies = sparseFeatureSet(&[_]Feature{
329 .dependencies = featureSet(&[_]Feature{
331330 .cx8,
332331 }),
333332 };
334333 result[@enumToInt(Feature.cx8)] = .{
335334 .llvm_name = "cx8",
336335 .description = "Support CMPXCHG8B instructions",
337 .dependencies = sparseFeatureSet(&[_]Feature{}),
336 .dependencies = featureSet(&[_]Feature{}),
338337 };
339338 result[@enumToInt(Feature.enqcmd)] = .{
340339 .llvm_name = "enqcmd",
341340 .description = "Has ENQCMD instructions",
342 .dependencies = sparseFeatureSet(&[_]Feature{}),
341 .dependencies = featureSet(&[_]Feature{}),
343342 };
344343 result[@enumToInt(Feature.ermsb)] = .{
345344 .llvm_name = "ermsb",
346345 .description = "REP MOVS/STOS are fast",
347 .dependencies = sparseFeatureSet(&[_]Feature{}),
346 .dependencies = featureSet(&[_]Feature{}),
348347 };
349348 result[@enumToInt(Feature.f16c)] = .{
350349 .llvm_name = "f16c",
351350 .description = "Support 16-bit floating point conversion instructions",
352 .dependencies = sparseFeatureSet(&[_]Feature{
351 .dependencies = featureSet(&[_]Feature{
353352 .avx,
354353 }),
355354 };
356355 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{
357356 .llvm_name = "false-deps-lzcnt-tzcnt",
358357 .description = "LZCNT/TZCNT have a false dependency on dest register",
359 .dependencies = sparseFeatureSet(&[_]Feature{}),
358 .dependencies = featureSet(&[_]Feature{}),
360359 };
361360 result[@enumToInt(Feature.false_deps_popcnt)] = .{
362361 .llvm_name = "false-deps-popcnt",
363362 .description = "POPCNT has a false dependency on dest register",
364 .dependencies = sparseFeatureSet(&[_]Feature{}),
363 .dependencies = featureSet(&[_]Feature{}),
365364 };
366365 result[@enumToInt(Feature.fast_11bytenop)] = .{
367366 .llvm_name = "fast-11bytenop",
368367 .description = "Target can quickly decode up to 11 byte NOPs",
369 .dependencies = sparseFeatureSet(&[_]Feature{}),
368 .dependencies = featureSet(&[_]Feature{}),
370369 };
371370 result[@enumToInt(Feature.fast_15bytenop)] = .{
372371 .llvm_name = "fast-15bytenop",
373372 .description = "Target can quickly decode up to 15 byte NOPs",
374 .dependencies = sparseFeatureSet(&[_]Feature{}),
373 .dependencies = featureSet(&[_]Feature{}),
375374 };
376375 result[@enumToInt(Feature.fast_bextr)] = .{
377376 .llvm_name = "fast-bextr",
378377 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
379 .dependencies = sparseFeatureSet(&[_]Feature{}),
378 .dependencies = featureSet(&[_]Feature{}),
380379 };
381380 result[@enumToInt(Feature.fast_gather)] = .{
382381 .llvm_name = "fast-gather",
383382 .description = "Indicates if gather is reasonably fast",
384 .dependencies = sparseFeatureSet(&[_]Feature{}),
383 .dependencies = featureSet(&[_]Feature{}),
385384 };
386385 result[@enumToInt(Feature.fast_hops)] = .{
387386 .llvm_name = "fast-hops",
388387 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
389 .dependencies = sparseFeatureSet(&[_]Feature{
388 .dependencies = featureSet(&[_]Feature{
390389 .sse3,
391390 }),
392391 };
393392 result[@enumToInt(Feature.fast_lzcnt)] = .{
394393 .llvm_name = "fast-lzcnt",
395394 .description = "LZCNT instructions are as fast as most simple integer ops",
396 .dependencies = sparseFeatureSet(&[_]Feature{}),
395 .dependencies = featureSet(&[_]Feature{}),
397396 };
398397 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{
399398 .llvm_name = "fast-partial-ymm-or-zmm-write",
400399 .description = "Partial writes to YMM/ZMM registers are fast",
401 .dependencies = sparseFeatureSet(&[_]Feature{}),
400 .dependencies = featureSet(&[_]Feature{}),
402401 };
403402 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
404403 .llvm_name = "fast-scalar-fsqrt",
405404 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
406 .dependencies = sparseFeatureSet(&[_]Feature{}),
405 .dependencies = featureSet(&[_]Feature{}),
407406 };
408407 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{
409408 .llvm_name = "fast-scalar-shift-masks",
410409 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
411 .dependencies = sparseFeatureSet(&[_]Feature{}),
410 .dependencies = featureSet(&[_]Feature{}),
412411 };
413412 result[@enumToInt(Feature.fast_shld_rotate)] = .{
414413 .llvm_name = "fast-shld-rotate",
415414 .description = "SHLD can be used as a faster rotate",
416 .dependencies = sparseFeatureSet(&[_]Feature{}),
415 .dependencies = featureSet(&[_]Feature{}),
417416 };
418417 result[@enumToInt(Feature.fast_variable_shuffle)] = .{
419418 .llvm_name = "fast-variable-shuffle",
420419 .description = "Shuffles with variable masks are fast",
421 .dependencies = sparseFeatureSet(&[_]Feature{}),
420 .dependencies = featureSet(&[_]Feature{}),
422421 };
423422 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
424423 .llvm_name = "fast-vector-fsqrt",
425424 .description = "Vector SQRT is fast (disable Newton-Raphson)",
426 .dependencies = sparseFeatureSet(&[_]Feature{}),
425 .dependencies = featureSet(&[_]Feature{}),
427426 };
428427 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{
429428 .llvm_name = "fast-vector-shift-masks",
430429 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",
431 .dependencies = sparseFeatureSet(&[_]Feature{}),
430 .dependencies = featureSet(&[_]Feature{}),
432431 };
433432 result[@enumToInt(Feature.fma)] = .{
434433 .llvm_name = "fma",
435434 .description = "Enable three-operand fused multiple-add",
436 .dependencies = sparseFeatureSet(&[_]Feature{
435 .dependencies = featureSet(&[_]Feature{
437436 .avx,
438437 }),
439438 };
440439 result[@enumToInt(Feature.fma4)] = .{
441440 .llvm_name = "fma4",
442441 .description = "Enable four-operand fused multiple-add",
443 .dependencies = sparseFeatureSet(&[_]Feature{
442 .dependencies = featureSet(&[_]Feature{
444443 .avx,
445444 .sse4a,
446445 }),
......@@ -448,166 +447,166 @@ pub const all_features = blk: {
448447 result[@enumToInt(Feature.fsgsbase)] = .{
449448 .llvm_name = "fsgsbase",
450449 .description = "Support FS/GS Base instructions",
451 .dependencies = sparseFeatureSet(&[_]Feature{}),
450 .dependencies = featureSet(&[_]Feature{}),
452451 };
453452 result[@enumToInt(Feature.fxsr)] = .{
454453 .llvm_name = "fxsr",
455454 .description = "Support fxsave/fxrestore instructions",
456 .dependencies = sparseFeatureSet(&[_]Feature{}),
455 .dependencies = featureSet(&[_]Feature{}),
457456 };
458457 result[@enumToInt(Feature.gfni)] = .{
459458 .llvm_name = "gfni",
460459 .description = "Enable Galois Field Arithmetic Instructions",
461 .dependencies = sparseFeatureSet(&[_]Feature{
460 .dependencies = featureSet(&[_]Feature{
462461 .sse2,
463462 }),
464463 };
465464 result[@enumToInt(Feature.idivl_to_divb)] = .{
466465 .llvm_name = "idivl-to-divb",
467466 .description = "Use 8-bit divide for positive values less than 256",
468 .dependencies = sparseFeatureSet(&[_]Feature{}),
467 .dependencies = featureSet(&[_]Feature{}),
469468 };
470469 result[@enumToInt(Feature.idivq_to_divl)] = .{
471470 .llvm_name = "idivq-to-divl",
472471 .description = "Use 32-bit divide for positive values less than 2^32",
473 .dependencies = sparseFeatureSet(&[_]Feature{}),
472 .dependencies = featureSet(&[_]Feature{}),
474473 };
475474 result[@enumToInt(Feature.invpcid)] = .{
476475 .llvm_name = "invpcid",
477476 .description = "Invalidate Process-Context Identifier",
478 .dependencies = sparseFeatureSet(&[_]Feature{}),
477 .dependencies = featureSet(&[_]Feature{}),
479478 };
480479 result[@enumToInt(Feature.lea_sp)] = .{
481480 .llvm_name = "lea-sp",
482481 .description = "Use LEA for adjusting the stack pointer",
483 .dependencies = sparseFeatureSet(&[_]Feature{}),
482 .dependencies = featureSet(&[_]Feature{}),
484483 };
485484 result[@enumToInt(Feature.lea_uses_ag)] = .{
486485 .llvm_name = "lea-uses-ag",
487486 .description = "LEA instruction needs inputs at AG stage",
488 .dependencies = sparseFeatureSet(&[_]Feature{}),
487 .dependencies = featureSet(&[_]Feature{}),
489488 };
490489 result[@enumToInt(Feature.lwp)] = .{
491490 .llvm_name = "lwp",
492491 .description = "Enable LWP instructions",
493 .dependencies = sparseFeatureSet(&[_]Feature{}),
492 .dependencies = featureSet(&[_]Feature{}),
494493 };
495494 result[@enumToInt(Feature.lzcnt)] = .{
496495 .llvm_name = "lzcnt",
497496 .description = "Support LZCNT instruction",
498 .dependencies = sparseFeatureSet(&[_]Feature{}),
497 .dependencies = featureSet(&[_]Feature{}),
499498 };
500499 result[@enumToInt(Feature.macrofusion)] = .{
501500 .llvm_name = "macrofusion",
502501 .description = "Various instructions can be fused with conditional branches",
503 .dependencies = sparseFeatureSet(&[_]Feature{}),
502 .dependencies = featureSet(&[_]Feature{}),
504503 };
505504 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
506505 .llvm_name = "merge-to-threeway-branch",
507506 .description = "Merge branches to a three-way conditional branch",
508 .dependencies = sparseFeatureSet(&[_]Feature{}),
507 .dependencies = featureSet(&[_]Feature{}),
509508 };
510509 result[@enumToInt(Feature.mmx)] = .{
511510 .llvm_name = "mmx",
512511 .description = "Enable MMX instructions",
513 .dependencies = sparseFeatureSet(&[_]Feature{}),
512 .dependencies = featureSet(&[_]Feature{}),
514513 };
515514 result[@enumToInt(Feature.movbe)] = .{
516515 .llvm_name = "movbe",
517516 .description = "Support MOVBE instruction",
518 .dependencies = sparseFeatureSet(&[_]Feature{}),
517 .dependencies = featureSet(&[_]Feature{}),
519518 };
520519 result[@enumToInt(Feature.movdir64b)] = .{
521520 .llvm_name = "movdir64b",
522521 .description = "Support movdir64b instruction",
523 .dependencies = sparseFeatureSet(&[_]Feature{}),
522 .dependencies = featureSet(&[_]Feature{}),
524523 };
525524 result[@enumToInt(Feature.movdiri)] = .{
526525 .llvm_name = "movdiri",
527526 .description = "Support movdiri instruction",
528 .dependencies = sparseFeatureSet(&[_]Feature{}),
527 .dependencies = featureSet(&[_]Feature{}),
529528 };
530529 result[@enumToInt(Feature.mpx)] = .{
531530 .llvm_name = "mpx",
532531 .description = "Support MPX instructions",
533 .dependencies = sparseFeatureSet(&[_]Feature{}),
532 .dependencies = featureSet(&[_]Feature{}),
534533 };
535534 result[@enumToInt(Feature.mwaitx)] = .{
536535 .llvm_name = "mwaitx",
537536 .description = "Enable MONITORX/MWAITX timer functionality",
538 .dependencies = sparseFeatureSet(&[_]Feature{}),
537 .dependencies = featureSet(&[_]Feature{}),
539538 };
540539 result[@enumToInt(Feature.nopl)] = .{
541540 .llvm_name = "nopl",
542541 .description = "Enable NOPL instruction",
543 .dependencies = sparseFeatureSet(&[_]Feature{}),
542 .dependencies = featureSet(&[_]Feature{}),
544543 };
545544 result[@enumToInt(Feature.pad_short_functions)] = .{
546545 .llvm_name = "pad-short-functions",
547546 .description = "Pad short functions",
548 .dependencies = sparseFeatureSet(&[_]Feature{}),
547 .dependencies = featureSet(&[_]Feature{}),
549548 };
550549 result[@enumToInt(Feature.pclmul)] = .{
551550 .llvm_name = "pclmul",
552551 .description = "Enable packed carry-less multiplication instructions",
553 .dependencies = sparseFeatureSet(&[_]Feature{
552 .dependencies = featureSet(&[_]Feature{
554553 .sse2,
555554 }),
556555 };
557556 result[@enumToInt(Feature.pconfig)] = .{
558557 .llvm_name = "pconfig",
559558 .description = "platform configuration instruction",
560 .dependencies = sparseFeatureSet(&[_]Feature{}),
559 .dependencies = featureSet(&[_]Feature{}),
561560 };
562561 result[@enumToInt(Feature.pku)] = .{
563562 .llvm_name = "pku",
564563 .description = "Enable protection keys",
565 .dependencies = sparseFeatureSet(&[_]Feature{}),
564 .dependencies = featureSet(&[_]Feature{}),
566565 };
567566 result[@enumToInt(Feature.popcnt)] = .{
568567 .llvm_name = "popcnt",
569568 .description = "Support POPCNT instruction",
570 .dependencies = sparseFeatureSet(&[_]Feature{}),
569 .dependencies = featureSet(&[_]Feature{}),
571570 };
572571 result[@enumToInt(Feature.prefer_256_bit)] = .{
573572 .llvm_name = "prefer-256-bit",
574573 .description = "Prefer 256-bit AVX instructions",
575 .dependencies = sparseFeatureSet(&[_]Feature{}),
574 .dependencies = featureSet(&[_]Feature{}),
576575 };
577576 result[@enumToInt(Feature.prefetchwt1)] = .{
578577 .llvm_name = "prefetchwt1",
579578 .description = "Prefetch with Intent to Write and T1 Hint",
580 .dependencies = sparseFeatureSet(&[_]Feature{}),
579 .dependencies = featureSet(&[_]Feature{}),
581580 };
582581 result[@enumToInt(Feature.prfchw)] = .{
583582 .llvm_name = "prfchw",
584583 .description = "Support PRFCHW instructions",
585 .dependencies = sparseFeatureSet(&[_]Feature{}),
584 .dependencies = featureSet(&[_]Feature{}),
586585 };
587586 result[@enumToInt(Feature.ptwrite)] = .{
588587 .llvm_name = "ptwrite",
589588 .description = "Support ptwrite instruction",
590 .dependencies = sparseFeatureSet(&[_]Feature{}),
589 .dependencies = featureSet(&[_]Feature{}),
591590 };
592591 result[@enumToInt(Feature.rdpid)] = .{
593592 .llvm_name = "rdpid",
594593 .description = "Support RDPID instructions",
595 .dependencies = sparseFeatureSet(&[_]Feature{}),
594 .dependencies = featureSet(&[_]Feature{}),
596595 };
597596 result[@enumToInt(Feature.rdrnd)] = .{
598597 .llvm_name = "rdrnd",
599598 .description = "Support RDRAND instruction",
600 .dependencies = sparseFeatureSet(&[_]Feature{}),
599 .dependencies = featureSet(&[_]Feature{}),
601600 };
602601 result[@enumToInt(Feature.rdseed)] = .{
603602 .llvm_name = "rdseed",
604603 .description = "Support RDSEED instruction",
605 .dependencies = sparseFeatureSet(&[_]Feature{}),
604 .dependencies = featureSet(&[_]Feature{}),
606605 };
607606 result[@enumToInt(Feature.retpoline)] = .{
608607 .llvm_name = "retpoline",
609608 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",
610 .dependencies = sparseFeatureSet(&[_]Feature{
609 .dependencies = featureSet(&[_]Feature{
611610 .retpoline_indirect_branches,
612611 .retpoline_indirect_calls,
613612 }),
......@@ -615,158 +614,158 @@ pub const all_features = blk: {
615614 result[@enumToInt(Feature.retpoline_external_thunk)] = .{
616615 .llvm_name = "retpoline-external-thunk",
617616 .description = "When lowering an indirect call or branch using a `retpoline`, rely on the specified user provided thunk rather than emitting one ourselves. Only has effect when combined with some other retpoline feature",
618 .dependencies = sparseFeatureSet(&[_]Feature{
617 .dependencies = featureSet(&[_]Feature{
619618 .retpoline_indirect_calls,
620619 }),
621620 };
622621 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{
623622 .llvm_name = "retpoline-indirect-branches",
624623 .description = "Remove speculation of indirect branches from the generated code",
625 .dependencies = sparseFeatureSet(&[_]Feature{}),
624 .dependencies = featureSet(&[_]Feature{}),
626625 };
627626 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{
628627 .llvm_name = "retpoline-indirect-calls",
629628 .description = "Remove speculation of indirect calls from the generated code",
630 .dependencies = sparseFeatureSet(&[_]Feature{}),
629 .dependencies = featureSet(&[_]Feature{}),
631630 };
632631 result[@enumToInt(Feature.rtm)] = .{
633632 .llvm_name = "rtm",
634633 .description = "Support RTM instructions",
635 .dependencies = sparseFeatureSet(&[_]Feature{}),
634 .dependencies = featureSet(&[_]Feature{}),
636635 };
637636 result[@enumToInt(Feature.sahf)] = .{
638637 .llvm_name = "sahf",
639638 .description = "Support LAHF and SAHF instructions",
640 .dependencies = sparseFeatureSet(&[_]Feature{}),
639 .dependencies = featureSet(&[_]Feature{}),
641640 };
642641 result[@enumToInt(Feature.sgx)] = .{
643642 .llvm_name = "sgx",
644643 .description = "Enable Software Guard Extensions",
645 .dependencies = sparseFeatureSet(&[_]Feature{}),
644 .dependencies = featureSet(&[_]Feature{}),
646645 };
647646 result[@enumToInt(Feature.sha)] = .{
648647 .llvm_name = "sha",
649648 .description = "Enable SHA instructions",
650 .dependencies = sparseFeatureSet(&[_]Feature{
649 .dependencies = featureSet(&[_]Feature{
651650 .sse2,
652651 }),
653652 };
654653 result[@enumToInt(Feature.shstk)] = .{
655654 .llvm_name = "shstk",
656655 .description = "Support CET Shadow-Stack instructions",
657 .dependencies = sparseFeatureSet(&[_]Feature{}),
656 .dependencies = featureSet(&[_]Feature{}),
658657 };
659658 result[@enumToInt(Feature.slow_3ops_lea)] = .{
660659 .llvm_name = "slow-3ops-lea",
661660 .description = "LEA instruction with 3 ops or certain registers is slow",
662 .dependencies = sparseFeatureSet(&[_]Feature{}),
661 .dependencies = featureSet(&[_]Feature{}),
663662 };
664663 result[@enumToInt(Feature.slow_incdec)] = .{
665664 .llvm_name = "slow-incdec",
666665 .description = "INC and DEC instructions are slower than ADD and SUB",
667 .dependencies = sparseFeatureSet(&[_]Feature{}),
666 .dependencies = featureSet(&[_]Feature{}),
668667 };
669668 result[@enumToInt(Feature.slow_lea)] = .{
670669 .llvm_name = "slow-lea",
671670 .description = "LEA instruction with certain arguments is slow",
672 .dependencies = sparseFeatureSet(&[_]Feature{}),
671 .dependencies = featureSet(&[_]Feature{}),
673672 };
674673 result[@enumToInt(Feature.slow_pmaddwd)] = .{
675674 .llvm_name = "slow-pmaddwd",
676675 .description = "PMADDWD is slower than PMULLD",
677 .dependencies = sparseFeatureSet(&[_]Feature{}),
676 .dependencies = featureSet(&[_]Feature{}),
678677 };
679678 result[@enumToInt(Feature.slow_pmulld)] = .{
680679 .llvm_name = "slow-pmulld",
681680 .description = "PMULLD instruction is slow",
682 .dependencies = sparseFeatureSet(&[_]Feature{}),
681 .dependencies = featureSet(&[_]Feature{}),
683682 };
684683 result[@enumToInt(Feature.slow_shld)] = .{
685684 .llvm_name = "slow-shld",
686685 .description = "SHLD instruction is slow",
687 .dependencies = sparseFeatureSet(&[_]Feature{}),
686 .dependencies = featureSet(&[_]Feature{}),
688687 };
689688 result[@enumToInt(Feature.slow_two_mem_ops)] = .{
690689 .llvm_name = "slow-two-mem-ops",
691690 .description = "Two memory operand instructions are slow",
692 .dependencies = sparseFeatureSet(&[_]Feature{}),
691 .dependencies = featureSet(&[_]Feature{}),
693692 };
694693 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{
695694 .llvm_name = "slow-unaligned-mem-16",
696695 .description = "Slow unaligned 16-byte memory access",
697 .dependencies = sparseFeatureSet(&[_]Feature{}),
696 .dependencies = featureSet(&[_]Feature{}),
698697 };
699698 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{
700699 .llvm_name = "slow-unaligned-mem-32",
701700 .description = "Slow unaligned 32-byte memory access",
702 .dependencies = sparseFeatureSet(&[_]Feature{}),
701 .dependencies = featureSet(&[_]Feature{}),
703702 };
704703 result[@enumToInt(Feature.soft_float)] = .{
705704 .llvm_name = "soft-float",
706705 .description = "Use software floating point features",
707 .dependencies = sparseFeatureSet(&[_]Feature{}),
706 .dependencies = featureSet(&[_]Feature{}),
708707 };
709708 result[@enumToInt(Feature.sse)] = .{
710709 .llvm_name = "sse",
711710 .description = "Enable SSE instructions",
712 .dependencies = sparseFeatureSet(&[_]Feature{}),
711 .dependencies = featureSet(&[_]Feature{}),
713712 };
714713 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
715714 .llvm_name = "sse-unaligned-mem",
716715 .description = "Allow unaligned memory operands with SSE instructions",
717 .dependencies = sparseFeatureSet(&[_]Feature{}),
716 .dependencies = featureSet(&[_]Feature{}),
718717 };
719718 result[@enumToInt(Feature.sse2)] = .{
720719 .llvm_name = "sse2",
721720 .description = "Enable SSE2 instructions",
722 .dependencies = sparseFeatureSet(&[_]Feature{
721 .dependencies = featureSet(&[_]Feature{
723722 .sse,
724723 }),
725724 };
726725 result[@enumToInt(Feature.sse3)] = .{
727726 .llvm_name = "sse3",
728727 .description = "Enable SSE3 instructions",
729 .dependencies = sparseFeatureSet(&[_]Feature{
728 .dependencies = featureSet(&[_]Feature{
730729 .sse2,
731730 }),
732731 };
733732 result[@enumToInt(Feature.sse4_1)] = .{
734733 .llvm_name = "sse4.1",
735734 .description = "Enable SSE 4.1 instructions",
736 .dependencies = sparseFeatureSet(&[_]Feature{
735 .dependencies = featureSet(&[_]Feature{
737736 .ssse3,
738737 }),
739738 };
740739 result[@enumToInt(Feature.sse4_2)] = .{
741740 .llvm_name = "sse4.2",
742741 .description = "Enable SSE 4.2 instructions",
743 .dependencies = sparseFeatureSet(&[_]Feature{
742 .dependencies = featureSet(&[_]Feature{
744743 .sse4_1,
745744 }),
746745 };
747746 result[@enumToInt(Feature.sse4a)] = .{
748747 .llvm_name = "sse4a",
749748 .description = "Support SSE 4a instructions",
750 .dependencies = sparseFeatureSet(&[_]Feature{
749 .dependencies = featureSet(&[_]Feature{
751750 .sse3,
752751 }),
753752 };
754753 result[@enumToInt(Feature.ssse3)] = .{
755754 .llvm_name = "ssse3",
756755 .description = "Enable SSSE3 instructions",
757 .dependencies = sparseFeatureSet(&[_]Feature{
756 .dependencies = featureSet(&[_]Feature{
758757 .sse3,
759758 }),
760759 };
761760 result[@enumToInt(Feature.tbm)] = .{
762761 .llvm_name = "tbm",
763762 .description = "Enable TBM instructions",
764 .dependencies = sparseFeatureSet(&[_]Feature{}),
763 .dependencies = featureSet(&[_]Feature{}),
765764 };
766765 result[@enumToInt(Feature.vaes)] = .{
767766 .llvm_name = "vaes",
768767 .description = "Promote selected AES instructions to AVX512/AVX registers",
769 .dependencies = sparseFeatureSet(&[_]Feature{
768 .dependencies = featureSet(&[_]Feature{
770769 .aes,
771770 .avx,
772771 }),
......@@ -774,7 +773,7 @@ pub const all_features = blk: {
774773 result[@enumToInt(Feature.vpclmulqdq)] = .{
775774 .llvm_name = "vpclmulqdq",
776775 .description = "Enable vpclmulqdq instructions",
777 .dependencies = sparseFeatureSet(&[_]Feature{
776 .dependencies = featureSet(&[_]Feature{
778777 .avx,
779778 .pclmul,
780779 }),
......@@ -782,50 +781,49 @@ pub const all_features = blk: {
782781 result[@enumToInt(Feature.waitpkg)] = .{
783782 .llvm_name = "waitpkg",
784783 .description = "Wait and pause enhancements",
785 .dependencies = sparseFeatureSet(&[_]Feature{}),
784 .dependencies = featureSet(&[_]Feature{}),
786785 };
787786 result[@enumToInt(Feature.wbnoinvd)] = .{
788787 .llvm_name = "wbnoinvd",
789788 .description = "Write Back No Invalidate",
790 .dependencies = sparseFeatureSet(&[_]Feature{}),
789 .dependencies = featureSet(&[_]Feature{}),
791790 };
792791 result[@enumToInt(Feature.x87)] = .{
793792 .llvm_name = "x87",
794793 .description = "Enable X87 float instructions",
795 .dependencies = sparseFeatureSet(&[_]Feature{}),
794 .dependencies = featureSet(&[_]Feature{}),
796795 };
797796 result[@enumToInt(Feature.xop)] = .{
798797 .llvm_name = "xop",
799798 .description = "Enable XOP instructions",
800 .dependencies = sparseFeatureSet(&[_]Feature{
799 .dependencies = featureSet(&[_]Feature{
801800 .fma4,
802801 }),
803802 };
804803 result[@enumToInt(Feature.xsave)] = .{
805804 .llvm_name = "xsave",
806805 .description = "Support xsave instructions",
807 .dependencies = sparseFeatureSet(&[_]Feature{}),
806 .dependencies = featureSet(&[_]Feature{}),
808807 };
809808 result[@enumToInt(Feature.xsavec)] = .{
810809 .llvm_name = "xsavec",
811810 .description = "Support xsavec instructions",
812 .dependencies = sparseFeatureSet(&[_]Feature{}),
811 .dependencies = featureSet(&[_]Feature{}),
813812 };
814813 result[@enumToInt(Feature.xsaveopt)] = .{
815814 .llvm_name = "xsaveopt",
816815 .description = "Support xsaveopt instructions",
817 .dependencies = sparseFeatureSet(&[_]Feature{}),
816 .dependencies = featureSet(&[_]Feature{}),
818817 };
819818 result[@enumToInt(Feature.xsaves)] = .{
820819 .llvm_name = "xsaves",
821820 .description = "Support xsaves instructions",
822 .dependencies = sparseFeatureSet(&[_]Feature{}),
821 .dependencies = featureSet(&[_]Feature{}),
823822 };
824823 const ti = @typeInfo(Feature);
825824 for (result) |*elem, i| {
826825 elem.index = i;
827826 elem.name = ti.Enum.fields[i].name;
828 elem.dependencies.initAsDependencies(i, &result);
829827 }
830828 break :blk result;
831829};
......@@ -834,7 +832,7 @@ pub const cpu = struct {
834832 pub const amdfam10 = Cpu{
835833 .name = "amdfam10",
836834 .llvm_name = "amdfam10",
837 .features = featureSet(&all_features, &[_]Feature{
835 .features = featureSet(&[_]Feature{
838836 .@"3dnowa",
839837 .@"64bit",
840838 .cmov,
......@@ -854,7 +852,7 @@ pub const cpu = struct {
854852 pub const athlon = Cpu{
855853 .name = "athlon",
856854 .llvm_name = "athlon",
857 .features = featureSet(&all_features, &[_]Feature{
855 .features = featureSet(&[_]Feature{
858856 .@"3dnowa",
859857 .cmov,
860858 .cx8,
......@@ -867,7 +865,7 @@ pub const cpu = struct {
867865 pub const athlon_4 = Cpu{
868866 .name = "athlon_4",
869867 .llvm_name = "athlon-4",
870 .features = featureSet(&all_features, &[_]Feature{
868 .features = featureSet(&[_]Feature{
871869 .@"3dnowa",
872870 .cmov,
873871 .cx8,
......@@ -882,7 +880,7 @@ pub const cpu = struct {
882880 pub const athlon_fx = Cpu{
883881 .name = "athlon_fx",
884882 .llvm_name = "athlon-fx",
885 .features = featureSet(&all_features, &[_]Feature{
883 .features = featureSet(&[_]Feature{
886884 .@"3dnowa",
887885 .@"64bit",
888886 .cmov,
......@@ -899,7 +897,7 @@ pub const cpu = struct {
899897 pub const athlon_mp = Cpu{
900898 .name = "athlon_mp",
901899 .llvm_name = "athlon-mp",
902 .features = featureSet(&all_features, &[_]Feature{
900 .features = featureSet(&[_]Feature{
903901 .@"3dnowa",
904902 .cmov,
905903 .cx8,
......@@ -914,7 +912,7 @@ pub const cpu = struct {
914912 pub const athlon_tbird = Cpu{
915913 .name = "athlon_tbird",
916914 .llvm_name = "athlon-tbird",
917 .features = featureSet(&all_features, &[_]Feature{
915 .features = featureSet(&[_]Feature{
918916 .@"3dnowa",
919917 .cmov,
920918 .cx8,
......@@ -927,7 +925,7 @@ pub const cpu = struct {
927925 pub const athlon_xp = Cpu{
928926 .name = "athlon_xp",
929927 .llvm_name = "athlon-xp",
930 .features = featureSet(&all_features, &[_]Feature{
928 .features = featureSet(&[_]Feature{
931929 .@"3dnowa",
932930 .cmov,
933931 .cx8,
......@@ -942,7 +940,7 @@ pub const cpu = struct {
942940 pub const athlon64 = Cpu{
943941 .name = "athlon64",
944942 .llvm_name = "athlon64",
945 .features = featureSet(&all_features, &[_]Feature{
943 .features = featureSet(&[_]Feature{
946944 .@"3dnowa",
947945 .@"64bit",
948946 .cmov,
......@@ -959,7 +957,7 @@ pub const cpu = struct {
959957 pub const athlon64_sse3 = Cpu{
960958 .name = "athlon64_sse3",
961959 .llvm_name = "athlon64-sse3",
962 .features = featureSet(&all_features, &[_]Feature{
960 .features = featureSet(&[_]Feature{
963961 .@"3dnowa",
964962 .@"64bit",
965963 .cmov,
......@@ -977,7 +975,7 @@ pub const cpu = struct {
977975 pub const atom = Cpu{
978976 .name = "atom",
979977 .llvm_name = "atom",
980 .features = featureSet(&all_features, &[_]Feature{
978 .features = featureSet(&[_]Feature{
981979 .@"64bit",
982980 .cmov,
983981 .cx16,
......@@ -1001,7 +999,7 @@ pub const cpu = struct {
1001999 pub const barcelona = Cpu{
10021000 .name = "barcelona",
10031001 .llvm_name = "barcelona",
1004 .features = featureSet(&all_features, &[_]Feature{
1002 .features = featureSet(&[_]Feature{
10051003 .@"3dnowa",
10061004 .@"64bit",
10071005 .cmov,
......@@ -1021,7 +1019,7 @@ pub const cpu = struct {
10211019 pub const bdver1 = Cpu{
10221020 .name = "bdver1",
10231021 .llvm_name = "bdver1",
1024 .features = featureSet(&all_features, &[_]Feature{
1022 .features = featureSet(&[_]Feature{
10251023 .@"64bit",
10261024 .aes,
10271025 .branchfusion,
......@@ -1048,7 +1046,7 @@ pub const cpu = struct {
10481046 pub const bdver2 = Cpu{
10491047 .name = "bdver2",
10501048 .llvm_name = "bdver2",
1051 .features = featureSet(&all_features, &[_]Feature{
1049 .features = featureSet(&[_]Feature{
10521050 .@"64bit",
10531051 .aes,
10541052 .bmi,
......@@ -1080,7 +1078,7 @@ pub const cpu = struct {
10801078 pub const bdver3 = Cpu{
10811079 .name = "bdver3",
10821080 .llvm_name = "bdver3",
1083 .features = featureSet(&all_features, &[_]Feature{
1081 .features = featureSet(&[_]Feature{
10841082 .@"64bit",
10851083 .aes,
10861084 .bmi,
......@@ -1114,7 +1112,7 @@ pub const cpu = struct {
11141112 pub const bdver4 = Cpu{
11151113 .name = "bdver4",
11161114 .llvm_name = "bdver4",
1117 .features = featureSet(&all_features, &[_]Feature{
1115 .features = featureSet(&[_]Feature{
11181116 .@"64bit",
11191117 .aes,
11201118 .avx2,
......@@ -1151,7 +1149,7 @@ pub const cpu = struct {
11511149 pub const bonnell = Cpu{
11521150 .name = "bonnell",
11531151 .llvm_name = "bonnell",
1154 .features = featureSet(&all_features, &[_]Feature{
1152 .features = featureSet(&[_]Feature{
11551153 .@"64bit",
11561154 .cmov,
11571155 .cx16,
......@@ -1175,7 +1173,7 @@ pub const cpu = struct {
11751173 pub const broadwell = Cpu{
11761174 .name = "broadwell",
11771175 .llvm_name = "broadwell",
1178 .features = featureSet(&all_features, &[_]Feature{
1176 .features = featureSet(&[_]Feature{
11791177 .@"64bit",
11801178 .adx,
11811179 .avx,
......@@ -1219,7 +1217,7 @@ pub const cpu = struct {
12191217 pub const btver1 = Cpu{
12201218 .name = "btver1",
12211219 .llvm_name = "btver1",
1222 .features = featureSet(&all_features, &[_]Feature{
1220 .features = featureSet(&[_]Feature{
12231221 .@"64bit",
12241222 .cmov,
12251223 .cx16,
......@@ -1243,7 +1241,7 @@ pub const cpu = struct {
12431241 pub const btver2 = Cpu{
12441242 .name = "btver2",
12451243 .llvm_name = "btver2",
1246 .features = featureSet(&all_features, &[_]Feature{
1244 .features = featureSet(&[_]Feature{
12471245 .@"64bit",
12481246 .aes,
12491247 .avx,
......@@ -1279,7 +1277,7 @@ pub const cpu = struct {
12791277 pub const c3 = Cpu{
12801278 .name = "c3",
12811279 .llvm_name = "c3",
1282 .features = featureSet(&all_features, &[_]Feature{
1280 .features = featureSet(&[_]Feature{
12831281 .@"3dnow",
12841282 .slow_unaligned_mem_16,
12851283 .x87,
......@@ -1288,7 +1286,7 @@ pub const cpu = struct {
12881286 pub const c3_2 = Cpu{
12891287 .name = "c3_2",
12901288 .llvm_name = "c3-2",
1291 .features = featureSet(&all_features, &[_]Feature{
1289 .features = featureSet(&[_]Feature{
12921290 .cmov,
12931291 .cx8,
12941292 .fxsr,
......@@ -1301,7 +1299,7 @@ pub const cpu = struct {
13011299 pub const cannonlake = Cpu{
13021300 .name = "cannonlake",
13031301 .llvm_name = "cannonlake",
1304 .features = featureSet(&all_features, &[_]Feature{
1302 .features = featureSet(&[_]Feature{
13051303 .@"64bit",
13061304 .adx,
13071305 .aes,
......@@ -1360,7 +1358,7 @@ pub const cpu = struct {
13601358 pub const cascadelake = Cpu{
13611359 .name = "cascadelake",
13621360 .llvm_name = "cascadelake",
1363 .features = featureSet(&all_features, &[_]Feature{
1361 .features = featureSet(&[_]Feature{
13641362 .@"64bit",
13651363 .adx,
13661364 .aes,
......@@ -1418,7 +1416,7 @@ pub const cpu = struct {
14181416 pub const cooperlake = Cpu{
14191417 .name = "cooperlake",
14201418 .llvm_name = "cooperlake",
1421 .features = featureSet(&all_features, &[_]Feature{
1419 .features = featureSet(&[_]Feature{
14221420 .@"64bit",
14231421 .adx,
14241422 .aes,
......@@ -1477,7 +1475,7 @@ pub const cpu = struct {
14771475 pub const core_avx_i = Cpu{
14781476 .name = "core_avx_i",
14791477 .llvm_name = "core-avx-i",
1480 .features = featureSet(&all_features, &[_]Feature{
1478 .features = featureSet(&[_]Feature{
14811479 .@"64bit",
14821480 .avx,
14831481 .cmov,
......@@ -1509,7 +1507,7 @@ pub const cpu = struct {
15091507 pub const core_avx2 = Cpu{
15101508 .name = "core_avx2",
15111509 .llvm_name = "core-avx2",
1512 .features = featureSet(&all_features, &[_]Feature{
1510 .features = featureSet(&[_]Feature{
15131511 .@"64bit",
15141512 .avx,
15151513 .avx2,
......@@ -1550,7 +1548,7 @@ pub const cpu = struct {
15501548 pub const core2 = Cpu{
15511549 .name = "core2",
15521550 .llvm_name = "core2",
1553 .features = featureSet(&all_features, &[_]Feature{
1551 .features = featureSet(&[_]Feature{
15541552 .@"64bit",
15551553 .cmov,
15561554 .cx16,
......@@ -1568,7 +1566,7 @@ pub const cpu = struct {
15681566 pub const corei7 = Cpu{
15691567 .name = "corei7",
15701568 .llvm_name = "corei7",
1571 .features = featureSet(&all_features, &[_]Feature{
1569 .features = featureSet(&[_]Feature{
15721570 .@"64bit",
15731571 .cmov,
15741572 .cx16,
......@@ -1586,7 +1584,7 @@ pub const cpu = struct {
15861584 pub const corei7_avx = Cpu{
15871585 .name = "corei7_avx",
15881586 .llvm_name = "corei7-avx",
1589 .features = featureSet(&all_features, &[_]Feature{
1587 .features = featureSet(&[_]Feature{
15901588 .@"64bit",
15911589 .avx,
15921590 .cmov,
......@@ -1615,7 +1613,7 @@ pub const cpu = struct {
16151613 pub const generic = Cpu{
16161614 .name = "generic",
16171615 .llvm_name = "generic",
1618 .features = featureSet(&all_features, &[_]Feature{
1616 .features = featureSet(&[_]Feature{
16191617 .cx8,
16201618 .slow_unaligned_mem_16,
16211619 .x87,
......@@ -1624,7 +1622,7 @@ pub const cpu = struct {
16241622 pub const geode = Cpu{
16251623 .name = "geode",
16261624 .llvm_name = "geode",
1627 .features = featureSet(&all_features, &[_]Feature{
1625 .features = featureSet(&[_]Feature{
16281626 .@"3dnowa",
16291627 .cx8,
16301628 .slow_unaligned_mem_16,
......@@ -1634,7 +1632,7 @@ pub const cpu = struct {
16341632 pub const goldmont = Cpu{
16351633 .name = "goldmont",
16361634 .llvm_name = "goldmont",
1637 .features = featureSet(&all_features, &[_]Feature{
1635 .features = featureSet(&[_]Feature{
16381636 .@"64bit",
16391637 .aes,
16401638 .clflushopt,
......@@ -1670,7 +1668,7 @@ pub const cpu = struct {
16701668 pub const goldmont_plus = Cpu{
16711669 .name = "goldmont_plus",
16721670 .llvm_name = "goldmont-plus",
1673 .features = featureSet(&all_features, &[_]Feature{
1671 .features = featureSet(&[_]Feature{
16741672 .@"64bit",
16751673 .aes,
16761674 .clflushopt,
......@@ -1708,7 +1706,7 @@ pub const cpu = struct {
17081706 pub const haswell = Cpu{
17091707 .name = "haswell",
17101708 .llvm_name = "haswell",
1711 .features = featureSet(&all_features, &[_]Feature{
1709 .features = featureSet(&[_]Feature{
17121710 .@"64bit",
17131711 .avx,
17141712 .avx2,
......@@ -1749,7 +1747,7 @@ pub const cpu = struct {
17491747 pub const _i386 = Cpu{
17501748 .name = "_i386",
17511749 .llvm_name = "i386",
1752 .features = featureSet(&all_features, &[_]Feature{
1750 .features = featureSet(&[_]Feature{
17531751 .slow_unaligned_mem_16,
17541752 .x87,
17551753 }),
......@@ -1757,7 +1755,7 @@ pub const cpu = struct {
17571755 pub const _i486 = Cpu{
17581756 .name = "_i486",
17591757 .llvm_name = "i486",
1760 .features = featureSet(&all_features, &[_]Feature{
1758 .features = featureSet(&[_]Feature{
17611759 .slow_unaligned_mem_16,
17621760 .x87,
17631761 }),
......@@ -1765,7 +1763,7 @@ pub const cpu = struct {
17651763 pub const _i586 = Cpu{
17661764 .name = "_i586",
17671765 .llvm_name = "i586",
1768 .features = featureSet(&all_features, &[_]Feature{
1766 .features = featureSet(&[_]Feature{
17691767 .cx8,
17701768 .slow_unaligned_mem_16,
17711769 .x87,
......@@ -1774,7 +1772,7 @@ pub const cpu = struct {
17741772 pub const _i686 = Cpu{
17751773 .name = "_i686",
17761774 .llvm_name = "i686",
1777 .features = featureSet(&all_features, &[_]Feature{
1775 .features = featureSet(&[_]Feature{
17781776 .cmov,
17791777 .cx8,
17801778 .slow_unaligned_mem_16,
......@@ -1784,7 +1782,7 @@ pub const cpu = struct {
17841782 pub const icelake_client = Cpu{
17851783 .name = "icelake_client",
17861784 .llvm_name = "icelake-client",
1787 .features = featureSet(&all_features, &[_]Feature{
1785 .features = featureSet(&[_]Feature{
17881786 .@"64bit",
17891787 .adx,
17901788 .aes,
......@@ -1852,7 +1850,7 @@ pub const cpu = struct {
18521850 pub const icelake_server = Cpu{
18531851 .name = "icelake_server",
18541852 .llvm_name = "icelake-server",
1855 .features = featureSet(&all_features, &[_]Feature{
1853 .features = featureSet(&[_]Feature{
18561854 .@"64bit",
18571855 .adx,
18581856 .aes,
......@@ -1922,7 +1920,7 @@ pub const cpu = struct {
19221920 pub const ivybridge = Cpu{
19231921 .name = "ivybridge",
19241922 .llvm_name = "ivybridge",
1925 .features = featureSet(&all_features, &[_]Feature{
1923 .features = featureSet(&[_]Feature{
19261924 .@"64bit",
19271925 .avx,
19281926 .cmov,
......@@ -1954,7 +1952,7 @@ pub const cpu = struct {
19541952 pub const k6 = Cpu{
19551953 .name = "k6",
19561954 .llvm_name = "k6",
1957 .features = featureSet(&all_features, &[_]Feature{
1955 .features = featureSet(&[_]Feature{
19581956 .cx8,
19591957 .mmx,
19601958 .slow_unaligned_mem_16,
......@@ -1964,7 +1962,7 @@ pub const cpu = struct {
19641962 pub const k6_2 = Cpu{
19651963 .name = "k6_2",
19661964 .llvm_name = "k6-2",
1967 .features = featureSet(&all_features, &[_]Feature{
1965 .features = featureSet(&[_]Feature{
19681966 .@"3dnow",
19691967 .cx8,
19701968 .slow_unaligned_mem_16,
......@@ -1974,7 +1972,7 @@ pub const cpu = struct {
19741972 pub const k6_3 = Cpu{
19751973 .name = "k6_3",
19761974 .llvm_name = "k6-3",
1977 .features = featureSet(&all_features, &[_]Feature{
1975 .features = featureSet(&[_]Feature{
19781976 .@"3dnow",
19791977 .cx8,
19801978 .slow_unaligned_mem_16,
......@@ -1984,7 +1982,7 @@ pub const cpu = struct {
19841982 pub const k8 = Cpu{
19851983 .name = "k8",
19861984 .llvm_name = "k8",
1987 .features = featureSet(&all_features, &[_]Feature{
1985 .features = featureSet(&[_]Feature{
19881986 .@"3dnowa",
19891987 .@"64bit",
19901988 .cmov,
......@@ -2001,7 +1999,7 @@ pub const cpu = struct {
20011999 pub const k8_sse3 = Cpu{
20022000 .name = "k8_sse3",
20032001 .llvm_name = "k8-sse3",
2004 .features = featureSet(&all_features, &[_]Feature{
2002 .features = featureSet(&[_]Feature{
20052003 .@"3dnowa",
20062004 .@"64bit",
20072005 .cmov,
......@@ -2019,7 +2017,7 @@ pub const cpu = struct {
20192017 pub const knl = Cpu{
20202018 .name = "knl",
20212019 .llvm_name = "knl",
2022 .features = featureSet(&all_features, &[_]Feature{
2020 .features = featureSet(&[_]Feature{
20232021 .@"64bit",
20242022 .adx,
20252023 .aes,
......@@ -2062,7 +2060,7 @@ pub const cpu = struct {
20622060 pub const knm = Cpu{
20632061 .name = "knm",
20642062 .llvm_name = "knm",
2065 .features = featureSet(&all_features, &[_]Feature{
2063 .features = featureSet(&[_]Feature{
20662064 .@"64bit",
20672065 .adx,
20682066 .aes,
......@@ -2106,12 +2104,12 @@ pub const cpu = struct {
21062104 pub const lakemont = Cpu{
21072105 .name = "lakemont",
21082106 .llvm_name = "lakemont",
2109 .features = featureSet(&all_features, &[_]Feature{}),
2107 .features = featureSet(&[_]Feature{}),
21102108 };
21112109 pub const nehalem = Cpu{
21122110 .name = "nehalem",
21132111 .llvm_name = "nehalem",
2114 .features = featureSet(&all_features, &[_]Feature{
2112 .features = featureSet(&[_]Feature{
21152113 .@"64bit",
21162114 .cmov,
21172115 .cx16,
......@@ -2129,7 +2127,7 @@ pub const cpu = struct {
21292127 pub const nocona = Cpu{
21302128 .name = "nocona",
21312129 .llvm_name = "nocona",
2132 .features = featureSet(&all_features, &[_]Feature{
2130 .features = featureSet(&[_]Feature{
21332131 .@"64bit",
21342132 .cmov,
21352133 .cx16,
......@@ -2145,7 +2143,7 @@ pub const cpu = struct {
21452143 pub const opteron = Cpu{
21462144 .name = "opteron",
21472145 .llvm_name = "opteron",
2148 .features = featureSet(&all_features, &[_]Feature{
2146 .features = featureSet(&[_]Feature{
21492147 .@"3dnowa",
21502148 .@"64bit",
21512149 .cmov,
......@@ -2162,7 +2160,7 @@ pub const cpu = struct {
21622160 pub const opteron_sse3 = Cpu{
21632161 .name = "opteron_sse3",
21642162 .llvm_name = "opteron-sse3",
2165 .features = featureSet(&all_features, &[_]Feature{
2163 .features = featureSet(&[_]Feature{
21662164 .@"3dnowa",
21672165 .@"64bit",
21682166 .cmov,
......@@ -2180,7 +2178,7 @@ pub const cpu = struct {
21802178 pub const penryn = Cpu{
21812179 .name = "penryn",
21822180 .llvm_name = "penryn",
2183 .features = featureSet(&all_features, &[_]Feature{
2181 .features = featureSet(&[_]Feature{
21842182 .@"64bit",
21852183 .cmov,
21862184 .cx16,
......@@ -2198,7 +2196,7 @@ pub const cpu = struct {
21982196 pub const pentium = Cpu{
21992197 .name = "pentium",
22002198 .llvm_name = "pentium",
2201 .features = featureSet(&all_features, &[_]Feature{
2199 .features = featureSet(&[_]Feature{
22022200 .cx8,
22032201 .slow_unaligned_mem_16,
22042202 .x87,
......@@ -2207,7 +2205,7 @@ pub const cpu = struct {
22072205 pub const pentium_m = Cpu{
22082206 .name = "pentium_m",
22092207 .llvm_name = "pentium-m",
2210 .features = featureSet(&all_features, &[_]Feature{
2208 .features = featureSet(&[_]Feature{
22112209 .cmov,
22122210 .cx8,
22132211 .fxsr,
......@@ -2221,7 +2219,7 @@ pub const cpu = struct {
22212219 pub const pentium_mmx = Cpu{
22222220 .name = "pentium_mmx",
22232221 .llvm_name = "pentium-mmx",
2224 .features = featureSet(&all_features, &[_]Feature{
2222 .features = featureSet(&[_]Feature{
22252223 .cx8,
22262224 .mmx,
22272225 .slow_unaligned_mem_16,
......@@ -2231,7 +2229,7 @@ pub const cpu = struct {
22312229 pub const pentium2 = Cpu{
22322230 .name = "pentium2",
22332231 .llvm_name = "pentium2",
2234 .features = featureSet(&all_features, &[_]Feature{
2232 .features = featureSet(&[_]Feature{
22352233 .cmov,
22362234 .cx8,
22372235 .fxsr,
......@@ -2244,7 +2242,7 @@ pub const cpu = struct {
22442242 pub const pentium3 = Cpu{
22452243 .name = "pentium3",
22462244 .llvm_name = "pentium3",
2247 .features = featureSet(&all_features, &[_]Feature{
2245 .features = featureSet(&[_]Feature{
22482246 .cmov,
22492247 .cx8,
22502248 .fxsr,
......@@ -2258,7 +2256,7 @@ pub const cpu = struct {
22582256 pub const pentium3m = Cpu{
22592257 .name = "pentium3m",
22602258 .llvm_name = "pentium3m",
2261 .features = featureSet(&all_features, &[_]Feature{
2259 .features = featureSet(&[_]Feature{
22622260 .cmov,
22632261 .cx8,
22642262 .fxsr,
......@@ -2272,7 +2270,7 @@ pub const cpu = struct {
22722270 pub const pentium4 = Cpu{
22732271 .name = "pentium4",
22742272 .llvm_name = "pentium4",
2275 .features = featureSet(&all_features, &[_]Feature{
2273 .features = featureSet(&[_]Feature{
22762274 .cmov,
22772275 .cx8,
22782276 .fxsr,
......@@ -2286,7 +2284,7 @@ pub const cpu = struct {
22862284 pub const pentium4m = Cpu{
22872285 .name = "pentium4m",
22882286 .llvm_name = "pentium4m",
2289 .features = featureSet(&all_features, &[_]Feature{
2287 .features = featureSet(&[_]Feature{
22902288 .cmov,
22912289 .cx8,
22922290 .fxsr,
......@@ -2300,7 +2298,7 @@ pub const cpu = struct {
23002298 pub const pentiumpro = Cpu{
23012299 .name = "pentiumpro",
23022300 .llvm_name = "pentiumpro",
2303 .features = featureSet(&all_features, &[_]Feature{
2301 .features = featureSet(&[_]Feature{
23042302 .cmov,
23052303 .cx8,
23062304 .nopl,
......@@ -2311,7 +2309,7 @@ pub const cpu = struct {
23112309 pub const prescott = Cpu{
23122310 .name = "prescott",
23132311 .llvm_name = "prescott",
2314 .features = featureSet(&all_features, &[_]Feature{
2312 .features = featureSet(&[_]Feature{
23152313 .cmov,
23162314 .cx8,
23172315 .fxsr,
......@@ -2325,7 +2323,7 @@ pub const cpu = struct {
23252323 pub const sandybridge = Cpu{
23262324 .name = "sandybridge",
23272325 .llvm_name = "sandybridge",
2328 .features = featureSet(&all_features, &[_]Feature{
2326 .features = featureSet(&[_]Feature{
23292327 .@"64bit",
23302328 .avx,
23312329 .cmov,
......@@ -2354,7 +2352,7 @@ pub const cpu = struct {
23542352 pub const silvermont = Cpu{
23552353 .name = "silvermont",
23562354 .llvm_name = "silvermont",
2357 .features = featureSet(&all_features, &[_]Feature{
2355 .features = featureSet(&[_]Feature{
23582356 .@"64bit",
23592357 .cmov,
23602358 .cx16,
......@@ -2382,7 +2380,7 @@ pub const cpu = struct {
23822380 pub const skx = Cpu{
23832381 .name = "skx",
23842382 .llvm_name = "skx",
2385 .features = featureSet(&all_features, &[_]Feature{
2383 .features = featureSet(&[_]Feature{
23862384 .@"64bit",
23872385 .adx,
23882386 .aes,
......@@ -2439,7 +2437,7 @@ pub const cpu = struct {
24392437 pub const skylake = Cpu{
24402438 .name = "skylake",
24412439 .llvm_name = "skylake",
2442 .features = featureSet(&all_features, &[_]Feature{
2440 .features = featureSet(&[_]Feature{
24432441 .@"64bit",
24442442 .adx,
24452443 .aes,
......@@ -2490,7 +2488,7 @@ pub const cpu = struct {
24902488 pub const skylake_avx512 = Cpu{
24912489 .name = "skylake_avx512",
24922490 .llvm_name = "skylake-avx512",
2493 .features = featureSet(&all_features, &[_]Feature{
2491 .features = featureSet(&[_]Feature{
24942492 .@"64bit",
24952493 .adx,
24962494 .aes,
......@@ -2547,7 +2545,7 @@ pub const cpu = struct {
25472545 pub const slm = Cpu{
25482546 .name = "slm",
25492547 .llvm_name = "slm",
2550 .features = featureSet(&all_features, &[_]Feature{
2548 .features = featureSet(&[_]Feature{
25512549 .@"64bit",
25522550 .cmov,
25532551 .cx16,
......@@ -2575,7 +2573,7 @@ pub const cpu = struct {
25752573 pub const tremont = Cpu{
25762574 .name = "tremont",
25772575 .llvm_name = "tremont",
2578 .features = featureSet(&all_features, &[_]Feature{
2576 .features = featureSet(&[_]Feature{
25792577 .@"64bit",
25802578 .aes,
25812579 .cldemote,
......@@ -2618,7 +2616,7 @@ pub const cpu = struct {
26182616 pub const westmere = Cpu{
26192617 .name = "westmere",
26202618 .llvm_name = "westmere",
2621 .features = featureSet(&all_features, &[_]Feature{
2619 .features = featureSet(&[_]Feature{
26222620 .@"64bit",
26232621 .cmov,
26242622 .cx16,
......@@ -2637,7 +2635,7 @@ pub const cpu = struct {
26372635 pub const winchip_c6 = Cpu{
26382636 .name = "winchip_c6",
26392637 .llvm_name = "winchip-c6",
2640 .features = featureSet(&all_features, &[_]Feature{
2638 .features = featureSet(&[_]Feature{
26412639 .mmx,
26422640 .slow_unaligned_mem_16,
26432641 .x87,
......@@ -2646,7 +2644,7 @@ pub const cpu = struct {
26462644 pub const winchip2 = Cpu{
26472645 .name = "winchip2",
26482646 .llvm_name = "winchip2",
2649 .features = featureSet(&all_features, &[_]Feature{
2647 .features = featureSet(&[_]Feature{
26502648 .@"3dnow",
26512649 .slow_unaligned_mem_16,
26522650 .x87,
......@@ -2655,7 +2653,7 @@ pub const cpu = struct {
26552653 pub const x86_64 = Cpu{
26562654 .name = "x86_64",
26572655 .llvm_name = "x86-64",
2658 .features = featureSet(&all_features, &[_]Feature{
2656 .features = featureSet(&[_]Feature{
26592657 .@"64bit",
26602658 .cmov,
26612659 .cx8,
......@@ -2672,7 +2670,7 @@ pub const cpu = struct {
26722670 pub const yonah = Cpu{
26732671 .name = "yonah",
26742672 .llvm_name = "yonah",
2675 .features = featureSet(&all_features, &[_]Feature{
2673 .features = featureSet(&[_]Feature{
26762674 .cmov,
26772675 .cx8,
26782676 .fxsr,
......@@ -2686,7 +2684,7 @@ pub const cpu = struct {
26862684 pub const znver1 = Cpu{
26872685 .name = "znver1",
26882686 .llvm_name = "znver1",
2689 .features = featureSet(&all_features, &[_]Feature{
2687 .features = featureSet(&[_]Feature{
26902688 .@"64bit",
26912689 .adx,
26922690 .aes,
......@@ -2730,7 +2728,7 @@ pub const cpu = struct {
27302728 pub const znver2 = Cpu{
27312729 .name = "znver2",
27322730 .llvm_name = "znver2",
2733 .features = featureSet(&all_features, &[_]Feature{
2731 .features = featureSet(&[_]Feature{
27342732 .@"64bit",
27352733 .adx,
27362734 .aes,
src-self-hosted/stage1.zig+4-3
......@@ -581,8 +581,8 @@ fn cpuFeaturesFromLLVM(
581581 const this_llvm_name = feature.llvm_name orelse continue;
582582 if (mem.eql(u8, llvm_feat, this_llvm_name)) {
583583 switch (op) {
584 .add => set.addSparseFeature(@intCast(u8, index)),
585 .sub => set.removeSparseFeature(@intCast(u8, index)),
584 .add => set.addFeature(@intCast(u8, index)),
585 .sub => set.removeFeature(@intCast(u8, index)),
586586 }
587587 break;
588588 }
......@@ -701,8 +701,9 @@ const Stage2CpuFeatures = struct {
701701 const all_features = arch.allFeaturesList();
702702 var populated_feature_set = feature_set;
703703 if (arch.subArchFeature()) |sub_arch_index| {
704 populated_feature_set.addFeature(sub_arch_index, all_features);
704 populated_feature_set.addFeature(sub_arch_index);
705705 }
706 populated_feature_set.populateDependencies(all_features);
706707 for (all_features) |feature, index| {
707708 const llvm_name = feature.llvm_name orelse continue;
708709 const plus_or_minus = "-+"[@boolToInt(populated_feature_set.isEnabled(@intCast(u8, index)))];