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
signature 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) {...@@ -304,12 +304,12 @@ pub const Target = union(enum) {
304 if (mem.eql(u8, feature_name, feature.name)) {304 if (mem.eql(u8, feature_name, feature.name)) {
305 switch (op) {305 switch (op) {
306 .add => {306 .add => {
307 baseline_set.addFeature(index, all_features);307 baseline_set.addFeature(index);
308 whitelist_set.addFeature(index, all_features);308 whitelist_set.addFeature(index);
309 },309 },
310 .sub => {310 .sub => {
311 baseline_set.removeFeature(index, all_features);311 baseline_set.removeFeature(index);
312 whitelist_set.removeFeature(index, all_features);312 whitelist_set.removeFeature(index);
313 },313 },
314 }314 }
315 break;315 break;
...@@ -580,12 +580,8 @@ pub const Target = union(enum) {...@@ -580,12 +580,8 @@ pub const Target = union(enum) {
580 /// Human-friendly UTF-8 text.580 /// Human-friendly UTF-8 text.
581 description: []const u8,581 description: []const u8,
582582
583 /// `Set` of all features this depends on, and this feature itself.583 /// Sparse `Set` of features this depends on.
584 /// Can be "or"ed with another set to remove this feature and all584 dependencies: Set,
585 /// its dependencies.
586 /// Has a default value of `undefined` because the canonical
587 /// structures are populated via comptime logic.
588 dependencies: Set = undefined,
589585
590 /// A bit set of all the features.586 /// A bit set of all the features.
591 pub const Set = struct {587 pub const Set = struct {
...@@ -598,6 +594,9 @@ pub const Target = union(enum) {...@@ -598,6 +594,9 @@ pub const Target = union(enum) {
598 pub const ShiftInt = std.math.Log2Int(usize);594 pub const ShiftInt = std.math.Log2Int(usize);
599595
600 pub const empty = Set{ .ints = [1]usize{0} ** usize_count };596 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
602 pub fn isEnabled(set: Set, arch_feature_index: Index) bool {601 pub fn isEnabled(set: Set, arch_feature_index: Index) bool {
603 const usize_index = arch_feature_index / @bitSizeOf(usize);602 const usize_index = arch_feature_index / @bitSizeOf(usize);
...@@ -605,60 +604,28 @@ pub const Target = union(enum) {...@@ -605,60 +604,28 @@ pub const Target = union(enum) {
605 return (set.ints[usize_index] & (@as(usize, 1) << bit_index)) != 0;604 return (set.ints[usize_index] & (@as(usize, 1) << bit_index)) != 0;
606 }605 }
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
629 /// Adds the specified feature but not its dependencies.607 /// 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 {
631 const usize_index = arch_feature_index / @bitSizeOf(usize);609 const usize_index = arch_feature_index / @bitSizeOf(usize);
632 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));610 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
633 set.ints[usize_index] |= @as(usize, 1) << bit_index;611 set.ints[usize_index] |= @as(usize, 1) << bit_index;
634 }612 }
635613
636 /// Removes the specified feature but not its dependents.614 /// 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 {
638 const usize_index = arch_feature_index / @bitSizeOf(usize);616 const usize_index = arch_feature_index / @bitSizeOf(usize);
639 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));617 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
640 set.ints[usize_index] &= ~(@as(usize, 1) << bit_index);618 set.ints[usize_index] &= ~(@as(usize, 1) << bit_index);
641 }619 }
642620
643 pub fn initAsDependencies(621 pub fn populateDependencies(set: *Set, all_features_list: []const Cpu.Feature) void {
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
656 var old = set.ints;622 var old = set.ints;
657 while (true) {623 while (true) {
658 for (all_features_list) |feature, index| {624 for (all_features_list) |feature, index_usize| {
659 const casted_index = @intCast(Index, index);625 const index = @intCast(Index, index_usize);
660 if (set.isEnabled(casted_index)) {626 if (set.isEnabled(index)) {
661 set.addFeature(casted_index, all_features_list);627 set.ints = @as(@Vector(usize_count, usize), set.ints) |
628 @as(@Vector(usize_count, usize), feature.dependencies.ints);
662 }629 }
663 }630 }
664 const nothing_changed = mem.eql(usize, &old, &set.ints);631 const nothing_changed = mem.eql(usize, &old, &set.ints);
...@@ -674,21 +641,11 @@ pub const Target = union(enum) {...@@ -674,21 +641,11 @@ pub const Target = union(enum) {
674641
675 pub fn feature_set_fns(comptime F: type) type {642 pub fn feature_set_fns(comptime F: type) type {
676 return struct {643 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
687 /// Populates only the feature bits specified.644 /// Populates only the feature bits specified.
688 pub fn sparseFeatureSet(features: []const F) Set {645 pub fn featureSet(features: []const F) Set {
689 var x = Set.empty;646 var x = Set.empty_workaround(); // TODO remove empty_workaround
690 for (features) |feature| {647 for (features) |feature| {
691 x.addSparseFeature(@enumToInt(feature));648 x.addFeature(@enumToInt(feature));
692 }649 }
693 return x;650 return x;
694 }651 }
lib/std/target/aarch64.zig+172-174
...@@ -153,14 +153,13 @@ pub const Feature = enum {...@@ -153,14 +153,13 @@ pub const Feature = enum {
153pub usingnamespace Cpu.Feature.feature_set_fns(Feature);153pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
154154
155pub const all_features = blk: {155pub const all_features = blk: {
156 @setEvalBranchQuota(10000);
157 const len = @typeInfo(Feature).Enum.fields.len;156 const len = @typeInfo(Feature).Enum.fields.len;
158 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);157 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
159 var result: [len]Cpu.Feature = undefined;158 var result: [len]Cpu.Feature = undefined;
160 result[@enumToInt(Feature.a35)] = .{159 result[@enumToInt(Feature.a35)] = .{
161 .llvm_name = "a35",160 .llvm_name = "a35",
162 .description = "Cortex-A35 ARM processors",161 .description = "Cortex-A35 ARM processors",
163 .dependencies = sparseFeatureSet(&[_]Feature{162 .dependencies = featureSet(&[_]Feature{
164 .crc,163 .crc,
165 .crypto,164 .crypto,
166 .fp_armv8,165 .fp_armv8,
...@@ -171,7 +170,7 @@ pub const all_features = blk: {...@@ -171,7 +170,7 @@ pub const all_features = blk: {
171 result[@enumToInt(Feature.a53)] = .{170 result[@enumToInt(Feature.a53)] = .{
172 .llvm_name = "a53",171 .llvm_name = "a53",
173 .description = "Cortex-A53 ARM processors",172 .description = "Cortex-A53 ARM processors",
174 .dependencies = sparseFeatureSet(&[_]Feature{173 .dependencies = featureSet(&[_]Feature{
175 .balance_fp_ops,174 .balance_fp_ops,
176 .crc,175 .crc,
177 .crypto,176 .crypto,
...@@ -187,7 +186,7 @@ pub const all_features = blk: {...@@ -187,7 +186,7 @@ pub const all_features = blk: {
187 result[@enumToInt(Feature.a55)] = .{186 result[@enumToInt(Feature.a55)] = .{
188 .llvm_name = "a55",187 .llvm_name = "a55",
189 .description = "Cortex-A55 ARM processors",188 .description = "Cortex-A55 ARM processors",
190 .dependencies = sparseFeatureSet(&[_]Feature{189 .dependencies = featureSet(&[_]Feature{
191 .crypto,190 .crypto,
192 .dotprod,191 .dotprod,
193 .fp_armv8,192 .fp_armv8,
...@@ -202,7 +201,7 @@ pub const all_features = blk: {...@@ -202,7 +201,7 @@ pub const all_features = blk: {
202 result[@enumToInt(Feature.a57)] = .{201 result[@enumToInt(Feature.a57)] = .{
203 .llvm_name = "a57",202 .llvm_name = "a57",
204 .description = "Cortex-A57 ARM processors",203 .description = "Cortex-A57 ARM processors",
205 .dependencies = sparseFeatureSet(&[_]Feature{204 .dependencies = featureSet(&[_]Feature{
206 .balance_fp_ops,205 .balance_fp_ops,
207 .crc,206 .crc,
208 .crypto,207 .crypto,
...@@ -219,7 +218,7 @@ pub const all_features = blk: {...@@ -219,7 +218,7 @@ pub const all_features = blk: {
219 result[@enumToInt(Feature.a72)] = .{218 result[@enumToInt(Feature.a72)] = .{
220 .llvm_name = "a72",219 .llvm_name = "a72",
221 .description = "Cortex-A72 ARM processors",220 .description = "Cortex-A72 ARM processors",
222 .dependencies = sparseFeatureSet(&[_]Feature{221 .dependencies = featureSet(&[_]Feature{
223 .crc,222 .crc,
224 .crypto,223 .crypto,
225 .fp_armv8,224 .fp_armv8,
...@@ -231,7 +230,7 @@ pub const all_features = blk: {...@@ -231,7 +230,7 @@ pub const all_features = blk: {
231 result[@enumToInt(Feature.a73)] = .{230 result[@enumToInt(Feature.a73)] = .{
232 .llvm_name = "a73",231 .llvm_name = "a73",
233 .description = "Cortex-A73 ARM processors",232 .description = "Cortex-A73 ARM processors",
234 .dependencies = sparseFeatureSet(&[_]Feature{233 .dependencies = featureSet(&[_]Feature{
235 .crc,234 .crc,
236 .crypto,235 .crypto,
237 .fp_armv8,236 .fp_armv8,
...@@ -243,7 +242,7 @@ pub const all_features = blk: {...@@ -243,7 +242,7 @@ pub const all_features = blk: {
243 result[@enumToInt(Feature.a75)] = .{242 result[@enumToInt(Feature.a75)] = .{
244 .llvm_name = "a75",243 .llvm_name = "a75",
245 .description = "Cortex-A75 ARM processors",244 .description = "Cortex-A75 ARM processors",
246 .dependencies = sparseFeatureSet(&[_]Feature{245 .dependencies = featureSet(&[_]Feature{
247 .crypto,246 .crypto,
248 .dotprod,247 .dotprod,
249 .fp_armv8,248 .fp_armv8,
...@@ -258,7 +257,7 @@ pub const all_features = blk: {...@@ -258,7 +257,7 @@ pub const all_features = blk: {
258 result[@enumToInt(Feature.a76)] = .{257 result[@enumToInt(Feature.a76)] = .{
259 .llvm_name = "a76",258 .llvm_name = "a76",
260 .description = "Cortex-A76 ARM processors",259 .description = "Cortex-A76 ARM processors",
261 .dependencies = sparseFeatureSet(&[_]Feature{260 .dependencies = featureSet(&[_]Feature{
262 .crypto,261 .crypto,
263 .dotprod,262 .dotprod,
264 .fp_armv8,263 .fp_armv8,
...@@ -272,126 +271,126 @@ pub const all_features = blk: {...@@ -272,126 +271,126 @@ pub const all_features = blk: {
272 result[@enumToInt(Feature.aes)] = .{271 result[@enumToInt(Feature.aes)] = .{
273 .llvm_name = "aes",272 .llvm_name = "aes",
274 .description = "Enable AES support",273 .description = "Enable AES support",
275 .dependencies = sparseFeatureSet(&[_]Feature{274 .dependencies = featureSet(&[_]Feature{
276 .neon,275 .neon,
277 }),276 }),
278 };277 };
279 result[@enumToInt(Feature.aggressive_fma)] = .{278 result[@enumToInt(Feature.aggressive_fma)] = .{
280 .llvm_name = "aggressive-fma",279 .llvm_name = "aggressive-fma",
281 .description = "Enable Aggressive FMA for floating-point.",280 .description = "Enable Aggressive FMA for floating-point.",
282 .dependencies = sparseFeatureSet(&[_]Feature{}),281 .dependencies = featureSet(&[_]Feature{}),
283 };282 };
284 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{283 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
285 .llvm_name = "alternate-sextload-cvt-f32-pattern",284 .llvm_name = "alternate-sextload-cvt-f32-pattern",
286 .description = "Use alternative pattern for sextload convert to f32",285 .description = "Use alternative pattern for sextload convert to f32",
287 .dependencies = sparseFeatureSet(&[_]Feature{}),286 .dependencies = featureSet(&[_]Feature{}),
288 };287 };
289 result[@enumToInt(Feature.altnzcv)] = .{288 result[@enumToInt(Feature.altnzcv)] = .{
290 .llvm_name = "altnzcv",289 .llvm_name = "altnzcv",
291 .description = "Enable alternative NZCV format for floating point comparisons",290 .description = "Enable alternative NZCV format for floating point comparisons",
292 .dependencies = sparseFeatureSet(&[_]Feature{}),291 .dependencies = featureSet(&[_]Feature{}),
293 };292 };
294 result[@enumToInt(Feature.am)] = .{293 result[@enumToInt(Feature.am)] = .{
295 .llvm_name = "am",294 .llvm_name = "am",
296 .description = "Enable v8.4-A Activity Monitors extension",295 .description = "Enable v8.4-A Activity Monitors extension",
297 .dependencies = sparseFeatureSet(&[_]Feature{}),296 .dependencies = featureSet(&[_]Feature{}),
298 };297 };
299 result[@enumToInt(Feature.arith_bcc_fusion)] = .{298 result[@enumToInt(Feature.arith_bcc_fusion)] = .{
300 .llvm_name = "arith-bcc-fusion",299 .llvm_name = "arith-bcc-fusion",
301 .description = "CPU fuses arithmetic+bcc operations",300 .description = "CPU fuses arithmetic+bcc operations",
302 .dependencies = sparseFeatureSet(&[_]Feature{}),301 .dependencies = featureSet(&[_]Feature{}),
303 };302 };
304 result[@enumToInt(Feature.arith_cbz_fusion)] = .{303 result[@enumToInt(Feature.arith_cbz_fusion)] = .{
305 .llvm_name = "arith-cbz-fusion",304 .llvm_name = "arith-cbz-fusion",
306 .description = "CPU fuses arithmetic + cbz/cbnz operations",305 .description = "CPU fuses arithmetic + cbz/cbnz operations",
307 .dependencies = sparseFeatureSet(&[_]Feature{}),306 .dependencies = featureSet(&[_]Feature{}),
308 };307 };
309 result[@enumToInt(Feature.balance_fp_ops)] = .{308 result[@enumToInt(Feature.balance_fp_ops)] = .{
310 .llvm_name = "balance-fp-ops",309 .llvm_name = "balance-fp-ops",
311 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",310 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",
312 .dependencies = sparseFeatureSet(&[_]Feature{}),311 .dependencies = featureSet(&[_]Feature{}),
313 };312 };
314 result[@enumToInt(Feature.bti)] = .{313 result[@enumToInt(Feature.bti)] = .{
315 .llvm_name = "bti",314 .llvm_name = "bti",
316 .description = "Enable Branch Target Identification",315 .description = "Enable Branch Target Identification",
317 .dependencies = sparseFeatureSet(&[_]Feature{}),316 .dependencies = featureSet(&[_]Feature{}),
318 };317 };
319 result[@enumToInt(Feature.call_saved_x10)] = .{318 result[@enumToInt(Feature.call_saved_x10)] = .{
320 .llvm_name = "call-saved-x10",319 .llvm_name = "call-saved-x10",
321 .description = "Make X10 callee saved.",320 .description = "Make X10 callee saved.",
322 .dependencies = sparseFeatureSet(&[_]Feature{}),321 .dependencies = featureSet(&[_]Feature{}),
323 };322 };
324 result[@enumToInt(Feature.call_saved_x11)] = .{323 result[@enumToInt(Feature.call_saved_x11)] = .{
325 .llvm_name = "call-saved-x11",324 .llvm_name = "call-saved-x11",
326 .description = "Make X11 callee saved.",325 .description = "Make X11 callee saved.",
327 .dependencies = sparseFeatureSet(&[_]Feature{}),326 .dependencies = featureSet(&[_]Feature{}),
328 };327 };
329 result[@enumToInt(Feature.call_saved_x12)] = .{328 result[@enumToInt(Feature.call_saved_x12)] = .{
330 .llvm_name = "call-saved-x12",329 .llvm_name = "call-saved-x12",
331 .description = "Make X12 callee saved.",330 .description = "Make X12 callee saved.",
332 .dependencies = sparseFeatureSet(&[_]Feature{}),331 .dependencies = featureSet(&[_]Feature{}),
333 };332 };
334 result[@enumToInt(Feature.call_saved_x13)] = .{333 result[@enumToInt(Feature.call_saved_x13)] = .{
335 .llvm_name = "call-saved-x13",334 .llvm_name = "call-saved-x13",
336 .description = "Make X13 callee saved.",335 .description = "Make X13 callee saved.",
337 .dependencies = sparseFeatureSet(&[_]Feature{}),336 .dependencies = featureSet(&[_]Feature{}),
338 };337 };
339 result[@enumToInt(Feature.call_saved_x14)] = .{338 result[@enumToInt(Feature.call_saved_x14)] = .{
340 .llvm_name = "call-saved-x14",339 .llvm_name = "call-saved-x14",
341 .description = "Make X14 callee saved.",340 .description = "Make X14 callee saved.",
342 .dependencies = sparseFeatureSet(&[_]Feature{}),341 .dependencies = featureSet(&[_]Feature{}),
343 };342 };
344 result[@enumToInt(Feature.call_saved_x15)] = .{343 result[@enumToInt(Feature.call_saved_x15)] = .{
345 .llvm_name = "call-saved-x15",344 .llvm_name = "call-saved-x15",
346 .description = "Make X15 callee saved.",345 .description = "Make X15 callee saved.",
347 .dependencies = sparseFeatureSet(&[_]Feature{}),346 .dependencies = featureSet(&[_]Feature{}),
348 };347 };
349 result[@enumToInt(Feature.call_saved_x18)] = .{348 result[@enumToInt(Feature.call_saved_x18)] = .{
350 .llvm_name = "call-saved-x18",349 .llvm_name = "call-saved-x18",
351 .description = "Make X18 callee saved.",350 .description = "Make X18 callee saved.",
352 .dependencies = sparseFeatureSet(&[_]Feature{}),351 .dependencies = featureSet(&[_]Feature{}),
353 };352 };
354 result[@enumToInt(Feature.call_saved_x8)] = .{353 result[@enumToInt(Feature.call_saved_x8)] = .{
355 .llvm_name = "call-saved-x8",354 .llvm_name = "call-saved-x8",
356 .description = "Make X8 callee saved.",355 .description = "Make X8 callee saved.",
357 .dependencies = sparseFeatureSet(&[_]Feature{}),356 .dependencies = featureSet(&[_]Feature{}),
358 };357 };
359 result[@enumToInt(Feature.call_saved_x9)] = .{358 result[@enumToInt(Feature.call_saved_x9)] = .{
360 .llvm_name = "call-saved-x9",359 .llvm_name = "call-saved-x9",
361 .description = "Make X9 callee saved.",360 .description = "Make X9 callee saved.",
362 .dependencies = sparseFeatureSet(&[_]Feature{}),361 .dependencies = featureSet(&[_]Feature{}),
363 };362 };
364 result[@enumToInt(Feature.ccdp)] = .{363 result[@enumToInt(Feature.ccdp)] = .{
365 .llvm_name = "ccdp",364 .llvm_name = "ccdp",
366 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",365 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
367 .dependencies = sparseFeatureSet(&[_]Feature{}),366 .dependencies = featureSet(&[_]Feature{}),
368 };367 };
369 result[@enumToInt(Feature.ccidx)] = .{368 result[@enumToInt(Feature.ccidx)] = .{
370 .llvm_name = "ccidx",369 .llvm_name = "ccidx",
371 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",370 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
372 .dependencies = sparseFeatureSet(&[_]Feature{}),371 .dependencies = featureSet(&[_]Feature{}),
373 };372 };
374 result[@enumToInt(Feature.ccpp)] = .{373 result[@enumToInt(Feature.ccpp)] = .{
375 .llvm_name = "ccpp",374 .llvm_name = "ccpp",
376 .description = "Enable v8.2 data Cache Clean to Point of Persistence",375 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
377 .dependencies = sparseFeatureSet(&[_]Feature{}),376 .dependencies = featureSet(&[_]Feature{}),
378 };377 };
379 result[@enumToInt(Feature.complxnum)] = .{378 result[@enumToInt(Feature.complxnum)] = .{
380 .llvm_name = "complxnum",379 .llvm_name = "complxnum",
381 .description = "Enable v8.3-A Floating-point complex number support",380 .description = "Enable v8.3-A Floating-point complex number support",
382 .dependencies = sparseFeatureSet(&[_]Feature{381 .dependencies = featureSet(&[_]Feature{
383 .neon,382 .neon,
384 }),383 }),
385 };384 };
386 result[@enumToInt(Feature.crc)] = .{385 result[@enumToInt(Feature.crc)] = .{
387 .llvm_name = "crc",386 .llvm_name = "crc",
388 .description = "Enable ARMv8 CRC-32 checksum instructions",387 .description = "Enable ARMv8 CRC-32 checksum instructions",
389 .dependencies = sparseFeatureSet(&[_]Feature{}),388 .dependencies = featureSet(&[_]Feature{}),
390 };389 };
391 result[@enumToInt(Feature.crypto)] = .{390 result[@enumToInt(Feature.crypto)] = .{
392 .llvm_name = "crypto",391 .llvm_name = "crypto",
393 .description = "Enable cryptographic instructions",392 .description = "Enable cryptographic instructions",
394 .dependencies = sparseFeatureSet(&[_]Feature{393 .dependencies = featureSet(&[_]Feature{
395 .aes,394 .aes,
396 .neon,395 .neon,
397 .sha2,396 .sha2,
...@@ -400,12 +399,12 @@ pub const all_features = blk: {...@@ -400,12 +399,12 @@ pub const all_features = blk: {
400 result[@enumToInt(Feature.custom_cheap_as_move)] = .{399 result[@enumToInt(Feature.custom_cheap_as_move)] = .{
401 .llvm_name = "custom-cheap-as-move",400 .llvm_name = "custom-cheap-as-move",
402 .description = "Use custom handling of cheap instructions",401 .description = "Use custom handling of cheap instructions",
403 .dependencies = sparseFeatureSet(&[_]Feature{}),402 .dependencies = featureSet(&[_]Feature{}),
404 };403 };
405 result[@enumToInt(Feature.cyclone)] = .{404 result[@enumToInt(Feature.cyclone)] = .{
406 .llvm_name = "cyclone",405 .llvm_name = "cyclone",
407 .description = "Cyclone",406 .description = "Cyclone",
408 .dependencies = sparseFeatureSet(&[_]Feature{407 .dependencies = featureSet(&[_]Feature{
409 .alternate_sextload_cvt_f32_pattern,408 .alternate_sextload_cvt_f32_pattern,
410 .arith_bcc_fusion,409 .arith_bcc_fusion,
411 .arith_cbz_fusion,410 .arith_cbz_fusion,
...@@ -424,29 +423,29 @@ pub const all_features = blk: {...@@ -424,29 +423,29 @@ pub const all_features = blk: {
424 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{423 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
425 .llvm_name = "disable-latency-sched-heuristic",424 .llvm_name = "disable-latency-sched-heuristic",
426 .description = "Disable latency scheduling heuristic",425 .description = "Disable latency scheduling heuristic",
427 .dependencies = sparseFeatureSet(&[_]Feature{}),426 .dependencies = featureSet(&[_]Feature{}),
428 };427 };
429 result[@enumToInt(Feature.dit)] = .{428 result[@enumToInt(Feature.dit)] = .{
430 .llvm_name = "dit",429 .llvm_name = "dit",
431 .description = "Enable v8.4-A Data Independent Timing instructions",430 .description = "Enable v8.4-A Data Independent Timing instructions",
432 .dependencies = sparseFeatureSet(&[_]Feature{}),431 .dependencies = featureSet(&[_]Feature{}),
433 };432 };
434 result[@enumToInt(Feature.dotprod)] = .{433 result[@enumToInt(Feature.dotprod)] = .{
435 .llvm_name = "dotprod",434 .llvm_name = "dotprod",
436 .description = "Enable dot product support",435 .description = "Enable dot product support",
437 .dependencies = sparseFeatureSet(&[_]Feature{}),436 .dependencies = featureSet(&[_]Feature{}),
438 };437 };
439 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{438 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{
440 .llvm_name = "exynos-cheap-as-move",439 .llvm_name = "exynos-cheap-as-move",
441 .description = "Use Exynos specific handling of cheap instructions",440 .description = "Use Exynos specific handling of cheap instructions",
442 .dependencies = sparseFeatureSet(&[_]Feature{441 .dependencies = featureSet(&[_]Feature{
443 .custom_cheap_as_move,442 .custom_cheap_as_move,
444 }),443 }),
445 };444 };
446 result[@enumToInt(Feature.exynosm1)] = .{445 result[@enumToInt(Feature.exynosm1)] = .{
447 .llvm_name = "exynosm1",446 .llvm_name = "exynosm1",
448 .description = "Samsung Exynos-M1 processors",447 .description = "Samsung Exynos-M1 processors",
449 .dependencies = sparseFeatureSet(&[_]Feature{448 .dependencies = featureSet(&[_]Feature{
450 .crc,449 .crc,
451 .crypto,450 .crypto,
452 .exynos_cheap_as_move,451 .exynos_cheap_as_move,
...@@ -463,7 +462,7 @@ pub const all_features = blk: {...@@ -463,7 +462,7 @@ pub const all_features = blk: {
463 result[@enumToInt(Feature.exynosm2)] = .{462 result[@enumToInt(Feature.exynosm2)] = .{
464 .llvm_name = "exynosm2",463 .llvm_name = "exynosm2",
465 .description = "Samsung Exynos-M2 processors",464 .description = "Samsung Exynos-M2 processors",
466 .dependencies = sparseFeatureSet(&[_]Feature{465 .dependencies = featureSet(&[_]Feature{
467 .crc,466 .crc,
468 .crypto,467 .crypto,
469 .exynos_cheap_as_move,468 .exynos_cheap_as_move,
...@@ -479,7 +478,7 @@ pub const all_features = blk: {...@@ -479,7 +478,7 @@ pub const all_features = blk: {
479 result[@enumToInt(Feature.exynosm3)] = .{478 result[@enumToInt(Feature.exynosm3)] = .{
480 .llvm_name = "exynosm3",479 .llvm_name = "exynosm3",
481 .description = "Samsung Exynos-M3 processors",480 .description = "Samsung Exynos-M3 processors",
482 .dependencies = sparseFeatureSet(&[_]Feature{481 .dependencies = featureSet(&[_]Feature{
483 .crc,482 .crc,
484 .crypto,483 .crypto,
485 .exynos_cheap_as_move,484 .exynos_cheap_as_move,
...@@ -498,7 +497,7 @@ pub const all_features = blk: {...@@ -498,7 +497,7 @@ pub const all_features = blk: {
498 result[@enumToInt(Feature.exynosm4)] = .{497 result[@enumToInt(Feature.exynosm4)] = .{
499 .llvm_name = "exynosm4",498 .llvm_name = "exynosm4",
500 .description = "Samsung Exynos-M4 processors",499 .description = "Samsung Exynos-M4 processors",
501 .dependencies = sparseFeatureSet(&[_]Feature{500 .dependencies = featureSet(&[_]Feature{
502 .arith_bcc_fusion,501 .arith_bcc_fusion,
503 .arith_cbz_fusion,502 .arith_cbz_fusion,
504 .crypto,503 .crypto,
...@@ -521,7 +520,7 @@ pub const all_features = blk: {...@@ -521,7 +520,7 @@ pub const all_features = blk: {
521 result[@enumToInt(Feature.falkor)] = .{520 result[@enumToInt(Feature.falkor)] = .{
522 .llvm_name = "falkor",521 .llvm_name = "falkor",
523 .description = "Qualcomm Falkor processors",522 .description = "Qualcomm Falkor processors",
524 .dependencies = sparseFeatureSet(&[_]Feature{523 .dependencies = featureSet(&[_]Feature{
525 .crc,524 .crc,
526 .crypto,525 .crypto,
527 .custom_cheap_as_move,526 .custom_cheap_as_move,
...@@ -539,78 +538,78 @@ pub const all_features = blk: {...@@ -539,78 +538,78 @@ pub const all_features = blk: {
539 result[@enumToInt(Feature.fmi)] = .{538 result[@enumToInt(Feature.fmi)] = .{
540 .llvm_name = "fmi",539 .llvm_name = "fmi",
541 .description = "Enable v8.4-A Flag Manipulation Instructions",540 .description = "Enable v8.4-A Flag Manipulation Instructions",
542 .dependencies = sparseFeatureSet(&[_]Feature{}),541 .dependencies = featureSet(&[_]Feature{}),
543 };542 };
544 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{543 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
545 .llvm_name = "force-32bit-jump-tables",544 .llvm_name = "force-32bit-jump-tables",
546 .description = "Force jump table entries to be 32-bits wide except at MinSize",545 .description = "Force jump table entries to be 32-bits wide except at MinSize",
547 .dependencies = sparseFeatureSet(&[_]Feature{}),546 .dependencies = featureSet(&[_]Feature{}),
548 };547 };
549 result[@enumToInt(Feature.fp_armv8)] = .{548 result[@enumToInt(Feature.fp_armv8)] = .{
550 .llvm_name = "fp-armv8",549 .llvm_name = "fp-armv8",
551 .description = "Enable ARMv8 FP",550 .description = "Enable ARMv8 FP",
552 .dependencies = sparseFeatureSet(&[_]Feature{}),551 .dependencies = featureSet(&[_]Feature{}),
553 };552 };
554 result[@enumToInt(Feature.fp16fml)] = .{553 result[@enumToInt(Feature.fp16fml)] = .{
555 .llvm_name = "fp16fml",554 .llvm_name = "fp16fml",
556 .description = "Enable FP16 FML instructions",555 .description = "Enable FP16 FML instructions",
557 .dependencies = sparseFeatureSet(&[_]Feature{556 .dependencies = featureSet(&[_]Feature{
558 .fullfp16,557 .fullfp16,
559 }),558 }),
560 };559 };
561 result[@enumToInt(Feature.fptoint)] = .{560 result[@enumToInt(Feature.fptoint)] = .{
562 .llvm_name = "fptoint",561 .llvm_name = "fptoint",
563 .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",562 .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{}),
565 };564 };
566 result[@enumToInt(Feature.fullfp16)] = .{565 result[@enumToInt(Feature.fullfp16)] = .{
567 .llvm_name = "fullfp16",566 .llvm_name = "fullfp16",
568 .description = "Full FP16",567 .description = "Full FP16",
569 .dependencies = sparseFeatureSet(&[_]Feature{568 .dependencies = featureSet(&[_]Feature{
570 .fp_armv8,569 .fp_armv8,
571 }),570 }),
572 };571 };
573 result[@enumToInt(Feature.fuse_address)] = .{572 result[@enumToInt(Feature.fuse_address)] = .{
574 .llvm_name = "fuse-address",573 .llvm_name = "fuse-address",
575 .description = "CPU fuses address generation and memory operations",574 .description = "CPU fuses address generation and memory operations",
576 .dependencies = sparseFeatureSet(&[_]Feature{}),575 .dependencies = featureSet(&[_]Feature{}),
577 };576 };
578 result[@enumToInt(Feature.fuse_aes)] = .{577 result[@enumToInt(Feature.fuse_aes)] = .{
579 .llvm_name = "fuse-aes",578 .llvm_name = "fuse-aes",
580 .description = "CPU fuses AES crypto operations",579 .description = "CPU fuses AES crypto operations",
581 .dependencies = sparseFeatureSet(&[_]Feature{}),580 .dependencies = featureSet(&[_]Feature{}),
582 };581 };
583 result[@enumToInt(Feature.fuse_arith_logic)] = .{582 result[@enumToInt(Feature.fuse_arith_logic)] = .{
584 .llvm_name = "fuse-arith-logic",583 .llvm_name = "fuse-arith-logic",
585 .description = "CPU fuses arithmetic and logic operations",584 .description = "CPU fuses arithmetic and logic operations",
586 .dependencies = sparseFeatureSet(&[_]Feature{}),585 .dependencies = featureSet(&[_]Feature{}),
587 };586 };
588 result[@enumToInt(Feature.fuse_crypto_eor)] = .{587 result[@enumToInt(Feature.fuse_crypto_eor)] = .{
589 .llvm_name = "fuse-crypto-eor",588 .llvm_name = "fuse-crypto-eor",
590 .description = "CPU fuses AES/PMULL and EOR operations",589 .description = "CPU fuses AES/PMULL and EOR operations",
591 .dependencies = sparseFeatureSet(&[_]Feature{}),590 .dependencies = featureSet(&[_]Feature{}),
592 };591 };
593 result[@enumToInt(Feature.fuse_csel)] = .{592 result[@enumToInt(Feature.fuse_csel)] = .{
594 .llvm_name = "fuse-csel",593 .llvm_name = "fuse-csel",
595 .description = "CPU fuses conditional select operations",594 .description = "CPU fuses conditional select operations",
596 .dependencies = sparseFeatureSet(&[_]Feature{}),595 .dependencies = featureSet(&[_]Feature{}),
597 };596 };
598 result[@enumToInt(Feature.fuse_literals)] = .{597 result[@enumToInt(Feature.fuse_literals)] = .{
599 .llvm_name = "fuse-literals",598 .llvm_name = "fuse-literals",
600 .description = "CPU fuses literal generation operations",599 .description = "CPU fuses literal generation operations",
601 .dependencies = sparseFeatureSet(&[_]Feature{}),600 .dependencies = featureSet(&[_]Feature{}),
602 };601 };
603 result[@enumToInt(Feature.jsconv)] = .{602 result[@enumToInt(Feature.jsconv)] = .{
604 .llvm_name = "jsconv",603 .llvm_name = "jsconv",
605 .description = "Enable v8.3-A JavaScript FP conversion enchancement",604 .description = "Enable v8.3-A JavaScript FP conversion enchancement",
606 .dependencies = sparseFeatureSet(&[_]Feature{605 .dependencies = featureSet(&[_]Feature{
607 .fp_armv8,606 .fp_armv8,
608 }),607 }),
609 };608 };
610 result[@enumToInt(Feature.kryo)] = .{609 result[@enumToInt(Feature.kryo)] = .{
611 .llvm_name = "kryo",610 .llvm_name = "kryo",
612 .description = "Qualcomm Kryo processors",611 .description = "Qualcomm Kryo processors",
613 .dependencies = sparseFeatureSet(&[_]Feature{612 .dependencies = featureSet(&[_]Feature{
614 .crc,613 .crc,
615 .crypto,614 .crypto,
616 .custom_cheap_as_move,615 .custom_cheap_as_move,
...@@ -626,235 +625,235 @@ pub const all_features = blk: {...@@ -626,235 +625,235 @@ pub const all_features = blk: {
626 result[@enumToInt(Feature.lor)] = .{625 result[@enumToInt(Feature.lor)] = .{
627 .llvm_name = "lor",626 .llvm_name = "lor",
628 .description = "Enables ARM v8.1 Limited Ordering Regions extension",627 .description = "Enables ARM v8.1 Limited Ordering Regions extension",
629 .dependencies = sparseFeatureSet(&[_]Feature{}),628 .dependencies = featureSet(&[_]Feature{}),
630 };629 };
631 result[@enumToInt(Feature.lse)] = .{630 result[@enumToInt(Feature.lse)] = .{
632 .llvm_name = "lse",631 .llvm_name = "lse",
633 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",632 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",
634 .dependencies = sparseFeatureSet(&[_]Feature{}),633 .dependencies = featureSet(&[_]Feature{}),
635 };634 };
636 result[@enumToInt(Feature.lsl_fast)] = .{635 result[@enumToInt(Feature.lsl_fast)] = .{
637 .llvm_name = "lsl-fast",636 .llvm_name = "lsl-fast",
638 .description = "CPU has a fastpath logical shift of up to 3 places",637 .description = "CPU has a fastpath logical shift of up to 3 places",
639 .dependencies = sparseFeatureSet(&[_]Feature{}),638 .dependencies = featureSet(&[_]Feature{}),
640 };639 };
641 result[@enumToInt(Feature.mpam)] = .{640 result[@enumToInt(Feature.mpam)] = .{
642 .llvm_name = "mpam",641 .llvm_name = "mpam",
643 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",642 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",
644 .dependencies = sparseFeatureSet(&[_]Feature{}),643 .dependencies = featureSet(&[_]Feature{}),
645 };644 };
646 result[@enumToInt(Feature.mte)] = .{645 result[@enumToInt(Feature.mte)] = .{
647 .llvm_name = "mte",646 .llvm_name = "mte",
648 .description = "Enable Memory Tagging Extension",647 .description = "Enable Memory Tagging Extension",
649 .dependencies = sparseFeatureSet(&[_]Feature{}),648 .dependencies = featureSet(&[_]Feature{}),
650 };649 };
651 result[@enumToInt(Feature.neon)] = .{650 result[@enumToInt(Feature.neon)] = .{
652 .llvm_name = "neon",651 .llvm_name = "neon",
653 .description = "Enable Advanced SIMD instructions",652 .description = "Enable Advanced SIMD instructions",
654 .dependencies = sparseFeatureSet(&[_]Feature{653 .dependencies = featureSet(&[_]Feature{
655 .fp_armv8,654 .fp_armv8,
656 }),655 }),
657 };656 };
658 result[@enumToInt(Feature.no_neg_immediates)] = .{657 result[@enumToInt(Feature.no_neg_immediates)] = .{
659 .llvm_name = "no-neg-immediates",658 .llvm_name = "no-neg-immediates",
660 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",659 .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{}),
662 };661 };
663 result[@enumToInt(Feature.nv)] = .{662 result[@enumToInt(Feature.nv)] = .{
664 .llvm_name = "nv",663 .llvm_name = "nv",
665 .description = "Enable v8.4-A Nested Virtualization Enchancement",664 .description = "Enable v8.4-A Nested Virtualization Enchancement",
666 .dependencies = sparseFeatureSet(&[_]Feature{}),665 .dependencies = featureSet(&[_]Feature{}),
667 };666 };
668 result[@enumToInt(Feature.pa)] = .{667 result[@enumToInt(Feature.pa)] = .{
669 .llvm_name = "pa",668 .llvm_name = "pa",
670 .description = "Enable v8.3-A Pointer Authentication enchancement",669 .description = "Enable v8.3-A Pointer Authentication enchancement",
671 .dependencies = sparseFeatureSet(&[_]Feature{}),670 .dependencies = featureSet(&[_]Feature{}),
672 };671 };
673 result[@enumToInt(Feature.pan)] = .{672 result[@enumToInt(Feature.pan)] = .{
674 .llvm_name = "pan",673 .llvm_name = "pan",
675 .description = "Enables ARM v8.1 Privileged Access-Never extension",674 .description = "Enables ARM v8.1 Privileged Access-Never extension",
676 .dependencies = sparseFeatureSet(&[_]Feature{}),675 .dependencies = featureSet(&[_]Feature{}),
677 };676 };
678 result[@enumToInt(Feature.pan_rwv)] = .{677 result[@enumToInt(Feature.pan_rwv)] = .{
679 .llvm_name = "pan-rwv",678 .llvm_name = "pan-rwv",
680 .description = "Enable v8.2 PAN s1e1R and s1e1W Variants",679 .description = "Enable v8.2 PAN s1e1R and s1e1W Variants",
681 .dependencies = sparseFeatureSet(&[_]Feature{680 .dependencies = featureSet(&[_]Feature{
682 .pan,681 .pan,
683 }),682 }),
684 };683 };
685 result[@enumToInt(Feature.perfmon)] = .{684 result[@enumToInt(Feature.perfmon)] = .{
686 .llvm_name = "perfmon",685 .llvm_name = "perfmon",
687 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",686 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",
688 .dependencies = sparseFeatureSet(&[_]Feature{}),687 .dependencies = featureSet(&[_]Feature{}),
689 };688 };
690 result[@enumToInt(Feature.predictable_select_expensive)] = .{689 result[@enumToInt(Feature.predictable_select_expensive)] = .{
691 .llvm_name = "predictable-select-expensive",690 .llvm_name = "predictable-select-expensive",
692 .description = "Prefer likely predicted branches over selects",691 .description = "Prefer likely predicted branches over selects",
693 .dependencies = sparseFeatureSet(&[_]Feature{}),692 .dependencies = featureSet(&[_]Feature{}),
694 };693 };
695 result[@enumToInt(Feature.predres)] = .{694 result[@enumToInt(Feature.predres)] = .{
696 .llvm_name = "predres",695 .llvm_name = "predres",
697 .description = "Enable v8.5a execution and data prediction invalidation instructions",696 .description = "Enable v8.5a execution and data prediction invalidation instructions",
698 .dependencies = sparseFeatureSet(&[_]Feature{}),697 .dependencies = featureSet(&[_]Feature{}),
699 };698 };
700 result[@enumToInt(Feature.rand)] = .{699 result[@enumToInt(Feature.rand)] = .{
701 .llvm_name = "rand",700 .llvm_name = "rand",
702 .description = "Enable Random Number generation instructions",701 .description = "Enable Random Number generation instructions",
703 .dependencies = sparseFeatureSet(&[_]Feature{}),702 .dependencies = featureSet(&[_]Feature{}),
704 };703 };
705 result[@enumToInt(Feature.ras)] = .{704 result[@enumToInt(Feature.ras)] = .{
706 .llvm_name = "ras",705 .llvm_name = "ras",
707 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",706 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",
708 .dependencies = sparseFeatureSet(&[_]Feature{}),707 .dependencies = featureSet(&[_]Feature{}),
709 };708 };
710 result[@enumToInt(Feature.rasv8_4)] = .{709 result[@enumToInt(Feature.rasv8_4)] = .{
711 .llvm_name = "rasv8_4",710 .llvm_name = "rasv8_4",
712 .description = "Enable v8.4-A Reliability, Availability and Serviceability extension",711 .description = "Enable v8.4-A Reliability, Availability and Serviceability extension",
713 .dependencies = sparseFeatureSet(&[_]Feature{712 .dependencies = featureSet(&[_]Feature{
714 .ras,713 .ras,
715 }),714 }),
716 };715 };
717 result[@enumToInt(Feature.rcpc)] = .{716 result[@enumToInt(Feature.rcpc)] = .{
718 .llvm_name = "rcpc",717 .llvm_name = "rcpc",
719 .description = "Enable support for RCPC extension",718 .description = "Enable support for RCPC extension",
720 .dependencies = sparseFeatureSet(&[_]Feature{}),719 .dependencies = featureSet(&[_]Feature{}),
721 };720 };
722 result[@enumToInt(Feature.rcpc_immo)] = .{721 result[@enumToInt(Feature.rcpc_immo)] = .{
723 .llvm_name = "rcpc-immo",722 .llvm_name = "rcpc-immo",
724 .description = "Enable v8.4-A RCPC instructions with Immediate Offsets",723 .description = "Enable v8.4-A RCPC instructions with Immediate Offsets",
725 .dependencies = sparseFeatureSet(&[_]Feature{724 .dependencies = featureSet(&[_]Feature{
726 .rcpc,725 .rcpc,
727 }),726 }),
728 };727 };
729 result[@enumToInt(Feature.rdm)] = .{728 result[@enumToInt(Feature.rdm)] = .{
730 .llvm_name = "rdm",729 .llvm_name = "rdm",
731 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",730 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",
732 .dependencies = sparseFeatureSet(&[_]Feature{}),731 .dependencies = featureSet(&[_]Feature{}),
733 };732 };
734 result[@enumToInt(Feature.reserve_x1)] = .{733 result[@enumToInt(Feature.reserve_x1)] = .{
735 .llvm_name = "reserve-x1",734 .llvm_name = "reserve-x1",
736 .description = "Reserve X1, making it unavailable as a GPR",735 .description = "Reserve X1, making it unavailable as a GPR",
737 .dependencies = sparseFeatureSet(&[_]Feature{}),736 .dependencies = featureSet(&[_]Feature{}),
738 };737 };
739 result[@enumToInt(Feature.reserve_x10)] = .{738 result[@enumToInt(Feature.reserve_x10)] = .{
740 .llvm_name = "reserve-x10",739 .llvm_name = "reserve-x10",
741 .description = "Reserve X10, making it unavailable as a GPR",740 .description = "Reserve X10, making it unavailable as a GPR",
742 .dependencies = sparseFeatureSet(&[_]Feature{}),741 .dependencies = featureSet(&[_]Feature{}),
743 };742 };
744 result[@enumToInt(Feature.reserve_x11)] = .{743 result[@enumToInt(Feature.reserve_x11)] = .{
745 .llvm_name = "reserve-x11",744 .llvm_name = "reserve-x11",
746 .description = "Reserve X11, making it unavailable as a GPR",745 .description = "Reserve X11, making it unavailable as a GPR",
747 .dependencies = sparseFeatureSet(&[_]Feature{}),746 .dependencies = featureSet(&[_]Feature{}),
748 };747 };
749 result[@enumToInt(Feature.reserve_x12)] = .{748 result[@enumToInt(Feature.reserve_x12)] = .{
750 .llvm_name = "reserve-x12",749 .llvm_name = "reserve-x12",
751 .description = "Reserve X12, making it unavailable as a GPR",750 .description = "Reserve X12, making it unavailable as a GPR",
752 .dependencies = sparseFeatureSet(&[_]Feature{}),751 .dependencies = featureSet(&[_]Feature{}),
753 };752 };
754 result[@enumToInt(Feature.reserve_x13)] = .{753 result[@enumToInt(Feature.reserve_x13)] = .{
755 .llvm_name = "reserve-x13",754 .llvm_name = "reserve-x13",
756 .description = "Reserve X13, making it unavailable as a GPR",755 .description = "Reserve X13, making it unavailable as a GPR",
757 .dependencies = sparseFeatureSet(&[_]Feature{}),756 .dependencies = featureSet(&[_]Feature{}),
758 };757 };
759 result[@enumToInt(Feature.reserve_x14)] = .{758 result[@enumToInt(Feature.reserve_x14)] = .{
760 .llvm_name = "reserve-x14",759 .llvm_name = "reserve-x14",
761 .description = "Reserve X14, making it unavailable as a GPR",760 .description = "Reserve X14, making it unavailable as a GPR",
762 .dependencies = sparseFeatureSet(&[_]Feature{}),761 .dependencies = featureSet(&[_]Feature{}),
763 };762 };
764 result[@enumToInt(Feature.reserve_x15)] = .{763 result[@enumToInt(Feature.reserve_x15)] = .{
765 .llvm_name = "reserve-x15",764 .llvm_name = "reserve-x15",
766 .description = "Reserve X15, making it unavailable as a GPR",765 .description = "Reserve X15, making it unavailable as a GPR",
767 .dependencies = sparseFeatureSet(&[_]Feature{}),766 .dependencies = featureSet(&[_]Feature{}),
768 };767 };
769 result[@enumToInt(Feature.reserve_x18)] = .{768 result[@enumToInt(Feature.reserve_x18)] = .{
770 .llvm_name = "reserve-x18",769 .llvm_name = "reserve-x18",
771 .description = "Reserve X18, making it unavailable as a GPR",770 .description = "Reserve X18, making it unavailable as a GPR",
772 .dependencies = sparseFeatureSet(&[_]Feature{}),771 .dependencies = featureSet(&[_]Feature{}),
773 };772 };
774 result[@enumToInt(Feature.reserve_x2)] = .{773 result[@enumToInt(Feature.reserve_x2)] = .{
775 .llvm_name = "reserve-x2",774 .llvm_name = "reserve-x2",
776 .description = "Reserve X2, making it unavailable as a GPR",775 .description = "Reserve X2, making it unavailable as a GPR",
777 .dependencies = sparseFeatureSet(&[_]Feature{}),776 .dependencies = featureSet(&[_]Feature{}),
778 };777 };
779 result[@enumToInt(Feature.reserve_x20)] = .{778 result[@enumToInt(Feature.reserve_x20)] = .{
780 .llvm_name = "reserve-x20",779 .llvm_name = "reserve-x20",
781 .description = "Reserve X20, making it unavailable as a GPR",780 .description = "Reserve X20, making it unavailable as a GPR",
782 .dependencies = sparseFeatureSet(&[_]Feature{}),781 .dependencies = featureSet(&[_]Feature{}),
783 };782 };
784 result[@enumToInt(Feature.reserve_x21)] = .{783 result[@enumToInt(Feature.reserve_x21)] = .{
785 .llvm_name = "reserve-x21",784 .llvm_name = "reserve-x21",
786 .description = "Reserve X21, making it unavailable as a GPR",785 .description = "Reserve X21, making it unavailable as a GPR",
787 .dependencies = sparseFeatureSet(&[_]Feature{}),786 .dependencies = featureSet(&[_]Feature{}),
788 };787 };
789 result[@enumToInt(Feature.reserve_x22)] = .{788 result[@enumToInt(Feature.reserve_x22)] = .{
790 .llvm_name = "reserve-x22",789 .llvm_name = "reserve-x22",
791 .description = "Reserve X22, making it unavailable as a GPR",790 .description = "Reserve X22, making it unavailable as a GPR",
792 .dependencies = sparseFeatureSet(&[_]Feature{}),791 .dependencies = featureSet(&[_]Feature{}),
793 };792 };
794 result[@enumToInt(Feature.reserve_x23)] = .{793 result[@enumToInt(Feature.reserve_x23)] = .{
795 .llvm_name = "reserve-x23",794 .llvm_name = "reserve-x23",
796 .description = "Reserve X23, making it unavailable as a GPR",795 .description = "Reserve X23, making it unavailable as a GPR",
797 .dependencies = sparseFeatureSet(&[_]Feature{}),796 .dependencies = featureSet(&[_]Feature{}),
798 };797 };
799 result[@enumToInt(Feature.reserve_x24)] = .{798 result[@enumToInt(Feature.reserve_x24)] = .{
800 .llvm_name = "reserve-x24",799 .llvm_name = "reserve-x24",
801 .description = "Reserve X24, making it unavailable as a GPR",800 .description = "Reserve X24, making it unavailable as a GPR",
802 .dependencies = sparseFeatureSet(&[_]Feature{}),801 .dependencies = featureSet(&[_]Feature{}),
803 };802 };
804 result[@enumToInt(Feature.reserve_x25)] = .{803 result[@enumToInt(Feature.reserve_x25)] = .{
805 .llvm_name = "reserve-x25",804 .llvm_name = "reserve-x25",
806 .description = "Reserve X25, making it unavailable as a GPR",805 .description = "Reserve X25, making it unavailable as a GPR",
807 .dependencies = sparseFeatureSet(&[_]Feature{}),806 .dependencies = featureSet(&[_]Feature{}),
808 };807 };
809 result[@enumToInt(Feature.reserve_x26)] = .{808 result[@enumToInt(Feature.reserve_x26)] = .{
810 .llvm_name = "reserve-x26",809 .llvm_name = "reserve-x26",
811 .description = "Reserve X26, making it unavailable as a GPR",810 .description = "Reserve X26, making it unavailable as a GPR",
812 .dependencies = sparseFeatureSet(&[_]Feature{}),811 .dependencies = featureSet(&[_]Feature{}),
813 };812 };
814 result[@enumToInt(Feature.reserve_x27)] = .{813 result[@enumToInt(Feature.reserve_x27)] = .{
815 .llvm_name = "reserve-x27",814 .llvm_name = "reserve-x27",
816 .description = "Reserve X27, making it unavailable as a GPR",815 .description = "Reserve X27, making it unavailable as a GPR",
817 .dependencies = sparseFeatureSet(&[_]Feature{}),816 .dependencies = featureSet(&[_]Feature{}),
818 };817 };
819 result[@enumToInt(Feature.reserve_x28)] = .{818 result[@enumToInt(Feature.reserve_x28)] = .{
820 .llvm_name = "reserve-x28",819 .llvm_name = "reserve-x28",
821 .description = "Reserve X28, making it unavailable as a GPR",820 .description = "Reserve X28, making it unavailable as a GPR",
822 .dependencies = sparseFeatureSet(&[_]Feature{}),821 .dependencies = featureSet(&[_]Feature{}),
823 };822 };
824 result[@enumToInt(Feature.reserve_x3)] = .{823 result[@enumToInt(Feature.reserve_x3)] = .{
825 .llvm_name = "reserve-x3",824 .llvm_name = "reserve-x3",
826 .description = "Reserve X3, making it unavailable as a GPR",825 .description = "Reserve X3, making it unavailable as a GPR",
827 .dependencies = sparseFeatureSet(&[_]Feature{}),826 .dependencies = featureSet(&[_]Feature{}),
828 };827 };
829 result[@enumToInt(Feature.reserve_x4)] = .{828 result[@enumToInt(Feature.reserve_x4)] = .{
830 .llvm_name = "reserve-x4",829 .llvm_name = "reserve-x4",
831 .description = "Reserve X4, making it unavailable as a GPR",830 .description = "Reserve X4, making it unavailable as a GPR",
832 .dependencies = sparseFeatureSet(&[_]Feature{}),831 .dependencies = featureSet(&[_]Feature{}),
833 };832 };
834 result[@enumToInt(Feature.reserve_x5)] = .{833 result[@enumToInt(Feature.reserve_x5)] = .{
835 .llvm_name = "reserve-x5",834 .llvm_name = "reserve-x5",
836 .description = "Reserve X5, making it unavailable as a GPR",835 .description = "Reserve X5, making it unavailable as a GPR",
837 .dependencies = sparseFeatureSet(&[_]Feature{}),836 .dependencies = featureSet(&[_]Feature{}),
838 };837 };
839 result[@enumToInt(Feature.reserve_x6)] = .{838 result[@enumToInt(Feature.reserve_x6)] = .{
840 .llvm_name = "reserve-x6",839 .llvm_name = "reserve-x6",
841 .description = "Reserve X6, making it unavailable as a GPR",840 .description = "Reserve X6, making it unavailable as a GPR",
842 .dependencies = sparseFeatureSet(&[_]Feature{}),841 .dependencies = featureSet(&[_]Feature{}),
843 };842 };
844 result[@enumToInt(Feature.reserve_x7)] = .{843 result[@enumToInt(Feature.reserve_x7)] = .{
845 .llvm_name = "reserve-x7",844 .llvm_name = "reserve-x7",
846 .description = "Reserve X7, making it unavailable as a GPR",845 .description = "Reserve X7, making it unavailable as a GPR",
847 .dependencies = sparseFeatureSet(&[_]Feature{}),846 .dependencies = featureSet(&[_]Feature{}),
848 };847 };
849 result[@enumToInt(Feature.reserve_x9)] = .{848 result[@enumToInt(Feature.reserve_x9)] = .{
850 .llvm_name = "reserve-x9",849 .llvm_name = "reserve-x9",
851 .description = "Reserve X9, making it unavailable as a GPR",850 .description = "Reserve X9, making it unavailable as a GPR",
852 .dependencies = sparseFeatureSet(&[_]Feature{}),851 .dependencies = featureSet(&[_]Feature{}),
853 };852 };
854 result[@enumToInt(Feature.saphira)] = .{853 result[@enumToInt(Feature.saphira)] = .{
855 .llvm_name = "saphira",854 .llvm_name = "saphira",
856 .description = "Qualcomm Saphira processors",855 .description = "Qualcomm Saphira processors",
857 .dependencies = sparseFeatureSet(&[_]Feature{856 .dependencies = featureSet(&[_]Feature{
858 .crypto,857 .crypto,
859 .custom_cheap_as_move,858 .custom_cheap_as_move,
860 .fp_armv8,859 .fp_armv8,
...@@ -871,24 +870,24 @@ pub const all_features = blk: {...@@ -871,24 +870,24 @@ pub const all_features = blk: {
871 result[@enumToInt(Feature.sb)] = .{870 result[@enumToInt(Feature.sb)] = .{
872 .llvm_name = "sb",871 .llvm_name = "sb",
873 .description = "Enable v8.5 Speculation Barrier",872 .description = "Enable v8.5 Speculation Barrier",
874 .dependencies = sparseFeatureSet(&[_]Feature{}),873 .dependencies = featureSet(&[_]Feature{}),
875 };874 };
876 result[@enumToInt(Feature.sel2)] = .{875 result[@enumToInt(Feature.sel2)] = .{
877 .llvm_name = "sel2",876 .llvm_name = "sel2",
878 .description = "Enable v8.4-A Secure Exception Level 2 extension",877 .description = "Enable v8.4-A Secure Exception Level 2 extension",
879 .dependencies = sparseFeatureSet(&[_]Feature{}),878 .dependencies = featureSet(&[_]Feature{}),
880 };879 };
881 result[@enumToInt(Feature.sha2)] = .{880 result[@enumToInt(Feature.sha2)] = .{
882 .llvm_name = "sha2",881 .llvm_name = "sha2",
883 .description = "Enable SHA1 and SHA256 support",882 .description = "Enable SHA1 and SHA256 support",
884 .dependencies = sparseFeatureSet(&[_]Feature{883 .dependencies = featureSet(&[_]Feature{
885 .neon,884 .neon,
886 }),885 }),
887 };886 };
888 result[@enumToInt(Feature.sha3)] = .{887 result[@enumToInt(Feature.sha3)] = .{
889 .llvm_name = "sha3",888 .llvm_name = "sha3",
890 .description = "Enable SHA512 and SHA3 support",889 .description = "Enable SHA512 and SHA3 support",
891 .dependencies = sparseFeatureSet(&[_]Feature{890 .dependencies = featureSet(&[_]Feature{
892 .neon,891 .neon,
893 .sha2,892 .sha2,
894 }),893 }),
...@@ -896,61 +895,61 @@ pub const all_features = blk: {...@@ -896,61 +895,61 @@ pub const all_features = blk: {
896 result[@enumToInt(Feature.slow_misaligned_128store)] = .{895 result[@enumToInt(Feature.slow_misaligned_128store)] = .{
897 .llvm_name = "slow-misaligned-128store",896 .llvm_name = "slow-misaligned-128store",
898 .description = "Misaligned 128 bit stores are slow",897 .description = "Misaligned 128 bit stores are slow",
899 .dependencies = sparseFeatureSet(&[_]Feature{}),898 .dependencies = featureSet(&[_]Feature{}),
900 };899 };
901 result[@enumToInt(Feature.slow_paired_128)] = .{900 result[@enumToInt(Feature.slow_paired_128)] = .{
902 .llvm_name = "slow-paired-128",901 .llvm_name = "slow-paired-128",
903 .description = "Paired 128 bit loads and stores are slow",902 .description = "Paired 128 bit loads and stores are slow",
904 .dependencies = sparseFeatureSet(&[_]Feature{}),903 .dependencies = featureSet(&[_]Feature{}),
905 };904 };
906 result[@enumToInt(Feature.slow_strqro_store)] = .{905 result[@enumToInt(Feature.slow_strqro_store)] = .{
907 .llvm_name = "slow-strqro-store",906 .llvm_name = "slow-strqro-store",
908 .description = "STR of Q register with register offset is slow",907 .description = "STR of Q register with register offset is slow",
909 .dependencies = sparseFeatureSet(&[_]Feature{}),908 .dependencies = featureSet(&[_]Feature{}),
910 };909 };
911 result[@enumToInt(Feature.sm4)] = .{910 result[@enumToInt(Feature.sm4)] = .{
912 .llvm_name = "sm4",911 .llvm_name = "sm4",
913 .description = "Enable SM3 and SM4 support",912 .description = "Enable SM3 and SM4 support",
914 .dependencies = sparseFeatureSet(&[_]Feature{913 .dependencies = featureSet(&[_]Feature{
915 .neon,914 .neon,
916 }),915 }),
917 };916 };
918 result[@enumToInt(Feature.spe)] = .{917 result[@enumToInt(Feature.spe)] = .{
919 .llvm_name = "spe",918 .llvm_name = "spe",
920 .description = "Enable Statistical Profiling extension",919 .description = "Enable Statistical Profiling extension",
921 .dependencies = sparseFeatureSet(&[_]Feature{}),920 .dependencies = featureSet(&[_]Feature{}),
922 };921 };
923 result[@enumToInt(Feature.specrestrict)] = .{922 result[@enumToInt(Feature.specrestrict)] = .{
924 .llvm_name = "specrestrict",923 .llvm_name = "specrestrict",
925 .description = "Enable architectural speculation restriction",924 .description = "Enable architectural speculation restriction",
926 .dependencies = sparseFeatureSet(&[_]Feature{}),925 .dependencies = featureSet(&[_]Feature{}),
927 };926 };
928 result[@enumToInt(Feature.ssbs)] = .{927 result[@enumToInt(Feature.ssbs)] = .{
929 .llvm_name = "ssbs",928 .llvm_name = "ssbs",
930 .description = "Enable Speculative Store Bypass Safe bit",929 .description = "Enable Speculative Store Bypass Safe bit",
931 .dependencies = sparseFeatureSet(&[_]Feature{}),930 .dependencies = featureSet(&[_]Feature{}),
932 };931 };
933 result[@enumToInt(Feature.strict_align)] = .{932 result[@enumToInt(Feature.strict_align)] = .{
934 .llvm_name = "strict-align",933 .llvm_name = "strict-align",
935 .description = "Disallow all unaligned memory access",934 .description = "Disallow all unaligned memory access",
936 .dependencies = sparseFeatureSet(&[_]Feature{}),935 .dependencies = featureSet(&[_]Feature{}),
937 };936 };
938 result[@enumToInt(Feature.sve)] = .{937 result[@enumToInt(Feature.sve)] = .{
939 .llvm_name = "sve",938 .llvm_name = "sve",
940 .description = "Enable Scalable Vector Extension (SVE) instructions",939 .description = "Enable Scalable Vector Extension (SVE) instructions",
941 .dependencies = sparseFeatureSet(&[_]Feature{}),940 .dependencies = featureSet(&[_]Feature{}),
942 };941 };
943 result[@enumToInt(Feature.sve2)] = .{942 result[@enumToInt(Feature.sve2)] = .{
944 .llvm_name = "sve2",943 .llvm_name = "sve2",
945 .description = "Enable Scalable Vector Extension 2 (SVE2) instructions",944 .description = "Enable Scalable Vector Extension 2 (SVE2) instructions",
946 .dependencies = sparseFeatureSet(&[_]Feature{945 .dependencies = featureSet(&[_]Feature{
947 .sve,946 .sve,
948 }),947 }),
949 };948 };
950 result[@enumToInt(Feature.sve2_aes)] = .{949 result[@enumToInt(Feature.sve2_aes)] = .{
951 .llvm_name = "sve2-aes",950 .llvm_name = "sve2-aes",
952 .description = "Enable AES SVE2 instructions",951 .description = "Enable AES SVE2 instructions",
953 .dependencies = sparseFeatureSet(&[_]Feature{952 .dependencies = featureSet(&[_]Feature{
954 .aes,953 .aes,
955 .sve2,954 .sve2,
956 }),955 }),
...@@ -958,14 +957,14 @@ pub const all_features = blk: {...@@ -958,14 +957,14 @@ pub const all_features = blk: {
958 result[@enumToInt(Feature.sve2_bitperm)] = .{957 result[@enumToInt(Feature.sve2_bitperm)] = .{
959 .llvm_name = "sve2-bitperm",958 .llvm_name = "sve2-bitperm",
960 .description = "Enable bit permutation SVE2 instructions",959 .description = "Enable bit permutation SVE2 instructions",
961 .dependencies = sparseFeatureSet(&[_]Feature{960 .dependencies = featureSet(&[_]Feature{
962 .sve2,961 .sve2,
963 }),962 }),
964 };963 };
965 result[@enumToInt(Feature.sve2_sha3)] = .{964 result[@enumToInt(Feature.sve2_sha3)] = .{
966 .llvm_name = "sve2-sha3",965 .llvm_name = "sve2-sha3",
967 .description = "Enable SHA3 SVE2 instructions",966 .description = "Enable SHA3 SVE2 instructions",
968 .dependencies = sparseFeatureSet(&[_]Feature{967 .dependencies = featureSet(&[_]Feature{
969 .sha3,968 .sha3,
970 .sve2,969 .sve2,
971 }),970 }),
...@@ -973,7 +972,7 @@ pub const all_features = blk: {...@@ -973,7 +972,7 @@ pub const all_features = blk: {
973 result[@enumToInt(Feature.sve2_sm4)] = .{972 result[@enumToInt(Feature.sve2_sm4)] = .{
974 .llvm_name = "sve2-sm4",973 .llvm_name = "sve2-sm4",
975 .description = "Enable SM4 SVE2 instructions",974 .description = "Enable SM4 SVE2 instructions",
976 .dependencies = sparseFeatureSet(&[_]Feature{975 .dependencies = featureSet(&[_]Feature{
977 .sm4,976 .sm4,
978 .sve2,977 .sve2,
979 }),978 }),
...@@ -981,7 +980,7 @@ pub const all_features = blk: {...@@ -981,7 +980,7 @@ pub const all_features = blk: {
981 result[@enumToInt(Feature.thunderx)] = .{980 result[@enumToInt(Feature.thunderx)] = .{
982 .llvm_name = "thunderx",981 .llvm_name = "thunderx",
983 .description = "Cavium ThunderX processors",982 .description = "Cavium ThunderX processors",
984 .dependencies = sparseFeatureSet(&[_]Feature{983 .dependencies = featureSet(&[_]Feature{
985 .crc,984 .crc,
986 .crypto,985 .crypto,
987 .fp_armv8,986 .fp_armv8,
...@@ -994,7 +993,7 @@ pub const all_features = blk: {...@@ -994,7 +993,7 @@ pub const all_features = blk: {
994 result[@enumToInt(Feature.thunderx2t99)] = .{993 result[@enumToInt(Feature.thunderx2t99)] = .{
995 .llvm_name = "thunderx2t99",994 .llvm_name = "thunderx2t99",
996 .description = "Cavium ThunderX2 processors",995 .description = "Cavium ThunderX2 processors",
997 .dependencies = sparseFeatureSet(&[_]Feature{996 .dependencies = featureSet(&[_]Feature{
998 .aggressive_fma,997 .aggressive_fma,
999 .arith_bcc_fusion,998 .arith_bcc_fusion,
1000 .crc,999 .crc,
...@@ -1010,7 +1009,7 @@ pub const all_features = blk: {...@@ -1010,7 +1009,7 @@ pub const all_features = blk: {
1010 result[@enumToInt(Feature.thunderxt81)] = .{1009 result[@enumToInt(Feature.thunderxt81)] = .{
1011 .llvm_name = "thunderxt81",1010 .llvm_name = "thunderxt81",
1012 .description = "Cavium ThunderX processors",1011 .description = "Cavium ThunderX processors",
1013 .dependencies = sparseFeatureSet(&[_]Feature{1012 .dependencies = featureSet(&[_]Feature{
1014 .crc,1013 .crc,
1015 .crypto,1014 .crypto,
1016 .fp_armv8,1015 .fp_armv8,
...@@ -1023,7 +1022,7 @@ pub const all_features = blk: {...@@ -1023,7 +1022,7 @@ pub const all_features = blk: {
1023 result[@enumToInt(Feature.thunderxt83)] = .{1022 result[@enumToInt(Feature.thunderxt83)] = .{
1024 .llvm_name = "thunderxt83",1023 .llvm_name = "thunderxt83",
1025 .description = "Cavium ThunderX processors",1024 .description = "Cavium ThunderX processors",
1026 .dependencies = sparseFeatureSet(&[_]Feature{1025 .dependencies = featureSet(&[_]Feature{
1027 .crc,1026 .crc,
1028 .crypto,1027 .crypto,
1029 .fp_armv8,1028 .fp_armv8,
...@@ -1036,7 +1035,7 @@ pub const all_features = blk: {...@@ -1036,7 +1035,7 @@ pub const all_features = blk: {
1036 result[@enumToInt(Feature.thunderxt88)] = .{1035 result[@enumToInt(Feature.thunderxt88)] = .{
1037 .llvm_name = "thunderxt88",1036 .llvm_name = "thunderxt88",
1038 .description = "Cavium ThunderX processors",1037 .description = "Cavium ThunderX processors",
1039 .dependencies = sparseFeatureSet(&[_]Feature{1038 .dependencies = featureSet(&[_]Feature{
1040 .crc,1039 .crc,
1041 .crypto,1040 .crypto,
1042 .fp_armv8,1041 .fp_armv8,
...@@ -1049,32 +1048,32 @@ pub const all_features = blk: {...@@ -1049,32 +1048,32 @@ pub const all_features = blk: {
1049 result[@enumToInt(Feature.tlb_rmi)] = .{1048 result[@enumToInt(Feature.tlb_rmi)] = .{
1050 .llvm_name = "tlb-rmi",1049 .llvm_name = "tlb-rmi",
1051 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",1050 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1052 .dependencies = sparseFeatureSet(&[_]Feature{}),1051 .dependencies = featureSet(&[_]Feature{}),
1053 };1052 };
1054 result[@enumToInt(Feature.tpidr_el1)] = .{1053 result[@enumToInt(Feature.tpidr_el1)] = .{
1055 .llvm_name = "tpidr-el1",1054 .llvm_name = "tpidr-el1",
1056 .description = "Permit use of TPIDR_EL1 for the TLS base",1055 .description = "Permit use of TPIDR_EL1 for the TLS base",
1057 .dependencies = sparseFeatureSet(&[_]Feature{}),1056 .dependencies = featureSet(&[_]Feature{}),
1058 };1057 };
1059 result[@enumToInt(Feature.tpidr_el2)] = .{1058 result[@enumToInt(Feature.tpidr_el2)] = .{
1060 .llvm_name = "tpidr-el2",1059 .llvm_name = "tpidr-el2",
1061 .description = "Permit use of TPIDR_EL2 for the TLS base",1060 .description = "Permit use of TPIDR_EL2 for the TLS base",
1062 .dependencies = sparseFeatureSet(&[_]Feature{}),1061 .dependencies = featureSet(&[_]Feature{}),
1063 };1062 };
1064 result[@enumToInt(Feature.tpidr_el3)] = .{1063 result[@enumToInt(Feature.tpidr_el3)] = .{
1065 .llvm_name = "tpidr-el3",1064 .llvm_name = "tpidr-el3",
1066 .description = "Permit use of TPIDR_EL3 for the TLS base",1065 .description = "Permit use of TPIDR_EL3 for the TLS base",
1067 .dependencies = sparseFeatureSet(&[_]Feature{}),1066 .dependencies = featureSet(&[_]Feature{}),
1068 };1067 };
1069 result[@enumToInt(Feature.tracev8_4)] = .{1068 result[@enumToInt(Feature.tracev8_4)] = .{
1070 .llvm_name = "tracev8.4",1069 .llvm_name = "tracev8.4",
1071 .description = "Enable v8.4-A Trace extension",1070 .description = "Enable v8.4-A Trace extension",
1072 .dependencies = sparseFeatureSet(&[_]Feature{}),1071 .dependencies = featureSet(&[_]Feature{}),
1073 };1072 };
1074 result[@enumToInt(Feature.tsv110)] = .{1073 result[@enumToInt(Feature.tsv110)] = .{
1075 .llvm_name = "tsv110",1074 .llvm_name = "tsv110",
1076 .description = "HiSilicon TS-V110 processors",1075 .description = "HiSilicon TS-V110 processors",
1077 .dependencies = sparseFeatureSet(&[_]Feature{1076 .dependencies = featureSet(&[_]Feature{
1078 .crypto,1077 .crypto,
1079 .custom_cheap_as_move,1078 .custom_cheap_as_move,
1080 .dotprod,1079 .dotprod,
...@@ -1092,27 +1091,27 @@ pub const all_features = blk: {...@@ -1092,27 +1091,27 @@ pub const all_features = blk: {
1092 result[@enumToInt(Feature.uaops)] = .{1091 result[@enumToInt(Feature.uaops)] = .{
1093 .llvm_name = "uaops",1092 .llvm_name = "uaops",
1094 .description = "Enable v8.2 UAO PState",1093 .description = "Enable v8.2 UAO PState",
1095 .dependencies = sparseFeatureSet(&[_]Feature{}),1094 .dependencies = featureSet(&[_]Feature{}),
1096 };1095 };
1097 result[@enumToInt(Feature.use_aa)] = .{1096 result[@enumToInt(Feature.use_aa)] = .{
1098 .llvm_name = "use-aa",1097 .llvm_name = "use-aa",
1099 .description = "Use alias analysis during codegen",1098 .description = "Use alias analysis during codegen",
1100 .dependencies = sparseFeatureSet(&[_]Feature{}),1099 .dependencies = featureSet(&[_]Feature{}),
1101 };1100 };
1102 result[@enumToInt(Feature.use_postra_scheduler)] = .{1101 result[@enumToInt(Feature.use_postra_scheduler)] = .{
1103 .llvm_name = "use-postra-scheduler",1102 .llvm_name = "use-postra-scheduler",
1104 .description = "Schedule again after register allocation",1103 .description = "Schedule again after register allocation",
1105 .dependencies = sparseFeatureSet(&[_]Feature{}),1104 .dependencies = featureSet(&[_]Feature{}),
1106 };1105 };
1107 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{1106 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{
1108 .llvm_name = "use-reciprocal-square-root",1107 .llvm_name = "use-reciprocal-square-root",
1109 .description = "Use the reciprocal square root approximation",1108 .description = "Use the reciprocal square root approximation",
1110 .dependencies = sparseFeatureSet(&[_]Feature{}),1109 .dependencies = featureSet(&[_]Feature{}),
1111 };1110 };
1112 result[@enumToInt(Feature.v8_1a)] = .{1111 result[@enumToInt(Feature.v8_1a)] = .{
1113 .llvm_name = "v8.1a",1112 .llvm_name = "v8.1a",
1114 .description = "Support ARM v8.1a instructions",1113 .description = "Support ARM v8.1a instructions",
1115 .dependencies = sparseFeatureSet(&[_]Feature{1114 .dependencies = featureSet(&[_]Feature{
1116 .crc,1115 .crc,
1117 .lor,1116 .lor,
1118 .lse,1117 .lse,
...@@ -1124,7 +1123,7 @@ pub const all_features = blk: {...@@ -1124,7 +1123,7 @@ pub const all_features = blk: {
1124 result[@enumToInt(Feature.v8_2a)] = .{1123 result[@enumToInt(Feature.v8_2a)] = .{
1125 .llvm_name = "v8.2a",1124 .llvm_name = "v8.2a",
1126 .description = "Support ARM v8.2a instructions",1125 .description = "Support ARM v8.2a instructions",
1127 .dependencies = sparseFeatureSet(&[_]Feature{1126 .dependencies = featureSet(&[_]Feature{
1128 .ccpp,1127 .ccpp,
1129 .pan_rwv,1128 .pan_rwv,
1130 .ras,1129 .ras,
...@@ -1135,7 +1134,7 @@ pub const all_features = blk: {...@@ -1135,7 +1134,7 @@ pub const all_features = blk: {
1135 result[@enumToInt(Feature.v8_3a)] = .{1134 result[@enumToInt(Feature.v8_3a)] = .{
1136 .llvm_name = "v8.3a",1135 .llvm_name = "v8.3a",
1137 .description = "Support ARM v8.3a instructions",1136 .description = "Support ARM v8.3a instructions",
1138 .dependencies = sparseFeatureSet(&[_]Feature{1137 .dependencies = featureSet(&[_]Feature{
1139 .ccidx,1138 .ccidx,
1140 .complxnum,1139 .complxnum,
1141 .jsconv,1140 .jsconv,
...@@ -1147,7 +1146,7 @@ pub const all_features = blk: {...@@ -1147,7 +1146,7 @@ pub const all_features = blk: {
1147 result[@enumToInt(Feature.v8_4a)] = .{1146 result[@enumToInt(Feature.v8_4a)] = .{
1148 .llvm_name = "v8.4a",1147 .llvm_name = "v8.4a",
1149 .description = "Support ARM v8.4a instructions",1148 .description = "Support ARM v8.4a instructions",
1150 .dependencies = sparseFeatureSet(&[_]Feature{1149 .dependencies = featureSet(&[_]Feature{
1151 .am,1150 .am,
1152 .dit,1151 .dit,
1153 .dotprod,1152 .dotprod,
...@@ -1165,7 +1164,7 @@ pub const all_features = blk: {...@@ -1165,7 +1164,7 @@ pub const all_features = blk: {
1165 result[@enumToInt(Feature.v8_5a)] = .{1164 result[@enumToInt(Feature.v8_5a)] = .{
1166 .llvm_name = "v8.5a",1165 .llvm_name = "v8.5a",
1167 .description = "Support ARM v8.5a instructions",1166 .description = "Support ARM v8.5a instructions",
1168 .dependencies = sparseFeatureSet(&[_]Feature{1167 .dependencies = featureSet(&[_]Feature{
1169 .altnzcv,1168 .altnzcv,
1170 .bti,1169 .bti,
1171 .ccdp,1170 .ccdp,
...@@ -1180,17 +1179,17 @@ pub const all_features = blk: {...@@ -1180,17 +1179,17 @@ pub const all_features = blk: {
1180 result[@enumToInt(Feature.vh)] = .{1179 result[@enumToInt(Feature.vh)] = .{
1181 .llvm_name = "vh",1180 .llvm_name = "vh",
1182 .description = "Enables ARM v8.1 Virtual Host extension",1181 .description = "Enables ARM v8.1 Virtual Host extension",
1183 .dependencies = sparseFeatureSet(&[_]Feature{}),1182 .dependencies = featureSet(&[_]Feature{}),
1184 };1183 };
1185 result[@enumToInt(Feature.zcm)] = .{1184 result[@enumToInt(Feature.zcm)] = .{
1186 .llvm_name = "zcm",1185 .llvm_name = "zcm",
1187 .description = "Has zero-cycle register moves",1186 .description = "Has zero-cycle register moves",
1188 .dependencies = sparseFeatureSet(&[_]Feature{}),1187 .dependencies = featureSet(&[_]Feature{}),
1189 };1188 };
1190 result[@enumToInt(Feature.zcz)] = .{1189 result[@enumToInt(Feature.zcz)] = .{
1191 .llvm_name = "zcz",1190 .llvm_name = "zcz",
1192 .description = "Has zero-cycle zeroing instructions",1191 .description = "Has zero-cycle zeroing instructions",
1193 .dependencies = sparseFeatureSet(&[_]Feature{1192 .dependencies = featureSet(&[_]Feature{
1194 .zcz_fp,1193 .zcz_fp,
1195 .zcz_gp,1194 .zcz_gp,
1196 }),1195 }),
...@@ -1198,23 +1197,22 @@ pub const all_features = blk: {...@@ -1198,23 +1197,22 @@ pub const all_features = blk: {
1198 result[@enumToInt(Feature.zcz_fp)] = .{1197 result[@enumToInt(Feature.zcz_fp)] = .{
1199 .llvm_name = "zcz-fp",1198 .llvm_name = "zcz-fp",
1200 .description = "Has zero-cycle zeroing instructions for FP registers",1199 .description = "Has zero-cycle zeroing instructions for FP registers",
1201 .dependencies = sparseFeatureSet(&[_]Feature{}),1200 .dependencies = featureSet(&[_]Feature{}),
1202 };1201 };
1203 result[@enumToInt(Feature.zcz_fp_workaround)] = .{1202 result[@enumToInt(Feature.zcz_fp_workaround)] = .{
1204 .llvm_name = "zcz-fp-workaround",1203 .llvm_name = "zcz-fp-workaround",
1205 .description = "The zero-cycle floating-point zeroing instruction has a bug",1204 .description = "The zero-cycle floating-point zeroing instruction has a bug",
1206 .dependencies = sparseFeatureSet(&[_]Feature{}),1205 .dependencies = featureSet(&[_]Feature{}),
1207 };1206 };
1208 result[@enumToInt(Feature.zcz_gp)] = .{1207 result[@enumToInt(Feature.zcz_gp)] = .{
1209 .llvm_name = "zcz-gp",1208 .llvm_name = "zcz-gp",
1210 .description = "Has zero-cycle zeroing instructions for generic registers",1209 .description = "Has zero-cycle zeroing instructions for generic registers",
1211 .dependencies = sparseFeatureSet(&[_]Feature{}),1210 .dependencies = featureSet(&[_]Feature{}),
1212 };1211 };
1213 const ti = @typeInfo(Feature);1212 const ti = @typeInfo(Feature);
1214 for (result) |*elem, i| {1213 for (result) |*elem, i| {
1215 elem.index = i;1214 elem.index = i;
1216 elem.name = ti.Enum.fields[i].name;1215 elem.name = ti.Enum.fields[i].name;
1217 elem.dependencies.initAsDependencies(i, &result);
1218 }1216 }
1219 break :blk result;1217 break :blk result;
1220};1218};
...@@ -1223,126 +1221,126 @@ pub const cpu = struct {...@@ -1223,126 +1221,126 @@ pub const cpu = struct {
1223 pub const apple_latest = Cpu{1221 pub const apple_latest = Cpu{
1224 .name = "apple_latest",1222 .name = "apple_latest",
1225 .llvm_name = "apple-latest",1223 .llvm_name = "apple-latest",
1226 .features = featureSet(&all_features, &[_]Feature{1224 .features = featureSet(&[_]Feature{
1227 .cyclone,1225 .cyclone,
1228 }),1226 }),
1229 };1227 };
1230 pub const cortex_a35 = Cpu{1228 pub const cortex_a35 = Cpu{
1231 .name = "cortex_a35",1229 .name = "cortex_a35",
1232 .llvm_name = "cortex-a35",1230 .llvm_name = "cortex-a35",
1233 .features = featureSet(&all_features, &[_]Feature{1231 .features = featureSet(&[_]Feature{
1234 .a35,1232 .a35,
1235 }),1233 }),
1236 };1234 };
1237 pub const cortex_a53 = Cpu{1235 pub const cortex_a53 = Cpu{
1238 .name = "cortex_a53",1236 .name = "cortex_a53",
1239 .llvm_name = "cortex-a53",1237 .llvm_name = "cortex-a53",
1240 .features = featureSet(&all_features, &[_]Feature{1238 .features = featureSet(&[_]Feature{
1241 .a53,1239 .a53,
1242 }),1240 }),
1243 };1241 };
1244 pub const cortex_a55 = Cpu{1242 pub const cortex_a55 = Cpu{
1245 .name = "cortex_a55",1243 .name = "cortex_a55",
1246 .llvm_name = "cortex-a55",1244 .llvm_name = "cortex-a55",
1247 .features = featureSet(&all_features, &[_]Feature{1245 .features = featureSet(&[_]Feature{
1248 .a55,1246 .a55,
1249 }),1247 }),
1250 };1248 };
1251 pub const cortex_a57 = Cpu{1249 pub const cortex_a57 = Cpu{
1252 .name = "cortex_a57",1250 .name = "cortex_a57",
1253 .llvm_name = "cortex-a57",1251 .llvm_name = "cortex-a57",
1254 .features = featureSet(&all_features, &[_]Feature{1252 .features = featureSet(&[_]Feature{
1255 .a57,1253 .a57,
1256 }),1254 }),
1257 };1255 };
1258 pub const cortex_a72 = Cpu{1256 pub const cortex_a72 = Cpu{
1259 .name = "cortex_a72",1257 .name = "cortex_a72",
1260 .llvm_name = "cortex-a72",1258 .llvm_name = "cortex-a72",
1261 .features = featureSet(&all_features, &[_]Feature{1259 .features = featureSet(&[_]Feature{
1262 .a72,1260 .a72,
1263 }),1261 }),
1264 };1262 };
1265 pub const cortex_a73 = Cpu{1263 pub const cortex_a73 = Cpu{
1266 .name = "cortex_a73",1264 .name = "cortex_a73",
1267 .llvm_name = "cortex-a73",1265 .llvm_name = "cortex-a73",
1268 .features = featureSet(&all_features, &[_]Feature{1266 .features = featureSet(&[_]Feature{
1269 .a73,1267 .a73,
1270 }),1268 }),
1271 };1269 };
1272 pub const cortex_a75 = Cpu{1270 pub const cortex_a75 = Cpu{
1273 .name = "cortex_a75",1271 .name = "cortex_a75",
1274 .llvm_name = "cortex-a75",1272 .llvm_name = "cortex-a75",
1275 .features = featureSet(&all_features, &[_]Feature{1273 .features = featureSet(&[_]Feature{
1276 .a75,1274 .a75,
1277 }),1275 }),
1278 };1276 };
1279 pub const cortex_a76 = Cpu{1277 pub const cortex_a76 = Cpu{
1280 .name = "cortex_a76",1278 .name = "cortex_a76",
1281 .llvm_name = "cortex-a76",1279 .llvm_name = "cortex-a76",
1282 .features = featureSet(&all_features, &[_]Feature{1280 .features = featureSet(&[_]Feature{
1283 .a76,1281 .a76,
1284 }),1282 }),
1285 };1283 };
1286 pub const cortex_a76ae = Cpu{1284 pub const cortex_a76ae = Cpu{
1287 .name = "cortex_a76ae",1285 .name = "cortex_a76ae",
1288 .llvm_name = "cortex-a76ae",1286 .llvm_name = "cortex-a76ae",
1289 .features = featureSet(&all_features, &[_]Feature{1287 .features = featureSet(&[_]Feature{
1290 .a76,1288 .a76,
1291 }),1289 }),
1292 };1290 };
1293 pub const cyclone = Cpu{1291 pub const cyclone = Cpu{
1294 .name = "cyclone",1292 .name = "cyclone",
1295 .llvm_name = "cyclone",1293 .llvm_name = "cyclone",
1296 .features = featureSet(&all_features, &[_]Feature{1294 .features = featureSet(&[_]Feature{
1297 .cyclone,1295 .cyclone,
1298 }),1296 }),
1299 };1297 };
1300 pub const exynos_m1 = Cpu{1298 pub const exynos_m1 = Cpu{
1301 .name = "exynos_m1",1299 .name = "exynos_m1",
1302 .llvm_name = "exynos-m1",1300 .llvm_name = "exynos-m1",
1303 .features = featureSet(&all_features, &[_]Feature{1301 .features = featureSet(&[_]Feature{
1304 .exynosm1,1302 .exynosm1,
1305 }),1303 }),
1306 };1304 };
1307 pub const exynos_m2 = Cpu{1305 pub const exynos_m2 = Cpu{
1308 .name = "exynos_m2",1306 .name = "exynos_m2",
1309 .llvm_name = "exynos-m2",1307 .llvm_name = "exynos-m2",
1310 .features = featureSet(&all_features, &[_]Feature{1308 .features = featureSet(&[_]Feature{
1311 .exynosm2,1309 .exynosm2,
1312 }),1310 }),
1313 };1311 };
1314 pub const exynos_m3 = Cpu{1312 pub const exynos_m3 = Cpu{
1315 .name = "exynos_m3",1313 .name = "exynos_m3",
1316 .llvm_name = "exynos-m3",1314 .llvm_name = "exynos-m3",
1317 .features = featureSet(&all_features, &[_]Feature{1315 .features = featureSet(&[_]Feature{
1318 .exynosm3,1316 .exynosm3,
1319 }),1317 }),
1320 };1318 };
1321 pub const exynos_m4 = Cpu{1319 pub const exynos_m4 = Cpu{
1322 .name = "exynos_m4",1320 .name = "exynos_m4",
1323 .llvm_name = "exynos-m4",1321 .llvm_name = "exynos-m4",
1324 .features = featureSet(&all_features, &[_]Feature{1322 .features = featureSet(&[_]Feature{
1325 .exynosm4,1323 .exynosm4,
1326 }),1324 }),
1327 };1325 };
1328 pub const exynos_m5 = Cpu{1326 pub const exynos_m5 = Cpu{
1329 .name = "exynos_m5",1327 .name = "exynos_m5",
1330 .llvm_name = "exynos-m5",1328 .llvm_name = "exynos-m5",
1331 .features = featureSet(&all_features, &[_]Feature{1329 .features = featureSet(&[_]Feature{
1332 .exynosm4,1330 .exynosm4,
1333 }),1331 }),
1334 };1332 };
1335 pub const falkor = Cpu{1333 pub const falkor = Cpu{
1336 .name = "falkor",1334 .name = "falkor",
1337 .llvm_name = "falkor",1335 .llvm_name = "falkor",
1338 .features = featureSet(&all_features, &[_]Feature{1336 .features = featureSet(&[_]Feature{
1339 .falkor,1337 .falkor,
1340 }),1338 }),
1341 };1339 };
1342 pub const generic = Cpu{1340 pub const generic = Cpu{
1343 .name = "generic",1341 .name = "generic",
1344 .llvm_name = "generic",1342 .llvm_name = "generic",
1345 .features = featureSet(&all_features, &[_]Feature{1343 .features = featureSet(&[_]Feature{
1346 .fp_armv8,1344 .fp_armv8,
1347 .fuse_aes,1345 .fuse_aes,
1348 .neon,1346 .neon,
...@@ -1353,56 +1351,56 @@ pub const cpu = struct {...@@ -1353,56 +1351,56 @@ pub const cpu = struct {
1353 pub const kryo = Cpu{1351 pub const kryo = Cpu{
1354 .name = "kryo",1352 .name = "kryo",
1355 .llvm_name = "kryo",1353 .llvm_name = "kryo",
1356 .features = featureSet(&all_features, &[_]Feature{1354 .features = featureSet(&[_]Feature{
1357 .kryo,1355 .kryo,
1358 }),1356 }),
1359 };1357 };
1360 pub const saphira = Cpu{1358 pub const saphira = Cpu{
1361 .name = "saphira",1359 .name = "saphira",
1362 .llvm_name = "saphira",1360 .llvm_name = "saphira",
1363 .features = featureSet(&all_features, &[_]Feature{1361 .features = featureSet(&[_]Feature{
1364 .saphira,1362 .saphira,
1365 }),1363 }),
1366 };1364 };
1367 pub const thunderx = Cpu{1365 pub const thunderx = Cpu{
1368 .name = "thunderx",1366 .name = "thunderx",
1369 .llvm_name = "thunderx",1367 .llvm_name = "thunderx",
1370 .features = featureSet(&all_features, &[_]Feature{1368 .features = featureSet(&[_]Feature{
1371 .thunderx,1369 .thunderx,
1372 }),1370 }),
1373 };1371 };
1374 pub const thunderx2t99 = Cpu{1372 pub const thunderx2t99 = Cpu{
1375 .name = "thunderx2t99",1373 .name = "thunderx2t99",
1376 .llvm_name = "thunderx2t99",1374 .llvm_name = "thunderx2t99",
1377 .features = featureSet(&all_features, &[_]Feature{1375 .features = featureSet(&[_]Feature{
1378 .thunderx2t99,1376 .thunderx2t99,
1379 }),1377 }),
1380 };1378 };
1381 pub const thunderxt81 = Cpu{1379 pub const thunderxt81 = Cpu{
1382 .name = "thunderxt81",1380 .name = "thunderxt81",
1383 .llvm_name = "thunderxt81",1381 .llvm_name = "thunderxt81",
1384 .features = featureSet(&all_features, &[_]Feature{1382 .features = featureSet(&[_]Feature{
1385 .thunderxt81,1383 .thunderxt81,
1386 }),1384 }),
1387 };1385 };
1388 pub const thunderxt83 = Cpu{1386 pub const thunderxt83 = Cpu{
1389 .name = "thunderxt83",1387 .name = "thunderxt83",
1390 .llvm_name = "thunderxt83",1388 .llvm_name = "thunderxt83",
1391 .features = featureSet(&all_features, &[_]Feature{1389 .features = featureSet(&[_]Feature{
1392 .thunderxt83,1390 .thunderxt83,
1393 }),1391 }),
1394 };1392 };
1395 pub const thunderxt88 = Cpu{1393 pub const thunderxt88 = Cpu{
1396 .name = "thunderxt88",1394 .name = "thunderxt88",
1397 .llvm_name = "thunderxt88",1395 .llvm_name = "thunderxt88",
1398 .features = featureSet(&all_features, &[_]Feature{1396 .features = featureSet(&[_]Feature{
1399 .thunderxt88,1397 .thunderxt88,
1400 }),1398 }),
1401 };1399 };
1402 pub const tsv110 = Cpu{1400 pub const tsv110 = Cpu{
1403 .name = "tsv110",1401 .name = "tsv110",
1404 .llvm_name = "tsv110",1402 .llvm_name = "tsv110",
1405 .features = featureSet(&all_features, &[_]Feature{1403 .features = featureSet(&[_]Feature{
1406 .tsv110,1404 .tsv110,
1407 }),1405 }),
1408 };1406 };
lib/std/target/amdgpu.zig+146-148
...@@ -114,186 +114,185 @@ pub const Feature = enum {...@@ -114,186 +114,185 @@ pub const Feature = enum {
114pub usingnamespace Cpu.Feature.feature_set_fns(Feature);114pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
115115
116pub const all_features = blk: {116pub const all_features = blk: {
117 @setEvalBranchQuota(10000);
118 const len = @typeInfo(Feature).Enum.fields.len;117 const len = @typeInfo(Feature).Enum.fields.len;
119 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);118 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
120 var result: [len]Cpu.Feature = undefined;119 var result: [len]Cpu.Feature = undefined;
121 result[@enumToInt(Feature.@"16_bit_insts")] = .{120 result[@enumToInt(Feature.@"16_bit_insts")] = .{
122 .llvm_name = "16-bit-insts",121 .llvm_name = "16-bit-insts",
123 .description = "Has i16/f16 instructions",122 .description = "Has i16/f16 instructions",
124 .dependencies = sparseFeatureSet(&[_]Feature{}),123 .dependencies = featureSet(&[_]Feature{}),
125 };124 };
126 result[@enumToInt(Feature.DumpCode)] = .{125 result[@enumToInt(Feature.DumpCode)] = .{
127 .llvm_name = "DumpCode",126 .llvm_name = "DumpCode",
128 .description = "Dump MachineInstrs in the CodeEmitter",127 .description = "Dump MachineInstrs in the CodeEmitter",
129 .dependencies = sparseFeatureSet(&[_]Feature{}),128 .dependencies = featureSet(&[_]Feature{}),
130 };129 };
131 result[@enumToInt(Feature.add_no_carry_insts)] = .{130 result[@enumToInt(Feature.add_no_carry_insts)] = .{
132 .llvm_name = "add-no-carry-insts",131 .llvm_name = "add-no-carry-insts",
133 .description = "Have VALU add/sub instructions without carry out",132 .description = "Have VALU add/sub instructions without carry out",
134 .dependencies = sparseFeatureSet(&[_]Feature{}),133 .dependencies = featureSet(&[_]Feature{}),
135 };134 };
136 result[@enumToInt(Feature.aperture_regs)] = .{135 result[@enumToInt(Feature.aperture_regs)] = .{
137 .llvm_name = "aperture-regs",136 .llvm_name = "aperture-regs",
138 .description = "Has Memory Aperture Base and Size Registers",137 .description = "Has Memory Aperture Base and Size Registers",
139 .dependencies = sparseFeatureSet(&[_]Feature{}),138 .dependencies = featureSet(&[_]Feature{}),
140 };139 };
141 result[@enumToInt(Feature.atomic_fadd_insts)] = .{140 result[@enumToInt(Feature.atomic_fadd_insts)] = .{
142 .llvm_name = "atomic-fadd-insts",141 .llvm_name = "atomic-fadd-insts",
143 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",142 .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{}),
145 };144 };
146 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{145 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
147 .llvm_name = "auto-waitcnt-before-barrier",146 .llvm_name = "auto-waitcnt-before-barrier",
148 .description = "Hardware automatically inserts waitcnt before barrier",147 .description = "Hardware automatically inserts waitcnt before barrier",
149 .dependencies = sparseFeatureSet(&[_]Feature{}),148 .dependencies = featureSet(&[_]Feature{}),
150 };149 };
151 result[@enumToInt(Feature.ci_insts)] = .{150 result[@enumToInt(Feature.ci_insts)] = .{
152 .llvm_name = "ci-insts",151 .llvm_name = "ci-insts",
153 .description = "Additional instructions for CI+",152 .description = "Additional instructions for CI+",
154 .dependencies = sparseFeatureSet(&[_]Feature{}),153 .dependencies = featureSet(&[_]Feature{}),
155 };154 };
156 result[@enumToInt(Feature.code_object_v3)] = .{155 result[@enumToInt(Feature.code_object_v3)] = .{
157 .llvm_name = "code-object-v3",156 .llvm_name = "code-object-v3",
158 .description = "Generate code object version 3",157 .description = "Generate code object version 3",
159 .dependencies = sparseFeatureSet(&[_]Feature{}),158 .dependencies = featureSet(&[_]Feature{}),
160 };159 };
161 result[@enumToInt(Feature.cumode)] = .{160 result[@enumToInt(Feature.cumode)] = .{
162 .llvm_name = "cumode",161 .llvm_name = "cumode",
163 .description = "Enable CU wavefront execution mode",162 .description = "Enable CU wavefront execution mode",
164 .dependencies = sparseFeatureSet(&[_]Feature{}),163 .dependencies = featureSet(&[_]Feature{}),
165 };164 };
166 result[@enumToInt(Feature.dl_insts)] = .{165 result[@enumToInt(Feature.dl_insts)] = .{
167 .llvm_name = "dl-insts",166 .llvm_name = "dl-insts",
168 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",167 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
169 .dependencies = sparseFeatureSet(&[_]Feature{}),168 .dependencies = featureSet(&[_]Feature{}),
170 };169 };
171 result[@enumToInt(Feature.dot1_insts)] = .{170 result[@enumToInt(Feature.dot1_insts)] = .{
172 .llvm_name = "dot1-insts",171 .llvm_name = "dot1-insts",
173 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",172 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
174 .dependencies = sparseFeatureSet(&[_]Feature{}),173 .dependencies = featureSet(&[_]Feature{}),
175 };174 };
176 result[@enumToInt(Feature.dot2_insts)] = .{175 result[@enumToInt(Feature.dot2_insts)] = .{
177 .llvm_name = "dot2-insts",176 .llvm_name = "dot2-insts",
178 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",177 .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{}),
180 };179 };
181 result[@enumToInt(Feature.dot3_insts)] = .{180 result[@enumToInt(Feature.dot3_insts)] = .{
182 .llvm_name = "dot3-insts",181 .llvm_name = "dot3-insts",
183 .description = "Has v_dot8c_i32_i4 instruction",182 .description = "Has v_dot8c_i32_i4 instruction",
184 .dependencies = sparseFeatureSet(&[_]Feature{}),183 .dependencies = featureSet(&[_]Feature{}),
185 };184 };
186 result[@enumToInt(Feature.dot4_insts)] = .{185 result[@enumToInt(Feature.dot4_insts)] = .{
187 .llvm_name = "dot4-insts",186 .llvm_name = "dot4-insts",
188 .description = "Has v_dot2c_i32_i16 instruction",187 .description = "Has v_dot2c_i32_i16 instruction",
189 .dependencies = sparseFeatureSet(&[_]Feature{}),188 .dependencies = featureSet(&[_]Feature{}),
190 };189 };
191 result[@enumToInt(Feature.dot5_insts)] = .{190 result[@enumToInt(Feature.dot5_insts)] = .{
192 .llvm_name = "dot5-insts",191 .llvm_name = "dot5-insts",
193 .description = "Has v_dot2c_f32_f16 instruction",192 .description = "Has v_dot2c_f32_f16 instruction",
194 .dependencies = sparseFeatureSet(&[_]Feature{}),193 .dependencies = featureSet(&[_]Feature{}),
195 };194 };
196 result[@enumToInt(Feature.dot6_insts)] = .{195 result[@enumToInt(Feature.dot6_insts)] = .{
197 .llvm_name = "dot6-insts",196 .llvm_name = "dot6-insts",
198 .description = "Has v_dot4c_i32_i8 instruction",197 .description = "Has v_dot4c_i32_i8 instruction",
199 .dependencies = sparseFeatureSet(&[_]Feature{}),198 .dependencies = featureSet(&[_]Feature{}),
200 };199 };
201 result[@enumToInt(Feature.dpp)] = .{200 result[@enumToInt(Feature.dpp)] = .{
202 .llvm_name = "dpp",201 .llvm_name = "dpp",
203 .description = "Support DPP (Data Parallel Primitives) extension",202 .description = "Support DPP (Data Parallel Primitives) extension",
204 .dependencies = sparseFeatureSet(&[_]Feature{}),203 .dependencies = featureSet(&[_]Feature{}),
205 };204 };
206 result[@enumToInt(Feature.dpp8)] = .{205 result[@enumToInt(Feature.dpp8)] = .{
207 .llvm_name = "dpp8",206 .llvm_name = "dpp8",
208 .description = "Support DPP8 (Data Parallel Primitives) extension",207 .description = "Support DPP8 (Data Parallel Primitives) extension",
209 .dependencies = sparseFeatureSet(&[_]Feature{}),208 .dependencies = featureSet(&[_]Feature{}),
210 };209 };
211 result[@enumToInt(Feature.dumpcode)] = .{210 result[@enumToInt(Feature.dumpcode)] = .{
212 .llvm_name = "dumpcode",211 .llvm_name = "dumpcode",
213 .description = "Dump MachineInstrs in the CodeEmitter",212 .description = "Dump MachineInstrs in the CodeEmitter",
214 .dependencies = sparseFeatureSet(&[_]Feature{}),213 .dependencies = featureSet(&[_]Feature{}),
215 };214 };
216 result[@enumToInt(Feature.enable_ds128)] = .{215 result[@enumToInt(Feature.enable_ds128)] = .{
217 .llvm_name = "enable-ds128",216 .llvm_name = "enable-ds128",
218 .description = "Use ds_read|write_b128",217 .description = "Use ds_read|write_b128",
219 .dependencies = sparseFeatureSet(&[_]Feature{}),218 .dependencies = featureSet(&[_]Feature{}),
220 };219 };
221 result[@enumToInt(Feature.enable_prt_strict_null)] = .{220 result[@enumToInt(Feature.enable_prt_strict_null)] = .{
222 .llvm_name = "enable-prt-strict-null",221 .llvm_name = "enable-prt-strict-null",
223 .description = "Enable zeroing of result registers for sparse texture fetches",222 .description = "Enable zeroing of result registers for sparse texture fetches",
224 .dependencies = sparseFeatureSet(&[_]Feature{}),223 .dependencies = featureSet(&[_]Feature{}),
225 };224 };
226 result[@enumToInt(Feature.fast_fmaf)] = .{225 result[@enumToInt(Feature.fast_fmaf)] = .{
227 .llvm_name = "fast-fmaf",226 .llvm_name = "fast-fmaf",
228 .description = "Assuming f32 fma is at least as fast as mul + add",227 .description = "Assuming f32 fma is at least as fast as mul + add",
229 .dependencies = sparseFeatureSet(&[_]Feature{}),228 .dependencies = featureSet(&[_]Feature{}),
230 };229 };
231 result[@enumToInt(Feature.flat_address_space)] = .{230 result[@enumToInt(Feature.flat_address_space)] = .{
232 .llvm_name = "flat-address-space",231 .llvm_name = "flat-address-space",
233 .description = "Support flat address space",232 .description = "Support flat address space",
234 .dependencies = sparseFeatureSet(&[_]Feature{}),233 .dependencies = featureSet(&[_]Feature{}),
235 };234 };
236 result[@enumToInt(Feature.flat_for_global)] = .{235 result[@enumToInt(Feature.flat_for_global)] = .{
237 .llvm_name = "flat-for-global",236 .llvm_name = "flat-for-global",
238 .description = "Force to generate flat instruction for global",237 .description = "Force to generate flat instruction for global",
239 .dependencies = sparseFeatureSet(&[_]Feature{}),238 .dependencies = featureSet(&[_]Feature{}),
240 };239 };
241 result[@enumToInt(Feature.flat_global_insts)] = .{240 result[@enumToInt(Feature.flat_global_insts)] = .{
242 .llvm_name = "flat-global-insts",241 .llvm_name = "flat-global-insts",
243 .description = "Have global_* flat memory instructions",242 .description = "Have global_* flat memory instructions",
244 .dependencies = sparseFeatureSet(&[_]Feature{}),243 .dependencies = featureSet(&[_]Feature{}),
245 };244 };
246 result[@enumToInt(Feature.flat_inst_offsets)] = .{245 result[@enumToInt(Feature.flat_inst_offsets)] = .{
247 .llvm_name = "flat-inst-offsets",246 .llvm_name = "flat-inst-offsets",
248 .description = "Flat instructions have immediate offset addressing mode",247 .description = "Flat instructions have immediate offset addressing mode",
249 .dependencies = sparseFeatureSet(&[_]Feature{}),248 .dependencies = featureSet(&[_]Feature{}),
250 };249 };
251 result[@enumToInt(Feature.flat_scratch_insts)] = .{250 result[@enumToInt(Feature.flat_scratch_insts)] = .{
252 .llvm_name = "flat-scratch-insts",251 .llvm_name = "flat-scratch-insts",
253 .description = "Have scratch_* flat memory instructions",252 .description = "Have scratch_* flat memory instructions",
254 .dependencies = sparseFeatureSet(&[_]Feature{}),253 .dependencies = featureSet(&[_]Feature{}),
255 };254 };
256 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{255 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
257 .llvm_name = "flat-segment-offset-bug",256 .llvm_name = "flat-segment-offset-bug",
258 .description = "GFX10 bug, inst_offset ignored in flat segment",257 .description = "GFX10 bug, inst_offset ignored in flat segment",
259 .dependencies = sparseFeatureSet(&[_]Feature{}),258 .dependencies = featureSet(&[_]Feature{}),
260 };259 };
261 result[@enumToInt(Feature.fma_mix_insts)] = .{260 result[@enumToInt(Feature.fma_mix_insts)] = .{
262 .llvm_name = "fma-mix-insts",261 .llvm_name = "fma-mix-insts",
263 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",262 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
264 .dependencies = sparseFeatureSet(&[_]Feature{}),263 .dependencies = featureSet(&[_]Feature{}),
265 };264 };
266 result[@enumToInt(Feature.fmaf)] = .{265 result[@enumToInt(Feature.fmaf)] = .{
267 .llvm_name = "fmaf",266 .llvm_name = "fmaf",
268 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",267 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
269 .dependencies = sparseFeatureSet(&[_]Feature{}),268 .dependencies = featureSet(&[_]Feature{}),
270 };269 };
271 result[@enumToInt(Feature.fp_exceptions)] = .{270 result[@enumToInt(Feature.fp_exceptions)] = .{
272 .llvm_name = "fp-exceptions",271 .llvm_name = "fp-exceptions",
273 .description = "Enable floating point exceptions",272 .description = "Enable floating point exceptions",
274 .dependencies = sparseFeatureSet(&[_]Feature{}),273 .dependencies = featureSet(&[_]Feature{}),
275 };274 };
276 result[@enumToInt(Feature.fp16_denormals)] = .{275 result[@enumToInt(Feature.fp16_denormals)] = .{
277 .llvm_name = "fp16-denormals",276 .llvm_name = "fp16-denormals",
278 .description = "Enable half precision denormal handling",277 .description = "Enable half precision denormal handling",
279 .dependencies = sparseFeatureSet(&[_]Feature{278 .dependencies = featureSet(&[_]Feature{
280 .fp64_fp16_denormals,279 .fp64_fp16_denormals,
281 }),280 }),
282 };281 };
283 result[@enumToInt(Feature.fp32_denormals)] = .{282 result[@enumToInt(Feature.fp32_denormals)] = .{
284 .llvm_name = "fp32-denormals",283 .llvm_name = "fp32-denormals",
285 .description = "Enable single precision denormal handling",284 .description = "Enable single precision denormal handling",
286 .dependencies = sparseFeatureSet(&[_]Feature{}),285 .dependencies = featureSet(&[_]Feature{}),
287 };286 };
288 result[@enumToInt(Feature.fp64)] = .{287 result[@enumToInt(Feature.fp64)] = .{
289 .llvm_name = "fp64",288 .llvm_name = "fp64",
290 .description = "Enable double precision operations",289 .description = "Enable double precision operations",
291 .dependencies = sparseFeatureSet(&[_]Feature{}),290 .dependencies = featureSet(&[_]Feature{}),
292 };291 };
293 result[@enumToInt(Feature.fp64_denormals)] = .{292 result[@enumToInt(Feature.fp64_denormals)] = .{
294 .llvm_name = "fp64-denormals",293 .llvm_name = "fp64-denormals",
295 .description = "Enable double and half precision denormal handling",294 .description = "Enable double and half precision denormal handling",
296 .dependencies = sparseFeatureSet(&[_]Feature{295 .dependencies = featureSet(&[_]Feature{
297 .fp64,296 .fp64,
298 .fp64_fp16_denormals,297 .fp64_fp16_denormals,
299 }),298 }),
...@@ -301,19 +300,19 @@ pub const all_features = blk: {...@@ -301,19 +300,19 @@ pub const all_features = blk: {
301 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{300 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{
302 .llvm_name = "fp64-fp16-denormals",301 .llvm_name = "fp64-fp16-denormals",
303 .description = "Enable double and half precision denormal handling",302 .description = "Enable double and half precision denormal handling",
304 .dependencies = sparseFeatureSet(&[_]Feature{303 .dependencies = featureSet(&[_]Feature{
305 .fp64,304 .fp64,
306 }),305 }),
307 };306 };
308 result[@enumToInt(Feature.gcn3_encoding)] = .{307 result[@enumToInt(Feature.gcn3_encoding)] = .{
309 .llvm_name = "gcn3-encoding",308 .llvm_name = "gcn3-encoding",
310 .description = "Encoding format for VI",309 .description = "Encoding format for VI",
311 .dependencies = sparseFeatureSet(&[_]Feature{}),310 .dependencies = featureSet(&[_]Feature{}),
312 };311 };
313 result[@enumToInt(Feature.gfx10)] = .{312 result[@enumToInt(Feature.gfx10)] = .{
314 .llvm_name = "gfx10",313 .llvm_name = "gfx10",
315 .description = "GFX10 GPU generation",314 .description = "GFX10 GPU generation",
316 .dependencies = sparseFeatureSet(&[_]Feature{315 .dependencies = featureSet(&[_]Feature{
317 .@"16_bit_insts",316 .@"16_bit_insts",
318 .add_no_carry_insts,317 .add_no_carry_insts,
319 .aperture_regs,318 .aperture_regs,
...@@ -353,22 +352,22 @@ pub const all_features = blk: {...@@ -353,22 +352,22 @@ pub const all_features = blk: {
353 result[@enumToInt(Feature.gfx10_insts)] = .{352 result[@enumToInt(Feature.gfx10_insts)] = .{
354 .llvm_name = "gfx10-insts",353 .llvm_name = "gfx10-insts",
355 .description = "Additional instructions for GFX10+",354 .description = "Additional instructions for GFX10+",
356 .dependencies = sparseFeatureSet(&[_]Feature{}),355 .dependencies = featureSet(&[_]Feature{}),
357 };356 };
358 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{357 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
359 .llvm_name = "gfx7-gfx8-gfx9-insts",358 .llvm_name = "gfx7-gfx8-gfx9-insts",
360 .description = "Instructions shared in GFX7, GFX8, GFX9",359 .description = "Instructions shared in GFX7, GFX8, GFX9",
361 .dependencies = sparseFeatureSet(&[_]Feature{}),360 .dependencies = featureSet(&[_]Feature{}),
362 };361 };
363 result[@enumToInt(Feature.gfx8_insts)] = .{362 result[@enumToInt(Feature.gfx8_insts)] = .{
364 .llvm_name = "gfx8-insts",363 .llvm_name = "gfx8-insts",
365 .description = "Additional instructions for GFX8+",364 .description = "Additional instructions for GFX8+",
366 .dependencies = sparseFeatureSet(&[_]Feature{}),365 .dependencies = featureSet(&[_]Feature{}),
367 };366 };
368 result[@enumToInt(Feature.gfx9)] = .{367 result[@enumToInt(Feature.gfx9)] = .{
369 .llvm_name = "gfx9",368 .llvm_name = "gfx9",
370 .description = "GFX9 GPU generation",369 .description = "GFX9 GPU generation",
371 .dependencies = sparseFeatureSet(&[_]Feature{370 .dependencies = featureSet(&[_]Feature{
372 .@"16_bit_insts",371 .@"16_bit_insts",
373 .add_no_carry_insts,372 .add_no_carry_insts,
374 .aperture_regs,373 .aperture_regs,
...@@ -404,212 +403,212 @@ pub const all_features = blk: {...@@ -404,212 +403,212 @@ pub const all_features = blk: {
404 result[@enumToInt(Feature.gfx9_insts)] = .{403 result[@enumToInt(Feature.gfx9_insts)] = .{
405 .llvm_name = "gfx9-insts",404 .llvm_name = "gfx9-insts",
406 .description = "Additional instructions for GFX9+",405 .description = "Additional instructions for GFX9+",
407 .dependencies = sparseFeatureSet(&[_]Feature{}),406 .dependencies = featureSet(&[_]Feature{}),
408 };407 };
409 result[@enumToInt(Feature.half_rate_64_ops)] = .{408 result[@enumToInt(Feature.half_rate_64_ops)] = .{
410 .llvm_name = "half-rate-64-ops",409 .llvm_name = "half-rate-64-ops",
411 .description = "Most fp64 instructions are half rate instead of quarter",410 .description = "Most fp64 instructions are half rate instead of quarter",
412 .dependencies = sparseFeatureSet(&[_]Feature{}),411 .dependencies = featureSet(&[_]Feature{}),
413 };412 };
414 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{413 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{
415 .llvm_name = "inst-fwd-prefetch-bug",414 .llvm_name = "inst-fwd-prefetch-bug",
416 .description = "S_INST_PREFETCH instruction causes shader to hang",415 .description = "S_INST_PREFETCH instruction causes shader to hang",
417 .dependencies = sparseFeatureSet(&[_]Feature{}),416 .dependencies = featureSet(&[_]Feature{}),
418 };417 };
419 result[@enumToInt(Feature.int_clamp_insts)] = .{418 result[@enumToInt(Feature.int_clamp_insts)] = .{
420 .llvm_name = "int-clamp-insts",419 .llvm_name = "int-clamp-insts",
421 .description = "Support clamp for integer destination",420 .description = "Support clamp for integer destination",
422 .dependencies = sparseFeatureSet(&[_]Feature{}),421 .dependencies = featureSet(&[_]Feature{}),
423 };422 };
424 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{423 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{
425 .llvm_name = "inv-2pi-inline-imm",424 .llvm_name = "inv-2pi-inline-imm",
426 .description = "Has 1 / (2 * pi) as inline immediate",425 .description = "Has 1 / (2 * pi) as inline immediate",
427 .dependencies = sparseFeatureSet(&[_]Feature{}),426 .dependencies = featureSet(&[_]Feature{}),
428 };427 };
429 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{428 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{
430 .llvm_name = "lds-branch-vmem-war-hazard",429 .llvm_name = "lds-branch-vmem-war-hazard",
431 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",430 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
432 .dependencies = sparseFeatureSet(&[_]Feature{}),431 .dependencies = featureSet(&[_]Feature{}),
433 };432 };
434 result[@enumToInt(Feature.lds_misaligned_bug)] = .{433 result[@enumToInt(Feature.lds_misaligned_bug)] = .{
435 .llvm_name = "lds-misaligned-bug",434 .llvm_name = "lds-misaligned-bug",
436 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",435 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
437 .dependencies = sparseFeatureSet(&[_]Feature{}),436 .dependencies = featureSet(&[_]Feature{}),
438 };437 };
439 result[@enumToInt(Feature.ldsbankcount16)] = .{438 result[@enumToInt(Feature.ldsbankcount16)] = .{
440 .llvm_name = "ldsbankcount16",439 .llvm_name = "ldsbankcount16",
441 .description = "The number of LDS banks per compute unit.",440 .description = "The number of LDS banks per compute unit.",
442 .dependencies = sparseFeatureSet(&[_]Feature{}),441 .dependencies = featureSet(&[_]Feature{}),
443 };442 };
444 result[@enumToInt(Feature.ldsbankcount32)] = .{443 result[@enumToInt(Feature.ldsbankcount32)] = .{
445 .llvm_name = "ldsbankcount32",444 .llvm_name = "ldsbankcount32",
446 .description = "The number of LDS banks per compute unit.",445 .description = "The number of LDS banks per compute unit.",
447 .dependencies = sparseFeatureSet(&[_]Feature{}),446 .dependencies = featureSet(&[_]Feature{}),
448 };447 };
449 result[@enumToInt(Feature.load_store_opt)] = .{448 result[@enumToInt(Feature.load_store_opt)] = .{
450 .llvm_name = "load-store-opt",449 .llvm_name = "load-store-opt",
451 .description = "Enable SI load/store optimizer pass",450 .description = "Enable SI load/store optimizer pass",
452 .dependencies = sparseFeatureSet(&[_]Feature{}),451 .dependencies = featureSet(&[_]Feature{}),
453 };452 };
454 result[@enumToInt(Feature.localmemorysize0)] = .{453 result[@enumToInt(Feature.localmemorysize0)] = .{
455 .llvm_name = "localmemorysize0",454 .llvm_name = "localmemorysize0",
456 .description = "The size of local memory in bytes",455 .description = "The size of local memory in bytes",
457 .dependencies = sparseFeatureSet(&[_]Feature{}),456 .dependencies = featureSet(&[_]Feature{}),
458 };457 };
459 result[@enumToInt(Feature.localmemorysize32768)] = .{458 result[@enumToInt(Feature.localmemorysize32768)] = .{
460 .llvm_name = "localmemorysize32768",459 .llvm_name = "localmemorysize32768",
461 .description = "The size of local memory in bytes",460 .description = "The size of local memory in bytes",
462 .dependencies = sparseFeatureSet(&[_]Feature{}),461 .dependencies = featureSet(&[_]Feature{}),
463 };462 };
464 result[@enumToInt(Feature.localmemorysize65536)] = .{463 result[@enumToInt(Feature.localmemorysize65536)] = .{
465 .llvm_name = "localmemorysize65536",464 .llvm_name = "localmemorysize65536",
466 .description = "The size of local memory in bytes",465 .description = "The size of local memory in bytes",
467 .dependencies = sparseFeatureSet(&[_]Feature{}),466 .dependencies = featureSet(&[_]Feature{}),
468 };467 };
469 result[@enumToInt(Feature.mad_mix_insts)] = .{468 result[@enumToInt(Feature.mad_mix_insts)] = .{
470 .llvm_name = "mad-mix-insts",469 .llvm_name = "mad-mix-insts",
471 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",470 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
472 .dependencies = sparseFeatureSet(&[_]Feature{}),471 .dependencies = featureSet(&[_]Feature{}),
473 };472 };
474 result[@enumToInt(Feature.mai_insts)] = .{473 result[@enumToInt(Feature.mai_insts)] = .{
475 .llvm_name = "mai-insts",474 .llvm_name = "mai-insts",
476 .description = "Has mAI instructions",475 .description = "Has mAI instructions",
477 .dependencies = sparseFeatureSet(&[_]Feature{}),476 .dependencies = featureSet(&[_]Feature{}),
478 };477 };
479 result[@enumToInt(Feature.max_private_element_size_16)] = .{478 result[@enumToInt(Feature.max_private_element_size_16)] = .{
480 .llvm_name = "max-private-element-size-16",479 .llvm_name = "max-private-element-size-16",
481 .description = "Maximum private access size may be 16",480 .description = "Maximum private access size may be 16",
482 .dependencies = sparseFeatureSet(&[_]Feature{}),481 .dependencies = featureSet(&[_]Feature{}),
483 };482 };
484 result[@enumToInt(Feature.max_private_element_size_4)] = .{483 result[@enumToInt(Feature.max_private_element_size_4)] = .{
485 .llvm_name = "max-private-element-size-4",484 .llvm_name = "max-private-element-size-4",
486 .description = "Maximum private access size may be 4",485 .description = "Maximum private access size may be 4",
487 .dependencies = sparseFeatureSet(&[_]Feature{}),486 .dependencies = featureSet(&[_]Feature{}),
488 };487 };
489 result[@enumToInt(Feature.max_private_element_size_8)] = .{488 result[@enumToInt(Feature.max_private_element_size_8)] = .{
490 .llvm_name = "max-private-element-size-8",489 .llvm_name = "max-private-element-size-8",
491 .description = "Maximum private access size may be 8",490 .description = "Maximum private access size may be 8",
492 .dependencies = sparseFeatureSet(&[_]Feature{}),491 .dependencies = featureSet(&[_]Feature{}),
493 };492 };
494 result[@enumToInt(Feature.mimg_r128)] = .{493 result[@enumToInt(Feature.mimg_r128)] = .{
495 .llvm_name = "mimg-r128",494 .llvm_name = "mimg-r128",
496 .description = "Support 128-bit texture resources",495 .description = "Support 128-bit texture resources",
497 .dependencies = sparseFeatureSet(&[_]Feature{}),496 .dependencies = featureSet(&[_]Feature{}),
498 };497 };
499 result[@enumToInt(Feature.movrel)] = .{498 result[@enumToInt(Feature.movrel)] = .{
500 .llvm_name = "movrel",499 .llvm_name = "movrel",
501 .description = "Has v_movrel*_b32 instructions",500 .description = "Has v_movrel*_b32 instructions",
502 .dependencies = sparseFeatureSet(&[_]Feature{}),501 .dependencies = featureSet(&[_]Feature{}),
503 };502 };
504 result[@enumToInt(Feature.no_data_dep_hazard)] = .{503 result[@enumToInt(Feature.no_data_dep_hazard)] = .{
505 .llvm_name = "no-data-dep-hazard",504 .llvm_name = "no-data-dep-hazard",
506 .description = "Does not need SW waitstates",505 .description = "Does not need SW waitstates",
507 .dependencies = sparseFeatureSet(&[_]Feature{}),506 .dependencies = featureSet(&[_]Feature{}),
508 };507 };
509 result[@enumToInt(Feature.no_sdst_cmpx)] = .{508 result[@enumToInt(Feature.no_sdst_cmpx)] = .{
510 .llvm_name = "no-sdst-cmpx",509 .llvm_name = "no-sdst-cmpx",
511 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",510 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
512 .dependencies = sparseFeatureSet(&[_]Feature{}),511 .dependencies = featureSet(&[_]Feature{}),
513 };512 };
514 result[@enumToInt(Feature.no_sram_ecc_support)] = .{513 result[@enumToInt(Feature.no_sram_ecc_support)] = .{
515 .llvm_name = "no-sram-ecc-support",514 .llvm_name = "no-sram-ecc-support",
516 .description = "Hardware does not support SRAM ECC",515 .description = "Hardware does not support SRAM ECC",
517 .dependencies = sparseFeatureSet(&[_]Feature{}),516 .dependencies = featureSet(&[_]Feature{}),
518 };517 };
519 result[@enumToInt(Feature.no_xnack_support)] = .{518 result[@enumToInt(Feature.no_xnack_support)] = .{
520 .llvm_name = "no-xnack-support",519 .llvm_name = "no-xnack-support",
521 .description = "Hardware does not support XNACK",520 .description = "Hardware does not support XNACK",
522 .dependencies = sparseFeatureSet(&[_]Feature{}),521 .dependencies = featureSet(&[_]Feature{}),
523 };522 };
524 result[@enumToInt(Feature.nsa_encoding)] = .{523 result[@enumToInt(Feature.nsa_encoding)] = .{
525 .llvm_name = "nsa-encoding",524 .llvm_name = "nsa-encoding",
526 .description = "Support NSA encoding for image instructions",525 .description = "Support NSA encoding for image instructions",
527 .dependencies = sparseFeatureSet(&[_]Feature{}),526 .dependencies = featureSet(&[_]Feature{}),
528 };527 };
529 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{528 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
530 .llvm_name = "nsa-to-vmem-bug",529 .llvm_name = "nsa-to-vmem-bug",
531 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",530 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
532 .dependencies = sparseFeatureSet(&[_]Feature{}),531 .dependencies = featureSet(&[_]Feature{}),
533 };532 };
534 result[@enumToInt(Feature.offset_3f_bug)] = .{533 result[@enumToInt(Feature.offset_3f_bug)] = .{
535 .llvm_name = "offset-3f-bug",534 .llvm_name = "offset-3f-bug",
536 .description = "Branch offset of 3f hardware bug",535 .description = "Branch offset of 3f hardware bug",
537 .dependencies = sparseFeatureSet(&[_]Feature{}),536 .dependencies = featureSet(&[_]Feature{}),
538 };537 };
539 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{538 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
540 .llvm_name = "pk-fmac-f16-inst",539 .llvm_name = "pk-fmac-f16-inst",
541 .description = "Has v_pk_fmac_f16 instruction",540 .description = "Has v_pk_fmac_f16 instruction",
542 .dependencies = sparseFeatureSet(&[_]Feature{}),541 .dependencies = featureSet(&[_]Feature{}),
543 };542 };
544 result[@enumToInt(Feature.promote_alloca)] = .{543 result[@enumToInt(Feature.promote_alloca)] = .{
545 .llvm_name = "promote-alloca",544 .llvm_name = "promote-alloca",
546 .description = "Enable promote alloca pass",545 .description = "Enable promote alloca pass",
547 .dependencies = sparseFeatureSet(&[_]Feature{}),546 .dependencies = featureSet(&[_]Feature{}),
548 };547 };
549 result[@enumToInt(Feature.r128_a16)] = .{548 result[@enumToInt(Feature.r128_a16)] = .{
550 .llvm_name = "r128-a16",549 .llvm_name = "r128-a16",
551 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",550 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
552 .dependencies = sparseFeatureSet(&[_]Feature{}),551 .dependencies = featureSet(&[_]Feature{}),
553 };552 };
554 result[@enumToInt(Feature.register_banking)] = .{553 result[@enumToInt(Feature.register_banking)] = .{
555 .llvm_name = "register-banking",554 .llvm_name = "register-banking",
556 .description = "Has register banking",555 .description = "Has register banking",
557 .dependencies = sparseFeatureSet(&[_]Feature{}),556 .dependencies = featureSet(&[_]Feature{}),
558 };557 };
559 result[@enumToInt(Feature.s_memrealtime)] = .{558 result[@enumToInt(Feature.s_memrealtime)] = .{
560 .llvm_name = "s-memrealtime",559 .llvm_name = "s-memrealtime",
561 .description = "Has s_memrealtime instruction",560 .description = "Has s_memrealtime instruction",
562 .dependencies = sparseFeatureSet(&[_]Feature{}),561 .dependencies = featureSet(&[_]Feature{}),
563 };562 };
564 result[@enumToInt(Feature.scalar_atomics)] = .{563 result[@enumToInt(Feature.scalar_atomics)] = .{
565 .llvm_name = "scalar-atomics",564 .llvm_name = "scalar-atomics",
566 .description = "Has atomic scalar memory instructions",565 .description = "Has atomic scalar memory instructions",
567 .dependencies = sparseFeatureSet(&[_]Feature{}),566 .dependencies = featureSet(&[_]Feature{}),
568 };567 };
569 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{568 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{
570 .llvm_name = "scalar-flat-scratch-insts",569 .llvm_name = "scalar-flat-scratch-insts",
571 .description = "Have s_scratch_* flat memory instructions",570 .description = "Have s_scratch_* flat memory instructions",
572 .dependencies = sparseFeatureSet(&[_]Feature{}),571 .dependencies = featureSet(&[_]Feature{}),
573 };572 };
574 result[@enumToInt(Feature.scalar_stores)] = .{573 result[@enumToInt(Feature.scalar_stores)] = .{
575 .llvm_name = "scalar-stores",574 .llvm_name = "scalar-stores",
576 .description = "Has store scalar memory instructions",575 .description = "Has store scalar memory instructions",
577 .dependencies = sparseFeatureSet(&[_]Feature{}),576 .dependencies = featureSet(&[_]Feature{}),
578 };577 };
579 result[@enumToInt(Feature.sdwa)] = .{578 result[@enumToInt(Feature.sdwa)] = .{
580 .llvm_name = "sdwa",579 .llvm_name = "sdwa",
581 .description = "Support SDWA (Sub-DWORD Addressing) extension",580 .description = "Support SDWA (Sub-DWORD Addressing) extension",
582 .dependencies = sparseFeatureSet(&[_]Feature{}),581 .dependencies = featureSet(&[_]Feature{}),
583 };582 };
584 result[@enumToInt(Feature.sdwa_mav)] = .{583 result[@enumToInt(Feature.sdwa_mav)] = .{
585 .llvm_name = "sdwa-mav",584 .llvm_name = "sdwa-mav",
586 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",585 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
587 .dependencies = sparseFeatureSet(&[_]Feature{}),586 .dependencies = featureSet(&[_]Feature{}),
588 };587 };
589 result[@enumToInt(Feature.sdwa_omod)] = .{588 result[@enumToInt(Feature.sdwa_omod)] = .{
590 .llvm_name = "sdwa-omod",589 .llvm_name = "sdwa-omod",
591 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",590 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
592 .dependencies = sparseFeatureSet(&[_]Feature{}),591 .dependencies = featureSet(&[_]Feature{}),
593 };592 };
594 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{593 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{
595 .llvm_name = "sdwa-out-mods-vopc",594 .llvm_name = "sdwa-out-mods-vopc",
596 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",595 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
597 .dependencies = sparseFeatureSet(&[_]Feature{}),596 .dependencies = featureSet(&[_]Feature{}),
598 };597 };
599 result[@enumToInt(Feature.sdwa_scalar)] = .{598 result[@enumToInt(Feature.sdwa_scalar)] = .{
600 .llvm_name = "sdwa-scalar",599 .llvm_name = "sdwa-scalar",
601 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",600 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
602 .dependencies = sparseFeatureSet(&[_]Feature{}),601 .dependencies = featureSet(&[_]Feature{}),
603 };602 };
604 result[@enumToInt(Feature.sdwa_sdst)] = .{603 result[@enumToInt(Feature.sdwa_sdst)] = .{
605 .llvm_name = "sdwa-sdst",604 .llvm_name = "sdwa-sdst",
606 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",605 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
607 .dependencies = sparseFeatureSet(&[_]Feature{}),606 .dependencies = featureSet(&[_]Feature{}),
608 };607 };
609 result[@enumToInt(Feature.sea_islands)] = .{608 result[@enumToInt(Feature.sea_islands)] = .{
610 .llvm_name = "sea-islands",609 .llvm_name = "sea-islands",
611 .description = "SEA_ISLANDS GPU generation",610 .description = "SEA_ISLANDS GPU generation",
612 .dependencies = sparseFeatureSet(&[_]Feature{611 .dependencies = featureSet(&[_]Feature{
613 .ci_insts,612 .ci_insts,
614 .flat_address_space,613 .flat_address_space,
615 .fp64,614 .fp64,
...@@ -625,22 +624,22 @@ pub const all_features = blk: {...@@ -625,22 +624,22 @@ pub const all_features = blk: {
625 result[@enumToInt(Feature.sgpr_init_bug)] = .{624 result[@enumToInt(Feature.sgpr_init_bug)] = .{
626 .llvm_name = "sgpr-init-bug",625 .llvm_name = "sgpr-init-bug",
627 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",626 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
628 .dependencies = sparseFeatureSet(&[_]Feature{}),627 .dependencies = featureSet(&[_]Feature{}),
629 };628 };
630 result[@enumToInt(Feature.si_scheduler)] = .{629 result[@enumToInt(Feature.si_scheduler)] = .{
631 .llvm_name = "si-scheduler",630 .llvm_name = "si-scheduler",
632 .description = "Enable SI Machine Scheduler",631 .description = "Enable SI Machine Scheduler",
633 .dependencies = sparseFeatureSet(&[_]Feature{}),632 .dependencies = featureSet(&[_]Feature{}),
634 };633 };
635 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{634 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{
636 .llvm_name = "smem-to-vector-write-hazard",635 .llvm_name = "smem-to-vector-write-hazard",
637 .description = "s_load_dword followed by v_cmp page faults",636 .description = "s_load_dword followed by v_cmp page faults",
638 .dependencies = sparseFeatureSet(&[_]Feature{}),637 .dependencies = featureSet(&[_]Feature{}),
639 };638 };
640 result[@enumToInt(Feature.southern_islands)] = .{639 result[@enumToInt(Feature.southern_islands)] = .{
641 .llvm_name = "southern-islands",640 .llvm_name = "southern-islands",
642 .description = "SOUTHERN_ISLANDS GPU generation",641 .description = "SOUTHERN_ISLANDS GPU generation",
643 .dependencies = sparseFeatureSet(&[_]Feature{642 .dependencies = featureSet(&[_]Feature{
644 .fp64,643 .fp64,
645 .ldsbankcount32,644 .ldsbankcount32,
646 .localmemorysize32768,645 .localmemorysize32768,
...@@ -655,62 +654,62 @@ pub const all_features = blk: {...@@ -655,62 +654,62 @@ pub const all_features = blk: {
655 result[@enumToInt(Feature.sram_ecc)] = .{654 result[@enumToInt(Feature.sram_ecc)] = .{
656 .llvm_name = "sram-ecc",655 .llvm_name = "sram-ecc",
657 .description = "Enable SRAM ECC",656 .description = "Enable SRAM ECC",
658 .dependencies = sparseFeatureSet(&[_]Feature{}),657 .dependencies = featureSet(&[_]Feature{}),
659 };658 };
660 result[@enumToInt(Feature.trap_handler)] = .{659 result[@enumToInt(Feature.trap_handler)] = .{
661 .llvm_name = "trap-handler",660 .llvm_name = "trap-handler",
662 .description = "Trap handler support",661 .description = "Trap handler support",
663 .dependencies = sparseFeatureSet(&[_]Feature{}),662 .dependencies = featureSet(&[_]Feature{}),
664 };663 };
665 result[@enumToInt(Feature.trig_reduced_range)] = .{664 result[@enumToInt(Feature.trig_reduced_range)] = .{
666 .llvm_name = "trig-reduced-range",665 .llvm_name = "trig-reduced-range",
667 .description = "Requires use of fract on arguments to trig instructions",666 .description = "Requires use of fract on arguments to trig instructions",
668 .dependencies = sparseFeatureSet(&[_]Feature{}),667 .dependencies = featureSet(&[_]Feature{}),
669 };668 };
670 result[@enumToInt(Feature.unaligned_buffer_access)] = .{669 result[@enumToInt(Feature.unaligned_buffer_access)] = .{
671 .llvm_name = "unaligned-buffer-access",670 .llvm_name = "unaligned-buffer-access",
672 .description = "Support unaligned global loads and stores",671 .description = "Support unaligned global loads and stores",
673 .dependencies = sparseFeatureSet(&[_]Feature{}),672 .dependencies = featureSet(&[_]Feature{}),
674 };673 };
675 result[@enumToInt(Feature.unaligned_scratch_access)] = .{674 result[@enumToInt(Feature.unaligned_scratch_access)] = .{
676 .llvm_name = "unaligned-scratch-access",675 .llvm_name = "unaligned-scratch-access",
677 .description = "Support unaligned scratch loads and stores",676 .description = "Support unaligned scratch loads and stores",
678 .dependencies = sparseFeatureSet(&[_]Feature{}),677 .dependencies = featureSet(&[_]Feature{}),
679 };678 };
680 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{679 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{
681 .llvm_name = "unpacked-d16-vmem",680 .llvm_name = "unpacked-d16-vmem",
682 .description = "Has unpacked d16 vmem instructions",681 .description = "Has unpacked d16 vmem instructions",
683 .dependencies = sparseFeatureSet(&[_]Feature{}),682 .dependencies = featureSet(&[_]Feature{}),
684 };683 };
685 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{684 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{
686 .llvm_name = "unsafe-ds-offset-folding",685 .llvm_name = "unsafe-ds-offset-folding",
687 .description = "Force using DS instruction immediate offsets on SI",686 .description = "Force using DS instruction immediate offsets on SI",
688 .dependencies = sparseFeatureSet(&[_]Feature{}),687 .dependencies = featureSet(&[_]Feature{}),
689 };688 };
690 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{689 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{
691 .llvm_name = "vcmpx-exec-war-hazard",690 .llvm_name = "vcmpx-exec-war-hazard",
692 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",691 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
693 .dependencies = sparseFeatureSet(&[_]Feature{}),692 .dependencies = featureSet(&[_]Feature{}),
694 };693 };
695 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{694 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{
696 .llvm_name = "vcmpx-permlane-hazard",695 .llvm_name = "vcmpx-permlane-hazard",
697 .description = "TODO: describe me",696 .description = "TODO: describe me",
698 .dependencies = sparseFeatureSet(&[_]Feature{}),697 .dependencies = featureSet(&[_]Feature{}),
699 };698 };
700 result[@enumToInt(Feature.vgpr_index_mode)] = .{699 result[@enumToInt(Feature.vgpr_index_mode)] = .{
701 .llvm_name = "vgpr-index-mode",700 .llvm_name = "vgpr-index-mode",
702 .description = "Has VGPR mode register indexing",701 .description = "Has VGPR mode register indexing",
703 .dependencies = sparseFeatureSet(&[_]Feature{}),702 .dependencies = featureSet(&[_]Feature{}),
704 };703 };
705 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{704 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{
706 .llvm_name = "vmem-to-scalar-write-hazard",705 .llvm_name = "vmem-to-scalar-write-hazard",
707 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",706 .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{}),
709 };708 };
710 result[@enumToInt(Feature.volcanic_islands)] = .{709 result[@enumToInt(Feature.volcanic_islands)] = .{
711 .llvm_name = "volcanic-islands",710 .llvm_name = "volcanic-islands",
712 .description = "VOLCANIC_ISLANDS GPU generation",711 .description = "VOLCANIC_ISLANDS GPU generation",
713 .dependencies = sparseFeatureSet(&[_]Feature{712 .dependencies = featureSet(&[_]Feature{
714 .@"16_bit_insts",713 .@"16_bit_insts",
715 .ci_insts,714 .ci_insts,
716 .dpp,715 .dpp,
...@@ -738,43 +737,42 @@ pub const all_features = blk: {...@@ -738,43 +737,42 @@ pub const all_features = blk: {
738 result[@enumToInt(Feature.vop3_literal)] = .{737 result[@enumToInt(Feature.vop3_literal)] = .{
739 .llvm_name = "vop3-literal",738 .llvm_name = "vop3-literal",
740 .description = "Can use one literal in VOP3",739 .description = "Can use one literal in VOP3",
741 .dependencies = sparseFeatureSet(&[_]Feature{}),740 .dependencies = featureSet(&[_]Feature{}),
742 };741 };
743 result[@enumToInt(Feature.vop3p)] = .{742 result[@enumToInt(Feature.vop3p)] = .{
744 .llvm_name = "vop3p",743 .llvm_name = "vop3p",
745 .description = "Has VOP3P packed instructions",744 .description = "Has VOP3P packed instructions",
746 .dependencies = sparseFeatureSet(&[_]Feature{}),745 .dependencies = featureSet(&[_]Feature{}),
747 };746 };
748 result[@enumToInt(Feature.vscnt)] = .{747 result[@enumToInt(Feature.vscnt)] = .{
749 .llvm_name = "vscnt",748 .llvm_name = "vscnt",
750 .description = "Has separate store vscnt counter",749 .description = "Has separate store vscnt counter",
751 .dependencies = sparseFeatureSet(&[_]Feature{}),750 .dependencies = featureSet(&[_]Feature{}),
752 };751 };
753 result[@enumToInt(Feature.wavefrontsize16)] = .{752 result[@enumToInt(Feature.wavefrontsize16)] = .{
754 .llvm_name = "wavefrontsize16",753 .llvm_name = "wavefrontsize16",
755 .description = "The number of threads per wavefront",754 .description = "The number of threads per wavefront",
756 .dependencies = sparseFeatureSet(&[_]Feature{}),755 .dependencies = featureSet(&[_]Feature{}),
757 };756 };
758 result[@enumToInt(Feature.wavefrontsize32)] = .{757 result[@enumToInt(Feature.wavefrontsize32)] = .{
759 .llvm_name = "wavefrontsize32",758 .llvm_name = "wavefrontsize32",
760 .description = "The number of threads per wavefront",759 .description = "The number of threads per wavefront",
761 .dependencies = sparseFeatureSet(&[_]Feature{}),760 .dependencies = featureSet(&[_]Feature{}),
762 };761 };
763 result[@enumToInt(Feature.wavefrontsize64)] = .{762 result[@enumToInt(Feature.wavefrontsize64)] = .{
764 .llvm_name = "wavefrontsize64",763 .llvm_name = "wavefrontsize64",
765 .description = "The number of threads per wavefront",764 .description = "The number of threads per wavefront",
766 .dependencies = sparseFeatureSet(&[_]Feature{}),765 .dependencies = featureSet(&[_]Feature{}),
767 };766 };
768 result[@enumToInt(Feature.xnack)] = .{767 result[@enumToInt(Feature.xnack)] = .{
769 .llvm_name = "xnack",768 .llvm_name = "xnack",
770 .description = "Enable XNACK support",769 .description = "Enable XNACK support",
771 .dependencies = sparseFeatureSet(&[_]Feature{}),770 .dependencies = featureSet(&[_]Feature{}),
772 };771 };
773 const ti = @typeInfo(Feature);772 const ti = @typeInfo(Feature);
774 for (result) |*elem, i| {773 for (result) |*elem, i| {
775 elem.index = i;774 elem.index = i;
776 elem.name = ti.Enum.fields[i].name;775 elem.name = ti.Enum.fields[i].name;
777 elem.dependencies.initAsDependencies(i, &result);
778 }776 }
779 break :blk result;777 break :blk result;
780};778};
...@@ -783,7 +781,7 @@ pub const cpu = struct {...@@ -783,7 +781,7 @@ pub const cpu = struct {
783 pub const bonaire = Cpu{781 pub const bonaire = Cpu{
784 .name = "bonaire",782 .name = "bonaire",
785 .llvm_name = "bonaire",783 .llvm_name = "bonaire",
786 .features = featureSet(&all_features, &[_]Feature{784 .features = featureSet(&[_]Feature{
787 .code_object_v3,785 .code_object_v3,
788 .ldsbankcount32,786 .ldsbankcount32,
789 .no_xnack_support,787 .no_xnack_support,
...@@ -793,7 +791,7 @@ pub const cpu = struct {...@@ -793,7 +791,7 @@ pub const cpu = struct {
793 pub const carrizo = Cpu{791 pub const carrizo = Cpu{
794 .name = "carrizo",792 .name = "carrizo",
795 .llvm_name = "carrizo",793 .llvm_name = "carrizo",
796 .features = featureSet(&all_features, &[_]Feature{794 .features = featureSet(&[_]Feature{
797 .code_object_v3,795 .code_object_v3,
798 .fast_fmaf,796 .fast_fmaf,
799 .half_rate_64_ops,797 .half_rate_64_ops,
...@@ -806,7 +804,7 @@ pub const cpu = struct {...@@ -806,7 +804,7 @@ pub const cpu = struct {
806 pub const fiji = Cpu{804 pub const fiji = Cpu{
807 .name = "fiji",805 .name = "fiji",
808 .llvm_name = "fiji",806 .llvm_name = "fiji",
809 .features = featureSet(&all_features, &[_]Feature{807 .features = featureSet(&[_]Feature{
810 .code_object_v3,808 .code_object_v3,
811 .ldsbankcount32,809 .ldsbankcount32,
812 .no_xnack_support,810 .no_xnack_support,
...@@ -817,14 +815,14 @@ pub const cpu = struct {...@@ -817,14 +815,14 @@ pub const cpu = struct {
817 pub const generic = Cpu{815 pub const generic = Cpu{
818 .name = "generic",816 .name = "generic",
819 .llvm_name = "generic",817 .llvm_name = "generic",
820 .features = featureSet(&all_features, &[_]Feature{818 .features = featureSet(&[_]Feature{
821 .wavefrontsize64,819 .wavefrontsize64,
822 }),820 }),
823 };821 };
824 pub const generic_hsa = Cpu{822 pub const generic_hsa = Cpu{
825 .name = "generic_hsa",823 .name = "generic_hsa",
826 .llvm_name = "generic-hsa",824 .llvm_name = "generic-hsa",
827 .features = featureSet(&all_features, &[_]Feature{825 .features = featureSet(&[_]Feature{
828 .flat_address_space,826 .flat_address_space,
829 .wavefrontsize64,827 .wavefrontsize64,
830 }),828 }),
...@@ -832,7 +830,7 @@ pub const cpu = struct {...@@ -832,7 +830,7 @@ pub const cpu = struct {
832 pub const gfx1010 = Cpu{830 pub const gfx1010 = Cpu{
833 .name = "gfx1010",831 .name = "gfx1010",
834 .llvm_name = "gfx1010",832 .llvm_name = "gfx1010",
835 .features = featureSet(&all_features, &[_]Feature{833 .features = featureSet(&[_]Feature{
836 .code_object_v3,834 .code_object_v3,
837 .dl_insts,835 .dl_insts,
838 .flat_segment_offset_bug,836 .flat_segment_offset_bug,
...@@ -858,7 +856,7 @@ pub const cpu = struct {...@@ -858,7 +856,7 @@ pub const cpu = struct {
858 pub const gfx1011 = Cpu{856 pub const gfx1011 = Cpu{
859 .name = "gfx1011",857 .name = "gfx1011",
860 .llvm_name = "gfx1011",858 .llvm_name = "gfx1011",
861 .features = featureSet(&all_features, &[_]Feature{859 .features = featureSet(&[_]Feature{
862 .code_object_v3,860 .code_object_v3,
863 .dl_insts,861 .dl_insts,
864 .dot1_insts,862 .dot1_insts,
...@@ -887,7 +885,7 @@ pub const cpu = struct {...@@ -887,7 +885,7 @@ pub const cpu = struct {
887 pub const gfx1012 = Cpu{885 pub const gfx1012 = Cpu{
888 .name = "gfx1012",886 .name = "gfx1012",
889 .llvm_name = "gfx1012",887 .llvm_name = "gfx1012",
890 .features = featureSet(&all_features, &[_]Feature{888 .features = featureSet(&[_]Feature{
891 .code_object_v3,889 .code_object_v3,
892 .dl_insts,890 .dl_insts,
893 .dot1_insts,891 .dot1_insts,
...@@ -917,7 +915,7 @@ pub const cpu = struct {...@@ -917,7 +915,7 @@ pub const cpu = struct {
917 pub const gfx600 = Cpu{915 pub const gfx600 = Cpu{
918 .name = "gfx600",916 .name = "gfx600",
919 .llvm_name = "gfx600",917 .llvm_name = "gfx600",
920 .features = featureSet(&all_features, &[_]Feature{918 .features = featureSet(&[_]Feature{
921 .code_object_v3,919 .code_object_v3,
922 .fast_fmaf,920 .fast_fmaf,
923 .half_rate_64_ops,921 .half_rate_64_ops,
...@@ -929,7 +927,7 @@ pub const cpu = struct {...@@ -929,7 +927,7 @@ pub const cpu = struct {
929 pub const gfx601 = Cpu{927 pub const gfx601 = Cpu{
930 .name = "gfx601",928 .name = "gfx601",
931 .llvm_name = "gfx601",929 .llvm_name = "gfx601",
932 .features = featureSet(&all_features, &[_]Feature{930 .features = featureSet(&[_]Feature{
933 .code_object_v3,931 .code_object_v3,
934 .ldsbankcount32,932 .ldsbankcount32,
935 .no_xnack_support,933 .no_xnack_support,
...@@ -939,7 +937,7 @@ pub const cpu = struct {...@@ -939,7 +937,7 @@ pub const cpu = struct {
939 pub const gfx700 = Cpu{937 pub const gfx700 = Cpu{
940 .name = "gfx700",938 .name = "gfx700",
941 .llvm_name = "gfx700",939 .llvm_name = "gfx700",
942 .features = featureSet(&all_features, &[_]Feature{940 .features = featureSet(&[_]Feature{
943 .code_object_v3,941 .code_object_v3,
944 .ldsbankcount32,942 .ldsbankcount32,
945 .no_xnack_support,943 .no_xnack_support,
...@@ -949,7 +947,7 @@ pub const cpu = struct {...@@ -949,7 +947,7 @@ pub const cpu = struct {
949 pub const gfx701 = Cpu{947 pub const gfx701 = Cpu{
950 .name = "gfx701",948 .name = "gfx701",
951 .llvm_name = "gfx701",949 .llvm_name = "gfx701",
952 .features = featureSet(&all_features, &[_]Feature{950 .features = featureSet(&[_]Feature{
953 .code_object_v3,951 .code_object_v3,
954 .fast_fmaf,952 .fast_fmaf,
955 .half_rate_64_ops,953 .half_rate_64_ops,
...@@ -961,7 +959,7 @@ pub const cpu = struct {...@@ -961,7 +959,7 @@ pub const cpu = struct {
961 pub const gfx702 = Cpu{959 pub const gfx702 = Cpu{
962 .name = "gfx702",960 .name = "gfx702",
963 .llvm_name = "gfx702",961 .llvm_name = "gfx702",
964 .features = featureSet(&all_features, &[_]Feature{962 .features = featureSet(&[_]Feature{
965 .code_object_v3,963 .code_object_v3,
966 .fast_fmaf,964 .fast_fmaf,
967 .ldsbankcount16,965 .ldsbankcount16,
...@@ -972,7 +970,7 @@ pub const cpu = struct {...@@ -972,7 +970,7 @@ pub const cpu = struct {
972 pub const gfx703 = Cpu{970 pub const gfx703 = Cpu{
973 .name = "gfx703",971 .name = "gfx703",
974 .llvm_name = "gfx703",972 .llvm_name = "gfx703",
975 .features = featureSet(&all_features, &[_]Feature{973 .features = featureSet(&[_]Feature{
976 .code_object_v3,974 .code_object_v3,
977 .ldsbankcount16,975 .ldsbankcount16,
978 .no_xnack_support,976 .no_xnack_support,
...@@ -982,7 +980,7 @@ pub const cpu = struct {...@@ -982,7 +980,7 @@ pub const cpu = struct {
982 pub const gfx704 = Cpu{980 pub const gfx704 = Cpu{
983 .name = "gfx704",981 .name = "gfx704",
984 .llvm_name = "gfx704",982 .llvm_name = "gfx704",
985 .features = featureSet(&all_features, &[_]Feature{983 .features = featureSet(&[_]Feature{
986 .code_object_v3,984 .code_object_v3,
987 .ldsbankcount32,985 .ldsbankcount32,
988 .no_xnack_support,986 .no_xnack_support,
...@@ -992,7 +990,7 @@ pub const cpu = struct {...@@ -992,7 +990,7 @@ pub const cpu = struct {
992 pub const gfx801 = Cpu{990 pub const gfx801 = Cpu{
993 .name = "gfx801",991 .name = "gfx801",
994 .llvm_name = "gfx801",992 .llvm_name = "gfx801",
995 .features = featureSet(&all_features, &[_]Feature{993 .features = featureSet(&[_]Feature{
996 .code_object_v3,994 .code_object_v3,
997 .fast_fmaf,995 .fast_fmaf,
998 .half_rate_64_ops,996 .half_rate_64_ops,
...@@ -1005,7 +1003,7 @@ pub const cpu = struct {...@@ -1005,7 +1003,7 @@ pub const cpu = struct {
1005 pub const gfx802 = Cpu{1003 pub const gfx802 = Cpu{
1006 .name = "gfx802",1004 .name = "gfx802",
1007 .llvm_name = "gfx802",1005 .llvm_name = "gfx802",
1008 .features = featureSet(&all_features, &[_]Feature{1006 .features = featureSet(&[_]Feature{
1009 .code_object_v3,1007 .code_object_v3,
1010 .ldsbankcount32,1008 .ldsbankcount32,
1011 .no_xnack_support,1009 .no_xnack_support,
...@@ -1017,7 +1015,7 @@ pub const cpu = struct {...@@ -1017,7 +1015,7 @@ pub const cpu = struct {
1017 pub const gfx803 = Cpu{1015 pub const gfx803 = Cpu{
1018 .name = "gfx803",1016 .name = "gfx803",
1019 .llvm_name = "gfx803",1017 .llvm_name = "gfx803",
1020 .features = featureSet(&all_features, &[_]Feature{1018 .features = featureSet(&[_]Feature{
1021 .code_object_v3,1019 .code_object_v3,
1022 .ldsbankcount32,1020 .ldsbankcount32,
1023 .no_xnack_support,1021 .no_xnack_support,
...@@ -1028,7 +1026,7 @@ pub const cpu = struct {...@@ -1028,7 +1026,7 @@ pub const cpu = struct {
1028 pub const gfx810 = Cpu{1026 pub const gfx810 = Cpu{
1029 .name = "gfx810",1027 .name = "gfx810",
1030 .llvm_name = "gfx810",1028 .llvm_name = "gfx810",
1031 .features = featureSet(&all_features, &[_]Feature{1029 .features = featureSet(&[_]Feature{
1032 .code_object_v3,1030 .code_object_v3,
1033 .ldsbankcount16,1031 .ldsbankcount16,
1034 .volcanic_islands,1032 .volcanic_islands,
...@@ -1038,7 +1036,7 @@ pub const cpu = struct {...@@ -1038,7 +1036,7 @@ pub const cpu = struct {
1038 pub const gfx900 = Cpu{1036 pub const gfx900 = Cpu{
1039 .name = "gfx900",1037 .name = "gfx900",
1040 .llvm_name = "gfx900",1038 .llvm_name = "gfx900",
1041 .features = featureSet(&all_features, &[_]Feature{1039 .features = featureSet(&[_]Feature{
1042 .code_object_v3,1040 .code_object_v3,
1043 .gfx9,1041 .gfx9,
1044 .ldsbankcount32,1042 .ldsbankcount32,
...@@ -1050,7 +1048,7 @@ pub const cpu = struct {...@@ -1050,7 +1048,7 @@ pub const cpu = struct {
1050 pub const gfx902 = Cpu{1048 pub const gfx902 = Cpu{
1051 .name = "gfx902",1049 .name = "gfx902",
1052 .llvm_name = "gfx902",1050 .llvm_name = "gfx902",
1053 .features = featureSet(&all_features, &[_]Feature{1051 .features = featureSet(&[_]Feature{
1054 .code_object_v3,1052 .code_object_v3,
1055 .gfx9,1053 .gfx9,
1056 .ldsbankcount32,1054 .ldsbankcount32,
...@@ -1062,7 +1060,7 @@ pub const cpu = struct {...@@ -1062,7 +1060,7 @@ pub const cpu = struct {
1062 pub const gfx904 = Cpu{1060 pub const gfx904 = Cpu{
1063 .name = "gfx904",1061 .name = "gfx904",
1064 .llvm_name = "gfx904",1062 .llvm_name = "gfx904",
1065 .features = featureSet(&all_features, &[_]Feature{1063 .features = featureSet(&[_]Feature{
1066 .code_object_v3,1064 .code_object_v3,
1067 .fma_mix_insts,1065 .fma_mix_insts,
1068 .gfx9,1066 .gfx9,
...@@ -1074,7 +1072,7 @@ pub const cpu = struct {...@@ -1074,7 +1072,7 @@ pub const cpu = struct {
1074 pub const gfx906 = Cpu{1072 pub const gfx906 = Cpu{
1075 .name = "gfx906",1073 .name = "gfx906",
1076 .llvm_name = "gfx906",1074 .llvm_name = "gfx906",
1077 .features = featureSet(&all_features, &[_]Feature{1075 .features = featureSet(&[_]Feature{
1078 .code_object_v3,1076 .code_object_v3,
1079 .dl_insts,1077 .dl_insts,
1080 .dot1_insts,1078 .dot1_insts,
...@@ -1089,7 +1087,7 @@ pub const cpu = struct {...@@ -1089,7 +1087,7 @@ pub const cpu = struct {
1089 pub const gfx908 = Cpu{1087 pub const gfx908 = Cpu{
1090 .name = "gfx908",1088 .name = "gfx908",
1091 .llvm_name = "gfx908",1089 .llvm_name = "gfx908",
1092 .features = featureSet(&all_features, &[_]Feature{1090 .features = featureSet(&[_]Feature{
1093 .atomic_fadd_insts,1091 .atomic_fadd_insts,
1094 .code_object_v3,1092 .code_object_v3,
1095 .dl_insts,1093 .dl_insts,
...@@ -1111,7 +1109,7 @@ pub const cpu = struct {...@@ -1111,7 +1109,7 @@ pub const cpu = struct {
1111 pub const gfx909 = Cpu{1109 pub const gfx909 = Cpu{
1112 .name = "gfx909",1110 .name = "gfx909",
1113 .llvm_name = "gfx909",1111 .llvm_name = "gfx909",
1114 .features = featureSet(&all_features, &[_]Feature{1112 .features = featureSet(&[_]Feature{
1115 .code_object_v3,1113 .code_object_v3,
1116 .gfx9,1114 .gfx9,
1117 .ldsbankcount32,1115 .ldsbankcount32,
...@@ -1122,7 +1120,7 @@ pub const cpu = struct {...@@ -1122,7 +1120,7 @@ pub const cpu = struct {
1122 pub const hainan = Cpu{1120 pub const hainan = Cpu{
1123 .name = "hainan",1121 .name = "hainan",
1124 .llvm_name = "hainan",1122 .llvm_name = "hainan",
1125 .features = featureSet(&all_features, &[_]Feature{1123 .features = featureSet(&[_]Feature{
1126 .code_object_v3,1124 .code_object_v3,
1127 .ldsbankcount32,1125 .ldsbankcount32,
1128 .no_xnack_support,1126 .no_xnack_support,
...@@ -1132,7 +1130,7 @@ pub const cpu = struct {...@@ -1132,7 +1130,7 @@ pub const cpu = struct {
1132 pub const hawaii = Cpu{1130 pub const hawaii = Cpu{
1133 .name = "hawaii",1131 .name = "hawaii",
1134 .llvm_name = "hawaii",1132 .llvm_name = "hawaii",
1135 .features = featureSet(&all_features, &[_]Feature{1133 .features = featureSet(&[_]Feature{
1136 .code_object_v3,1134 .code_object_v3,
1137 .fast_fmaf,1135 .fast_fmaf,
1138 .half_rate_64_ops,1136 .half_rate_64_ops,
...@@ -1144,7 +1142,7 @@ pub const cpu = struct {...@@ -1144,7 +1142,7 @@ pub const cpu = struct {
1144 pub const iceland = Cpu{1142 pub const iceland = Cpu{
1145 .name = "iceland",1143 .name = "iceland",
1146 .llvm_name = "iceland",1144 .llvm_name = "iceland",
1147 .features = featureSet(&all_features, &[_]Feature{1145 .features = featureSet(&[_]Feature{
1148 .code_object_v3,1146 .code_object_v3,
1149 .ldsbankcount32,1147 .ldsbankcount32,
1150 .no_xnack_support,1148 .no_xnack_support,
...@@ -1156,7 +1154,7 @@ pub const cpu = struct {...@@ -1156,7 +1154,7 @@ pub const cpu = struct {
1156 pub const kabini = Cpu{1154 pub const kabini = Cpu{
1157 .name = "kabini",1155 .name = "kabini",
1158 .llvm_name = "kabini",1156 .llvm_name = "kabini",
1159 .features = featureSet(&all_features, &[_]Feature{1157 .features = featureSet(&[_]Feature{
1160 .code_object_v3,1158 .code_object_v3,
1161 .ldsbankcount16,1159 .ldsbankcount16,
1162 .no_xnack_support,1160 .no_xnack_support,
...@@ -1166,7 +1164,7 @@ pub const cpu = struct {...@@ -1166,7 +1164,7 @@ pub const cpu = struct {
1166 pub const kaveri = Cpu{1164 pub const kaveri = Cpu{
1167 .name = "kaveri",1165 .name = "kaveri",
1168 .llvm_name = "kaveri",1166 .llvm_name = "kaveri",
1169 .features = featureSet(&all_features, &[_]Feature{1167 .features = featureSet(&[_]Feature{
1170 .code_object_v3,1168 .code_object_v3,
1171 .ldsbankcount32,1169 .ldsbankcount32,
1172 .no_xnack_support,1170 .no_xnack_support,
...@@ -1176,7 +1174,7 @@ pub const cpu = struct {...@@ -1176,7 +1174,7 @@ pub const cpu = struct {
1176 pub const mullins = Cpu{1174 pub const mullins = Cpu{
1177 .name = "mullins",1175 .name = "mullins",
1178 .llvm_name = "mullins",1176 .llvm_name = "mullins",
1179 .features = featureSet(&all_features, &[_]Feature{1177 .features = featureSet(&[_]Feature{
1180 .code_object_v3,1178 .code_object_v3,
1181 .ldsbankcount16,1179 .ldsbankcount16,
1182 .no_xnack_support,1180 .no_xnack_support,
...@@ -1186,7 +1184,7 @@ pub const cpu = struct {...@@ -1186,7 +1184,7 @@ pub const cpu = struct {
1186 pub const oland = Cpu{1184 pub const oland = Cpu{
1187 .name = "oland",1185 .name = "oland",
1188 .llvm_name = "oland",1186 .llvm_name = "oland",
1189 .features = featureSet(&all_features, &[_]Feature{1187 .features = featureSet(&[_]Feature{
1190 .code_object_v3,1188 .code_object_v3,
1191 .ldsbankcount32,1189 .ldsbankcount32,
1192 .no_xnack_support,1190 .no_xnack_support,
...@@ -1196,7 +1194,7 @@ pub const cpu = struct {...@@ -1196,7 +1194,7 @@ pub const cpu = struct {
1196 pub const pitcairn = Cpu{1194 pub const pitcairn = Cpu{
1197 .name = "pitcairn",1195 .name = "pitcairn",
1198 .llvm_name = "pitcairn",1196 .llvm_name = "pitcairn",
1199 .features = featureSet(&all_features, &[_]Feature{1197 .features = featureSet(&[_]Feature{
1200 .code_object_v3,1198 .code_object_v3,
1201 .ldsbankcount32,1199 .ldsbankcount32,
1202 .no_xnack_support,1200 .no_xnack_support,
...@@ -1206,7 +1204,7 @@ pub const cpu = struct {...@@ -1206,7 +1204,7 @@ pub const cpu = struct {
1206 pub const polaris10 = Cpu{1204 pub const polaris10 = Cpu{
1207 .name = "polaris10",1205 .name = "polaris10",
1208 .llvm_name = "polaris10",1206 .llvm_name = "polaris10",
1209 .features = featureSet(&all_features, &[_]Feature{1207 .features = featureSet(&[_]Feature{
1210 .code_object_v3,1208 .code_object_v3,
1211 .ldsbankcount32,1209 .ldsbankcount32,
1212 .no_xnack_support,1210 .no_xnack_support,
...@@ -1217,7 +1215,7 @@ pub const cpu = struct {...@@ -1217,7 +1215,7 @@ pub const cpu = struct {
1217 pub const polaris11 = Cpu{1215 pub const polaris11 = Cpu{
1218 .name = "polaris11",1216 .name = "polaris11",
1219 .llvm_name = "polaris11",1217 .llvm_name = "polaris11",
1220 .features = featureSet(&all_features, &[_]Feature{1218 .features = featureSet(&[_]Feature{
1221 .code_object_v3,1219 .code_object_v3,
1222 .ldsbankcount32,1220 .ldsbankcount32,
1223 .no_xnack_support,1221 .no_xnack_support,
...@@ -1228,7 +1226,7 @@ pub const cpu = struct {...@@ -1228,7 +1226,7 @@ pub const cpu = struct {
1228 pub const stoney = Cpu{1226 pub const stoney = Cpu{
1229 .name = "stoney",1227 .name = "stoney",
1230 .llvm_name = "stoney",1228 .llvm_name = "stoney",
1231 .features = featureSet(&all_features, &[_]Feature{1229 .features = featureSet(&[_]Feature{
1232 .code_object_v3,1230 .code_object_v3,
1233 .ldsbankcount16,1231 .ldsbankcount16,
1234 .volcanic_islands,1232 .volcanic_islands,
...@@ -1238,7 +1236,7 @@ pub const cpu = struct {...@@ -1238,7 +1236,7 @@ pub const cpu = struct {
1238 pub const tahiti = Cpu{1236 pub const tahiti = Cpu{
1239 .name = "tahiti",1237 .name = "tahiti",
1240 .llvm_name = "tahiti",1238 .llvm_name = "tahiti",
1241 .features = featureSet(&all_features, &[_]Feature{1239 .features = featureSet(&[_]Feature{
1242 .code_object_v3,1240 .code_object_v3,
1243 .fast_fmaf,1241 .fast_fmaf,
1244 .half_rate_64_ops,1242 .half_rate_64_ops,
...@@ -1250,7 +1248,7 @@ pub const cpu = struct {...@@ -1250,7 +1248,7 @@ pub const cpu = struct {
1250 pub const tonga = Cpu{1248 pub const tonga = Cpu{
1251 .name = "tonga",1249 .name = "tonga",
1252 .llvm_name = "tonga",1250 .llvm_name = "tonga",
1253 .features = featureSet(&all_features, &[_]Feature{1251 .features = featureSet(&[_]Feature{
1254 .code_object_v3,1252 .code_object_v3,
1255 .ldsbankcount32,1253 .ldsbankcount32,
1256 .no_xnack_support,1254 .no_xnack_support,
...@@ -1262,7 +1260,7 @@ pub const cpu = struct {...@@ -1262,7 +1260,7 @@ pub const cpu = struct {
1262 pub const verde = Cpu{1260 pub const verde = Cpu{
1263 .name = "verde",1261 .name = "verde",
1264 .llvm_name = "verde",1262 .llvm_name = "verde",
1265 .features = featureSet(&all_features, &[_]Feature{1263 .features = featureSet(&[_]Feature{
1266 .code_object_v3,1264 .code_object_v3,
1267 .ldsbankcount32,1265 .ldsbankcount32,
1268 .no_xnack_support,1266 .no_xnack_support,
lib/std/target/arm.zig+256-257
...@@ -188,167 +188,167 @@ pub const all_features = blk: {...@@ -188,167 +188,167 @@ pub const all_features = blk: {
188 result[@enumToInt(Feature.@"32bit")] = .{188 result[@enumToInt(Feature.@"32bit")] = .{
189 .llvm_name = "32bit",189 .llvm_name = "32bit",
190 .description = "Prefer 32-bit Thumb instrs",190 .description = "Prefer 32-bit Thumb instrs",
191 .dependencies = sparseFeatureSet(&[_]Feature{}),191 .dependencies = featureSet(&[_]Feature{}),
192 };192 };
193 result[@enumToInt(Feature.@"8msecext")] = .{193 result[@enumToInt(Feature.@"8msecext")] = .{
194 .llvm_name = "8msecext",194 .llvm_name = "8msecext",
195 .description = "Enable support for ARMv8-M Security Extensions",195 .description = "Enable support for ARMv8-M Security Extensions",
196 .dependencies = sparseFeatureSet(&[_]Feature{}),196 .dependencies = featureSet(&[_]Feature{}),
197 };197 };
198 result[@enumToInt(Feature.a12)] = .{198 result[@enumToInt(Feature.a12)] = .{
199 .llvm_name = "a12",199 .llvm_name = "a12",
200 .description = "Cortex-A12 ARM processors",200 .description = "Cortex-A12 ARM processors",
201 .dependencies = sparseFeatureSet(&[_]Feature{}),201 .dependencies = featureSet(&[_]Feature{}),
202 };202 };
203 result[@enumToInt(Feature.a15)] = .{203 result[@enumToInt(Feature.a15)] = .{
204 .llvm_name = "a15",204 .llvm_name = "a15",
205 .description = "Cortex-A15 ARM processors",205 .description = "Cortex-A15 ARM processors",
206 .dependencies = sparseFeatureSet(&[_]Feature{}),206 .dependencies = featureSet(&[_]Feature{}),
207 };207 };
208 result[@enumToInt(Feature.a17)] = .{208 result[@enumToInt(Feature.a17)] = .{
209 .llvm_name = "a17",209 .llvm_name = "a17",
210 .description = "Cortex-A17 ARM processors",210 .description = "Cortex-A17 ARM processors",
211 .dependencies = sparseFeatureSet(&[_]Feature{}),211 .dependencies = featureSet(&[_]Feature{}),
212 };212 };
213 result[@enumToInt(Feature.a32)] = .{213 result[@enumToInt(Feature.a32)] = .{
214 .llvm_name = "a32",214 .llvm_name = "a32",
215 .description = "Cortex-A32 ARM processors",215 .description = "Cortex-A32 ARM processors",
216 .dependencies = sparseFeatureSet(&[_]Feature{}),216 .dependencies = featureSet(&[_]Feature{}),
217 };217 };
218 result[@enumToInt(Feature.a35)] = .{218 result[@enumToInt(Feature.a35)] = .{
219 .llvm_name = "a35",219 .llvm_name = "a35",
220 .description = "Cortex-A35 ARM processors",220 .description = "Cortex-A35 ARM processors",
221 .dependencies = sparseFeatureSet(&[_]Feature{}),221 .dependencies = featureSet(&[_]Feature{}),
222 };222 };
223 result[@enumToInt(Feature.a5)] = .{223 result[@enumToInt(Feature.a5)] = .{
224 .llvm_name = "a5",224 .llvm_name = "a5",
225 .description = "Cortex-A5 ARM processors",225 .description = "Cortex-A5 ARM processors",
226 .dependencies = sparseFeatureSet(&[_]Feature{}),226 .dependencies = featureSet(&[_]Feature{}),
227 };227 };
228 result[@enumToInt(Feature.a53)] = .{228 result[@enumToInt(Feature.a53)] = .{
229 .llvm_name = "a53",229 .llvm_name = "a53",
230 .description = "Cortex-A53 ARM processors",230 .description = "Cortex-A53 ARM processors",
231 .dependencies = sparseFeatureSet(&[_]Feature{}),231 .dependencies = featureSet(&[_]Feature{}),
232 };232 };
233 result[@enumToInt(Feature.a55)] = .{233 result[@enumToInt(Feature.a55)] = .{
234 .llvm_name = "a55",234 .llvm_name = "a55",
235 .description = "Cortex-A55 ARM processors",235 .description = "Cortex-A55 ARM processors",
236 .dependencies = sparseFeatureSet(&[_]Feature{}),236 .dependencies = featureSet(&[_]Feature{}),
237 };237 };
238 result[@enumToInt(Feature.a57)] = .{238 result[@enumToInt(Feature.a57)] = .{
239 .llvm_name = "a57",239 .llvm_name = "a57",
240 .description = "Cortex-A57 ARM processors",240 .description = "Cortex-A57 ARM processors",
241 .dependencies = sparseFeatureSet(&[_]Feature{}),241 .dependencies = featureSet(&[_]Feature{}),
242 };242 };
243 result[@enumToInt(Feature.a7)] = .{243 result[@enumToInt(Feature.a7)] = .{
244 .llvm_name = "a7",244 .llvm_name = "a7",
245 .description = "Cortex-A7 ARM processors",245 .description = "Cortex-A7 ARM processors",
246 .dependencies = sparseFeatureSet(&[_]Feature{}),246 .dependencies = featureSet(&[_]Feature{}),
247 };247 };
248 result[@enumToInt(Feature.a72)] = .{248 result[@enumToInt(Feature.a72)] = .{
249 .llvm_name = "a72",249 .llvm_name = "a72",
250 .description = "Cortex-A72 ARM processors",250 .description = "Cortex-A72 ARM processors",
251 .dependencies = sparseFeatureSet(&[_]Feature{}),251 .dependencies = featureSet(&[_]Feature{}),
252 };252 };
253 result[@enumToInt(Feature.a73)] = .{253 result[@enumToInt(Feature.a73)] = .{
254 .llvm_name = "a73",254 .llvm_name = "a73",
255 .description = "Cortex-A73 ARM processors",255 .description = "Cortex-A73 ARM processors",
256 .dependencies = sparseFeatureSet(&[_]Feature{}),256 .dependencies = featureSet(&[_]Feature{}),
257 };257 };
258 result[@enumToInt(Feature.a75)] = .{258 result[@enumToInt(Feature.a75)] = .{
259 .llvm_name = "a75",259 .llvm_name = "a75",
260 .description = "Cortex-A75 ARM processors",260 .description = "Cortex-A75 ARM processors",
261 .dependencies = sparseFeatureSet(&[_]Feature{}),261 .dependencies = featureSet(&[_]Feature{}),
262 };262 };
263 result[@enumToInt(Feature.a76)] = .{263 result[@enumToInt(Feature.a76)] = .{
264 .llvm_name = "a76",264 .llvm_name = "a76",
265 .description = "Cortex-A76 ARM processors",265 .description = "Cortex-A76 ARM processors",
266 .dependencies = sparseFeatureSet(&[_]Feature{}),266 .dependencies = featureSet(&[_]Feature{}),
267 };267 };
268 result[@enumToInt(Feature.a8)] = .{268 result[@enumToInt(Feature.a8)] = .{
269 .llvm_name = "a8",269 .llvm_name = "a8",
270 .description = "Cortex-A8 ARM processors",270 .description = "Cortex-A8 ARM processors",
271 .dependencies = sparseFeatureSet(&[_]Feature{}),271 .dependencies = featureSet(&[_]Feature{}),
272 };272 };
273 result[@enumToInt(Feature.a9)] = .{273 result[@enumToInt(Feature.a9)] = .{
274 .llvm_name = "a9",274 .llvm_name = "a9",
275 .description = "Cortex-A9 ARM processors",275 .description = "Cortex-A9 ARM processors",
276 .dependencies = sparseFeatureSet(&[_]Feature{}),276 .dependencies = featureSet(&[_]Feature{}),
277 };277 };
278 result[@enumToInt(Feature.aclass)] = .{278 result[@enumToInt(Feature.aclass)] = .{
279 .llvm_name = "aclass",279 .llvm_name = "aclass",
280 .description = "Is application profile ('A' series)",280 .description = "Is application profile ('A' series)",
281 .dependencies = sparseFeatureSet(&[_]Feature{}),281 .dependencies = featureSet(&[_]Feature{}),
282 };282 };
283 result[@enumToInt(Feature.acquire_release)] = .{283 result[@enumToInt(Feature.acquire_release)] = .{
284 .llvm_name = "acquire-release",284 .llvm_name = "acquire-release",
285 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",285 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
286 .dependencies = sparseFeatureSet(&[_]Feature{}),286 .dependencies = featureSet(&[_]Feature{}),
287 };287 };
288 result[@enumToInt(Feature.aes)] = .{288 result[@enumToInt(Feature.aes)] = .{
289 .llvm_name = "aes",289 .llvm_name = "aes",
290 .description = "Enable AES support",290 .description = "Enable AES support",
291 .dependencies = sparseFeatureSet(&[_]Feature{291 .dependencies = featureSet(&[_]Feature{
292 .neon,292 .neon,
293 }),293 }),
294 };294 };
295 result[@enumToInt(Feature.armv2)] = .{295 result[@enumToInt(Feature.armv2)] = .{
296 .llvm_name = "armv2",296 .llvm_name = "armv2",
297 .description = "ARMv2 architecture",297 .description = "ARMv2 architecture",
298 .dependencies = sparseFeatureSet(&[_]Feature{}),298 .dependencies = featureSet(&[_]Feature{}),
299 };299 };
300 result[@enumToInt(Feature.armv2a)] = .{300 result[@enumToInt(Feature.armv2a)] = .{
301 .llvm_name = "armv2a",301 .llvm_name = "armv2a",
302 .description = "ARMv2a architecture",302 .description = "ARMv2a architecture",
303 .dependencies = sparseFeatureSet(&[_]Feature{}),303 .dependencies = featureSet(&[_]Feature{}),
304 };304 };
305 result[@enumToInt(Feature.armv3)] = .{305 result[@enumToInt(Feature.armv3)] = .{
306 .llvm_name = "armv3",306 .llvm_name = "armv3",
307 .description = "ARMv3 architecture",307 .description = "ARMv3 architecture",
308 .dependencies = sparseFeatureSet(&[_]Feature{}),308 .dependencies = featureSet(&[_]Feature{}),
309 };309 };
310 result[@enumToInt(Feature.armv3m)] = .{310 result[@enumToInt(Feature.armv3m)] = .{
311 .llvm_name = "armv3m",311 .llvm_name = "armv3m",
312 .description = "ARMv3m architecture",312 .description = "ARMv3m architecture",
313 .dependencies = sparseFeatureSet(&[_]Feature{}),313 .dependencies = featureSet(&[_]Feature{}),
314 };314 };
315 result[@enumToInt(Feature.armv4)] = .{315 result[@enumToInt(Feature.armv4)] = .{
316 .llvm_name = "armv4",316 .llvm_name = "armv4",
317 .description = "ARMv4 architecture",317 .description = "ARMv4 architecture",
318 .dependencies = sparseFeatureSet(&[_]Feature{}),318 .dependencies = featureSet(&[_]Feature{}),
319 };319 };
320 result[@enumToInt(Feature.armv4t)] = .{320 result[@enumToInt(Feature.armv4t)] = .{
321 .llvm_name = "armv4t",321 .llvm_name = "armv4t",
322 .description = "ARMv4t architecture",322 .description = "ARMv4t architecture",
323 .dependencies = sparseFeatureSet(&[_]Feature{323 .dependencies = featureSet(&[_]Feature{
324 .v4t,324 .v4t,
325 }),325 }),
326 };326 };
327 result[@enumToInt(Feature.armv5t)] = .{327 result[@enumToInt(Feature.armv5t)] = .{
328 .llvm_name = "armv5t",328 .llvm_name = "armv5t",
329 .description = "ARMv5t architecture",329 .description = "ARMv5t architecture",
330 .dependencies = sparseFeatureSet(&[_]Feature{330 .dependencies = featureSet(&[_]Feature{
331 .v5t,331 .v5t,
332 }),332 }),
333 };333 };
334 result[@enumToInt(Feature.armv5te)] = .{334 result[@enumToInt(Feature.armv5te)] = .{
335 .llvm_name = "armv5te",335 .llvm_name = "armv5te",
336 .description = "ARMv5te architecture",336 .description = "ARMv5te architecture",
337 .dependencies = sparseFeatureSet(&[_]Feature{337 .dependencies = featureSet(&[_]Feature{
338 .v5te,338 .v5te,
339 }),339 }),
340 };340 };
341 result[@enumToInt(Feature.armv5tej)] = .{341 result[@enumToInt(Feature.armv5tej)] = .{
342 .llvm_name = "armv5tej",342 .llvm_name = "armv5tej",
343 .description = "ARMv5tej architecture",343 .description = "ARMv5tej architecture",
344 .dependencies = sparseFeatureSet(&[_]Feature{344 .dependencies = featureSet(&[_]Feature{
345 .v5te,345 .v5te,
346 }),346 }),
347 };347 };
348 result[@enumToInt(Feature.armv6)] = .{348 result[@enumToInt(Feature.armv6)] = .{
349 .llvm_name = "armv6",349 .llvm_name = "armv6",
350 .description = "ARMv6 architecture",350 .description = "ARMv6 architecture",
351 .dependencies = sparseFeatureSet(&[_]Feature{351 .dependencies = featureSet(&[_]Feature{
352 .dsp,352 .dsp,
353 .v6,353 .v6,
354 }),354 }),
...@@ -356,7 +356,7 @@ pub const all_features = blk: {...@@ -356,7 +356,7 @@ pub const all_features = blk: {
356 result[@enumToInt(Feature.armv6_m)] = .{356 result[@enumToInt(Feature.armv6_m)] = .{
357 .llvm_name = "armv6-m",357 .llvm_name = "armv6-m",
358 .description = "ARMv6m architecture",358 .description = "ARMv6m architecture",
359 .dependencies = sparseFeatureSet(&[_]Feature{359 .dependencies = featureSet(&[_]Feature{
360 .db,360 .db,
361 .mclass,361 .mclass,
362 .noarm,362 .noarm,
...@@ -368,21 +368,21 @@ pub const all_features = blk: {...@@ -368,21 +368,21 @@ pub const all_features = blk: {
368 result[@enumToInt(Feature.armv6j)] = .{368 result[@enumToInt(Feature.armv6j)] = .{
369 .llvm_name = "armv6j",369 .llvm_name = "armv6j",
370 .description = "ARMv7a architecture",370 .description = "ARMv7a architecture",
371 .dependencies = sparseFeatureSet(&[_]Feature{371 .dependencies = featureSet(&[_]Feature{
372 .armv6,372 .armv6,
373 }),373 }),
374 };374 };
375 result[@enumToInt(Feature.armv6k)] = .{375 result[@enumToInt(Feature.armv6k)] = .{
376 .llvm_name = "armv6k",376 .llvm_name = "armv6k",
377 .description = "ARMv6k architecture",377 .description = "ARMv6k architecture",
378 .dependencies = sparseFeatureSet(&[_]Feature{378 .dependencies = featureSet(&[_]Feature{
379 .v6k,379 .v6k,
380 }),380 }),
381 };381 };
382 result[@enumToInt(Feature.armv6kz)] = .{382 result[@enumToInt(Feature.armv6kz)] = .{
383 .llvm_name = "armv6kz",383 .llvm_name = "armv6kz",
384 .description = "ARMv6kz architecture",384 .description = "ARMv6kz architecture",
385 .dependencies = sparseFeatureSet(&[_]Feature{385 .dependencies = featureSet(&[_]Feature{
386 .trustzone,386 .trustzone,
387 .v6k,387 .v6k,
388 }),388 }),
...@@ -390,7 +390,7 @@ pub const all_features = blk: {...@@ -390,7 +390,7 @@ pub const all_features = blk: {
390 result[@enumToInt(Feature.armv6s_m)] = .{390 result[@enumToInt(Feature.armv6s_m)] = .{
391 .llvm_name = "armv6s-m",391 .llvm_name = "armv6s-m",
392 .description = "ARMv6sm architecture",392 .description = "ARMv6sm architecture",
393 .dependencies = sparseFeatureSet(&[_]Feature{393 .dependencies = featureSet(&[_]Feature{
394 .db,394 .db,
395 .mclass,395 .mclass,
396 .noarm,396 .noarm,
...@@ -402,7 +402,7 @@ pub const all_features = blk: {...@@ -402,7 +402,7 @@ pub const all_features = blk: {
402 result[@enumToInt(Feature.armv6t2)] = .{402 result[@enumToInt(Feature.armv6t2)] = .{
403 .llvm_name = "armv6t2",403 .llvm_name = "armv6t2",
404 .description = "ARMv6t2 architecture",404 .description = "ARMv6t2 architecture",
405 .dependencies = sparseFeatureSet(&[_]Feature{405 .dependencies = featureSet(&[_]Feature{
406 .dsp,406 .dsp,
407 .v6t2,407 .v6t2,
408 }),408 }),
...@@ -410,7 +410,7 @@ pub const all_features = blk: {...@@ -410,7 +410,7 @@ pub const all_features = blk: {
410 result[@enumToInt(Feature.armv7_a)] = .{410 result[@enumToInt(Feature.armv7_a)] = .{
411 .llvm_name = "armv7-a",411 .llvm_name = "armv7-a",
412 .description = "ARMv7a architecture",412 .description = "ARMv7a architecture",
413 .dependencies = sparseFeatureSet(&[_]Feature{413 .dependencies = featureSet(&[_]Feature{
414 .aclass,414 .aclass,
415 .db,415 .db,
416 .dsp,416 .dsp,
...@@ -421,7 +421,7 @@ pub const all_features = blk: {...@@ -421,7 +421,7 @@ pub const all_features = blk: {
421 result[@enumToInt(Feature.armv7_m)] = .{421 result[@enumToInt(Feature.armv7_m)] = .{
422 .llvm_name = "armv7-m",422 .llvm_name = "armv7-m",
423 .description = "ARMv7m architecture",423 .description = "ARMv7m architecture",
424 .dependencies = sparseFeatureSet(&[_]Feature{424 .dependencies = featureSet(&[_]Feature{
425 .db,425 .db,
426 .hwdiv,426 .hwdiv,
427 .mclass,427 .mclass,
...@@ -434,7 +434,7 @@ pub const all_features = blk: {...@@ -434,7 +434,7 @@ pub const all_features = blk: {
434 result[@enumToInt(Feature.armv7_r)] = .{434 result[@enumToInt(Feature.armv7_r)] = .{
435 .llvm_name = "armv7-r",435 .llvm_name = "armv7-r",
436 .description = "ARMv7r architecture",436 .description = "ARMv7r architecture",
437 .dependencies = sparseFeatureSet(&[_]Feature{437 .dependencies = featureSet(&[_]Feature{
438 .db,438 .db,
439 .dsp,439 .dsp,
440 .hwdiv,440 .hwdiv,
...@@ -445,7 +445,7 @@ pub const all_features = blk: {...@@ -445,7 +445,7 @@ pub const all_features = blk: {
445 result[@enumToInt(Feature.armv7e_m)] = .{445 result[@enumToInt(Feature.armv7e_m)] = .{
446 .llvm_name = "armv7e-m",446 .llvm_name = "armv7e-m",
447 .description = "ARMv7em architecture",447 .description = "ARMv7em architecture",
448 .dependencies = sparseFeatureSet(&[_]Feature{448 .dependencies = featureSet(&[_]Feature{
449 .db,449 .db,
450 .dsp,450 .dsp,
451 .hwdiv,451 .hwdiv,
...@@ -459,21 +459,21 @@ pub const all_features = blk: {...@@ -459,21 +459,21 @@ pub const all_features = blk: {
459 result[@enumToInt(Feature.armv7k)] = .{459 result[@enumToInt(Feature.armv7k)] = .{
460 .llvm_name = "armv7k",460 .llvm_name = "armv7k",
461 .description = "ARMv7a architecture",461 .description = "ARMv7a architecture",
462 .dependencies = sparseFeatureSet(&[_]Feature{462 .dependencies = featureSet(&[_]Feature{
463 .armv7_a,463 .armv7_a,
464 }),464 }),
465 };465 };
466 result[@enumToInt(Feature.armv7s)] = .{466 result[@enumToInt(Feature.armv7s)] = .{
467 .llvm_name = "armv7s",467 .llvm_name = "armv7s",
468 .description = "ARMv7a architecture",468 .description = "ARMv7a architecture",
469 .dependencies = sparseFeatureSet(&[_]Feature{469 .dependencies = featureSet(&[_]Feature{
470 .armv7_a,470 .armv7_a,
471 }),471 }),
472 };472 };
473 result[@enumToInt(Feature.armv7ve)] = .{473 result[@enumToInt(Feature.armv7ve)] = .{
474 .llvm_name = "armv7ve",474 .llvm_name = "armv7ve",
475 .description = "ARMv7ve architecture",475 .description = "ARMv7ve architecture",
476 .dependencies = sparseFeatureSet(&[_]Feature{476 .dependencies = featureSet(&[_]Feature{
477 .aclass,477 .aclass,
478 .db,478 .db,
479 .dsp,479 .dsp,
...@@ -487,7 +487,7 @@ pub const all_features = blk: {...@@ -487,7 +487,7 @@ pub const all_features = blk: {
487 result[@enumToInt(Feature.armv8_a)] = .{487 result[@enumToInt(Feature.armv8_a)] = .{
488 .llvm_name = "armv8-a",488 .llvm_name = "armv8-a",
489 .description = "ARMv8a architecture",489 .description = "ARMv8a architecture",
490 .dependencies = sparseFeatureSet(&[_]Feature{490 .dependencies = featureSet(&[_]Feature{
491 .aclass,491 .aclass,
492 .crc,492 .crc,
493 .crypto,493 .crypto,
...@@ -504,7 +504,7 @@ pub const all_features = blk: {...@@ -504,7 +504,7 @@ pub const all_features = blk: {
504 result[@enumToInt(Feature.armv8_m_base)] = .{504 result[@enumToInt(Feature.armv8_m_base)] = .{
505 .llvm_name = "armv8-m.base",505 .llvm_name = "armv8-m.base",
506 .description = "ARMv8mBaseline architecture",506 .description = "ARMv8mBaseline architecture",
507 .dependencies = sparseFeatureSet(&[_]Feature{507 .dependencies = featureSet(&[_]Feature{
508 .@"8msecext",508 .@"8msecext",
509 .acquire_release,509 .acquire_release,
510 .db,510 .db,
...@@ -520,7 +520,7 @@ pub const all_features = blk: {...@@ -520,7 +520,7 @@ pub const all_features = blk: {
520 result[@enumToInt(Feature.armv8_m_main)] = .{520 result[@enumToInt(Feature.armv8_m_main)] = .{
521 .llvm_name = "armv8-m.main",521 .llvm_name = "armv8-m.main",
522 .description = "ARMv8mMainline architecture",522 .description = "ARMv8mMainline architecture",
523 .dependencies = sparseFeatureSet(&[_]Feature{523 .dependencies = featureSet(&[_]Feature{
524 .@"8msecext",524 .@"8msecext",
525 .acquire_release,525 .acquire_release,
526 .db,526 .db,
...@@ -534,7 +534,7 @@ pub const all_features = blk: {...@@ -534,7 +534,7 @@ pub const all_features = blk: {
534 result[@enumToInt(Feature.armv8_r)] = .{534 result[@enumToInt(Feature.armv8_r)] = .{
535 .llvm_name = "armv8-r",535 .llvm_name = "armv8-r",
536 .description = "ARMv8r architecture",536 .description = "ARMv8r architecture",
537 .dependencies = sparseFeatureSet(&[_]Feature{537 .dependencies = featureSet(&[_]Feature{
538 .crc,538 .crc,
539 .db,539 .db,
540 .dfb,540 .dfb,
...@@ -550,7 +550,7 @@ pub const all_features = blk: {...@@ -550,7 +550,7 @@ pub const all_features = blk: {
550 result[@enumToInt(Feature.armv8_1_a)] = .{550 result[@enumToInt(Feature.armv8_1_a)] = .{
551 .llvm_name = "armv8.1-a",551 .llvm_name = "armv8.1-a",
552 .description = "ARMv81a architecture",552 .description = "ARMv81a architecture",
553 .dependencies = sparseFeatureSet(&[_]Feature{553 .dependencies = featureSet(&[_]Feature{
554 .aclass,554 .aclass,
555 .crc,555 .crc,
556 .crypto,556 .crypto,
...@@ -567,7 +567,7 @@ pub const all_features = blk: {...@@ -567,7 +567,7 @@ pub const all_features = blk: {
567 result[@enumToInt(Feature.armv8_1_m_main)] = .{567 result[@enumToInt(Feature.armv8_1_m_main)] = .{
568 .llvm_name = "armv8.1-m.main",568 .llvm_name = "armv8.1-m.main",
569 .description = "ARMv81mMainline architecture",569 .description = "ARMv81mMainline architecture",
570 .dependencies = sparseFeatureSet(&[_]Feature{570 .dependencies = featureSet(&[_]Feature{
571 .@"8msecext",571 .@"8msecext",
572 .acquire_release,572 .acquire_release,
573 .db,573 .db,
...@@ -583,7 +583,7 @@ pub const all_features = blk: {...@@ -583,7 +583,7 @@ pub const all_features = blk: {
583 result[@enumToInt(Feature.armv8_2_a)] = .{583 result[@enumToInt(Feature.armv8_2_a)] = .{
584 .llvm_name = "armv8.2-a",584 .llvm_name = "armv8.2-a",
585 .description = "ARMv82a architecture",585 .description = "ARMv82a architecture",
586 .dependencies = sparseFeatureSet(&[_]Feature{586 .dependencies = featureSet(&[_]Feature{
587 .aclass,587 .aclass,
588 .crc,588 .crc,
589 .crypto,589 .crypto,
...@@ -601,7 +601,7 @@ pub const all_features = blk: {...@@ -601,7 +601,7 @@ pub const all_features = blk: {
601 result[@enumToInt(Feature.armv8_3_a)] = .{601 result[@enumToInt(Feature.armv8_3_a)] = .{
602 .llvm_name = "armv8.3-a",602 .llvm_name = "armv8.3-a",
603 .description = "ARMv83a architecture",603 .description = "ARMv83a architecture",
604 .dependencies = sparseFeatureSet(&[_]Feature{604 .dependencies = featureSet(&[_]Feature{
605 .aclass,605 .aclass,
606 .crc,606 .crc,
607 .crypto,607 .crypto,
...@@ -619,7 +619,7 @@ pub const all_features = blk: {...@@ -619,7 +619,7 @@ pub const all_features = blk: {
619 result[@enumToInt(Feature.armv8_4_a)] = .{619 result[@enumToInt(Feature.armv8_4_a)] = .{
620 .llvm_name = "armv8.4-a",620 .llvm_name = "armv8.4-a",
621 .description = "ARMv84a architecture",621 .description = "ARMv84a architecture",
622 .dependencies = sparseFeatureSet(&[_]Feature{622 .dependencies = featureSet(&[_]Feature{
623 .aclass,623 .aclass,
624 .crc,624 .crc,
625 .crypto,625 .crypto,
...@@ -638,7 +638,7 @@ pub const all_features = blk: {...@@ -638,7 +638,7 @@ pub const all_features = blk: {
638 result[@enumToInt(Feature.armv8_5_a)] = .{638 result[@enumToInt(Feature.armv8_5_a)] = .{
639 .llvm_name = "armv8.5-a",639 .llvm_name = "armv8.5-a",
640 .description = "ARMv85a architecture",640 .description = "ARMv85a architecture",
641 .dependencies = sparseFeatureSet(&[_]Feature{641 .dependencies = featureSet(&[_]Feature{
642 .aclass,642 .aclass,
643 .crc,643 .crc,
644 .crypto,644 .crypto,
...@@ -657,27 +657,27 @@ pub const all_features = blk: {...@@ -657,27 +657,27 @@ pub const all_features = blk: {
657 result[@enumToInt(Feature.avoid_movs_shop)] = .{657 result[@enumToInt(Feature.avoid_movs_shop)] = .{
658 .llvm_name = "avoid-movs-shop",658 .llvm_name = "avoid-movs-shop",
659 .description = "Avoid movs instructions with shifter operand",659 .description = "Avoid movs instructions with shifter operand",
660 .dependencies = sparseFeatureSet(&[_]Feature{}),660 .dependencies = featureSet(&[_]Feature{}),
661 };661 };
662 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{662 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{
663 .llvm_name = "avoid-partial-cpsr",663 .llvm_name = "avoid-partial-cpsr",
664 .description = "Avoid CPSR partial update for OOO execution",664 .description = "Avoid CPSR partial update for OOO execution",
665 .dependencies = sparseFeatureSet(&[_]Feature{}),665 .dependencies = featureSet(&[_]Feature{}),
666 };666 };
667 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{667 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
668 .llvm_name = "cheap-predicable-cpsr",668 .llvm_name = "cheap-predicable-cpsr",
669 .description = "Disable +1 predication cost for instructions updating CPSR",669 .description = "Disable +1 predication cost for instructions updating CPSR",
670 .dependencies = sparseFeatureSet(&[_]Feature{}),670 .dependencies = featureSet(&[_]Feature{}),
671 };671 };
672 result[@enumToInt(Feature.crc)] = .{672 result[@enumToInt(Feature.crc)] = .{
673 .llvm_name = "crc",673 .llvm_name = "crc",
674 .description = "Enable support for CRC instructions",674 .description = "Enable support for CRC instructions",
675 .dependencies = sparseFeatureSet(&[_]Feature{}),675 .dependencies = featureSet(&[_]Feature{}),
676 };676 };
677 result[@enumToInt(Feature.crypto)] = .{677 result[@enumToInt(Feature.crypto)] = .{
678 .llvm_name = "crypto",678 .llvm_name = "crypto",
679 .description = "Enable support for Cryptography extensions",679 .description = "Enable support for Cryptography extensions",
680 .dependencies = sparseFeatureSet(&[_]Feature{680 .dependencies = featureSet(&[_]Feature{
681 .aes,681 .aes,
682 .neon,682 .neon,
683 .sha2,683 .sha2,
...@@ -686,54 +686,54 @@ pub const all_features = blk: {...@@ -686,54 +686,54 @@ pub const all_features = blk: {
686 result[@enumToInt(Feature.d32)] = .{686 result[@enumToInt(Feature.d32)] = .{
687 .llvm_name = "d32",687 .llvm_name = "d32",
688 .description = "Extend FP to 32 double registers",688 .description = "Extend FP to 32 double registers",
689 .dependencies = sparseFeatureSet(&[_]Feature{}),689 .dependencies = featureSet(&[_]Feature{}),
690 };690 };
691 result[@enumToInt(Feature.db)] = .{691 result[@enumToInt(Feature.db)] = .{
692 .llvm_name = "db",692 .llvm_name = "db",
693 .description = "Has data barrier (dmb/dsb) instructions",693 .description = "Has data barrier (dmb/dsb) instructions",
694 .dependencies = sparseFeatureSet(&[_]Feature{}),694 .dependencies = featureSet(&[_]Feature{}),
695 };695 };
696 result[@enumToInt(Feature.dfb)] = .{696 result[@enumToInt(Feature.dfb)] = .{
697 .llvm_name = "dfb",697 .llvm_name = "dfb",
698 .description = "Has full data barrier (dfb) instruction",698 .description = "Has full data barrier (dfb) instruction",
699 .dependencies = sparseFeatureSet(&[_]Feature{}),699 .dependencies = featureSet(&[_]Feature{}),
700 };700 };
701 result[@enumToInt(Feature.disable_postra_scheduler)] = .{701 result[@enumToInt(Feature.disable_postra_scheduler)] = .{
702 .llvm_name = "disable-postra-scheduler",702 .llvm_name = "disable-postra-scheduler",
703 .description = "Don't schedule again after register allocation",703 .description = "Don't schedule again after register allocation",
704 .dependencies = sparseFeatureSet(&[_]Feature{}),704 .dependencies = featureSet(&[_]Feature{}),
705 };705 };
706 result[@enumToInt(Feature.dont_widen_vmovs)] = .{706 result[@enumToInt(Feature.dont_widen_vmovs)] = .{
707 .llvm_name = "dont-widen-vmovs",707 .llvm_name = "dont-widen-vmovs",
708 .description = "Don't widen VMOVS to VMOVD",708 .description = "Don't widen VMOVS to VMOVD",
709 .dependencies = sparseFeatureSet(&[_]Feature{}),709 .dependencies = featureSet(&[_]Feature{}),
710 };710 };
711 result[@enumToInt(Feature.dotprod)] = .{711 result[@enumToInt(Feature.dotprod)] = .{
712 .llvm_name = "dotprod",712 .llvm_name = "dotprod",
713 .description = "Enable support for dot product instructions",713 .description = "Enable support for dot product instructions",
714 .dependencies = sparseFeatureSet(&[_]Feature{714 .dependencies = featureSet(&[_]Feature{
715 .neon,715 .neon,
716 }),716 }),
717 };717 };
718 result[@enumToInt(Feature.dsp)] = .{718 result[@enumToInt(Feature.dsp)] = .{
719 .llvm_name = "dsp",719 .llvm_name = "dsp",
720 .description = "Supports DSP instructions in ARM and/or Thumb2",720 .description = "Supports DSP instructions in ARM and/or Thumb2",
721 .dependencies = sparseFeatureSet(&[_]Feature{}),721 .dependencies = featureSet(&[_]Feature{}),
722 };722 };
723 result[@enumToInt(Feature.execute_only)] = .{723 result[@enumToInt(Feature.execute_only)] = .{
724 .llvm_name = "execute-only",724 .llvm_name = "execute-only",
725 .description = "Enable the generation of execute only code.",725 .description = "Enable the generation of execute only code.",
726 .dependencies = sparseFeatureSet(&[_]Feature{}),726 .dependencies = featureSet(&[_]Feature{}),
727 };727 };
728 result[@enumToInt(Feature.expand_fp_mlx)] = .{728 result[@enumToInt(Feature.expand_fp_mlx)] = .{
729 .llvm_name = "expand-fp-mlx",729 .llvm_name = "expand-fp-mlx",
730 .description = "Expand VFP/NEON MLA/MLS instructions",730 .description = "Expand VFP/NEON MLA/MLS instructions",
731 .dependencies = sparseFeatureSet(&[_]Feature{}),731 .dependencies = featureSet(&[_]Feature{}),
732 };732 };
733 result[@enumToInt(Feature.exynos)] = .{733 result[@enumToInt(Feature.exynos)] = .{
734 .llvm_name = "exynos",734 .llvm_name = "exynos",
735 .description = "Samsung Exynos processors",735 .description = "Samsung Exynos processors",
736 .dependencies = sparseFeatureSet(&[_]Feature{736 .dependencies = featureSet(&[_]Feature{
737 .crc,737 .crc,
738 .crypto,738 .crypto,
739 .expand_fp_mlx,739 .expand_fp_mlx,
...@@ -756,7 +756,7 @@ pub const all_features = blk: {...@@ -756,7 +756,7 @@ pub const all_features = blk: {
756 result[@enumToInt(Feature.fp_armv8)] = .{756 result[@enumToInt(Feature.fp_armv8)] = .{
757 .llvm_name = "fp-armv8",757 .llvm_name = "fp-armv8",
758 .description = "Enable ARMv8 FP",758 .description = "Enable ARMv8 FP",
759 .dependencies = sparseFeatureSet(&[_]Feature{759 .dependencies = featureSet(&[_]Feature{
760 .fp_armv8d16,760 .fp_armv8d16,
761 .fp_armv8sp,761 .fp_armv8sp,
762 .vfp4,762 .vfp4,
...@@ -765,7 +765,7 @@ pub const all_features = blk: {...@@ -765,7 +765,7 @@ pub const all_features = blk: {
765 result[@enumToInt(Feature.fp_armv8d16)] = .{765 result[@enumToInt(Feature.fp_armv8d16)] = .{
766 .llvm_name = "fp-armv8d16",766 .llvm_name = "fp-armv8d16",
767 .description = "Enable ARMv8 FP with only 16 d-registers",767 .description = "Enable ARMv8 FP with only 16 d-registers",
768 .dependencies = sparseFeatureSet(&[_]Feature{768 .dependencies = featureSet(&[_]Feature{
769 .fp_armv8d16sp,769 .fp_armv8d16sp,
770 .fp64,770 .fp64,
771 .vfp4d16,771 .vfp4d16,
...@@ -774,14 +774,14 @@ pub const all_features = blk: {...@@ -774,14 +774,14 @@ pub const all_features = blk: {
774 result[@enumToInt(Feature.fp_armv8d16sp)] = .{774 result[@enumToInt(Feature.fp_armv8d16sp)] = .{
775 .llvm_name = "fp-armv8d16sp",775 .llvm_name = "fp-armv8d16sp",
776 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",776 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",
777 .dependencies = sparseFeatureSet(&[_]Feature{777 .dependencies = featureSet(&[_]Feature{
778 .vfp4d16sp,778 .vfp4d16sp,
779 }),779 }),
780 };780 };
781 result[@enumToInt(Feature.fp_armv8sp)] = .{781 result[@enumToInt(Feature.fp_armv8sp)] = .{
782 .llvm_name = "fp-armv8sp",782 .llvm_name = "fp-armv8sp",
783 .description = "Enable ARMv8 FP with no double precision",783 .description = "Enable ARMv8 FP with no double precision",
784 .dependencies = sparseFeatureSet(&[_]Feature{784 .dependencies = featureSet(&[_]Feature{
785 .d32,785 .d32,
786 .fp_armv8d16sp,786 .fp_armv8d16sp,
787 .vfp4sp,787 .vfp4sp,
...@@ -790,50 +790,50 @@ pub const all_features = blk: {...@@ -790,50 +790,50 @@ pub const all_features = blk: {
790 result[@enumToInt(Feature.fp16)] = .{790 result[@enumToInt(Feature.fp16)] = .{
791 .llvm_name = "fp16",791 .llvm_name = "fp16",
792 .description = "Enable half-precision floating point",792 .description = "Enable half-precision floating point",
793 .dependencies = sparseFeatureSet(&[_]Feature{}),793 .dependencies = featureSet(&[_]Feature{}),
794 };794 };
795 result[@enumToInt(Feature.fp16fml)] = .{795 result[@enumToInt(Feature.fp16fml)] = .{
796 .llvm_name = "fp16fml",796 .llvm_name = "fp16fml",
797 .description = "Enable full half-precision floating point fml instructions",797 .description = "Enable full half-precision floating point fml instructions",
798 .dependencies = sparseFeatureSet(&[_]Feature{798 .dependencies = featureSet(&[_]Feature{
799 .fullfp16,799 .fullfp16,
800 }),800 }),
801 };801 };
802 result[@enumToInt(Feature.fp64)] = .{802 result[@enumToInt(Feature.fp64)] = .{
803 .llvm_name = "fp64",803 .llvm_name = "fp64",
804 .description = "Floating point unit supports double precision",804 .description = "Floating point unit supports double precision",
805 .dependencies = sparseFeatureSet(&[_]Feature{805 .dependencies = featureSet(&[_]Feature{
806 .fpregs64,806 .fpregs64,
807 }),807 }),
808 };808 };
809 result[@enumToInt(Feature.fpao)] = .{809 result[@enumToInt(Feature.fpao)] = .{
810 .llvm_name = "fpao",810 .llvm_name = "fpao",
811 .description = "Enable fast computation of positive address offsets",811 .description = "Enable fast computation of positive address offsets",
812 .dependencies = sparseFeatureSet(&[_]Feature{}),812 .dependencies = featureSet(&[_]Feature{}),
813 };813 };
814 result[@enumToInt(Feature.fpregs)] = .{814 result[@enumToInt(Feature.fpregs)] = .{
815 .llvm_name = "fpregs",815 .llvm_name = "fpregs",
816 .description = "Enable FP registers",816 .description = "Enable FP registers",
817 .dependencies = sparseFeatureSet(&[_]Feature{}),817 .dependencies = featureSet(&[_]Feature{}),
818 };818 };
819 result[@enumToInt(Feature.fpregs16)] = .{819 result[@enumToInt(Feature.fpregs16)] = .{
820 .llvm_name = "fpregs16",820 .llvm_name = "fpregs16",
821 .description = "Enable 16-bit FP registers",821 .description = "Enable 16-bit FP registers",
822 .dependencies = sparseFeatureSet(&[_]Feature{822 .dependencies = featureSet(&[_]Feature{
823 .fpregs,823 .fpregs,
824 }),824 }),
825 };825 };
826 result[@enumToInt(Feature.fpregs64)] = .{826 result[@enumToInt(Feature.fpregs64)] = .{
827 .llvm_name = "fpregs64",827 .llvm_name = "fpregs64",
828 .description = "Enable 64-bit FP registers",828 .description = "Enable 64-bit FP registers",
829 .dependencies = sparseFeatureSet(&[_]Feature{829 .dependencies = featureSet(&[_]Feature{
830 .fpregs,830 .fpregs,
831 }),831 }),
832 };832 };
833 result[@enumToInt(Feature.fullfp16)] = .{833 result[@enumToInt(Feature.fullfp16)] = .{
834 .llvm_name = "fullfp16",834 .llvm_name = "fullfp16",
835 .description = "Enable full half-precision floating point",835 .description = "Enable full half-precision floating point",
836 .dependencies = sparseFeatureSet(&[_]Feature{836 .dependencies = featureSet(&[_]Feature{
837 .fp_armv8d16sp,837 .fp_armv8d16sp,
838 .fpregs16,838 .fpregs16,
839 }),839 }),
...@@ -841,86 +841,86 @@ pub const all_features = blk: {...@@ -841,86 +841,86 @@ pub const all_features = blk: {
841 result[@enumToInt(Feature.fuse_aes)] = .{841 result[@enumToInt(Feature.fuse_aes)] = .{
842 .llvm_name = "fuse-aes",842 .llvm_name = "fuse-aes",
843 .description = "CPU fuses AES crypto operations",843 .description = "CPU fuses AES crypto operations",
844 .dependencies = sparseFeatureSet(&[_]Feature{}),844 .dependencies = featureSet(&[_]Feature{}),
845 };845 };
846 result[@enumToInt(Feature.fuse_literals)] = .{846 result[@enumToInt(Feature.fuse_literals)] = .{
847 .llvm_name = "fuse-literals",847 .llvm_name = "fuse-literals",
848 .description = "CPU fuses literal generation operations",848 .description = "CPU fuses literal generation operations",
849 .dependencies = sparseFeatureSet(&[_]Feature{}),849 .dependencies = featureSet(&[_]Feature{}),
850 };850 };
851 result[@enumToInt(Feature.hwdiv)] = .{851 result[@enumToInt(Feature.hwdiv)] = .{
852 .llvm_name = "hwdiv",852 .llvm_name = "hwdiv",
853 .description = "Enable divide instructions in Thumb",853 .description = "Enable divide instructions in Thumb",
854 .dependencies = sparseFeatureSet(&[_]Feature{}),854 .dependencies = featureSet(&[_]Feature{}),
855 };855 };
856 result[@enumToInt(Feature.hwdiv_arm)] = .{856 result[@enumToInt(Feature.hwdiv_arm)] = .{
857 .llvm_name = "hwdiv-arm",857 .llvm_name = "hwdiv-arm",
858 .description = "Enable divide instructions in ARM mode",858 .description = "Enable divide instructions in ARM mode",
859 .dependencies = sparseFeatureSet(&[_]Feature{}),859 .dependencies = featureSet(&[_]Feature{}),
860 };860 };
861 result[@enumToInt(Feature.iwmmxt)] = .{861 result[@enumToInt(Feature.iwmmxt)] = .{
862 .llvm_name = "iwmmxt",862 .llvm_name = "iwmmxt",
863 .description = "ARMv5te architecture",863 .description = "ARMv5te architecture",
864 .dependencies = sparseFeatureSet(&[_]Feature{864 .dependencies = featureSet(&[_]Feature{
865 .armv5te,865 .armv5te,
866 }),866 }),
867 };867 };
868 result[@enumToInt(Feature.iwmmxt2)] = .{868 result[@enumToInt(Feature.iwmmxt2)] = .{
869 .llvm_name = "iwmmxt2",869 .llvm_name = "iwmmxt2",
870 .description = "ARMv5te architecture",870 .description = "ARMv5te architecture",
871 .dependencies = sparseFeatureSet(&[_]Feature{871 .dependencies = featureSet(&[_]Feature{
872 .armv5te,872 .armv5te,
873 }),873 }),
874 };874 };
875 result[@enumToInt(Feature.krait)] = .{875 result[@enumToInt(Feature.krait)] = .{
876 .llvm_name = "krait",876 .llvm_name = "krait",
877 .description = "Qualcomm Krait processors",877 .description = "Qualcomm Krait processors",
878 .dependencies = sparseFeatureSet(&[_]Feature{}),878 .dependencies = featureSet(&[_]Feature{}),
879 };879 };
880 result[@enumToInt(Feature.kryo)] = .{880 result[@enumToInt(Feature.kryo)] = .{
881 .llvm_name = "kryo",881 .llvm_name = "kryo",
882 .description = "Qualcomm Kryo processors",882 .description = "Qualcomm Kryo processors",
883 .dependencies = sparseFeatureSet(&[_]Feature{}),883 .dependencies = featureSet(&[_]Feature{}),
884 };884 };
885 result[@enumToInt(Feature.lob)] = .{885 result[@enumToInt(Feature.lob)] = .{
886 .llvm_name = "lob",886 .llvm_name = "lob",
887 .description = "Enable Low Overhead Branch extensions",887 .description = "Enable Low Overhead Branch extensions",
888 .dependencies = sparseFeatureSet(&[_]Feature{}),888 .dependencies = featureSet(&[_]Feature{}),
889 };889 };
890 result[@enumToInt(Feature.long_calls)] = .{890 result[@enumToInt(Feature.long_calls)] = .{
891 .llvm_name = "long-calls",891 .llvm_name = "long-calls",
892 .description = "Generate calls via indirect call instructions",892 .description = "Generate calls via indirect call instructions",
893 .dependencies = sparseFeatureSet(&[_]Feature{}),893 .dependencies = featureSet(&[_]Feature{}),
894 };894 };
895 result[@enumToInt(Feature.loop_align)] = .{895 result[@enumToInt(Feature.loop_align)] = .{
896 .llvm_name = "loop-align",896 .llvm_name = "loop-align",
897 .description = "Prefer 32-bit alignment for loops",897 .description = "Prefer 32-bit alignment for loops",
898 .dependencies = sparseFeatureSet(&[_]Feature{}),898 .dependencies = featureSet(&[_]Feature{}),
899 };899 };
900 result[@enumToInt(Feature.m3)] = .{900 result[@enumToInt(Feature.m3)] = .{
901 .llvm_name = "m3",901 .llvm_name = "m3",
902 .description = "Cortex-M3 ARM processors",902 .description = "Cortex-M3 ARM processors",
903 .dependencies = sparseFeatureSet(&[_]Feature{}),903 .dependencies = featureSet(&[_]Feature{}),
904 };904 };
905 result[@enumToInt(Feature.mclass)] = .{905 result[@enumToInt(Feature.mclass)] = .{
906 .llvm_name = "mclass",906 .llvm_name = "mclass",
907 .description = "Is microcontroller profile ('M' series)",907 .description = "Is microcontroller profile ('M' series)",
908 .dependencies = sparseFeatureSet(&[_]Feature{}),908 .dependencies = featureSet(&[_]Feature{}),
909 };909 };
910 result[@enumToInt(Feature.mp)] = .{910 result[@enumToInt(Feature.mp)] = .{
911 .llvm_name = "mp",911 .llvm_name = "mp",
912 .description = "Supports Multiprocessing extension",912 .description = "Supports Multiprocessing extension",
913 .dependencies = sparseFeatureSet(&[_]Feature{}),913 .dependencies = featureSet(&[_]Feature{}),
914 };914 };
915 result[@enumToInt(Feature.muxed_units)] = .{915 result[@enumToInt(Feature.muxed_units)] = .{
916 .llvm_name = "muxed-units",916 .llvm_name = "muxed-units",
917 .description = "Has muxed AGU and NEON/FPU",917 .description = "Has muxed AGU and NEON/FPU",
918 .dependencies = sparseFeatureSet(&[_]Feature{}),918 .dependencies = featureSet(&[_]Feature{}),
919 };919 };
920 result[@enumToInt(Feature.mve)] = .{920 result[@enumToInt(Feature.mve)] = .{
921 .llvm_name = "mve",921 .llvm_name = "mve",
922 .description = "Support M-Class Vector Extension with integer ops",922 .description = "Support M-Class Vector Extension with integer ops",
923 .dependencies = sparseFeatureSet(&[_]Feature{923 .dependencies = featureSet(&[_]Feature{
924 .dsp,924 .dsp,
925 .fpregs16,925 .fpregs16,
926 .fpregs64,926 .fpregs64,
...@@ -930,7 +930,7 @@ pub const all_features = blk: {...@@ -930,7 +930,7 @@ pub const all_features = blk: {
930 result[@enumToInt(Feature.mve_fp)] = .{930 result[@enumToInt(Feature.mve_fp)] = .{
931 .llvm_name = "mve.fp",931 .llvm_name = "mve.fp",
932 .description = "Support M-Class Vector Extension with integer and floating ops",932 .description = "Support M-Class Vector Extension with integer and floating ops",
933 .dependencies = sparseFeatureSet(&[_]Feature{933 .dependencies = featureSet(&[_]Feature{
934 .fp_armv8d16sp,934 .fp_armv8d16sp,
935 .fullfp16,935 .fullfp16,
936 .mve,936 .mve,
...@@ -939,248 +939,248 @@ pub const all_features = blk: {...@@ -939,248 +939,248 @@ pub const all_features = blk: {
939 result[@enumToInt(Feature.nacl_trap)] = .{939 result[@enumToInt(Feature.nacl_trap)] = .{
940 .llvm_name = "nacl-trap",940 .llvm_name = "nacl-trap",
941 .description = "NaCl trap",941 .description = "NaCl trap",
942 .dependencies = sparseFeatureSet(&[_]Feature{}),942 .dependencies = featureSet(&[_]Feature{}),
943 };943 };
944 result[@enumToInt(Feature.neon)] = .{944 result[@enumToInt(Feature.neon)] = .{
945 .llvm_name = "neon",945 .llvm_name = "neon",
946 .description = "Enable NEON instructions",946 .description = "Enable NEON instructions",
947 .dependencies = sparseFeatureSet(&[_]Feature{947 .dependencies = featureSet(&[_]Feature{
948 .vfp3,948 .vfp3,
949 }),949 }),
950 };950 };
951 result[@enumToInt(Feature.neon_fpmovs)] = .{951 result[@enumToInt(Feature.neon_fpmovs)] = .{
952 .llvm_name = "neon-fpmovs",952 .llvm_name = "neon-fpmovs",
953 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",953 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
954 .dependencies = sparseFeatureSet(&[_]Feature{}),954 .dependencies = featureSet(&[_]Feature{}),
955 };955 };
956 result[@enumToInt(Feature.neonfp)] = .{956 result[@enumToInt(Feature.neonfp)] = .{
957 .llvm_name = "neonfp",957 .llvm_name = "neonfp",
958 .description = "Use NEON for single precision FP",958 .description = "Use NEON for single precision FP",
959 .dependencies = sparseFeatureSet(&[_]Feature{}),959 .dependencies = featureSet(&[_]Feature{}),
960 };960 };
961 result[@enumToInt(Feature.no_branch_predictor)] = .{961 result[@enumToInt(Feature.no_branch_predictor)] = .{
962 .llvm_name = "no-branch-predictor",962 .llvm_name = "no-branch-predictor",
963 .description = "Has no branch predictor",963 .description = "Has no branch predictor",
964 .dependencies = sparseFeatureSet(&[_]Feature{}),964 .dependencies = featureSet(&[_]Feature{}),
965 };965 };
966 result[@enumToInt(Feature.no_movt)] = .{966 result[@enumToInt(Feature.no_movt)] = .{
967 .llvm_name = "no-movt",967 .llvm_name = "no-movt",
968 .description = "Don't use movt/movw pairs for 32-bit imms",968 .description = "Don't use movt/movw pairs for 32-bit imms",
969 .dependencies = sparseFeatureSet(&[_]Feature{}),969 .dependencies = featureSet(&[_]Feature{}),
970 };970 };
971 result[@enumToInt(Feature.no_neg_immediates)] = .{971 result[@enumToInt(Feature.no_neg_immediates)] = .{
972 .llvm_name = "no-neg-immediates",972 .llvm_name = "no-neg-immediates",
973 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",973 .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{}),
975 };975 };
976 result[@enumToInt(Feature.noarm)] = .{976 result[@enumToInt(Feature.noarm)] = .{
977 .llvm_name = "noarm",977 .llvm_name = "noarm",
978 .description = "Does not support ARM mode execution",978 .description = "Does not support ARM mode execution",
979 .dependencies = sparseFeatureSet(&[_]Feature{}),979 .dependencies = featureSet(&[_]Feature{}),
980 };980 };
981 result[@enumToInt(Feature.nonpipelined_vfp)] = .{981 result[@enumToInt(Feature.nonpipelined_vfp)] = .{
982 .llvm_name = "nonpipelined-vfp",982 .llvm_name = "nonpipelined-vfp",
983 .description = "VFP instructions are not pipelined",983 .description = "VFP instructions are not pipelined",
984 .dependencies = sparseFeatureSet(&[_]Feature{}),984 .dependencies = featureSet(&[_]Feature{}),
985 };985 };
986 result[@enumToInt(Feature.perfmon)] = .{986 result[@enumToInt(Feature.perfmon)] = .{
987 .llvm_name = "perfmon",987 .llvm_name = "perfmon",
988 .description = "Enable support for Performance Monitor extensions",988 .description = "Enable support for Performance Monitor extensions",
989 .dependencies = sparseFeatureSet(&[_]Feature{}),989 .dependencies = featureSet(&[_]Feature{}),
990 };990 };
991 result[@enumToInt(Feature.prefer_ishst)] = .{991 result[@enumToInt(Feature.prefer_ishst)] = .{
992 .llvm_name = "prefer-ishst",992 .llvm_name = "prefer-ishst",
993 .description = "Prefer ISHST barriers",993 .description = "Prefer ISHST barriers",
994 .dependencies = sparseFeatureSet(&[_]Feature{}),994 .dependencies = featureSet(&[_]Feature{}),
995 };995 };
996 result[@enumToInt(Feature.prefer_vmovsr)] = .{996 result[@enumToInt(Feature.prefer_vmovsr)] = .{
997 .llvm_name = "prefer-vmovsr",997 .llvm_name = "prefer-vmovsr",
998 .description = "Prefer VMOVSR",998 .description = "Prefer VMOVSR",
999 .dependencies = sparseFeatureSet(&[_]Feature{}),999 .dependencies = featureSet(&[_]Feature{}),
1000 };1000 };
1001 result[@enumToInt(Feature.prof_unpr)] = .{1001 result[@enumToInt(Feature.prof_unpr)] = .{
1002 .llvm_name = "prof-unpr",1002 .llvm_name = "prof-unpr",
1003 .description = "Is profitable to unpredicate",1003 .description = "Is profitable to unpredicate",
1004 .dependencies = sparseFeatureSet(&[_]Feature{}),1004 .dependencies = featureSet(&[_]Feature{}),
1005 };1005 };
1006 result[@enumToInt(Feature.r4)] = .{1006 result[@enumToInt(Feature.r4)] = .{
1007 .llvm_name = "r4",1007 .llvm_name = "r4",
1008 .description = "Cortex-R4 ARM processors",1008 .description = "Cortex-R4 ARM processors",
1009 .dependencies = sparseFeatureSet(&[_]Feature{}),1009 .dependencies = featureSet(&[_]Feature{}),
1010 };1010 };
1011 result[@enumToInt(Feature.r5)] = .{1011 result[@enumToInt(Feature.r5)] = .{
1012 .llvm_name = "r5",1012 .llvm_name = "r5",
1013 .description = "Cortex-R5 ARM processors",1013 .description = "Cortex-R5 ARM processors",
1014 .dependencies = sparseFeatureSet(&[_]Feature{}),1014 .dependencies = featureSet(&[_]Feature{}),
1015 };1015 };
1016 result[@enumToInt(Feature.r52)] = .{1016 result[@enumToInt(Feature.r52)] = .{
1017 .llvm_name = "r52",1017 .llvm_name = "r52",
1018 .description = "Cortex-R52 ARM processors",1018 .description = "Cortex-R52 ARM processors",
1019 .dependencies = sparseFeatureSet(&[_]Feature{}),1019 .dependencies = featureSet(&[_]Feature{}),
1020 };1020 };
1021 result[@enumToInt(Feature.r7)] = .{1021 result[@enumToInt(Feature.r7)] = .{
1022 .llvm_name = "r7",1022 .llvm_name = "r7",
1023 .description = "Cortex-R7 ARM processors",1023 .description = "Cortex-R7 ARM processors",
1024 .dependencies = sparseFeatureSet(&[_]Feature{}),1024 .dependencies = featureSet(&[_]Feature{}),
1025 };1025 };
1026 result[@enumToInt(Feature.ras)] = .{1026 result[@enumToInt(Feature.ras)] = .{
1027 .llvm_name = "ras",1027 .llvm_name = "ras",
1028 .description = "Enable Reliability, Availability and Serviceability extensions",1028 .description = "Enable Reliability, Availability and Serviceability extensions",
1029 .dependencies = sparseFeatureSet(&[_]Feature{}),1029 .dependencies = featureSet(&[_]Feature{}),
1030 };1030 };
1031 result[@enumToInt(Feature.rclass)] = .{1031 result[@enumToInt(Feature.rclass)] = .{
1032 .llvm_name = "rclass",1032 .llvm_name = "rclass",
1033 .description = "Is realtime profile ('R' series)",1033 .description = "Is realtime profile ('R' series)",
1034 .dependencies = sparseFeatureSet(&[_]Feature{}),1034 .dependencies = featureSet(&[_]Feature{}),
1035 };1035 };
1036 result[@enumToInt(Feature.read_tp_hard)] = .{1036 result[@enumToInt(Feature.read_tp_hard)] = .{
1037 .llvm_name = "read-tp-hard",1037 .llvm_name = "read-tp-hard",
1038 .description = "Reading thread pointer from register",1038 .description = "Reading thread pointer from register",
1039 .dependencies = sparseFeatureSet(&[_]Feature{}),1039 .dependencies = featureSet(&[_]Feature{}),
1040 };1040 };
1041 result[@enumToInt(Feature.reserve_r9)] = .{1041 result[@enumToInt(Feature.reserve_r9)] = .{
1042 .llvm_name = "reserve-r9",1042 .llvm_name = "reserve-r9",
1043 .description = "Reserve R9, making it unavailable as GPR",1043 .description = "Reserve R9, making it unavailable as GPR",
1044 .dependencies = sparseFeatureSet(&[_]Feature{}),1044 .dependencies = featureSet(&[_]Feature{}),
1045 };1045 };
1046 result[@enumToInt(Feature.ret_addr_stack)] = .{1046 result[@enumToInt(Feature.ret_addr_stack)] = .{
1047 .llvm_name = "ret-addr-stack",1047 .llvm_name = "ret-addr-stack",
1048 .description = "Has return address stack",1048 .description = "Has return address stack",
1049 .dependencies = sparseFeatureSet(&[_]Feature{}),1049 .dependencies = featureSet(&[_]Feature{}),
1050 };1050 };
1051 result[@enumToInt(Feature.sb)] = .{1051 result[@enumToInt(Feature.sb)] = .{
1052 .llvm_name = "sb",1052 .llvm_name = "sb",
1053 .description = "Enable v8.5a Speculation Barrier",1053 .description = "Enable v8.5a Speculation Barrier",
1054 .dependencies = sparseFeatureSet(&[_]Feature{}),1054 .dependencies = featureSet(&[_]Feature{}),
1055 };1055 };
1056 result[@enumToInt(Feature.sha2)] = .{1056 result[@enumToInt(Feature.sha2)] = .{
1057 .llvm_name = "sha2",1057 .llvm_name = "sha2",
1058 .description = "Enable SHA1 and SHA256 support",1058 .description = "Enable SHA1 and SHA256 support",
1059 .dependencies = sparseFeatureSet(&[_]Feature{1059 .dependencies = featureSet(&[_]Feature{
1060 .neon,1060 .neon,
1061 }),1061 }),
1062 };1062 };
1063 result[@enumToInt(Feature.slow_fp_brcc)] = .{1063 result[@enumToInt(Feature.slow_fp_brcc)] = .{
1064 .llvm_name = "slow-fp-brcc",1064 .llvm_name = "slow-fp-brcc",
1065 .description = "FP compare + branch is slow",1065 .description = "FP compare + branch is slow",
1066 .dependencies = sparseFeatureSet(&[_]Feature{}),1066 .dependencies = featureSet(&[_]Feature{}),
1067 };1067 };
1068 result[@enumToInt(Feature.slow_load_D_subreg)] = .{1068 result[@enumToInt(Feature.slow_load_D_subreg)] = .{
1069 .llvm_name = "slow-load-D-subreg",1069 .llvm_name = "slow-load-D-subreg",
1070 .description = "Loading into D subregs is slow",1070 .description = "Loading into D subregs is slow",
1071 .dependencies = sparseFeatureSet(&[_]Feature{}),1071 .dependencies = featureSet(&[_]Feature{}),
1072 };1072 };
1073 result[@enumToInt(Feature.slow_odd_reg)] = .{1073 result[@enumToInt(Feature.slow_odd_reg)] = .{
1074 .llvm_name = "slow-odd-reg",1074 .llvm_name = "slow-odd-reg",
1075 .description = "VLDM/VSTM starting with an odd register is slow",1075 .description = "VLDM/VSTM starting with an odd register is slow",
1076 .dependencies = sparseFeatureSet(&[_]Feature{}),1076 .dependencies = featureSet(&[_]Feature{}),
1077 };1077 };
1078 result[@enumToInt(Feature.slow_vdup32)] = .{1078 result[@enumToInt(Feature.slow_vdup32)] = .{
1079 .llvm_name = "slow-vdup32",1079 .llvm_name = "slow-vdup32",
1080 .description = "Has slow VDUP32 - prefer VMOV",1080 .description = "Has slow VDUP32 - prefer VMOV",
1081 .dependencies = sparseFeatureSet(&[_]Feature{}),1081 .dependencies = featureSet(&[_]Feature{}),
1082 };1082 };
1083 result[@enumToInt(Feature.slow_vgetlni32)] = .{1083 result[@enumToInt(Feature.slow_vgetlni32)] = .{
1084 .llvm_name = "slow-vgetlni32",1084 .llvm_name = "slow-vgetlni32",
1085 .description = "Has slow VGETLNi32 - prefer VMOV",1085 .description = "Has slow VGETLNi32 - prefer VMOV",
1086 .dependencies = sparseFeatureSet(&[_]Feature{}),1086 .dependencies = featureSet(&[_]Feature{}),
1087 };1087 };
1088 result[@enumToInt(Feature.slowfpvmlx)] = .{1088 result[@enumToInt(Feature.slowfpvmlx)] = .{
1089 .llvm_name = "slowfpvmlx",1089 .llvm_name = "slowfpvmlx",
1090 .description = "Disable VFP / NEON MAC instructions",1090 .description = "Disable VFP / NEON MAC instructions",
1091 .dependencies = sparseFeatureSet(&[_]Feature{}),1091 .dependencies = featureSet(&[_]Feature{}),
1092 };1092 };
1093 result[@enumToInt(Feature.soft_float)] = .{1093 result[@enumToInt(Feature.soft_float)] = .{
1094 .llvm_name = "soft-float",1094 .llvm_name = "soft-float",
1095 .description = "Use software floating point features.",1095 .description = "Use software floating point features.",
1096 .dependencies = sparseFeatureSet(&[_]Feature{}),1096 .dependencies = featureSet(&[_]Feature{}),
1097 };1097 };
1098 result[@enumToInt(Feature.splat_vfp_neon)] = .{1098 result[@enumToInt(Feature.splat_vfp_neon)] = .{
1099 .llvm_name = "splat-vfp-neon",1099 .llvm_name = "splat-vfp-neon",
1100 .description = "Splat register from VFP to NEON",1100 .description = "Splat register from VFP to NEON",
1101 .dependencies = sparseFeatureSet(&[_]Feature{1101 .dependencies = featureSet(&[_]Feature{
1102 .dont_widen_vmovs,1102 .dont_widen_vmovs,
1103 }),1103 }),
1104 };1104 };
1105 result[@enumToInt(Feature.strict_align)] = .{1105 result[@enumToInt(Feature.strict_align)] = .{
1106 .llvm_name = "strict-align",1106 .llvm_name = "strict-align",
1107 .description = "Disallow all unaligned memory access",1107 .description = "Disallow all unaligned memory access",
1108 .dependencies = sparseFeatureSet(&[_]Feature{}),1108 .dependencies = featureSet(&[_]Feature{}),
1109 };1109 };
1110 result[@enumToInt(Feature.swift)] = .{1110 result[@enumToInt(Feature.swift)] = .{
1111 .llvm_name = "swift",1111 .llvm_name = "swift",
1112 .description = "Swift ARM processors",1112 .description = "Swift ARM processors",
1113 .dependencies = sparseFeatureSet(&[_]Feature{}),1113 .dependencies = featureSet(&[_]Feature{}),
1114 };1114 };
1115 result[@enumToInt(Feature.thumb_mode)] = .{1115 result[@enumToInt(Feature.thumb_mode)] = .{
1116 .llvm_name = "thumb-mode",1116 .llvm_name = "thumb-mode",
1117 .description = "Thumb mode",1117 .description = "Thumb mode",
1118 .dependencies = sparseFeatureSet(&[_]Feature{}),1118 .dependencies = featureSet(&[_]Feature{}),
1119 };1119 };
1120 result[@enumToInt(Feature.thumb2)] = .{1120 result[@enumToInt(Feature.thumb2)] = .{
1121 .llvm_name = "thumb2",1121 .llvm_name = "thumb2",
1122 .description = "Enable Thumb2 instructions",1122 .description = "Enable Thumb2 instructions",
1123 .dependencies = sparseFeatureSet(&[_]Feature{}),1123 .dependencies = featureSet(&[_]Feature{}),
1124 };1124 };
1125 result[@enumToInt(Feature.trustzone)] = .{1125 result[@enumToInt(Feature.trustzone)] = .{
1126 .llvm_name = "trustzone",1126 .llvm_name = "trustzone",
1127 .description = "Enable support for TrustZone security extensions",1127 .description = "Enable support for TrustZone security extensions",
1128 .dependencies = sparseFeatureSet(&[_]Feature{}),1128 .dependencies = featureSet(&[_]Feature{}),
1129 };1129 };
1130 result[@enumToInt(Feature.use_aa)] = .{1130 result[@enumToInt(Feature.use_aa)] = .{
1131 .llvm_name = "use-aa",1131 .llvm_name = "use-aa",
1132 .description = "Use alias analysis during codegen",1132 .description = "Use alias analysis during codegen",
1133 .dependencies = sparseFeatureSet(&[_]Feature{}),1133 .dependencies = featureSet(&[_]Feature{}),
1134 };1134 };
1135 result[@enumToInt(Feature.use_misched)] = .{1135 result[@enumToInt(Feature.use_misched)] = .{
1136 .llvm_name = "use-misched",1136 .llvm_name = "use-misched",
1137 .description = "Use the MachineScheduler",1137 .description = "Use the MachineScheduler",
1138 .dependencies = sparseFeatureSet(&[_]Feature{}),1138 .dependencies = featureSet(&[_]Feature{}),
1139 };1139 };
1140 result[@enumToInt(Feature.v4t)] = .{1140 result[@enumToInt(Feature.v4t)] = .{
1141 .llvm_name = "v4t",1141 .llvm_name = "v4t",
1142 .description = "Support ARM v4T instructions",1142 .description = "Support ARM v4T instructions",
1143 .dependencies = sparseFeatureSet(&[_]Feature{}),1143 .dependencies = featureSet(&[_]Feature{}),
1144 };1144 };
1145 result[@enumToInt(Feature.v5t)] = .{1145 result[@enumToInt(Feature.v5t)] = .{
1146 .llvm_name = "v5t",1146 .llvm_name = "v5t",
1147 .description = "Support ARM v5T instructions",1147 .description = "Support ARM v5T instructions",
1148 .dependencies = sparseFeatureSet(&[_]Feature{1148 .dependencies = featureSet(&[_]Feature{
1149 .v4t,1149 .v4t,
1150 }),1150 }),
1151 };1151 };
1152 result[@enumToInt(Feature.v5te)] = .{1152 result[@enumToInt(Feature.v5te)] = .{
1153 .llvm_name = "v5te",1153 .llvm_name = "v5te",
1154 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",1154 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
1155 .dependencies = sparseFeatureSet(&[_]Feature{1155 .dependencies = featureSet(&[_]Feature{
1156 .v5t,1156 .v5t,
1157 }),1157 }),
1158 };1158 };
1159 result[@enumToInt(Feature.v6)] = .{1159 result[@enumToInt(Feature.v6)] = .{
1160 .llvm_name = "v6",1160 .llvm_name = "v6",
1161 .description = "Support ARM v6 instructions",1161 .description = "Support ARM v6 instructions",
1162 .dependencies = sparseFeatureSet(&[_]Feature{1162 .dependencies = featureSet(&[_]Feature{
1163 .v5te,1163 .v5te,
1164 }),1164 }),
1165 };1165 };
1166 result[@enumToInt(Feature.v6k)] = .{1166 result[@enumToInt(Feature.v6k)] = .{
1167 .llvm_name = "v6k",1167 .llvm_name = "v6k",
1168 .description = "Support ARM v6k instructions",1168 .description = "Support ARM v6k instructions",
1169 .dependencies = sparseFeatureSet(&[_]Feature{1169 .dependencies = featureSet(&[_]Feature{
1170 .v6,1170 .v6,
1171 }),1171 }),
1172 };1172 };
1173 result[@enumToInt(Feature.v6m)] = .{1173 result[@enumToInt(Feature.v6m)] = .{
1174 .llvm_name = "v6m",1174 .llvm_name = "v6m",
1175 .description = "Support ARM v6M instructions",1175 .description = "Support ARM v6M instructions",
1176 .dependencies = sparseFeatureSet(&[_]Feature{1176 .dependencies = featureSet(&[_]Feature{
1177 .v6,1177 .v6,
1178 }),1178 }),
1179 };1179 };
1180 result[@enumToInt(Feature.v6t2)] = .{1180 result[@enumToInt(Feature.v6t2)] = .{
1181 .llvm_name = "v6t2",1181 .llvm_name = "v6t2",
1182 .description = "Support ARM v6t2 instructions",1182 .description = "Support ARM v6t2 instructions",
1183 .dependencies = sparseFeatureSet(&[_]Feature{1183 .dependencies = featureSet(&[_]Feature{
1184 .thumb2,1184 .thumb2,
1185 .v6k,1185 .v6k,
1186 .v8m,1186 .v8m,
...@@ -1189,7 +1189,7 @@ pub const all_features = blk: {...@@ -1189,7 +1189,7 @@ pub const all_features = blk: {
1189 result[@enumToInt(Feature.v7)] = .{1189 result[@enumToInt(Feature.v7)] = .{
1190 .llvm_name = "v7",1190 .llvm_name = "v7",
1191 .description = "Support ARM v7 instructions",1191 .description = "Support ARM v7 instructions",
1192 .dependencies = sparseFeatureSet(&[_]Feature{1192 .dependencies = featureSet(&[_]Feature{
1193 .perfmon,1193 .perfmon,
1194 .v6t2,1194 .v6t2,
1195 .v7clrex,1195 .v7clrex,
...@@ -1198,12 +1198,12 @@ pub const all_features = blk: {...@@ -1198,12 +1198,12 @@ pub const all_features = blk: {
1198 result[@enumToInt(Feature.v7clrex)] = .{1198 result[@enumToInt(Feature.v7clrex)] = .{
1199 .llvm_name = "v7clrex",1199 .llvm_name = "v7clrex",
1200 .description = "Has v7 clrex instruction",1200 .description = "Has v7 clrex instruction",
1201 .dependencies = sparseFeatureSet(&[_]Feature{}),1201 .dependencies = featureSet(&[_]Feature{}),
1202 };1202 };
1203 result[@enumToInt(Feature.v8)] = .{1203 result[@enumToInt(Feature.v8)] = .{
1204 .llvm_name = "v8",1204 .llvm_name = "v8",
1205 .description = "Support ARM v8 instructions",1205 .description = "Support ARM v8 instructions",
1206 .dependencies = sparseFeatureSet(&[_]Feature{1206 .dependencies = featureSet(&[_]Feature{
1207 .acquire_release,1207 .acquire_release,
1208 .v7,1208 .v7,
1209 }),1209 }),
...@@ -1211,35 +1211,35 @@ pub const all_features = blk: {...@@ -1211,35 +1211,35 @@ pub const all_features = blk: {
1211 result[@enumToInt(Feature.v8_1a)] = .{1211 result[@enumToInt(Feature.v8_1a)] = .{
1212 .llvm_name = "v8.1a",1212 .llvm_name = "v8.1a",
1213 .description = "Support ARM v8.1a instructions",1213 .description = "Support ARM v8.1a instructions",
1214 .dependencies = sparseFeatureSet(&[_]Feature{1214 .dependencies = featureSet(&[_]Feature{
1215 .v8,1215 .v8,
1216 }),1216 }),
1217 };1217 };
1218 result[@enumToInt(Feature.v8_1m_main)] = .{1218 result[@enumToInt(Feature.v8_1m_main)] = .{
1219 .llvm_name = "v8.1m.main",1219 .llvm_name = "v8.1m.main",
1220 .description = "Support ARM v8-1M Mainline instructions",1220 .description = "Support ARM v8-1M Mainline instructions",
1221 .dependencies = sparseFeatureSet(&[_]Feature{1221 .dependencies = featureSet(&[_]Feature{
1222 .v8m_main,1222 .v8m_main,
1223 }),1223 }),
1224 };1224 };
1225 result[@enumToInt(Feature.v8_2a)] = .{1225 result[@enumToInt(Feature.v8_2a)] = .{
1226 .llvm_name = "v8.2a",1226 .llvm_name = "v8.2a",
1227 .description = "Support ARM v8.2a instructions",1227 .description = "Support ARM v8.2a instructions",
1228 .dependencies = sparseFeatureSet(&[_]Feature{1228 .dependencies = featureSet(&[_]Feature{
1229 .v8_1a,1229 .v8_1a,
1230 }),1230 }),
1231 };1231 };
1232 result[@enumToInt(Feature.v8_3a)] = .{1232 result[@enumToInt(Feature.v8_3a)] = .{
1233 .llvm_name = "v8.3a",1233 .llvm_name = "v8.3a",
1234 .description = "Support ARM v8.3a instructions",1234 .description = "Support ARM v8.3a instructions",
1235 .dependencies = sparseFeatureSet(&[_]Feature{1235 .dependencies = featureSet(&[_]Feature{
1236 .v8_2a,1236 .v8_2a,
1237 }),1237 }),
1238 };1238 };
1239 result[@enumToInt(Feature.v8_4a)] = .{1239 result[@enumToInt(Feature.v8_4a)] = .{
1240 .llvm_name = "v8.4a",1240 .llvm_name = "v8.4a",
1241 .description = "Support ARM v8.4a instructions",1241 .description = "Support ARM v8.4a instructions",
1242 .dependencies = sparseFeatureSet(&[_]Feature{1242 .dependencies = featureSet(&[_]Feature{
1243 .dotprod,1243 .dotprod,
1244 .v8_3a,1244 .v8_3a,
1245 }),1245 }),
...@@ -1247,7 +1247,7 @@ pub const all_features = blk: {...@@ -1247,7 +1247,7 @@ pub const all_features = blk: {
1247 result[@enumToInt(Feature.v8_5a)] = .{1247 result[@enumToInt(Feature.v8_5a)] = .{
1248 .llvm_name = "v8.5a",1248 .llvm_name = "v8.5a",
1249 .description = "Support ARM v8.5a instructions",1249 .description = "Support ARM v8.5a instructions",
1250 .dependencies = sparseFeatureSet(&[_]Feature{1250 .dependencies = featureSet(&[_]Feature{
1251 .sb,1251 .sb,
1252 .v8_4a,1252 .v8_4a,
1253 }),1253 }),
...@@ -1255,21 +1255,21 @@ pub const all_features = blk: {...@@ -1255,21 +1255,21 @@ pub const all_features = blk: {
1255 result[@enumToInt(Feature.v8m)] = .{1255 result[@enumToInt(Feature.v8m)] = .{
1256 .llvm_name = "v8m",1256 .llvm_name = "v8m",
1257 .description = "Support ARM v8M Baseline instructions",1257 .description = "Support ARM v8M Baseline instructions",
1258 .dependencies = sparseFeatureSet(&[_]Feature{1258 .dependencies = featureSet(&[_]Feature{
1259 .v6m,1259 .v6m,
1260 }),1260 }),
1261 };1261 };
1262 result[@enumToInt(Feature.v8m_main)] = .{1262 result[@enumToInt(Feature.v8m_main)] = .{
1263 .llvm_name = "v8m.main",1263 .llvm_name = "v8m.main",
1264 .description = "Support ARM v8M Mainline instructions",1264 .description = "Support ARM v8M Mainline instructions",
1265 .dependencies = sparseFeatureSet(&[_]Feature{1265 .dependencies = featureSet(&[_]Feature{
1266 .v7,1266 .v7,
1267 }),1267 }),
1268 };1268 };
1269 result[@enumToInt(Feature.vfp2)] = .{1269 result[@enumToInt(Feature.vfp2)] = .{
1270 .llvm_name = "vfp2",1270 .llvm_name = "vfp2",
1271 .description = "Enable VFP2 instructions",1271 .description = "Enable VFP2 instructions",
1272 .dependencies = sparseFeatureSet(&[_]Feature{1272 .dependencies = featureSet(&[_]Feature{
1273 .vfp2d16,1273 .vfp2d16,
1274 .vfp2sp,1274 .vfp2sp,
1275 }),1275 }),
...@@ -1277,7 +1277,7 @@ pub const all_features = blk: {...@@ -1277,7 +1277,7 @@ pub const all_features = blk: {
1277 result[@enumToInt(Feature.vfp2d16)] = .{1277 result[@enumToInt(Feature.vfp2d16)] = .{
1278 .llvm_name = "vfp2d16",1278 .llvm_name = "vfp2d16",
1279 .description = "Enable VFP2 instructions",1279 .description = "Enable VFP2 instructions",
1280 .dependencies = sparseFeatureSet(&[_]Feature{1280 .dependencies = featureSet(&[_]Feature{
1281 .fp64,1281 .fp64,
1282 .vfp2d16sp,1282 .vfp2d16sp,
1283 }),1283 }),
...@@ -1285,21 +1285,21 @@ pub const all_features = blk: {...@@ -1285,21 +1285,21 @@ pub const all_features = blk: {
1285 result[@enumToInt(Feature.vfp2d16sp)] = .{1285 result[@enumToInt(Feature.vfp2d16sp)] = .{
1286 .llvm_name = "vfp2d16sp",1286 .llvm_name = "vfp2d16sp",
1287 .description = "Enable VFP2 instructions with no double precision",1287 .description = "Enable VFP2 instructions with no double precision",
1288 .dependencies = sparseFeatureSet(&[_]Feature{1288 .dependencies = featureSet(&[_]Feature{
1289 .fpregs,1289 .fpregs,
1290 }),1290 }),
1291 };1291 };
1292 result[@enumToInt(Feature.vfp2sp)] = .{1292 result[@enumToInt(Feature.vfp2sp)] = .{
1293 .llvm_name = "vfp2sp",1293 .llvm_name = "vfp2sp",
1294 .description = "Enable VFP2 instructions with no double precision",1294 .description = "Enable VFP2 instructions with no double precision",
1295 .dependencies = sparseFeatureSet(&[_]Feature{1295 .dependencies = featureSet(&[_]Feature{
1296 .vfp2d16sp,1296 .vfp2d16sp,
1297 }),1297 }),
1298 };1298 };
1299 result[@enumToInt(Feature.vfp3)] = .{1299 result[@enumToInt(Feature.vfp3)] = .{
1300 .llvm_name = "vfp3",1300 .llvm_name = "vfp3",
1301 .description = "Enable VFP3 instructions",1301 .description = "Enable VFP3 instructions",
1302 .dependencies = sparseFeatureSet(&[_]Feature{1302 .dependencies = featureSet(&[_]Feature{
1303 .vfp3d16,1303 .vfp3d16,
1304 .vfp3sp,1304 .vfp3sp,
1305 }),1305 }),
...@@ -1307,7 +1307,7 @@ pub const all_features = blk: {...@@ -1307,7 +1307,7 @@ pub const all_features = blk: {
1307 result[@enumToInt(Feature.vfp3d16)] = .{1307 result[@enumToInt(Feature.vfp3d16)] = .{
1308 .llvm_name = "vfp3d16",1308 .llvm_name = "vfp3d16",
1309 .description = "Enable VFP3 instructions with only 16 d-registers",1309 .description = "Enable VFP3 instructions with only 16 d-registers",
1310 .dependencies = sparseFeatureSet(&[_]Feature{1310 .dependencies = featureSet(&[_]Feature{
1311 .fp64,1311 .fp64,
1312 .vfp2,1312 .vfp2,
1313 .vfp3d16sp,1313 .vfp3d16sp,
...@@ -1316,14 +1316,14 @@ pub const all_features = blk: {...@@ -1316,14 +1316,14 @@ pub const all_features = blk: {
1316 result[@enumToInt(Feature.vfp3d16sp)] = .{1316 result[@enumToInt(Feature.vfp3d16sp)] = .{
1317 .llvm_name = "vfp3d16sp",1317 .llvm_name = "vfp3d16sp",
1318 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",1318 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",
1319 .dependencies = sparseFeatureSet(&[_]Feature{1319 .dependencies = featureSet(&[_]Feature{
1320 .vfp2sp,1320 .vfp2sp,
1321 }),1321 }),
1322 };1322 };
1323 result[@enumToInt(Feature.vfp3sp)] = .{1323 result[@enumToInt(Feature.vfp3sp)] = .{
1324 .llvm_name = "vfp3sp",1324 .llvm_name = "vfp3sp",
1325 .description = "Enable VFP3 instructions with no double precision",1325 .description = "Enable VFP3 instructions with no double precision",
1326 .dependencies = sparseFeatureSet(&[_]Feature{1326 .dependencies = featureSet(&[_]Feature{
1327 .d32,1327 .d32,
1328 .vfp3d16sp,1328 .vfp3d16sp,
1329 }),1329 }),
...@@ -1331,7 +1331,7 @@ pub const all_features = blk: {...@@ -1331,7 +1331,7 @@ pub const all_features = blk: {
1331 result[@enumToInt(Feature.vfp4)] = .{1331 result[@enumToInt(Feature.vfp4)] = .{
1332 .llvm_name = "vfp4",1332 .llvm_name = "vfp4",
1333 .description = "Enable VFP4 instructions",1333 .description = "Enable VFP4 instructions",
1334 .dependencies = sparseFeatureSet(&[_]Feature{1334 .dependencies = featureSet(&[_]Feature{
1335 .fp16,1335 .fp16,
1336 .vfp3,1336 .vfp3,
1337 .vfp4d16,1337 .vfp4d16,
...@@ -1341,7 +1341,7 @@ pub const all_features = blk: {...@@ -1341,7 +1341,7 @@ pub const all_features = blk: {
1341 result[@enumToInt(Feature.vfp4d16)] = .{1341 result[@enumToInt(Feature.vfp4d16)] = .{
1342 .llvm_name = "vfp4d16",1342 .llvm_name = "vfp4d16",
1343 .description = "Enable VFP4 instructions with only 16 d-registers",1343 .description = "Enable VFP4 instructions with only 16 d-registers",
1344 .dependencies = sparseFeatureSet(&[_]Feature{1344 .dependencies = featureSet(&[_]Feature{
1345 .fp16,1345 .fp16,
1346 .fp64,1346 .fp64,
1347 .vfp3d16,1347 .vfp3d16,
...@@ -1351,7 +1351,7 @@ pub const all_features = blk: {...@@ -1351,7 +1351,7 @@ pub const all_features = blk: {
1351 result[@enumToInt(Feature.vfp4d16sp)] = .{1351 result[@enumToInt(Feature.vfp4d16sp)] = .{
1352 .llvm_name = "vfp4d16sp",1352 .llvm_name = "vfp4d16sp",
1353 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",1353 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",
1354 .dependencies = sparseFeatureSet(&[_]Feature{1354 .dependencies = featureSet(&[_]Feature{
1355 .fp16,1355 .fp16,
1356 .vfp3d16sp,1356 .vfp3d16sp,
1357 }),1357 }),
...@@ -1359,7 +1359,7 @@ pub const all_features = blk: {...@@ -1359,7 +1359,7 @@ pub const all_features = blk: {
1359 result[@enumToInt(Feature.vfp4sp)] = .{1359 result[@enumToInt(Feature.vfp4sp)] = .{
1360 .llvm_name = "vfp4sp",1360 .llvm_name = "vfp4sp",
1361 .description = "Enable VFP4 instructions with no double precision",1361 .description = "Enable VFP4 instructions with no double precision",
1362 .dependencies = sparseFeatureSet(&[_]Feature{1362 .dependencies = featureSet(&[_]Feature{
1363 .d32,1363 .d32,
1364 .fp16,1364 .fp16,
1365 .vfp3sp,1365 .vfp3sp,
...@@ -1369,7 +1369,7 @@ pub const all_features = blk: {...@@ -1369,7 +1369,7 @@ pub const all_features = blk: {
1369 result[@enumToInt(Feature.virtualization)] = .{1369 result[@enumToInt(Feature.virtualization)] = .{
1370 .llvm_name = "virtualization",1370 .llvm_name = "virtualization",
1371 .description = "Supports Virtualization extension",1371 .description = "Supports Virtualization extension",
1372 .dependencies = sparseFeatureSet(&[_]Feature{1372 .dependencies = featureSet(&[_]Feature{
1373 .hwdiv,1373 .hwdiv,
1374 .hwdiv_arm,1374 .hwdiv_arm,
1375 }),1375 }),
...@@ -1377,40 +1377,39 @@ pub const all_features = blk: {...@@ -1377,40 +1377,39 @@ pub const all_features = blk: {
1377 result[@enumToInt(Feature.vldn_align)] = .{1377 result[@enumToInt(Feature.vldn_align)] = .{
1378 .llvm_name = "vldn-align",1378 .llvm_name = "vldn-align",
1379 .description = "Check for VLDn unaligned access",1379 .description = "Check for VLDn unaligned access",
1380 .dependencies = sparseFeatureSet(&[_]Feature{}),1380 .dependencies = featureSet(&[_]Feature{}),
1381 };1381 };
1382 result[@enumToInt(Feature.vmlx_forwarding)] = .{1382 result[@enumToInt(Feature.vmlx_forwarding)] = .{
1383 .llvm_name = "vmlx-forwarding",1383 .llvm_name = "vmlx-forwarding",
1384 .description = "Has multiplier accumulator forwarding",1384 .description = "Has multiplier accumulator forwarding",
1385 .dependencies = sparseFeatureSet(&[_]Feature{}),1385 .dependencies = featureSet(&[_]Feature{}),
1386 };1386 };
1387 result[@enumToInt(Feature.vmlx_hazards)] = .{1387 result[@enumToInt(Feature.vmlx_hazards)] = .{
1388 .llvm_name = "vmlx-hazards",1388 .llvm_name = "vmlx-hazards",
1389 .description = "Has VMLx hazards",1389 .description = "Has VMLx hazards",
1390 .dependencies = sparseFeatureSet(&[_]Feature{}),1390 .dependencies = featureSet(&[_]Feature{}),
1391 };1391 };
1392 result[@enumToInt(Feature.wide_stride_vfp)] = .{1392 result[@enumToInt(Feature.wide_stride_vfp)] = .{
1393 .llvm_name = "wide-stride-vfp",1393 .llvm_name = "wide-stride-vfp",
1394 .description = "Use a wide stride when allocating VFP registers",1394 .description = "Use a wide stride when allocating VFP registers",
1395 .dependencies = sparseFeatureSet(&[_]Feature{}),1395 .dependencies = featureSet(&[_]Feature{}),
1396 };1396 };
1397 result[@enumToInt(Feature.xscale)] = .{1397 result[@enumToInt(Feature.xscale)] = .{
1398 .llvm_name = "xscale",1398 .llvm_name = "xscale",
1399 .description = "ARMv5te architecture",1399 .description = "ARMv5te architecture",
1400 .dependencies = sparseFeatureSet(&[_]Feature{1400 .dependencies = featureSet(&[_]Feature{
1401 .armv5te,1401 .armv5te,
1402 }),1402 }),
1403 };1403 };
1404 result[@enumToInt(Feature.zcz)] = .{1404 result[@enumToInt(Feature.zcz)] = .{
1405 .llvm_name = "zcz",1405 .llvm_name = "zcz",
1406 .description = "Has zero-cycle zeroing instructions",1406 .description = "Has zero-cycle zeroing instructions",
1407 .dependencies = sparseFeatureSet(&[_]Feature{}),1407 .dependencies = featureSet(&[_]Feature{}),
1408 };1408 };
1409 const ti = @typeInfo(Feature);1409 const ti = @typeInfo(Feature);
1410 for (result) |*elem, i| {1410 for (result) |*elem, i| {
1411 elem.index = i;1411 elem.index = i;
1412 elem.name = ti.Enum.fields[i].name;1412 elem.name = ti.Enum.fields[i].name;
1413 elem.dependencies.initAsDependencies(i, &result);
1414 }1413 }
1415 break :blk result;1414 break :blk result;
1416};1415};
...@@ -1419,49 +1418,49 @@ pub const cpu = struct {...@@ -1419,49 +1418,49 @@ pub const cpu = struct {
1419 pub const arm1020e = Cpu{1418 pub const arm1020e = Cpu{
1420 .name = "arm1020e",1419 .name = "arm1020e",
1421 .llvm_name = "arm1020e",1420 .llvm_name = "arm1020e",
1422 .features = featureSet(&all_features, &[_]Feature{1421 .features = featureSet(&[_]Feature{
1423 .armv5te,1422 .armv5te,
1424 }),1423 }),
1425 };1424 };
1426 pub const arm1020t = Cpu{1425 pub const arm1020t = Cpu{
1427 .name = "arm1020t",1426 .name = "arm1020t",
1428 .llvm_name = "arm1020t",1427 .llvm_name = "arm1020t",
1429 .features = featureSet(&all_features, &[_]Feature{1428 .features = featureSet(&[_]Feature{
1430 .armv5t,1429 .armv5t,
1431 }),1430 }),
1432 };1431 };
1433 pub const arm1022e = Cpu{1432 pub const arm1022e = Cpu{
1434 .name = "arm1022e",1433 .name = "arm1022e",
1435 .llvm_name = "arm1022e",1434 .llvm_name = "arm1022e",
1436 .features = featureSet(&all_features, &[_]Feature{1435 .features = featureSet(&[_]Feature{
1437 .armv5te,1436 .armv5te,
1438 }),1437 }),
1439 };1438 };
1440 pub const arm10e = Cpu{1439 pub const arm10e = Cpu{
1441 .name = "arm10e",1440 .name = "arm10e",
1442 .llvm_name = "arm10e",1441 .llvm_name = "arm10e",
1443 .features = featureSet(&all_features, &[_]Feature{1442 .features = featureSet(&[_]Feature{
1444 .armv5te,1443 .armv5te,
1445 }),1444 }),
1446 };1445 };
1447 pub const arm10tdmi = Cpu{1446 pub const arm10tdmi = Cpu{
1448 .name = "arm10tdmi",1447 .name = "arm10tdmi",
1449 .llvm_name = "arm10tdmi",1448 .llvm_name = "arm10tdmi",
1450 .features = featureSet(&all_features, &[_]Feature{1449 .features = featureSet(&[_]Feature{
1451 .armv5t,1450 .armv5t,
1452 }),1451 }),
1453 };1452 };
1454 pub const arm1136j_s = Cpu{1453 pub const arm1136j_s = Cpu{
1455 .name = "arm1136j_s",1454 .name = "arm1136j_s",
1456 .llvm_name = "arm1136j-s",1455 .llvm_name = "arm1136j-s",
1457 .features = featureSet(&all_features, &[_]Feature{1456 .features = featureSet(&[_]Feature{
1458 .armv6,1457 .armv6,
1459 }),1458 }),
1460 };1459 };
1461 pub const arm1136jf_s = Cpu{1460 pub const arm1136jf_s = Cpu{
1462 .name = "arm1136jf_s",1461 .name = "arm1136jf_s",
1463 .llvm_name = "arm1136jf-s",1462 .llvm_name = "arm1136jf-s",
1464 .features = featureSet(&all_features, &[_]Feature{1463 .features = featureSet(&[_]Feature{
1465 .armv6,1464 .armv6,
1466 .slowfpvmlx,1465 .slowfpvmlx,
1467 .vfp2,1466 .vfp2,
...@@ -1470,14 +1469,14 @@ pub const cpu = struct {...@@ -1470,14 +1469,14 @@ pub const cpu = struct {
1470 pub const arm1156t2_s = Cpu{1469 pub const arm1156t2_s = Cpu{
1471 .name = "arm1156t2_s",1470 .name = "arm1156t2_s",
1472 .llvm_name = "arm1156t2-s",1471 .llvm_name = "arm1156t2-s",
1473 .features = featureSet(&all_features, &[_]Feature{1472 .features = featureSet(&[_]Feature{
1474 .armv6t2,1473 .armv6t2,
1475 }),1474 }),
1476 };1475 };
1477 pub const arm1156t2f_s = Cpu{1476 pub const arm1156t2f_s = Cpu{
1478 .name = "arm1156t2f_s",1477 .name = "arm1156t2f_s",
1479 .llvm_name = "arm1156t2f-s",1478 .llvm_name = "arm1156t2f-s",
1480 .features = featureSet(&all_features, &[_]Feature{1479 .features = featureSet(&[_]Feature{
1481 .armv6t2,1480 .armv6t2,
1482 .slowfpvmlx,1481 .slowfpvmlx,
1483 .vfp2,1482 .vfp2,
...@@ -1486,21 +1485,21 @@ pub const cpu = struct {...@@ -1486,21 +1485,21 @@ pub const cpu = struct {
1486 pub const arm1176j_s = Cpu{1485 pub const arm1176j_s = Cpu{
1487 .name = "arm1176j_s",1486 .name = "arm1176j_s",
1488 .llvm_name = "arm1176j-s",1487 .llvm_name = "arm1176j-s",
1489 .features = featureSet(&all_features, &[_]Feature{1488 .features = featureSet(&[_]Feature{
1490 .armv6kz,1489 .armv6kz,
1491 }),1490 }),
1492 };1491 };
1493 pub const arm1176jz_s = Cpu{1492 pub const arm1176jz_s = Cpu{
1494 .name = "arm1176jz_s",1493 .name = "arm1176jz_s",
1495 .llvm_name = "arm1176jz-s",1494 .llvm_name = "arm1176jz-s",
1496 .features = featureSet(&all_features, &[_]Feature{1495 .features = featureSet(&[_]Feature{
1497 .armv6kz,1496 .armv6kz,
1498 }),1497 }),
1499 };1498 };
1500 pub const arm1176jzf_s = Cpu{1499 pub const arm1176jzf_s = Cpu{
1501 .name = "arm1176jzf_s",1500 .name = "arm1176jzf_s",
1502 .llvm_name = "arm1176jzf-s",1501 .llvm_name = "arm1176jzf-s",
1503 .features = featureSet(&all_features, &[_]Feature{1502 .features = featureSet(&[_]Feature{
1504 .armv6kz,1503 .armv6kz,
1505 .slowfpvmlx,1504 .slowfpvmlx,
1506 .vfp2,1505 .vfp2,
...@@ -1509,126 +1508,126 @@ pub const cpu = struct {...@@ -1509,126 +1508,126 @@ pub const cpu = struct {
1509 pub const arm710t = Cpu{1508 pub const arm710t = Cpu{
1510 .name = "arm710t",1509 .name = "arm710t",
1511 .llvm_name = "arm710t",1510 .llvm_name = "arm710t",
1512 .features = featureSet(&all_features, &[_]Feature{1511 .features = featureSet(&[_]Feature{
1513 .armv4t,1512 .armv4t,
1514 }),1513 }),
1515 };1514 };
1516 pub const arm720t = Cpu{1515 pub const arm720t = Cpu{
1517 .name = "arm720t",1516 .name = "arm720t",
1518 .llvm_name = "arm720t",1517 .llvm_name = "arm720t",
1519 .features = featureSet(&all_features, &[_]Feature{1518 .features = featureSet(&[_]Feature{
1520 .armv4t,1519 .armv4t,
1521 }),1520 }),
1522 };1521 };
1523 pub const arm7tdmi = Cpu{1522 pub const arm7tdmi = Cpu{
1524 .name = "arm7tdmi",1523 .name = "arm7tdmi",
1525 .llvm_name = "arm7tdmi",1524 .llvm_name = "arm7tdmi",
1526 .features = featureSet(&all_features, &[_]Feature{1525 .features = featureSet(&[_]Feature{
1527 .armv4t,1526 .armv4t,
1528 }),1527 }),
1529 };1528 };
1530 pub const arm7tdmi_s = Cpu{1529 pub const arm7tdmi_s = Cpu{
1531 .name = "arm7tdmi_s",1530 .name = "arm7tdmi_s",
1532 .llvm_name = "arm7tdmi-s",1531 .llvm_name = "arm7tdmi-s",
1533 .features = featureSet(&all_features, &[_]Feature{1532 .features = featureSet(&[_]Feature{
1534 .armv4t,1533 .armv4t,
1535 }),1534 }),
1536 };1535 };
1537 pub const arm8 = Cpu{1536 pub const arm8 = Cpu{
1538 .name = "arm8",1537 .name = "arm8",
1539 .llvm_name = "arm8",1538 .llvm_name = "arm8",
1540 .features = featureSet(&all_features, &[_]Feature{1539 .features = featureSet(&[_]Feature{
1541 .armv4,1540 .armv4,
1542 }),1541 }),
1543 };1542 };
1544 pub const arm810 = Cpu{1543 pub const arm810 = Cpu{
1545 .name = "arm810",1544 .name = "arm810",
1546 .llvm_name = "arm810",1545 .llvm_name = "arm810",
1547 .features = featureSet(&all_features, &[_]Feature{1546 .features = featureSet(&[_]Feature{
1548 .armv4,1547 .armv4,
1549 }),1548 }),
1550 };1549 };
1551 pub const arm9 = Cpu{1550 pub const arm9 = Cpu{
1552 .name = "arm9",1551 .name = "arm9",
1553 .llvm_name = "arm9",1552 .llvm_name = "arm9",
1554 .features = featureSet(&all_features, &[_]Feature{1553 .features = featureSet(&[_]Feature{
1555 .armv4t,1554 .armv4t,
1556 }),1555 }),
1557 };1556 };
1558 pub const arm920 = Cpu{1557 pub const arm920 = Cpu{
1559 .name = "arm920",1558 .name = "arm920",
1560 .llvm_name = "arm920",1559 .llvm_name = "arm920",
1561 .features = featureSet(&all_features, &[_]Feature{1560 .features = featureSet(&[_]Feature{
1562 .armv4t,1561 .armv4t,
1563 }),1562 }),
1564 };1563 };
1565 pub const arm920t = Cpu{1564 pub const arm920t = Cpu{
1566 .name = "arm920t",1565 .name = "arm920t",
1567 .llvm_name = "arm920t",1566 .llvm_name = "arm920t",
1568 .features = featureSet(&all_features, &[_]Feature{1567 .features = featureSet(&[_]Feature{
1569 .armv4t,1568 .armv4t,
1570 }),1569 }),
1571 };1570 };
1572 pub const arm922t = Cpu{1571 pub const arm922t = Cpu{
1573 .name = "arm922t",1572 .name = "arm922t",
1574 .llvm_name = "arm922t",1573 .llvm_name = "arm922t",
1575 .features = featureSet(&all_features, &[_]Feature{1574 .features = featureSet(&[_]Feature{
1576 .armv4t,1575 .armv4t,
1577 }),1576 }),
1578 };1577 };
1579 pub const arm926ej_s = Cpu{1578 pub const arm926ej_s = Cpu{
1580 .name = "arm926ej_s",1579 .name = "arm926ej_s",
1581 .llvm_name = "arm926ej-s",1580 .llvm_name = "arm926ej-s",
1582 .features = featureSet(&all_features, &[_]Feature{1581 .features = featureSet(&[_]Feature{
1583 .armv5te,1582 .armv5te,
1584 }),1583 }),
1585 };1584 };
1586 pub const arm940t = Cpu{1585 pub const arm940t = Cpu{
1587 .name = "arm940t",1586 .name = "arm940t",
1588 .llvm_name = "arm940t",1587 .llvm_name = "arm940t",
1589 .features = featureSet(&all_features, &[_]Feature{1588 .features = featureSet(&[_]Feature{
1590 .armv4t,1589 .armv4t,
1591 }),1590 }),
1592 };1591 };
1593 pub const arm946e_s = Cpu{1592 pub const arm946e_s = Cpu{
1594 .name = "arm946e_s",1593 .name = "arm946e_s",
1595 .llvm_name = "arm946e-s",1594 .llvm_name = "arm946e-s",
1596 .features = featureSet(&all_features, &[_]Feature{1595 .features = featureSet(&[_]Feature{
1597 .armv5te,1596 .armv5te,
1598 }),1597 }),
1599 };1598 };
1600 pub const arm966e_s = Cpu{1599 pub const arm966e_s = Cpu{
1601 .name = "arm966e_s",1600 .name = "arm966e_s",
1602 .llvm_name = "arm966e-s",1601 .llvm_name = "arm966e-s",
1603 .features = featureSet(&all_features, &[_]Feature{1602 .features = featureSet(&[_]Feature{
1604 .armv5te,1603 .armv5te,
1605 }),1604 }),
1606 };1605 };
1607 pub const arm968e_s = Cpu{1606 pub const arm968e_s = Cpu{
1608 .name = "arm968e_s",1607 .name = "arm968e_s",
1609 .llvm_name = "arm968e-s",1608 .llvm_name = "arm968e-s",
1610 .features = featureSet(&all_features, &[_]Feature{1609 .features = featureSet(&[_]Feature{
1611 .armv5te,1610 .armv5te,
1612 }),1611 }),
1613 };1612 };
1614 pub const arm9e = Cpu{1613 pub const arm9e = Cpu{
1615 .name = "arm9e",1614 .name = "arm9e",
1616 .llvm_name = "arm9e",1615 .llvm_name = "arm9e",
1617 .features = featureSet(&all_features, &[_]Feature{1616 .features = featureSet(&[_]Feature{
1618 .armv5te,1617 .armv5te,
1619 }),1618 }),
1620 };1619 };
1621 pub const arm9tdmi = Cpu{1620 pub const arm9tdmi = Cpu{
1622 .name = "arm9tdmi",1621 .name = "arm9tdmi",
1623 .llvm_name = "arm9tdmi",1622 .llvm_name = "arm9tdmi",
1624 .features = featureSet(&all_features, &[_]Feature{1623 .features = featureSet(&[_]Feature{
1625 .armv4t,1624 .armv4t,
1626 }),1625 }),
1627 };1626 };
1628 pub const cortex_a12 = Cpu{1627 pub const cortex_a12 = Cpu{
1629 .name = "cortex_a12",1628 .name = "cortex_a12",
1630 .llvm_name = "cortex-a12",1629 .llvm_name = "cortex-a12",
1631 .features = featureSet(&all_features, &[_]Feature{1630 .features = featureSet(&[_]Feature{
1632 .a12,1631 .a12,
1633 .armv7_a,1632 .armv7_a,
1634 .avoid_partial_cpsr,1633 .avoid_partial_cpsr,
...@@ -1643,7 +1642,7 @@ pub const cpu = struct {...@@ -1643,7 +1642,7 @@ pub const cpu = struct {
1643 pub const cortex_a15 = Cpu{1642 pub const cortex_a15 = Cpu{
1644 .name = "cortex_a15",1643 .name = "cortex_a15",
1645 .llvm_name = "cortex-a15",1644 .llvm_name = "cortex-a15",
1646 .features = featureSet(&all_features, &[_]Feature{1645 .features = featureSet(&[_]Feature{
1647 .a15,1646 .a15,
1648 .armv7_a,1647 .armv7_a,
1649 .avoid_partial_cpsr,1648 .avoid_partial_cpsr,
...@@ -1661,7 +1660,7 @@ pub const cpu = struct {...@@ -1661,7 +1660,7 @@ pub const cpu = struct {
1661 pub const cortex_a17 = Cpu{1660 pub const cortex_a17 = Cpu{
1662 .name = "cortex_a17",1661 .name = "cortex_a17",
1663 .llvm_name = "cortex-a17",1662 .llvm_name = "cortex-a17",
1664 .features = featureSet(&all_features, &[_]Feature{1663 .features = featureSet(&[_]Feature{
1665 .a17,1664 .a17,
1666 .armv7_a,1665 .armv7_a,
1667 .avoid_partial_cpsr,1666 .avoid_partial_cpsr,
...@@ -1676,7 +1675,7 @@ pub const cpu = struct {...@@ -1676,7 +1675,7 @@ pub const cpu = struct {
1676 pub const cortex_a32 = Cpu{1675 pub const cortex_a32 = Cpu{
1677 .name = "cortex_a32",1676 .name = "cortex_a32",
1678 .llvm_name = "cortex-a32",1677 .llvm_name = "cortex-a32",
1679 .features = featureSet(&all_features, &[_]Feature{1678 .features = featureSet(&[_]Feature{
1680 .armv8_a,1679 .armv8_a,
1681 .crc,1680 .crc,
1682 .crypto,1681 .crypto,
...@@ -1687,7 +1686,7 @@ pub const cpu = struct {...@@ -1687,7 +1686,7 @@ pub const cpu = struct {
1687 pub const cortex_a35 = Cpu{1686 pub const cortex_a35 = Cpu{
1688 .name = "cortex_a35",1687 .name = "cortex_a35",
1689 .llvm_name = "cortex-a35",1688 .llvm_name = "cortex-a35",
1690 .features = featureSet(&all_features, &[_]Feature{1689 .features = featureSet(&[_]Feature{
1691 .a35,1690 .a35,
1692 .armv8_a,1691 .armv8_a,
1693 .crc,1692 .crc,
...@@ -1699,7 +1698,7 @@ pub const cpu = struct {...@@ -1699,7 +1698,7 @@ pub const cpu = struct {
1699 pub const cortex_a5 = Cpu{1698 pub const cortex_a5 = Cpu{
1700 .name = "cortex_a5",1699 .name = "cortex_a5",
1701 .llvm_name = "cortex-a5",1700 .llvm_name = "cortex-a5",
1702 .features = featureSet(&all_features, &[_]Feature{1701 .features = featureSet(&[_]Feature{
1703 .a5,1702 .a5,
1704 .armv7_a,1703 .armv7_a,
1705 .mp,1704 .mp,
...@@ -1714,7 +1713,7 @@ pub const cpu = struct {...@@ -1714,7 +1713,7 @@ pub const cpu = struct {
1714 pub const cortex_a53 = Cpu{1713 pub const cortex_a53 = Cpu{
1715 .name = "cortex_a53",1714 .name = "cortex_a53",
1716 .llvm_name = "cortex-a53",1715 .llvm_name = "cortex-a53",
1717 .features = featureSet(&all_features, &[_]Feature{1716 .features = featureSet(&[_]Feature{
1718 .a53,1717 .a53,
1719 .armv8_a,1718 .armv8_a,
1720 .crc,1719 .crc,
...@@ -1727,7 +1726,7 @@ pub const cpu = struct {...@@ -1727,7 +1726,7 @@ pub const cpu = struct {
1727 pub const cortex_a55 = Cpu{1726 pub const cortex_a55 = Cpu{
1728 .name = "cortex_a55",1727 .name = "cortex_a55",
1729 .llvm_name = "cortex-a55",1728 .llvm_name = "cortex-a55",
1730 .features = featureSet(&all_features, &[_]Feature{1729 .features = featureSet(&[_]Feature{
1731 .a55,1730 .a55,
1732 .armv8_2_a,1731 .armv8_2_a,
1733 .dotprod,1732 .dotprod,
...@@ -1738,7 +1737,7 @@ pub const cpu = struct {...@@ -1738,7 +1737,7 @@ pub const cpu = struct {
1738 pub const cortex_a57 = Cpu{1737 pub const cortex_a57 = Cpu{
1739 .name = "cortex_a57",1738 .name = "cortex_a57",
1740 .llvm_name = "cortex-a57",1739 .llvm_name = "cortex-a57",
1741 .features = featureSet(&all_features, &[_]Feature{1740 .features = featureSet(&[_]Feature{
1742 .a57,1741 .a57,
1743 .armv8_a,1742 .armv8_a,
1744 .avoid_partial_cpsr,1743 .avoid_partial_cpsr,
...@@ -1753,7 +1752,7 @@ pub const cpu = struct {...@@ -1753,7 +1752,7 @@ pub const cpu = struct {
1753 pub const cortex_a7 = Cpu{1752 pub const cortex_a7 = Cpu{
1754 .name = "cortex_a7",1753 .name = "cortex_a7",
1755 .llvm_name = "cortex-a7",1754 .llvm_name = "cortex-a7",
1756 .features = featureSet(&all_features, &[_]Feature{1755 .features = featureSet(&[_]Feature{
1757 .a7,1756 .a7,
1758 .armv7_a,1757 .armv7_a,
1759 .mp,1758 .mp,
...@@ -1770,7 +1769,7 @@ pub const cpu = struct {...@@ -1770,7 +1769,7 @@ pub const cpu = struct {
1770 pub const cortex_a72 = Cpu{1769 pub const cortex_a72 = Cpu{
1771 .name = "cortex_a72",1770 .name = "cortex_a72",
1772 .llvm_name = "cortex-a72",1771 .llvm_name = "cortex-a72",
1773 .features = featureSet(&all_features, &[_]Feature{1772 .features = featureSet(&[_]Feature{
1774 .a72,1773 .a72,
1775 .armv8_a,1774 .armv8_a,
1776 .crc,1775 .crc,
...@@ -1782,7 +1781,7 @@ pub const cpu = struct {...@@ -1782,7 +1781,7 @@ pub const cpu = struct {
1782 pub const cortex_a73 = Cpu{1781 pub const cortex_a73 = Cpu{
1783 .name = "cortex_a73",1782 .name = "cortex_a73",
1784 .llvm_name = "cortex-a73",1783 .llvm_name = "cortex-a73",
1785 .features = featureSet(&all_features, &[_]Feature{1784 .features = featureSet(&[_]Feature{
1786 .a73,1785 .a73,
1787 .armv8_a,1786 .armv8_a,
1788 .crc,1787 .crc,
...@@ -1794,7 +1793,7 @@ pub const cpu = struct {...@@ -1794,7 +1793,7 @@ pub const cpu = struct {
1794 pub const cortex_a75 = Cpu{1793 pub const cortex_a75 = Cpu{
1795 .name = "cortex_a75",1794 .name = "cortex_a75",
1796 .llvm_name = "cortex-a75",1795 .llvm_name = "cortex-a75",
1797 .features = featureSet(&all_features, &[_]Feature{1796 .features = featureSet(&[_]Feature{
1798 .a75,1797 .a75,
1799 .armv8_2_a,1798 .armv8_2_a,
1800 .dotprod,1799 .dotprod,
...@@ -1805,7 +1804,7 @@ pub const cpu = struct {...@@ -1805,7 +1804,7 @@ pub const cpu = struct {
1805 pub const cortex_a76 = Cpu{1804 pub const cortex_a76 = Cpu{
1806 .name = "cortex_a76",1805 .name = "cortex_a76",
1807 .llvm_name = "cortex-a76",1806 .llvm_name = "cortex-a76",
1808 .features = featureSet(&all_features, &[_]Feature{1807 .features = featureSet(&[_]Feature{
1809 .a76,1808 .a76,
1810 .armv8_2_a,1809 .armv8_2_a,
1811 .crc,1810 .crc,
...@@ -1819,7 +1818,7 @@ pub const cpu = struct {...@@ -1819,7 +1818,7 @@ pub const cpu = struct {
1819 pub const cortex_a76ae = Cpu{1818 pub const cortex_a76ae = Cpu{
1820 .name = "cortex_a76ae",1819 .name = "cortex_a76ae",
1821 .llvm_name = "cortex-a76ae",1820 .llvm_name = "cortex-a76ae",
1822 .features = featureSet(&all_features, &[_]Feature{1821 .features = featureSet(&[_]Feature{
1823 .a76,1822 .a76,
1824 .armv8_2_a,1823 .armv8_2_a,
1825 .crc,1824 .crc,
...@@ -1833,7 +1832,7 @@ pub const cpu = struct {...@@ -1833,7 +1832,7 @@ pub const cpu = struct {
1833 pub const cortex_a8 = Cpu{1832 pub const cortex_a8 = Cpu{
1834 .name = "cortex_a8",1833 .name = "cortex_a8",
1835 .llvm_name = "cortex-a8",1834 .llvm_name = "cortex-a8",
1836 .features = featureSet(&all_features, &[_]Feature{1835 .features = featureSet(&[_]Feature{
1837 .a8,1836 .a8,
1838 .armv7_a,1837 .armv7_a,
1839 .nonpipelined_vfp,1838 .nonpipelined_vfp,
...@@ -1848,7 +1847,7 @@ pub const cpu = struct {...@@ -1848,7 +1847,7 @@ pub const cpu = struct {
1848 pub const cortex_a9 = Cpu{1847 pub const cortex_a9 = Cpu{
1849 .name = "cortex_a9",1848 .name = "cortex_a9",
1850 .llvm_name = "cortex-a9",1849 .llvm_name = "cortex-a9",
1851 .features = featureSet(&all_features, &[_]Feature{1850 .features = featureSet(&[_]Feature{
1852 .a9,1851 .a9,
1853 .armv7_a,1852 .armv7_a,
1854 .avoid_partial_cpsr,1853 .avoid_partial_cpsr,
...@@ -1868,28 +1867,28 @@ pub const cpu = struct {...@@ -1868,28 +1867,28 @@ pub const cpu = struct {
1868 pub const cortex_m0 = Cpu{1867 pub const cortex_m0 = Cpu{
1869 .name = "cortex_m0",1868 .name = "cortex_m0",
1870 .llvm_name = "cortex-m0",1869 .llvm_name = "cortex-m0",
1871 .features = featureSet(&all_features, &[_]Feature{1870 .features = featureSet(&[_]Feature{
1872 .armv6_m,1871 .armv6_m,
1873 }),1872 }),
1874 };1873 };
1875 pub const cortex_m0plus = Cpu{1874 pub const cortex_m0plus = Cpu{
1876 .name = "cortex_m0plus",1875 .name = "cortex_m0plus",
1877 .llvm_name = "cortex-m0plus",1876 .llvm_name = "cortex-m0plus",
1878 .features = featureSet(&all_features, &[_]Feature{1877 .features = featureSet(&[_]Feature{
1879 .armv6_m,1878 .armv6_m,
1880 }),1879 }),
1881 };1880 };
1882 pub const cortex_m1 = Cpu{1881 pub const cortex_m1 = Cpu{
1883 .name = "cortex_m1",1882 .name = "cortex_m1",
1884 .llvm_name = "cortex-m1",1883 .llvm_name = "cortex-m1",
1885 .features = featureSet(&all_features, &[_]Feature{1884 .features = featureSet(&[_]Feature{
1886 .armv6_m,1885 .armv6_m,
1887 }),1886 }),
1888 };1887 };
1889 pub const cortex_m23 = Cpu{1888 pub const cortex_m23 = Cpu{
1890 .name = "cortex_m23",1889 .name = "cortex_m23",
1891 .llvm_name = "cortex-m23",1890 .llvm_name = "cortex-m23",
1892 .features = featureSet(&all_features, &[_]Feature{1891 .features = featureSet(&[_]Feature{
1893 .armv8_m_base,1892 .armv8_m_base,
1894 .no_movt,1893 .no_movt,
1895 }),1894 }),
...@@ -1897,7 +1896,7 @@ pub const cpu = struct {...@@ -1897,7 +1896,7 @@ pub const cpu = struct {
1897 pub const cortex_m3 = Cpu{1896 pub const cortex_m3 = Cpu{
1898 .name = "cortex_m3",1897 .name = "cortex_m3",
1899 .llvm_name = "cortex-m3",1898 .llvm_name = "cortex-m3",
1900 .features = featureSet(&all_features, &[_]Feature{1899 .features = featureSet(&[_]Feature{
1901 .armv7_m,1900 .armv7_m,
1902 .loop_align,1901 .loop_align,
1903 .m3,1902 .m3,
...@@ -1909,7 +1908,7 @@ pub const cpu = struct {...@@ -1909,7 +1908,7 @@ pub const cpu = struct {
1909 pub const cortex_m33 = Cpu{1908 pub const cortex_m33 = Cpu{
1910 .name = "cortex_m33",1909 .name = "cortex_m33",
1911 .llvm_name = "cortex-m33",1910 .llvm_name = "cortex-m33",
1912 .features = featureSet(&all_features, &[_]Feature{1911 .features = featureSet(&[_]Feature{
1913 .armv8_m_main,1912 .armv8_m_main,
1914 .dsp,1913 .dsp,
1915 .fp_armv8d16sp,1914 .fp_armv8d16sp,
...@@ -1923,7 +1922,7 @@ pub const cpu = struct {...@@ -1923,7 +1922,7 @@ pub const cpu = struct {
1923 pub const cortex_m35p = Cpu{1922 pub const cortex_m35p = Cpu{
1924 .name = "cortex_m35p",1923 .name = "cortex_m35p",
1925 .llvm_name = "cortex-m35p",1924 .llvm_name = "cortex-m35p",
1926 .features = featureSet(&all_features, &[_]Feature{1925 .features = featureSet(&[_]Feature{
1927 .armv8_m_main,1926 .armv8_m_main,
1928 .dsp,1927 .dsp,
1929 .fp_armv8d16sp,1928 .fp_armv8d16sp,
...@@ -1937,7 +1936,7 @@ pub const cpu = struct {...@@ -1937,7 +1936,7 @@ pub const cpu = struct {
1937 pub const cortex_m4 = Cpu{1936 pub const cortex_m4 = Cpu{
1938 .name = "cortex_m4",1937 .name = "cortex_m4",
1939 .llvm_name = "cortex-m4",1938 .llvm_name = "cortex-m4",
1940 .features = featureSet(&all_features, &[_]Feature{1939 .features = featureSet(&[_]Feature{
1941 .armv7e_m,1940 .armv7e_m,
1942 .loop_align,1941 .loop_align,
1943 .no_branch_predictor,1942 .no_branch_predictor,
...@@ -1950,7 +1949,7 @@ pub const cpu = struct {...@@ -1950,7 +1949,7 @@ pub const cpu = struct {
1950 pub const cortex_m7 = Cpu{1949 pub const cortex_m7 = Cpu{
1951 .name = "cortex_m7",1950 .name = "cortex_m7",
1952 .llvm_name = "cortex-m7",1951 .llvm_name = "cortex-m7",
1953 .features = featureSet(&all_features, &[_]Feature{1952 .features = featureSet(&[_]Feature{
1954 .armv7e_m,1953 .armv7e_m,
1955 .fp_armv8d16,1954 .fp_armv8d16,
1956 }),1955 }),
...@@ -1958,7 +1957,7 @@ pub const cpu = struct {...@@ -1958,7 +1957,7 @@ pub const cpu = struct {
1958 pub const cortex_r4 = Cpu{1957 pub const cortex_r4 = Cpu{
1959 .name = "cortex_r4",1958 .name = "cortex_r4",
1960 .llvm_name = "cortex-r4",1959 .llvm_name = "cortex-r4",
1961 .features = featureSet(&all_features, &[_]Feature{1960 .features = featureSet(&[_]Feature{
1962 .armv7_r,1961 .armv7_r,
1963 .avoid_partial_cpsr,1962 .avoid_partial_cpsr,
1964 .r4,1963 .r4,
...@@ -1968,7 +1967,7 @@ pub const cpu = struct {...@@ -1968,7 +1967,7 @@ pub const cpu = struct {
1968 pub const cortex_r4f = Cpu{1967 pub const cortex_r4f = Cpu{
1969 .name = "cortex_r4f",1968 .name = "cortex_r4f",
1970 .llvm_name = "cortex-r4f",1969 .llvm_name = "cortex-r4f",
1971 .features = featureSet(&all_features, &[_]Feature{1970 .features = featureSet(&[_]Feature{
1972 .armv7_r,1971 .armv7_r,
1973 .avoid_partial_cpsr,1972 .avoid_partial_cpsr,
1974 .r4,1973 .r4,
...@@ -1981,7 +1980,7 @@ pub const cpu = struct {...@@ -1981,7 +1980,7 @@ pub const cpu = struct {
1981 pub const cortex_r5 = Cpu{1980 pub const cortex_r5 = Cpu{
1982 .name = "cortex_r5",1981 .name = "cortex_r5",
1983 .llvm_name = "cortex-r5",1982 .llvm_name = "cortex-r5",
1984 .features = featureSet(&all_features, &[_]Feature{1983 .features = featureSet(&[_]Feature{
1985 .armv7_r,1984 .armv7_r,
1986 .avoid_partial_cpsr,1985 .avoid_partial_cpsr,
1987 .hwdiv_arm,1986 .hwdiv_arm,
...@@ -1995,7 +1994,7 @@ pub const cpu = struct {...@@ -1995,7 +1994,7 @@ pub const cpu = struct {
1995 pub const cortex_r52 = Cpu{1994 pub const cortex_r52 = Cpu{
1996 .name = "cortex_r52",1995 .name = "cortex_r52",
1997 .llvm_name = "cortex-r52",1996 .llvm_name = "cortex-r52",
1998 .features = featureSet(&all_features, &[_]Feature{1997 .features = featureSet(&[_]Feature{
1999 .armv8_r,1998 .armv8_r,
2000 .fpao,1999 .fpao,
2001 .r52,2000 .r52,
...@@ -2006,7 +2005,7 @@ pub const cpu = struct {...@@ -2006,7 +2005,7 @@ pub const cpu = struct {
2006 pub const cortex_r7 = Cpu{2005 pub const cortex_r7 = Cpu{
2007 .name = "cortex_r7",2006 .name = "cortex_r7",
2008 .llvm_name = "cortex-r7",2007 .llvm_name = "cortex-r7",
2009 .features = featureSet(&all_features, &[_]Feature{2008 .features = featureSet(&[_]Feature{
2010 .armv7_r,2009 .armv7_r,
2011 .avoid_partial_cpsr,2010 .avoid_partial_cpsr,
2012 .fp16,2011 .fp16,
...@@ -2022,7 +2021,7 @@ pub const cpu = struct {...@@ -2022,7 +2021,7 @@ pub const cpu = struct {
2022 pub const cortex_r8 = Cpu{2021 pub const cortex_r8 = Cpu{
2023 .name = "cortex_r8",2022 .name = "cortex_r8",
2024 .llvm_name = "cortex-r8",2023 .llvm_name = "cortex-r8",
2025 .features = featureSet(&all_features, &[_]Feature{2024 .features = featureSet(&[_]Feature{
2026 .armv7_r,2025 .armv7_r,
2027 .avoid_partial_cpsr,2026 .avoid_partial_cpsr,
2028 .fp16,2027 .fp16,
...@@ -2037,7 +2036,7 @@ pub const cpu = struct {...@@ -2037,7 +2036,7 @@ pub const cpu = struct {
2037 pub const cyclone = Cpu{2036 pub const cyclone = Cpu{
2038 .name = "cyclone",2037 .name = "cyclone",
2039 .llvm_name = "cyclone",2038 .llvm_name = "cyclone",
2040 .features = featureSet(&all_features, &[_]Feature{2039 .features = featureSet(&[_]Feature{
2041 .armv8_a,2040 .armv8_a,
2042 .avoid_movs_shop,2041 .avoid_movs_shop,
2043 .avoid_partial_cpsr,2042 .avoid_partial_cpsr,
...@@ -2058,14 +2057,14 @@ pub const cpu = struct {...@@ -2058,14 +2057,14 @@ pub const cpu = struct {
2058 pub const ep9312 = Cpu{2057 pub const ep9312 = Cpu{
2059 .name = "ep9312",2058 .name = "ep9312",
2060 .llvm_name = "ep9312",2059 .llvm_name = "ep9312",
2061 .features = featureSet(&all_features, &[_]Feature{2060 .features = featureSet(&[_]Feature{
2062 .armv4t,2061 .armv4t,
2063 }),2062 }),
2064 };2063 };
2065 pub const exynos_m1 = Cpu{2064 pub const exynos_m1 = Cpu{
2066 .name = "exynos_m1",2065 .name = "exynos_m1",
2067 .llvm_name = "exynos-m1",2066 .llvm_name = "exynos-m1",
2068 .features = featureSet(&all_features, &[_]Feature{2067 .features = featureSet(&[_]Feature{
2069 .armv8_a,2068 .armv8_a,
2070 .exynos,2069 .exynos,
2071 }),2070 }),
...@@ -2073,7 +2072,7 @@ pub const cpu = struct {...@@ -2073,7 +2072,7 @@ pub const cpu = struct {
2073 pub const exynos_m2 = Cpu{2072 pub const exynos_m2 = Cpu{
2074 .name = "exynos_m2",2073 .name = "exynos_m2",
2075 .llvm_name = "exynos-m2",2074 .llvm_name = "exynos-m2",
2076 .features = featureSet(&all_features, &[_]Feature{2075 .features = featureSet(&[_]Feature{
2077 .armv8_a,2076 .armv8_a,
2078 .exynos,2077 .exynos,
2079 }),2078 }),
...@@ -2081,7 +2080,7 @@ pub const cpu = struct {...@@ -2081,7 +2080,7 @@ pub const cpu = struct {
2081 pub const exynos_m3 = Cpu{2080 pub const exynos_m3 = Cpu{
2082 .name = "exynos_m3",2081 .name = "exynos_m3",
2083 .llvm_name = "exynos-m3",2082 .llvm_name = "exynos-m3",
2084 .features = featureSet(&all_features, &[_]Feature{2083 .features = featureSet(&[_]Feature{
2085 .armv8_a,2084 .armv8_a,
2086 .exynos,2085 .exynos,
2087 }),2086 }),
...@@ -2089,7 +2088,7 @@ pub const cpu = struct {...@@ -2089,7 +2088,7 @@ pub const cpu = struct {
2089 pub const exynos_m4 = Cpu{2088 pub const exynos_m4 = Cpu{
2090 .name = "exynos_m4",2089 .name = "exynos_m4",
2091 .llvm_name = "exynos-m4",2090 .llvm_name = "exynos-m4",
2092 .features = featureSet(&all_features, &[_]Feature{2091 .features = featureSet(&[_]Feature{
2093 .armv8_2_a,2092 .armv8_2_a,
2094 .dotprod,2093 .dotprod,
2095 .exynos,2094 .exynos,
...@@ -2099,7 +2098,7 @@ pub const cpu = struct {...@@ -2099,7 +2098,7 @@ pub const cpu = struct {
2099 pub const exynos_m5 = Cpu{2098 pub const exynos_m5 = Cpu{
2100 .name = "exynos_m5",2099 .name = "exynos_m5",
2101 .llvm_name = "exynos-m5",2100 .llvm_name = "exynos-m5",
2102 .features = featureSet(&all_features, &[_]Feature{2101 .features = featureSet(&[_]Feature{
2103 .armv8_2_a,2102 .armv8_2_a,
2104 .dotprod,2103 .dotprod,
2105 .exynos,2104 .exynos,
...@@ -2109,19 +2108,19 @@ pub const cpu = struct {...@@ -2109,19 +2108,19 @@ pub const cpu = struct {
2109 pub const generic = Cpu{2108 pub const generic = Cpu{
2110 .name = "generic",2109 .name = "generic",
2111 .llvm_name = "generic",2110 .llvm_name = "generic",
2112 .features = featureSet(&all_features, &[_]Feature{}),2111 .features = featureSet(&[_]Feature{}),
2113 };2112 };
2114 pub const iwmmxt = Cpu{2113 pub const iwmmxt = Cpu{
2115 .name = "iwmmxt",2114 .name = "iwmmxt",
2116 .llvm_name = "iwmmxt",2115 .llvm_name = "iwmmxt",
2117 .features = featureSet(&all_features, &[_]Feature{2116 .features = featureSet(&[_]Feature{
2118 .armv5te,2117 .armv5te,
2119 }),2118 }),
2120 };2119 };
2121 pub const krait = Cpu{2120 pub const krait = Cpu{
2122 .name = "krait",2121 .name = "krait",
2123 .llvm_name = "krait",2122 .llvm_name = "krait",
2124 .features = featureSet(&all_features, &[_]Feature{2123 .features = featureSet(&[_]Feature{
2125 .armv7_a,2124 .armv7_a,
2126 .avoid_partial_cpsr,2125 .avoid_partial_cpsr,
2127 .fp16,2126 .fp16,
...@@ -2138,7 +2137,7 @@ pub const cpu = struct {...@@ -2138,7 +2137,7 @@ pub const cpu = struct {
2138 pub const kryo = Cpu{2137 pub const kryo = Cpu{
2139 .name = "kryo",2138 .name = "kryo",
2140 .llvm_name = "kryo",2139 .llvm_name = "kryo",
2141 .features = featureSet(&all_features, &[_]Feature{2140 .features = featureSet(&[_]Feature{
2142 .armv8_a,2141 .armv8_a,
2143 .crc,2142 .crc,
2144 .crypto,2143 .crypto,
...@@ -2150,7 +2149,7 @@ pub const cpu = struct {...@@ -2150,7 +2149,7 @@ pub const cpu = struct {
2150 pub const mpcore = Cpu{2149 pub const mpcore = Cpu{
2151 .name = "mpcore",2150 .name = "mpcore",
2152 .llvm_name = "mpcore",2151 .llvm_name = "mpcore",
2153 .features = featureSet(&all_features, &[_]Feature{2152 .features = featureSet(&[_]Feature{
2154 .armv6k,2153 .armv6k,
2155 .slowfpvmlx,2154 .slowfpvmlx,
2156 .vfp2,2155 .vfp2,
...@@ -2159,21 +2158,21 @@ pub const cpu = struct {...@@ -2159,21 +2158,21 @@ pub const cpu = struct {
2159 pub const mpcorenovfp = Cpu{2158 pub const mpcorenovfp = Cpu{
2160 .name = "mpcorenovfp",2159 .name = "mpcorenovfp",
2161 .llvm_name = "mpcorenovfp",2160 .llvm_name = "mpcorenovfp",
2162 .features = featureSet(&all_features, &[_]Feature{2161 .features = featureSet(&[_]Feature{
2163 .armv6k,2162 .armv6k,
2164 }),2163 }),
2165 };2164 };
2166 pub const sc000 = Cpu{2165 pub const sc000 = Cpu{
2167 .name = "sc000",2166 .name = "sc000",
2168 .llvm_name = "sc000",2167 .llvm_name = "sc000",
2169 .features = featureSet(&all_features, &[_]Feature{2168 .features = featureSet(&[_]Feature{
2170 .armv6_m,2169 .armv6_m,
2171 }),2170 }),
2172 };2171 };
2173 pub const sc300 = Cpu{2172 pub const sc300 = Cpu{
2174 .name = "sc300",2173 .name = "sc300",
2175 .llvm_name = "sc300",2174 .llvm_name = "sc300",
2176 .features = featureSet(&all_features, &[_]Feature{2175 .features = featureSet(&[_]Feature{
2177 .armv7_m,2176 .armv7_m,
2178 .m3,2177 .m3,
2179 .no_branch_predictor,2178 .no_branch_predictor,
...@@ -2184,35 +2183,35 @@ pub const cpu = struct {...@@ -2184,35 +2183,35 @@ pub const cpu = struct {
2184 pub const strongarm = Cpu{2183 pub const strongarm = Cpu{
2185 .name = "strongarm",2184 .name = "strongarm",
2186 .llvm_name = "strongarm",2185 .llvm_name = "strongarm",
2187 .features = featureSet(&all_features, &[_]Feature{2186 .features = featureSet(&[_]Feature{
2188 .armv4,2187 .armv4,
2189 }),2188 }),
2190 };2189 };
2191 pub const strongarm110 = Cpu{2190 pub const strongarm110 = Cpu{
2192 .name = "strongarm110",2191 .name = "strongarm110",
2193 .llvm_name = "strongarm110",2192 .llvm_name = "strongarm110",
2194 .features = featureSet(&all_features, &[_]Feature{2193 .features = featureSet(&[_]Feature{
2195 .armv4,2194 .armv4,
2196 }),2195 }),
2197 };2196 };
2198 pub const strongarm1100 = Cpu{2197 pub const strongarm1100 = Cpu{
2199 .name = "strongarm1100",2198 .name = "strongarm1100",
2200 .llvm_name = "strongarm1100",2199 .llvm_name = "strongarm1100",
2201 .features = featureSet(&all_features, &[_]Feature{2200 .features = featureSet(&[_]Feature{
2202 .armv4,2201 .armv4,
2203 }),2202 }),
2204 };2203 };
2205 pub const strongarm1110 = Cpu{2204 pub const strongarm1110 = Cpu{
2206 .name = "strongarm1110",2205 .name = "strongarm1110",
2207 .llvm_name = "strongarm1110",2206 .llvm_name = "strongarm1110",
2208 .features = featureSet(&all_features, &[_]Feature{2207 .features = featureSet(&[_]Feature{
2209 .armv4,2208 .armv4,
2210 }),2209 }),
2211 };2210 };
2212 pub const swift = Cpu{2211 pub const swift = Cpu{
2213 .name = "swift",2212 .name = "swift",
2214 .llvm_name = "swift",2213 .llvm_name = "swift",
2215 .features = featureSet(&all_features, &[_]Feature{2214 .features = featureSet(&[_]Feature{
2216 .armv7_a,2215 .armv7_a,
2217 .avoid_movs_shop,2216 .avoid_movs_shop,
2218 .avoid_partial_cpsr,2217 .avoid_partial_cpsr,
...@@ -2239,7 +2238,7 @@ pub const cpu = struct {...@@ -2239,7 +2238,7 @@ pub const cpu = struct {
2239 pub const xscale = Cpu{2238 pub const xscale = Cpu{
2240 .name = "xscale",2239 .name = "xscale",
2241 .llvm_name = "xscale",2240 .llvm_name = "xscale",
2242 .features = featureSet(&all_features, &[_]Feature{2241 .features = featureSet(&[_]Feature{
2243 .armv5te,2242 .armv5te,
2244 }),2243 }),
2245 };2244 };
lib/std/target/avr.zig+291-292
...@@ -46,17 +46,17 @@ pub const all_features = blk: {...@@ -46,17 +46,17 @@ pub const all_features = blk: {
46 result[@enumToInt(Feature.addsubiw)] = .{46 result[@enumToInt(Feature.addsubiw)] = .{
47 .llvm_name = "addsubiw",47 .llvm_name = "addsubiw",
48 .description = "Enable 16-bit register-immediate addition and subtraction instructions",48 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
49 .dependencies = sparseFeatureSet(&[_]Feature{}),49 .dependencies = featureSet(&[_]Feature{}),
50 };50 };
51 result[@enumToInt(Feature.avr0)] = .{51 result[@enumToInt(Feature.avr0)] = .{
52 .llvm_name = "avr0",52 .llvm_name = "avr0",
53 .description = "The device is a part of the avr0 family",53 .description = "The device is a part of the avr0 family",
54 .dependencies = sparseFeatureSet(&[_]Feature{}),54 .dependencies = featureSet(&[_]Feature{}),
55 };55 };
56 result[@enumToInt(Feature.avr1)] = .{56 result[@enumToInt(Feature.avr1)] = .{
57 .llvm_name = "avr1",57 .llvm_name = "avr1",
58 .description = "The device is a part of the avr1 family",58 .description = "The device is a part of the avr1 family",
59 .dependencies = sparseFeatureSet(&[_]Feature{59 .dependencies = featureSet(&[_]Feature{
60 .avr0,60 .avr0,
61 .lpm,61 .lpm,
62 }),62 }),
...@@ -64,7 +64,7 @@ pub const all_features = blk: {...@@ -64,7 +64,7 @@ pub const all_features = blk: {
64 result[@enumToInt(Feature.avr2)] = .{64 result[@enumToInt(Feature.avr2)] = .{
65 .llvm_name = "avr2",65 .llvm_name = "avr2",
66 .description = "The device is a part of the avr2 family",66 .description = "The device is a part of the avr2 family",
67 .dependencies = sparseFeatureSet(&[_]Feature{67 .dependencies = featureSet(&[_]Feature{
68 .addsubiw,68 .addsubiw,
69 .avr1,69 .avr1,
70 .ijmpcall,70 .ijmpcall,
...@@ -74,7 +74,7 @@ pub const all_features = blk: {...@@ -74,7 +74,7 @@ pub const all_features = blk: {
74 result[@enumToInt(Feature.avr25)] = .{74 result[@enumToInt(Feature.avr25)] = .{
75 .llvm_name = "avr25",75 .llvm_name = "avr25",
76 .description = "The device is a part of the avr25 family",76 .description = "The device is a part of the avr25 family",
77 .dependencies = sparseFeatureSet(&[_]Feature{77 .dependencies = featureSet(&[_]Feature{
78 .avr2,78 .avr2,
79 .@"break",79 .@"break",
80 .lpmx,80 .lpmx,
...@@ -85,7 +85,7 @@ pub const all_features = blk: {...@@ -85,7 +85,7 @@ pub const all_features = blk: {
85 result[@enumToInt(Feature.avr3)] = .{85 result[@enumToInt(Feature.avr3)] = .{
86 .llvm_name = "avr3",86 .llvm_name = "avr3",
87 .description = "The device is a part of the avr3 family",87 .description = "The device is a part of the avr3 family",
88 .dependencies = sparseFeatureSet(&[_]Feature{88 .dependencies = featureSet(&[_]Feature{
89 .avr2,89 .avr2,
90 .jmpcall,90 .jmpcall,
91 }),91 }),
...@@ -93,7 +93,7 @@ pub const all_features = blk: {...@@ -93,7 +93,7 @@ pub const all_features = blk: {
93 result[@enumToInt(Feature.avr31)] = .{93 result[@enumToInt(Feature.avr31)] = .{
94 .llvm_name = "avr31",94 .llvm_name = "avr31",
95 .description = "The device is a part of the avr31 family",95 .description = "The device is a part of the avr31 family",
96 .dependencies = sparseFeatureSet(&[_]Feature{96 .dependencies = featureSet(&[_]Feature{
97 .avr3,97 .avr3,
98 .elpm,98 .elpm,
99 }),99 }),
...@@ -101,7 +101,7 @@ pub const all_features = blk: {...@@ -101,7 +101,7 @@ pub const all_features = blk: {
101 result[@enumToInt(Feature.avr35)] = .{101 result[@enumToInt(Feature.avr35)] = .{
102 .llvm_name = "avr35",102 .llvm_name = "avr35",
103 .description = "The device is a part of the avr35 family",103 .description = "The device is a part of the avr35 family",
104 .dependencies = sparseFeatureSet(&[_]Feature{104 .dependencies = featureSet(&[_]Feature{
105 .avr3,105 .avr3,
106 .@"break",106 .@"break",
107 .lpmx,107 .lpmx,
...@@ -112,7 +112,7 @@ pub const all_features = blk: {...@@ -112,7 +112,7 @@ pub const all_features = blk: {
112 result[@enumToInt(Feature.avr4)] = .{112 result[@enumToInt(Feature.avr4)] = .{
113 .llvm_name = "avr4",113 .llvm_name = "avr4",
114 .description = "The device is a part of the avr4 family",114 .description = "The device is a part of the avr4 family",
115 .dependencies = sparseFeatureSet(&[_]Feature{115 .dependencies = featureSet(&[_]Feature{
116 .avr2,116 .avr2,
117 .@"break",117 .@"break",
118 .lpmx,118 .lpmx,
...@@ -124,7 +124,7 @@ pub const all_features = blk: {...@@ -124,7 +124,7 @@ pub const all_features = blk: {
124 result[@enumToInt(Feature.avr5)] = .{124 result[@enumToInt(Feature.avr5)] = .{
125 .llvm_name = "avr5",125 .llvm_name = "avr5",
126 .description = "The device is a part of the avr5 family",126 .description = "The device is a part of the avr5 family",
127 .dependencies = sparseFeatureSet(&[_]Feature{127 .dependencies = featureSet(&[_]Feature{
128 .avr3,128 .avr3,
129 .@"break",129 .@"break",
130 .lpmx,130 .lpmx,
...@@ -136,7 +136,7 @@ pub const all_features = blk: {...@@ -136,7 +136,7 @@ pub const all_features = blk: {
136 result[@enumToInt(Feature.avr51)] = .{136 result[@enumToInt(Feature.avr51)] = .{
137 .llvm_name = "avr51",137 .llvm_name = "avr51",
138 .description = "The device is a part of the avr51 family",138 .description = "The device is a part of the avr51 family",
139 .dependencies = sparseFeatureSet(&[_]Feature{139 .dependencies = featureSet(&[_]Feature{
140 .avr5,140 .avr5,
141 .elpm,141 .elpm,
142 .elpmx,142 .elpmx,
...@@ -145,14 +145,14 @@ pub const all_features = blk: {...@@ -145,14 +145,14 @@ pub const all_features = blk: {
145 result[@enumToInt(Feature.avr6)] = .{145 result[@enumToInt(Feature.avr6)] = .{
146 .llvm_name = "avr6",146 .llvm_name = "avr6",
147 .description = "The device is a part of the avr6 family",147 .description = "The device is a part of the avr6 family",
148 .dependencies = sparseFeatureSet(&[_]Feature{148 .dependencies = featureSet(&[_]Feature{
149 .avr51,149 .avr51,
150 }),150 }),
151 };151 };
152 result[@enumToInt(Feature.avrtiny)] = .{152 result[@enumToInt(Feature.avrtiny)] = .{
153 .llvm_name = "avrtiny",153 .llvm_name = "avrtiny",
154 .description = "The device is a part of the avrtiny family",154 .description = "The device is a part of the avrtiny family",
155 .dependencies = sparseFeatureSet(&[_]Feature{155 .dependencies = featureSet(&[_]Feature{
156 .avr0,156 .avr0,
157 .@"break",157 .@"break",
158 .sram,158 .sram,
...@@ -162,72 +162,72 @@ pub const all_features = blk: {...@@ -162,72 +162,72 @@ pub const all_features = blk: {
162 result[@enumToInt(Feature.@"break")] = .{162 result[@enumToInt(Feature.@"break")] = .{
163 .llvm_name = "break",163 .llvm_name = "break",
164 .description = "The device supports the `BREAK` debugging instruction",164 .description = "The device supports the `BREAK` debugging instruction",
165 .dependencies = sparseFeatureSet(&[_]Feature{}),165 .dependencies = featureSet(&[_]Feature{}),
166 };166 };
167 result[@enumToInt(Feature.des)] = .{167 result[@enumToInt(Feature.des)] = .{
168 .llvm_name = "des",168 .llvm_name = "des",
169 .description = "The device supports the `DES k` encryption instruction",169 .description = "The device supports the `DES k` encryption instruction",
170 .dependencies = sparseFeatureSet(&[_]Feature{}),170 .dependencies = featureSet(&[_]Feature{}),
171 };171 };
172 result[@enumToInt(Feature.eijmpcall)] = .{172 result[@enumToInt(Feature.eijmpcall)] = .{
173 .llvm_name = "eijmpcall",173 .llvm_name = "eijmpcall",
174 .description = "The device supports the `EIJMP`/`EICALL` instructions",174 .description = "The device supports the `EIJMP`/`EICALL` instructions",
175 .dependencies = sparseFeatureSet(&[_]Feature{}),175 .dependencies = featureSet(&[_]Feature{}),
176 };176 };
177 result[@enumToInt(Feature.elpm)] = .{177 result[@enumToInt(Feature.elpm)] = .{
178 .llvm_name = "elpm",178 .llvm_name = "elpm",
179 .description = "The device supports the ELPM instruction",179 .description = "The device supports the ELPM instruction",
180 .dependencies = sparseFeatureSet(&[_]Feature{}),180 .dependencies = featureSet(&[_]Feature{}),
181 };181 };
182 result[@enumToInt(Feature.elpmx)] = .{182 result[@enumToInt(Feature.elpmx)] = .{
183 .llvm_name = "elpmx",183 .llvm_name = "elpmx",
184 .description = "The device supports the `ELPM Rd, Z[+]` instructions",184 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
185 .dependencies = sparseFeatureSet(&[_]Feature{}),185 .dependencies = featureSet(&[_]Feature{}),
186 };186 };
187 result[@enumToInt(Feature.ijmpcall)] = .{187 result[@enumToInt(Feature.ijmpcall)] = .{
188 .llvm_name = "ijmpcall",188 .llvm_name = "ijmpcall",
189 .description = "The device supports `IJMP`/`ICALL`instructions",189 .description = "The device supports `IJMP`/`ICALL`instructions",
190 .dependencies = sparseFeatureSet(&[_]Feature{}),190 .dependencies = featureSet(&[_]Feature{}),
191 };191 };
192 result[@enumToInt(Feature.jmpcall)] = .{192 result[@enumToInt(Feature.jmpcall)] = .{
193 .llvm_name = "jmpcall",193 .llvm_name = "jmpcall",
194 .description = "The device supports the `JMP` and `CALL` instructions",194 .description = "The device supports the `JMP` and `CALL` instructions",
195 .dependencies = sparseFeatureSet(&[_]Feature{}),195 .dependencies = featureSet(&[_]Feature{}),
196 };196 };
197 result[@enumToInt(Feature.lpm)] = .{197 result[@enumToInt(Feature.lpm)] = .{
198 .llvm_name = "lpm",198 .llvm_name = "lpm",
199 .description = "The device supports the `LPM` instruction",199 .description = "The device supports the `LPM` instruction",
200 .dependencies = sparseFeatureSet(&[_]Feature{}),200 .dependencies = featureSet(&[_]Feature{}),
201 };201 };
202 result[@enumToInt(Feature.lpmx)] = .{202 result[@enumToInt(Feature.lpmx)] = .{
203 .llvm_name = "lpmx",203 .llvm_name = "lpmx",
204 .description = "The device supports the `LPM Rd, Z[+]` instruction",204 .description = "The device supports the `LPM Rd, Z[+]` instruction",
205 .dependencies = sparseFeatureSet(&[_]Feature{}),205 .dependencies = featureSet(&[_]Feature{}),
206 };206 };
207 result[@enumToInt(Feature.movw)] = .{207 result[@enumToInt(Feature.movw)] = .{
208 .llvm_name = "movw",208 .llvm_name = "movw",
209 .description = "The device supports the 16-bit MOVW instruction",209 .description = "The device supports the 16-bit MOVW instruction",
210 .dependencies = sparseFeatureSet(&[_]Feature{}),210 .dependencies = featureSet(&[_]Feature{}),
211 };211 };
212 result[@enumToInt(Feature.mul)] = .{212 result[@enumToInt(Feature.mul)] = .{
213 .llvm_name = "mul",213 .llvm_name = "mul",
214 .description = "The device supports the multiplication instructions",214 .description = "The device supports the multiplication instructions",
215 .dependencies = sparseFeatureSet(&[_]Feature{}),215 .dependencies = featureSet(&[_]Feature{}),
216 };216 };
217 result[@enumToInt(Feature.rmw)] = .{217 result[@enumToInt(Feature.rmw)] = .{
218 .llvm_name = "rmw",218 .llvm_name = "rmw",
219 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",219 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
220 .dependencies = sparseFeatureSet(&[_]Feature{}),220 .dependencies = featureSet(&[_]Feature{}),
221 };221 };
222 result[@enumToInt(Feature.smallstack)] = .{222 result[@enumToInt(Feature.smallstack)] = .{
223 .llvm_name = "smallstack",223 .llvm_name = "smallstack",
224 .description = "The device has an 8-bit stack pointer",224 .description = "The device has an 8-bit stack pointer",
225 .dependencies = sparseFeatureSet(&[_]Feature{}),225 .dependencies = featureSet(&[_]Feature{}),
226 };226 };
227 result[@enumToInt(Feature.special)] = .{227 result[@enumToInt(Feature.special)] = .{
228 .llvm_name = "special",228 .llvm_name = "special",
229 .description = "Enable use of the entire instruction set - used for debugging",229 .description = "Enable use of the entire instruction set - used for debugging",
230 .dependencies = sparseFeatureSet(&[_]Feature{230 .dependencies = featureSet(&[_]Feature{
231 .addsubiw,231 .addsubiw,
232 .@"break",232 .@"break",
233 .des,233 .des,
...@@ -249,27 +249,27 @@ pub const all_features = blk: {...@@ -249,27 +249,27 @@ pub const all_features = blk: {
249 result[@enumToInt(Feature.spm)] = .{249 result[@enumToInt(Feature.spm)] = .{
250 .llvm_name = "spm",250 .llvm_name = "spm",
251 .description = "The device supports the `SPM` instruction",251 .description = "The device supports the `SPM` instruction",
252 .dependencies = sparseFeatureSet(&[_]Feature{}),252 .dependencies = featureSet(&[_]Feature{}),
253 };253 };
254 result[@enumToInt(Feature.spmx)] = .{254 result[@enumToInt(Feature.spmx)] = .{
255 .llvm_name = "spmx",255 .llvm_name = "spmx",
256 .description = "The device supports the `SPM Z+` instruction",256 .description = "The device supports the `SPM Z+` instruction",
257 .dependencies = sparseFeatureSet(&[_]Feature{}),257 .dependencies = featureSet(&[_]Feature{}),
258 };258 };
259 result[@enumToInt(Feature.sram)] = .{259 result[@enumToInt(Feature.sram)] = .{
260 .llvm_name = "sram",260 .llvm_name = "sram",
261 .description = "The device has random access memory",261 .description = "The device has random access memory",
262 .dependencies = sparseFeatureSet(&[_]Feature{}),262 .dependencies = featureSet(&[_]Feature{}),
263 };263 };
264 result[@enumToInt(Feature.tinyencoding)] = .{264 result[@enumToInt(Feature.tinyencoding)] = .{
265 .llvm_name = "tinyencoding",265 .llvm_name = "tinyencoding",
266 .description = "The device has Tiny core specific instruction encodings",266 .description = "The device has Tiny core specific instruction encodings",
267 .dependencies = sparseFeatureSet(&[_]Feature{}),267 .dependencies = featureSet(&[_]Feature{}),
268 };268 };
269 result[@enumToInt(Feature.xmega)] = .{269 result[@enumToInt(Feature.xmega)] = .{
270 .llvm_name = "xmega",270 .llvm_name = "xmega",
271 .description = "The device is a part of the xmega family",271 .description = "The device is a part of the xmega family",
272 .dependencies = sparseFeatureSet(&[_]Feature{272 .dependencies = featureSet(&[_]Feature{
273 .avr51,273 .avr51,
274 .des,274 .des,
275 .eijmpcall,275 .eijmpcall,
...@@ -279,7 +279,7 @@ pub const all_features = blk: {...@@ -279,7 +279,7 @@ pub const all_features = blk: {
279 result[@enumToInt(Feature.xmegau)] = .{279 result[@enumToInt(Feature.xmegau)] = .{
280 .llvm_name = "xmegau",280 .llvm_name = "xmegau",
281 .description = "The device is a part of the xmegau family",281 .description = "The device is a part of the xmegau family",
282 .dependencies = sparseFeatureSet(&[_]Feature{282 .dependencies = featureSet(&[_]Feature{
283 .rmw,283 .rmw,
284 .xmega,284 .xmega,
285 }),285 }),
...@@ -288,7 +288,6 @@ pub const all_features = blk: {...@@ -288,7 +288,6 @@ pub const all_features = blk: {
288 for (result) |*elem, i| {288 for (result) |*elem, i| {
289 elem.index = i;289 elem.index = i;
290 elem.name = ti.Enum.fields[i].name;290 elem.name = ti.Enum.fields[i].name;
291 elem.dependencies.initAsDependencies(i, &result);
292 }291 }
293 break :blk result;292 break :blk result;
294};293};
...@@ -297,28 +296,28 @@ pub const cpu = struct {...@@ -297,28 +296,28 @@ pub const cpu = struct {
297 pub const at43usb320 = Cpu{296 pub const at43usb320 = Cpu{
298 .name = "at43usb320",297 .name = "at43usb320",
299 .llvm_name = "at43usb320",298 .llvm_name = "at43usb320",
300 .features = featureSet(&all_features, &[_]Feature{299 .features = featureSet(&[_]Feature{
301 .avr31,300 .avr31,
302 }),301 }),
303 };302 };
304 pub const at43usb355 = Cpu{303 pub const at43usb355 = Cpu{
305 .name = "at43usb355",304 .name = "at43usb355",
306 .llvm_name = "at43usb355",305 .llvm_name = "at43usb355",
307 .features = featureSet(&all_features, &[_]Feature{306 .features = featureSet(&[_]Feature{
308 .avr3,307 .avr3,
309 }),308 }),
310 };309 };
311 pub const at76c711 = Cpu{310 pub const at76c711 = Cpu{
312 .name = "at76c711",311 .name = "at76c711",
313 .llvm_name = "at76c711",312 .llvm_name = "at76c711",
314 .features = featureSet(&all_features, &[_]Feature{313 .features = featureSet(&[_]Feature{
315 .avr3,314 .avr3,
316 }),315 }),
317 };316 };
318 pub const at86rf401 = Cpu{317 pub const at86rf401 = Cpu{
319 .name = "at86rf401",318 .name = "at86rf401",
320 .llvm_name = "at86rf401",319 .llvm_name = "at86rf401",
321 .features = featureSet(&all_features, &[_]Feature{320 .features = featureSet(&[_]Feature{
322 .avr2,321 .avr2,
323 .lpmx,322 .lpmx,
324 .movw,323 .movw,
...@@ -327,217 +326,217 @@ pub const cpu = struct {...@@ -327,217 +326,217 @@ pub const cpu = struct {
327 pub const at90c8534 = Cpu{326 pub const at90c8534 = Cpu{
328 .name = "at90c8534",327 .name = "at90c8534",
329 .llvm_name = "at90c8534",328 .llvm_name = "at90c8534",
330 .features = featureSet(&all_features, &[_]Feature{329 .features = featureSet(&[_]Feature{
331 .avr2,330 .avr2,
332 }),331 }),
333 };332 };
334 pub const at90can128 = Cpu{333 pub const at90can128 = Cpu{
335 .name = "at90can128",334 .name = "at90can128",
336 .llvm_name = "at90can128",335 .llvm_name = "at90can128",
337 .features = featureSet(&all_features, &[_]Feature{336 .features = featureSet(&[_]Feature{
338 .avr51,337 .avr51,
339 }),338 }),
340 };339 };
341 pub const at90can32 = Cpu{340 pub const at90can32 = Cpu{
342 .name = "at90can32",341 .name = "at90can32",
343 .llvm_name = "at90can32",342 .llvm_name = "at90can32",
344 .features = featureSet(&all_features, &[_]Feature{343 .features = featureSet(&[_]Feature{
345 .avr5,344 .avr5,
346 }),345 }),
347 };346 };
348 pub const at90can64 = Cpu{347 pub const at90can64 = Cpu{
349 .name = "at90can64",348 .name = "at90can64",
350 .llvm_name = "at90can64",349 .llvm_name = "at90can64",
351 .features = featureSet(&all_features, &[_]Feature{350 .features = featureSet(&[_]Feature{
352 .avr5,351 .avr5,
353 }),352 }),
354 };353 };
355 pub const at90pwm1 = Cpu{354 pub const at90pwm1 = Cpu{
356 .name = "at90pwm1",355 .name = "at90pwm1",
357 .llvm_name = "at90pwm1",356 .llvm_name = "at90pwm1",
358 .features = featureSet(&all_features, &[_]Feature{357 .features = featureSet(&[_]Feature{
359 .avr4,358 .avr4,
360 }),359 }),
361 };360 };
362 pub const at90pwm161 = Cpu{361 pub const at90pwm161 = Cpu{
363 .name = "at90pwm161",362 .name = "at90pwm161",
364 .llvm_name = "at90pwm161",363 .llvm_name = "at90pwm161",
365 .features = featureSet(&all_features, &[_]Feature{364 .features = featureSet(&[_]Feature{
366 .avr5,365 .avr5,
367 }),366 }),
368 };367 };
369 pub const at90pwm2 = Cpu{368 pub const at90pwm2 = Cpu{
370 .name = "at90pwm2",369 .name = "at90pwm2",
371 .llvm_name = "at90pwm2",370 .llvm_name = "at90pwm2",
372 .features = featureSet(&all_features, &[_]Feature{371 .features = featureSet(&[_]Feature{
373 .avr4,372 .avr4,
374 }),373 }),
375 };374 };
376 pub const at90pwm216 = Cpu{375 pub const at90pwm216 = Cpu{
377 .name = "at90pwm216",376 .name = "at90pwm216",
378 .llvm_name = "at90pwm216",377 .llvm_name = "at90pwm216",
379 .features = featureSet(&all_features, &[_]Feature{378 .features = featureSet(&[_]Feature{
380 .avr5,379 .avr5,
381 }),380 }),
382 };381 };
383 pub const at90pwm2b = Cpu{382 pub const at90pwm2b = Cpu{
384 .name = "at90pwm2b",383 .name = "at90pwm2b",
385 .llvm_name = "at90pwm2b",384 .llvm_name = "at90pwm2b",
386 .features = featureSet(&all_features, &[_]Feature{385 .features = featureSet(&[_]Feature{
387 .avr4,386 .avr4,
388 }),387 }),
389 };388 };
390 pub const at90pwm3 = Cpu{389 pub const at90pwm3 = Cpu{
391 .name = "at90pwm3",390 .name = "at90pwm3",
392 .llvm_name = "at90pwm3",391 .llvm_name = "at90pwm3",
393 .features = featureSet(&all_features, &[_]Feature{392 .features = featureSet(&[_]Feature{
394 .avr4,393 .avr4,
395 }),394 }),
396 };395 };
397 pub const at90pwm316 = Cpu{396 pub const at90pwm316 = Cpu{
398 .name = "at90pwm316",397 .name = "at90pwm316",
399 .llvm_name = "at90pwm316",398 .llvm_name = "at90pwm316",
400 .features = featureSet(&all_features, &[_]Feature{399 .features = featureSet(&[_]Feature{
401 .avr5,400 .avr5,
402 }),401 }),
403 };402 };
404 pub const at90pwm3b = Cpu{403 pub const at90pwm3b = Cpu{
405 .name = "at90pwm3b",404 .name = "at90pwm3b",
406 .llvm_name = "at90pwm3b",405 .llvm_name = "at90pwm3b",
407 .features = featureSet(&all_features, &[_]Feature{406 .features = featureSet(&[_]Feature{
408 .avr4,407 .avr4,
409 }),408 }),
410 };409 };
411 pub const at90pwm81 = Cpu{410 pub const at90pwm81 = Cpu{
412 .name = "at90pwm81",411 .name = "at90pwm81",
413 .llvm_name = "at90pwm81",412 .llvm_name = "at90pwm81",
414 .features = featureSet(&all_features, &[_]Feature{413 .features = featureSet(&[_]Feature{
415 .avr4,414 .avr4,
416 }),415 }),
417 };416 };
418 pub const at90s1200 = Cpu{417 pub const at90s1200 = Cpu{
419 .name = "at90s1200",418 .name = "at90s1200",
420 .llvm_name = "at90s1200",419 .llvm_name = "at90s1200",
421 .features = featureSet(&all_features, &[_]Feature{420 .features = featureSet(&[_]Feature{
422 .avr0,421 .avr0,
423 }),422 }),
424 };423 };
425 pub const at90s2313 = Cpu{424 pub const at90s2313 = Cpu{
426 .name = "at90s2313",425 .name = "at90s2313",
427 .llvm_name = "at90s2313",426 .llvm_name = "at90s2313",
428 .features = featureSet(&all_features, &[_]Feature{427 .features = featureSet(&[_]Feature{
429 .avr2,428 .avr2,
430 }),429 }),
431 };430 };
432 pub const at90s2323 = Cpu{431 pub const at90s2323 = Cpu{
433 .name = "at90s2323",432 .name = "at90s2323",
434 .llvm_name = "at90s2323",433 .llvm_name = "at90s2323",
435 .features = featureSet(&all_features, &[_]Feature{434 .features = featureSet(&[_]Feature{
436 .avr2,435 .avr2,
437 }),436 }),
438 };437 };
439 pub const at90s2333 = Cpu{438 pub const at90s2333 = Cpu{
440 .name = "at90s2333",439 .name = "at90s2333",
441 .llvm_name = "at90s2333",440 .llvm_name = "at90s2333",
442 .features = featureSet(&all_features, &[_]Feature{441 .features = featureSet(&[_]Feature{
443 .avr2,442 .avr2,
444 }),443 }),
445 };444 };
446 pub const at90s2343 = Cpu{445 pub const at90s2343 = Cpu{
447 .name = "at90s2343",446 .name = "at90s2343",
448 .llvm_name = "at90s2343",447 .llvm_name = "at90s2343",
449 .features = featureSet(&all_features, &[_]Feature{448 .features = featureSet(&[_]Feature{
450 .avr2,449 .avr2,
451 }),450 }),
452 };451 };
453 pub const at90s4414 = Cpu{452 pub const at90s4414 = Cpu{
454 .name = "at90s4414",453 .name = "at90s4414",
455 .llvm_name = "at90s4414",454 .llvm_name = "at90s4414",
456 .features = featureSet(&all_features, &[_]Feature{455 .features = featureSet(&[_]Feature{
457 .avr2,456 .avr2,
458 }),457 }),
459 };458 };
460 pub const at90s4433 = Cpu{459 pub const at90s4433 = Cpu{
461 .name = "at90s4433",460 .name = "at90s4433",
462 .llvm_name = "at90s4433",461 .llvm_name = "at90s4433",
463 .features = featureSet(&all_features, &[_]Feature{462 .features = featureSet(&[_]Feature{
464 .avr2,463 .avr2,
465 }),464 }),
466 };465 };
467 pub const at90s4434 = Cpu{466 pub const at90s4434 = Cpu{
468 .name = "at90s4434",467 .name = "at90s4434",
469 .llvm_name = "at90s4434",468 .llvm_name = "at90s4434",
470 .features = featureSet(&all_features, &[_]Feature{469 .features = featureSet(&[_]Feature{
471 .avr2,470 .avr2,
472 }),471 }),
473 };472 };
474 pub const at90s8515 = Cpu{473 pub const at90s8515 = Cpu{
475 .name = "at90s8515",474 .name = "at90s8515",
476 .llvm_name = "at90s8515",475 .llvm_name = "at90s8515",
477 .features = featureSet(&all_features, &[_]Feature{476 .features = featureSet(&[_]Feature{
478 .avr2,477 .avr2,
479 }),478 }),
480 };479 };
481 pub const at90s8535 = Cpu{480 pub const at90s8535 = Cpu{
482 .name = "at90s8535",481 .name = "at90s8535",
483 .llvm_name = "at90s8535",482 .llvm_name = "at90s8535",
484 .features = featureSet(&all_features, &[_]Feature{483 .features = featureSet(&[_]Feature{
485 .avr2,484 .avr2,
486 }),485 }),
487 };486 };
488 pub const at90scr100 = Cpu{487 pub const at90scr100 = Cpu{
489 .name = "at90scr100",488 .name = "at90scr100",
490 .llvm_name = "at90scr100",489 .llvm_name = "at90scr100",
491 .features = featureSet(&all_features, &[_]Feature{490 .features = featureSet(&[_]Feature{
492 .avr5,491 .avr5,
493 }),492 }),
494 };493 };
495 pub const at90usb1286 = Cpu{494 pub const at90usb1286 = Cpu{
496 .name = "at90usb1286",495 .name = "at90usb1286",
497 .llvm_name = "at90usb1286",496 .llvm_name = "at90usb1286",
498 .features = featureSet(&all_features, &[_]Feature{497 .features = featureSet(&[_]Feature{
499 .avr51,498 .avr51,
500 }),499 }),
501 };500 };
502 pub const at90usb1287 = Cpu{501 pub const at90usb1287 = Cpu{
503 .name = "at90usb1287",502 .name = "at90usb1287",
504 .llvm_name = "at90usb1287",503 .llvm_name = "at90usb1287",
505 .features = featureSet(&all_features, &[_]Feature{504 .features = featureSet(&[_]Feature{
506 .avr51,505 .avr51,
507 }),506 }),
508 };507 };
509 pub const at90usb162 = Cpu{508 pub const at90usb162 = Cpu{
510 .name = "at90usb162",509 .name = "at90usb162",
511 .llvm_name = "at90usb162",510 .llvm_name = "at90usb162",
512 .features = featureSet(&all_features, &[_]Feature{511 .features = featureSet(&[_]Feature{
513 .avr35,512 .avr35,
514 }),513 }),
515 };514 };
516 pub const at90usb646 = Cpu{515 pub const at90usb646 = Cpu{
517 .name = "at90usb646",516 .name = "at90usb646",
518 .llvm_name = "at90usb646",517 .llvm_name = "at90usb646",
519 .features = featureSet(&all_features, &[_]Feature{518 .features = featureSet(&[_]Feature{
520 .avr5,519 .avr5,
521 }),520 }),
522 };521 };
523 pub const at90usb647 = Cpu{522 pub const at90usb647 = Cpu{
524 .name = "at90usb647",523 .name = "at90usb647",
525 .llvm_name = "at90usb647",524 .llvm_name = "at90usb647",
526 .features = featureSet(&all_features, &[_]Feature{525 .features = featureSet(&[_]Feature{
527 .avr5,526 .avr5,
528 }),527 }),
529 };528 };
530 pub const at90usb82 = Cpu{529 pub const at90usb82 = Cpu{
531 .name = "at90usb82",530 .name = "at90usb82",
532 .llvm_name = "at90usb82",531 .llvm_name = "at90usb82",
533 .features = featureSet(&all_features, &[_]Feature{532 .features = featureSet(&[_]Feature{
534 .avr35,533 .avr35,
535 }),534 }),
536 };535 };
537 pub const at94k = Cpu{536 pub const at94k = Cpu{
538 .name = "at94k",537 .name = "at94k",
539 .llvm_name = "at94k",538 .llvm_name = "at94k",
540 .features = featureSet(&all_features, &[_]Feature{539 .features = featureSet(&[_]Feature{
541 .avr3,540 .avr3,
542 .lpmx,541 .lpmx,
543 .movw,542 .movw,
...@@ -547,133 +546,133 @@ pub const cpu = struct {...@@ -547,133 +546,133 @@ pub const cpu = struct {
547 pub const ata5272 = Cpu{546 pub const ata5272 = Cpu{
548 .name = "ata5272",547 .name = "ata5272",
549 .llvm_name = "ata5272",548 .llvm_name = "ata5272",
550 .features = featureSet(&all_features, &[_]Feature{549 .features = featureSet(&[_]Feature{
551 .avr25,550 .avr25,
552 }),551 }),
553 };552 };
554 pub const ata5505 = Cpu{553 pub const ata5505 = Cpu{
555 .name = "ata5505",554 .name = "ata5505",
556 .llvm_name = "ata5505",555 .llvm_name = "ata5505",
557 .features = featureSet(&all_features, &[_]Feature{556 .features = featureSet(&[_]Feature{
558 .avr35,557 .avr35,
559 }),558 }),
560 };559 };
561 pub const ata5790 = Cpu{560 pub const ata5790 = Cpu{
562 .name = "ata5790",561 .name = "ata5790",
563 .llvm_name = "ata5790",562 .llvm_name = "ata5790",
564 .features = featureSet(&all_features, &[_]Feature{563 .features = featureSet(&[_]Feature{
565 .avr5,564 .avr5,
566 }),565 }),
567 };566 };
568 pub const ata5795 = Cpu{567 pub const ata5795 = Cpu{
569 .name = "ata5795",568 .name = "ata5795",
570 .llvm_name = "ata5795",569 .llvm_name = "ata5795",
571 .features = featureSet(&all_features, &[_]Feature{570 .features = featureSet(&[_]Feature{
572 .avr5,571 .avr5,
573 }),572 }),
574 };573 };
575 pub const ata6285 = Cpu{574 pub const ata6285 = Cpu{
576 .name = "ata6285",575 .name = "ata6285",
577 .llvm_name = "ata6285",576 .llvm_name = "ata6285",
578 .features = featureSet(&all_features, &[_]Feature{577 .features = featureSet(&[_]Feature{
579 .avr4,578 .avr4,
580 }),579 }),
581 };580 };
582 pub const ata6286 = Cpu{581 pub const ata6286 = Cpu{
583 .name = "ata6286",582 .name = "ata6286",
584 .llvm_name = "ata6286",583 .llvm_name = "ata6286",
585 .features = featureSet(&all_features, &[_]Feature{584 .features = featureSet(&[_]Feature{
586 .avr4,585 .avr4,
587 }),586 }),
588 };587 };
589 pub const ata6289 = Cpu{588 pub const ata6289 = Cpu{
590 .name = "ata6289",589 .name = "ata6289",
591 .llvm_name = "ata6289",590 .llvm_name = "ata6289",
592 .features = featureSet(&all_features, &[_]Feature{591 .features = featureSet(&[_]Feature{
593 .avr4,592 .avr4,
594 }),593 }),
595 };594 };
596 pub const atmega103 = Cpu{595 pub const atmega103 = Cpu{
597 .name = "atmega103",596 .name = "atmega103",
598 .llvm_name = "atmega103",597 .llvm_name = "atmega103",
599 .features = featureSet(&all_features, &[_]Feature{598 .features = featureSet(&[_]Feature{
600 .avr31,599 .avr31,
601 }),600 }),
602 };601 };
603 pub const atmega128 = Cpu{602 pub const atmega128 = Cpu{
604 .name = "atmega128",603 .name = "atmega128",
605 .llvm_name = "atmega128",604 .llvm_name = "atmega128",
606 .features = featureSet(&all_features, &[_]Feature{605 .features = featureSet(&[_]Feature{
607 .avr51,606 .avr51,
608 }),607 }),
609 };608 };
610 pub const atmega1280 = Cpu{609 pub const atmega1280 = Cpu{
611 .name = "atmega1280",610 .name = "atmega1280",
612 .llvm_name = "atmega1280",611 .llvm_name = "atmega1280",
613 .features = featureSet(&all_features, &[_]Feature{612 .features = featureSet(&[_]Feature{
614 .avr51,613 .avr51,
615 }),614 }),
616 };615 };
617 pub const atmega1281 = Cpu{616 pub const atmega1281 = Cpu{
618 .name = "atmega1281",617 .name = "atmega1281",
619 .llvm_name = "atmega1281",618 .llvm_name = "atmega1281",
620 .features = featureSet(&all_features, &[_]Feature{619 .features = featureSet(&[_]Feature{
621 .avr51,620 .avr51,
622 }),621 }),
623 };622 };
624 pub const atmega1284 = Cpu{623 pub const atmega1284 = Cpu{
625 .name = "atmega1284",624 .name = "atmega1284",
626 .llvm_name = "atmega1284",625 .llvm_name = "atmega1284",
627 .features = featureSet(&all_features, &[_]Feature{626 .features = featureSet(&[_]Feature{
628 .avr51,627 .avr51,
629 }),628 }),
630 };629 };
631 pub const atmega1284p = Cpu{630 pub const atmega1284p = Cpu{
632 .name = "atmega1284p",631 .name = "atmega1284p",
633 .llvm_name = "atmega1284p",632 .llvm_name = "atmega1284p",
634 .features = featureSet(&all_features, &[_]Feature{633 .features = featureSet(&[_]Feature{
635 .avr51,634 .avr51,
636 }),635 }),
637 };636 };
638 pub const atmega1284rfr2 = Cpu{637 pub const atmega1284rfr2 = Cpu{
639 .name = "atmega1284rfr2",638 .name = "atmega1284rfr2",
640 .llvm_name = "atmega1284rfr2",639 .llvm_name = "atmega1284rfr2",
641 .features = featureSet(&all_features, &[_]Feature{640 .features = featureSet(&[_]Feature{
642 .avr51,641 .avr51,
643 }),642 }),
644 };643 };
645 pub const atmega128a = Cpu{644 pub const atmega128a = Cpu{
646 .name = "atmega128a",645 .name = "atmega128a",
647 .llvm_name = "atmega128a",646 .llvm_name = "atmega128a",
648 .features = featureSet(&all_features, &[_]Feature{647 .features = featureSet(&[_]Feature{
649 .avr51,648 .avr51,
650 }),649 }),
651 };650 };
652 pub const atmega128rfa1 = Cpu{651 pub const atmega128rfa1 = Cpu{
653 .name = "atmega128rfa1",652 .name = "atmega128rfa1",
654 .llvm_name = "atmega128rfa1",653 .llvm_name = "atmega128rfa1",
655 .features = featureSet(&all_features, &[_]Feature{654 .features = featureSet(&[_]Feature{
656 .avr51,655 .avr51,
657 }),656 }),
658 };657 };
659 pub const atmega128rfr2 = Cpu{658 pub const atmega128rfr2 = Cpu{
660 .name = "atmega128rfr2",659 .name = "atmega128rfr2",
661 .llvm_name = "atmega128rfr2",660 .llvm_name = "atmega128rfr2",
662 .features = featureSet(&all_features, &[_]Feature{661 .features = featureSet(&[_]Feature{
663 .avr51,662 .avr51,
664 }),663 }),
665 };664 };
666 pub const atmega16 = Cpu{665 pub const atmega16 = Cpu{
667 .name = "atmega16",666 .name = "atmega16",
668 .llvm_name = "atmega16",667 .llvm_name = "atmega16",
669 .features = featureSet(&all_features, &[_]Feature{668 .features = featureSet(&[_]Feature{
670 .avr5,669 .avr5,
671 }),670 }),
672 };671 };
673 pub const atmega161 = Cpu{672 pub const atmega161 = Cpu{
674 .name = "atmega161",673 .name = "atmega161",
675 .llvm_name = "atmega161",674 .llvm_name = "atmega161",
676 .features = featureSet(&all_features, &[_]Feature{675 .features = featureSet(&[_]Feature{
677 .avr3,676 .avr3,
678 .lpmx,677 .lpmx,
679 .movw,678 .movw,
...@@ -684,14 +683,14 @@ pub const cpu = struct {...@@ -684,14 +683,14 @@ pub const cpu = struct {
684 pub const atmega162 = Cpu{683 pub const atmega162 = Cpu{
685 .name = "atmega162",684 .name = "atmega162",
686 .llvm_name = "atmega162",685 .llvm_name = "atmega162",
687 .features = featureSet(&all_features, &[_]Feature{686 .features = featureSet(&[_]Feature{
688 .avr5,687 .avr5,
689 }),688 }),
690 };689 };
691 pub const atmega163 = Cpu{690 pub const atmega163 = Cpu{
692 .name = "atmega163",691 .name = "atmega163",
693 .llvm_name = "atmega163",692 .llvm_name = "atmega163",
694 .features = featureSet(&all_features, &[_]Feature{693 .features = featureSet(&[_]Feature{
695 .avr3,694 .avr3,
696 .lpmx,695 .lpmx,
697 .movw,696 .movw,
...@@ -702,623 +701,623 @@ pub const cpu = struct {...@@ -702,623 +701,623 @@ pub const cpu = struct {
702 pub const atmega164a = Cpu{701 pub const atmega164a = Cpu{
703 .name = "atmega164a",702 .name = "atmega164a",
704 .llvm_name = "atmega164a",703 .llvm_name = "atmega164a",
705 .features = featureSet(&all_features, &[_]Feature{704 .features = featureSet(&[_]Feature{
706 .avr5,705 .avr5,
707 }),706 }),
708 };707 };
709 pub const atmega164p = Cpu{708 pub const atmega164p = Cpu{
710 .name = "atmega164p",709 .name = "atmega164p",
711 .llvm_name = "atmega164p",710 .llvm_name = "atmega164p",
712 .features = featureSet(&all_features, &[_]Feature{711 .features = featureSet(&[_]Feature{
713 .avr5,712 .avr5,
714 }),713 }),
715 };714 };
716 pub const atmega164pa = Cpu{715 pub const atmega164pa = Cpu{
717 .name = "atmega164pa",716 .name = "atmega164pa",
718 .llvm_name = "atmega164pa",717 .llvm_name = "atmega164pa",
719 .features = featureSet(&all_features, &[_]Feature{718 .features = featureSet(&[_]Feature{
720 .avr5,719 .avr5,
721 }),720 }),
722 };721 };
723 pub const atmega165 = Cpu{722 pub const atmega165 = Cpu{
724 .name = "atmega165",723 .name = "atmega165",
725 .llvm_name = "atmega165",724 .llvm_name = "atmega165",
726 .features = featureSet(&all_features, &[_]Feature{725 .features = featureSet(&[_]Feature{
727 .avr5,726 .avr5,
728 }),727 }),
729 };728 };
730 pub const atmega165a = Cpu{729 pub const atmega165a = Cpu{
731 .name = "atmega165a",730 .name = "atmega165a",
732 .llvm_name = "atmega165a",731 .llvm_name = "atmega165a",
733 .features = featureSet(&all_features, &[_]Feature{732 .features = featureSet(&[_]Feature{
734 .avr5,733 .avr5,
735 }),734 }),
736 };735 };
737 pub const atmega165p = Cpu{736 pub const atmega165p = Cpu{
738 .name = "atmega165p",737 .name = "atmega165p",
739 .llvm_name = "atmega165p",738 .llvm_name = "atmega165p",
740 .features = featureSet(&all_features, &[_]Feature{739 .features = featureSet(&[_]Feature{
741 .avr5,740 .avr5,
742 }),741 }),
743 };742 };
744 pub const atmega165pa = Cpu{743 pub const atmega165pa = Cpu{
745 .name = "atmega165pa",744 .name = "atmega165pa",
746 .llvm_name = "atmega165pa",745 .llvm_name = "atmega165pa",
747 .features = featureSet(&all_features, &[_]Feature{746 .features = featureSet(&[_]Feature{
748 .avr5,747 .avr5,
749 }),748 }),
750 };749 };
751 pub const atmega168 = Cpu{750 pub const atmega168 = Cpu{
752 .name = "atmega168",751 .name = "atmega168",
753 .llvm_name = "atmega168",752 .llvm_name = "atmega168",
754 .features = featureSet(&all_features, &[_]Feature{753 .features = featureSet(&[_]Feature{
755 .avr5,754 .avr5,
756 }),755 }),
757 };756 };
758 pub const atmega168a = Cpu{757 pub const atmega168a = Cpu{
759 .name = "atmega168a",758 .name = "atmega168a",
760 .llvm_name = "atmega168a",759 .llvm_name = "atmega168a",
761 .features = featureSet(&all_features, &[_]Feature{760 .features = featureSet(&[_]Feature{
762 .avr5,761 .avr5,
763 }),762 }),
764 };763 };
765 pub const atmega168p = Cpu{764 pub const atmega168p = Cpu{
766 .name = "atmega168p",765 .name = "atmega168p",
767 .llvm_name = "atmega168p",766 .llvm_name = "atmega168p",
768 .features = featureSet(&all_features, &[_]Feature{767 .features = featureSet(&[_]Feature{
769 .avr5,768 .avr5,
770 }),769 }),
771 };770 };
772 pub const atmega168pa = Cpu{771 pub const atmega168pa = Cpu{
773 .name = "atmega168pa",772 .name = "atmega168pa",
774 .llvm_name = "atmega168pa",773 .llvm_name = "atmega168pa",
775 .features = featureSet(&all_features, &[_]Feature{774 .features = featureSet(&[_]Feature{
776 .avr5,775 .avr5,
777 }),776 }),
778 };777 };
779 pub const atmega169 = Cpu{778 pub const atmega169 = Cpu{
780 .name = "atmega169",779 .name = "atmega169",
781 .llvm_name = "atmega169",780 .llvm_name = "atmega169",
782 .features = featureSet(&all_features, &[_]Feature{781 .features = featureSet(&[_]Feature{
783 .avr5,782 .avr5,
784 }),783 }),
785 };784 };
786 pub const atmega169a = Cpu{785 pub const atmega169a = Cpu{
787 .name = "atmega169a",786 .name = "atmega169a",
788 .llvm_name = "atmega169a",787 .llvm_name = "atmega169a",
789 .features = featureSet(&all_features, &[_]Feature{788 .features = featureSet(&[_]Feature{
790 .avr5,789 .avr5,
791 }),790 }),
792 };791 };
793 pub const atmega169p = Cpu{792 pub const atmega169p = Cpu{
794 .name = "atmega169p",793 .name = "atmega169p",
795 .llvm_name = "atmega169p",794 .llvm_name = "atmega169p",
796 .features = featureSet(&all_features, &[_]Feature{795 .features = featureSet(&[_]Feature{
797 .avr5,796 .avr5,
798 }),797 }),
799 };798 };
800 pub const atmega169pa = Cpu{799 pub const atmega169pa = Cpu{
801 .name = "atmega169pa",800 .name = "atmega169pa",
802 .llvm_name = "atmega169pa",801 .llvm_name = "atmega169pa",
803 .features = featureSet(&all_features, &[_]Feature{802 .features = featureSet(&[_]Feature{
804 .avr5,803 .avr5,
805 }),804 }),
806 };805 };
807 pub const atmega16a = Cpu{806 pub const atmega16a = Cpu{
808 .name = "atmega16a",807 .name = "atmega16a",
809 .llvm_name = "atmega16a",808 .llvm_name = "atmega16a",
810 .features = featureSet(&all_features, &[_]Feature{809 .features = featureSet(&[_]Feature{
811 .avr5,810 .avr5,
812 }),811 }),
813 };812 };
814 pub const atmega16hva = Cpu{813 pub const atmega16hva = Cpu{
815 .name = "atmega16hva",814 .name = "atmega16hva",
816 .llvm_name = "atmega16hva",815 .llvm_name = "atmega16hva",
817 .features = featureSet(&all_features, &[_]Feature{816 .features = featureSet(&[_]Feature{
818 .avr5,817 .avr5,
819 }),818 }),
820 };819 };
821 pub const atmega16hva2 = Cpu{820 pub const atmega16hva2 = Cpu{
822 .name = "atmega16hva2",821 .name = "atmega16hva2",
823 .llvm_name = "atmega16hva2",822 .llvm_name = "atmega16hva2",
824 .features = featureSet(&all_features, &[_]Feature{823 .features = featureSet(&[_]Feature{
825 .avr5,824 .avr5,
826 }),825 }),
827 };826 };
828 pub const atmega16hvb = Cpu{827 pub const atmega16hvb = Cpu{
829 .name = "atmega16hvb",828 .name = "atmega16hvb",
830 .llvm_name = "atmega16hvb",829 .llvm_name = "atmega16hvb",
831 .features = featureSet(&all_features, &[_]Feature{830 .features = featureSet(&[_]Feature{
832 .avr5,831 .avr5,
833 }),832 }),
834 };833 };
835 pub const atmega16hvbrevb = Cpu{834 pub const atmega16hvbrevb = Cpu{
836 .name = "atmega16hvbrevb",835 .name = "atmega16hvbrevb",
837 .llvm_name = "atmega16hvbrevb",836 .llvm_name = "atmega16hvbrevb",
838 .features = featureSet(&all_features, &[_]Feature{837 .features = featureSet(&[_]Feature{
839 .avr5,838 .avr5,
840 }),839 }),
841 };840 };
842 pub const atmega16m1 = Cpu{841 pub const atmega16m1 = Cpu{
843 .name = "atmega16m1",842 .name = "atmega16m1",
844 .llvm_name = "atmega16m1",843 .llvm_name = "atmega16m1",
845 .features = featureSet(&all_features, &[_]Feature{844 .features = featureSet(&[_]Feature{
846 .avr5,845 .avr5,
847 }),846 }),
848 };847 };
849 pub const atmega16u2 = Cpu{848 pub const atmega16u2 = Cpu{
850 .name = "atmega16u2",849 .name = "atmega16u2",
851 .llvm_name = "atmega16u2",850 .llvm_name = "atmega16u2",
852 .features = featureSet(&all_features, &[_]Feature{851 .features = featureSet(&[_]Feature{
853 .avr35,852 .avr35,
854 }),853 }),
855 };854 };
856 pub const atmega16u4 = Cpu{855 pub const atmega16u4 = Cpu{
857 .name = "atmega16u4",856 .name = "atmega16u4",
858 .llvm_name = "atmega16u4",857 .llvm_name = "atmega16u4",
859 .features = featureSet(&all_features, &[_]Feature{858 .features = featureSet(&[_]Feature{
860 .avr5,859 .avr5,
861 }),860 }),
862 };861 };
863 pub const atmega2560 = Cpu{862 pub const atmega2560 = Cpu{
864 .name = "atmega2560",863 .name = "atmega2560",
865 .llvm_name = "atmega2560",864 .llvm_name = "atmega2560",
866 .features = featureSet(&all_features, &[_]Feature{865 .features = featureSet(&[_]Feature{
867 .avr6,866 .avr6,
868 }),867 }),
869 };868 };
870 pub const atmega2561 = Cpu{869 pub const atmega2561 = Cpu{
871 .name = "atmega2561",870 .name = "atmega2561",
872 .llvm_name = "atmega2561",871 .llvm_name = "atmega2561",
873 .features = featureSet(&all_features, &[_]Feature{872 .features = featureSet(&[_]Feature{
874 .avr6,873 .avr6,
875 }),874 }),
876 };875 };
877 pub const atmega2564rfr2 = Cpu{876 pub const atmega2564rfr2 = Cpu{
878 .name = "atmega2564rfr2",877 .name = "atmega2564rfr2",
879 .llvm_name = "atmega2564rfr2",878 .llvm_name = "atmega2564rfr2",
880 .features = featureSet(&all_features, &[_]Feature{879 .features = featureSet(&[_]Feature{
881 .avr6,880 .avr6,
882 }),881 }),
883 };882 };
884 pub const atmega256rfr2 = Cpu{883 pub const atmega256rfr2 = Cpu{
885 .name = "atmega256rfr2",884 .name = "atmega256rfr2",
886 .llvm_name = "atmega256rfr2",885 .llvm_name = "atmega256rfr2",
887 .features = featureSet(&all_features, &[_]Feature{886 .features = featureSet(&[_]Feature{
888 .avr6,887 .avr6,
889 }),888 }),
890 };889 };
891 pub const atmega32 = Cpu{890 pub const atmega32 = Cpu{
892 .name = "atmega32",891 .name = "atmega32",
893 .llvm_name = "atmega32",892 .llvm_name = "atmega32",
894 .features = featureSet(&all_features, &[_]Feature{893 .features = featureSet(&[_]Feature{
895 .avr5,894 .avr5,
896 }),895 }),
897 };896 };
898 pub const atmega323 = Cpu{897 pub const atmega323 = Cpu{
899 .name = "atmega323",898 .name = "atmega323",
900 .llvm_name = "atmega323",899 .llvm_name = "atmega323",
901 .features = featureSet(&all_features, &[_]Feature{900 .features = featureSet(&[_]Feature{
902 .avr5,901 .avr5,
903 }),902 }),
904 };903 };
905 pub const atmega324a = Cpu{904 pub const atmega324a = Cpu{
906 .name = "atmega324a",905 .name = "atmega324a",
907 .llvm_name = "atmega324a",906 .llvm_name = "atmega324a",
908 .features = featureSet(&all_features, &[_]Feature{907 .features = featureSet(&[_]Feature{
909 .avr5,908 .avr5,
910 }),909 }),
911 };910 };
912 pub const atmega324p = Cpu{911 pub const atmega324p = Cpu{
913 .name = "atmega324p",912 .name = "atmega324p",
914 .llvm_name = "atmega324p",913 .llvm_name = "atmega324p",
915 .features = featureSet(&all_features, &[_]Feature{914 .features = featureSet(&[_]Feature{
916 .avr5,915 .avr5,
917 }),916 }),
918 };917 };
919 pub const atmega324pa = Cpu{918 pub const atmega324pa = Cpu{
920 .name = "atmega324pa",919 .name = "atmega324pa",
921 .llvm_name = "atmega324pa",920 .llvm_name = "atmega324pa",
922 .features = featureSet(&all_features, &[_]Feature{921 .features = featureSet(&[_]Feature{
923 .avr5,922 .avr5,
924 }),923 }),
925 };924 };
926 pub const atmega325 = Cpu{925 pub const atmega325 = Cpu{
927 .name = "atmega325",926 .name = "atmega325",
928 .llvm_name = "atmega325",927 .llvm_name = "atmega325",
929 .features = featureSet(&all_features, &[_]Feature{928 .features = featureSet(&[_]Feature{
930 .avr5,929 .avr5,
931 }),930 }),
932 };931 };
933 pub const atmega3250 = Cpu{932 pub const atmega3250 = Cpu{
934 .name = "atmega3250",933 .name = "atmega3250",
935 .llvm_name = "atmega3250",934 .llvm_name = "atmega3250",
936 .features = featureSet(&all_features, &[_]Feature{935 .features = featureSet(&[_]Feature{
937 .avr5,936 .avr5,
938 }),937 }),
939 };938 };
940 pub const atmega3250a = Cpu{939 pub const atmega3250a = Cpu{
941 .name = "atmega3250a",940 .name = "atmega3250a",
942 .llvm_name = "atmega3250a",941 .llvm_name = "atmega3250a",
943 .features = featureSet(&all_features, &[_]Feature{942 .features = featureSet(&[_]Feature{
944 .avr5,943 .avr5,
945 }),944 }),
946 };945 };
947 pub const atmega3250p = Cpu{946 pub const atmega3250p = Cpu{
948 .name = "atmega3250p",947 .name = "atmega3250p",
949 .llvm_name = "atmega3250p",948 .llvm_name = "atmega3250p",
950 .features = featureSet(&all_features, &[_]Feature{949 .features = featureSet(&[_]Feature{
951 .avr5,950 .avr5,
952 }),951 }),
953 };952 };
954 pub const atmega3250pa = Cpu{953 pub const atmega3250pa = Cpu{
955 .name = "atmega3250pa",954 .name = "atmega3250pa",
956 .llvm_name = "atmega3250pa",955 .llvm_name = "atmega3250pa",
957 .features = featureSet(&all_features, &[_]Feature{956 .features = featureSet(&[_]Feature{
958 .avr5,957 .avr5,
959 }),958 }),
960 };959 };
961 pub const atmega325a = Cpu{960 pub const atmega325a = Cpu{
962 .name = "atmega325a",961 .name = "atmega325a",
963 .llvm_name = "atmega325a",962 .llvm_name = "atmega325a",
964 .features = featureSet(&all_features, &[_]Feature{963 .features = featureSet(&[_]Feature{
965 .avr5,964 .avr5,
966 }),965 }),
967 };966 };
968 pub const atmega325p = Cpu{967 pub const atmega325p = Cpu{
969 .name = "atmega325p",968 .name = "atmega325p",
970 .llvm_name = "atmega325p",969 .llvm_name = "atmega325p",
971 .features = featureSet(&all_features, &[_]Feature{970 .features = featureSet(&[_]Feature{
972 .avr5,971 .avr5,
973 }),972 }),
974 };973 };
975 pub const atmega325pa = Cpu{974 pub const atmega325pa = Cpu{
976 .name = "atmega325pa",975 .name = "atmega325pa",
977 .llvm_name = "atmega325pa",976 .llvm_name = "atmega325pa",
978 .features = featureSet(&all_features, &[_]Feature{977 .features = featureSet(&[_]Feature{
979 .avr5,978 .avr5,
980 }),979 }),
981 };980 };
982 pub const atmega328 = Cpu{981 pub const atmega328 = Cpu{
983 .name = "atmega328",982 .name = "atmega328",
984 .llvm_name = "atmega328",983 .llvm_name = "atmega328",
985 .features = featureSet(&all_features, &[_]Feature{984 .features = featureSet(&[_]Feature{
986 .avr5,985 .avr5,
987 }),986 }),
988 };987 };
989 pub const atmega328p = Cpu{988 pub const atmega328p = Cpu{
990 .name = "atmega328p",989 .name = "atmega328p",
991 .llvm_name = "atmega328p",990 .llvm_name = "atmega328p",
992 .features = featureSet(&all_features, &[_]Feature{991 .features = featureSet(&[_]Feature{
993 .avr5,992 .avr5,
994 }),993 }),
995 };994 };
996 pub const atmega329 = Cpu{995 pub const atmega329 = Cpu{
997 .name = "atmega329",996 .name = "atmega329",
998 .llvm_name = "atmega329",997 .llvm_name = "atmega329",
999 .features = featureSet(&all_features, &[_]Feature{998 .features = featureSet(&[_]Feature{
1000 .avr5,999 .avr5,
1001 }),1000 }),
1002 };1001 };
1003 pub const atmega3290 = Cpu{1002 pub const atmega3290 = Cpu{
1004 .name = "atmega3290",1003 .name = "atmega3290",
1005 .llvm_name = "atmega3290",1004 .llvm_name = "atmega3290",
1006 .features = featureSet(&all_features, &[_]Feature{1005 .features = featureSet(&[_]Feature{
1007 .avr5,1006 .avr5,
1008 }),1007 }),
1009 };1008 };
1010 pub const atmega3290a = Cpu{1009 pub const atmega3290a = Cpu{
1011 .name = "atmega3290a",1010 .name = "atmega3290a",
1012 .llvm_name = "atmega3290a",1011 .llvm_name = "atmega3290a",
1013 .features = featureSet(&all_features, &[_]Feature{1012 .features = featureSet(&[_]Feature{
1014 .avr5,1013 .avr5,
1015 }),1014 }),
1016 };1015 };
1017 pub const atmega3290p = Cpu{1016 pub const atmega3290p = Cpu{
1018 .name = "atmega3290p",1017 .name = "atmega3290p",
1019 .llvm_name = "atmega3290p",1018 .llvm_name = "atmega3290p",
1020 .features = featureSet(&all_features, &[_]Feature{1019 .features = featureSet(&[_]Feature{
1021 .avr5,1020 .avr5,
1022 }),1021 }),
1023 };1022 };
1024 pub const atmega3290pa = Cpu{1023 pub const atmega3290pa = Cpu{
1025 .name = "atmega3290pa",1024 .name = "atmega3290pa",
1026 .llvm_name = "atmega3290pa",1025 .llvm_name = "atmega3290pa",
1027 .features = featureSet(&all_features, &[_]Feature{1026 .features = featureSet(&[_]Feature{
1028 .avr5,1027 .avr5,
1029 }),1028 }),
1030 };1029 };
1031 pub const atmega329a = Cpu{1030 pub const atmega329a = Cpu{
1032 .name = "atmega329a",1031 .name = "atmega329a",
1033 .llvm_name = "atmega329a",1032 .llvm_name = "atmega329a",
1034 .features = featureSet(&all_features, &[_]Feature{1033 .features = featureSet(&[_]Feature{
1035 .avr5,1034 .avr5,
1036 }),1035 }),
1037 };1036 };
1038 pub const atmega329p = Cpu{1037 pub const atmega329p = Cpu{
1039 .name = "atmega329p",1038 .name = "atmega329p",
1040 .llvm_name = "atmega329p",1039 .llvm_name = "atmega329p",
1041 .features = featureSet(&all_features, &[_]Feature{1040 .features = featureSet(&[_]Feature{
1042 .avr5,1041 .avr5,
1043 }),1042 }),
1044 };1043 };
1045 pub const atmega329pa = Cpu{1044 pub const atmega329pa = Cpu{
1046 .name = "atmega329pa",1045 .name = "atmega329pa",
1047 .llvm_name = "atmega329pa",1046 .llvm_name = "atmega329pa",
1048 .features = featureSet(&all_features, &[_]Feature{1047 .features = featureSet(&[_]Feature{
1049 .avr5,1048 .avr5,
1050 }),1049 }),
1051 };1050 };
1052 pub const atmega32a = Cpu{1051 pub const atmega32a = Cpu{
1053 .name = "atmega32a",1052 .name = "atmega32a",
1054 .llvm_name = "atmega32a",1053 .llvm_name = "atmega32a",
1055 .features = featureSet(&all_features, &[_]Feature{1054 .features = featureSet(&[_]Feature{
1056 .avr5,1055 .avr5,
1057 }),1056 }),
1058 };1057 };
1059 pub const atmega32c1 = Cpu{1058 pub const atmega32c1 = Cpu{
1060 .name = "atmega32c1",1059 .name = "atmega32c1",
1061 .llvm_name = "atmega32c1",1060 .llvm_name = "atmega32c1",
1062 .features = featureSet(&all_features, &[_]Feature{1061 .features = featureSet(&[_]Feature{
1063 .avr5,1062 .avr5,
1064 }),1063 }),
1065 };1064 };
1066 pub const atmega32hvb = Cpu{1065 pub const atmega32hvb = Cpu{
1067 .name = "atmega32hvb",1066 .name = "atmega32hvb",
1068 .llvm_name = "atmega32hvb",1067 .llvm_name = "atmega32hvb",
1069 .features = featureSet(&all_features, &[_]Feature{1068 .features = featureSet(&[_]Feature{
1070 .avr5,1069 .avr5,
1071 }),1070 }),
1072 };1071 };
1073 pub const atmega32hvbrevb = Cpu{1072 pub const atmega32hvbrevb = Cpu{
1074 .name = "atmega32hvbrevb",1073 .name = "atmega32hvbrevb",
1075 .llvm_name = "atmega32hvbrevb",1074 .llvm_name = "atmega32hvbrevb",
1076 .features = featureSet(&all_features, &[_]Feature{1075 .features = featureSet(&[_]Feature{
1077 .avr5,1076 .avr5,
1078 }),1077 }),
1079 };1078 };
1080 pub const atmega32m1 = Cpu{1079 pub const atmega32m1 = Cpu{
1081 .name = "atmega32m1",1080 .name = "atmega32m1",
1082 .llvm_name = "atmega32m1",1081 .llvm_name = "atmega32m1",
1083 .features = featureSet(&all_features, &[_]Feature{1082 .features = featureSet(&[_]Feature{
1084 .avr5,1083 .avr5,
1085 }),1084 }),
1086 };1085 };
1087 pub const atmega32u2 = Cpu{1086 pub const atmega32u2 = Cpu{
1088 .name = "atmega32u2",1087 .name = "atmega32u2",
1089 .llvm_name = "atmega32u2",1088 .llvm_name = "atmega32u2",
1090 .features = featureSet(&all_features, &[_]Feature{1089 .features = featureSet(&[_]Feature{
1091 .avr35,1090 .avr35,
1092 }),1091 }),
1093 };1092 };
1094 pub const atmega32u4 = Cpu{1093 pub const atmega32u4 = Cpu{
1095 .name = "atmega32u4",1094 .name = "atmega32u4",
1096 .llvm_name = "atmega32u4",1095 .llvm_name = "atmega32u4",
1097 .features = featureSet(&all_features, &[_]Feature{1096 .features = featureSet(&[_]Feature{
1098 .avr5,1097 .avr5,
1099 }),1098 }),
1100 };1099 };
1101 pub const atmega32u6 = Cpu{1100 pub const atmega32u6 = Cpu{
1102 .name = "atmega32u6",1101 .name = "atmega32u6",
1103 .llvm_name = "atmega32u6",1102 .llvm_name = "atmega32u6",
1104 .features = featureSet(&all_features, &[_]Feature{1103 .features = featureSet(&[_]Feature{
1105 .avr5,1104 .avr5,
1106 }),1105 }),
1107 };1106 };
1108 pub const atmega406 = Cpu{1107 pub const atmega406 = Cpu{
1109 .name = "atmega406",1108 .name = "atmega406",
1110 .llvm_name = "atmega406",1109 .llvm_name = "atmega406",
1111 .features = featureSet(&all_features, &[_]Feature{1110 .features = featureSet(&[_]Feature{
1112 .avr5,1111 .avr5,
1113 }),1112 }),
1114 };1113 };
1115 pub const atmega48 = Cpu{1114 pub const atmega48 = Cpu{
1116 .name = "atmega48",1115 .name = "atmega48",
1117 .llvm_name = "atmega48",1116 .llvm_name = "atmega48",
1118 .features = featureSet(&all_features, &[_]Feature{1117 .features = featureSet(&[_]Feature{
1119 .avr4,1118 .avr4,
1120 }),1119 }),
1121 };1120 };
1122 pub const atmega48a = Cpu{1121 pub const atmega48a = Cpu{
1123 .name = "atmega48a",1122 .name = "atmega48a",
1124 .llvm_name = "atmega48a",1123 .llvm_name = "atmega48a",
1125 .features = featureSet(&all_features, &[_]Feature{1124 .features = featureSet(&[_]Feature{
1126 .avr4,1125 .avr4,
1127 }),1126 }),
1128 };1127 };
1129 pub const atmega48p = Cpu{1128 pub const atmega48p = Cpu{
1130 .name = "atmega48p",1129 .name = "atmega48p",
1131 .llvm_name = "atmega48p",1130 .llvm_name = "atmega48p",
1132 .features = featureSet(&all_features, &[_]Feature{1131 .features = featureSet(&[_]Feature{
1133 .avr4,1132 .avr4,
1134 }),1133 }),
1135 };1134 };
1136 pub const atmega48pa = Cpu{1135 pub const atmega48pa = Cpu{
1137 .name = "atmega48pa",1136 .name = "atmega48pa",
1138 .llvm_name = "atmega48pa",1137 .llvm_name = "atmega48pa",
1139 .features = featureSet(&all_features, &[_]Feature{1138 .features = featureSet(&[_]Feature{
1140 .avr4,1139 .avr4,
1141 }),1140 }),
1142 };1141 };
1143 pub const atmega64 = Cpu{1142 pub const atmega64 = Cpu{
1144 .name = "atmega64",1143 .name = "atmega64",
1145 .llvm_name = "atmega64",1144 .llvm_name = "atmega64",
1146 .features = featureSet(&all_features, &[_]Feature{1145 .features = featureSet(&[_]Feature{
1147 .avr5,1146 .avr5,
1148 }),1147 }),
1149 };1148 };
1150 pub const atmega640 = Cpu{1149 pub const atmega640 = Cpu{
1151 .name = "atmega640",1150 .name = "atmega640",
1152 .llvm_name = "atmega640",1151 .llvm_name = "atmega640",
1153 .features = featureSet(&all_features, &[_]Feature{1152 .features = featureSet(&[_]Feature{
1154 .avr5,1153 .avr5,
1155 }),1154 }),
1156 };1155 };
1157 pub const atmega644 = Cpu{1156 pub const atmega644 = Cpu{
1158 .name = "atmega644",1157 .name = "atmega644",
1159 .llvm_name = "atmega644",1158 .llvm_name = "atmega644",
1160 .features = featureSet(&all_features, &[_]Feature{1159 .features = featureSet(&[_]Feature{
1161 .avr5,1160 .avr5,
1162 }),1161 }),
1163 };1162 };
1164 pub const atmega644a = Cpu{1163 pub const atmega644a = Cpu{
1165 .name = "atmega644a",1164 .name = "atmega644a",
1166 .llvm_name = "atmega644a",1165 .llvm_name = "atmega644a",
1167 .features = featureSet(&all_features, &[_]Feature{1166 .features = featureSet(&[_]Feature{
1168 .avr5,1167 .avr5,
1169 }),1168 }),
1170 };1169 };
1171 pub const atmega644p = Cpu{1170 pub const atmega644p = Cpu{
1172 .name = "atmega644p",1171 .name = "atmega644p",
1173 .llvm_name = "atmega644p",1172 .llvm_name = "atmega644p",
1174 .features = featureSet(&all_features, &[_]Feature{1173 .features = featureSet(&[_]Feature{
1175 .avr5,1174 .avr5,
1176 }),1175 }),
1177 };1176 };
1178 pub const atmega644pa = Cpu{1177 pub const atmega644pa = Cpu{
1179 .name = "atmega644pa",1178 .name = "atmega644pa",
1180 .llvm_name = "atmega644pa",1179 .llvm_name = "atmega644pa",
1181 .features = featureSet(&all_features, &[_]Feature{1180 .features = featureSet(&[_]Feature{
1182 .avr5,1181 .avr5,
1183 }),1182 }),
1184 };1183 };
1185 pub const atmega644rfr2 = Cpu{1184 pub const atmega644rfr2 = Cpu{
1186 .name = "atmega644rfr2",1185 .name = "atmega644rfr2",
1187 .llvm_name = "atmega644rfr2",1186 .llvm_name = "atmega644rfr2",
1188 .features = featureSet(&all_features, &[_]Feature{1187 .features = featureSet(&[_]Feature{
1189 .avr5,1188 .avr5,
1190 }),1189 }),
1191 };1190 };
1192 pub const atmega645 = Cpu{1191 pub const atmega645 = Cpu{
1193 .name = "atmega645",1192 .name = "atmega645",
1194 .llvm_name = "atmega645",1193 .llvm_name = "atmega645",
1195 .features = featureSet(&all_features, &[_]Feature{1194 .features = featureSet(&[_]Feature{
1196 .avr5,1195 .avr5,
1197 }),1196 }),
1198 };1197 };
1199 pub const atmega6450 = Cpu{1198 pub const atmega6450 = Cpu{
1200 .name = "atmega6450",1199 .name = "atmega6450",
1201 .llvm_name = "atmega6450",1200 .llvm_name = "atmega6450",
1202 .features = featureSet(&all_features, &[_]Feature{1201 .features = featureSet(&[_]Feature{
1203 .avr5,1202 .avr5,
1204 }),1203 }),
1205 };1204 };
1206 pub const atmega6450a = Cpu{1205 pub const atmega6450a = Cpu{
1207 .name = "atmega6450a",1206 .name = "atmega6450a",
1208 .llvm_name = "atmega6450a",1207 .llvm_name = "atmega6450a",
1209 .features = featureSet(&all_features, &[_]Feature{1208 .features = featureSet(&[_]Feature{
1210 .avr5,1209 .avr5,
1211 }),1210 }),
1212 };1211 };
1213 pub const atmega6450p = Cpu{1212 pub const atmega6450p = Cpu{
1214 .name = "atmega6450p",1213 .name = "atmega6450p",
1215 .llvm_name = "atmega6450p",1214 .llvm_name = "atmega6450p",
1216 .features = featureSet(&all_features, &[_]Feature{1215 .features = featureSet(&[_]Feature{
1217 .avr5,1216 .avr5,
1218 }),1217 }),
1219 };1218 };
1220 pub const atmega645a = Cpu{1219 pub const atmega645a = Cpu{
1221 .name = "atmega645a",1220 .name = "atmega645a",
1222 .llvm_name = "atmega645a",1221 .llvm_name = "atmega645a",
1223 .features = featureSet(&all_features, &[_]Feature{1222 .features = featureSet(&[_]Feature{
1224 .avr5,1223 .avr5,
1225 }),1224 }),
1226 };1225 };
1227 pub const atmega645p = Cpu{1226 pub const atmega645p = Cpu{
1228 .name = "atmega645p",1227 .name = "atmega645p",
1229 .llvm_name = "atmega645p",1228 .llvm_name = "atmega645p",
1230 .features = featureSet(&all_features, &[_]Feature{1229 .features = featureSet(&[_]Feature{
1231 .avr5,1230 .avr5,
1232 }),1231 }),
1233 };1232 };
1234 pub const atmega649 = Cpu{1233 pub const atmega649 = Cpu{
1235 .name = "atmega649",1234 .name = "atmega649",
1236 .llvm_name = "atmega649",1235 .llvm_name = "atmega649",
1237 .features = featureSet(&all_features, &[_]Feature{1236 .features = featureSet(&[_]Feature{
1238 .avr5,1237 .avr5,
1239 }),1238 }),
1240 };1239 };
1241 pub const atmega6490 = Cpu{1240 pub const atmega6490 = Cpu{
1242 .name = "atmega6490",1241 .name = "atmega6490",
1243 .llvm_name = "atmega6490",1242 .llvm_name = "atmega6490",
1244 .features = featureSet(&all_features, &[_]Feature{1243 .features = featureSet(&[_]Feature{
1245 .avr5,1244 .avr5,
1246 }),1245 }),
1247 };1246 };
1248 pub const atmega6490a = Cpu{1247 pub const atmega6490a = Cpu{
1249 .name = "atmega6490a",1248 .name = "atmega6490a",
1250 .llvm_name = "atmega6490a",1249 .llvm_name = "atmega6490a",
1251 .features = featureSet(&all_features, &[_]Feature{1250 .features = featureSet(&[_]Feature{
1252 .avr5,1251 .avr5,
1253 }),1252 }),
1254 };1253 };
1255 pub const atmega6490p = Cpu{1254 pub const atmega6490p = Cpu{
1256 .name = "atmega6490p",1255 .name = "atmega6490p",
1257 .llvm_name = "atmega6490p",1256 .llvm_name = "atmega6490p",
1258 .features = featureSet(&all_features, &[_]Feature{1257 .features = featureSet(&[_]Feature{
1259 .avr5,1258 .avr5,
1260 }),1259 }),
1261 };1260 };
1262 pub const atmega649a = Cpu{1261 pub const atmega649a = Cpu{
1263 .name = "atmega649a",1262 .name = "atmega649a",
1264 .llvm_name = "atmega649a",1263 .llvm_name = "atmega649a",
1265 .features = featureSet(&all_features, &[_]Feature{1264 .features = featureSet(&[_]Feature{
1266 .avr5,1265 .avr5,
1267 }),1266 }),
1268 };1267 };
1269 pub const atmega649p = Cpu{1268 pub const atmega649p = Cpu{
1270 .name = "atmega649p",1269 .name = "atmega649p",
1271 .llvm_name = "atmega649p",1270 .llvm_name = "atmega649p",
1272 .features = featureSet(&all_features, &[_]Feature{1271 .features = featureSet(&[_]Feature{
1273 .avr5,1272 .avr5,
1274 }),1273 }),
1275 };1274 };
1276 pub const atmega64a = Cpu{1275 pub const atmega64a = Cpu{
1277 .name = "atmega64a",1276 .name = "atmega64a",
1278 .llvm_name = "atmega64a",1277 .llvm_name = "atmega64a",
1279 .features = featureSet(&all_features, &[_]Feature{1278 .features = featureSet(&[_]Feature{
1280 .avr5,1279 .avr5,
1281 }),1280 }),
1282 };1281 };
1283 pub const atmega64c1 = Cpu{1282 pub const atmega64c1 = Cpu{
1284 .name = "atmega64c1",1283 .name = "atmega64c1",
1285 .llvm_name = "atmega64c1",1284 .llvm_name = "atmega64c1",
1286 .features = featureSet(&all_features, &[_]Feature{1285 .features = featureSet(&[_]Feature{
1287 .avr5,1286 .avr5,
1288 }),1287 }),
1289 };1288 };
1290 pub const atmega64hve = Cpu{1289 pub const atmega64hve = Cpu{
1291 .name = "atmega64hve",1290 .name = "atmega64hve",
1292 .llvm_name = "atmega64hve",1291 .llvm_name = "atmega64hve",
1293 .features = featureSet(&all_features, &[_]Feature{1292 .features = featureSet(&[_]Feature{
1294 .avr5,1293 .avr5,
1295 }),1294 }),
1296 };1295 };
1297 pub const atmega64m1 = Cpu{1296 pub const atmega64m1 = Cpu{
1298 .name = "atmega64m1",1297 .name = "atmega64m1",
1299 .llvm_name = "atmega64m1",1298 .llvm_name = "atmega64m1",
1300 .features = featureSet(&all_features, &[_]Feature{1299 .features = featureSet(&[_]Feature{
1301 .avr5,1300 .avr5,
1302 }),1301 }),
1303 };1302 };
1304 pub const atmega64rfr2 = Cpu{1303 pub const atmega64rfr2 = Cpu{
1305 .name = "atmega64rfr2",1304 .name = "atmega64rfr2",
1306 .llvm_name = "atmega64rfr2",1305 .llvm_name = "atmega64rfr2",
1307 .features = featureSet(&all_features, &[_]Feature{1306 .features = featureSet(&[_]Feature{
1308 .avr5,1307 .avr5,
1309 }),1308 }),
1310 };1309 };
1311 pub const atmega8 = Cpu{1310 pub const atmega8 = Cpu{
1312 .name = "atmega8",1311 .name = "atmega8",
1313 .llvm_name = "atmega8",1312 .llvm_name = "atmega8",
1314 .features = featureSet(&all_features, &[_]Feature{1313 .features = featureSet(&[_]Feature{
1315 .avr4,1314 .avr4,
1316 }),1315 }),
1317 };1316 };
1318 pub const atmega8515 = Cpu{1317 pub const atmega8515 = Cpu{
1319 .name = "atmega8515",1318 .name = "atmega8515",
1320 .llvm_name = "atmega8515",1319 .llvm_name = "atmega8515",
1321 .features = featureSet(&all_features, &[_]Feature{1320 .features = featureSet(&[_]Feature{
1322 .avr2,1321 .avr2,
1323 .lpmx,1322 .lpmx,
1324 .movw,1323 .movw,
...@@ -1329,7 +1328,7 @@ pub const cpu = struct {...@@ -1329,7 +1328,7 @@ pub const cpu = struct {
1329 pub const atmega8535 = Cpu{1328 pub const atmega8535 = Cpu{
1330 .name = "atmega8535",1329 .name = "atmega8535",
1331 .llvm_name = "atmega8535",1330 .llvm_name = "atmega8535",
1332 .features = featureSet(&all_features, &[_]Feature{1331 .features = featureSet(&[_]Feature{
1333 .avr2,1332 .avr2,
1334 .lpmx,1333 .lpmx,
1335 .movw,1334 .movw,
...@@ -1340,175 +1339,175 @@ pub const cpu = struct {...@@ -1340,175 +1339,175 @@ pub const cpu = struct {
1340 pub const atmega88 = Cpu{1339 pub const atmega88 = Cpu{
1341 .name = "atmega88",1340 .name = "atmega88",
1342 .llvm_name = "atmega88",1341 .llvm_name = "atmega88",
1343 .features = featureSet(&all_features, &[_]Feature{1342 .features = featureSet(&[_]Feature{
1344 .avr4,1343 .avr4,
1345 }),1344 }),
1346 };1345 };
1347 pub const atmega88a = Cpu{1346 pub const atmega88a = Cpu{
1348 .name = "atmega88a",1347 .name = "atmega88a",
1349 .llvm_name = "atmega88a",1348 .llvm_name = "atmega88a",
1350 .features = featureSet(&all_features, &[_]Feature{1349 .features = featureSet(&[_]Feature{
1351 .avr4,1350 .avr4,
1352 }),1351 }),
1353 };1352 };
1354 pub const atmega88p = Cpu{1353 pub const atmega88p = Cpu{
1355 .name = "atmega88p",1354 .name = "atmega88p",
1356 .llvm_name = "atmega88p",1355 .llvm_name = "atmega88p",
1357 .features = featureSet(&all_features, &[_]Feature{1356 .features = featureSet(&[_]Feature{
1358 .avr4,1357 .avr4,
1359 }),1358 }),
1360 };1359 };
1361 pub const atmega88pa = Cpu{1360 pub const atmega88pa = Cpu{
1362 .name = "atmega88pa",1361 .name = "atmega88pa",
1363 .llvm_name = "atmega88pa",1362 .llvm_name = "atmega88pa",
1364 .features = featureSet(&all_features, &[_]Feature{1363 .features = featureSet(&[_]Feature{
1365 .avr4,1364 .avr4,
1366 }),1365 }),
1367 };1366 };
1368 pub const atmega8a = Cpu{1367 pub const atmega8a = Cpu{
1369 .name = "atmega8a",1368 .name = "atmega8a",
1370 .llvm_name = "atmega8a",1369 .llvm_name = "atmega8a",
1371 .features = featureSet(&all_features, &[_]Feature{1370 .features = featureSet(&[_]Feature{
1372 .avr4,1371 .avr4,
1373 }),1372 }),
1374 };1373 };
1375 pub const atmega8hva = Cpu{1374 pub const atmega8hva = Cpu{
1376 .name = "atmega8hva",1375 .name = "atmega8hva",
1377 .llvm_name = "atmega8hva",1376 .llvm_name = "atmega8hva",
1378 .features = featureSet(&all_features, &[_]Feature{1377 .features = featureSet(&[_]Feature{
1379 .avr4,1378 .avr4,
1380 }),1379 }),
1381 };1380 };
1382 pub const atmega8u2 = Cpu{1381 pub const atmega8u2 = Cpu{
1383 .name = "atmega8u2",1382 .name = "atmega8u2",
1384 .llvm_name = "atmega8u2",1383 .llvm_name = "atmega8u2",
1385 .features = featureSet(&all_features, &[_]Feature{1384 .features = featureSet(&[_]Feature{
1386 .avr35,1385 .avr35,
1387 }),1386 }),
1388 };1387 };
1389 pub const attiny10 = Cpu{1388 pub const attiny10 = Cpu{
1390 .name = "attiny10",1389 .name = "attiny10",
1391 .llvm_name = "attiny10",1390 .llvm_name = "attiny10",
1392 .features = featureSet(&all_features, &[_]Feature{1391 .features = featureSet(&[_]Feature{
1393 .avrtiny,1392 .avrtiny,
1394 }),1393 }),
1395 };1394 };
1396 pub const attiny102 = Cpu{1395 pub const attiny102 = Cpu{
1397 .name = "attiny102",1396 .name = "attiny102",
1398 .llvm_name = "attiny102",1397 .llvm_name = "attiny102",
1399 .features = featureSet(&all_features, &[_]Feature{1398 .features = featureSet(&[_]Feature{
1400 .avrtiny,1399 .avrtiny,
1401 }),1400 }),
1402 };1401 };
1403 pub const attiny104 = Cpu{1402 pub const attiny104 = Cpu{
1404 .name = "attiny104",1403 .name = "attiny104",
1405 .llvm_name = "attiny104",1404 .llvm_name = "attiny104",
1406 .features = featureSet(&all_features, &[_]Feature{1405 .features = featureSet(&[_]Feature{
1407 .avrtiny,1406 .avrtiny,
1408 }),1407 }),
1409 };1408 };
1410 pub const attiny11 = Cpu{1409 pub const attiny11 = Cpu{
1411 .name = "attiny11",1410 .name = "attiny11",
1412 .llvm_name = "attiny11",1411 .llvm_name = "attiny11",
1413 .features = featureSet(&all_features, &[_]Feature{1412 .features = featureSet(&[_]Feature{
1414 .avr1,1413 .avr1,
1415 }),1414 }),
1416 };1415 };
1417 pub const attiny12 = Cpu{1416 pub const attiny12 = Cpu{
1418 .name = "attiny12",1417 .name = "attiny12",
1419 .llvm_name = "attiny12",1418 .llvm_name = "attiny12",
1420 .features = featureSet(&all_features, &[_]Feature{1419 .features = featureSet(&[_]Feature{
1421 .avr1,1420 .avr1,
1422 }),1421 }),
1423 };1422 };
1424 pub const attiny13 = Cpu{1423 pub const attiny13 = Cpu{
1425 .name = "attiny13",1424 .name = "attiny13",
1426 .llvm_name = "attiny13",1425 .llvm_name = "attiny13",
1427 .features = featureSet(&all_features, &[_]Feature{1426 .features = featureSet(&[_]Feature{
1428 .avr25,1427 .avr25,
1429 }),1428 }),
1430 };1429 };
1431 pub const attiny13a = Cpu{1430 pub const attiny13a = Cpu{
1432 .name = "attiny13a",1431 .name = "attiny13a",
1433 .llvm_name = "attiny13a",1432 .llvm_name = "attiny13a",
1434 .features = featureSet(&all_features, &[_]Feature{1433 .features = featureSet(&[_]Feature{
1435 .avr25,1434 .avr25,
1436 }),1435 }),
1437 };1436 };
1438 pub const attiny15 = Cpu{1437 pub const attiny15 = Cpu{
1439 .name = "attiny15",1438 .name = "attiny15",
1440 .llvm_name = "attiny15",1439 .llvm_name = "attiny15",
1441 .features = featureSet(&all_features, &[_]Feature{1440 .features = featureSet(&[_]Feature{
1442 .avr1,1441 .avr1,
1443 }),1442 }),
1444 };1443 };
1445 pub const attiny1634 = Cpu{1444 pub const attiny1634 = Cpu{
1446 .name = "attiny1634",1445 .name = "attiny1634",
1447 .llvm_name = "attiny1634",1446 .llvm_name = "attiny1634",
1448 .features = featureSet(&all_features, &[_]Feature{1447 .features = featureSet(&[_]Feature{
1449 .avr35,1448 .avr35,
1450 }),1449 }),
1451 };1450 };
1452 pub const attiny167 = Cpu{1451 pub const attiny167 = Cpu{
1453 .name = "attiny167",1452 .name = "attiny167",
1454 .llvm_name = "attiny167",1453 .llvm_name = "attiny167",
1455 .features = featureSet(&all_features, &[_]Feature{1454 .features = featureSet(&[_]Feature{
1456 .avr35,1455 .avr35,
1457 }),1456 }),
1458 };1457 };
1459 pub const attiny20 = Cpu{1458 pub const attiny20 = Cpu{
1460 .name = "attiny20",1459 .name = "attiny20",
1461 .llvm_name = "attiny20",1460 .llvm_name = "attiny20",
1462 .features = featureSet(&all_features, &[_]Feature{1461 .features = featureSet(&[_]Feature{
1463 .avrtiny,1462 .avrtiny,
1464 }),1463 }),
1465 };1464 };
1466 pub const attiny22 = Cpu{1465 pub const attiny22 = Cpu{
1467 .name = "attiny22",1466 .name = "attiny22",
1468 .llvm_name = "attiny22",1467 .llvm_name = "attiny22",
1469 .features = featureSet(&all_features, &[_]Feature{1468 .features = featureSet(&[_]Feature{
1470 .avr2,1469 .avr2,
1471 }),1470 }),
1472 };1471 };
1473 pub const attiny2313 = Cpu{1472 pub const attiny2313 = Cpu{
1474 .name = "attiny2313",1473 .name = "attiny2313",
1475 .llvm_name = "attiny2313",1474 .llvm_name = "attiny2313",
1476 .features = featureSet(&all_features, &[_]Feature{1475 .features = featureSet(&[_]Feature{
1477 .avr25,1476 .avr25,
1478 }),1477 }),
1479 };1478 };
1480 pub const attiny2313a = Cpu{1479 pub const attiny2313a = Cpu{
1481 .name = "attiny2313a",1480 .name = "attiny2313a",
1482 .llvm_name = "attiny2313a",1481 .llvm_name = "attiny2313a",
1483 .features = featureSet(&all_features, &[_]Feature{1482 .features = featureSet(&[_]Feature{
1484 .avr25,1483 .avr25,
1485 }),1484 }),
1486 };1485 };
1487 pub const attiny24 = Cpu{1486 pub const attiny24 = Cpu{
1488 .name = "attiny24",1487 .name = "attiny24",
1489 .llvm_name = "attiny24",1488 .llvm_name = "attiny24",
1490 .features = featureSet(&all_features, &[_]Feature{1489 .features = featureSet(&[_]Feature{
1491 .avr25,1490 .avr25,
1492 }),1491 }),
1493 };1492 };
1494 pub const attiny24a = Cpu{1493 pub const attiny24a = Cpu{
1495 .name = "attiny24a",1494 .name = "attiny24a",
1496 .llvm_name = "attiny24a",1495 .llvm_name = "attiny24a",
1497 .features = featureSet(&all_features, &[_]Feature{1496 .features = featureSet(&[_]Feature{
1498 .avr25,1497 .avr25,
1499 }),1498 }),
1500 };1499 };
1501 pub const attiny25 = Cpu{1500 pub const attiny25 = Cpu{
1502 .name = "attiny25",1501 .name = "attiny25",
1503 .llvm_name = "attiny25",1502 .llvm_name = "attiny25",
1504 .features = featureSet(&all_features, &[_]Feature{1503 .features = featureSet(&[_]Feature{
1505 .avr25,1504 .avr25,
1506 }),1505 }),
1507 };1506 };
1508 pub const attiny26 = Cpu{1507 pub const attiny26 = Cpu{
1509 .name = "attiny26",1508 .name = "attiny26",
1510 .llvm_name = "attiny26",1509 .llvm_name = "attiny26",
1511 .features = featureSet(&all_features, &[_]Feature{1510 .features = featureSet(&[_]Feature{
1512 .avr2,1511 .avr2,
1513 .lpmx,1512 .lpmx,
1514 }),1513 }),
...@@ -1516,602 +1515,602 @@ pub const cpu = struct {...@@ -1516,602 +1515,602 @@ pub const cpu = struct {
1516 pub const attiny261 = Cpu{1515 pub const attiny261 = Cpu{
1517 .name = "attiny261",1516 .name = "attiny261",
1518 .llvm_name = "attiny261",1517 .llvm_name = "attiny261",
1519 .features = featureSet(&all_features, &[_]Feature{1518 .features = featureSet(&[_]Feature{
1520 .avr25,1519 .avr25,
1521 }),1520 }),
1522 };1521 };
1523 pub const attiny261a = Cpu{1522 pub const attiny261a = Cpu{
1524 .name = "attiny261a",1523 .name = "attiny261a",
1525 .llvm_name = "attiny261a",1524 .llvm_name = "attiny261a",
1526 .features = featureSet(&all_features, &[_]Feature{1525 .features = featureSet(&[_]Feature{
1527 .avr25,1526 .avr25,
1528 }),1527 }),
1529 };1528 };
1530 pub const attiny28 = Cpu{1529 pub const attiny28 = Cpu{
1531 .name = "attiny28",1530 .name = "attiny28",
1532 .llvm_name = "attiny28",1531 .llvm_name = "attiny28",
1533 .features = featureSet(&all_features, &[_]Feature{1532 .features = featureSet(&[_]Feature{
1534 .avr1,1533 .avr1,
1535 }),1534 }),
1536 };1535 };
1537 pub const attiny4 = Cpu{1536 pub const attiny4 = Cpu{
1538 .name = "attiny4",1537 .name = "attiny4",
1539 .llvm_name = "attiny4",1538 .llvm_name = "attiny4",
1540 .features = featureSet(&all_features, &[_]Feature{1539 .features = featureSet(&[_]Feature{
1541 .avrtiny,1540 .avrtiny,
1542 }),1541 }),
1543 };1542 };
1544 pub const attiny40 = Cpu{1543 pub const attiny40 = Cpu{
1545 .name = "attiny40",1544 .name = "attiny40",
1546 .llvm_name = "attiny40",1545 .llvm_name = "attiny40",
1547 .features = featureSet(&all_features, &[_]Feature{1546 .features = featureSet(&[_]Feature{
1548 .avrtiny,1547 .avrtiny,
1549 }),1548 }),
1550 };1549 };
1551 pub const attiny4313 = Cpu{1550 pub const attiny4313 = Cpu{
1552 .name = "attiny4313",1551 .name = "attiny4313",
1553 .llvm_name = "attiny4313",1552 .llvm_name = "attiny4313",
1554 .features = featureSet(&all_features, &[_]Feature{1553 .features = featureSet(&[_]Feature{
1555 .avr25,1554 .avr25,
1556 }),1555 }),
1557 };1556 };
1558 pub const attiny43u = Cpu{1557 pub const attiny43u = Cpu{
1559 .name = "attiny43u",1558 .name = "attiny43u",
1560 .llvm_name = "attiny43u",1559 .llvm_name = "attiny43u",
1561 .features = featureSet(&all_features, &[_]Feature{1560 .features = featureSet(&[_]Feature{
1562 .avr25,1561 .avr25,
1563 }),1562 }),
1564 };1563 };
1565 pub const attiny44 = Cpu{1564 pub const attiny44 = Cpu{
1566 .name = "attiny44",1565 .name = "attiny44",
1567 .llvm_name = "attiny44",1566 .llvm_name = "attiny44",
1568 .features = featureSet(&all_features, &[_]Feature{1567 .features = featureSet(&[_]Feature{
1569 .avr25,1568 .avr25,
1570 }),1569 }),
1571 };1570 };
1572 pub const attiny44a = Cpu{1571 pub const attiny44a = Cpu{
1573 .name = "attiny44a",1572 .name = "attiny44a",
1574 .llvm_name = "attiny44a",1573 .llvm_name = "attiny44a",
1575 .features = featureSet(&all_features, &[_]Feature{1574 .features = featureSet(&[_]Feature{
1576 .avr25,1575 .avr25,
1577 }),1576 }),
1578 };1577 };
1579 pub const attiny45 = Cpu{1578 pub const attiny45 = Cpu{
1580 .name = "attiny45",1579 .name = "attiny45",
1581 .llvm_name = "attiny45",1580 .llvm_name = "attiny45",
1582 .features = featureSet(&all_features, &[_]Feature{1581 .features = featureSet(&[_]Feature{
1583 .avr25,1582 .avr25,
1584 }),1583 }),
1585 };1584 };
1586 pub const attiny461 = Cpu{1585 pub const attiny461 = Cpu{
1587 .name = "attiny461",1586 .name = "attiny461",
1588 .llvm_name = "attiny461",1587 .llvm_name = "attiny461",
1589 .features = featureSet(&all_features, &[_]Feature{1588 .features = featureSet(&[_]Feature{
1590 .avr25,1589 .avr25,
1591 }),1590 }),
1592 };1591 };
1593 pub const attiny461a = Cpu{1592 pub const attiny461a = Cpu{
1594 .name = "attiny461a",1593 .name = "attiny461a",
1595 .llvm_name = "attiny461a",1594 .llvm_name = "attiny461a",
1596 .features = featureSet(&all_features, &[_]Feature{1595 .features = featureSet(&[_]Feature{
1597 .avr25,1596 .avr25,
1598 }),1597 }),
1599 };1598 };
1600 pub const attiny48 = Cpu{1599 pub const attiny48 = Cpu{
1601 .name = "attiny48",1600 .name = "attiny48",
1602 .llvm_name = "attiny48",1601 .llvm_name = "attiny48",
1603 .features = featureSet(&all_features, &[_]Feature{1602 .features = featureSet(&[_]Feature{
1604 .avr25,1603 .avr25,
1605 }),1604 }),
1606 };1605 };
1607 pub const attiny5 = Cpu{1606 pub const attiny5 = Cpu{
1608 .name = "attiny5",1607 .name = "attiny5",
1609 .llvm_name = "attiny5",1608 .llvm_name = "attiny5",
1610 .features = featureSet(&all_features, &[_]Feature{1609 .features = featureSet(&[_]Feature{
1611 .avrtiny,1610 .avrtiny,
1612 }),1611 }),
1613 };1612 };
1614 pub const attiny828 = Cpu{1613 pub const attiny828 = Cpu{
1615 .name = "attiny828",1614 .name = "attiny828",
1616 .llvm_name = "attiny828",1615 .llvm_name = "attiny828",
1617 .features = featureSet(&all_features, &[_]Feature{1616 .features = featureSet(&[_]Feature{
1618 .avr25,1617 .avr25,
1619 }),1618 }),
1620 };1619 };
1621 pub const attiny84 = Cpu{1620 pub const attiny84 = Cpu{
1622 .name = "attiny84",1621 .name = "attiny84",
1623 .llvm_name = "attiny84",1622 .llvm_name = "attiny84",
1624 .features = featureSet(&all_features, &[_]Feature{1623 .features = featureSet(&[_]Feature{
1625 .avr25,1624 .avr25,
1626 }),1625 }),
1627 };1626 };
1628 pub const attiny84a = Cpu{1627 pub const attiny84a = Cpu{
1629 .name = "attiny84a",1628 .name = "attiny84a",
1630 .llvm_name = "attiny84a",1629 .llvm_name = "attiny84a",
1631 .features = featureSet(&all_features, &[_]Feature{1630 .features = featureSet(&[_]Feature{
1632 .avr25,1631 .avr25,
1633 }),1632 }),
1634 };1633 };
1635 pub const attiny85 = Cpu{1634 pub const attiny85 = Cpu{
1636 .name = "attiny85",1635 .name = "attiny85",
1637 .llvm_name = "attiny85",1636 .llvm_name = "attiny85",
1638 .features = featureSet(&all_features, &[_]Feature{1637 .features = featureSet(&[_]Feature{
1639 .avr25,1638 .avr25,
1640 }),1639 }),
1641 };1640 };
1642 pub const attiny861 = Cpu{1641 pub const attiny861 = Cpu{
1643 .name = "attiny861",1642 .name = "attiny861",
1644 .llvm_name = "attiny861",1643 .llvm_name = "attiny861",
1645 .features = featureSet(&all_features, &[_]Feature{1644 .features = featureSet(&[_]Feature{
1646 .avr25,1645 .avr25,
1647 }),1646 }),
1648 };1647 };
1649 pub const attiny861a = Cpu{1648 pub const attiny861a = Cpu{
1650 .name = "attiny861a",1649 .name = "attiny861a",
1651 .llvm_name = "attiny861a",1650 .llvm_name = "attiny861a",
1652 .features = featureSet(&all_features, &[_]Feature{1651 .features = featureSet(&[_]Feature{
1653 .avr25,1652 .avr25,
1654 }),1653 }),
1655 };1654 };
1656 pub const attiny87 = Cpu{1655 pub const attiny87 = Cpu{
1657 .name = "attiny87",1656 .name = "attiny87",
1658 .llvm_name = "attiny87",1657 .llvm_name = "attiny87",
1659 .features = featureSet(&all_features, &[_]Feature{1658 .features = featureSet(&[_]Feature{
1660 .avr25,1659 .avr25,
1661 }),1660 }),
1662 };1661 };
1663 pub const attiny88 = Cpu{1662 pub const attiny88 = Cpu{
1664 .name = "attiny88",1663 .name = "attiny88",
1665 .llvm_name = "attiny88",1664 .llvm_name = "attiny88",
1666 .features = featureSet(&all_features, &[_]Feature{1665 .features = featureSet(&[_]Feature{
1667 .avr25,1666 .avr25,
1668 }),1667 }),
1669 };1668 };
1670 pub const attiny9 = Cpu{1669 pub const attiny9 = Cpu{
1671 .name = "attiny9",1670 .name = "attiny9",
1672 .llvm_name = "attiny9",1671 .llvm_name = "attiny9",
1673 .features = featureSet(&all_features, &[_]Feature{1672 .features = featureSet(&[_]Feature{
1674 .avrtiny,1673 .avrtiny,
1675 }),1674 }),
1676 };1675 };
1677 pub const atxmega128a1 = Cpu{1676 pub const atxmega128a1 = Cpu{
1678 .name = "atxmega128a1",1677 .name = "atxmega128a1",
1679 .llvm_name = "atxmega128a1",1678 .llvm_name = "atxmega128a1",
1680 .features = featureSet(&all_features, &[_]Feature{1679 .features = featureSet(&[_]Feature{
1681 .xmega,1680 .xmega,
1682 }),1681 }),
1683 };1682 };
1684 pub const atxmega128a1u = Cpu{1683 pub const atxmega128a1u = Cpu{
1685 .name = "atxmega128a1u",1684 .name = "atxmega128a1u",
1686 .llvm_name = "atxmega128a1u",1685 .llvm_name = "atxmega128a1u",
1687 .features = featureSet(&all_features, &[_]Feature{1686 .features = featureSet(&[_]Feature{
1688 .xmegau,1687 .xmegau,
1689 }),1688 }),
1690 };1689 };
1691 pub const atxmega128a3 = Cpu{1690 pub const atxmega128a3 = Cpu{
1692 .name = "atxmega128a3",1691 .name = "atxmega128a3",
1693 .llvm_name = "atxmega128a3",1692 .llvm_name = "atxmega128a3",
1694 .features = featureSet(&all_features, &[_]Feature{1693 .features = featureSet(&[_]Feature{
1695 .xmega,1694 .xmega,
1696 }),1695 }),
1697 };1696 };
1698 pub const atxmega128a3u = Cpu{1697 pub const atxmega128a3u = Cpu{
1699 .name = "atxmega128a3u",1698 .name = "atxmega128a3u",
1700 .llvm_name = "atxmega128a3u",1699 .llvm_name = "atxmega128a3u",
1701 .features = featureSet(&all_features, &[_]Feature{1700 .features = featureSet(&[_]Feature{
1702 .xmegau,1701 .xmegau,
1703 }),1702 }),
1704 };1703 };
1705 pub const atxmega128a4u = Cpu{1704 pub const atxmega128a4u = Cpu{
1706 .name = "atxmega128a4u",1705 .name = "atxmega128a4u",
1707 .llvm_name = "atxmega128a4u",1706 .llvm_name = "atxmega128a4u",
1708 .features = featureSet(&all_features, &[_]Feature{1707 .features = featureSet(&[_]Feature{
1709 .xmegau,1708 .xmegau,
1710 }),1709 }),
1711 };1710 };
1712 pub const atxmega128b1 = Cpu{1711 pub const atxmega128b1 = Cpu{
1713 .name = "atxmega128b1",1712 .name = "atxmega128b1",
1714 .llvm_name = "atxmega128b1",1713 .llvm_name = "atxmega128b1",
1715 .features = featureSet(&all_features, &[_]Feature{1714 .features = featureSet(&[_]Feature{
1716 .xmegau,1715 .xmegau,
1717 }),1716 }),
1718 };1717 };
1719 pub const atxmega128b3 = Cpu{1718 pub const atxmega128b3 = Cpu{
1720 .name = "atxmega128b3",1719 .name = "atxmega128b3",
1721 .llvm_name = "atxmega128b3",1720 .llvm_name = "atxmega128b3",
1722 .features = featureSet(&all_features, &[_]Feature{1721 .features = featureSet(&[_]Feature{
1723 .xmegau,1722 .xmegau,
1724 }),1723 }),
1725 };1724 };
1726 pub const atxmega128c3 = Cpu{1725 pub const atxmega128c3 = Cpu{
1727 .name = "atxmega128c3",1726 .name = "atxmega128c3",
1728 .llvm_name = "atxmega128c3",1727 .llvm_name = "atxmega128c3",
1729 .features = featureSet(&all_features, &[_]Feature{1728 .features = featureSet(&[_]Feature{
1730 .xmegau,1729 .xmegau,
1731 }),1730 }),
1732 };1731 };
1733 pub const atxmega128d3 = Cpu{1732 pub const atxmega128d3 = Cpu{
1734 .name = "atxmega128d3",1733 .name = "atxmega128d3",
1735 .llvm_name = "atxmega128d3",1734 .llvm_name = "atxmega128d3",
1736 .features = featureSet(&all_features, &[_]Feature{1735 .features = featureSet(&[_]Feature{
1737 .xmega,1736 .xmega,
1738 }),1737 }),
1739 };1738 };
1740 pub const atxmega128d4 = Cpu{1739 pub const atxmega128d4 = Cpu{
1741 .name = "atxmega128d4",1740 .name = "atxmega128d4",
1742 .llvm_name = "atxmega128d4",1741 .llvm_name = "atxmega128d4",
1743 .features = featureSet(&all_features, &[_]Feature{1742 .features = featureSet(&[_]Feature{
1744 .xmega,1743 .xmega,
1745 }),1744 }),
1746 };1745 };
1747 pub const atxmega16a4 = Cpu{1746 pub const atxmega16a4 = Cpu{
1748 .name = "atxmega16a4",1747 .name = "atxmega16a4",
1749 .llvm_name = "atxmega16a4",1748 .llvm_name = "atxmega16a4",
1750 .features = featureSet(&all_features, &[_]Feature{1749 .features = featureSet(&[_]Feature{
1751 .xmega,1750 .xmega,
1752 }),1751 }),
1753 };1752 };
1754 pub const atxmega16a4u = Cpu{1753 pub const atxmega16a4u = Cpu{
1755 .name = "atxmega16a4u",1754 .name = "atxmega16a4u",
1756 .llvm_name = "atxmega16a4u",1755 .llvm_name = "atxmega16a4u",
1757 .features = featureSet(&all_features, &[_]Feature{1756 .features = featureSet(&[_]Feature{
1758 .xmegau,1757 .xmegau,
1759 }),1758 }),
1760 };1759 };
1761 pub const atxmega16c4 = Cpu{1760 pub const atxmega16c4 = Cpu{
1762 .name = "atxmega16c4",1761 .name = "atxmega16c4",
1763 .llvm_name = "atxmega16c4",1762 .llvm_name = "atxmega16c4",
1764 .features = featureSet(&all_features, &[_]Feature{1763 .features = featureSet(&[_]Feature{
1765 .xmegau,1764 .xmegau,
1766 }),1765 }),
1767 };1766 };
1768 pub const atxmega16d4 = Cpu{1767 pub const atxmega16d4 = Cpu{
1769 .name = "atxmega16d4",1768 .name = "atxmega16d4",
1770 .llvm_name = "atxmega16d4",1769 .llvm_name = "atxmega16d4",
1771 .features = featureSet(&all_features, &[_]Feature{1770 .features = featureSet(&[_]Feature{
1772 .xmega,1771 .xmega,
1773 }),1772 }),
1774 };1773 };
1775 pub const atxmega16e5 = Cpu{1774 pub const atxmega16e5 = Cpu{
1776 .name = "atxmega16e5",1775 .name = "atxmega16e5",
1777 .llvm_name = "atxmega16e5",1776 .llvm_name = "atxmega16e5",
1778 .features = featureSet(&all_features, &[_]Feature{1777 .features = featureSet(&[_]Feature{
1779 .xmega,1778 .xmega,
1780 }),1779 }),
1781 };1780 };
1782 pub const atxmega192a3 = Cpu{1781 pub const atxmega192a3 = Cpu{
1783 .name = "atxmega192a3",1782 .name = "atxmega192a3",
1784 .llvm_name = "atxmega192a3",1783 .llvm_name = "atxmega192a3",
1785 .features = featureSet(&all_features, &[_]Feature{1784 .features = featureSet(&[_]Feature{
1786 .xmega,1785 .xmega,
1787 }),1786 }),
1788 };1787 };
1789 pub const atxmega192a3u = Cpu{1788 pub const atxmega192a3u = Cpu{
1790 .name = "atxmega192a3u",1789 .name = "atxmega192a3u",
1791 .llvm_name = "atxmega192a3u",1790 .llvm_name = "atxmega192a3u",
1792 .features = featureSet(&all_features, &[_]Feature{1791 .features = featureSet(&[_]Feature{
1793 .xmegau,1792 .xmegau,
1794 }),1793 }),
1795 };1794 };
1796 pub const atxmega192c3 = Cpu{1795 pub const atxmega192c3 = Cpu{
1797 .name = "atxmega192c3",1796 .name = "atxmega192c3",
1798 .llvm_name = "atxmega192c3",1797 .llvm_name = "atxmega192c3",
1799 .features = featureSet(&all_features, &[_]Feature{1798 .features = featureSet(&[_]Feature{
1800 .xmegau,1799 .xmegau,
1801 }),1800 }),
1802 };1801 };
1803 pub const atxmega192d3 = Cpu{1802 pub const atxmega192d3 = Cpu{
1804 .name = "atxmega192d3",1803 .name = "atxmega192d3",
1805 .llvm_name = "atxmega192d3",1804 .llvm_name = "atxmega192d3",
1806 .features = featureSet(&all_features, &[_]Feature{1805 .features = featureSet(&[_]Feature{
1807 .xmega,1806 .xmega,
1808 }),1807 }),
1809 };1808 };
1810 pub const atxmega256a3 = Cpu{1809 pub const atxmega256a3 = Cpu{
1811 .name = "atxmega256a3",1810 .name = "atxmega256a3",
1812 .llvm_name = "atxmega256a3",1811 .llvm_name = "atxmega256a3",
1813 .features = featureSet(&all_features, &[_]Feature{1812 .features = featureSet(&[_]Feature{
1814 .xmega,1813 .xmega,
1815 }),1814 }),
1816 };1815 };
1817 pub const atxmega256a3b = Cpu{1816 pub const atxmega256a3b = Cpu{
1818 .name = "atxmega256a3b",1817 .name = "atxmega256a3b",
1819 .llvm_name = "atxmega256a3b",1818 .llvm_name = "atxmega256a3b",
1820 .features = featureSet(&all_features, &[_]Feature{1819 .features = featureSet(&[_]Feature{
1821 .xmega,1820 .xmega,
1822 }),1821 }),
1823 };1822 };
1824 pub const atxmega256a3bu = Cpu{1823 pub const atxmega256a3bu = Cpu{
1825 .name = "atxmega256a3bu",1824 .name = "atxmega256a3bu",
1826 .llvm_name = "atxmega256a3bu",1825 .llvm_name = "atxmega256a3bu",
1827 .features = featureSet(&all_features, &[_]Feature{1826 .features = featureSet(&[_]Feature{
1828 .xmegau,1827 .xmegau,
1829 }),1828 }),
1830 };1829 };
1831 pub const atxmega256a3u = Cpu{1830 pub const atxmega256a3u = Cpu{
1832 .name = "atxmega256a3u",1831 .name = "atxmega256a3u",
1833 .llvm_name = "atxmega256a3u",1832 .llvm_name = "atxmega256a3u",
1834 .features = featureSet(&all_features, &[_]Feature{1833 .features = featureSet(&[_]Feature{
1835 .xmegau,1834 .xmegau,
1836 }),1835 }),
1837 };1836 };
1838 pub const atxmega256c3 = Cpu{1837 pub const atxmega256c3 = Cpu{
1839 .name = "atxmega256c3",1838 .name = "atxmega256c3",
1840 .llvm_name = "atxmega256c3",1839 .llvm_name = "atxmega256c3",
1841 .features = featureSet(&all_features, &[_]Feature{1840 .features = featureSet(&[_]Feature{
1842 .xmegau,1841 .xmegau,
1843 }),1842 }),
1844 };1843 };
1845 pub const atxmega256d3 = Cpu{1844 pub const atxmega256d3 = Cpu{
1846 .name = "atxmega256d3",1845 .name = "atxmega256d3",
1847 .llvm_name = "atxmega256d3",1846 .llvm_name = "atxmega256d3",
1848 .features = featureSet(&all_features, &[_]Feature{1847 .features = featureSet(&[_]Feature{
1849 .xmega,1848 .xmega,
1850 }),1849 }),
1851 };1850 };
1852 pub const atxmega32a4 = Cpu{1851 pub const atxmega32a4 = Cpu{
1853 .name = "atxmega32a4",1852 .name = "atxmega32a4",
1854 .llvm_name = "atxmega32a4",1853 .llvm_name = "atxmega32a4",
1855 .features = featureSet(&all_features, &[_]Feature{1854 .features = featureSet(&[_]Feature{
1856 .xmega,1855 .xmega,
1857 }),1856 }),
1858 };1857 };
1859 pub const atxmega32a4u = Cpu{1858 pub const atxmega32a4u = Cpu{
1860 .name = "atxmega32a4u",1859 .name = "atxmega32a4u",
1861 .llvm_name = "atxmega32a4u",1860 .llvm_name = "atxmega32a4u",
1862 .features = featureSet(&all_features, &[_]Feature{1861 .features = featureSet(&[_]Feature{
1863 .xmegau,1862 .xmegau,
1864 }),1863 }),
1865 };1864 };
1866 pub const atxmega32c4 = Cpu{1865 pub const atxmega32c4 = Cpu{
1867 .name = "atxmega32c4",1866 .name = "atxmega32c4",
1868 .llvm_name = "atxmega32c4",1867 .llvm_name = "atxmega32c4",
1869 .features = featureSet(&all_features, &[_]Feature{1868 .features = featureSet(&[_]Feature{
1870 .xmegau,1869 .xmegau,
1871 }),1870 }),
1872 };1871 };
1873 pub const atxmega32d4 = Cpu{1872 pub const atxmega32d4 = Cpu{
1874 .name = "atxmega32d4",1873 .name = "atxmega32d4",
1875 .llvm_name = "atxmega32d4",1874 .llvm_name = "atxmega32d4",
1876 .features = featureSet(&all_features, &[_]Feature{1875 .features = featureSet(&[_]Feature{
1877 .xmega,1876 .xmega,
1878 }),1877 }),
1879 };1878 };
1880 pub const atxmega32e5 = Cpu{1879 pub const atxmega32e5 = Cpu{
1881 .name = "atxmega32e5",1880 .name = "atxmega32e5",
1882 .llvm_name = "atxmega32e5",1881 .llvm_name = "atxmega32e5",
1883 .features = featureSet(&all_features, &[_]Feature{1882 .features = featureSet(&[_]Feature{
1884 .xmega,1883 .xmega,
1885 }),1884 }),
1886 };1885 };
1887 pub const atxmega32x1 = Cpu{1886 pub const atxmega32x1 = Cpu{
1888 .name = "atxmega32x1",1887 .name = "atxmega32x1",
1889 .llvm_name = "atxmega32x1",1888 .llvm_name = "atxmega32x1",
1890 .features = featureSet(&all_features, &[_]Feature{1889 .features = featureSet(&[_]Feature{
1891 .xmega,1890 .xmega,
1892 }),1891 }),
1893 };1892 };
1894 pub const atxmega384c3 = Cpu{1893 pub const atxmega384c3 = Cpu{
1895 .name = "atxmega384c3",1894 .name = "atxmega384c3",
1896 .llvm_name = "atxmega384c3",1895 .llvm_name = "atxmega384c3",
1897 .features = featureSet(&all_features, &[_]Feature{1896 .features = featureSet(&[_]Feature{
1898 .xmegau,1897 .xmegau,
1899 }),1898 }),
1900 };1899 };
1901 pub const atxmega384d3 = Cpu{1900 pub const atxmega384d3 = Cpu{
1902 .name = "atxmega384d3",1901 .name = "atxmega384d3",
1903 .llvm_name = "atxmega384d3",1902 .llvm_name = "atxmega384d3",
1904 .features = featureSet(&all_features, &[_]Feature{1903 .features = featureSet(&[_]Feature{
1905 .xmega,1904 .xmega,
1906 }),1905 }),
1907 };1906 };
1908 pub const atxmega64a1 = Cpu{1907 pub const atxmega64a1 = Cpu{
1909 .name = "atxmega64a1",1908 .name = "atxmega64a1",
1910 .llvm_name = "atxmega64a1",1909 .llvm_name = "atxmega64a1",
1911 .features = featureSet(&all_features, &[_]Feature{1910 .features = featureSet(&[_]Feature{
1912 .xmega,1911 .xmega,
1913 }),1912 }),
1914 };1913 };
1915 pub const atxmega64a1u = Cpu{1914 pub const atxmega64a1u = Cpu{
1916 .name = "atxmega64a1u",1915 .name = "atxmega64a1u",
1917 .llvm_name = "atxmega64a1u",1916 .llvm_name = "atxmega64a1u",
1918 .features = featureSet(&all_features, &[_]Feature{1917 .features = featureSet(&[_]Feature{
1919 .xmegau,1918 .xmegau,
1920 }),1919 }),
1921 };1920 };
1922 pub const atxmega64a3 = Cpu{1921 pub const atxmega64a3 = Cpu{
1923 .name = "atxmega64a3",1922 .name = "atxmega64a3",
1924 .llvm_name = "atxmega64a3",1923 .llvm_name = "atxmega64a3",
1925 .features = featureSet(&all_features, &[_]Feature{1924 .features = featureSet(&[_]Feature{
1926 .xmega,1925 .xmega,
1927 }),1926 }),
1928 };1927 };
1929 pub const atxmega64a3u = Cpu{1928 pub const atxmega64a3u = Cpu{
1930 .name = "atxmega64a3u",1929 .name = "atxmega64a3u",
1931 .llvm_name = "atxmega64a3u",1930 .llvm_name = "atxmega64a3u",
1932 .features = featureSet(&all_features, &[_]Feature{1931 .features = featureSet(&[_]Feature{
1933 .xmegau,1932 .xmegau,
1934 }),1933 }),
1935 };1934 };
1936 pub const atxmega64a4u = Cpu{1935 pub const atxmega64a4u = Cpu{
1937 .name = "atxmega64a4u",1936 .name = "atxmega64a4u",
1938 .llvm_name = "atxmega64a4u",1937 .llvm_name = "atxmega64a4u",
1939 .features = featureSet(&all_features, &[_]Feature{1938 .features = featureSet(&[_]Feature{
1940 .xmegau,1939 .xmegau,
1941 }),1940 }),
1942 };1941 };
1943 pub const atxmega64b1 = Cpu{1942 pub const atxmega64b1 = Cpu{
1944 .name = "atxmega64b1",1943 .name = "atxmega64b1",
1945 .llvm_name = "atxmega64b1",1944 .llvm_name = "atxmega64b1",
1946 .features = featureSet(&all_features, &[_]Feature{1945 .features = featureSet(&[_]Feature{
1947 .xmegau,1946 .xmegau,
1948 }),1947 }),
1949 };1948 };
1950 pub const atxmega64b3 = Cpu{1949 pub const atxmega64b3 = Cpu{
1951 .name = "atxmega64b3",1950 .name = "atxmega64b3",
1952 .llvm_name = "atxmega64b3",1951 .llvm_name = "atxmega64b3",
1953 .features = featureSet(&all_features, &[_]Feature{1952 .features = featureSet(&[_]Feature{
1954 .xmegau,1953 .xmegau,
1955 }),1954 }),
1956 };1955 };
1957 pub const atxmega64c3 = Cpu{1956 pub const atxmega64c3 = Cpu{
1958 .name = "atxmega64c3",1957 .name = "atxmega64c3",
1959 .llvm_name = "atxmega64c3",1958 .llvm_name = "atxmega64c3",
1960 .features = featureSet(&all_features, &[_]Feature{1959 .features = featureSet(&[_]Feature{
1961 .xmegau,1960 .xmegau,
1962 }),1961 }),
1963 };1962 };
1964 pub const atxmega64d3 = Cpu{1963 pub const atxmega64d3 = Cpu{
1965 .name = "atxmega64d3",1964 .name = "atxmega64d3",
1966 .llvm_name = "atxmega64d3",1965 .llvm_name = "atxmega64d3",
1967 .features = featureSet(&all_features, &[_]Feature{1966 .features = featureSet(&[_]Feature{
1968 .xmega,1967 .xmega,
1969 }),1968 }),
1970 };1969 };
1971 pub const atxmega64d4 = Cpu{1970 pub const atxmega64d4 = Cpu{
1972 .name = "atxmega64d4",1971 .name = "atxmega64d4",
1973 .llvm_name = "atxmega64d4",1972 .llvm_name = "atxmega64d4",
1974 .features = featureSet(&all_features, &[_]Feature{1973 .features = featureSet(&[_]Feature{
1975 .xmega,1974 .xmega,
1976 }),1975 }),
1977 };1976 };
1978 pub const atxmega8e5 = Cpu{1977 pub const atxmega8e5 = Cpu{
1979 .name = "atxmega8e5",1978 .name = "atxmega8e5",
1980 .llvm_name = "atxmega8e5",1979 .llvm_name = "atxmega8e5",
1981 .features = featureSet(&all_features, &[_]Feature{1980 .features = featureSet(&[_]Feature{
1982 .xmega,1981 .xmega,
1983 }),1982 }),
1984 };1983 };
1985 pub const avr1 = Cpu{1984 pub const avr1 = Cpu{
1986 .name = "avr1",1985 .name = "avr1",
1987 .llvm_name = "avr1",1986 .llvm_name = "avr1",
1988 .features = featureSet(&all_features, &[_]Feature{1987 .features = featureSet(&[_]Feature{
1989 .avr1,1988 .avr1,
1990 }),1989 }),
1991 };1990 };
1992 pub const avr2 = Cpu{1991 pub const avr2 = Cpu{
1993 .name = "avr2",1992 .name = "avr2",
1994 .llvm_name = "avr2",1993 .llvm_name = "avr2",
1995 .features = featureSet(&all_features, &[_]Feature{1994 .features = featureSet(&[_]Feature{
1996 .avr2,1995 .avr2,
1997 }),1996 }),
1998 };1997 };
1999 pub const avr25 = Cpu{1998 pub const avr25 = Cpu{
2000 .name = "avr25",1999 .name = "avr25",
2001 .llvm_name = "avr25",2000 .llvm_name = "avr25",
2002 .features = featureSet(&all_features, &[_]Feature{2001 .features = featureSet(&[_]Feature{
2003 .avr25,2002 .avr25,
2004 }),2003 }),
2005 };2004 };
2006 pub const avr3 = Cpu{2005 pub const avr3 = Cpu{
2007 .name = "avr3",2006 .name = "avr3",
2008 .llvm_name = "avr3",2007 .llvm_name = "avr3",
2009 .features = featureSet(&all_features, &[_]Feature{2008 .features = featureSet(&[_]Feature{
2010 .avr3,2009 .avr3,
2011 }),2010 }),
2012 };2011 };
2013 pub const avr31 = Cpu{2012 pub const avr31 = Cpu{
2014 .name = "avr31",2013 .name = "avr31",
2015 .llvm_name = "avr31",2014 .llvm_name = "avr31",
2016 .features = featureSet(&all_features, &[_]Feature{2015 .features = featureSet(&[_]Feature{
2017 .avr31,2016 .avr31,
2018 }),2017 }),
2019 };2018 };
2020 pub const avr35 = Cpu{2019 pub const avr35 = Cpu{
2021 .name = "avr35",2020 .name = "avr35",
2022 .llvm_name = "avr35",2021 .llvm_name = "avr35",
2023 .features = featureSet(&all_features, &[_]Feature{2022 .features = featureSet(&[_]Feature{
2024 .avr35,2023 .avr35,
2025 }),2024 }),
2026 };2025 };
2027 pub const avr4 = Cpu{2026 pub const avr4 = Cpu{
2028 .name = "avr4",2027 .name = "avr4",
2029 .llvm_name = "avr4",2028 .llvm_name = "avr4",
2030 .features = featureSet(&all_features, &[_]Feature{2029 .features = featureSet(&[_]Feature{
2031 .avr4,2030 .avr4,
2032 }),2031 }),
2033 };2032 };
2034 pub const avr5 = Cpu{2033 pub const avr5 = Cpu{
2035 .name = "avr5",2034 .name = "avr5",
2036 .llvm_name = "avr5",2035 .llvm_name = "avr5",
2037 .features = featureSet(&all_features, &[_]Feature{2036 .features = featureSet(&[_]Feature{
2038 .avr5,2037 .avr5,
2039 }),2038 }),
2040 };2039 };
2041 pub const avr51 = Cpu{2040 pub const avr51 = Cpu{
2042 .name = "avr51",2041 .name = "avr51",
2043 .llvm_name = "avr51",2042 .llvm_name = "avr51",
2044 .features = featureSet(&all_features, &[_]Feature{2043 .features = featureSet(&[_]Feature{
2045 .avr51,2044 .avr51,
2046 }),2045 }),
2047 };2046 };
2048 pub const avr6 = Cpu{2047 pub const avr6 = Cpu{
2049 .name = "avr6",2048 .name = "avr6",
2050 .llvm_name = "avr6",2049 .llvm_name = "avr6",
2051 .features = featureSet(&all_features, &[_]Feature{2050 .features = featureSet(&[_]Feature{
2052 .avr6,2051 .avr6,
2053 }),2052 }),
2054 };2053 };
2055 pub const avrtiny = Cpu{2054 pub const avrtiny = Cpu{
2056 .name = "avrtiny",2055 .name = "avrtiny",
2057 .llvm_name = "avrtiny",2056 .llvm_name = "avrtiny",
2058 .features = featureSet(&all_features, &[_]Feature{2057 .features = featureSet(&[_]Feature{
2059 .avrtiny,2058 .avrtiny,
2060 }),2059 }),
2061 };2060 };
2062 pub const avrxmega1 = Cpu{2061 pub const avrxmega1 = Cpu{
2063 .name = "avrxmega1",2062 .name = "avrxmega1",
2064 .llvm_name = "avrxmega1",2063 .llvm_name = "avrxmega1",
2065 .features = featureSet(&all_features, &[_]Feature{2064 .features = featureSet(&[_]Feature{
2066 .xmega,2065 .xmega,
2067 }),2066 }),
2068 };2067 };
2069 pub const avrxmega2 = Cpu{2068 pub const avrxmega2 = Cpu{
2070 .name = "avrxmega2",2069 .name = "avrxmega2",
2071 .llvm_name = "avrxmega2",2070 .llvm_name = "avrxmega2",
2072 .features = featureSet(&all_features, &[_]Feature{2071 .features = featureSet(&[_]Feature{
2073 .xmega,2072 .xmega,
2074 }),2073 }),
2075 };2074 };
2076 pub const avrxmega3 = Cpu{2075 pub const avrxmega3 = Cpu{
2077 .name = "avrxmega3",2076 .name = "avrxmega3",
2078 .llvm_name = "avrxmega3",2077 .llvm_name = "avrxmega3",
2079 .features = featureSet(&all_features, &[_]Feature{2078 .features = featureSet(&[_]Feature{
2080 .xmega,2079 .xmega,
2081 }),2080 }),
2082 };2081 };
2083 pub const avrxmega4 = Cpu{2082 pub const avrxmega4 = Cpu{
2084 .name = "avrxmega4",2083 .name = "avrxmega4",
2085 .llvm_name = "avrxmega4",2084 .llvm_name = "avrxmega4",
2086 .features = featureSet(&all_features, &[_]Feature{2085 .features = featureSet(&[_]Feature{
2087 .xmega,2086 .xmega,
2088 }),2087 }),
2089 };2088 };
2090 pub const avrxmega5 = Cpu{2089 pub const avrxmega5 = Cpu{
2091 .name = "avrxmega5",2090 .name = "avrxmega5",
2092 .llvm_name = "avrxmega5",2091 .llvm_name = "avrxmega5",
2093 .features = featureSet(&all_features, &[_]Feature{2092 .features = featureSet(&[_]Feature{
2094 .xmega,2093 .xmega,
2095 }),2094 }),
2096 };2095 };
2097 pub const avrxmega6 = Cpu{2096 pub const avrxmega6 = Cpu{
2098 .name = "avrxmega6",2097 .name = "avrxmega6",
2099 .llvm_name = "avrxmega6",2098 .llvm_name = "avrxmega6",
2100 .features = featureSet(&all_features, &[_]Feature{2099 .features = featureSet(&[_]Feature{
2101 .xmega,2100 .xmega,
2102 }),2101 }),
2103 };2102 };
2104 pub const avrxmega7 = Cpu{2103 pub const avrxmega7 = Cpu{
2105 .name = "avrxmega7",2104 .name = "avrxmega7",
2106 .llvm_name = "avrxmega7",2105 .llvm_name = "avrxmega7",
2107 .features = featureSet(&all_features, &[_]Feature{2106 .features = featureSet(&[_]Feature{
2108 .xmega,2107 .xmega,
2109 }),2108 }),
2110 };2109 };
2111 pub const m3000 = Cpu{2110 pub const m3000 = Cpu{
2112 .name = "m3000",2111 .name = "m3000",
2113 .llvm_name = "m3000",2112 .llvm_name = "m3000",
2114 .features = featureSet(&all_features, &[_]Feature{2113 .features = featureSet(&[_]Feature{
2115 .avr5,2114 .avr5,
2116 }),2115 }),
2117 };2116 };
...@@ -2380,6 +2379,6 @@ pub const all_cpus = &[_]*const Cpu{...@@ -2380,6 +2379,6 @@ pub const all_cpus = &[_]*const Cpu{
2380 &cpu.m3000,2379 &cpu.m3000,
2381};2380};
23822381
2383pub const baseline_features = featureSet(&all_features, &[_]Feature{2382pub const baseline_features = featureSet(&[_]Feature{
2384 .avr0,2383 .avr0,
2385});2384});
lib/std/target/bpf.zig+8-9
...@@ -16,23 +16,22 @@ pub const all_features = blk: {...@@ -16,23 +16,22 @@ pub const all_features = blk: {
16 result[@enumToInt(Feature.alu32)] = .{16 result[@enumToInt(Feature.alu32)] = .{
17 .llvm_name = "alu32",17 .llvm_name = "alu32",
18 .description = "Enable ALU32 instructions",18 .description = "Enable ALU32 instructions",
19 .dependencies = sparseFeatureSet(&[_]Feature{}),19 .dependencies = featureSet(&[_]Feature{}),
20 };20 };
21 result[@enumToInt(Feature.dummy)] = .{21 result[@enumToInt(Feature.dummy)] = .{
22 .llvm_name = "dummy",22 .llvm_name = "dummy",
23 .description = "unused feature",23 .description = "unused feature",
24 .dependencies = sparseFeatureSet(&[_]Feature{}),24 .dependencies = featureSet(&[_]Feature{}),
25 };25 };
26 result[@enumToInt(Feature.dwarfris)] = .{26 result[@enumToInt(Feature.dwarfris)] = .{
27 .llvm_name = "dwarfris",27 .llvm_name = "dwarfris",
28 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",28 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
29 .dependencies = sparseFeatureSet(&[_]Feature{}),29 .dependencies = featureSet(&[_]Feature{}),
30 };30 };
31 const ti = @typeInfo(Feature);31 const ti = @typeInfo(Feature);
32 for (result) |*elem, i| {32 for (result) |*elem, i| {
33 elem.index = i;33 elem.index = i;
34 elem.name = ti.Enum.fields[i].name;34 elem.name = ti.Enum.fields[i].name;
35 elem.dependencies.initAsDependencies(i, &result);
36 }35 }
37 break :blk result;36 break :blk result;
38};37};
...@@ -41,27 +40,27 @@ pub const cpu = struct {...@@ -41,27 +40,27 @@ pub const cpu = struct {
41 pub const generic = Cpu{40 pub const generic = Cpu{
42 .name = "generic",41 .name = "generic",
43 .llvm_name = "generic",42 .llvm_name = "generic",
44 .features = featureSet(&all_features, &[_]Feature{}),43 .features = featureSet(&[_]Feature{}),
45 };44 };
46 pub const probe = Cpu{45 pub const probe = Cpu{
47 .name = "probe",46 .name = "probe",
48 .llvm_name = "probe",47 .llvm_name = "probe",
49 .features = featureSet(&all_features, &[_]Feature{}),48 .features = featureSet(&[_]Feature{}),
50 };49 };
51 pub const v1 = Cpu{50 pub const v1 = Cpu{
52 .name = "v1",51 .name = "v1",
53 .llvm_name = "v1",52 .llvm_name = "v1",
54 .features = featureSet(&all_features, &[_]Feature{}),53 .features = featureSet(&[_]Feature{}),
55 };54 };
56 pub const v2 = Cpu{55 pub const v2 = Cpu{
57 .name = "v2",56 .name = "v2",
58 .llvm_name = "v2",57 .llvm_name = "v2",
59 .features = featureSet(&all_features, &[_]Feature{}),58 .features = featureSet(&[_]Feature{}),
60 };59 };
61 pub const v3 = Cpu{60 pub const v3 = Cpu{
62 .name = "v3",61 .name = "v3",
63 .llvm_name = "v3",62 .llvm_name = "v3",
64 .features = featureSet(&all_features, &[_]Feature{}),63 .features = featureSet(&[_]Feature{}),
65 };64 };
66};65};
6766
lib/std/target/hexagon.zig+31-32
...@@ -37,38 +37,38 @@ pub const all_features = blk: {...@@ -37,38 +37,38 @@ pub const all_features = blk: {
37 result[@enumToInt(Feature.duplex)] = .{37 result[@enumToInt(Feature.duplex)] = .{
38 .llvm_name = "duplex",38 .llvm_name = "duplex",
39 .description = "Enable generation of duplex instruction",39 .description = "Enable generation of duplex instruction",
40 .dependencies = sparseFeatureSet(&[_]Feature{}),40 .dependencies = featureSet(&[_]Feature{}),
41 };41 };
42 result[@enumToInt(Feature.hvx)] = .{42 result[@enumToInt(Feature.hvx)] = .{
43 .llvm_name = "hvx",43 .llvm_name = "hvx",
44 .description = "Hexagon HVX instructions",44 .description = "Hexagon HVX instructions",
45 .dependencies = sparseFeatureSet(&[_]Feature{}),45 .dependencies = featureSet(&[_]Feature{}),
46 };46 };
47 result[@enumToInt(Feature.hvx_length128b)] = .{47 result[@enumToInt(Feature.hvx_length128b)] = .{
48 .llvm_name = "hvx-length128b",48 .llvm_name = "hvx-length128b",
49 .description = "Hexagon HVX 128B instructions",49 .description = "Hexagon HVX 128B instructions",
50 .dependencies = sparseFeatureSet(&[_]Feature{50 .dependencies = featureSet(&[_]Feature{
51 .hvx,51 .hvx,
52 }),52 }),
53 };53 };
54 result[@enumToInt(Feature.hvx_length64b)] = .{54 result[@enumToInt(Feature.hvx_length64b)] = .{
55 .llvm_name = "hvx-length64b",55 .llvm_name = "hvx-length64b",
56 .description = "Hexagon HVX 64B instructions",56 .description = "Hexagon HVX 64B instructions",
57 .dependencies = sparseFeatureSet(&[_]Feature{57 .dependencies = featureSet(&[_]Feature{
58 .hvx,58 .hvx,
59 }),59 }),
60 };60 };
61 result[@enumToInt(Feature.hvxv60)] = .{61 result[@enumToInt(Feature.hvxv60)] = .{
62 .llvm_name = "hvxv60",62 .llvm_name = "hvxv60",
63 .description = "Hexagon HVX instructions",63 .description = "Hexagon HVX instructions",
64 .dependencies = sparseFeatureSet(&[_]Feature{64 .dependencies = featureSet(&[_]Feature{
65 .hvx,65 .hvx,
66 }),66 }),
67 };67 };
68 result[@enumToInt(Feature.hvxv62)] = .{68 result[@enumToInt(Feature.hvxv62)] = .{
69 .llvm_name = "hvxv62",69 .llvm_name = "hvxv62",
70 .description = "Hexagon HVX instructions",70 .description = "Hexagon HVX instructions",
71 .dependencies = sparseFeatureSet(&[_]Feature{71 .dependencies = featureSet(&[_]Feature{
72 .hvx,72 .hvx,
73 .hvxv60,73 .hvxv60,
74 }),74 }),
...@@ -76,7 +76,7 @@ pub const all_features = blk: {...@@ -76,7 +76,7 @@ pub const all_features = blk: {
76 result[@enumToInt(Feature.hvxv65)] = .{76 result[@enumToInt(Feature.hvxv65)] = .{
77 .llvm_name = "hvxv65",77 .llvm_name = "hvxv65",
78 .description = "Hexagon HVX instructions",78 .description = "Hexagon HVX instructions",
79 .dependencies = sparseFeatureSet(&[_]Feature{79 .dependencies = featureSet(&[_]Feature{
80 .hvx,80 .hvx,
81 .hvxv60,81 .hvxv60,
82 .hvxv62,82 .hvxv62,
...@@ -85,7 +85,7 @@ pub const all_features = blk: {...@@ -85,7 +85,7 @@ pub const all_features = blk: {
85 result[@enumToInt(Feature.hvxv66)] = .{85 result[@enumToInt(Feature.hvxv66)] = .{
86 .llvm_name = "hvxv66",86 .llvm_name = "hvxv66",
87 .description = "Hexagon HVX instructions",87 .description = "Hexagon HVX instructions",
88 .dependencies = sparseFeatureSet(&[_]Feature{88 .dependencies = featureSet(&[_]Feature{
89 .hvx,89 .hvx,
90 .hvxv60,90 .hvxv60,
91 .hvxv62,91 .hvxv62,
...@@ -96,92 +96,91 @@ pub const all_features = blk: {...@@ -96,92 +96,91 @@ pub const all_features = blk: {
96 result[@enumToInt(Feature.long_calls)] = .{96 result[@enumToInt(Feature.long_calls)] = .{
97 .llvm_name = "long-calls",97 .llvm_name = "long-calls",
98 .description = "Use constant-extended calls",98 .description = "Use constant-extended calls",
99 .dependencies = sparseFeatureSet(&[_]Feature{}),99 .dependencies = featureSet(&[_]Feature{}),
100 };100 };
101 result[@enumToInt(Feature.mem_noshuf)] = .{101 result[@enumToInt(Feature.mem_noshuf)] = .{
102 .llvm_name = "mem_noshuf",102 .llvm_name = "mem_noshuf",
103 .description = "Supports mem_noshuf feature",103 .description = "Supports mem_noshuf feature",
104 .dependencies = sparseFeatureSet(&[_]Feature{}),104 .dependencies = featureSet(&[_]Feature{}),
105 };105 };
106 result[@enumToInt(Feature.memops)] = .{106 result[@enumToInt(Feature.memops)] = .{
107 .llvm_name = "memops",107 .llvm_name = "memops",
108 .description = "Use memop instructions",108 .description = "Use memop instructions",
109 .dependencies = sparseFeatureSet(&[_]Feature{}),109 .dependencies = featureSet(&[_]Feature{}),
110 };110 };
111 result[@enumToInt(Feature.noreturn_stack_elim)] = .{111 result[@enumToInt(Feature.noreturn_stack_elim)] = .{
112 .llvm_name = "noreturn-stack-elim",112 .llvm_name = "noreturn-stack-elim",
113 .description = "Eliminate stack allocation in a noreturn function when possible",113 .description = "Eliminate stack allocation in a noreturn function when possible",
114 .dependencies = sparseFeatureSet(&[_]Feature{}),114 .dependencies = featureSet(&[_]Feature{}),
115 };115 };
116 result[@enumToInt(Feature.nvj)] = .{116 result[@enumToInt(Feature.nvj)] = .{
117 .llvm_name = "nvj",117 .llvm_name = "nvj",
118 .description = "Support for new-value jumps",118 .description = "Support for new-value jumps",
119 .dependencies = sparseFeatureSet(&[_]Feature{119 .dependencies = featureSet(&[_]Feature{
120 .packets,120 .packets,
121 }),121 }),
122 };122 };
123 result[@enumToInt(Feature.nvs)] = .{123 result[@enumToInt(Feature.nvs)] = .{
124 .llvm_name = "nvs",124 .llvm_name = "nvs",
125 .description = "Support for new-value stores",125 .description = "Support for new-value stores",
126 .dependencies = sparseFeatureSet(&[_]Feature{126 .dependencies = featureSet(&[_]Feature{
127 .packets,127 .packets,
128 }),128 }),
129 };129 };
130 result[@enumToInt(Feature.packets)] = .{130 result[@enumToInt(Feature.packets)] = .{
131 .llvm_name = "packets",131 .llvm_name = "packets",
132 .description = "Support for instruction packets",132 .description = "Support for instruction packets",
133 .dependencies = sparseFeatureSet(&[_]Feature{}),133 .dependencies = featureSet(&[_]Feature{}),
134 };134 };
135 result[@enumToInt(Feature.reserved_r19)] = .{135 result[@enumToInt(Feature.reserved_r19)] = .{
136 .llvm_name = "reserved-r19",136 .llvm_name = "reserved-r19",
137 .description = "Reserve register R19",137 .description = "Reserve register R19",
138 .dependencies = sparseFeatureSet(&[_]Feature{}),138 .dependencies = featureSet(&[_]Feature{}),
139 };139 };
140 result[@enumToInt(Feature.small_data)] = .{140 result[@enumToInt(Feature.small_data)] = .{
141 .llvm_name = "small-data",141 .llvm_name = "small-data",
142 .description = "Allow GP-relative addressing of global variables",142 .description = "Allow GP-relative addressing of global variables",
143 .dependencies = sparseFeatureSet(&[_]Feature{}),143 .dependencies = featureSet(&[_]Feature{}),
144 };144 };
145 result[@enumToInt(Feature.v5)] = .{145 result[@enumToInt(Feature.v5)] = .{
146 .llvm_name = "v5",146 .llvm_name = "v5",
147 .description = "Enable Hexagon V5 architecture",147 .description = "Enable Hexagon V5 architecture",
148 .dependencies = sparseFeatureSet(&[_]Feature{}),148 .dependencies = featureSet(&[_]Feature{}),
149 };149 };
150 result[@enumToInt(Feature.v55)] = .{150 result[@enumToInt(Feature.v55)] = .{
151 .llvm_name = "v55",151 .llvm_name = "v55",
152 .description = "Enable Hexagon V55 architecture",152 .description = "Enable Hexagon V55 architecture",
153 .dependencies = sparseFeatureSet(&[_]Feature{}),153 .dependencies = featureSet(&[_]Feature{}),
154 };154 };
155 result[@enumToInt(Feature.v60)] = .{155 result[@enumToInt(Feature.v60)] = .{
156 .llvm_name = "v60",156 .llvm_name = "v60",
157 .description = "Enable Hexagon V60 architecture",157 .description = "Enable Hexagon V60 architecture",
158 .dependencies = sparseFeatureSet(&[_]Feature{}),158 .dependencies = featureSet(&[_]Feature{}),
159 };159 };
160 result[@enumToInt(Feature.v62)] = .{160 result[@enumToInt(Feature.v62)] = .{
161 .llvm_name = "v62",161 .llvm_name = "v62",
162 .description = "Enable Hexagon V62 architecture",162 .description = "Enable Hexagon V62 architecture",
163 .dependencies = sparseFeatureSet(&[_]Feature{}),163 .dependencies = featureSet(&[_]Feature{}),
164 };164 };
165 result[@enumToInt(Feature.v65)] = .{165 result[@enumToInt(Feature.v65)] = .{
166 .llvm_name = "v65",166 .llvm_name = "v65",
167 .description = "Enable Hexagon V65 architecture",167 .description = "Enable Hexagon V65 architecture",
168 .dependencies = sparseFeatureSet(&[_]Feature{}),168 .dependencies = featureSet(&[_]Feature{}),
169 };169 };
170 result[@enumToInt(Feature.v66)] = .{170 result[@enumToInt(Feature.v66)] = .{
171 .llvm_name = "v66",171 .llvm_name = "v66",
172 .description = "Enable Hexagon V66 architecture",172 .description = "Enable Hexagon V66 architecture",
173 .dependencies = sparseFeatureSet(&[_]Feature{}),173 .dependencies = featureSet(&[_]Feature{}),
174 };174 };
175 result[@enumToInt(Feature.zreg)] = .{175 result[@enumToInt(Feature.zreg)] = .{
176 .llvm_name = "zreg",176 .llvm_name = "zreg",
177 .description = "Hexagon ZReg extension instructions",177 .description = "Hexagon ZReg extension instructions",
178 .dependencies = sparseFeatureSet(&[_]Feature{}),178 .dependencies = featureSet(&[_]Feature{}),
179 };179 };
180 const ti = @typeInfo(Feature);180 const ti = @typeInfo(Feature);
181 for (result) |*elem, i| {181 for (result) |*elem, i| {
182 elem.index = i;182 elem.index = i;
183 elem.name = ti.Enum.fields[i].name;183 elem.name = ti.Enum.fields[i].name;
184 elem.dependencies.initAsDependencies(i, &result);
185 }184 }
186 break :blk result;185 break :blk result;
187};186};
...@@ -190,7 +189,7 @@ pub const cpu = struct {...@@ -190,7 +189,7 @@ pub const cpu = struct {
190 pub const generic = Cpu{189 pub const generic = Cpu{
191 .name = "generic",190 .name = "generic",
192 .llvm_name = "generic",191 .llvm_name = "generic",
193 .features = featureSet(&all_features, &[_]Feature{192 .features = featureSet(&[_]Feature{
194 .duplex,193 .duplex,
195 .memops,194 .memops,
196 .nvj,195 .nvj,
...@@ -205,7 +204,7 @@ pub const cpu = struct {...@@ -205,7 +204,7 @@ pub const cpu = struct {
205 pub const hexagonv5 = Cpu{204 pub const hexagonv5 = Cpu{
206 .name = "hexagonv5",205 .name = "hexagonv5",
207 .llvm_name = "hexagonv5",206 .llvm_name = "hexagonv5",
208 .features = featureSet(&all_features, &[_]Feature{207 .features = featureSet(&[_]Feature{
209 .duplex,208 .duplex,
210 .memops,209 .memops,
211 .nvj,210 .nvj,
...@@ -218,7 +217,7 @@ pub const cpu = struct {...@@ -218,7 +217,7 @@ pub const cpu = struct {
218 pub const hexagonv55 = Cpu{217 pub const hexagonv55 = Cpu{
219 .name = "hexagonv55",218 .name = "hexagonv55",
220 .llvm_name = "hexagonv55",219 .llvm_name = "hexagonv55",
221 .features = featureSet(&all_features, &[_]Feature{220 .features = featureSet(&[_]Feature{
222 .duplex,221 .duplex,
223 .memops,222 .memops,
224 .nvj,223 .nvj,
...@@ -232,7 +231,7 @@ pub const cpu = struct {...@@ -232,7 +231,7 @@ pub const cpu = struct {
232 pub const hexagonv60 = Cpu{231 pub const hexagonv60 = Cpu{
233 .name = "hexagonv60",232 .name = "hexagonv60",
234 .llvm_name = "hexagonv60",233 .llvm_name = "hexagonv60",
235 .features = featureSet(&all_features, &[_]Feature{234 .features = featureSet(&[_]Feature{
236 .duplex,235 .duplex,
237 .memops,236 .memops,
238 .nvj,237 .nvj,
...@@ -247,7 +246,7 @@ pub const cpu = struct {...@@ -247,7 +246,7 @@ pub const cpu = struct {
247 pub const hexagonv62 = Cpu{246 pub const hexagonv62 = Cpu{
248 .name = "hexagonv62",247 .name = "hexagonv62",
249 .llvm_name = "hexagonv62",248 .llvm_name = "hexagonv62",
250 .features = featureSet(&all_features, &[_]Feature{249 .features = featureSet(&[_]Feature{
251 .duplex,250 .duplex,
252 .memops,251 .memops,
253 .nvj,252 .nvj,
...@@ -263,7 +262,7 @@ pub const cpu = struct {...@@ -263,7 +262,7 @@ pub const cpu = struct {
263 pub const hexagonv65 = Cpu{262 pub const hexagonv65 = Cpu{
264 .name = "hexagonv65",263 .name = "hexagonv65",
265 .llvm_name = "hexagonv65",264 .llvm_name = "hexagonv65",
266 .features = featureSet(&all_features, &[_]Feature{265 .features = featureSet(&[_]Feature{
267 .duplex,266 .duplex,
268 .mem_noshuf,267 .mem_noshuf,
269 .memops,268 .memops,
...@@ -281,7 +280,7 @@ pub const cpu = struct {...@@ -281,7 +280,7 @@ pub const cpu = struct {
281 pub const hexagonv66 = Cpu{280 pub const hexagonv66 = Cpu{
282 .name = "hexagonv66",281 .name = "hexagonv66",
283 .llvm_name = "hexagonv66",282 .llvm_name = "hexagonv66",
284 .features = featureSet(&all_features, &[_]Feature{283 .features = featureSet(&[_]Feature{
285 .duplex,284 .duplex,
286 .mem_noshuf,285 .mem_noshuf,
287 .memops,286 .memops,
lib/std/target/mips.zig+66-67
...@@ -62,36 +62,36 @@ pub const all_features = blk: {...@@ -62,36 +62,36 @@ pub const all_features = blk: {
62 result[@enumToInt(Feature.abs2008)] = .{62 result[@enumToInt(Feature.abs2008)] = .{
63 .llvm_name = "abs2008",63 .llvm_name = "abs2008",
64 .description = "Disable IEEE 754-2008 abs.fmt mode",64 .description = "Disable IEEE 754-2008 abs.fmt mode",
65 .dependencies = sparseFeatureSet(&[_]Feature{}),65 .dependencies = featureSet(&[_]Feature{}),
66 };66 };
67 result[@enumToInt(Feature.cnmips)] = .{67 result[@enumToInt(Feature.cnmips)] = .{
68 .llvm_name = "cnmips",68 .llvm_name = "cnmips",
69 .description = "Octeon cnMIPS Support",69 .description = "Octeon cnMIPS Support",
70 .dependencies = sparseFeatureSet(&[_]Feature{70 .dependencies = featureSet(&[_]Feature{
71 .mips64r2,71 .mips64r2,
72 }),72 }),
73 };73 };
74 result[@enumToInt(Feature.crc)] = .{74 result[@enumToInt(Feature.crc)] = .{
75 .llvm_name = "crc",75 .llvm_name = "crc",
76 .description = "Mips R6 CRC ASE",76 .description = "Mips R6 CRC ASE",
77 .dependencies = sparseFeatureSet(&[_]Feature{}),77 .dependencies = featureSet(&[_]Feature{}),
78 };78 };
79 result[@enumToInt(Feature.dsp)] = .{79 result[@enumToInt(Feature.dsp)] = .{
80 .llvm_name = "dsp",80 .llvm_name = "dsp",
81 .description = "Mips DSP ASE",81 .description = "Mips DSP ASE",
82 .dependencies = sparseFeatureSet(&[_]Feature{}),82 .dependencies = featureSet(&[_]Feature{}),
83 };83 };
84 result[@enumToInt(Feature.dspr2)] = .{84 result[@enumToInt(Feature.dspr2)] = .{
85 .llvm_name = "dspr2",85 .llvm_name = "dspr2",
86 .description = "Mips DSP-R2 ASE",86 .description = "Mips DSP-R2 ASE",
87 .dependencies = sparseFeatureSet(&[_]Feature{87 .dependencies = featureSet(&[_]Feature{
88 .dsp,88 .dsp,
89 }),89 }),
90 };90 };
91 result[@enumToInt(Feature.dspr3)] = .{91 result[@enumToInt(Feature.dspr3)] = .{
92 .llvm_name = "dspr3",92 .llvm_name = "dspr3",
93 .description = "Mips DSP-R3 ASE",93 .description = "Mips DSP-R3 ASE",
94 .dependencies = sparseFeatureSet(&[_]Feature{94 .dependencies = featureSet(&[_]Feature{
95 .dsp,95 .dsp,
96 .dspr2,96 .dspr2,
97 }),97 }),
...@@ -99,59 +99,59 @@ pub const all_features = blk: {...@@ -99,59 +99,59 @@ pub const all_features = blk: {
99 result[@enumToInt(Feature.eva)] = .{99 result[@enumToInt(Feature.eva)] = .{
100 .llvm_name = "eva",100 .llvm_name = "eva",
101 .description = "Mips EVA ASE",101 .description = "Mips EVA ASE",
102 .dependencies = sparseFeatureSet(&[_]Feature{}),102 .dependencies = featureSet(&[_]Feature{}),
103 };103 };
104 result[@enumToInt(Feature.fp64)] = .{104 result[@enumToInt(Feature.fp64)] = .{
105 .llvm_name = "fp64",105 .llvm_name = "fp64",
106 .description = "Support 64-bit FP registers",106 .description = "Support 64-bit FP registers",
107 .dependencies = sparseFeatureSet(&[_]Feature{}),107 .dependencies = featureSet(&[_]Feature{}),
108 };108 };
109 result[@enumToInt(Feature.fpxx)] = .{109 result[@enumToInt(Feature.fpxx)] = .{
110 .llvm_name = "fpxx",110 .llvm_name = "fpxx",
111 .description = "Support for FPXX",111 .description = "Support for FPXX",
112 .dependencies = sparseFeatureSet(&[_]Feature{}),112 .dependencies = featureSet(&[_]Feature{}),
113 };113 };
114 result[@enumToInt(Feature.ginv)] = .{114 result[@enumToInt(Feature.ginv)] = .{
115 .llvm_name = "ginv",115 .llvm_name = "ginv",
116 .description = "Mips Global Invalidate ASE",116 .description = "Mips Global Invalidate ASE",
117 .dependencies = sparseFeatureSet(&[_]Feature{}),117 .dependencies = featureSet(&[_]Feature{}),
118 };118 };
119 result[@enumToInt(Feature.gp64)] = .{119 result[@enumToInt(Feature.gp64)] = .{
120 .llvm_name = "gp64",120 .llvm_name = "gp64",
121 .description = "General Purpose Registers are 64-bit wide",121 .description = "General Purpose Registers are 64-bit wide",
122 .dependencies = sparseFeatureSet(&[_]Feature{}),122 .dependencies = featureSet(&[_]Feature{}),
123 };123 };
124 result[@enumToInt(Feature.long_calls)] = .{124 result[@enumToInt(Feature.long_calls)] = .{
125 .llvm_name = "long-calls",125 .llvm_name = "long-calls",
126 .description = "Disable use of the jal instruction",126 .description = "Disable use of the jal instruction",
127 .dependencies = sparseFeatureSet(&[_]Feature{}),127 .dependencies = featureSet(&[_]Feature{}),
128 };128 };
129 result[@enumToInt(Feature.micromips)] = .{129 result[@enumToInt(Feature.micromips)] = .{
130 .llvm_name = "micromips",130 .llvm_name = "micromips",
131 .description = "microMips mode",131 .description = "microMips mode",
132 .dependencies = sparseFeatureSet(&[_]Feature{}),132 .dependencies = featureSet(&[_]Feature{}),
133 };133 };
134 result[@enumToInt(Feature.mips1)] = .{134 result[@enumToInt(Feature.mips1)] = .{
135 .llvm_name = "mips1",135 .llvm_name = "mips1",
136 .description = "Mips I ISA Support [highly experimental]",136 .description = "Mips I ISA Support [highly experimental]",
137 .dependencies = sparseFeatureSet(&[_]Feature{}),137 .dependencies = featureSet(&[_]Feature{}),
138 };138 };
139 result[@enumToInt(Feature.mips16)] = .{139 result[@enumToInt(Feature.mips16)] = .{
140 .llvm_name = "mips16",140 .llvm_name = "mips16",
141 .description = "Mips16 mode",141 .description = "Mips16 mode",
142 .dependencies = sparseFeatureSet(&[_]Feature{}),142 .dependencies = featureSet(&[_]Feature{}),
143 };143 };
144 result[@enumToInt(Feature.mips2)] = .{144 result[@enumToInt(Feature.mips2)] = .{
145 .llvm_name = "mips2",145 .llvm_name = "mips2",
146 .description = "Mips II ISA Support [highly experimental]",146 .description = "Mips II ISA Support [highly experimental]",
147 .dependencies = sparseFeatureSet(&[_]Feature{147 .dependencies = featureSet(&[_]Feature{
148 .mips1,148 .mips1,
149 }),149 }),
150 };150 };
151 result[@enumToInt(Feature.mips3)] = .{151 result[@enumToInt(Feature.mips3)] = .{
152 .llvm_name = "mips3",152 .llvm_name = "mips3",
153 .description = "MIPS III ISA Support [highly experimental]",153 .description = "MIPS III ISA Support [highly experimental]",
154 .dependencies = sparseFeatureSet(&[_]Feature{154 .dependencies = featureSet(&[_]Feature{
155 .fp64,155 .fp64,
156 .gp64,156 .gp64,
157 .mips2,157 .mips2,
...@@ -162,7 +162,7 @@ pub const all_features = blk: {...@@ -162,7 +162,7 @@ pub const all_features = blk: {
162 result[@enumToInt(Feature.mips32)] = .{162 result[@enumToInt(Feature.mips32)] = .{
163 .llvm_name = "mips32",163 .llvm_name = "mips32",
164 .description = "Mips32 ISA Support",164 .description = "Mips32 ISA Support",
165 .dependencies = sparseFeatureSet(&[_]Feature{165 .dependencies = featureSet(&[_]Feature{
166 .mips2,166 .mips2,
167 .mips3_32,167 .mips3_32,
168 .mips4_32,168 .mips4_32,
...@@ -171,7 +171,7 @@ pub const all_features = blk: {...@@ -171,7 +171,7 @@ pub const all_features = blk: {
171 result[@enumToInt(Feature.mips32r2)] = .{171 result[@enumToInt(Feature.mips32r2)] = .{
172 .llvm_name = "mips32r2",172 .llvm_name = "mips32r2",
173 .description = "Mips32r2 ISA Support",173 .description = "Mips32r2 ISA Support",
174 .dependencies = sparseFeatureSet(&[_]Feature{174 .dependencies = featureSet(&[_]Feature{
175 .mips32,175 .mips32,
176 .mips3_32r2,176 .mips3_32r2,
177 .mips4_32r2,177 .mips4_32r2,
...@@ -181,21 +181,21 @@ pub const all_features = blk: {...@@ -181,21 +181,21 @@ pub const all_features = blk: {
181 result[@enumToInt(Feature.mips32r3)] = .{181 result[@enumToInt(Feature.mips32r3)] = .{
182 .llvm_name = "mips32r3",182 .llvm_name = "mips32r3",
183 .description = "Mips32r3 ISA Support",183 .description = "Mips32r3 ISA Support",
184 .dependencies = sparseFeatureSet(&[_]Feature{184 .dependencies = featureSet(&[_]Feature{
185 .mips32r2,185 .mips32r2,
186 }),186 }),
187 };187 };
188 result[@enumToInt(Feature.mips32r5)] = .{188 result[@enumToInt(Feature.mips32r5)] = .{
189 .llvm_name = "mips32r5",189 .llvm_name = "mips32r5",
190 .description = "Mips32r5 ISA Support",190 .description = "Mips32r5 ISA Support",
191 .dependencies = sparseFeatureSet(&[_]Feature{191 .dependencies = featureSet(&[_]Feature{
192 .mips32r3,192 .mips32r3,
193 }),193 }),
194 };194 };
195 result[@enumToInt(Feature.mips32r6)] = .{195 result[@enumToInt(Feature.mips32r6)] = .{
196 .llvm_name = "mips32r6",196 .llvm_name = "mips32r6",
197 .description = "Mips32r6 ISA Support [experimental]",197 .description = "Mips32r6 ISA Support [experimental]",
198 .dependencies = sparseFeatureSet(&[_]Feature{198 .dependencies = featureSet(&[_]Feature{
199 .abs2008,199 .abs2008,
200 .fp64,200 .fp64,
201 .mips32r5,201 .mips32r5,
...@@ -205,17 +205,17 @@ pub const all_features = blk: {...@@ -205,17 +205,17 @@ pub const all_features = blk: {
205 result[@enumToInt(Feature.mips3_32)] = .{205 result[@enumToInt(Feature.mips3_32)] = .{
206 .llvm_name = "mips3_32",206 .llvm_name = "mips3_32",
207 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",207 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
208 .dependencies = sparseFeatureSet(&[_]Feature{}),208 .dependencies = featureSet(&[_]Feature{}),
209 };209 };
210 result[@enumToInt(Feature.mips3_32r2)] = .{210 result[@enumToInt(Feature.mips3_32r2)] = .{
211 .llvm_name = "mips3_32r2",211 .llvm_name = "mips3_32r2",
212 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",212 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
213 .dependencies = sparseFeatureSet(&[_]Feature{}),213 .dependencies = featureSet(&[_]Feature{}),
214 };214 };
215 result[@enumToInt(Feature.mips4)] = .{215 result[@enumToInt(Feature.mips4)] = .{
216 .llvm_name = "mips4",216 .llvm_name = "mips4",
217 .description = "MIPS IV ISA Support",217 .description = "MIPS IV ISA Support",
218 .dependencies = sparseFeatureSet(&[_]Feature{218 .dependencies = featureSet(&[_]Feature{
219 .mips3,219 .mips3,
220 .mips4_32,220 .mips4_32,
221 .mips4_32r2,221 .mips4_32r2,
...@@ -224,17 +224,17 @@ pub const all_features = blk: {...@@ -224,17 +224,17 @@ pub const all_features = blk: {
224 result[@enumToInt(Feature.mips4_32)] = .{224 result[@enumToInt(Feature.mips4_32)] = .{
225 .llvm_name = "mips4_32",225 .llvm_name = "mips4_32",
226 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",226 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
227 .dependencies = sparseFeatureSet(&[_]Feature{}),227 .dependencies = featureSet(&[_]Feature{}),
228 };228 };
229 result[@enumToInt(Feature.mips4_32r2)] = .{229 result[@enumToInt(Feature.mips4_32r2)] = .{
230 .llvm_name = "mips4_32r2",230 .llvm_name = "mips4_32r2",
231 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",231 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
232 .dependencies = sparseFeatureSet(&[_]Feature{}),232 .dependencies = featureSet(&[_]Feature{}),
233 };233 };
234 result[@enumToInt(Feature.mips5)] = .{234 result[@enumToInt(Feature.mips5)] = .{
235 .llvm_name = "mips5",235 .llvm_name = "mips5",
236 .description = "MIPS V ISA Support [highly experimental]",236 .description = "MIPS V ISA Support [highly experimental]",
237 .dependencies = sparseFeatureSet(&[_]Feature{237 .dependencies = featureSet(&[_]Feature{
238 .mips4,238 .mips4,
239 .mips5_32r2,239 .mips5_32r2,
240 }),240 }),
...@@ -242,12 +242,12 @@ pub const all_features = blk: {...@@ -242,12 +242,12 @@ pub const all_features = blk: {
242 result[@enumToInt(Feature.mips5_32r2)] = .{242 result[@enumToInt(Feature.mips5_32r2)] = .{
243 .llvm_name = "mips5_32r2",243 .llvm_name = "mips5_32r2",
244 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",244 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
245 .dependencies = sparseFeatureSet(&[_]Feature{}),245 .dependencies = featureSet(&[_]Feature{}),
246 };246 };
247 result[@enumToInt(Feature.mips64)] = .{247 result[@enumToInt(Feature.mips64)] = .{
248 .llvm_name = "mips64",248 .llvm_name = "mips64",
249 .description = "Mips64 ISA Support",249 .description = "Mips64 ISA Support",
250 .dependencies = sparseFeatureSet(&[_]Feature{250 .dependencies = featureSet(&[_]Feature{
251 .mips32,251 .mips32,
252 .mips5,252 .mips5,
253 }),253 }),
...@@ -255,7 +255,7 @@ pub const all_features = blk: {...@@ -255,7 +255,7 @@ pub const all_features = blk: {
255 result[@enumToInt(Feature.mips64r2)] = .{255 result[@enumToInt(Feature.mips64r2)] = .{
256 .llvm_name = "mips64r2",256 .llvm_name = "mips64r2",
257 .description = "Mips64r2 ISA Support",257 .description = "Mips64r2 ISA Support",
258 .dependencies = sparseFeatureSet(&[_]Feature{258 .dependencies = featureSet(&[_]Feature{
259 .mips32r2,259 .mips32r2,
260 .mips64,260 .mips64,
261 }),261 }),
...@@ -263,7 +263,7 @@ pub const all_features = blk: {...@@ -263,7 +263,7 @@ pub const all_features = blk: {
263 result[@enumToInt(Feature.mips64r3)] = .{263 result[@enumToInt(Feature.mips64r3)] = .{
264 .llvm_name = "mips64r3",264 .llvm_name = "mips64r3",
265 .description = "Mips64r3 ISA Support",265 .description = "Mips64r3 ISA Support",
266 .dependencies = sparseFeatureSet(&[_]Feature{266 .dependencies = featureSet(&[_]Feature{
267 .mips32r3,267 .mips32r3,
268 .mips64r2,268 .mips64r2,
269 }),269 }),
...@@ -271,7 +271,7 @@ pub const all_features = blk: {...@@ -271,7 +271,7 @@ pub const all_features = blk: {
271 result[@enumToInt(Feature.mips64r5)] = .{271 result[@enumToInt(Feature.mips64r5)] = .{
272 .llvm_name = "mips64r5",272 .llvm_name = "mips64r5",
273 .description = "Mips64r5 ISA Support",273 .description = "Mips64r5 ISA Support",
274 .dependencies = sparseFeatureSet(&[_]Feature{274 .dependencies = featureSet(&[_]Feature{
275 .mips32r5,275 .mips32r5,
276 .mips64r3,276 .mips64r3,
277 }),277 }),
...@@ -279,7 +279,7 @@ pub const all_features = blk: {...@@ -279,7 +279,7 @@ pub const all_features = blk: {
279 result[@enumToInt(Feature.mips64r6)] = .{279 result[@enumToInt(Feature.mips64r6)] = .{
280 .llvm_name = "mips64r6",280 .llvm_name = "mips64r6",
281 .description = "Mips64r6 ISA Support [experimental]",281 .description = "Mips64r6 ISA Support [experimental]",
282 .dependencies = sparseFeatureSet(&[_]Feature{282 .dependencies = featureSet(&[_]Feature{
283 .abs2008,283 .abs2008,
284 .mips32r6,284 .mips32r6,
285 .mips64r5,285 .mips64r5,
...@@ -289,85 +289,84 @@ pub const all_features = blk: {...@@ -289,85 +289,84 @@ pub const all_features = blk: {
289 result[@enumToInt(Feature.msa)] = .{289 result[@enumToInt(Feature.msa)] = .{
290 .llvm_name = "msa",290 .llvm_name = "msa",
291 .description = "Mips MSA ASE",291 .description = "Mips MSA ASE",
292 .dependencies = sparseFeatureSet(&[_]Feature{}),292 .dependencies = featureSet(&[_]Feature{}),
293 };293 };
294 result[@enumToInt(Feature.mt)] = .{294 result[@enumToInt(Feature.mt)] = .{
295 .llvm_name = "mt",295 .llvm_name = "mt",
296 .description = "Mips MT ASE",296 .description = "Mips MT ASE",
297 .dependencies = sparseFeatureSet(&[_]Feature{}),297 .dependencies = featureSet(&[_]Feature{}),
298 };298 };
299 result[@enumToInt(Feature.nan2008)] = .{299 result[@enumToInt(Feature.nan2008)] = .{
300 .llvm_name = "nan2008",300 .llvm_name = "nan2008",
301 .description = "IEEE 754-2008 NaN encoding",301 .description = "IEEE 754-2008 NaN encoding",
302 .dependencies = sparseFeatureSet(&[_]Feature{}),302 .dependencies = featureSet(&[_]Feature{}),
303 };303 };
304 result[@enumToInt(Feature.noabicalls)] = .{304 result[@enumToInt(Feature.noabicalls)] = .{
305 .llvm_name = "noabicalls",305 .llvm_name = "noabicalls",
306 .description = "Disable SVR4-style position-independent code",306 .description = "Disable SVR4-style position-independent code",
307 .dependencies = sparseFeatureSet(&[_]Feature{}),307 .dependencies = featureSet(&[_]Feature{}),
308 };308 };
309 result[@enumToInt(Feature.nomadd4)] = .{309 result[@enumToInt(Feature.nomadd4)] = .{
310 .llvm_name = "nomadd4",310 .llvm_name = "nomadd4",
311 .description = "Disable 4-operand madd.fmt and related instructions",311 .description = "Disable 4-operand madd.fmt and related instructions",
312 .dependencies = sparseFeatureSet(&[_]Feature{}),312 .dependencies = featureSet(&[_]Feature{}),
313 };313 };
314 result[@enumToInt(Feature.nooddspreg)] = .{314 result[@enumToInt(Feature.nooddspreg)] = .{
315 .llvm_name = "nooddspreg",315 .llvm_name = "nooddspreg",
316 .description = "Disable odd numbered single-precision registers",316 .description = "Disable odd numbered single-precision registers",
317 .dependencies = sparseFeatureSet(&[_]Feature{}),317 .dependencies = featureSet(&[_]Feature{}),
318 };318 };
319 result[@enumToInt(Feature.p5600)] = .{319 result[@enumToInt(Feature.p5600)] = .{
320 .llvm_name = "p5600",320 .llvm_name = "p5600",
321 .description = "The P5600 Processor",321 .description = "The P5600 Processor",
322 .dependencies = sparseFeatureSet(&[_]Feature{322 .dependencies = featureSet(&[_]Feature{
323 .mips32r5,323 .mips32r5,
324 }),324 }),
325 };325 };
326 result[@enumToInt(Feature.ptr64)] = .{326 result[@enumToInt(Feature.ptr64)] = .{
327 .llvm_name = "ptr64",327 .llvm_name = "ptr64",
328 .description = "Pointers are 64-bit wide",328 .description = "Pointers are 64-bit wide",
329 .dependencies = sparseFeatureSet(&[_]Feature{}),329 .dependencies = featureSet(&[_]Feature{}),
330 };330 };
331 result[@enumToInt(Feature.single_float)] = .{331 result[@enumToInt(Feature.single_float)] = .{
332 .llvm_name = "single-float",332 .llvm_name = "single-float",
333 .description = "Only supports single precision float",333 .description = "Only supports single precision float",
334 .dependencies = sparseFeatureSet(&[_]Feature{}),334 .dependencies = featureSet(&[_]Feature{}),
335 };335 };
336 result[@enumToInt(Feature.soft_float)] = .{336 result[@enumToInt(Feature.soft_float)] = .{
337 .llvm_name = "soft-float",337 .llvm_name = "soft-float",
338 .description = "Does not support floating point instructions",338 .description = "Does not support floating point instructions",
339 .dependencies = sparseFeatureSet(&[_]Feature{}),339 .dependencies = featureSet(&[_]Feature{}),
340 };340 };
341 result[@enumToInt(Feature.sym32)] = .{341 result[@enumToInt(Feature.sym32)] = .{
342 .llvm_name = "sym32",342 .llvm_name = "sym32",
343 .description = "Symbols are 32 bit on Mips64",343 .description = "Symbols are 32 bit on Mips64",
344 .dependencies = sparseFeatureSet(&[_]Feature{}),344 .dependencies = featureSet(&[_]Feature{}),
345 };345 };
346 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{346 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{
347 .llvm_name = "use-indirect-jump-hazard",347 .llvm_name = "use-indirect-jump-hazard",
348 .description = "Use indirect jump guards to prevent certain speculation based attacks",348 .description = "Use indirect jump guards to prevent certain speculation based attacks",
349 .dependencies = sparseFeatureSet(&[_]Feature{}),349 .dependencies = featureSet(&[_]Feature{}),
350 };350 };
351 result[@enumToInt(Feature.use_tcc_in_div)] = .{351 result[@enumToInt(Feature.use_tcc_in_div)] = .{
352 .llvm_name = "use-tcc-in-div",352 .llvm_name = "use-tcc-in-div",
353 .description = "Force the assembler to use trapping",353 .description = "Force the assembler to use trapping",
354 .dependencies = sparseFeatureSet(&[_]Feature{}),354 .dependencies = featureSet(&[_]Feature{}),
355 };355 };
356 result[@enumToInt(Feature.vfpu)] = .{356 result[@enumToInt(Feature.vfpu)] = .{
357 .llvm_name = "vfpu",357 .llvm_name = "vfpu",
358 .description = "Enable vector FPU instructions",358 .description = "Enable vector FPU instructions",
359 .dependencies = sparseFeatureSet(&[_]Feature{}),359 .dependencies = featureSet(&[_]Feature{}),
360 };360 };
361 result[@enumToInt(Feature.virt)] = .{361 result[@enumToInt(Feature.virt)] = .{
362 .llvm_name = "virt",362 .llvm_name = "virt",
363 .description = "Mips Virtualization ASE",363 .description = "Mips Virtualization ASE",
364 .dependencies = sparseFeatureSet(&[_]Feature{}),364 .dependencies = featureSet(&[_]Feature{}),
365 };365 };
366 const ti = @typeInfo(Feature);366 const ti = @typeInfo(Feature);
367 for (result) |*elem, i| {367 for (result) |*elem, i| {
368 elem.index = i;368 elem.index = i;
369 elem.name = ti.Enum.fields[i].name;369 elem.name = ti.Enum.fields[i].name;
370 elem.dependencies.initAsDependencies(i, &result);
371 }370 }
372 break :blk result;371 break :blk result;
373};372};
...@@ -376,112 +375,112 @@ pub const cpu = struct {...@@ -376,112 +375,112 @@ pub const cpu = struct {
376 pub const mips1 = Cpu{375 pub const mips1 = Cpu{
377 .name = "mips1",376 .name = "mips1",
378 .llvm_name = "mips1",377 .llvm_name = "mips1",
379 .features = featureSet(&all_features, &[_]Feature{378 .features = featureSet(&[_]Feature{
380 .mips1,379 .mips1,
381 }),380 }),
382 };381 };
383 pub const mips2 = Cpu{382 pub const mips2 = Cpu{
384 .name = "mips2",383 .name = "mips2",
385 .llvm_name = "mips2",384 .llvm_name = "mips2",
386 .features = featureSet(&all_features, &[_]Feature{385 .features = featureSet(&[_]Feature{
387 .mips2,386 .mips2,
388 }),387 }),
389 };388 };
390 pub const mips3 = Cpu{389 pub const mips3 = Cpu{
391 .name = "mips3",390 .name = "mips3",
392 .llvm_name = "mips3",391 .llvm_name = "mips3",
393 .features = featureSet(&all_features, &[_]Feature{392 .features = featureSet(&[_]Feature{
394 .mips3,393 .mips3,
395 }),394 }),
396 };395 };
397 pub const mips32 = Cpu{396 pub const mips32 = Cpu{
398 .name = "mips32",397 .name = "mips32",
399 .llvm_name = "mips32",398 .llvm_name = "mips32",
400 .features = featureSet(&all_features, &[_]Feature{399 .features = featureSet(&[_]Feature{
401 .mips32,400 .mips32,
402 }),401 }),
403 };402 };
404 pub const mips32r2 = Cpu{403 pub const mips32r2 = Cpu{
405 .name = "mips32r2",404 .name = "mips32r2",
406 .llvm_name = "mips32r2",405 .llvm_name = "mips32r2",
407 .features = featureSet(&all_features, &[_]Feature{406 .features = featureSet(&[_]Feature{
408 .mips32r2,407 .mips32r2,
409 }),408 }),
410 };409 };
411 pub const mips32r3 = Cpu{410 pub const mips32r3 = Cpu{
412 .name = "mips32r3",411 .name = "mips32r3",
413 .llvm_name = "mips32r3",412 .llvm_name = "mips32r3",
414 .features = featureSet(&all_features, &[_]Feature{413 .features = featureSet(&[_]Feature{
415 .mips32r3,414 .mips32r3,
416 }),415 }),
417 };416 };
418 pub const mips32r5 = Cpu{417 pub const mips32r5 = Cpu{
419 .name = "mips32r5",418 .name = "mips32r5",
420 .llvm_name = "mips32r5",419 .llvm_name = "mips32r5",
421 .features = featureSet(&all_features, &[_]Feature{420 .features = featureSet(&[_]Feature{
422 .mips32r5,421 .mips32r5,
423 }),422 }),
424 };423 };
425 pub const mips32r6 = Cpu{424 pub const mips32r6 = Cpu{
426 .name = "mips32r6",425 .name = "mips32r6",
427 .llvm_name = "mips32r6",426 .llvm_name = "mips32r6",
428 .features = featureSet(&all_features, &[_]Feature{427 .features = featureSet(&[_]Feature{
429 .mips32r6,428 .mips32r6,
430 }),429 }),
431 };430 };
432 pub const mips4 = Cpu{431 pub const mips4 = Cpu{
433 .name = "mips4",432 .name = "mips4",
434 .llvm_name = "mips4",433 .llvm_name = "mips4",
435 .features = featureSet(&all_features, &[_]Feature{434 .features = featureSet(&[_]Feature{
436 .mips4,435 .mips4,
437 }),436 }),
438 };437 };
439 pub const mips5 = Cpu{438 pub const mips5 = Cpu{
440 .name = "mips5",439 .name = "mips5",
441 .llvm_name = "mips5",440 .llvm_name = "mips5",
442 .features = featureSet(&all_features, &[_]Feature{441 .features = featureSet(&[_]Feature{
443 .mips5,442 .mips5,
444 }),443 }),
445 };444 };
446 pub const mips64 = Cpu{445 pub const mips64 = Cpu{
447 .name = "mips64",446 .name = "mips64",
448 .llvm_name = "mips64",447 .llvm_name = "mips64",
449 .features = featureSet(&all_features, &[_]Feature{448 .features = featureSet(&[_]Feature{
450 .mips64,449 .mips64,
451 }),450 }),
452 };451 };
453 pub const mips64r2 = Cpu{452 pub const mips64r2 = Cpu{
454 .name = "mips64r2",453 .name = "mips64r2",
455 .llvm_name = "mips64r2",454 .llvm_name = "mips64r2",
456 .features = featureSet(&all_features, &[_]Feature{455 .features = featureSet(&[_]Feature{
457 .mips64r2,456 .mips64r2,
458 }),457 }),
459 };458 };
460 pub const mips64r3 = Cpu{459 pub const mips64r3 = Cpu{
461 .name = "mips64r3",460 .name = "mips64r3",
462 .llvm_name = "mips64r3",461 .llvm_name = "mips64r3",
463 .features = featureSet(&all_features, &[_]Feature{462 .features = featureSet(&[_]Feature{
464 .mips64r3,463 .mips64r3,
465 }),464 }),
466 };465 };
467 pub const mips64r5 = Cpu{466 pub const mips64r5 = Cpu{
468 .name = "mips64r5",467 .name = "mips64r5",
469 .llvm_name = "mips64r5",468 .llvm_name = "mips64r5",
470 .features = featureSet(&all_features, &[_]Feature{469 .features = featureSet(&[_]Feature{
471 .mips64r5,470 .mips64r5,
472 }),471 }),
473 };472 };
474 pub const mips64r6 = Cpu{473 pub const mips64r6 = Cpu{
475 .name = "mips64r6",474 .name = "mips64r6",
476 .llvm_name = "mips64r6",475 .llvm_name = "mips64r6",
477 .features = featureSet(&all_features, &[_]Feature{476 .features = featureSet(&[_]Feature{
478 .mips64r6,477 .mips64r6,
479 }),478 }),
480 };479 };
481 pub const octeon = Cpu{480 pub const octeon = Cpu{
482 .name = "octeon",481 .name = "octeon",
483 .llvm_name = "octeon",482 .llvm_name = "octeon",
484 .features = featureSet(&all_features, &[_]Feature{483 .features = featureSet(&[_]Feature{
485 .cnmips,484 .cnmips,
486 .mips64r2,485 .mips64r2,
487 }),486 }),
...@@ -489,7 +488,7 @@ pub const cpu = struct {...@@ -489,7 +488,7 @@ pub const cpu = struct {
489 pub const p5600 = Cpu{488 pub const p5600 = Cpu{
490 .name = "p5600",489 .name = "p5600",
491 .llvm_name = "p5600",490 .llvm_name = "p5600",
492 .features = featureSet(&all_features, &[_]Feature{491 .features = featureSet(&[_]Feature{
493 .p5600,492 .p5600,
494 }),493 }),
495 };494 };
lib/std/target/msp430.zig+7-8
...@@ -17,28 +17,27 @@ pub const all_features = blk: {...@@ -17,28 +17,27 @@ pub const all_features = blk: {
17 result[@enumToInt(Feature.ext)] = .{17 result[@enumToInt(Feature.ext)] = .{
18 .llvm_name = "ext",18 .llvm_name = "ext",
19 .description = "Enable MSP430-X extensions",19 .description = "Enable MSP430-X extensions",
20 .dependencies = sparseFeatureSet(&[_]Feature{}),20 .dependencies = featureSet(&[_]Feature{}),
21 };21 };
22 result[@enumToInt(Feature.hwmult16)] = .{22 result[@enumToInt(Feature.hwmult16)] = .{
23 .llvm_name = "hwmult16",23 .llvm_name = "hwmult16",
24 .description = "Enable 16-bit hardware multiplier",24 .description = "Enable 16-bit hardware multiplier",
25 .dependencies = sparseFeatureSet(&[_]Feature{}),25 .dependencies = featureSet(&[_]Feature{}),
26 };26 };
27 result[@enumToInt(Feature.hwmult32)] = .{27 result[@enumToInt(Feature.hwmult32)] = .{
28 .llvm_name = "hwmult32",28 .llvm_name = "hwmult32",
29 .description = "Enable 32-bit hardware multiplier",29 .description = "Enable 32-bit hardware multiplier",
30 .dependencies = sparseFeatureSet(&[_]Feature{}),30 .dependencies = featureSet(&[_]Feature{}),
31 };31 };
32 result[@enumToInt(Feature.hwmultf5)] = .{32 result[@enumToInt(Feature.hwmultf5)] = .{
33 .llvm_name = "hwmultf5",33 .llvm_name = "hwmultf5",
34 .description = "Enable F5 series hardware multiplier",34 .description = "Enable F5 series hardware multiplier",
35 .dependencies = sparseFeatureSet(&[_]Feature{}),35 .dependencies = featureSet(&[_]Feature{}),
36 };36 };
37 const ti = @typeInfo(Feature);37 const ti = @typeInfo(Feature);
38 for (result) |*elem, i| {38 for (result) |*elem, i| {
39 elem.index = i;39 elem.index = i;
40 elem.name = ti.Enum.fields[i].name;40 elem.name = ti.Enum.fields[i].name;
41 elem.dependencies.initAsDependencies(i, &result);
42 }41 }
43 break :blk result;42 break :blk result;
44};43};
...@@ -47,17 +46,17 @@ pub const cpu = struct {...@@ -47,17 +46,17 @@ pub const cpu = struct {
47 pub const generic = Cpu{46 pub const generic = Cpu{
48 .name = "generic",47 .name = "generic",
49 .llvm_name = "generic",48 .llvm_name = "generic",
50 .features = featureSet(&all_features, &[_]Feature{}),49 .features = featureSet(&[_]Feature{}),
51 };50 };
52 pub const msp430 = Cpu{51 pub const msp430 = Cpu{
53 .name = "msp430",52 .name = "msp430",
54 .llvm_name = "msp430",53 .llvm_name = "msp430",
55 .features = featureSet(&all_features, &[_]Feature{}),54 .features = featureSet(&[_]Feature{}),
56 };55 };
57 pub const msp430x = Cpu{56 pub const msp430x = Cpu{
58 .name = "msp430x",57 .name = "msp430x",
59 .llvm_name = "msp430x",58 .llvm_name = "msp430x",
60 .features = featureSet(&all_features, &[_]Feature{59 .features = featureSet(&[_]Feature{
61 .ext,60 .ext,
62 }),61 }),
63 };62 };
lib/std/target/nvptx.zig+40-41
...@@ -38,133 +38,132 @@ pub const all_features = blk: {...@@ -38,133 +38,132 @@ pub const all_features = blk: {
38 result[@enumToInt(Feature.ptx32)] = .{38 result[@enumToInt(Feature.ptx32)] = .{
39 .llvm_name = "ptx32",39 .llvm_name = "ptx32",
40 .description = "Use PTX version 3.2",40 .description = "Use PTX version 3.2",
41 .dependencies = sparseFeatureSet(&[_]Feature{}),41 .dependencies = featureSet(&[_]Feature{}),
42 };42 };
43 result[@enumToInt(Feature.ptx40)] = .{43 result[@enumToInt(Feature.ptx40)] = .{
44 .llvm_name = "ptx40",44 .llvm_name = "ptx40",
45 .description = "Use PTX version 4.0",45 .description = "Use PTX version 4.0",
46 .dependencies = sparseFeatureSet(&[_]Feature{}),46 .dependencies = featureSet(&[_]Feature{}),
47 };47 };
48 result[@enumToInt(Feature.ptx41)] = .{48 result[@enumToInt(Feature.ptx41)] = .{
49 .llvm_name = "ptx41",49 .llvm_name = "ptx41",
50 .description = "Use PTX version 4.1",50 .description = "Use PTX version 4.1",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),51 .dependencies = featureSet(&[_]Feature{}),
52 };52 };
53 result[@enumToInt(Feature.ptx42)] = .{53 result[@enumToInt(Feature.ptx42)] = .{
54 .llvm_name = "ptx42",54 .llvm_name = "ptx42",
55 .description = "Use PTX version 4.2",55 .description = "Use PTX version 4.2",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),56 .dependencies = featureSet(&[_]Feature{}),
57 };57 };
58 result[@enumToInt(Feature.ptx43)] = .{58 result[@enumToInt(Feature.ptx43)] = .{
59 .llvm_name = "ptx43",59 .llvm_name = "ptx43",
60 .description = "Use PTX version 4.3",60 .description = "Use PTX version 4.3",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),61 .dependencies = featureSet(&[_]Feature{}),
62 };62 };
63 result[@enumToInt(Feature.ptx50)] = .{63 result[@enumToInt(Feature.ptx50)] = .{
64 .llvm_name = "ptx50",64 .llvm_name = "ptx50",
65 .description = "Use PTX version 5.0",65 .description = "Use PTX version 5.0",
66 .dependencies = sparseFeatureSet(&[_]Feature{}),66 .dependencies = featureSet(&[_]Feature{}),
67 };67 };
68 result[@enumToInt(Feature.ptx60)] = .{68 result[@enumToInt(Feature.ptx60)] = .{
69 .llvm_name = "ptx60",69 .llvm_name = "ptx60",
70 .description = "Use PTX version 6.0",70 .description = "Use PTX version 6.0",
71 .dependencies = sparseFeatureSet(&[_]Feature{}),71 .dependencies = featureSet(&[_]Feature{}),
72 };72 };
73 result[@enumToInt(Feature.ptx61)] = .{73 result[@enumToInt(Feature.ptx61)] = .{
74 .llvm_name = "ptx61",74 .llvm_name = "ptx61",
75 .description = "Use PTX version 6.1",75 .description = "Use PTX version 6.1",
76 .dependencies = sparseFeatureSet(&[_]Feature{}),76 .dependencies = featureSet(&[_]Feature{}),
77 };77 };
78 result[@enumToInt(Feature.ptx63)] = .{78 result[@enumToInt(Feature.ptx63)] = .{
79 .llvm_name = "ptx63",79 .llvm_name = "ptx63",
80 .description = "Use PTX version 6.3",80 .description = "Use PTX version 6.3",
81 .dependencies = sparseFeatureSet(&[_]Feature{}),81 .dependencies = featureSet(&[_]Feature{}),
82 };82 };
83 result[@enumToInt(Feature.ptx64)] = .{83 result[@enumToInt(Feature.ptx64)] = .{
84 .llvm_name = "ptx64",84 .llvm_name = "ptx64",
85 .description = "Use PTX version 6.4",85 .description = "Use PTX version 6.4",
86 .dependencies = sparseFeatureSet(&[_]Feature{}),86 .dependencies = featureSet(&[_]Feature{}),
87 };87 };
88 result[@enumToInt(Feature.sm_20)] = .{88 result[@enumToInt(Feature.sm_20)] = .{
89 .llvm_name = "sm_20",89 .llvm_name = "sm_20",
90 .description = "Target SM 2.0",90 .description = "Target SM 2.0",
91 .dependencies = sparseFeatureSet(&[_]Feature{}),91 .dependencies = featureSet(&[_]Feature{}),
92 };92 };
93 result[@enumToInt(Feature.sm_21)] = .{93 result[@enumToInt(Feature.sm_21)] = .{
94 .llvm_name = "sm_21",94 .llvm_name = "sm_21",
95 .description = "Target SM 2.1",95 .description = "Target SM 2.1",
96 .dependencies = sparseFeatureSet(&[_]Feature{}),96 .dependencies = featureSet(&[_]Feature{}),
97 };97 };
98 result[@enumToInt(Feature.sm_30)] = .{98 result[@enumToInt(Feature.sm_30)] = .{
99 .llvm_name = "sm_30",99 .llvm_name = "sm_30",
100 .description = "Target SM 3.0",100 .description = "Target SM 3.0",
101 .dependencies = sparseFeatureSet(&[_]Feature{}),101 .dependencies = featureSet(&[_]Feature{}),
102 };102 };
103 result[@enumToInt(Feature.sm_32)] = .{103 result[@enumToInt(Feature.sm_32)] = .{
104 .llvm_name = "sm_32",104 .llvm_name = "sm_32",
105 .description = "Target SM 3.2",105 .description = "Target SM 3.2",
106 .dependencies = sparseFeatureSet(&[_]Feature{}),106 .dependencies = featureSet(&[_]Feature{}),
107 };107 };
108 result[@enumToInt(Feature.sm_35)] = .{108 result[@enumToInt(Feature.sm_35)] = .{
109 .llvm_name = "sm_35",109 .llvm_name = "sm_35",
110 .description = "Target SM 3.5",110 .description = "Target SM 3.5",
111 .dependencies = sparseFeatureSet(&[_]Feature{}),111 .dependencies = featureSet(&[_]Feature{}),
112 };112 };
113 result[@enumToInt(Feature.sm_37)] = .{113 result[@enumToInt(Feature.sm_37)] = .{
114 .llvm_name = "sm_37",114 .llvm_name = "sm_37",
115 .description = "Target SM 3.7",115 .description = "Target SM 3.7",
116 .dependencies = sparseFeatureSet(&[_]Feature{}),116 .dependencies = featureSet(&[_]Feature{}),
117 };117 };
118 result[@enumToInt(Feature.sm_50)] = .{118 result[@enumToInt(Feature.sm_50)] = .{
119 .llvm_name = "sm_50",119 .llvm_name = "sm_50",
120 .description = "Target SM 5.0",120 .description = "Target SM 5.0",
121 .dependencies = sparseFeatureSet(&[_]Feature{}),121 .dependencies = featureSet(&[_]Feature{}),
122 };122 };
123 result[@enumToInt(Feature.sm_52)] = .{123 result[@enumToInt(Feature.sm_52)] = .{
124 .llvm_name = "sm_52",124 .llvm_name = "sm_52",
125 .description = "Target SM 5.2",125 .description = "Target SM 5.2",
126 .dependencies = sparseFeatureSet(&[_]Feature{}),126 .dependencies = featureSet(&[_]Feature{}),
127 };127 };
128 result[@enumToInt(Feature.sm_53)] = .{128 result[@enumToInt(Feature.sm_53)] = .{
129 .llvm_name = "sm_53",129 .llvm_name = "sm_53",
130 .description = "Target SM 5.3",130 .description = "Target SM 5.3",
131 .dependencies = sparseFeatureSet(&[_]Feature{}),131 .dependencies = featureSet(&[_]Feature{}),
132 };132 };
133 result[@enumToInt(Feature.sm_60)] = .{133 result[@enumToInt(Feature.sm_60)] = .{
134 .llvm_name = "sm_60",134 .llvm_name = "sm_60",
135 .description = "Target SM 6.0",135 .description = "Target SM 6.0",
136 .dependencies = sparseFeatureSet(&[_]Feature{}),136 .dependencies = featureSet(&[_]Feature{}),
137 };137 };
138 result[@enumToInt(Feature.sm_61)] = .{138 result[@enumToInt(Feature.sm_61)] = .{
139 .llvm_name = "sm_61",139 .llvm_name = "sm_61",
140 .description = "Target SM 6.1",140 .description = "Target SM 6.1",
141 .dependencies = sparseFeatureSet(&[_]Feature{}),141 .dependencies = featureSet(&[_]Feature{}),
142 };142 };
143 result[@enumToInt(Feature.sm_62)] = .{143 result[@enumToInt(Feature.sm_62)] = .{
144 .llvm_name = "sm_62",144 .llvm_name = "sm_62",
145 .description = "Target SM 6.2",145 .description = "Target SM 6.2",
146 .dependencies = sparseFeatureSet(&[_]Feature{}),146 .dependencies = featureSet(&[_]Feature{}),
147 };147 };
148 result[@enumToInt(Feature.sm_70)] = .{148 result[@enumToInt(Feature.sm_70)] = .{
149 .llvm_name = "sm_70",149 .llvm_name = "sm_70",
150 .description = "Target SM 7.0",150 .description = "Target SM 7.0",
151 .dependencies = sparseFeatureSet(&[_]Feature{}),151 .dependencies = featureSet(&[_]Feature{}),
152 };152 };
153 result[@enumToInt(Feature.sm_72)] = .{153 result[@enumToInt(Feature.sm_72)] = .{
154 .llvm_name = "sm_72",154 .llvm_name = "sm_72",
155 .description = "Target SM 7.2",155 .description = "Target SM 7.2",
156 .dependencies = sparseFeatureSet(&[_]Feature{}),156 .dependencies = featureSet(&[_]Feature{}),
157 };157 };
158 result[@enumToInt(Feature.sm_75)] = .{158 result[@enumToInt(Feature.sm_75)] = .{
159 .llvm_name = "sm_75",159 .llvm_name = "sm_75",
160 .description = "Target SM 7.5",160 .description = "Target SM 7.5",
161 .dependencies = sparseFeatureSet(&[_]Feature{}),161 .dependencies = featureSet(&[_]Feature{}),
162 };162 };
163 const ti = @typeInfo(Feature);163 const ti = @typeInfo(Feature);
164 for (result) |*elem, i| {164 for (result) |*elem, i| {
165 elem.index = i;165 elem.index = i;
166 elem.name = ti.Enum.fields[i].name;166 elem.name = ti.Enum.fields[i].name;
167 elem.dependencies.initAsDependencies(i, &result);
168 }167 }
169 break :blk result;168 break :blk result;
170};169};
...@@ -173,28 +172,28 @@ pub const cpu = struct {...@@ -173,28 +172,28 @@ pub const cpu = struct {
173 pub const sm_20 = Cpu{172 pub const sm_20 = Cpu{
174 .name = "sm_20",173 .name = "sm_20",
175 .llvm_name = "sm_20",174 .llvm_name = "sm_20",
176 .features = featureSet(&all_features, &[_]Feature{175 .features = featureSet(&[_]Feature{
177 .sm_20,176 .sm_20,
178 }),177 }),
179 };178 };
180 pub const sm_21 = Cpu{179 pub const sm_21 = Cpu{
181 .name = "sm_21",180 .name = "sm_21",
182 .llvm_name = "sm_21",181 .llvm_name = "sm_21",
183 .features = featureSet(&all_features, &[_]Feature{182 .features = featureSet(&[_]Feature{
184 .sm_21,183 .sm_21,
185 }),184 }),
186 };185 };
187 pub const sm_30 = Cpu{186 pub const sm_30 = Cpu{
188 .name = "sm_30",187 .name = "sm_30",
189 .llvm_name = "sm_30",188 .llvm_name = "sm_30",
190 .features = featureSet(&all_features, &[_]Feature{189 .features = featureSet(&[_]Feature{
191 .sm_30,190 .sm_30,
192 }),191 }),
193 };192 };
194 pub const sm_32 = Cpu{193 pub const sm_32 = Cpu{
195 .name = "sm_32",194 .name = "sm_32",
196 .llvm_name = "sm_32",195 .llvm_name = "sm_32",
197 .features = featureSet(&all_features, &[_]Feature{196 .features = featureSet(&[_]Feature{
198 .ptx40,197 .ptx40,
199 .sm_32,198 .sm_32,
200 }),199 }),
...@@ -202,14 +201,14 @@ pub const cpu = struct {...@@ -202,14 +201,14 @@ pub const cpu = struct {
202 pub const sm_35 = Cpu{201 pub const sm_35 = Cpu{
203 .name = "sm_35",202 .name = "sm_35",
204 .llvm_name = "sm_35",203 .llvm_name = "sm_35",
205 .features = featureSet(&all_features, &[_]Feature{204 .features = featureSet(&[_]Feature{
206 .sm_35,205 .sm_35,
207 }),206 }),
208 };207 };
209 pub const sm_37 = Cpu{208 pub const sm_37 = Cpu{
210 .name = "sm_37",209 .name = "sm_37",
211 .llvm_name = "sm_37",210 .llvm_name = "sm_37",
212 .features = featureSet(&all_features, &[_]Feature{211 .features = featureSet(&[_]Feature{
213 .ptx41,212 .ptx41,
214 .sm_37,213 .sm_37,
215 }),214 }),
...@@ -217,7 +216,7 @@ pub const cpu = struct {...@@ -217,7 +216,7 @@ pub const cpu = struct {
217 pub const sm_50 = Cpu{216 pub const sm_50 = Cpu{
218 .name = "sm_50",217 .name = "sm_50",
219 .llvm_name = "sm_50",218 .llvm_name = "sm_50",
220 .features = featureSet(&all_features, &[_]Feature{219 .features = featureSet(&[_]Feature{
221 .ptx40,220 .ptx40,
222 .sm_50,221 .sm_50,
223 }),222 }),
...@@ -225,7 +224,7 @@ pub const cpu = struct {...@@ -225,7 +224,7 @@ pub const cpu = struct {
225 pub const sm_52 = Cpu{224 pub const sm_52 = Cpu{
226 .name = "sm_52",225 .name = "sm_52",
227 .llvm_name = "sm_52",226 .llvm_name = "sm_52",
228 .features = featureSet(&all_features, &[_]Feature{227 .features = featureSet(&[_]Feature{
229 .ptx41,228 .ptx41,
230 .sm_52,229 .sm_52,
231 }),230 }),
...@@ -233,7 +232,7 @@ pub const cpu = struct {...@@ -233,7 +232,7 @@ pub const cpu = struct {
233 pub const sm_53 = Cpu{232 pub const sm_53 = Cpu{
234 .name = "sm_53",233 .name = "sm_53",
235 .llvm_name = "sm_53",234 .llvm_name = "sm_53",
236 .features = featureSet(&all_features, &[_]Feature{235 .features = featureSet(&[_]Feature{
237 .ptx42,236 .ptx42,
238 .sm_53,237 .sm_53,
239 }),238 }),
...@@ -241,7 +240,7 @@ pub const cpu = struct {...@@ -241,7 +240,7 @@ pub const cpu = struct {
241 pub const sm_60 = Cpu{240 pub const sm_60 = Cpu{
242 .name = "sm_60",241 .name = "sm_60",
243 .llvm_name = "sm_60",242 .llvm_name = "sm_60",
244 .features = featureSet(&all_features, &[_]Feature{243 .features = featureSet(&[_]Feature{
245 .ptx50,244 .ptx50,
246 .sm_60,245 .sm_60,
247 }),246 }),
...@@ -249,7 +248,7 @@ pub const cpu = struct {...@@ -249,7 +248,7 @@ pub const cpu = struct {
249 pub const sm_61 = Cpu{248 pub const sm_61 = Cpu{
250 .name = "sm_61",249 .name = "sm_61",
251 .llvm_name = "sm_61",250 .llvm_name = "sm_61",
252 .features = featureSet(&all_features, &[_]Feature{251 .features = featureSet(&[_]Feature{
253 .ptx50,252 .ptx50,
254 .sm_61,253 .sm_61,
255 }),254 }),
...@@ -257,7 +256,7 @@ pub const cpu = struct {...@@ -257,7 +256,7 @@ pub const cpu = struct {
257 pub const sm_62 = Cpu{256 pub const sm_62 = Cpu{
258 .name = "sm_62",257 .name = "sm_62",
259 .llvm_name = "sm_62",258 .llvm_name = "sm_62",
260 .features = featureSet(&all_features, &[_]Feature{259 .features = featureSet(&[_]Feature{
261 .ptx50,260 .ptx50,
262 .sm_62,261 .sm_62,
263 }),262 }),
...@@ -265,7 +264,7 @@ pub const cpu = struct {...@@ -265,7 +264,7 @@ pub const cpu = struct {
265 pub const sm_70 = Cpu{264 pub const sm_70 = Cpu{
266 .name = "sm_70",265 .name = "sm_70",
267 .llvm_name = "sm_70",266 .llvm_name = "sm_70",
268 .features = featureSet(&all_features, &[_]Feature{267 .features = featureSet(&[_]Feature{
269 .ptx60,268 .ptx60,
270 .sm_70,269 .sm_70,
271 }),270 }),
...@@ -273,7 +272,7 @@ pub const cpu = struct {...@@ -273,7 +272,7 @@ pub const cpu = struct {
273 pub const sm_72 = Cpu{272 pub const sm_72 = Cpu{
274 .name = "sm_72",273 .name = "sm_72",
275 .llvm_name = "sm_72",274 .llvm_name = "sm_72",
276 .features = featureSet(&all_features, &[_]Feature{275 .features = featureSet(&[_]Feature{
277 .ptx61,276 .ptx61,
278 .sm_72,277 .sm_72,
279 }),278 }),
...@@ -281,7 +280,7 @@ pub const cpu = struct {...@@ -281,7 +280,7 @@ pub const cpu = struct {
281 pub const sm_75 = Cpu{280 pub const sm_75 = Cpu{
282 .name = "sm_75",281 .name = "sm_75",
283 .llvm_name = "sm_75",282 .llvm_name = "sm_75",
284 .features = featureSet(&all_features, &[_]Feature{283 .features = featureSet(&[_]Feature{
285 .ptx63,284 .ptx63,
286 .sm_75,285 .sm_75,
287 }),286 }),
lib/std/target/powerpc.zig+88-89
...@@ -64,216 +64,216 @@ pub const all_features = blk: {...@@ -64,216 +64,216 @@ pub const all_features = blk: {
64 result[@enumToInt(Feature.@"64bit")] = .{64 result[@enumToInt(Feature.@"64bit")] = .{
65 .llvm_name = "64bit",65 .llvm_name = "64bit",
66 .description = "Enable 64-bit instructions",66 .description = "Enable 64-bit instructions",
67 .dependencies = sparseFeatureSet(&[_]Feature{}),67 .dependencies = featureSet(&[_]Feature{}),
68 };68 };
69 result[@enumToInt(Feature.@"64bitregs")] = .{69 result[@enumToInt(Feature.@"64bitregs")] = .{
70 .llvm_name = "64bitregs",70 .llvm_name = "64bitregs",
71 .description = "Enable 64-bit registers usage for ppc32 [beta]",71 .description = "Enable 64-bit registers usage for ppc32 [beta]",
72 .dependencies = sparseFeatureSet(&[_]Feature{}),72 .dependencies = featureSet(&[_]Feature{}),
73 };73 };
74 result[@enumToInt(Feature.altivec)] = .{74 result[@enumToInt(Feature.altivec)] = .{
75 .llvm_name = "altivec",75 .llvm_name = "altivec",
76 .description = "Enable Altivec instructions",76 .description = "Enable Altivec instructions",
77 .dependencies = sparseFeatureSet(&[_]Feature{77 .dependencies = featureSet(&[_]Feature{
78 .fpu,78 .fpu,
79 }),79 }),
80 };80 };
81 result[@enumToInt(Feature.booke)] = .{81 result[@enumToInt(Feature.booke)] = .{
82 .llvm_name = "booke",82 .llvm_name = "booke",
83 .description = "Enable Book E instructions",83 .description = "Enable Book E instructions",
84 .dependencies = sparseFeatureSet(&[_]Feature{84 .dependencies = featureSet(&[_]Feature{
85 .icbt,85 .icbt,
86 }),86 }),
87 };87 };
88 result[@enumToInt(Feature.bpermd)] = .{88 result[@enumToInt(Feature.bpermd)] = .{
89 .llvm_name = "bpermd",89 .llvm_name = "bpermd",
90 .description = "Enable the bpermd instruction",90 .description = "Enable the bpermd instruction",
91 .dependencies = sparseFeatureSet(&[_]Feature{}),91 .dependencies = featureSet(&[_]Feature{}),
92 };92 };
93 result[@enumToInt(Feature.cmpb)] = .{93 result[@enumToInt(Feature.cmpb)] = .{
94 .llvm_name = "cmpb",94 .llvm_name = "cmpb",
95 .description = "Enable the cmpb instruction",95 .description = "Enable the cmpb instruction",
96 .dependencies = sparseFeatureSet(&[_]Feature{}),96 .dependencies = featureSet(&[_]Feature{}),
97 };97 };
98 result[@enumToInt(Feature.crbits)] = .{98 result[@enumToInt(Feature.crbits)] = .{
99 .llvm_name = "crbits",99 .llvm_name = "crbits",
100 .description = "Use condition-register bits individually",100 .description = "Use condition-register bits individually",
101 .dependencies = sparseFeatureSet(&[_]Feature{}),101 .dependencies = featureSet(&[_]Feature{}),
102 };102 };
103 result[@enumToInt(Feature.crypto)] = .{103 result[@enumToInt(Feature.crypto)] = .{
104 .llvm_name = "crypto",104 .llvm_name = "crypto",
105 .description = "Enable POWER8 Crypto instructions",105 .description = "Enable POWER8 Crypto instructions",
106 .dependencies = sparseFeatureSet(&[_]Feature{106 .dependencies = featureSet(&[_]Feature{
107 .power8_altivec,107 .power8_altivec,
108 }),108 }),
109 };109 };
110 result[@enumToInt(Feature.direct_move)] = .{110 result[@enumToInt(Feature.direct_move)] = .{
111 .llvm_name = "direct-move",111 .llvm_name = "direct-move",
112 .description = "Enable Power8 direct move instructions",112 .description = "Enable Power8 direct move instructions",
113 .dependencies = sparseFeatureSet(&[_]Feature{113 .dependencies = featureSet(&[_]Feature{
114 .vsx,114 .vsx,
115 }),115 }),
116 };116 };
117 result[@enumToInt(Feature.e500)] = .{117 result[@enumToInt(Feature.e500)] = .{
118 .llvm_name = "e500",118 .llvm_name = "e500",
119 .description = "Enable E500/E500mc instructions",119 .description = "Enable E500/E500mc instructions",
120 .dependencies = sparseFeatureSet(&[_]Feature{}),120 .dependencies = featureSet(&[_]Feature{}),
121 };121 };
122 result[@enumToInt(Feature.extdiv)] = .{122 result[@enumToInt(Feature.extdiv)] = .{
123 .llvm_name = "extdiv",123 .llvm_name = "extdiv",
124 .description = "Enable extended divide instructions",124 .description = "Enable extended divide instructions",
125 .dependencies = sparseFeatureSet(&[_]Feature{}),125 .dependencies = featureSet(&[_]Feature{}),
126 };126 };
127 result[@enumToInt(Feature.fcpsgn)] = .{127 result[@enumToInt(Feature.fcpsgn)] = .{
128 .llvm_name = "fcpsgn",128 .llvm_name = "fcpsgn",
129 .description = "Enable the fcpsgn instruction",129 .description = "Enable the fcpsgn instruction",
130 .dependencies = sparseFeatureSet(&[_]Feature{130 .dependencies = featureSet(&[_]Feature{
131 .fpu,131 .fpu,
132 }),132 }),
133 };133 };
134 result[@enumToInt(Feature.float128)] = .{134 result[@enumToInt(Feature.float128)] = .{
135 .llvm_name = "float128",135 .llvm_name = "float128",
136 .description = "Enable the __float128 data type for IEEE-754R Binary128.",136 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
137 .dependencies = sparseFeatureSet(&[_]Feature{137 .dependencies = featureSet(&[_]Feature{
138 .vsx,138 .vsx,
139 }),139 }),
140 };140 };
141 result[@enumToInt(Feature.fpcvt)] = .{141 result[@enumToInt(Feature.fpcvt)] = .{
142 .llvm_name = "fpcvt",142 .llvm_name = "fpcvt",
143 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",143 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
144 .dependencies = sparseFeatureSet(&[_]Feature{144 .dependencies = featureSet(&[_]Feature{
145 .fpu,145 .fpu,
146 }),146 }),
147 };147 };
148 result[@enumToInt(Feature.fprnd)] = .{148 result[@enumToInt(Feature.fprnd)] = .{
149 .llvm_name = "fprnd",149 .llvm_name = "fprnd",
150 .description = "Enable the fri[mnpz] instructions",150 .description = "Enable the fri[mnpz] instructions",
151 .dependencies = sparseFeatureSet(&[_]Feature{151 .dependencies = featureSet(&[_]Feature{
152 .fpu,152 .fpu,
153 }),153 }),
154 };154 };
155 result[@enumToInt(Feature.fpu)] = .{155 result[@enumToInt(Feature.fpu)] = .{
156 .llvm_name = "fpu",156 .llvm_name = "fpu",
157 .description = "Enable classic FPU instructions",157 .description = "Enable classic FPU instructions",
158 .dependencies = sparseFeatureSet(&[_]Feature{158 .dependencies = featureSet(&[_]Feature{
159 .hard_float,159 .hard_float,
160 }),160 }),
161 };161 };
162 result[@enumToInt(Feature.fre)] = .{162 result[@enumToInt(Feature.fre)] = .{
163 .llvm_name = "fre",163 .llvm_name = "fre",
164 .description = "Enable the fre instruction",164 .description = "Enable the fre instruction",
165 .dependencies = sparseFeatureSet(&[_]Feature{165 .dependencies = featureSet(&[_]Feature{
166 .fpu,166 .fpu,
167 }),167 }),
168 };168 };
169 result[@enumToInt(Feature.fres)] = .{169 result[@enumToInt(Feature.fres)] = .{
170 .llvm_name = "fres",170 .llvm_name = "fres",
171 .description = "Enable the fres instruction",171 .description = "Enable the fres instruction",
172 .dependencies = sparseFeatureSet(&[_]Feature{172 .dependencies = featureSet(&[_]Feature{
173 .fpu,173 .fpu,
174 }),174 }),
175 };175 };
176 result[@enumToInt(Feature.frsqrte)] = .{176 result[@enumToInt(Feature.frsqrte)] = .{
177 .llvm_name = "frsqrte",177 .llvm_name = "frsqrte",
178 .description = "Enable the frsqrte instruction",178 .description = "Enable the frsqrte instruction",
179 .dependencies = sparseFeatureSet(&[_]Feature{179 .dependencies = featureSet(&[_]Feature{
180 .fpu,180 .fpu,
181 }),181 }),
182 };182 };
183 result[@enumToInt(Feature.frsqrtes)] = .{183 result[@enumToInt(Feature.frsqrtes)] = .{
184 .llvm_name = "frsqrtes",184 .llvm_name = "frsqrtes",
185 .description = "Enable the frsqrtes instruction",185 .description = "Enable the frsqrtes instruction",
186 .dependencies = sparseFeatureSet(&[_]Feature{186 .dependencies = featureSet(&[_]Feature{
187 .fpu,187 .fpu,
188 }),188 }),
189 };189 };
190 result[@enumToInt(Feature.fsqrt)] = .{190 result[@enumToInt(Feature.fsqrt)] = .{
191 .llvm_name = "fsqrt",191 .llvm_name = "fsqrt",
192 .description = "Enable the fsqrt instruction",192 .description = "Enable the fsqrt instruction",
193 .dependencies = sparseFeatureSet(&[_]Feature{193 .dependencies = featureSet(&[_]Feature{
194 .fpu,194 .fpu,
195 }),195 }),
196 };196 };
197 result[@enumToInt(Feature.hard_float)] = .{197 result[@enumToInt(Feature.hard_float)] = .{
198 .llvm_name = "hard-float",198 .llvm_name = "hard-float",
199 .description = "Enable floating-point instructions",199 .description = "Enable floating-point instructions",
200 .dependencies = sparseFeatureSet(&[_]Feature{}),200 .dependencies = featureSet(&[_]Feature{}),
201 };201 };
202 result[@enumToInt(Feature.htm)] = .{202 result[@enumToInt(Feature.htm)] = .{
203 .llvm_name = "htm",203 .llvm_name = "htm",
204 .description = "Enable Hardware Transactional Memory instructions",204 .description = "Enable Hardware Transactional Memory instructions",
205 .dependencies = sparseFeatureSet(&[_]Feature{}),205 .dependencies = featureSet(&[_]Feature{}),
206 };206 };
207 result[@enumToInt(Feature.icbt)] = .{207 result[@enumToInt(Feature.icbt)] = .{
208 .llvm_name = "icbt",208 .llvm_name = "icbt",
209 .description = "Enable icbt instruction",209 .description = "Enable icbt instruction",
210 .dependencies = sparseFeatureSet(&[_]Feature{}),210 .dependencies = featureSet(&[_]Feature{}),
211 };211 };
212 result[@enumToInt(Feature.invariant_function_descriptors)] = .{212 result[@enumToInt(Feature.invariant_function_descriptors)] = .{
213 .llvm_name = "invariant-function-descriptors",213 .llvm_name = "invariant-function-descriptors",
214 .description = "Assume function descriptors are invariant",214 .description = "Assume function descriptors are invariant",
215 .dependencies = sparseFeatureSet(&[_]Feature{}),215 .dependencies = featureSet(&[_]Feature{}),
216 };216 };
217 result[@enumToInt(Feature.isa_v30_instructions)] = .{217 result[@enumToInt(Feature.isa_v30_instructions)] = .{
218 .llvm_name = "isa-v30-instructions",218 .llvm_name = "isa-v30-instructions",
219 .description = "Enable instructions added in ISA 3.0.",219 .description = "Enable instructions added in ISA 3.0.",
220 .dependencies = sparseFeatureSet(&[_]Feature{}),220 .dependencies = featureSet(&[_]Feature{}),
221 };221 };
222 result[@enumToInt(Feature.isel)] = .{222 result[@enumToInt(Feature.isel)] = .{
223 .llvm_name = "isel",223 .llvm_name = "isel",
224 .description = "Enable the isel instruction",224 .description = "Enable the isel instruction",
225 .dependencies = sparseFeatureSet(&[_]Feature{}),225 .dependencies = featureSet(&[_]Feature{}),
226 };226 };
227 result[@enumToInt(Feature.ldbrx)] = .{227 result[@enumToInt(Feature.ldbrx)] = .{
228 .llvm_name = "ldbrx",228 .llvm_name = "ldbrx",
229 .description = "Enable the ldbrx instruction",229 .description = "Enable the ldbrx instruction",
230 .dependencies = sparseFeatureSet(&[_]Feature{}),230 .dependencies = featureSet(&[_]Feature{}),
231 };231 };
232 result[@enumToInt(Feature.lfiwax)] = .{232 result[@enumToInt(Feature.lfiwax)] = .{
233 .llvm_name = "lfiwax",233 .llvm_name = "lfiwax",
234 .description = "Enable the lfiwax instruction",234 .description = "Enable the lfiwax instruction",
235 .dependencies = sparseFeatureSet(&[_]Feature{235 .dependencies = featureSet(&[_]Feature{
236 .fpu,236 .fpu,
237 }),237 }),
238 };238 };
239 result[@enumToInt(Feature.longcall)] = .{239 result[@enumToInt(Feature.longcall)] = .{
240 .llvm_name = "longcall",240 .llvm_name = "longcall",
241 .description = "Always use indirect calls",241 .description = "Always use indirect calls",
242 .dependencies = sparseFeatureSet(&[_]Feature{}),242 .dependencies = featureSet(&[_]Feature{}),
243 };243 };
244 result[@enumToInt(Feature.mfocrf)] = .{244 result[@enumToInt(Feature.mfocrf)] = .{
245 .llvm_name = "mfocrf",245 .llvm_name = "mfocrf",
246 .description = "Enable the MFOCRF instruction",246 .description = "Enable the MFOCRF instruction",
247 .dependencies = sparseFeatureSet(&[_]Feature{}),247 .dependencies = featureSet(&[_]Feature{}),
248 };248 };
249 result[@enumToInt(Feature.msync)] = .{249 result[@enumToInt(Feature.msync)] = .{
250 .llvm_name = "msync",250 .llvm_name = "msync",
251 .description = "Has only the msync instruction instead of sync",251 .description = "Has only the msync instruction instead of sync",
252 .dependencies = sparseFeatureSet(&[_]Feature{252 .dependencies = featureSet(&[_]Feature{
253 .booke,253 .booke,
254 }),254 }),
255 };255 };
256 result[@enumToInt(Feature.partword_atomics)] = .{256 result[@enumToInt(Feature.partword_atomics)] = .{
257 .llvm_name = "partword-atomics",257 .llvm_name = "partword-atomics",
258 .description = "Enable l[bh]arx and st[bh]cx.",258 .description = "Enable l[bh]arx and st[bh]cx.",
259 .dependencies = sparseFeatureSet(&[_]Feature{}),259 .dependencies = featureSet(&[_]Feature{}),
260 };260 };
261 result[@enumToInt(Feature.popcntd)] = .{261 result[@enumToInt(Feature.popcntd)] = .{
262 .llvm_name = "popcntd",262 .llvm_name = "popcntd",
263 .description = "Enable the popcnt[dw] instructions",263 .description = "Enable the popcnt[dw] instructions",
264 .dependencies = sparseFeatureSet(&[_]Feature{}),264 .dependencies = featureSet(&[_]Feature{}),
265 };265 };
266 result[@enumToInt(Feature.power8_altivec)] = .{266 result[@enumToInt(Feature.power8_altivec)] = .{
267 .llvm_name = "power8-altivec",267 .llvm_name = "power8-altivec",
268 .description = "Enable POWER8 Altivec instructions",268 .description = "Enable POWER8 Altivec instructions",
269 .dependencies = sparseFeatureSet(&[_]Feature{269 .dependencies = featureSet(&[_]Feature{
270 .altivec,270 .altivec,
271 }),271 }),
272 };272 };
273 result[@enumToInt(Feature.power8_vector)] = .{273 result[@enumToInt(Feature.power8_vector)] = .{
274 .llvm_name = "power8-vector",274 .llvm_name = "power8-vector",
275 .description = "Enable POWER8 vector instructions",275 .description = "Enable POWER8 vector instructions",
276 .dependencies = sparseFeatureSet(&[_]Feature{276 .dependencies = featureSet(&[_]Feature{
277 .power8_altivec,277 .power8_altivec,
278 .vsx,278 .vsx,
279 }),279 }),
...@@ -281,7 +281,7 @@ pub const all_features = blk: {...@@ -281,7 +281,7 @@ pub const all_features = blk: {
281 result[@enumToInt(Feature.power9_altivec)] = .{281 result[@enumToInt(Feature.power9_altivec)] = .{
282 .llvm_name = "power9-altivec",282 .llvm_name = "power9-altivec",
283 .description = "Enable POWER9 Altivec instructions",283 .description = "Enable POWER9 Altivec instructions",
284 .dependencies = sparseFeatureSet(&[_]Feature{284 .dependencies = featureSet(&[_]Feature{
285 .isa_v30_instructions,285 .isa_v30_instructions,
286 .power8_altivec,286 .power8_altivec,
287 }),287 }),
...@@ -289,7 +289,7 @@ pub const all_features = blk: {...@@ -289,7 +289,7 @@ pub const all_features = blk: {
289 result[@enumToInt(Feature.power9_vector)] = .{289 result[@enumToInt(Feature.power9_vector)] = .{
290 .llvm_name = "power9-vector",290 .llvm_name = "power9-vector",
291 .description = "Enable POWER9 vector instructions",291 .description = "Enable POWER9 vector instructions",
292 .dependencies = sparseFeatureSet(&[_]Feature{292 .dependencies = featureSet(&[_]Feature{
293 .isa_v30_instructions,293 .isa_v30_instructions,
294 .power8_vector,294 .power8_vector,
295 .power9_altivec,295 .power9_altivec,
...@@ -298,73 +298,73 @@ pub const all_features = blk: {...@@ -298,73 +298,73 @@ pub const all_features = blk: {
298 result[@enumToInt(Feature.ppc_postra_sched)] = .{298 result[@enumToInt(Feature.ppc_postra_sched)] = .{
299 .llvm_name = "ppc-postra-sched",299 .llvm_name = "ppc-postra-sched",
300 .description = "Use PowerPC post-RA scheduling strategy",300 .description = "Use PowerPC post-RA scheduling strategy",
301 .dependencies = sparseFeatureSet(&[_]Feature{}),301 .dependencies = featureSet(&[_]Feature{}),
302 };302 };
303 result[@enumToInt(Feature.ppc_prera_sched)] = .{303 result[@enumToInt(Feature.ppc_prera_sched)] = .{
304 .llvm_name = "ppc-prera-sched",304 .llvm_name = "ppc-prera-sched",
305 .description = "Use PowerPC pre-RA scheduling strategy",305 .description = "Use PowerPC pre-RA scheduling strategy",
306 .dependencies = sparseFeatureSet(&[_]Feature{}),306 .dependencies = featureSet(&[_]Feature{}),
307 };307 };
308 result[@enumToInt(Feature.ppc4xx)] = .{308 result[@enumToInt(Feature.ppc4xx)] = .{
309 .llvm_name = "ppc4xx",309 .llvm_name = "ppc4xx",
310 .description = "Enable PPC 4xx instructions",310 .description = "Enable PPC 4xx instructions",
311 .dependencies = sparseFeatureSet(&[_]Feature{}),311 .dependencies = featureSet(&[_]Feature{}),
312 };312 };
313 result[@enumToInt(Feature.ppc6xx)] = .{313 result[@enumToInt(Feature.ppc6xx)] = .{
314 .llvm_name = "ppc6xx",314 .llvm_name = "ppc6xx",
315 .description = "Enable PPC 6xx instructions",315 .description = "Enable PPC 6xx instructions",
316 .dependencies = sparseFeatureSet(&[_]Feature{}),316 .dependencies = featureSet(&[_]Feature{}),
317 };317 };
318 result[@enumToInt(Feature.qpx)] = .{318 result[@enumToInt(Feature.qpx)] = .{
319 .llvm_name = "qpx",319 .llvm_name = "qpx",
320 .description = "Enable QPX instructions",320 .description = "Enable QPX instructions",
321 .dependencies = sparseFeatureSet(&[_]Feature{321 .dependencies = featureSet(&[_]Feature{
322 .fpu,322 .fpu,
323 }),323 }),
324 };324 };
325 result[@enumToInt(Feature.recipprec)] = .{325 result[@enumToInt(Feature.recipprec)] = .{
326 .llvm_name = "recipprec",326 .llvm_name = "recipprec",
327 .description = "Assume higher precision reciprocal estimates",327 .description = "Assume higher precision reciprocal estimates",
328 .dependencies = sparseFeatureSet(&[_]Feature{}),328 .dependencies = featureSet(&[_]Feature{}),
329 };329 };
330 result[@enumToInt(Feature.secure_plt)] = .{330 result[@enumToInt(Feature.secure_plt)] = .{
331 .llvm_name = "secure-plt",331 .llvm_name = "secure-plt",
332 .description = "Enable secure plt mode",332 .description = "Enable secure plt mode",
333 .dependencies = sparseFeatureSet(&[_]Feature{}),333 .dependencies = featureSet(&[_]Feature{}),
334 };334 };
335 result[@enumToInt(Feature.slow_popcntd)] = .{335 result[@enumToInt(Feature.slow_popcntd)] = .{
336 .llvm_name = "slow-popcntd",336 .llvm_name = "slow-popcntd",
337 .description = "Has slow popcnt[dw] instructions",337 .description = "Has slow popcnt[dw] instructions",
338 .dependencies = sparseFeatureSet(&[_]Feature{}),338 .dependencies = featureSet(&[_]Feature{}),
339 };339 };
340 result[@enumToInt(Feature.spe)] = .{340 result[@enumToInt(Feature.spe)] = .{
341 .llvm_name = "spe",341 .llvm_name = "spe",
342 .description = "Enable SPE instructions",342 .description = "Enable SPE instructions",
343 .dependencies = sparseFeatureSet(&[_]Feature{343 .dependencies = featureSet(&[_]Feature{
344 .hard_float,344 .hard_float,
345 }),345 }),
346 };346 };
347 result[@enumToInt(Feature.stfiwx)] = .{347 result[@enumToInt(Feature.stfiwx)] = .{
348 .llvm_name = "stfiwx",348 .llvm_name = "stfiwx",
349 .description = "Enable the stfiwx instruction",349 .description = "Enable the stfiwx instruction",
350 .dependencies = sparseFeatureSet(&[_]Feature{350 .dependencies = featureSet(&[_]Feature{
351 .fpu,351 .fpu,
352 }),352 }),
353 };353 };
354 result[@enumToInt(Feature.two_const_nr)] = .{354 result[@enumToInt(Feature.two_const_nr)] = .{
355 .llvm_name = "two-const-nr",355 .llvm_name = "two-const-nr",
356 .description = "Requires two constant Newton-Raphson computation",356 .description = "Requires two constant Newton-Raphson computation",
357 .dependencies = sparseFeatureSet(&[_]Feature{}),357 .dependencies = featureSet(&[_]Feature{}),
358 };358 };
359 result[@enumToInt(Feature.vectors_use_two_units)] = .{359 result[@enumToInt(Feature.vectors_use_two_units)] = .{
360 .llvm_name = "vectors-use-two-units",360 .llvm_name = "vectors-use-two-units",
361 .description = "Vectors use two units",361 .description = "Vectors use two units",
362 .dependencies = sparseFeatureSet(&[_]Feature{}),362 .dependencies = featureSet(&[_]Feature{}),
363 };363 };
364 result[@enumToInt(Feature.vsx)] = .{364 result[@enumToInt(Feature.vsx)] = .{
365 .llvm_name = "vsx",365 .llvm_name = "vsx",
366 .description = "Enable VSX instructions",366 .description = "Enable VSX instructions",
367 .dependencies = sparseFeatureSet(&[_]Feature{367 .dependencies = featureSet(&[_]Feature{
368 .altivec,368 .altivec,
369 }),369 }),
370 };370 };
...@@ -372,7 +372,6 @@ pub const all_features = blk: {...@@ -372,7 +372,6 @@ pub const all_features = blk: {
372 for (result) |*elem, i| {372 for (result) |*elem, i| {
373 elem.index = i;373 elem.index = i;
374 elem.name = ti.Enum.fields[i].name;374 elem.name = ti.Enum.fields[i].name;
375 elem.dependencies.initAsDependencies(i, &result);
376 }375 }
377 break :blk result;376 break :blk result;
378};377};
...@@ -381,7 +380,7 @@ pub const cpu = struct {...@@ -381,7 +380,7 @@ pub const cpu = struct {
381 pub const @"440" = Cpu{380 pub const @"440" = Cpu{
382 .name = "440",381 .name = "440",
383 .llvm_name = "440",382 .llvm_name = "440",
384 .features = featureSet(&all_features, &[_]Feature{383 .features = featureSet(&[_]Feature{
385 .booke,384 .booke,
386 .fres,385 .fres,
387 .frsqrte,386 .frsqrte,
...@@ -393,7 +392,7 @@ pub const cpu = struct {...@@ -393,7 +392,7 @@ pub const cpu = struct {
393 pub const @"450" = Cpu{392 pub const @"450" = Cpu{
394 .name = "450",393 .name = "450",
395 .llvm_name = "450",394 .llvm_name = "450",
396 .features = featureSet(&all_features, &[_]Feature{395 .features = featureSet(&[_]Feature{
397 .booke,396 .booke,
398 .fres,397 .fres,
399 .frsqrte,398 .frsqrte,
...@@ -405,21 +404,21 @@ pub const cpu = struct {...@@ -405,21 +404,21 @@ pub const cpu = struct {
405 pub const @"601" = Cpu{404 pub const @"601" = Cpu{
406 .name = "601",405 .name = "601",
407 .llvm_name = "601",406 .llvm_name = "601",
408 .features = featureSet(&all_features, &[_]Feature{407 .features = featureSet(&[_]Feature{
409 .fpu,408 .fpu,
410 }),409 }),
411 };410 };
412 pub const @"602" = Cpu{411 pub const @"602" = Cpu{
413 .name = "602",412 .name = "602",
414 .llvm_name = "602",413 .llvm_name = "602",
415 .features = featureSet(&all_features, &[_]Feature{414 .features = featureSet(&[_]Feature{
416 .fpu,415 .fpu,
417 }),416 }),
418 };417 };
419 pub const @"603" = Cpu{418 pub const @"603" = Cpu{
420 .name = "603",419 .name = "603",
421 .llvm_name = "603",420 .llvm_name = "603",
422 .features = featureSet(&all_features, &[_]Feature{421 .features = featureSet(&[_]Feature{
423 .fres,422 .fres,
424 .frsqrte,423 .frsqrte,
425 }),424 }),
...@@ -427,7 +426,7 @@ pub const cpu = struct {...@@ -427,7 +426,7 @@ pub const cpu = struct {
427 pub const @"603e" = Cpu{426 pub const @"603e" = Cpu{
428 .name = "603e",427 .name = "603e",
429 .llvm_name = "603e",428 .llvm_name = "603e",
430 .features = featureSet(&all_features, &[_]Feature{429 .features = featureSet(&[_]Feature{
431 .fres,430 .fres,
432 .frsqrte,431 .frsqrte,
433 }),432 }),
...@@ -435,7 +434,7 @@ pub const cpu = struct {...@@ -435,7 +434,7 @@ pub const cpu = struct {
435 pub const @"603ev" = Cpu{434 pub const @"603ev" = Cpu{
436 .name = "603ev",435 .name = "603ev",
437 .llvm_name = "603ev",436 .llvm_name = "603ev",
438 .features = featureSet(&all_features, &[_]Feature{437 .features = featureSet(&[_]Feature{
439 .fres,438 .fres,
440 .frsqrte,439 .frsqrte,
441 }),440 }),
...@@ -443,7 +442,7 @@ pub const cpu = struct {...@@ -443,7 +442,7 @@ pub const cpu = struct {
443 pub const @"604" = Cpu{442 pub const @"604" = Cpu{
444 .name = "604",443 .name = "604",
445 .llvm_name = "604",444 .llvm_name = "604",
446 .features = featureSet(&all_features, &[_]Feature{445 .features = featureSet(&[_]Feature{
447 .fres,446 .fres,
448 .frsqrte,447 .frsqrte,
449 }),448 }),
...@@ -451,7 +450,7 @@ pub const cpu = struct {...@@ -451,7 +450,7 @@ pub const cpu = struct {
451 pub const @"604e" = Cpu{450 pub const @"604e" = Cpu{
452 .name = "604e",451 .name = "604e",
453 .llvm_name = "604e",452 .llvm_name = "604e",
454 .features = featureSet(&all_features, &[_]Feature{453 .features = featureSet(&[_]Feature{
455 .fres,454 .fres,
456 .frsqrte,455 .frsqrte,
457 }),456 }),
...@@ -459,7 +458,7 @@ pub const cpu = struct {...@@ -459,7 +458,7 @@ pub const cpu = struct {
459 pub const @"620" = Cpu{458 pub const @"620" = Cpu{
460 .name = "620",459 .name = "620",
461 .llvm_name = "620",460 .llvm_name = "620",
462 .features = featureSet(&all_features, &[_]Feature{461 .features = featureSet(&[_]Feature{
463 .fres,462 .fres,
464 .frsqrte,463 .frsqrte,
465 }),464 }),
...@@ -467,7 +466,7 @@ pub const cpu = struct {...@@ -467,7 +466,7 @@ pub const cpu = struct {
467 pub const @"7400" = Cpu{466 pub const @"7400" = Cpu{
468 .name = "7400",467 .name = "7400",
469 .llvm_name = "7400",468 .llvm_name = "7400",
470 .features = featureSet(&all_features, &[_]Feature{469 .features = featureSet(&[_]Feature{
471 .altivec,470 .altivec,
472 .fres,471 .fres,
473 .frsqrte,472 .frsqrte,
...@@ -476,7 +475,7 @@ pub const cpu = struct {...@@ -476,7 +475,7 @@ pub const cpu = struct {
476 pub const @"7450" = Cpu{475 pub const @"7450" = Cpu{
477 .name = "7450",476 .name = "7450",
478 .llvm_name = "7450",477 .llvm_name = "7450",
479 .features = featureSet(&all_features, &[_]Feature{478 .features = featureSet(&[_]Feature{
480 .altivec,479 .altivec,
481 .fres,480 .fres,
482 .frsqrte,481 .frsqrte,
...@@ -485,7 +484,7 @@ pub const cpu = struct {...@@ -485,7 +484,7 @@ pub const cpu = struct {
485 pub const @"750" = Cpu{484 pub const @"750" = Cpu{
486 .name = "750",485 .name = "750",
487 .llvm_name = "750",486 .llvm_name = "750",
488 .features = featureSet(&all_features, &[_]Feature{487 .features = featureSet(&[_]Feature{
489 .fres,488 .fres,
490 .frsqrte,489 .frsqrte,
491 }),490 }),
...@@ -493,7 +492,7 @@ pub const cpu = struct {...@@ -493,7 +492,7 @@ pub const cpu = struct {
493 pub const @"970" = Cpu{492 pub const @"970" = Cpu{
494 .name = "970",493 .name = "970",
495 .llvm_name = "970",494 .llvm_name = "970",
496 .features = featureSet(&all_features, &[_]Feature{495 .features = featureSet(&[_]Feature{
497 .@"64bit",496 .@"64bit",
498 .altivec,497 .altivec,
499 .fres,498 .fres,
...@@ -506,7 +505,7 @@ pub const cpu = struct {...@@ -506,7 +505,7 @@ pub const cpu = struct {
506 pub const a2 = Cpu{505 pub const a2 = Cpu{
507 .name = "a2",506 .name = "a2",
508 .llvm_name = "a2",507 .llvm_name = "a2",
509 .features = featureSet(&all_features, &[_]Feature{508 .features = featureSet(&[_]Feature{
510 .@"64bit",509 .@"64bit",
511 .booke,510 .booke,
512 .cmpb,511 .cmpb,
...@@ -531,7 +530,7 @@ pub const cpu = struct {...@@ -531,7 +530,7 @@ pub const cpu = struct {
531 pub const a2q = Cpu{530 pub const a2q = Cpu{
532 .name = "a2q",531 .name = "a2q",
533 .llvm_name = "a2q",532 .llvm_name = "a2q",
534 .features = featureSet(&all_features, &[_]Feature{533 .features = featureSet(&[_]Feature{
535 .@"64bit",534 .@"64bit",
536 .booke,535 .booke,
537 .cmpb,536 .cmpb,
...@@ -557,7 +556,7 @@ pub const cpu = struct {...@@ -557,7 +556,7 @@ pub const cpu = struct {
557 pub const e500 = Cpu{556 pub const e500 = Cpu{
558 .name = "e500",557 .name = "e500",
559 .llvm_name = "e500",558 .llvm_name = "e500",
560 .features = featureSet(&all_features, &[_]Feature{559 .features = featureSet(&[_]Feature{
561 .booke,560 .booke,
562 .icbt,561 .icbt,
563 .isel,562 .isel,
...@@ -566,7 +565,7 @@ pub const cpu = struct {...@@ -566,7 +565,7 @@ pub const cpu = struct {
566 pub const e500mc = Cpu{565 pub const e500mc = Cpu{
567 .name = "e500mc",566 .name = "e500mc",
568 .llvm_name = "e500mc",567 .llvm_name = "e500mc",
569 .features = featureSet(&all_features, &[_]Feature{568 .features = featureSet(&[_]Feature{
570 .booke,569 .booke,
571 .icbt,570 .icbt,
572 .isel,571 .isel,
...@@ -576,7 +575,7 @@ pub const cpu = struct {...@@ -576,7 +575,7 @@ pub const cpu = struct {
576 pub const e5500 = Cpu{575 pub const e5500 = Cpu{
577 .name = "e5500",576 .name = "e5500",
578 .llvm_name = "e5500",577 .llvm_name = "e5500",
579 .features = featureSet(&all_features, &[_]Feature{578 .features = featureSet(&[_]Feature{
580 .@"64bit",579 .@"64bit",
581 .booke,580 .booke,
582 .icbt,581 .icbt,
...@@ -588,7 +587,7 @@ pub const cpu = struct {...@@ -588,7 +587,7 @@ pub const cpu = struct {
588 pub const g3 = Cpu{587 pub const g3 = Cpu{
589 .name = "g3",588 .name = "g3",
590 .llvm_name = "g3",589 .llvm_name = "g3",
591 .features = featureSet(&all_features, &[_]Feature{590 .features = featureSet(&[_]Feature{
592 .fres,591 .fres,
593 .frsqrte,592 .frsqrte,
594 }),593 }),
...@@ -596,7 +595,7 @@ pub const cpu = struct {...@@ -596,7 +595,7 @@ pub const cpu = struct {
596 pub const g4 = Cpu{595 pub const g4 = Cpu{
597 .name = "g4",596 .name = "g4",
598 .llvm_name = "g4",597 .llvm_name = "g4",
599 .features = featureSet(&all_features, &[_]Feature{598 .features = featureSet(&[_]Feature{
600 .altivec,599 .altivec,
601 .fres,600 .fres,
602 .frsqrte,601 .frsqrte,
...@@ -605,7 +604,7 @@ pub const cpu = struct {...@@ -605,7 +604,7 @@ pub const cpu = struct {
605 pub const @"g4+" = Cpu{604 pub const @"g4+" = Cpu{
606 .name = "g4+",605 .name = "g4+",
607 .llvm_name = "g4+",606 .llvm_name = "g4+",
608 .features = featureSet(&all_features, &[_]Feature{607 .features = featureSet(&[_]Feature{
609 .altivec,608 .altivec,
610 .fres,609 .fres,
611 .frsqrte,610 .frsqrte,
...@@ -614,7 +613,7 @@ pub const cpu = struct {...@@ -614,7 +613,7 @@ pub const cpu = struct {
614 pub const g5 = Cpu{613 pub const g5 = Cpu{
615 .name = "g5",614 .name = "g5",
616 .llvm_name = "g5",615 .llvm_name = "g5",
617 .features = featureSet(&all_features, &[_]Feature{616 .features = featureSet(&[_]Feature{
618 .@"64bit",617 .@"64bit",
619 .altivec,618 .altivec,
620 .fres,619 .fres,
...@@ -627,28 +626,28 @@ pub const cpu = struct {...@@ -627,28 +626,28 @@ pub const cpu = struct {
627 pub const generic = Cpu{626 pub const generic = Cpu{
628 .name = "generic",627 .name = "generic",
629 .llvm_name = "generic",628 .llvm_name = "generic",
630 .features = featureSet(&all_features, &[_]Feature{629 .features = featureSet(&[_]Feature{
631 .hard_float,630 .hard_float,
632 }),631 }),
633 };632 };
634 pub const ppc = Cpu{633 pub const ppc = Cpu{
635 .name = "ppc",634 .name = "ppc",
636 .llvm_name = "ppc",635 .llvm_name = "ppc",
637 .features = featureSet(&all_features, &[_]Feature{636 .features = featureSet(&[_]Feature{
638 .hard_float,637 .hard_float,
639 }),638 }),
640 };639 };
641 pub const ppc32 = Cpu{640 pub const ppc32 = Cpu{
642 .name = "ppc32",641 .name = "ppc32",
643 .llvm_name = "ppc32",642 .llvm_name = "ppc32",
644 .features = featureSet(&all_features, &[_]Feature{643 .features = featureSet(&[_]Feature{
645 .hard_float,644 .hard_float,
646 }),645 }),
647 };646 };
648 pub const ppc64 = Cpu{647 pub const ppc64 = Cpu{
649 .name = "ppc64",648 .name = "ppc64",
650 .llvm_name = "ppc64",649 .llvm_name = "ppc64",
651 .features = featureSet(&all_features, &[_]Feature{650 .features = featureSet(&[_]Feature{
652 .@"64bit",651 .@"64bit",
653 .altivec,652 .altivec,
654 .fres,653 .fres,
...@@ -661,7 +660,7 @@ pub const cpu = struct {...@@ -661,7 +660,7 @@ pub const cpu = struct {
661 pub const ppc64le = Cpu{660 pub const ppc64le = Cpu{
662 .name = "ppc64le",661 .name = "ppc64le",
663 .llvm_name = "ppc64le",662 .llvm_name = "ppc64le",
664 .features = featureSet(&all_features, &[_]Feature{663 .features = featureSet(&[_]Feature{
665 .@"64bit",664 .@"64bit",
666 .altivec,665 .altivec,
667 .bpermd,666 .bpermd,
...@@ -696,7 +695,7 @@ pub const cpu = struct {...@@ -696,7 +695,7 @@ pub const cpu = struct {
696 pub const pwr3 = Cpu{695 pub const pwr3 = Cpu{
697 .name = "pwr3",696 .name = "pwr3",
698 .llvm_name = "pwr3",697 .llvm_name = "pwr3",
699 .features = featureSet(&all_features, &[_]Feature{698 .features = featureSet(&[_]Feature{
700 .@"64bit",699 .@"64bit",
701 .altivec,700 .altivec,
702 .fres,701 .fres,
...@@ -708,7 +707,7 @@ pub const cpu = struct {...@@ -708,7 +707,7 @@ pub const cpu = struct {
708 pub const pwr4 = Cpu{707 pub const pwr4 = Cpu{
709 .name = "pwr4",708 .name = "pwr4",
710 .llvm_name = "pwr4",709 .llvm_name = "pwr4",
711 .features = featureSet(&all_features, &[_]Feature{710 .features = featureSet(&[_]Feature{
712 .@"64bit",711 .@"64bit",
713 .altivec,712 .altivec,
714 .fres,713 .fres,
...@@ -721,7 +720,7 @@ pub const cpu = struct {...@@ -721,7 +720,7 @@ pub const cpu = struct {
721 pub const pwr5 = Cpu{720 pub const pwr5 = Cpu{
722 .name = "pwr5",721 .name = "pwr5",
723 .llvm_name = "pwr5",722 .llvm_name = "pwr5",
724 .features = featureSet(&all_features, &[_]Feature{723 .features = featureSet(&[_]Feature{
725 .@"64bit",724 .@"64bit",
726 .altivec,725 .altivec,
727 .fre,726 .fre,
...@@ -736,7 +735,7 @@ pub const cpu = struct {...@@ -736,7 +735,7 @@ pub const cpu = struct {
736 pub const pwr5x = Cpu{735 pub const pwr5x = Cpu{
737 .name = "pwr5x",736 .name = "pwr5x",
738 .llvm_name = "pwr5x",737 .llvm_name = "pwr5x",
739 .features = featureSet(&all_features, &[_]Feature{738 .features = featureSet(&[_]Feature{
740 .@"64bit",739 .@"64bit",
741 .altivec,740 .altivec,
742 .fprnd,741 .fprnd,
...@@ -752,7 +751,7 @@ pub const cpu = struct {...@@ -752,7 +751,7 @@ pub const cpu = struct {
752 pub const pwr6 = Cpu{751 pub const pwr6 = Cpu{
753 .name = "pwr6",752 .name = "pwr6",
754 .llvm_name = "pwr6",753 .llvm_name = "pwr6",
755 .features = featureSet(&all_features, &[_]Feature{754 .features = featureSet(&[_]Feature{
756 .@"64bit",755 .@"64bit",
757 .altivec,756 .altivec,
758 .cmpb,757 .cmpb,
...@@ -772,7 +771,7 @@ pub const cpu = struct {...@@ -772,7 +771,7 @@ pub const cpu = struct {
772 pub const pwr6x = Cpu{771 pub const pwr6x = Cpu{
773 .name = "pwr6x",772 .name = "pwr6x",
774 .llvm_name = "pwr6x",773 .llvm_name = "pwr6x",
775 .features = featureSet(&all_features, &[_]Feature{774 .features = featureSet(&[_]Feature{
776 .@"64bit",775 .@"64bit",
777 .altivec,776 .altivec,
778 .cmpb,777 .cmpb,
...@@ -792,7 +791,7 @@ pub const cpu = struct {...@@ -792,7 +791,7 @@ pub const cpu = struct {
792 pub const pwr7 = Cpu{791 pub const pwr7 = Cpu{
793 .name = "pwr7",792 .name = "pwr7",
794 .llvm_name = "pwr7",793 .llvm_name = "pwr7",
795 .features = featureSet(&all_features, &[_]Feature{794 .features = featureSet(&[_]Feature{
796 .@"64bit",795 .@"64bit",
797 .altivec,796 .altivec,
798 .bpermd,797 .bpermd,
...@@ -820,7 +819,7 @@ pub const cpu = struct {...@@ -820,7 +819,7 @@ pub const cpu = struct {
820 pub const pwr8 = Cpu{819 pub const pwr8 = Cpu{
821 .name = "pwr8",820 .name = "pwr8",
822 .llvm_name = "pwr8",821 .llvm_name = "pwr8",
823 .features = featureSet(&all_features, &[_]Feature{822 .features = featureSet(&[_]Feature{
824 .@"64bit",823 .@"64bit",
825 .altivec,824 .altivec,
826 .bpermd,825 .bpermd,
...@@ -855,7 +854,7 @@ pub const cpu = struct {...@@ -855,7 +854,7 @@ pub const cpu = struct {
855 pub const pwr9 = Cpu{854 pub const pwr9 = Cpu{
856 .name = "pwr9",855 .name = "pwr9",
857 .llvm_name = "pwr9",856 .llvm_name = "pwr9",
858 .features = featureSet(&all_features, &[_]Feature{857 .features = featureSet(&[_]Feature{
859 .@"64bit",858 .@"64bit",
860 .altivec,859 .altivec,
861 .bpermd,860 .bpermd,
lib/std/target/riscv.zig+12-13
...@@ -21,50 +21,49 @@ pub const all_features = blk: {...@@ -21,50 +21,49 @@ pub const all_features = blk: {
21 result[@enumToInt(Feature.@"64bit")] = .{21 result[@enumToInt(Feature.@"64bit")] = .{
22 .llvm_name = "64bit",22 .llvm_name = "64bit",
23 .description = "Implements RV64",23 .description = "Implements RV64",
24 .dependencies = sparseFeatureSet(&[_]Feature{}),24 .dependencies = featureSet(&[_]Feature{}),
25 };25 };
26 result[@enumToInt(Feature.a)] = .{26 result[@enumToInt(Feature.a)] = .{
27 .llvm_name = "a",27 .llvm_name = "a",
28 .description = "'A' (Atomic Instructions)",28 .description = "'A' (Atomic Instructions)",
29 .dependencies = sparseFeatureSet(&[_]Feature{}),29 .dependencies = featureSet(&[_]Feature{}),
30 };30 };
31 result[@enumToInt(Feature.c)] = .{31 result[@enumToInt(Feature.c)] = .{
32 .llvm_name = "c",32 .llvm_name = "c",
33 .description = "'C' (Compressed Instructions)",33 .description = "'C' (Compressed Instructions)",
34 .dependencies = sparseFeatureSet(&[_]Feature{}),34 .dependencies = featureSet(&[_]Feature{}),
35 };35 };
36 result[@enumToInt(Feature.d)] = .{36 result[@enumToInt(Feature.d)] = .{
37 .llvm_name = "d",37 .llvm_name = "d",
38 .description = "'D' (Double-Precision Floating-Point)",38 .description = "'D' (Double-Precision Floating-Point)",
39 .dependencies = sparseFeatureSet(&[_]Feature{39 .dependencies = featureSet(&[_]Feature{
40 .f,40 .f,
41 }),41 }),
42 };42 };
43 result[@enumToInt(Feature.e)] = .{43 result[@enumToInt(Feature.e)] = .{
44 .llvm_name = "e",44 .llvm_name = "e",
45 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",45 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
46 .dependencies = sparseFeatureSet(&[_]Feature{}),46 .dependencies = featureSet(&[_]Feature{}),
47 };47 };
48 result[@enumToInt(Feature.f)] = .{48 result[@enumToInt(Feature.f)] = .{
49 .llvm_name = "f",49 .llvm_name = "f",
50 .description = "'F' (Single-Precision Floating-Point)",50 .description = "'F' (Single-Precision Floating-Point)",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),51 .dependencies = featureSet(&[_]Feature{}),
52 };52 };
53 result[@enumToInt(Feature.m)] = .{53 result[@enumToInt(Feature.m)] = .{
54 .llvm_name = "m",54 .llvm_name = "m",
55 .description = "'M' (Integer Multiplication and Division)",55 .description = "'M' (Integer Multiplication and Division)",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),56 .dependencies = featureSet(&[_]Feature{}),
57 };57 };
58 result[@enumToInt(Feature.relax)] = .{58 result[@enumToInt(Feature.relax)] = .{
59 .llvm_name = "relax",59 .llvm_name = "relax",
60 .description = "Enable Linker relaxation.",60 .description = "Enable Linker relaxation.",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),61 .dependencies = featureSet(&[_]Feature{}),
62 };62 };
63 const ti = @typeInfo(Feature);63 const ti = @typeInfo(Feature);
64 for (result) |*elem, i| {64 for (result) |*elem, i| {
65 elem.index = i;65 elem.index = i;
66 elem.name = ti.Enum.fields[i].name;66 elem.name = ti.Enum.fields[i].name;
67 elem.dependencies.initAsDependencies(i, &result);
68 }67 }
69 break :blk result;68 break :blk result;
70};69};
...@@ -73,12 +72,12 @@ pub const cpu = struct {...@@ -73,12 +72,12 @@ pub const cpu = struct {
73 pub const generic_rv32 = Cpu{72 pub const generic_rv32 = Cpu{
74 .name = "generic_rv32",73 .name = "generic_rv32",
75 .llvm_name = "generic-rv32",74 .llvm_name = "generic-rv32",
76 .features = featureSet(&all_features, &[_]Feature{}),75 .features = featureSet(&[_]Feature{}),
77 };76 };
78 pub const generic_rv64 = Cpu{77 pub const generic_rv64 = Cpu{
79 .name = "generic_rv64",78 .name = "generic_rv64",
80 .llvm_name = "generic-rv64",79 .llvm_name = "generic-rv64",
81 .features = featureSet(&all_features, &[_]Feature{80 .features = featureSet(&[_]Feature{
82 .@"64bit",81 .@"64bit",
83 }),82 }),
84 };83 };
...@@ -92,7 +91,7 @@ pub const all_cpus = &[_]*const Cpu{...@@ -92,7 +91,7 @@ pub const all_cpus = &[_]*const Cpu{
92 &cpu.generic_rv64,91 &cpu.generic_rv64,
93};92};
9493
95pub const baseline_32_features = featureSet(&all_features, &[_]Feature{94pub const baseline_32_features = featureSet(&[_]Feature{
96 .a,95 .a,
97 .c,96 .c,
98 .d,97 .d,
...@@ -101,7 +100,7 @@ pub const baseline_32_features = featureSet(&all_features, &[_]Feature{...@@ -101,7 +100,7 @@ pub const baseline_32_features = featureSet(&all_features, &[_]Feature{
101 .relax,100 .relax,
102});101});
103102
104pub const baseline_64_features = featureSet(&all_features, &[_]Feature{103pub const baseline_64_features = featureSet(&[_]Feature{
105 .@"64bit",104 .@"64bit",
106 .a,105 .a,
107 .c,106 .c,
lib/std/target/sparc.zig+59-60
...@@ -32,103 +32,102 @@ pub const all_features = blk: {...@@ -32,103 +32,102 @@ pub const all_features = blk: {
32 result[@enumToInt(Feature.deprecated_v8)] = .{32 result[@enumToInt(Feature.deprecated_v8)] = .{
33 .llvm_name = "deprecated-v8",33 .llvm_name = "deprecated-v8",
34 .description = "Enable deprecated V8 instructions in V9 mode",34 .description = "Enable deprecated V8 instructions in V9 mode",
35 .dependencies = sparseFeatureSet(&[_]Feature{}),35 .dependencies = featureSet(&[_]Feature{}),
36 };36 };
37 result[@enumToInt(Feature.detectroundchange)] = .{37 result[@enumToInt(Feature.detectroundchange)] = .{
38 .llvm_name = "detectroundchange",38 .llvm_name = "detectroundchange",
39 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",39 .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{}),
41 };41 };
42 result[@enumToInt(Feature.fixallfdivsqrt)] = .{42 result[@enumToInt(Feature.fixallfdivsqrt)] = .{
43 .llvm_name = "fixallfdivsqrt",43 .llvm_name = "fixallfdivsqrt",
44 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",44 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
45 .dependencies = sparseFeatureSet(&[_]Feature{}),45 .dependencies = featureSet(&[_]Feature{}),
46 };46 };
47 result[@enumToInt(Feature.hard_quad_float)] = .{47 result[@enumToInt(Feature.hard_quad_float)] = .{
48 .llvm_name = "hard-quad-float",48 .llvm_name = "hard-quad-float",
49 .description = "Enable quad-word floating point instructions",49 .description = "Enable quad-word floating point instructions",
50 .dependencies = sparseFeatureSet(&[_]Feature{}),50 .dependencies = featureSet(&[_]Feature{}),
51 };51 };
52 result[@enumToInt(Feature.hasleoncasa)] = .{52 result[@enumToInt(Feature.hasleoncasa)] = .{
53 .llvm_name = "hasleoncasa",53 .llvm_name = "hasleoncasa",
54 .description = "Enable CASA instruction for LEON3 and LEON4 processors",54 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
55 .dependencies = sparseFeatureSet(&[_]Feature{}),55 .dependencies = featureSet(&[_]Feature{}),
56 };56 };
57 result[@enumToInt(Feature.hasumacsmac)] = .{57 result[@enumToInt(Feature.hasumacsmac)] = .{
58 .llvm_name = "hasumacsmac",58 .llvm_name = "hasumacsmac",
59 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",59 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
60 .dependencies = sparseFeatureSet(&[_]Feature{}),60 .dependencies = featureSet(&[_]Feature{}),
61 };61 };
62 result[@enumToInt(Feature.insertnopload)] = .{62 result[@enumToInt(Feature.insertnopload)] = .{
63 .llvm_name = "insertnopload",63 .llvm_name = "insertnopload",
64 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",64 .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{}),
66 };66 };
67 result[@enumToInt(Feature.leon)] = .{67 result[@enumToInt(Feature.leon)] = .{
68 .llvm_name = "leon",68 .llvm_name = "leon",
69 .description = "Enable LEON extensions",69 .description = "Enable LEON extensions",
70 .dependencies = sparseFeatureSet(&[_]Feature{}),70 .dependencies = featureSet(&[_]Feature{}),
71 };71 };
72 result[@enumToInt(Feature.leoncyclecounter)] = .{72 result[@enumToInt(Feature.leoncyclecounter)] = .{
73 .llvm_name = "leoncyclecounter",73 .llvm_name = "leoncyclecounter",
74 .description = "Use the Leon cycle counter register",74 .description = "Use the Leon cycle counter register",
75 .dependencies = sparseFeatureSet(&[_]Feature{}),75 .dependencies = featureSet(&[_]Feature{}),
76 };76 };
77 result[@enumToInt(Feature.leonpwrpsr)] = .{77 result[@enumToInt(Feature.leonpwrpsr)] = .{
78 .llvm_name = "leonpwrpsr",78 .llvm_name = "leonpwrpsr",
79 .description = "Enable the PWRPSR instruction",79 .description = "Enable the PWRPSR instruction",
80 .dependencies = sparseFeatureSet(&[_]Feature{}),80 .dependencies = featureSet(&[_]Feature{}),
81 };81 };
82 result[@enumToInt(Feature.no_fmuls)] = .{82 result[@enumToInt(Feature.no_fmuls)] = .{
83 .llvm_name = "no-fmuls",83 .llvm_name = "no-fmuls",
84 .description = "Disable the fmuls instruction.",84 .description = "Disable the fmuls instruction.",
85 .dependencies = sparseFeatureSet(&[_]Feature{}),85 .dependencies = featureSet(&[_]Feature{}),
86 };86 };
87 result[@enumToInt(Feature.no_fsmuld)] = .{87 result[@enumToInt(Feature.no_fsmuld)] = .{
88 .llvm_name = "no-fsmuld",88 .llvm_name = "no-fsmuld",
89 .description = "Disable the fsmuld instruction.",89 .description = "Disable the fsmuld instruction.",
90 .dependencies = sparseFeatureSet(&[_]Feature{}),90 .dependencies = featureSet(&[_]Feature{}),
91 };91 };
92 result[@enumToInt(Feature.popc)] = .{92 result[@enumToInt(Feature.popc)] = .{
93 .llvm_name = "popc",93 .llvm_name = "popc",
94 .description = "Use the popc (population count) instruction",94 .description = "Use the popc (population count) instruction",
95 .dependencies = sparseFeatureSet(&[_]Feature{}),95 .dependencies = featureSet(&[_]Feature{}),
96 };96 };
97 result[@enumToInt(Feature.soft_float)] = .{97 result[@enumToInt(Feature.soft_float)] = .{
98 .llvm_name = "soft-float",98 .llvm_name = "soft-float",
99 .description = "Use software emulation for floating point",99 .description = "Use software emulation for floating point",
100 .dependencies = sparseFeatureSet(&[_]Feature{}),100 .dependencies = featureSet(&[_]Feature{}),
101 };101 };
102 result[@enumToInt(Feature.soft_mul_div)] = .{102 result[@enumToInt(Feature.soft_mul_div)] = .{
103 .llvm_name = "soft-mul-div",103 .llvm_name = "soft-mul-div",
104 .description = "Use software emulation for integer multiply and divide",104 .description = "Use software emulation for integer multiply and divide",
105 .dependencies = sparseFeatureSet(&[_]Feature{}),105 .dependencies = featureSet(&[_]Feature{}),
106 };106 };
107 result[@enumToInt(Feature.v9)] = .{107 result[@enumToInt(Feature.v9)] = .{
108 .llvm_name = "v9",108 .llvm_name = "v9",
109 .description = "Enable SPARC-V9 instructions",109 .description = "Enable SPARC-V9 instructions",
110 .dependencies = sparseFeatureSet(&[_]Feature{}),110 .dependencies = featureSet(&[_]Feature{}),
111 };111 };
112 result[@enumToInt(Feature.vis)] = .{112 result[@enumToInt(Feature.vis)] = .{
113 .llvm_name = "vis",113 .llvm_name = "vis",
114 .description = "Enable UltraSPARC Visual Instruction Set extensions",114 .description = "Enable UltraSPARC Visual Instruction Set extensions",
115 .dependencies = sparseFeatureSet(&[_]Feature{}),115 .dependencies = featureSet(&[_]Feature{}),
116 };116 };
117 result[@enumToInt(Feature.vis2)] = .{117 result[@enumToInt(Feature.vis2)] = .{
118 .llvm_name = "vis2",118 .llvm_name = "vis2",
119 .description = "Enable Visual Instruction Set extensions II",119 .description = "Enable Visual Instruction Set extensions II",
120 .dependencies = sparseFeatureSet(&[_]Feature{}),120 .dependencies = featureSet(&[_]Feature{}),
121 };121 };
122 result[@enumToInt(Feature.vis3)] = .{122 result[@enumToInt(Feature.vis3)] = .{
123 .llvm_name = "vis3",123 .llvm_name = "vis3",
124 .description = "Enable Visual Instruction Set extensions III",124 .description = "Enable Visual Instruction Set extensions III",
125 .dependencies = sparseFeatureSet(&[_]Feature{}),125 .dependencies = featureSet(&[_]Feature{}),
126 };126 };
127 const ti = @typeInfo(Feature);127 const ti = @typeInfo(Feature);
128 for (result) |*elem, i| {128 for (result) |*elem, i| {
129 elem.index = i;129 elem.index = i;
130 elem.name = ti.Enum.fields[i].name;130 elem.name = ti.Enum.fields[i].name;
131 elem.dependencies.initAsDependencies(i, &result);
132 }131 }
133 break :blk result;132 break :blk result;
134};133};
...@@ -137,7 +136,7 @@ pub const cpu = struct {...@@ -137,7 +136,7 @@ pub const cpu = struct {
137 pub const at697e = Cpu{136 pub const at697e = Cpu{
138 .name = "at697e",137 .name = "at697e",
139 .llvm_name = "at697e",138 .llvm_name = "at697e",
140 .features = featureSet(&all_features, &[_]Feature{139 .features = featureSet(&[_]Feature{
141 .insertnopload,140 .insertnopload,
142 .leon,141 .leon,
143 }),142 }),
...@@ -145,7 +144,7 @@ pub const cpu = struct {...@@ -145,7 +144,7 @@ pub const cpu = struct {
145 pub const at697f = Cpu{144 pub const at697f = Cpu{
146 .name = "at697f",145 .name = "at697f",
147 .llvm_name = "at697f",146 .llvm_name = "at697f",
148 .features = featureSet(&all_features, &[_]Feature{147 .features = featureSet(&[_]Feature{
149 .insertnopload,148 .insertnopload,
150 .leon,149 .leon,
151 }),150 }),
...@@ -153,17 +152,17 @@ pub const cpu = struct {...@@ -153,17 +152,17 @@ pub const cpu = struct {
153 pub const f934 = Cpu{152 pub const f934 = Cpu{
154 .name = "f934",153 .name = "f934",
155 .llvm_name = "f934",154 .llvm_name = "f934",
156 .features = featureSet(&all_features, &[_]Feature{}),155 .features = featureSet(&[_]Feature{}),
157 };156 };
158 pub const generic = Cpu{157 pub const generic = Cpu{
159 .name = "generic",158 .name = "generic",
160 .llvm_name = "generic",159 .llvm_name = "generic",
161 .features = featureSet(&all_features, &[_]Feature{}),160 .features = featureSet(&[_]Feature{}),
162 };161 };
163 pub const gr712rc = Cpu{162 pub const gr712rc = Cpu{
164 .name = "gr712rc",163 .name = "gr712rc",
165 .llvm_name = "gr712rc",164 .llvm_name = "gr712rc",
166 .features = featureSet(&all_features, &[_]Feature{165 .features = featureSet(&[_]Feature{
167 .hasleoncasa,166 .hasleoncasa,
168 .leon,167 .leon,
169 }),168 }),
...@@ -171,7 +170,7 @@ pub const cpu = struct {...@@ -171,7 +170,7 @@ pub const cpu = struct {
171 pub const gr740 = Cpu{170 pub const gr740 = Cpu{
172 .name = "gr740",171 .name = "gr740",
173 .llvm_name = "gr740",172 .llvm_name = "gr740",
174 .features = featureSet(&all_features, &[_]Feature{173 .features = featureSet(&[_]Feature{
175 .hasleoncasa,174 .hasleoncasa,
176 .hasumacsmac,175 .hasumacsmac,
177 .leon,176 .leon,
...@@ -182,19 +181,19 @@ pub const cpu = struct {...@@ -182,19 +181,19 @@ pub const cpu = struct {
182 pub const hypersparc = Cpu{181 pub const hypersparc = Cpu{
183 .name = "hypersparc",182 .name = "hypersparc",
184 .llvm_name = "hypersparc",183 .llvm_name = "hypersparc",
185 .features = featureSet(&all_features, &[_]Feature{}),184 .features = featureSet(&[_]Feature{}),
186 };185 };
187 pub const leon2 = Cpu{186 pub const leon2 = Cpu{
188 .name = "leon2",187 .name = "leon2",
189 .llvm_name = "leon2",188 .llvm_name = "leon2",
190 .features = featureSet(&all_features, &[_]Feature{189 .features = featureSet(&[_]Feature{
191 .leon,190 .leon,
192 }),191 }),
193 };192 };
194 pub const leon3 = Cpu{193 pub const leon3 = Cpu{
195 .name = "leon3",194 .name = "leon3",
196 .llvm_name = "leon3",195 .llvm_name = "leon3",
197 .features = featureSet(&all_features, &[_]Feature{196 .features = featureSet(&[_]Feature{
198 .hasumacsmac,197 .hasumacsmac,
199 .leon,198 .leon,
200 }),199 }),
...@@ -202,7 +201,7 @@ pub const cpu = struct {...@@ -202,7 +201,7 @@ pub const cpu = struct {
202 pub const leon4 = Cpu{201 pub const leon4 = Cpu{
203 .name = "leon4",202 .name = "leon4",
204 .llvm_name = "leon4",203 .llvm_name = "leon4",
205 .features = featureSet(&all_features, &[_]Feature{204 .features = featureSet(&[_]Feature{
206 .hasleoncasa,205 .hasleoncasa,
207 .hasumacsmac,206 .hasumacsmac,
208 .leon,207 .leon,
...@@ -211,7 +210,7 @@ pub const cpu = struct {...@@ -211,7 +210,7 @@ pub const cpu = struct {
211 pub const ma2080 = Cpu{210 pub const ma2080 = Cpu{
212 .name = "ma2080",211 .name = "ma2080",
213 .llvm_name = "ma2080",212 .llvm_name = "ma2080",
214 .features = featureSet(&all_features, &[_]Feature{213 .features = featureSet(&[_]Feature{
215 .hasleoncasa,214 .hasleoncasa,
216 .leon,215 .leon,
217 }),216 }),
...@@ -219,7 +218,7 @@ pub const cpu = struct {...@@ -219,7 +218,7 @@ pub const cpu = struct {
219 pub const ma2085 = Cpu{218 pub const ma2085 = Cpu{
220 .name = "ma2085",219 .name = "ma2085",
221 .llvm_name = "ma2085",220 .llvm_name = "ma2085",
222 .features = featureSet(&all_features, &[_]Feature{221 .features = featureSet(&[_]Feature{
223 .hasleoncasa,222 .hasleoncasa,
224 .leon,223 .leon,
225 }),224 }),
...@@ -227,7 +226,7 @@ pub const cpu = struct {...@@ -227,7 +226,7 @@ pub const cpu = struct {
227 pub const ma2100 = Cpu{226 pub const ma2100 = Cpu{
228 .name = "ma2100",227 .name = "ma2100",
229 .llvm_name = "ma2100",228 .llvm_name = "ma2100",
230 .features = featureSet(&all_features, &[_]Feature{229 .features = featureSet(&[_]Feature{
231 .hasleoncasa,230 .hasleoncasa,
232 .leon,231 .leon,
233 }),232 }),
...@@ -235,7 +234,7 @@ pub const cpu = struct {...@@ -235,7 +234,7 @@ pub const cpu = struct {
235 pub const ma2150 = Cpu{234 pub const ma2150 = Cpu{
236 .name = "ma2150",235 .name = "ma2150",
237 .llvm_name = "ma2150",236 .llvm_name = "ma2150",
238 .features = featureSet(&all_features, &[_]Feature{237 .features = featureSet(&[_]Feature{
239 .hasleoncasa,238 .hasleoncasa,
240 .leon,239 .leon,
241 }),240 }),
...@@ -243,7 +242,7 @@ pub const cpu = struct {...@@ -243,7 +242,7 @@ pub const cpu = struct {
243 pub const ma2155 = Cpu{242 pub const ma2155 = Cpu{
244 .name = "ma2155",243 .name = "ma2155",
245 .llvm_name = "ma2155",244 .llvm_name = "ma2155",
246 .features = featureSet(&all_features, &[_]Feature{245 .features = featureSet(&[_]Feature{
247 .hasleoncasa,246 .hasleoncasa,
248 .leon,247 .leon,
249 }),248 }),
...@@ -251,7 +250,7 @@ pub const cpu = struct {...@@ -251,7 +250,7 @@ pub const cpu = struct {
251 pub const ma2450 = Cpu{250 pub const ma2450 = Cpu{
252 .name = "ma2450",251 .name = "ma2450",
253 .llvm_name = "ma2450",252 .llvm_name = "ma2450",
254 .features = featureSet(&all_features, &[_]Feature{253 .features = featureSet(&[_]Feature{
255 .hasleoncasa,254 .hasleoncasa,
256 .leon,255 .leon,
257 }),256 }),
...@@ -259,7 +258,7 @@ pub const cpu = struct {...@@ -259,7 +258,7 @@ pub const cpu = struct {
259 pub const ma2455 = Cpu{258 pub const ma2455 = Cpu{
260 .name = "ma2455",259 .name = "ma2455",
261 .llvm_name = "ma2455",260 .llvm_name = "ma2455",
262 .features = featureSet(&all_features, &[_]Feature{261 .features = featureSet(&[_]Feature{
263 .hasleoncasa,262 .hasleoncasa,
264 .leon,263 .leon,
265 }),264 }),
...@@ -267,7 +266,7 @@ pub const cpu = struct {...@@ -267,7 +266,7 @@ pub const cpu = struct {
267 pub const ma2480 = Cpu{266 pub const ma2480 = Cpu{
268 .name = "ma2480",267 .name = "ma2480",
269 .llvm_name = "ma2480",268 .llvm_name = "ma2480",
270 .features = featureSet(&all_features, &[_]Feature{269 .features = featureSet(&[_]Feature{
271 .hasleoncasa,270 .hasleoncasa,
272 .leon,271 .leon,
273 }),272 }),
...@@ -275,7 +274,7 @@ pub const cpu = struct {...@@ -275,7 +274,7 @@ pub const cpu = struct {
275 pub const ma2485 = Cpu{274 pub const ma2485 = Cpu{
276 .name = "ma2485",275 .name = "ma2485",
277 .llvm_name = "ma2485",276 .llvm_name = "ma2485",
278 .features = featureSet(&all_features, &[_]Feature{277 .features = featureSet(&[_]Feature{
279 .hasleoncasa,278 .hasleoncasa,
280 .leon,279 .leon,
281 }),280 }),
...@@ -283,7 +282,7 @@ pub const cpu = struct {...@@ -283,7 +282,7 @@ pub const cpu = struct {
283 pub const ma2x5x = Cpu{282 pub const ma2x5x = Cpu{
284 .name = "ma2x5x",283 .name = "ma2x5x",
285 .llvm_name = "ma2x5x",284 .llvm_name = "ma2x5x",
286 .features = featureSet(&all_features, &[_]Feature{285 .features = featureSet(&[_]Feature{
287 .hasleoncasa,286 .hasleoncasa,
288 .leon,287 .leon,
289 }),288 }),
...@@ -291,7 +290,7 @@ pub const cpu = struct {...@@ -291,7 +290,7 @@ pub const cpu = struct {
291 pub const ma2x8x = Cpu{290 pub const ma2x8x = Cpu{
292 .name = "ma2x8x",291 .name = "ma2x8x",
293 .llvm_name = "ma2x8x",292 .llvm_name = "ma2x8x",
294 .features = featureSet(&all_features, &[_]Feature{293 .features = featureSet(&[_]Feature{
295 .hasleoncasa,294 .hasleoncasa,
296 .leon,295 .leon,
297 }),296 }),
...@@ -299,7 +298,7 @@ pub const cpu = struct {...@@ -299,7 +298,7 @@ pub const cpu = struct {
299 pub const myriad2 = Cpu{298 pub const myriad2 = Cpu{
300 .name = "myriad2",299 .name = "myriad2",
301 .llvm_name = "myriad2",300 .llvm_name = "myriad2",
302 .features = featureSet(&all_features, &[_]Feature{301 .features = featureSet(&[_]Feature{
303 .hasleoncasa,302 .hasleoncasa,
304 .leon,303 .leon,
305 }),304 }),
...@@ -307,7 +306,7 @@ pub const cpu = struct {...@@ -307,7 +306,7 @@ pub const cpu = struct {
307 pub const myriad2_1 = Cpu{306 pub const myriad2_1 = Cpu{
308 .name = "myriad2_1",307 .name = "myriad2_1",
309 .llvm_name = "myriad2.1",308 .llvm_name = "myriad2.1",
310 .features = featureSet(&all_features, &[_]Feature{309 .features = featureSet(&[_]Feature{
311 .hasleoncasa,310 .hasleoncasa,
312 .leon,311 .leon,
313 }),312 }),
...@@ -315,7 +314,7 @@ pub const cpu = struct {...@@ -315,7 +314,7 @@ pub const cpu = struct {
315 pub const myriad2_2 = Cpu{314 pub const myriad2_2 = Cpu{
316 .name = "myriad2_2",315 .name = "myriad2_2",
317 .llvm_name = "myriad2.2",316 .llvm_name = "myriad2.2",
318 .features = featureSet(&all_features, &[_]Feature{317 .features = featureSet(&[_]Feature{
319 .hasleoncasa,318 .hasleoncasa,
320 .leon,319 .leon,
321 }),320 }),
...@@ -323,7 +322,7 @@ pub const cpu = struct {...@@ -323,7 +322,7 @@ pub const cpu = struct {
323 pub const myriad2_3 = Cpu{322 pub const myriad2_3 = Cpu{
324 .name = "myriad2_3",323 .name = "myriad2_3",
325 .llvm_name = "myriad2.3",324 .llvm_name = "myriad2.3",
326 .features = featureSet(&all_features, &[_]Feature{325 .features = featureSet(&[_]Feature{
327 .hasleoncasa,326 .hasleoncasa,
328 .leon,327 .leon,
329 }),328 }),
...@@ -331,7 +330,7 @@ pub const cpu = struct {...@@ -331,7 +330,7 @@ pub const cpu = struct {
331 pub const niagara = Cpu{330 pub const niagara = Cpu{
332 .name = "niagara",331 .name = "niagara",
333 .llvm_name = "niagara",332 .llvm_name = "niagara",
334 .features = featureSet(&all_features, &[_]Feature{333 .features = featureSet(&[_]Feature{
335 .deprecated_v8,334 .deprecated_v8,
336 .v9,335 .v9,
337 .vis,336 .vis,
...@@ -341,7 +340,7 @@ pub const cpu = struct {...@@ -341,7 +340,7 @@ pub const cpu = struct {
341 pub const niagara2 = Cpu{340 pub const niagara2 = Cpu{
342 .name = "niagara2",341 .name = "niagara2",
343 .llvm_name = "niagara2",342 .llvm_name = "niagara2",
344 .features = featureSet(&all_features, &[_]Feature{343 .features = featureSet(&[_]Feature{
345 .deprecated_v8,344 .deprecated_v8,
346 .popc,345 .popc,
347 .v9,346 .v9,
...@@ -352,7 +351,7 @@ pub const cpu = struct {...@@ -352,7 +351,7 @@ pub const cpu = struct {
352 pub const niagara3 = Cpu{351 pub const niagara3 = Cpu{
353 .name = "niagara3",352 .name = "niagara3",
354 .llvm_name = "niagara3",353 .llvm_name = "niagara3",
355 .features = featureSet(&all_features, &[_]Feature{354 .features = featureSet(&[_]Feature{
356 .deprecated_v8,355 .deprecated_v8,
357 .popc,356 .popc,
358 .v9,357 .v9,
...@@ -363,7 +362,7 @@ pub const cpu = struct {...@@ -363,7 +362,7 @@ pub const cpu = struct {
363 pub const niagara4 = Cpu{362 pub const niagara4 = Cpu{
364 .name = "niagara4",363 .name = "niagara4",
365 .llvm_name = "niagara4",364 .llvm_name = "niagara4",
366 .features = featureSet(&all_features, &[_]Feature{365 .features = featureSet(&[_]Feature{
367 .deprecated_v8,366 .deprecated_v8,
368 .popc,367 .popc,
369 .v9,368 .v9,
...@@ -375,32 +374,32 @@ pub const cpu = struct {...@@ -375,32 +374,32 @@ pub const cpu = struct {
375 pub const sparclet = Cpu{374 pub const sparclet = Cpu{
376 .name = "sparclet",375 .name = "sparclet",
377 .llvm_name = "sparclet",376 .llvm_name = "sparclet",
378 .features = featureSet(&all_features, &[_]Feature{}),377 .features = featureSet(&[_]Feature{}),
379 };378 };
380 pub const sparclite = Cpu{379 pub const sparclite = Cpu{
381 .name = "sparclite",380 .name = "sparclite",
382 .llvm_name = "sparclite",381 .llvm_name = "sparclite",
383 .features = featureSet(&all_features, &[_]Feature{}),382 .features = featureSet(&[_]Feature{}),
384 };383 };
385 pub const sparclite86x = Cpu{384 pub const sparclite86x = Cpu{
386 .name = "sparclite86x",385 .name = "sparclite86x",
387 .llvm_name = "sparclite86x",386 .llvm_name = "sparclite86x",
388 .features = featureSet(&all_features, &[_]Feature{}),387 .features = featureSet(&[_]Feature{}),
389 };388 };
390 pub const supersparc = Cpu{389 pub const supersparc = Cpu{
391 .name = "supersparc",390 .name = "supersparc",
392 .llvm_name = "supersparc",391 .llvm_name = "supersparc",
393 .features = featureSet(&all_features, &[_]Feature{}),392 .features = featureSet(&[_]Feature{}),
394 };393 };
395 pub const tsc701 = Cpu{394 pub const tsc701 = Cpu{
396 .name = "tsc701",395 .name = "tsc701",
397 .llvm_name = "tsc701",396 .llvm_name = "tsc701",
398 .features = featureSet(&all_features, &[_]Feature{}),397 .features = featureSet(&[_]Feature{}),
399 };398 };
400 pub const ultrasparc = Cpu{399 pub const ultrasparc = Cpu{
401 .name = "ultrasparc",400 .name = "ultrasparc",
402 .llvm_name = "ultrasparc",401 .llvm_name = "ultrasparc",
403 .features = featureSet(&all_features, &[_]Feature{402 .features = featureSet(&[_]Feature{
404 .deprecated_v8,403 .deprecated_v8,
405 .v9,404 .v9,
406 .vis,405 .vis,
...@@ -409,7 +408,7 @@ pub const cpu = struct {...@@ -409,7 +408,7 @@ pub const cpu = struct {
409 pub const ultrasparc3 = Cpu{408 pub const ultrasparc3 = Cpu{
410 .name = "ultrasparc3",409 .name = "ultrasparc3",
411 .llvm_name = "ultrasparc3",410 .llvm_name = "ultrasparc3",
412 .features = featureSet(&all_features, &[_]Feature{411 .features = featureSet(&[_]Feature{
413 .deprecated_v8,412 .deprecated_v8,
414 .v9,413 .v9,
415 .vis,414 .vis,
...@@ -419,7 +418,7 @@ pub const cpu = struct {...@@ -419,7 +418,7 @@ pub const cpu = struct {
419 pub const ut699 = Cpu{418 pub const ut699 = Cpu{
420 .name = "ut699",419 .name = "ut699",
421 .llvm_name = "ut699",420 .llvm_name = "ut699",
422 .features = featureSet(&all_features, &[_]Feature{421 .features = featureSet(&[_]Feature{
423 .fixallfdivsqrt,422 .fixallfdivsqrt,
424 .insertnopload,423 .insertnopload,
425 .leon,424 .leon,
...@@ -430,7 +429,7 @@ pub const cpu = struct {...@@ -430,7 +429,7 @@ pub const cpu = struct {
430 pub const v7 = Cpu{429 pub const v7 = Cpu{
431 .name = "v7",430 .name = "v7",
432 .llvm_name = "v7",431 .llvm_name = "v7",
433 .features = featureSet(&all_features, &[_]Feature{432 .features = featureSet(&[_]Feature{
434 .no_fsmuld,433 .no_fsmuld,
435 .soft_mul_div,434 .soft_mul_div,
436 }),435 }),
...@@ -438,12 +437,12 @@ pub const cpu = struct {...@@ -438,12 +437,12 @@ pub const cpu = struct {
438 pub const v8 = Cpu{437 pub const v8 = Cpu{
439 .name = "v8",438 .name = "v8",
440 .llvm_name = "v8",439 .llvm_name = "v8",
441 .features = featureSet(&all_features, &[_]Feature{}),440 .features = featureSet(&[_]Feature{}),
442 };441 };
443 pub const v9 = Cpu{442 pub const v9 = Cpu{
444 .name = "v9",443 .name = "v9",
445 .llvm_name = "v9",444 .llvm_name = "v9",
446 .features = featureSet(&all_features, &[_]Feature{445 .features = featureSet(&[_]Feature{
447 .v9,446 .v9,
448 }),447 }),
449 };448 };
lib/std/target/systemz.zig+47-48
...@@ -48,183 +48,182 @@ pub const all_features = blk: {...@@ -48,183 +48,182 @@ pub const all_features = blk: {
48 result[@enumToInt(Feature.deflate_conversion)] = .{48 result[@enumToInt(Feature.deflate_conversion)] = .{
49 .llvm_name = "deflate-conversion",49 .llvm_name = "deflate-conversion",
50 .description = "Assume that the deflate-conversion facility is installed",50 .description = "Assume that the deflate-conversion facility is installed",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),51 .dependencies = featureSet(&[_]Feature{}),
52 };52 };
53 result[@enumToInt(Feature.dfp_packed_conversion)] = .{53 result[@enumToInt(Feature.dfp_packed_conversion)] = .{
54 .llvm_name = "dfp-packed-conversion",54 .llvm_name = "dfp-packed-conversion",
55 .description = "Assume that the DFP packed-conversion facility is installed",55 .description = "Assume that the DFP packed-conversion facility is installed",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),56 .dependencies = featureSet(&[_]Feature{}),
57 };57 };
58 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{58 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{
59 .llvm_name = "dfp-zoned-conversion",59 .llvm_name = "dfp-zoned-conversion",
60 .description = "Assume that the DFP zoned-conversion facility is installed",60 .description = "Assume that the DFP zoned-conversion facility is installed",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),61 .dependencies = featureSet(&[_]Feature{}),
62 };62 };
63 result[@enumToInt(Feature.distinct_ops)] = .{63 result[@enumToInt(Feature.distinct_ops)] = .{
64 .llvm_name = "distinct-ops",64 .llvm_name = "distinct-ops",
65 .description = "Assume that the distinct-operands facility is installed",65 .description = "Assume that the distinct-operands facility is installed",
66 .dependencies = sparseFeatureSet(&[_]Feature{}),66 .dependencies = featureSet(&[_]Feature{}),
67 };67 };
68 result[@enumToInt(Feature.enhanced_dat_2)] = .{68 result[@enumToInt(Feature.enhanced_dat_2)] = .{
69 .llvm_name = "enhanced-dat-2",69 .llvm_name = "enhanced-dat-2",
70 .description = "Assume that the enhanced-DAT facility 2 is installed",70 .description = "Assume that the enhanced-DAT facility 2 is installed",
71 .dependencies = sparseFeatureSet(&[_]Feature{}),71 .dependencies = featureSet(&[_]Feature{}),
72 };72 };
73 result[@enumToInt(Feature.enhanced_sort)] = .{73 result[@enumToInt(Feature.enhanced_sort)] = .{
74 .llvm_name = "enhanced-sort",74 .llvm_name = "enhanced-sort",
75 .description = "Assume that the enhanced-sort facility is installed",75 .description = "Assume that the enhanced-sort facility is installed",
76 .dependencies = sparseFeatureSet(&[_]Feature{}),76 .dependencies = featureSet(&[_]Feature{}),
77 };77 };
78 result[@enumToInt(Feature.execution_hint)] = .{78 result[@enumToInt(Feature.execution_hint)] = .{
79 .llvm_name = "execution-hint",79 .llvm_name = "execution-hint",
80 .description = "Assume that the execution-hint facility is installed",80 .description = "Assume that the execution-hint facility is installed",
81 .dependencies = sparseFeatureSet(&[_]Feature{}),81 .dependencies = featureSet(&[_]Feature{}),
82 };82 };
83 result[@enumToInt(Feature.fast_serialization)] = .{83 result[@enumToInt(Feature.fast_serialization)] = .{
84 .llvm_name = "fast-serialization",84 .llvm_name = "fast-serialization",
85 .description = "Assume that the fast-serialization facility is installed",85 .description = "Assume that the fast-serialization facility is installed",
86 .dependencies = sparseFeatureSet(&[_]Feature{}),86 .dependencies = featureSet(&[_]Feature{}),
87 };87 };
88 result[@enumToInt(Feature.fp_extension)] = .{88 result[@enumToInt(Feature.fp_extension)] = .{
89 .llvm_name = "fp-extension",89 .llvm_name = "fp-extension",
90 .description = "Assume that the floating-point extension facility is installed",90 .description = "Assume that the floating-point extension facility is installed",
91 .dependencies = sparseFeatureSet(&[_]Feature{}),91 .dependencies = featureSet(&[_]Feature{}),
92 };92 };
93 result[@enumToInt(Feature.guarded_storage)] = .{93 result[@enumToInt(Feature.guarded_storage)] = .{
94 .llvm_name = "guarded-storage",94 .llvm_name = "guarded-storage",
95 .description = "Assume that the guarded-storage facility is installed",95 .description = "Assume that the guarded-storage facility is installed",
96 .dependencies = sparseFeatureSet(&[_]Feature{}),96 .dependencies = featureSet(&[_]Feature{}),
97 };97 };
98 result[@enumToInt(Feature.high_word)] = .{98 result[@enumToInt(Feature.high_word)] = .{
99 .llvm_name = "high-word",99 .llvm_name = "high-word",
100 .description = "Assume that the high-word facility is installed",100 .description = "Assume that the high-word facility is installed",
101 .dependencies = sparseFeatureSet(&[_]Feature{}),101 .dependencies = featureSet(&[_]Feature{}),
102 };102 };
103 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{103 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{
104 .llvm_name = "insert-reference-bits-multiple",104 .llvm_name = "insert-reference-bits-multiple",
105 .description = "Assume that the insert-reference-bits-multiple facility is installed",105 .description = "Assume that the insert-reference-bits-multiple facility is installed",
106 .dependencies = sparseFeatureSet(&[_]Feature{}),106 .dependencies = featureSet(&[_]Feature{}),
107 };107 };
108 result[@enumToInt(Feature.interlocked_access1)] = .{108 result[@enumToInt(Feature.interlocked_access1)] = .{
109 .llvm_name = "interlocked-access1",109 .llvm_name = "interlocked-access1",
110 .description = "Assume that interlocked-access facility 1 is installed",110 .description = "Assume that interlocked-access facility 1 is installed",
111 .dependencies = sparseFeatureSet(&[_]Feature{}),111 .dependencies = featureSet(&[_]Feature{}),
112 };112 };
113 result[@enumToInt(Feature.load_and_trap)] = .{113 result[@enumToInt(Feature.load_and_trap)] = .{
114 .llvm_name = "load-and-trap",114 .llvm_name = "load-and-trap",
115 .description = "Assume that the load-and-trap facility is installed",115 .description = "Assume that the load-and-trap facility is installed",
116 .dependencies = sparseFeatureSet(&[_]Feature{}),116 .dependencies = featureSet(&[_]Feature{}),
117 };117 };
118 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{118 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{
119 .llvm_name = "load-and-zero-rightmost-byte",119 .llvm_name = "load-and-zero-rightmost-byte",
120 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",120 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
121 .dependencies = sparseFeatureSet(&[_]Feature{}),121 .dependencies = featureSet(&[_]Feature{}),
122 };122 };
123 result[@enumToInt(Feature.load_store_on_cond)] = .{123 result[@enumToInt(Feature.load_store_on_cond)] = .{
124 .llvm_name = "load-store-on-cond",124 .llvm_name = "load-store-on-cond",
125 .description = "Assume that the load/store-on-condition facility is installed",125 .description = "Assume that the load/store-on-condition facility is installed",
126 .dependencies = sparseFeatureSet(&[_]Feature{}),126 .dependencies = featureSet(&[_]Feature{}),
127 };127 };
128 result[@enumToInt(Feature.load_store_on_cond_2)] = .{128 result[@enumToInt(Feature.load_store_on_cond_2)] = .{
129 .llvm_name = "load-store-on-cond-2",129 .llvm_name = "load-store-on-cond-2",
130 .description = "Assume that the load/store-on-condition facility 2 is installed",130 .description = "Assume that the load/store-on-condition facility 2 is installed",
131 .dependencies = sparseFeatureSet(&[_]Feature{}),131 .dependencies = featureSet(&[_]Feature{}),
132 };132 };
133 result[@enumToInt(Feature.message_security_assist_extension3)] = .{133 result[@enumToInt(Feature.message_security_assist_extension3)] = .{
134 .llvm_name = "message-security-assist-extension3",134 .llvm_name = "message-security-assist-extension3",
135 .description = "Assume that the message-security-assist extension facility 3 is installed",135 .description = "Assume that the message-security-assist extension facility 3 is installed",
136 .dependencies = sparseFeatureSet(&[_]Feature{}),136 .dependencies = featureSet(&[_]Feature{}),
137 };137 };
138 result[@enumToInt(Feature.message_security_assist_extension4)] = .{138 result[@enumToInt(Feature.message_security_assist_extension4)] = .{
139 .llvm_name = "message-security-assist-extension4",139 .llvm_name = "message-security-assist-extension4",
140 .description = "Assume that the message-security-assist extension facility 4 is installed",140 .description = "Assume that the message-security-assist extension facility 4 is installed",
141 .dependencies = sparseFeatureSet(&[_]Feature{}),141 .dependencies = featureSet(&[_]Feature{}),
142 };142 };
143 result[@enumToInt(Feature.message_security_assist_extension5)] = .{143 result[@enumToInt(Feature.message_security_assist_extension5)] = .{
144 .llvm_name = "message-security-assist-extension5",144 .llvm_name = "message-security-assist-extension5",
145 .description = "Assume that the message-security-assist extension facility 5 is installed",145 .description = "Assume that the message-security-assist extension facility 5 is installed",
146 .dependencies = sparseFeatureSet(&[_]Feature{}),146 .dependencies = featureSet(&[_]Feature{}),
147 };147 };
148 result[@enumToInt(Feature.message_security_assist_extension7)] = .{148 result[@enumToInt(Feature.message_security_assist_extension7)] = .{
149 .llvm_name = "message-security-assist-extension7",149 .llvm_name = "message-security-assist-extension7",
150 .description = "Assume that the message-security-assist extension facility 7 is installed",150 .description = "Assume that the message-security-assist extension facility 7 is installed",
151 .dependencies = sparseFeatureSet(&[_]Feature{}),151 .dependencies = featureSet(&[_]Feature{}),
152 };152 };
153 result[@enumToInt(Feature.message_security_assist_extension8)] = .{153 result[@enumToInt(Feature.message_security_assist_extension8)] = .{
154 .llvm_name = "message-security-assist-extension8",154 .llvm_name = "message-security-assist-extension8",
155 .description = "Assume that the message-security-assist extension facility 8 is installed",155 .description = "Assume that the message-security-assist extension facility 8 is installed",
156 .dependencies = sparseFeatureSet(&[_]Feature{}),156 .dependencies = featureSet(&[_]Feature{}),
157 };157 };
158 result[@enumToInt(Feature.message_security_assist_extension9)] = .{158 result[@enumToInt(Feature.message_security_assist_extension9)] = .{
159 .llvm_name = "message-security-assist-extension9",159 .llvm_name = "message-security-assist-extension9",
160 .description = "Assume that the message-security-assist extension facility 9 is installed",160 .description = "Assume that the message-security-assist extension facility 9 is installed",
161 .dependencies = sparseFeatureSet(&[_]Feature{}),161 .dependencies = featureSet(&[_]Feature{}),
162 };162 };
163 result[@enumToInt(Feature.miscellaneous_extensions)] = .{163 result[@enumToInt(Feature.miscellaneous_extensions)] = .{
164 .llvm_name = "miscellaneous-extensions",164 .llvm_name = "miscellaneous-extensions",
165 .description = "Assume that the miscellaneous-extensions facility is installed",165 .description = "Assume that the miscellaneous-extensions facility is installed",
166 .dependencies = sparseFeatureSet(&[_]Feature{}),166 .dependencies = featureSet(&[_]Feature{}),
167 };167 };
168 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{168 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{
169 .llvm_name = "miscellaneous-extensions-2",169 .llvm_name = "miscellaneous-extensions-2",
170 .description = "Assume that the miscellaneous-extensions facility 2 is installed",170 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
171 .dependencies = sparseFeatureSet(&[_]Feature{}),171 .dependencies = featureSet(&[_]Feature{}),
172 };172 };
173 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{173 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{
174 .llvm_name = "miscellaneous-extensions-3",174 .llvm_name = "miscellaneous-extensions-3",
175 .description = "Assume that the miscellaneous-extensions facility 3 is installed",175 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
176 .dependencies = sparseFeatureSet(&[_]Feature{}),176 .dependencies = featureSet(&[_]Feature{}),
177 };177 };
178 result[@enumToInt(Feature.population_count)] = .{178 result[@enumToInt(Feature.population_count)] = .{
179 .llvm_name = "population-count",179 .llvm_name = "population-count",
180 .description = "Assume that the population-count facility is installed",180 .description = "Assume that the population-count facility is installed",
181 .dependencies = sparseFeatureSet(&[_]Feature{}),181 .dependencies = featureSet(&[_]Feature{}),
182 };182 };
183 result[@enumToInt(Feature.processor_assist)] = .{183 result[@enumToInt(Feature.processor_assist)] = .{
184 .llvm_name = "processor-assist",184 .llvm_name = "processor-assist",
185 .description = "Assume that the processor-assist facility is installed",185 .description = "Assume that the processor-assist facility is installed",
186 .dependencies = sparseFeatureSet(&[_]Feature{}),186 .dependencies = featureSet(&[_]Feature{}),
187 };187 };
188 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{188 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
189 .llvm_name = "reset-reference-bits-multiple",189 .llvm_name = "reset-reference-bits-multiple",
190 .description = "Assume that the reset-reference-bits-multiple facility is installed",190 .description = "Assume that the reset-reference-bits-multiple facility is installed",
191 .dependencies = sparseFeatureSet(&[_]Feature{}),191 .dependencies = featureSet(&[_]Feature{}),
192 };192 };
193 result[@enumToInt(Feature.transactional_execution)] = .{193 result[@enumToInt(Feature.transactional_execution)] = .{
194 .llvm_name = "transactional-execution",194 .llvm_name = "transactional-execution",
195 .description = "Assume that the transactional-execution facility is installed",195 .description = "Assume that the transactional-execution facility is installed",
196 .dependencies = sparseFeatureSet(&[_]Feature{}),196 .dependencies = featureSet(&[_]Feature{}),
197 };197 };
198 result[@enumToInt(Feature.vector)] = .{198 result[@enumToInt(Feature.vector)] = .{
199 .llvm_name = "vector",199 .llvm_name = "vector",
200 .description = "Assume that the vectory facility is installed",200 .description = "Assume that the vectory facility is installed",
201 .dependencies = sparseFeatureSet(&[_]Feature{}),201 .dependencies = featureSet(&[_]Feature{}),
202 };202 };
203 result[@enumToInt(Feature.vector_enhancements_1)] = .{203 result[@enumToInt(Feature.vector_enhancements_1)] = .{
204 .llvm_name = "vector-enhancements-1",204 .llvm_name = "vector-enhancements-1",
205 .description = "Assume that the vector enhancements facility 1 is installed",205 .description = "Assume that the vector enhancements facility 1 is installed",
206 .dependencies = sparseFeatureSet(&[_]Feature{}),206 .dependencies = featureSet(&[_]Feature{}),
207 };207 };
208 result[@enumToInt(Feature.vector_enhancements_2)] = .{208 result[@enumToInt(Feature.vector_enhancements_2)] = .{
209 .llvm_name = "vector-enhancements-2",209 .llvm_name = "vector-enhancements-2",
210 .description = "Assume that the vector enhancements facility 2 is installed",210 .description = "Assume that the vector enhancements facility 2 is installed",
211 .dependencies = sparseFeatureSet(&[_]Feature{}),211 .dependencies = featureSet(&[_]Feature{}),
212 };212 };
213 result[@enumToInt(Feature.vector_packed_decimal)] = .{213 result[@enumToInt(Feature.vector_packed_decimal)] = .{
214 .llvm_name = "vector-packed-decimal",214 .llvm_name = "vector-packed-decimal",
215 .description = "Assume that the vector packed decimal facility is installed",215 .description = "Assume that the vector packed decimal facility is installed",
216 .dependencies = sparseFeatureSet(&[_]Feature{}),216 .dependencies = featureSet(&[_]Feature{}),
217 };217 };
218 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{218 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{
219 .llvm_name = "vector-packed-decimal-enhancement",219 .llvm_name = "vector-packed-decimal-enhancement",
220 .description = "Assume that the vector packed decimal enhancement facility is installed",220 .description = "Assume that the vector packed decimal enhancement facility is installed",
221 .dependencies = sparseFeatureSet(&[_]Feature{}),221 .dependencies = featureSet(&[_]Feature{}),
222 };222 };
223 const ti = @typeInfo(Feature);223 const ti = @typeInfo(Feature);
224 for (result) |*elem, i| {224 for (result) |*elem, i| {
225 elem.index = i;225 elem.index = i;
226 elem.name = ti.Enum.fields[i].name;226 elem.name = ti.Enum.fields[i].name;
227 elem.dependencies.initAsDependencies(i, &result);
228 }227 }
229 break :blk result;228 break :blk result;
230};229};
...@@ -233,7 +232,7 @@ pub const cpu = struct {...@@ -233,7 +232,7 @@ pub const cpu = struct {
233 pub const arch10 = Cpu{232 pub const arch10 = Cpu{
234 .name = "arch10",233 .name = "arch10",
235 .llvm_name = "arch10",234 .llvm_name = "arch10",
236 .features = featureSet(&all_features, &[_]Feature{235 .features = featureSet(&[_]Feature{
237 .dfp_zoned_conversion,236 .dfp_zoned_conversion,
238 .distinct_ops,237 .distinct_ops,
239 .enhanced_dat_2,238 .enhanced_dat_2,
...@@ -256,7 +255,7 @@ pub const cpu = struct {...@@ -256,7 +255,7 @@ pub const cpu = struct {
256 pub const arch11 = Cpu{255 pub const arch11 = Cpu{
257 .name = "arch11",256 .name = "arch11",
258 .llvm_name = "arch11",257 .llvm_name = "arch11",
259 .features = featureSet(&all_features, &[_]Feature{258 .features = featureSet(&[_]Feature{
260 .dfp_packed_conversion,259 .dfp_packed_conversion,
261 .dfp_zoned_conversion,260 .dfp_zoned_conversion,
262 .distinct_ops,261 .distinct_ops,
...@@ -284,7 +283,7 @@ pub const cpu = struct {...@@ -284,7 +283,7 @@ pub const cpu = struct {
284 pub const arch12 = Cpu{283 pub const arch12 = Cpu{
285 .name = "arch12",284 .name = "arch12",
286 .llvm_name = "arch12",285 .llvm_name = "arch12",
287 .features = featureSet(&all_features, &[_]Feature{286 .features = featureSet(&[_]Feature{
288 .dfp_packed_conversion,287 .dfp_packed_conversion,
289 .dfp_zoned_conversion,288 .dfp_zoned_conversion,
290 .distinct_ops,289 .distinct_ops,
...@@ -319,7 +318,7 @@ pub const cpu = struct {...@@ -319,7 +318,7 @@ pub const cpu = struct {
319 pub const arch13 = Cpu{318 pub const arch13 = Cpu{
320 .name = "arch13",319 .name = "arch13",
321 .llvm_name = "arch13",320 .llvm_name = "arch13",
322 .features = featureSet(&all_features, &[_]Feature{321 .features = featureSet(&[_]Feature{
323 .deflate_conversion,322 .deflate_conversion,
324 .dfp_packed_conversion,323 .dfp_packed_conversion,
325 .dfp_zoned_conversion,324 .dfp_zoned_conversion,
...@@ -360,12 +359,12 @@ pub const cpu = struct {...@@ -360,12 +359,12 @@ pub const cpu = struct {
360 pub const arch8 = Cpu{359 pub const arch8 = Cpu{
361 .name = "arch8",360 .name = "arch8",
362 .llvm_name = "arch8",361 .llvm_name = "arch8",
363 .features = featureSet(&all_features, &[_]Feature{}),362 .features = featureSet(&[_]Feature{}),
364 };363 };
365 pub const arch9 = Cpu{364 pub const arch9 = Cpu{
366 .name = "arch9",365 .name = "arch9",
367 .llvm_name = "arch9",366 .llvm_name = "arch9",
368 .features = featureSet(&all_features, &[_]Feature{367 .features = featureSet(&[_]Feature{
369 .distinct_ops,368 .distinct_ops,
370 .fast_serialization,369 .fast_serialization,
371 .fp_extension,370 .fp_extension,
...@@ -381,17 +380,17 @@ pub const cpu = struct {...@@ -381,17 +380,17 @@ pub const cpu = struct {
381 pub const generic = Cpu{380 pub const generic = Cpu{
382 .name = "generic",381 .name = "generic",
383 .llvm_name = "generic",382 .llvm_name = "generic",
384 .features = featureSet(&all_features, &[_]Feature{}),383 .features = featureSet(&[_]Feature{}),
385 };384 };
386 pub const z10 = Cpu{385 pub const z10 = Cpu{
387 .name = "z10",386 .name = "z10",
388 .llvm_name = "z10",387 .llvm_name = "z10",
389 .features = featureSet(&all_features, &[_]Feature{}),388 .features = featureSet(&[_]Feature{}),
390 };389 };
391 pub const z13 = Cpu{390 pub const z13 = Cpu{
392 .name = "z13",391 .name = "z13",
393 .llvm_name = "z13",392 .llvm_name = "z13",
394 .features = featureSet(&all_features, &[_]Feature{393 .features = featureSet(&[_]Feature{
395 .dfp_packed_conversion,394 .dfp_packed_conversion,
396 .dfp_zoned_conversion,395 .dfp_zoned_conversion,
397 .distinct_ops,396 .distinct_ops,
...@@ -419,7 +418,7 @@ pub const cpu = struct {...@@ -419,7 +418,7 @@ pub const cpu = struct {
419 pub const z14 = Cpu{418 pub const z14 = Cpu{
420 .name = "z14",419 .name = "z14",
421 .llvm_name = "z14",420 .llvm_name = "z14",
422 .features = featureSet(&all_features, &[_]Feature{421 .features = featureSet(&[_]Feature{
423 .dfp_packed_conversion,422 .dfp_packed_conversion,
424 .dfp_zoned_conversion,423 .dfp_zoned_conversion,
425 .distinct_ops,424 .distinct_ops,
...@@ -454,7 +453,7 @@ pub const cpu = struct {...@@ -454,7 +453,7 @@ pub const cpu = struct {
454 pub const z196 = Cpu{453 pub const z196 = Cpu{
455 .name = "z196",454 .name = "z196",
456 .llvm_name = "z196",455 .llvm_name = "z196",
457 .features = featureSet(&all_features, &[_]Feature{456 .features = featureSet(&[_]Feature{
458 .distinct_ops,457 .distinct_ops,
459 .fast_serialization,458 .fast_serialization,
460 .fp_extension,459 .fp_extension,
...@@ -470,7 +469,7 @@ pub const cpu = struct {...@@ -470,7 +469,7 @@ pub const cpu = struct {
470 pub const zEC12 = Cpu{469 pub const zEC12 = Cpu{
471 .name = "zEC12",470 .name = "zEC12",
472 .llvm_name = "zEC12",471 .llvm_name = "zEC12",
473 .features = featureSet(&all_features, &[_]Feature{472 .features = featureSet(&[_]Feature{
474 .dfp_zoned_conversion,473 .dfp_zoned_conversion,
475 .distinct_ops,474 .distinct_ops,
476 .enhanced_dat_2,475 .enhanced_dat_2,
lib/std/target/wasm.zig+13-14
...@@ -23,52 +23,52 @@ pub const all_features = blk: {...@@ -23,52 +23,52 @@ pub const all_features = blk: {
23 result[@enumToInt(Feature.atomics)] = .{23 result[@enumToInt(Feature.atomics)] = .{
24 .llvm_name = "atomics",24 .llvm_name = "atomics",
25 .description = "Enable Atomics",25 .description = "Enable Atomics",
26 .dependencies = sparseFeatureSet(&[_]Feature{}),26 .dependencies = featureSet(&[_]Feature{}),
27 };27 };
28 result[@enumToInt(Feature.bulk_memory)] = .{28 result[@enumToInt(Feature.bulk_memory)] = .{
29 .llvm_name = "bulk-memory",29 .llvm_name = "bulk-memory",
30 .description = "Enable bulk memory operations",30 .description = "Enable bulk memory operations",
31 .dependencies = sparseFeatureSet(&[_]Feature{}),31 .dependencies = featureSet(&[_]Feature{}),
32 };32 };
33 result[@enumToInt(Feature.exception_handling)] = .{33 result[@enumToInt(Feature.exception_handling)] = .{
34 .llvm_name = "exception-handling",34 .llvm_name = "exception-handling",
35 .description = "Enable Wasm exception handling",35 .description = "Enable Wasm exception handling",
36 .dependencies = sparseFeatureSet(&[_]Feature{}),36 .dependencies = featureSet(&[_]Feature{}),
37 };37 };
38 result[@enumToInt(Feature.multivalue)] = .{38 result[@enumToInt(Feature.multivalue)] = .{
39 .llvm_name = "multivalue",39 .llvm_name = "multivalue",
40 .description = "Enable multivalue blocks, instructions, and functions",40 .description = "Enable multivalue blocks, instructions, and functions",
41 .dependencies = sparseFeatureSet(&[_]Feature{}),41 .dependencies = featureSet(&[_]Feature{}),
42 };42 };
43 result[@enumToInt(Feature.mutable_globals)] = .{43 result[@enumToInt(Feature.mutable_globals)] = .{
44 .llvm_name = "mutable-globals",44 .llvm_name = "mutable-globals",
45 .description = "Enable mutable globals",45 .description = "Enable mutable globals",
46 .dependencies = sparseFeatureSet(&[_]Feature{}),46 .dependencies = featureSet(&[_]Feature{}),
47 };47 };
48 result[@enumToInt(Feature.nontrapping_fptoint)] = .{48 result[@enumToInt(Feature.nontrapping_fptoint)] = .{
49 .llvm_name = "nontrapping-fptoint",49 .llvm_name = "nontrapping-fptoint",
50 .description = "Enable non-trapping float-to-int conversion operators",50 .description = "Enable non-trapping float-to-int conversion operators",
51 .dependencies = sparseFeatureSet(&[_]Feature{}),51 .dependencies = featureSet(&[_]Feature{}),
52 };52 };
53 result[@enumToInt(Feature.sign_ext)] = .{53 result[@enumToInt(Feature.sign_ext)] = .{
54 .llvm_name = "sign-ext",54 .llvm_name = "sign-ext",
55 .description = "Enable sign extension operators",55 .description = "Enable sign extension operators",
56 .dependencies = sparseFeatureSet(&[_]Feature{}),56 .dependencies = featureSet(&[_]Feature{}),
57 };57 };
58 result[@enumToInt(Feature.simd128)] = .{58 result[@enumToInt(Feature.simd128)] = .{
59 .llvm_name = "simd128",59 .llvm_name = "simd128",
60 .description = "Enable 128-bit SIMD",60 .description = "Enable 128-bit SIMD",
61 .dependencies = sparseFeatureSet(&[_]Feature{}),61 .dependencies = featureSet(&[_]Feature{}),
62 };62 };
63 result[@enumToInt(Feature.tail_call)] = .{63 result[@enumToInt(Feature.tail_call)] = .{
64 .llvm_name = "tail-call",64 .llvm_name = "tail-call",
65 .description = "Enable tail call instructions",65 .description = "Enable tail call instructions",
66 .dependencies = sparseFeatureSet(&[_]Feature{}),66 .dependencies = featureSet(&[_]Feature{}),
67 };67 };
68 result[@enumToInt(Feature.unimplemented_simd128)] = .{68 result[@enumToInt(Feature.unimplemented_simd128)] = .{
69 .llvm_name = "unimplemented-simd128",69 .llvm_name = "unimplemented-simd128",
70 .description = "Enable 128-bit SIMD not yet implemented in engines",70 .description = "Enable 128-bit SIMD not yet implemented in engines",
71 .dependencies = sparseFeatureSet(&[_]Feature{71 .dependencies = featureSet(&[_]Feature{
72 .simd128,72 .simd128,
73 }),73 }),
74 };74 };
...@@ -76,7 +76,6 @@ pub const all_features = blk: {...@@ -76,7 +76,6 @@ pub const all_features = blk: {
76 for (result) |*elem, i| {76 for (result) |*elem, i| {
77 elem.index = i;77 elem.index = i;
78 elem.name = ti.Enum.fields[i].name;78 elem.name = ti.Enum.fields[i].name;
79 elem.dependencies.initAsDependencies(i, &result);
80 }79 }
81 break :blk result;80 break :blk result;
82};81};
...@@ -85,7 +84,7 @@ pub const cpu = struct {...@@ -85,7 +84,7 @@ pub const cpu = struct {
85 pub const bleeding_edge = Cpu{84 pub const bleeding_edge = Cpu{
86 .name = "bleeding_edge",85 .name = "bleeding_edge",
87 .llvm_name = "bleeding-edge",86 .llvm_name = "bleeding-edge",
88 .features = featureSet(&all_features, &[_]Feature{87 .features = featureSet(&[_]Feature{
89 .atomics,88 .atomics,
90 .mutable_globals,89 .mutable_globals,
91 .nontrapping_fptoint,90 .nontrapping_fptoint,
...@@ -96,12 +95,12 @@ pub const cpu = struct {...@@ -96,12 +95,12 @@ pub const cpu = struct {
96 pub const generic = Cpu{95 pub const generic = Cpu{
97 .name = "generic",96 .name = "generic",
98 .llvm_name = "generic",97 .llvm_name = "generic",
99 .features = featureSet(&all_features, &[_]Feature{}),98 .features = featureSet(&[_]Feature{}),
100 };99 };
101 pub const mvp = Cpu{100 pub const mvp = Cpu{
102 .name = "mvp",101 .name = "mvp",
103 .llvm_name = "mvp",102 .llvm_name = "mvp",
104 .features = featureSet(&all_features, &[_]Feature{}),103 .features = featureSet(&[_]Feature{}),
105 };104 };
106};105};
107106
lib/std/target/x86.zig+199-201
...@@ -128,101 +128,100 @@ pub const Feature = enum {...@@ -128,101 +128,100 @@ pub const Feature = enum {
128pub usingnamespace Cpu.Feature.feature_set_fns(Feature);128pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
129129
130pub const all_features = blk: {130pub const all_features = blk: {
131 @setEvalBranchQuota(10000);
132 const len = @typeInfo(Feature).Enum.fields.len;131 const len = @typeInfo(Feature).Enum.fields.len;
133 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);132 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
134 var result: [len]Cpu.Feature = undefined;133 var result: [len]Cpu.Feature = undefined;
135 result[@enumToInt(Feature.@"3dnow")] = .{134 result[@enumToInt(Feature.@"3dnow")] = .{
136 .llvm_name = "3dnow",135 .llvm_name = "3dnow",
137 .description = "Enable 3DNow! instructions",136 .description = "Enable 3DNow! instructions",
138 .dependencies = sparseFeatureSet(&[_]Feature{137 .dependencies = featureSet(&[_]Feature{
139 .mmx,138 .mmx,
140 }),139 }),
141 };140 };
142 result[@enumToInt(Feature.@"3dnowa")] = .{141 result[@enumToInt(Feature.@"3dnowa")] = .{
143 .llvm_name = "3dnowa",142 .llvm_name = "3dnowa",
144 .description = "Enable 3DNow! Athlon instructions",143 .description = "Enable 3DNow! Athlon instructions",
145 .dependencies = sparseFeatureSet(&[_]Feature{144 .dependencies = featureSet(&[_]Feature{
146 .@"3dnow",145 .@"3dnow",
147 }),146 }),
148 };147 };
149 result[@enumToInt(Feature.@"64bit")] = .{148 result[@enumToInt(Feature.@"64bit")] = .{
150 .llvm_name = "64bit",149 .llvm_name = "64bit",
151 .description = "Support 64-bit instructions",150 .description = "Support 64-bit instructions",
152 .dependencies = sparseFeatureSet(&[_]Feature{}),151 .dependencies = featureSet(&[_]Feature{}),
153 };152 };
154 result[@enumToInt(Feature.adx)] = .{153 result[@enumToInt(Feature.adx)] = .{
155 .llvm_name = "adx",154 .llvm_name = "adx",
156 .description = "Support ADX instructions",155 .description = "Support ADX instructions",
157 .dependencies = sparseFeatureSet(&[_]Feature{}),156 .dependencies = featureSet(&[_]Feature{}),
158 };157 };
159 result[@enumToInt(Feature.aes)] = .{158 result[@enumToInt(Feature.aes)] = .{
160 .llvm_name = "aes",159 .llvm_name = "aes",
161 .description = "Enable AES instructions",160 .description = "Enable AES instructions",
162 .dependencies = sparseFeatureSet(&[_]Feature{161 .dependencies = featureSet(&[_]Feature{
163 .sse2,162 .sse2,
164 }),163 }),
165 };164 };
166 result[@enumToInt(Feature.avx)] = .{165 result[@enumToInt(Feature.avx)] = .{
167 .llvm_name = "avx",166 .llvm_name = "avx",
168 .description = "Enable AVX instructions",167 .description = "Enable AVX instructions",
169 .dependencies = sparseFeatureSet(&[_]Feature{168 .dependencies = featureSet(&[_]Feature{
170 .sse4_2,169 .sse4_2,
171 }),170 }),
172 };171 };
173 result[@enumToInt(Feature.avx2)] = .{172 result[@enumToInt(Feature.avx2)] = .{
174 .llvm_name = "avx2",173 .llvm_name = "avx2",
175 .description = "Enable AVX2 instructions",174 .description = "Enable AVX2 instructions",
176 .dependencies = sparseFeatureSet(&[_]Feature{175 .dependencies = featureSet(&[_]Feature{
177 .avx,176 .avx,
178 }),177 }),
179 };178 };
180 result[@enumToInt(Feature.avx512bf16)] = .{179 result[@enumToInt(Feature.avx512bf16)] = .{
181 .llvm_name = "avx512bf16",180 .llvm_name = "avx512bf16",
182 .description = "Support bfloat16 floating point",181 .description = "Support bfloat16 floating point",
183 .dependencies = sparseFeatureSet(&[_]Feature{182 .dependencies = featureSet(&[_]Feature{
184 .avx512bw,183 .avx512bw,
185 }),184 }),
186 };185 };
187 result[@enumToInt(Feature.avx512bitalg)] = .{186 result[@enumToInt(Feature.avx512bitalg)] = .{
188 .llvm_name = "avx512bitalg",187 .llvm_name = "avx512bitalg",
189 .description = "Enable AVX-512 Bit Algorithms",188 .description = "Enable AVX-512 Bit Algorithms",
190 .dependencies = sparseFeatureSet(&[_]Feature{189 .dependencies = featureSet(&[_]Feature{
191 .avx512bw,190 .avx512bw,
192 }),191 }),
193 };192 };
194 result[@enumToInt(Feature.avx512bw)] = .{193 result[@enumToInt(Feature.avx512bw)] = .{
195 .llvm_name = "avx512bw",194 .llvm_name = "avx512bw",
196 .description = "Enable AVX-512 Byte and Word Instructions",195 .description = "Enable AVX-512 Byte and Word Instructions",
197 .dependencies = sparseFeatureSet(&[_]Feature{196 .dependencies = featureSet(&[_]Feature{
198 .avx512f,197 .avx512f,
199 }),198 }),
200 };199 };
201 result[@enumToInt(Feature.avx512cd)] = .{200 result[@enumToInt(Feature.avx512cd)] = .{
202 .llvm_name = "avx512cd",201 .llvm_name = "avx512cd",
203 .description = "Enable AVX-512 Conflict Detection Instructions",202 .description = "Enable AVX-512 Conflict Detection Instructions",
204 .dependencies = sparseFeatureSet(&[_]Feature{203 .dependencies = featureSet(&[_]Feature{
205 .avx512f,204 .avx512f,
206 }),205 }),
207 };206 };
208 result[@enumToInt(Feature.avx512dq)] = .{207 result[@enumToInt(Feature.avx512dq)] = .{
209 .llvm_name = "avx512dq",208 .llvm_name = "avx512dq",
210 .description = "Enable AVX-512 Doubleword and Quadword Instructions",209 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
211 .dependencies = sparseFeatureSet(&[_]Feature{210 .dependencies = featureSet(&[_]Feature{
212 .avx512f,211 .avx512f,
213 }),212 }),
214 };213 };
215 result[@enumToInt(Feature.avx512er)] = .{214 result[@enumToInt(Feature.avx512er)] = .{
216 .llvm_name = "avx512er",215 .llvm_name = "avx512er",
217 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",216 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
218 .dependencies = sparseFeatureSet(&[_]Feature{217 .dependencies = featureSet(&[_]Feature{
219 .avx512f,218 .avx512f,
220 }),219 }),
221 };220 };
222 result[@enumToInt(Feature.avx512f)] = .{221 result[@enumToInt(Feature.avx512f)] = .{
223 .llvm_name = "avx512f",222 .llvm_name = "avx512f",
224 .description = "Enable AVX-512 instructions",223 .description = "Enable AVX-512 instructions",
225 .dependencies = sparseFeatureSet(&[_]Feature{224 .dependencies = featureSet(&[_]Feature{
226 .avx2,225 .avx2,
227 .f16c,226 .f16c,
228 .fma,227 .fma,
...@@ -231,216 +230,216 @@ pub const all_features = blk: {...@@ -231,216 +230,216 @@ pub const all_features = blk: {
231 result[@enumToInt(Feature.avx512ifma)] = .{230 result[@enumToInt(Feature.avx512ifma)] = .{
232 .llvm_name = "avx512ifma",231 .llvm_name = "avx512ifma",
233 .description = "Enable AVX-512 Integer Fused Multiple-Add",232 .description = "Enable AVX-512 Integer Fused Multiple-Add",
234 .dependencies = sparseFeatureSet(&[_]Feature{233 .dependencies = featureSet(&[_]Feature{
235 .avx512f,234 .avx512f,
236 }),235 }),
237 };236 };
238 result[@enumToInt(Feature.avx512pf)] = .{237 result[@enumToInt(Feature.avx512pf)] = .{
239 .llvm_name = "avx512pf",238 .llvm_name = "avx512pf",
240 .description = "Enable AVX-512 PreFetch Instructions",239 .description = "Enable AVX-512 PreFetch Instructions",
241 .dependencies = sparseFeatureSet(&[_]Feature{240 .dependencies = featureSet(&[_]Feature{
242 .avx512f,241 .avx512f,
243 }),242 }),
244 };243 };
245 result[@enumToInt(Feature.avx512vbmi)] = .{244 result[@enumToInt(Feature.avx512vbmi)] = .{
246 .llvm_name = "avx512vbmi",245 .llvm_name = "avx512vbmi",
247 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",246 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
248 .dependencies = sparseFeatureSet(&[_]Feature{247 .dependencies = featureSet(&[_]Feature{
249 .avx512bw,248 .avx512bw,
250 }),249 }),
251 };250 };
252 result[@enumToInt(Feature.avx512vbmi2)] = .{251 result[@enumToInt(Feature.avx512vbmi2)] = .{
253 .llvm_name = "avx512vbmi2",252 .llvm_name = "avx512vbmi2",
254 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",253 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
255 .dependencies = sparseFeatureSet(&[_]Feature{254 .dependencies = featureSet(&[_]Feature{
256 .avx512bw,255 .avx512bw,
257 }),256 }),
258 };257 };
259 result[@enumToInt(Feature.avx512vl)] = .{258 result[@enumToInt(Feature.avx512vl)] = .{
260 .llvm_name = "avx512vl",259 .llvm_name = "avx512vl",
261 .description = "Enable AVX-512 Vector Length eXtensions",260 .description = "Enable AVX-512 Vector Length eXtensions",
262 .dependencies = sparseFeatureSet(&[_]Feature{261 .dependencies = featureSet(&[_]Feature{
263 .avx512f,262 .avx512f,
264 }),263 }),
265 };264 };
266 result[@enumToInt(Feature.avx512vnni)] = .{265 result[@enumToInt(Feature.avx512vnni)] = .{
267 .llvm_name = "avx512vnni",266 .llvm_name = "avx512vnni",
268 .description = "Enable AVX-512 Vector Neural Network Instructions",267 .description = "Enable AVX-512 Vector Neural Network Instructions",
269 .dependencies = sparseFeatureSet(&[_]Feature{268 .dependencies = featureSet(&[_]Feature{
270 .avx512f,269 .avx512f,
271 }),270 }),
272 };271 };
273 result[@enumToInt(Feature.avx512vp2intersect)] = .{272 result[@enumToInt(Feature.avx512vp2intersect)] = .{
274 .llvm_name = "avx512vp2intersect",273 .llvm_name = "avx512vp2intersect",
275 .description = "Enable AVX-512 vp2intersect",274 .description = "Enable AVX-512 vp2intersect",
276 .dependencies = sparseFeatureSet(&[_]Feature{275 .dependencies = featureSet(&[_]Feature{
277 .avx512f,276 .avx512f,
278 }),277 }),
279 };278 };
280 result[@enumToInt(Feature.avx512vpopcntdq)] = .{279 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
281 .llvm_name = "avx512vpopcntdq",280 .llvm_name = "avx512vpopcntdq",
282 .description = "Enable AVX-512 Population Count Instructions",281 .description = "Enable AVX-512 Population Count Instructions",
283 .dependencies = sparseFeatureSet(&[_]Feature{282 .dependencies = featureSet(&[_]Feature{
284 .avx512f,283 .avx512f,
285 }),284 }),
286 };285 };
287 result[@enumToInt(Feature.bmi)] = .{286 result[@enumToInt(Feature.bmi)] = .{
288 .llvm_name = "bmi",287 .llvm_name = "bmi",
289 .description = "Support BMI instructions",288 .description = "Support BMI instructions",
290 .dependencies = sparseFeatureSet(&[_]Feature{}),289 .dependencies = featureSet(&[_]Feature{}),
291 };290 };
292 result[@enumToInt(Feature.bmi2)] = .{291 result[@enumToInt(Feature.bmi2)] = .{
293 .llvm_name = "bmi2",292 .llvm_name = "bmi2",
294 .description = "Support BMI2 instructions",293 .description = "Support BMI2 instructions",
295 .dependencies = sparseFeatureSet(&[_]Feature{}),294 .dependencies = featureSet(&[_]Feature{}),
296 };295 };
297 result[@enumToInt(Feature.branchfusion)] = .{296 result[@enumToInt(Feature.branchfusion)] = .{
298 .llvm_name = "branchfusion",297 .llvm_name = "branchfusion",
299 .description = "CMP/TEST can be fused with conditional branches",298 .description = "CMP/TEST can be fused with conditional branches",
300 .dependencies = sparseFeatureSet(&[_]Feature{}),299 .dependencies = featureSet(&[_]Feature{}),
301 };300 };
302 result[@enumToInt(Feature.cldemote)] = .{301 result[@enumToInt(Feature.cldemote)] = .{
303 .llvm_name = "cldemote",302 .llvm_name = "cldemote",
304 .description = "Enable Cache Demote",303 .description = "Enable Cache Demote",
305 .dependencies = sparseFeatureSet(&[_]Feature{}),304 .dependencies = featureSet(&[_]Feature{}),
306 };305 };
307 result[@enumToInt(Feature.clflushopt)] = .{306 result[@enumToInt(Feature.clflushopt)] = .{
308 .llvm_name = "clflushopt",307 .llvm_name = "clflushopt",
309 .description = "Flush A Cache Line Optimized",308 .description = "Flush A Cache Line Optimized",
310 .dependencies = sparseFeatureSet(&[_]Feature{}),309 .dependencies = featureSet(&[_]Feature{}),
311 };310 };
312 result[@enumToInt(Feature.clwb)] = .{311 result[@enumToInt(Feature.clwb)] = .{
313 .llvm_name = "clwb",312 .llvm_name = "clwb",
314 .description = "Cache Line Write Back",313 .description = "Cache Line Write Back",
315 .dependencies = sparseFeatureSet(&[_]Feature{}),314 .dependencies = featureSet(&[_]Feature{}),
316 };315 };
317 result[@enumToInt(Feature.clzero)] = .{316 result[@enumToInt(Feature.clzero)] = .{
318 .llvm_name = "clzero",317 .llvm_name = "clzero",
319 .description = "Enable Cache Line Zero",318 .description = "Enable Cache Line Zero",
320 .dependencies = sparseFeatureSet(&[_]Feature{}),319 .dependencies = featureSet(&[_]Feature{}),
321 };320 };
322 result[@enumToInt(Feature.cmov)] = .{321 result[@enumToInt(Feature.cmov)] = .{
323 .llvm_name = "cmov",322 .llvm_name = "cmov",
324 .description = "Enable conditional move instructions",323 .description = "Enable conditional move instructions",
325 .dependencies = sparseFeatureSet(&[_]Feature{}),324 .dependencies = featureSet(&[_]Feature{}),
326 };325 };
327 result[@enumToInt(Feature.cx16)] = .{326 result[@enumToInt(Feature.cx16)] = .{
328 .llvm_name = "cx16",327 .llvm_name = "cx16",
329 .description = "64-bit with cmpxchg16b",328 .description = "64-bit with cmpxchg16b",
330 .dependencies = sparseFeatureSet(&[_]Feature{329 .dependencies = featureSet(&[_]Feature{
331 .cx8,330 .cx8,
332 }),331 }),
333 };332 };
334 result[@enumToInt(Feature.cx8)] = .{333 result[@enumToInt(Feature.cx8)] = .{
335 .llvm_name = "cx8",334 .llvm_name = "cx8",
336 .description = "Support CMPXCHG8B instructions",335 .description = "Support CMPXCHG8B instructions",
337 .dependencies = sparseFeatureSet(&[_]Feature{}),336 .dependencies = featureSet(&[_]Feature{}),
338 };337 };
339 result[@enumToInt(Feature.enqcmd)] = .{338 result[@enumToInt(Feature.enqcmd)] = .{
340 .llvm_name = "enqcmd",339 .llvm_name = "enqcmd",
341 .description = "Has ENQCMD instructions",340 .description = "Has ENQCMD instructions",
342 .dependencies = sparseFeatureSet(&[_]Feature{}),341 .dependencies = featureSet(&[_]Feature{}),
343 };342 };
344 result[@enumToInt(Feature.ermsb)] = .{343 result[@enumToInt(Feature.ermsb)] = .{
345 .llvm_name = "ermsb",344 .llvm_name = "ermsb",
346 .description = "REP MOVS/STOS are fast",345 .description = "REP MOVS/STOS are fast",
347 .dependencies = sparseFeatureSet(&[_]Feature{}),346 .dependencies = featureSet(&[_]Feature{}),
348 };347 };
349 result[@enumToInt(Feature.f16c)] = .{348 result[@enumToInt(Feature.f16c)] = .{
350 .llvm_name = "f16c",349 .llvm_name = "f16c",
351 .description = "Support 16-bit floating point conversion instructions",350 .description = "Support 16-bit floating point conversion instructions",
352 .dependencies = sparseFeatureSet(&[_]Feature{351 .dependencies = featureSet(&[_]Feature{
353 .avx,352 .avx,
354 }),353 }),
355 };354 };
356 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{355 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{
357 .llvm_name = "false-deps-lzcnt-tzcnt",356 .llvm_name = "false-deps-lzcnt-tzcnt",
358 .description = "LZCNT/TZCNT have a false dependency on dest register",357 .description = "LZCNT/TZCNT have a false dependency on dest register",
359 .dependencies = sparseFeatureSet(&[_]Feature{}),358 .dependencies = featureSet(&[_]Feature{}),
360 };359 };
361 result[@enumToInt(Feature.false_deps_popcnt)] = .{360 result[@enumToInt(Feature.false_deps_popcnt)] = .{
362 .llvm_name = "false-deps-popcnt",361 .llvm_name = "false-deps-popcnt",
363 .description = "POPCNT has a false dependency on dest register",362 .description = "POPCNT has a false dependency on dest register",
364 .dependencies = sparseFeatureSet(&[_]Feature{}),363 .dependencies = featureSet(&[_]Feature{}),
365 };364 };
366 result[@enumToInt(Feature.fast_11bytenop)] = .{365 result[@enumToInt(Feature.fast_11bytenop)] = .{
367 .llvm_name = "fast-11bytenop",366 .llvm_name = "fast-11bytenop",
368 .description = "Target can quickly decode up to 11 byte NOPs",367 .description = "Target can quickly decode up to 11 byte NOPs",
369 .dependencies = sparseFeatureSet(&[_]Feature{}),368 .dependencies = featureSet(&[_]Feature{}),
370 };369 };
371 result[@enumToInt(Feature.fast_15bytenop)] = .{370 result[@enumToInt(Feature.fast_15bytenop)] = .{
372 .llvm_name = "fast-15bytenop",371 .llvm_name = "fast-15bytenop",
373 .description = "Target can quickly decode up to 15 byte NOPs",372 .description = "Target can quickly decode up to 15 byte NOPs",
374 .dependencies = sparseFeatureSet(&[_]Feature{}),373 .dependencies = featureSet(&[_]Feature{}),
375 };374 };
376 result[@enumToInt(Feature.fast_bextr)] = .{375 result[@enumToInt(Feature.fast_bextr)] = .{
377 .llvm_name = "fast-bextr",376 .llvm_name = "fast-bextr",
378 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",377 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
379 .dependencies = sparseFeatureSet(&[_]Feature{}),378 .dependencies = featureSet(&[_]Feature{}),
380 };379 };
381 result[@enumToInt(Feature.fast_gather)] = .{380 result[@enumToInt(Feature.fast_gather)] = .{
382 .llvm_name = "fast-gather",381 .llvm_name = "fast-gather",
383 .description = "Indicates if gather is reasonably fast",382 .description = "Indicates if gather is reasonably fast",
384 .dependencies = sparseFeatureSet(&[_]Feature{}),383 .dependencies = featureSet(&[_]Feature{}),
385 };384 };
386 result[@enumToInt(Feature.fast_hops)] = .{385 result[@enumToInt(Feature.fast_hops)] = .{
387 .llvm_name = "fast-hops",386 .llvm_name = "fast-hops",
388 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",387 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
389 .dependencies = sparseFeatureSet(&[_]Feature{388 .dependencies = featureSet(&[_]Feature{
390 .sse3,389 .sse3,
391 }),390 }),
392 };391 };
393 result[@enumToInt(Feature.fast_lzcnt)] = .{392 result[@enumToInt(Feature.fast_lzcnt)] = .{
394 .llvm_name = "fast-lzcnt",393 .llvm_name = "fast-lzcnt",
395 .description = "LZCNT instructions are as fast as most simple integer ops",394 .description = "LZCNT instructions are as fast as most simple integer ops",
396 .dependencies = sparseFeatureSet(&[_]Feature{}),395 .dependencies = featureSet(&[_]Feature{}),
397 };396 };
398 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{397 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{
399 .llvm_name = "fast-partial-ymm-or-zmm-write",398 .llvm_name = "fast-partial-ymm-or-zmm-write",
400 .description = "Partial writes to YMM/ZMM registers are fast",399 .description = "Partial writes to YMM/ZMM registers are fast",
401 .dependencies = sparseFeatureSet(&[_]Feature{}),400 .dependencies = featureSet(&[_]Feature{}),
402 };401 };
403 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{402 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
404 .llvm_name = "fast-scalar-fsqrt",403 .llvm_name = "fast-scalar-fsqrt",
405 .description = "Scalar SQRT is fast (disable Newton-Raphson)",404 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
406 .dependencies = sparseFeatureSet(&[_]Feature{}),405 .dependencies = featureSet(&[_]Feature{}),
407 };406 };
408 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{407 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{
409 .llvm_name = "fast-scalar-shift-masks",408 .llvm_name = "fast-scalar-shift-masks",
410 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",409 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
411 .dependencies = sparseFeatureSet(&[_]Feature{}),410 .dependencies = featureSet(&[_]Feature{}),
412 };411 };
413 result[@enumToInt(Feature.fast_shld_rotate)] = .{412 result[@enumToInt(Feature.fast_shld_rotate)] = .{
414 .llvm_name = "fast-shld-rotate",413 .llvm_name = "fast-shld-rotate",
415 .description = "SHLD can be used as a faster rotate",414 .description = "SHLD can be used as a faster rotate",
416 .dependencies = sparseFeatureSet(&[_]Feature{}),415 .dependencies = featureSet(&[_]Feature{}),
417 };416 };
418 result[@enumToInt(Feature.fast_variable_shuffle)] = .{417 result[@enumToInt(Feature.fast_variable_shuffle)] = .{
419 .llvm_name = "fast-variable-shuffle",418 .llvm_name = "fast-variable-shuffle",
420 .description = "Shuffles with variable masks are fast",419 .description = "Shuffles with variable masks are fast",
421 .dependencies = sparseFeatureSet(&[_]Feature{}),420 .dependencies = featureSet(&[_]Feature{}),
422 };421 };
423 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{422 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
424 .llvm_name = "fast-vector-fsqrt",423 .llvm_name = "fast-vector-fsqrt",
425 .description = "Vector SQRT is fast (disable Newton-Raphson)",424 .description = "Vector SQRT is fast (disable Newton-Raphson)",
426 .dependencies = sparseFeatureSet(&[_]Feature{}),425 .dependencies = featureSet(&[_]Feature{}),
427 };426 };
428 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{427 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{
429 .llvm_name = "fast-vector-shift-masks",428 .llvm_name = "fast-vector-shift-masks",
430 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",429 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",
431 .dependencies = sparseFeatureSet(&[_]Feature{}),430 .dependencies = featureSet(&[_]Feature{}),
432 };431 };
433 result[@enumToInt(Feature.fma)] = .{432 result[@enumToInt(Feature.fma)] = .{
434 .llvm_name = "fma",433 .llvm_name = "fma",
435 .description = "Enable three-operand fused multiple-add",434 .description = "Enable three-operand fused multiple-add",
436 .dependencies = sparseFeatureSet(&[_]Feature{435 .dependencies = featureSet(&[_]Feature{
437 .avx,436 .avx,
438 }),437 }),
439 };438 };
440 result[@enumToInt(Feature.fma4)] = .{439 result[@enumToInt(Feature.fma4)] = .{
441 .llvm_name = "fma4",440 .llvm_name = "fma4",
442 .description = "Enable four-operand fused multiple-add",441 .description = "Enable four-operand fused multiple-add",
443 .dependencies = sparseFeatureSet(&[_]Feature{442 .dependencies = featureSet(&[_]Feature{
444 .avx,443 .avx,
445 .sse4a,444 .sse4a,
446 }),445 }),
...@@ -448,166 +447,166 @@ pub const all_features = blk: {...@@ -448,166 +447,166 @@ pub const all_features = blk: {
448 result[@enumToInt(Feature.fsgsbase)] = .{447 result[@enumToInt(Feature.fsgsbase)] = .{
449 .llvm_name = "fsgsbase",448 .llvm_name = "fsgsbase",
450 .description = "Support FS/GS Base instructions",449 .description = "Support FS/GS Base instructions",
451 .dependencies = sparseFeatureSet(&[_]Feature{}),450 .dependencies = featureSet(&[_]Feature{}),
452 };451 };
453 result[@enumToInt(Feature.fxsr)] = .{452 result[@enumToInt(Feature.fxsr)] = .{
454 .llvm_name = "fxsr",453 .llvm_name = "fxsr",
455 .description = "Support fxsave/fxrestore instructions",454 .description = "Support fxsave/fxrestore instructions",
456 .dependencies = sparseFeatureSet(&[_]Feature{}),455 .dependencies = featureSet(&[_]Feature{}),
457 };456 };
458 result[@enumToInt(Feature.gfni)] = .{457 result[@enumToInt(Feature.gfni)] = .{
459 .llvm_name = "gfni",458 .llvm_name = "gfni",
460 .description = "Enable Galois Field Arithmetic Instructions",459 .description = "Enable Galois Field Arithmetic Instructions",
461 .dependencies = sparseFeatureSet(&[_]Feature{460 .dependencies = featureSet(&[_]Feature{
462 .sse2,461 .sse2,
463 }),462 }),
464 };463 };
465 result[@enumToInt(Feature.idivl_to_divb)] = .{464 result[@enumToInt(Feature.idivl_to_divb)] = .{
466 .llvm_name = "idivl-to-divb",465 .llvm_name = "idivl-to-divb",
467 .description = "Use 8-bit divide for positive values less than 256",466 .description = "Use 8-bit divide for positive values less than 256",
468 .dependencies = sparseFeatureSet(&[_]Feature{}),467 .dependencies = featureSet(&[_]Feature{}),
469 };468 };
470 result[@enumToInt(Feature.idivq_to_divl)] = .{469 result[@enumToInt(Feature.idivq_to_divl)] = .{
471 .llvm_name = "idivq-to-divl",470 .llvm_name = "idivq-to-divl",
472 .description = "Use 32-bit divide for positive values less than 2^32",471 .description = "Use 32-bit divide for positive values less than 2^32",
473 .dependencies = sparseFeatureSet(&[_]Feature{}),472 .dependencies = featureSet(&[_]Feature{}),
474 };473 };
475 result[@enumToInt(Feature.invpcid)] = .{474 result[@enumToInt(Feature.invpcid)] = .{
476 .llvm_name = "invpcid",475 .llvm_name = "invpcid",
477 .description = "Invalidate Process-Context Identifier",476 .description = "Invalidate Process-Context Identifier",
478 .dependencies = sparseFeatureSet(&[_]Feature{}),477 .dependencies = featureSet(&[_]Feature{}),
479 };478 };
480 result[@enumToInt(Feature.lea_sp)] = .{479 result[@enumToInt(Feature.lea_sp)] = .{
481 .llvm_name = "lea-sp",480 .llvm_name = "lea-sp",
482 .description = "Use LEA for adjusting the stack pointer",481 .description = "Use LEA for adjusting the stack pointer",
483 .dependencies = sparseFeatureSet(&[_]Feature{}),482 .dependencies = featureSet(&[_]Feature{}),
484 };483 };
485 result[@enumToInt(Feature.lea_uses_ag)] = .{484 result[@enumToInt(Feature.lea_uses_ag)] = .{
486 .llvm_name = "lea-uses-ag",485 .llvm_name = "lea-uses-ag",
487 .description = "LEA instruction needs inputs at AG stage",486 .description = "LEA instruction needs inputs at AG stage",
488 .dependencies = sparseFeatureSet(&[_]Feature{}),487 .dependencies = featureSet(&[_]Feature{}),
489 };488 };
490 result[@enumToInt(Feature.lwp)] = .{489 result[@enumToInt(Feature.lwp)] = .{
491 .llvm_name = "lwp",490 .llvm_name = "lwp",
492 .description = "Enable LWP instructions",491 .description = "Enable LWP instructions",
493 .dependencies = sparseFeatureSet(&[_]Feature{}),492 .dependencies = featureSet(&[_]Feature{}),
494 };493 };
495 result[@enumToInt(Feature.lzcnt)] = .{494 result[@enumToInt(Feature.lzcnt)] = .{
496 .llvm_name = "lzcnt",495 .llvm_name = "lzcnt",
497 .description = "Support LZCNT instruction",496 .description = "Support LZCNT instruction",
498 .dependencies = sparseFeatureSet(&[_]Feature{}),497 .dependencies = featureSet(&[_]Feature{}),
499 };498 };
500 result[@enumToInt(Feature.macrofusion)] = .{499 result[@enumToInt(Feature.macrofusion)] = .{
501 .llvm_name = "macrofusion",500 .llvm_name = "macrofusion",
502 .description = "Various instructions can be fused with conditional branches",501 .description = "Various instructions can be fused with conditional branches",
503 .dependencies = sparseFeatureSet(&[_]Feature{}),502 .dependencies = featureSet(&[_]Feature{}),
504 };503 };
505 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{504 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
506 .llvm_name = "merge-to-threeway-branch",505 .llvm_name = "merge-to-threeway-branch",
507 .description = "Merge branches to a three-way conditional branch",506 .description = "Merge branches to a three-way conditional branch",
508 .dependencies = sparseFeatureSet(&[_]Feature{}),507 .dependencies = featureSet(&[_]Feature{}),
509 };508 };
510 result[@enumToInt(Feature.mmx)] = .{509 result[@enumToInt(Feature.mmx)] = .{
511 .llvm_name = "mmx",510 .llvm_name = "mmx",
512 .description = "Enable MMX instructions",511 .description = "Enable MMX instructions",
513 .dependencies = sparseFeatureSet(&[_]Feature{}),512 .dependencies = featureSet(&[_]Feature{}),
514 };513 };
515 result[@enumToInt(Feature.movbe)] = .{514 result[@enumToInt(Feature.movbe)] = .{
516 .llvm_name = "movbe",515 .llvm_name = "movbe",
517 .description = "Support MOVBE instruction",516 .description = "Support MOVBE instruction",
518 .dependencies = sparseFeatureSet(&[_]Feature{}),517 .dependencies = featureSet(&[_]Feature{}),
519 };518 };
520 result[@enumToInt(Feature.movdir64b)] = .{519 result[@enumToInt(Feature.movdir64b)] = .{
521 .llvm_name = "movdir64b",520 .llvm_name = "movdir64b",
522 .description = "Support movdir64b instruction",521 .description = "Support movdir64b instruction",
523 .dependencies = sparseFeatureSet(&[_]Feature{}),522 .dependencies = featureSet(&[_]Feature{}),
524 };523 };
525 result[@enumToInt(Feature.movdiri)] = .{524 result[@enumToInt(Feature.movdiri)] = .{
526 .llvm_name = "movdiri",525 .llvm_name = "movdiri",
527 .description = "Support movdiri instruction",526 .description = "Support movdiri instruction",
528 .dependencies = sparseFeatureSet(&[_]Feature{}),527 .dependencies = featureSet(&[_]Feature{}),
529 };528 };
530 result[@enumToInt(Feature.mpx)] = .{529 result[@enumToInt(Feature.mpx)] = .{
531 .llvm_name = "mpx",530 .llvm_name = "mpx",
532 .description = "Support MPX instructions",531 .description = "Support MPX instructions",
533 .dependencies = sparseFeatureSet(&[_]Feature{}),532 .dependencies = featureSet(&[_]Feature{}),
534 };533 };
535 result[@enumToInt(Feature.mwaitx)] = .{534 result[@enumToInt(Feature.mwaitx)] = .{
536 .llvm_name = "mwaitx",535 .llvm_name = "mwaitx",
537 .description = "Enable MONITORX/MWAITX timer functionality",536 .description = "Enable MONITORX/MWAITX timer functionality",
538 .dependencies = sparseFeatureSet(&[_]Feature{}),537 .dependencies = featureSet(&[_]Feature{}),
539 };538 };
540 result[@enumToInt(Feature.nopl)] = .{539 result[@enumToInt(Feature.nopl)] = .{
541 .llvm_name = "nopl",540 .llvm_name = "nopl",
542 .description = "Enable NOPL instruction",541 .description = "Enable NOPL instruction",
543 .dependencies = sparseFeatureSet(&[_]Feature{}),542 .dependencies = featureSet(&[_]Feature{}),
544 };543 };
545 result[@enumToInt(Feature.pad_short_functions)] = .{544 result[@enumToInt(Feature.pad_short_functions)] = .{
546 .llvm_name = "pad-short-functions",545 .llvm_name = "pad-short-functions",
547 .description = "Pad short functions",546 .description = "Pad short functions",
548 .dependencies = sparseFeatureSet(&[_]Feature{}),547 .dependencies = featureSet(&[_]Feature{}),
549 };548 };
550 result[@enumToInt(Feature.pclmul)] = .{549 result[@enumToInt(Feature.pclmul)] = .{
551 .llvm_name = "pclmul",550 .llvm_name = "pclmul",
552 .description = "Enable packed carry-less multiplication instructions",551 .description = "Enable packed carry-less multiplication instructions",
553 .dependencies = sparseFeatureSet(&[_]Feature{552 .dependencies = featureSet(&[_]Feature{
554 .sse2,553 .sse2,
555 }),554 }),
556 };555 };
557 result[@enumToInt(Feature.pconfig)] = .{556 result[@enumToInt(Feature.pconfig)] = .{
558 .llvm_name = "pconfig",557 .llvm_name = "pconfig",
559 .description = "platform configuration instruction",558 .description = "platform configuration instruction",
560 .dependencies = sparseFeatureSet(&[_]Feature{}),559 .dependencies = featureSet(&[_]Feature{}),
561 };560 };
562 result[@enumToInt(Feature.pku)] = .{561 result[@enumToInt(Feature.pku)] = .{
563 .llvm_name = "pku",562 .llvm_name = "pku",
564 .description = "Enable protection keys",563 .description = "Enable protection keys",
565 .dependencies = sparseFeatureSet(&[_]Feature{}),564 .dependencies = featureSet(&[_]Feature{}),
566 };565 };
567 result[@enumToInt(Feature.popcnt)] = .{566 result[@enumToInt(Feature.popcnt)] = .{
568 .llvm_name = "popcnt",567 .llvm_name = "popcnt",
569 .description = "Support POPCNT instruction",568 .description = "Support POPCNT instruction",
570 .dependencies = sparseFeatureSet(&[_]Feature{}),569 .dependencies = featureSet(&[_]Feature{}),
571 };570 };
572 result[@enumToInt(Feature.prefer_256_bit)] = .{571 result[@enumToInt(Feature.prefer_256_bit)] = .{
573 .llvm_name = "prefer-256-bit",572 .llvm_name = "prefer-256-bit",
574 .description = "Prefer 256-bit AVX instructions",573 .description = "Prefer 256-bit AVX instructions",
575 .dependencies = sparseFeatureSet(&[_]Feature{}),574 .dependencies = featureSet(&[_]Feature{}),
576 };575 };
577 result[@enumToInt(Feature.prefetchwt1)] = .{576 result[@enumToInt(Feature.prefetchwt1)] = .{
578 .llvm_name = "prefetchwt1",577 .llvm_name = "prefetchwt1",
579 .description = "Prefetch with Intent to Write and T1 Hint",578 .description = "Prefetch with Intent to Write and T1 Hint",
580 .dependencies = sparseFeatureSet(&[_]Feature{}),579 .dependencies = featureSet(&[_]Feature{}),
581 };580 };
582 result[@enumToInt(Feature.prfchw)] = .{581 result[@enumToInt(Feature.prfchw)] = .{
583 .llvm_name = "prfchw",582 .llvm_name = "prfchw",
584 .description = "Support PRFCHW instructions",583 .description = "Support PRFCHW instructions",
585 .dependencies = sparseFeatureSet(&[_]Feature{}),584 .dependencies = featureSet(&[_]Feature{}),
586 };585 };
587 result[@enumToInt(Feature.ptwrite)] = .{586 result[@enumToInt(Feature.ptwrite)] = .{
588 .llvm_name = "ptwrite",587 .llvm_name = "ptwrite",
589 .description = "Support ptwrite instruction",588 .description = "Support ptwrite instruction",
590 .dependencies = sparseFeatureSet(&[_]Feature{}),589 .dependencies = featureSet(&[_]Feature{}),
591 };590 };
592 result[@enumToInt(Feature.rdpid)] = .{591 result[@enumToInt(Feature.rdpid)] = .{
593 .llvm_name = "rdpid",592 .llvm_name = "rdpid",
594 .description = "Support RDPID instructions",593 .description = "Support RDPID instructions",
595 .dependencies = sparseFeatureSet(&[_]Feature{}),594 .dependencies = featureSet(&[_]Feature{}),
596 };595 };
597 result[@enumToInt(Feature.rdrnd)] = .{596 result[@enumToInt(Feature.rdrnd)] = .{
598 .llvm_name = "rdrnd",597 .llvm_name = "rdrnd",
599 .description = "Support RDRAND instruction",598 .description = "Support RDRAND instruction",
600 .dependencies = sparseFeatureSet(&[_]Feature{}),599 .dependencies = featureSet(&[_]Feature{}),
601 };600 };
602 result[@enumToInt(Feature.rdseed)] = .{601 result[@enumToInt(Feature.rdseed)] = .{
603 .llvm_name = "rdseed",602 .llvm_name = "rdseed",
604 .description = "Support RDSEED instruction",603 .description = "Support RDSEED instruction",
605 .dependencies = sparseFeatureSet(&[_]Feature{}),604 .dependencies = featureSet(&[_]Feature{}),
606 };605 };
607 result[@enumToInt(Feature.retpoline)] = .{606 result[@enumToInt(Feature.retpoline)] = .{
608 .llvm_name = "retpoline",607 .llvm_name = "retpoline",
609 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",608 .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{
611 .retpoline_indirect_branches,610 .retpoline_indirect_branches,
612 .retpoline_indirect_calls,611 .retpoline_indirect_calls,
613 }),612 }),
...@@ -615,158 +614,158 @@ pub const all_features = blk: {...@@ -615,158 +614,158 @@ pub const all_features = blk: {
615 result[@enumToInt(Feature.retpoline_external_thunk)] = .{614 result[@enumToInt(Feature.retpoline_external_thunk)] = .{
616 .llvm_name = "retpoline-external-thunk",615 .llvm_name = "retpoline-external-thunk",
617 .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",616 .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{
619 .retpoline_indirect_calls,618 .retpoline_indirect_calls,
620 }),619 }),
621 };620 };
622 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{621 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{
623 .llvm_name = "retpoline-indirect-branches",622 .llvm_name = "retpoline-indirect-branches",
624 .description = "Remove speculation of indirect branches from the generated code",623 .description = "Remove speculation of indirect branches from the generated code",
625 .dependencies = sparseFeatureSet(&[_]Feature{}),624 .dependencies = featureSet(&[_]Feature{}),
626 };625 };
627 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{626 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{
628 .llvm_name = "retpoline-indirect-calls",627 .llvm_name = "retpoline-indirect-calls",
629 .description = "Remove speculation of indirect calls from the generated code",628 .description = "Remove speculation of indirect calls from the generated code",
630 .dependencies = sparseFeatureSet(&[_]Feature{}),629 .dependencies = featureSet(&[_]Feature{}),
631 };630 };
632 result[@enumToInt(Feature.rtm)] = .{631 result[@enumToInt(Feature.rtm)] = .{
633 .llvm_name = "rtm",632 .llvm_name = "rtm",
634 .description = "Support RTM instructions",633 .description = "Support RTM instructions",
635 .dependencies = sparseFeatureSet(&[_]Feature{}),634 .dependencies = featureSet(&[_]Feature{}),
636 };635 };
637 result[@enumToInt(Feature.sahf)] = .{636 result[@enumToInt(Feature.sahf)] = .{
638 .llvm_name = "sahf",637 .llvm_name = "sahf",
639 .description = "Support LAHF and SAHF instructions",638 .description = "Support LAHF and SAHF instructions",
640 .dependencies = sparseFeatureSet(&[_]Feature{}),639 .dependencies = featureSet(&[_]Feature{}),
641 };640 };
642 result[@enumToInt(Feature.sgx)] = .{641 result[@enumToInt(Feature.sgx)] = .{
643 .llvm_name = "sgx",642 .llvm_name = "sgx",
644 .description = "Enable Software Guard Extensions",643 .description = "Enable Software Guard Extensions",
645 .dependencies = sparseFeatureSet(&[_]Feature{}),644 .dependencies = featureSet(&[_]Feature{}),
646 };645 };
647 result[@enumToInt(Feature.sha)] = .{646 result[@enumToInt(Feature.sha)] = .{
648 .llvm_name = "sha",647 .llvm_name = "sha",
649 .description = "Enable SHA instructions",648 .description = "Enable SHA instructions",
650 .dependencies = sparseFeatureSet(&[_]Feature{649 .dependencies = featureSet(&[_]Feature{
651 .sse2,650 .sse2,
652 }),651 }),
653 };652 };
654 result[@enumToInt(Feature.shstk)] = .{653 result[@enumToInt(Feature.shstk)] = .{
655 .llvm_name = "shstk",654 .llvm_name = "shstk",
656 .description = "Support CET Shadow-Stack instructions",655 .description = "Support CET Shadow-Stack instructions",
657 .dependencies = sparseFeatureSet(&[_]Feature{}),656 .dependencies = featureSet(&[_]Feature{}),
658 };657 };
659 result[@enumToInt(Feature.slow_3ops_lea)] = .{658 result[@enumToInt(Feature.slow_3ops_lea)] = .{
660 .llvm_name = "slow-3ops-lea",659 .llvm_name = "slow-3ops-lea",
661 .description = "LEA instruction with 3 ops or certain registers is slow",660 .description = "LEA instruction with 3 ops or certain registers is slow",
662 .dependencies = sparseFeatureSet(&[_]Feature{}),661 .dependencies = featureSet(&[_]Feature{}),
663 };662 };
664 result[@enumToInt(Feature.slow_incdec)] = .{663 result[@enumToInt(Feature.slow_incdec)] = .{
665 .llvm_name = "slow-incdec",664 .llvm_name = "slow-incdec",
666 .description = "INC and DEC instructions are slower than ADD and SUB",665 .description = "INC and DEC instructions are slower than ADD and SUB",
667 .dependencies = sparseFeatureSet(&[_]Feature{}),666 .dependencies = featureSet(&[_]Feature{}),
668 };667 };
669 result[@enumToInt(Feature.slow_lea)] = .{668 result[@enumToInt(Feature.slow_lea)] = .{
670 .llvm_name = "slow-lea",669 .llvm_name = "slow-lea",
671 .description = "LEA instruction with certain arguments is slow",670 .description = "LEA instruction with certain arguments is slow",
672 .dependencies = sparseFeatureSet(&[_]Feature{}),671 .dependencies = featureSet(&[_]Feature{}),
673 };672 };
674 result[@enumToInt(Feature.slow_pmaddwd)] = .{673 result[@enumToInt(Feature.slow_pmaddwd)] = .{
675 .llvm_name = "slow-pmaddwd",674 .llvm_name = "slow-pmaddwd",
676 .description = "PMADDWD is slower than PMULLD",675 .description = "PMADDWD is slower than PMULLD",
677 .dependencies = sparseFeatureSet(&[_]Feature{}),676 .dependencies = featureSet(&[_]Feature{}),
678 };677 };
679 result[@enumToInt(Feature.slow_pmulld)] = .{678 result[@enumToInt(Feature.slow_pmulld)] = .{
680 .llvm_name = "slow-pmulld",679 .llvm_name = "slow-pmulld",
681 .description = "PMULLD instruction is slow",680 .description = "PMULLD instruction is slow",
682 .dependencies = sparseFeatureSet(&[_]Feature{}),681 .dependencies = featureSet(&[_]Feature{}),
683 };682 };
684 result[@enumToInt(Feature.slow_shld)] = .{683 result[@enumToInt(Feature.slow_shld)] = .{
685 .llvm_name = "slow-shld",684 .llvm_name = "slow-shld",
686 .description = "SHLD instruction is slow",685 .description = "SHLD instruction is slow",
687 .dependencies = sparseFeatureSet(&[_]Feature{}),686 .dependencies = featureSet(&[_]Feature{}),
688 };687 };
689 result[@enumToInt(Feature.slow_two_mem_ops)] = .{688 result[@enumToInt(Feature.slow_two_mem_ops)] = .{
690 .llvm_name = "slow-two-mem-ops",689 .llvm_name = "slow-two-mem-ops",
691 .description = "Two memory operand instructions are slow",690 .description = "Two memory operand instructions are slow",
692 .dependencies = sparseFeatureSet(&[_]Feature{}),691 .dependencies = featureSet(&[_]Feature{}),
693 };692 };
694 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{693 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{
695 .llvm_name = "slow-unaligned-mem-16",694 .llvm_name = "slow-unaligned-mem-16",
696 .description = "Slow unaligned 16-byte memory access",695 .description = "Slow unaligned 16-byte memory access",
697 .dependencies = sparseFeatureSet(&[_]Feature{}),696 .dependencies = featureSet(&[_]Feature{}),
698 };697 };
699 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{698 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{
700 .llvm_name = "slow-unaligned-mem-32",699 .llvm_name = "slow-unaligned-mem-32",
701 .description = "Slow unaligned 32-byte memory access",700 .description = "Slow unaligned 32-byte memory access",
702 .dependencies = sparseFeatureSet(&[_]Feature{}),701 .dependencies = featureSet(&[_]Feature{}),
703 };702 };
704 result[@enumToInt(Feature.soft_float)] = .{703 result[@enumToInt(Feature.soft_float)] = .{
705 .llvm_name = "soft-float",704 .llvm_name = "soft-float",
706 .description = "Use software floating point features",705 .description = "Use software floating point features",
707 .dependencies = sparseFeatureSet(&[_]Feature{}),706 .dependencies = featureSet(&[_]Feature{}),
708 };707 };
709 result[@enumToInt(Feature.sse)] = .{708 result[@enumToInt(Feature.sse)] = .{
710 .llvm_name = "sse",709 .llvm_name = "sse",
711 .description = "Enable SSE instructions",710 .description = "Enable SSE instructions",
712 .dependencies = sparseFeatureSet(&[_]Feature{}),711 .dependencies = featureSet(&[_]Feature{}),
713 };712 };
714 result[@enumToInt(Feature.sse_unaligned_mem)] = .{713 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
715 .llvm_name = "sse-unaligned-mem",714 .llvm_name = "sse-unaligned-mem",
716 .description = "Allow unaligned memory operands with SSE instructions",715 .description = "Allow unaligned memory operands with SSE instructions",
717 .dependencies = sparseFeatureSet(&[_]Feature{}),716 .dependencies = featureSet(&[_]Feature{}),
718 };717 };
719 result[@enumToInt(Feature.sse2)] = .{718 result[@enumToInt(Feature.sse2)] = .{
720 .llvm_name = "sse2",719 .llvm_name = "sse2",
721 .description = "Enable SSE2 instructions",720 .description = "Enable SSE2 instructions",
722 .dependencies = sparseFeatureSet(&[_]Feature{721 .dependencies = featureSet(&[_]Feature{
723 .sse,722 .sse,
724 }),723 }),
725 };724 };
726 result[@enumToInt(Feature.sse3)] = .{725 result[@enumToInt(Feature.sse3)] = .{
727 .llvm_name = "sse3",726 .llvm_name = "sse3",
728 .description = "Enable SSE3 instructions",727 .description = "Enable SSE3 instructions",
729 .dependencies = sparseFeatureSet(&[_]Feature{728 .dependencies = featureSet(&[_]Feature{
730 .sse2,729 .sse2,
731 }),730 }),
732 };731 };
733 result[@enumToInt(Feature.sse4_1)] = .{732 result[@enumToInt(Feature.sse4_1)] = .{
734 .llvm_name = "sse4.1",733 .llvm_name = "sse4.1",
735 .description = "Enable SSE 4.1 instructions",734 .description = "Enable SSE 4.1 instructions",
736 .dependencies = sparseFeatureSet(&[_]Feature{735 .dependencies = featureSet(&[_]Feature{
737 .ssse3,736 .ssse3,
738 }),737 }),
739 };738 };
740 result[@enumToInt(Feature.sse4_2)] = .{739 result[@enumToInt(Feature.sse4_2)] = .{
741 .llvm_name = "sse4.2",740 .llvm_name = "sse4.2",
742 .description = "Enable SSE 4.2 instructions",741 .description = "Enable SSE 4.2 instructions",
743 .dependencies = sparseFeatureSet(&[_]Feature{742 .dependencies = featureSet(&[_]Feature{
744 .sse4_1,743 .sse4_1,
745 }),744 }),
746 };745 };
747 result[@enumToInt(Feature.sse4a)] = .{746 result[@enumToInt(Feature.sse4a)] = .{
748 .llvm_name = "sse4a",747 .llvm_name = "sse4a",
749 .description = "Support SSE 4a instructions",748 .description = "Support SSE 4a instructions",
750 .dependencies = sparseFeatureSet(&[_]Feature{749 .dependencies = featureSet(&[_]Feature{
751 .sse3,750 .sse3,
752 }),751 }),
753 };752 };
754 result[@enumToInt(Feature.ssse3)] = .{753 result[@enumToInt(Feature.ssse3)] = .{
755 .llvm_name = "ssse3",754 .llvm_name = "ssse3",
756 .description = "Enable SSSE3 instructions",755 .description = "Enable SSSE3 instructions",
757 .dependencies = sparseFeatureSet(&[_]Feature{756 .dependencies = featureSet(&[_]Feature{
758 .sse3,757 .sse3,
759 }),758 }),
760 };759 };
761 result[@enumToInt(Feature.tbm)] = .{760 result[@enumToInt(Feature.tbm)] = .{
762 .llvm_name = "tbm",761 .llvm_name = "tbm",
763 .description = "Enable TBM instructions",762 .description = "Enable TBM instructions",
764 .dependencies = sparseFeatureSet(&[_]Feature{}),763 .dependencies = featureSet(&[_]Feature{}),
765 };764 };
766 result[@enumToInt(Feature.vaes)] = .{765 result[@enumToInt(Feature.vaes)] = .{
767 .llvm_name = "vaes",766 .llvm_name = "vaes",
768 .description = "Promote selected AES instructions to AVX512/AVX registers",767 .description = "Promote selected AES instructions to AVX512/AVX registers",
769 .dependencies = sparseFeatureSet(&[_]Feature{768 .dependencies = featureSet(&[_]Feature{
770 .aes,769 .aes,
771 .avx,770 .avx,
772 }),771 }),
...@@ -774,7 +773,7 @@ pub const all_features = blk: {...@@ -774,7 +773,7 @@ pub const all_features = blk: {
774 result[@enumToInt(Feature.vpclmulqdq)] = .{773 result[@enumToInt(Feature.vpclmulqdq)] = .{
775 .llvm_name = "vpclmulqdq",774 .llvm_name = "vpclmulqdq",
776 .description = "Enable vpclmulqdq instructions",775 .description = "Enable vpclmulqdq instructions",
777 .dependencies = sparseFeatureSet(&[_]Feature{776 .dependencies = featureSet(&[_]Feature{
778 .avx,777 .avx,
779 .pclmul,778 .pclmul,
780 }),779 }),
...@@ -782,50 +781,49 @@ pub const all_features = blk: {...@@ -782,50 +781,49 @@ pub const all_features = blk: {
782 result[@enumToInt(Feature.waitpkg)] = .{781 result[@enumToInt(Feature.waitpkg)] = .{
783 .llvm_name = "waitpkg",782 .llvm_name = "waitpkg",
784 .description = "Wait and pause enhancements",783 .description = "Wait and pause enhancements",
785 .dependencies = sparseFeatureSet(&[_]Feature{}),784 .dependencies = featureSet(&[_]Feature{}),
786 };785 };
787 result[@enumToInt(Feature.wbnoinvd)] = .{786 result[@enumToInt(Feature.wbnoinvd)] = .{
788 .llvm_name = "wbnoinvd",787 .llvm_name = "wbnoinvd",
789 .description = "Write Back No Invalidate",788 .description = "Write Back No Invalidate",
790 .dependencies = sparseFeatureSet(&[_]Feature{}),789 .dependencies = featureSet(&[_]Feature{}),
791 };790 };
792 result[@enumToInt(Feature.x87)] = .{791 result[@enumToInt(Feature.x87)] = .{
793 .llvm_name = "x87",792 .llvm_name = "x87",
794 .description = "Enable X87 float instructions",793 .description = "Enable X87 float instructions",
795 .dependencies = sparseFeatureSet(&[_]Feature{}),794 .dependencies = featureSet(&[_]Feature{}),
796 };795 };
797 result[@enumToInt(Feature.xop)] = .{796 result[@enumToInt(Feature.xop)] = .{
798 .llvm_name = "xop",797 .llvm_name = "xop",
799 .description = "Enable XOP instructions",798 .description = "Enable XOP instructions",
800 .dependencies = sparseFeatureSet(&[_]Feature{799 .dependencies = featureSet(&[_]Feature{
801 .fma4,800 .fma4,
802 }),801 }),
803 };802 };
804 result[@enumToInt(Feature.xsave)] = .{803 result[@enumToInt(Feature.xsave)] = .{
805 .llvm_name = "xsave",804 .llvm_name = "xsave",
806 .description = "Support xsave instructions",805 .description = "Support xsave instructions",
807 .dependencies = sparseFeatureSet(&[_]Feature{}),806 .dependencies = featureSet(&[_]Feature{}),
808 };807 };
809 result[@enumToInt(Feature.xsavec)] = .{808 result[@enumToInt(Feature.xsavec)] = .{
810 .llvm_name = "xsavec",809 .llvm_name = "xsavec",
811 .description = "Support xsavec instructions",810 .description = "Support xsavec instructions",
812 .dependencies = sparseFeatureSet(&[_]Feature{}),811 .dependencies = featureSet(&[_]Feature{}),
813 };812 };
814 result[@enumToInt(Feature.xsaveopt)] = .{813 result[@enumToInt(Feature.xsaveopt)] = .{
815 .llvm_name = "xsaveopt",814 .llvm_name = "xsaveopt",
816 .description = "Support xsaveopt instructions",815 .description = "Support xsaveopt instructions",
817 .dependencies = sparseFeatureSet(&[_]Feature{}),816 .dependencies = featureSet(&[_]Feature{}),
818 };817 };
819 result[@enumToInt(Feature.xsaves)] = .{818 result[@enumToInt(Feature.xsaves)] = .{
820 .llvm_name = "xsaves",819 .llvm_name = "xsaves",
821 .description = "Support xsaves instructions",820 .description = "Support xsaves instructions",
822 .dependencies = sparseFeatureSet(&[_]Feature{}),821 .dependencies = featureSet(&[_]Feature{}),
823 };822 };
824 const ti = @typeInfo(Feature);823 const ti = @typeInfo(Feature);
825 for (result) |*elem, i| {824 for (result) |*elem, i| {
826 elem.index = i;825 elem.index = i;
827 elem.name = ti.Enum.fields[i].name;826 elem.name = ti.Enum.fields[i].name;
828 elem.dependencies.initAsDependencies(i, &result);
829 }827 }
830 break :blk result;828 break :blk result;
831};829};
...@@ -834,7 +832,7 @@ pub const cpu = struct {...@@ -834,7 +832,7 @@ pub const cpu = struct {
834 pub const amdfam10 = Cpu{832 pub const amdfam10 = Cpu{
835 .name = "amdfam10",833 .name = "amdfam10",
836 .llvm_name = "amdfam10",834 .llvm_name = "amdfam10",
837 .features = featureSet(&all_features, &[_]Feature{835 .features = featureSet(&[_]Feature{
838 .@"3dnowa",836 .@"3dnowa",
839 .@"64bit",837 .@"64bit",
840 .cmov,838 .cmov,
...@@ -854,7 +852,7 @@ pub const cpu = struct {...@@ -854,7 +852,7 @@ pub const cpu = struct {
854 pub const athlon = Cpu{852 pub const athlon = Cpu{
855 .name = "athlon",853 .name = "athlon",
856 .llvm_name = "athlon",854 .llvm_name = "athlon",
857 .features = featureSet(&all_features, &[_]Feature{855 .features = featureSet(&[_]Feature{
858 .@"3dnowa",856 .@"3dnowa",
859 .cmov,857 .cmov,
860 .cx8,858 .cx8,
...@@ -867,7 +865,7 @@ pub const cpu = struct {...@@ -867,7 +865,7 @@ pub const cpu = struct {
867 pub const athlon_4 = Cpu{865 pub const athlon_4 = Cpu{
868 .name = "athlon_4",866 .name = "athlon_4",
869 .llvm_name = "athlon-4",867 .llvm_name = "athlon-4",
870 .features = featureSet(&all_features, &[_]Feature{868 .features = featureSet(&[_]Feature{
871 .@"3dnowa",869 .@"3dnowa",
872 .cmov,870 .cmov,
873 .cx8,871 .cx8,
...@@ -882,7 +880,7 @@ pub const cpu = struct {...@@ -882,7 +880,7 @@ pub const cpu = struct {
882 pub const athlon_fx = Cpu{880 pub const athlon_fx = Cpu{
883 .name = "athlon_fx",881 .name = "athlon_fx",
884 .llvm_name = "athlon-fx",882 .llvm_name = "athlon-fx",
885 .features = featureSet(&all_features, &[_]Feature{883 .features = featureSet(&[_]Feature{
886 .@"3dnowa",884 .@"3dnowa",
887 .@"64bit",885 .@"64bit",
888 .cmov,886 .cmov,
...@@ -899,7 +897,7 @@ pub const cpu = struct {...@@ -899,7 +897,7 @@ pub const cpu = struct {
899 pub const athlon_mp = Cpu{897 pub const athlon_mp = Cpu{
900 .name = "athlon_mp",898 .name = "athlon_mp",
901 .llvm_name = "athlon-mp",899 .llvm_name = "athlon-mp",
902 .features = featureSet(&all_features, &[_]Feature{900 .features = featureSet(&[_]Feature{
903 .@"3dnowa",901 .@"3dnowa",
904 .cmov,902 .cmov,
905 .cx8,903 .cx8,
...@@ -914,7 +912,7 @@ pub const cpu = struct {...@@ -914,7 +912,7 @@ pub const cpu = struct {
914 pub const athlon_tbird = Cpu{912 pub const athlon_tbird = Cpu{
915 .name = "athlon_tbird",913 .name = "athlon_tbird",
916 .llvm_name = "athlon-tbird",914 .llvm_name = "athlon-tbird",
917 .features = featureSet(&all_features, &[_]Feature{915 .features = featureSet(&[_]Feature{
918 .@"3dnowa",916 .@"3dnowa",
919 .cmov,917 .cmov,
920 .cx8,918 .cx8,
...@@ -927,7 +925,7 @@ pub const cpu = struct {...@@ -927,7 +925,7 @@ pub const cpu = struct {
927 pub const athlon_xp = Cpu{925 pub const athlon_xp = Cpu{
928 .name = "athlon_xp",926 .name = "athlon_xp",
929 .llvm_name = "athlon-xp",927 .llvm_name = "athlon-xp",
930 .features = featureSet(&all_features, &[_]Feature{928 .features = featureSet(&[_]Feature{
931 .@"3dnowa",929 .@"3dnowa",
932 .cmov,930 .cmov,
933 .cx8,931 .cx8,
...@@ -942,7 +940,7 @@ pub const cpu = struct {...@@ -942,7 +940,7 @@ pub const cpu = struct {
942 pub const athlon64 = Cpu{940 pub const athlon64 = Cpu{
943 .name = "athlon64",941 .name = "athlon64",
944 .llvm_name = "athlon64",942 .llvm_name = "athlon64",
945 .features = featureSet(&all_features, &[_]Feature{943 .features = featureSet(&[_]Feature{
946 .@"3dnowa",944 .@"3dnowa",
947 .@"64bit",945 .@"64bit",
948 .cmov,946 .cmov,
...@@ -959,7 +957,7 @@ pub const cpu = struct {...@@ -959,7 +957,7 @@ pub const cpu = struct {
959 pub const athlon64_sse3 = Cpu{957 pub const athlon64_sse3 = Cpu{
960 .name = "athlon64_sse3",958 .name = "athlon64_sse3",
961 .llvm_name = "athlon64-sse3",959 .llvm_name = "athlon64-sse3",
962 .features = featureSet(&all_features, &[_]Feature{960 .features = featureSet(&[_]Feature{
963 .@"3dnowa",961 .@"3dnowa",
964 .@"64bit",962 .@"64bit",
965 .cmov,963 .cmov,
...@@ -977,7 +975,7 @@ pub const cpu = struct {...@@ -977,7 +975,7 @@ pub const cpu = struct {
977 pub const atom = Cpu{975 pub const atom = Cpu{
978 .name = "atom",976 .name = "atom",
979 .llvm_name = "atom",977 .llvm_name = "atom",
980 .features = featureSet(&all_features, &[_]Feature{978 .features = featureSet(&[_]Feature{
981 .@"64bit",979 .@"64bit",
982 .cmov,980 .cmov,
983 .cx16,981 .cx16,
...@@ -1001,7 +999,7 @@ pub const cpu = struct {...@@ -1001,7 +999,7 @@ pub const cpu = struct {
1001 pub const barcelona = Cpu{999 pub const barcelona = Cpu{
1002 .name = "barcelona",1000 .name = "barcelona",
1003 .llvm_name = "barcelona",1001 .llvm_name = "barcelona",
1004 .features = featureSet(&all_features, &[_]Feature{1002 .features = featureSet(&[_]Feature{
1005 .@"3dnowa",1003 .@"3dnowa",
1006 .@"64bit",1004 .@"64bit",
1007 .cmov,1005 .cmov,
...@@ -1021,7 +1019,7 @@ pub const cpu = struct {...@@ -1021,7 +1019,7 @@ pub const cpu = struct {
1021 pub const bdver1 = Cpu{1019 pub const bdver1 = Cpu{
1022 .name = "bdver1",1020 .name = "bdver1",
1023 .llvm_name = "bdver1",1021 .llvm_name = "bdver1",
1024 .features = featureSet(&all_features, &[_]Feature{1022 .features = featureSet(&[_]Feature{
1025 .@"64bit",1023 .@"64bit",
1026 .aes,1024 .aes,
1027 .branchfusion,1025 .branchfusion,
...@@ -1048,7 +1046,7 @@ pub const cpu = struct {...@@ -1048,7 +1046,7 @@ pub const cpu = struct {
1048 pub const bdver2 = Cpu{1046 pub const bdver2 = Cpu{
1049 .name = "bdver2",1047 .name = "bdver2",
1050 .llvm_name = "bdver2",1048 .llvm_name = "bdver2",
1051 .features = featureSet(&all_features, &[_]Feature{1049 .features = featureSet(&[_]Feature{
1052 .@"64bit",1050 .@"64bit",
1053 .aes,1051 .aes,
1054 .bmi,1052 .bmi,
...@@ -1080,7 +1078,7 @@ pub const cpu = struct {...@@ -1080,7 +1078,7 @@ pub const cpu = struct {
1080 pub const bdver3 = Cpu{1078 pub const bdver3 = Cpu{
1081 .name = "bdver3",1079 .name = "bdver3",
1082 .llvm_name = "bdver3",1080 .llvm_name = "bdver3",
1083 .features = featureSet(&all_features, &[_]Feature{1081 .features = featureSet(&[_]Feature{
1084 .@"64bit",1082 .@"64bit",
1085 .aes,1083 .aes,
1086 .bmi,1084 .bmi,
...@@ -1114,7 +1112,7 @@ pub const cpu = struct {...@@ -1114,7 +1112,7 @@ pub const cpu = struct {
1114 pub const bdver4 = Cpu{1112 pub const bdver4 = Cpu{
1115 .name = "bdver4",1113 .name = "bdver4",
1116 .llvm_name = "bdver4",1114 .llvm_name = "bdver4",
1117 .features = featureSet(&all_features, &[_]Feature{1115 .features = featureSet(&[_]Feature{
1118 .@"64bit",1116 .@"64bit",
1119 .aes,1117 .aes,
1120 .avx2,1118 .avx2,
...@@ -1151,7 +1149,7 @@ pub const cpu = struct {...@@ -1151,7 +1149,7 @@ pub const cpu = struct {
1151 pub const bonnell = Cpu{1149 pub const bonnell = Cpu{
1152 .name = "bonnell",1150 .name = "bonnell",
1153 .llvm_name = "bonnell",1151 .llvm_name = "bonnell",
1154 .features = featureSet(&all_features, &[_]Feature{1152 .features = featureSet(&[_]Feature{
1155 .@"64bit",1153 .@"64bit",
1156 .cmov,1154 .cmov,
1157 .cx16,1155 .cx16,
...@@ -1175,7 +1173,7 @@ pub const cpu = struct {...@@ -1175,7 +1173,7 @@ pub const cpu = struct {
1175 pub const broadwell = Cpu{1173 pub const broadwell = Cpu{
1176 .name = "broadwell",1174 .name = "broadwell",
1177 .llvm_name = "broadwell",1175 .llvm_name = "broadwell",
1178 .features = featureSet(&all_features, &[_]Feature{1176 .features = featureSet(&[_]Feature{
1179 .@"64bit",1177 .@"64bit",
1180 .adx,1178 .adx,
1181 .avx,1179 .avx,
...@@ -1219,7 +1217,7 @@ pub const cpu = struct {...@@ -1219,7 +1217,7 @@ pub const cpu = struct {
1219 pub const btver1 = Cpu{1217 pub const btver1 = Cpu{
1220 .name = "btver1",1218 .name = "btver1",
1221 .llvm_name = "btver1",1219 .llvm_name = "btver1",
1222 .features = featureSet(&all_features, &[_]Feature{1220 .features = featureSet(&[_]Feature{
1223 .@"64bit",1221 .@"64bit",
1224 .cmov,1222 .cmov,
1225 .cx16,1223 .cx16,
...@@ -1243,7 +1241,7 @@ pub const cpu = struct {...@@ -1243,7 +1241,7 @@ pub const cpu = struct {
1243 pub const btver2 = Cpu{1241 pub const btver2 = Cpu{
1244 .name = "btver2",1242 .name = "btver2",
1245 .llvm_name = "btver2",1243 .llvm_name = "btver2",
1246 .features = featureSet(&all_features, &[_]Feature{1244 .features = featureSet(&[_]Feature{
1247 .@"64bit",1245 .@"64bit",
1248 .aes,1246 .aes,
1249 .avx,1247 .avx,
...@@ -1279,7 +1277,7 @@ pub const cpu = struct {...@@ -1279,7 +1277,7 @@ pub const cpu = struct {
1279 pub const c3 = Cpu{1277 pub const c3 = Cpu{
1280 .name = "c3",1278 .name = "c3",
1281 .llvm_name = "c3",1279 .llvm_name = "c3",
1282 .features = featureSet(&all_features, &[_]Feature{1280 .features = featureSet(&[_]Feature{
1283 .@"3dnow",1281 .@"3dnow",
1284 .slow_unaligned_mem_16,1282 .slow_unaligned_mem_16,
1285 .x87,1283 .x87,
...@@ -1288,7 +1286,7 @@ pub const cpu = struct {...@@ -1288,7 +1286,7 @@ pub const cpu = struct {
1288 pub const c3_2 = Cpu{1286 pub const c3_2 = Cpu{
1289 .name = "c3_2",1287 .name = "c3_2",
1290 .llvm_name = "c3-2",1288 .llvm_name = "c3-2",
1291 .features = featureSet(&all_features, &[_]Feature{1289 .features = featureSet(&[_]Feature{
1292 .cmov,1290 .cmov,
1293 .cx8,1291 .cx8,
1294 .fxsr,1292 .fxsr,
...@@ -1301,7 +1299,7 @@ pub const cpu = struct {...@@ -1301,7 +1299,7 @@ pub const cpu = struct {
1301 pub const cannonlake = Cpu{1299 pub const cannonlake = Cpu{
1302 .name = "cannonlake",1300 .name = "cannonlake",
1303 .llvm_name = "cannonlake",1301 .llvm_name = "cannonlake",
1304 .features = featureSet(&all_features, &[_]Feature{1302 .features = featureSet(&[_]Feature{
1305 .@"64bit",1303 .@"64bit",
1306 .adx,1304 .adx,
1307 .aes,1305 .aes,
...@@ -1360,7 +1358,7 @@ pub const cpu = struct {...@@ -1360,7 +1358,7 @@ pub const cpu = struct {
1360 pub const cascadelake = Cpu{1358 pub const cascadelake = Cpu{
1361 .name = "cascadelake",1359 .name = "cascadelake",
1362 .llvm_name = "cascadelake",1360 .llvm_name = "cascadelake",
1363 .features = featureSet(&all_features, &[_]Feature{1361 .features = featureSet(&[_]Feature{
1364 .@"64bit",1362 .@"64bit",
1365 .adx,1363 .adx,
1366 .aes,1364 .aes,
...@@ -1418,7 +1416,7 @@ pub const cpu = struct {...@@ -1418,7 +1416,7 @@ pub const cpu = struct {
1418 pub const cooperlake = Cpu{1416 pub const cooperlake = Cpu{
1419 .name = "cooperlake",1417 .name = "cooperlake",
1420 .llvm_name = "cooperlake",1418 .llvm_name = "cooperlake",
1421 .features = featureSet(&all_features, &[_]Feature{1419 .features = featureSet(&[_]Feature{
1422 .@"64bit",1420 .@"64bit",
1423 .adx,1421 .adx,
1424 .aes,1422 .aes,
...@@ -1477,7 +1475,7 @@ pub const cpu = struct {...@@ -1477,7 +1475,7 @@ pub const cpu = struct {
1477 pub const core_avx_i = Cpu{1475 pub const core_avx_i = Cpu{
1478 .name = "core_avx_i",1476 .name = "core_avx_i",
1479 .llvm_name = "core-avx-i",1477 .llvm_name = "core-avx-i",
1480 .features = featureSet(&all_features, &[_]Feature{1478 .features = featureSet(&[_]Feature{
1481 .@"64bit",1479 .@"64bit",
1482 .avx,1480 .avx,
1483 .cmov,1481 .cmov,
...@@ -1509,7 +1507,7 @@ pub const cpu = struct {...@@ -1509,7 +1507,7 @@ pub const cpu = struct {
1509 pub const core_avx2 = Cpu{1507 pub const core_avx2 = Cpu{
1510 .name = "core_avx2",1508 .name = "core_avx2",
1511 .llvm_name = "core-avx2",1509 .llvm_name = "core-avx2",
1512 .features = featureSet(&all_features, &[_]Feature{1510 .features = featureSet(&[_]Feature{
1513 .@"64bit",1511 .@"64bit",
1514 .avx,1512 .avx,
1515 .avx2,1513 .avx2,
...@@ -1550,7 +1548,7 @@ pub const cpu = struct {...@@ -1550,7 +1548,7 @@ pub const cpu = struct {
1550 pub const core2 = Cpu{1548 pub const core2 = Cpu{
1551 .name = "core2",1549 .name = "core2",
1552 .llvm_name = "core2",1550 .llvm_name = "core2",
1553 .features = featureSet(&all_features, &[_]Feature{1551 .features = featureSet(&[_]Feature{
1554 .@"64bit",1552 .@"64bit",
1555 .cmov,1553 .cmov,
1556 .cx16,1554 .cx16,
...@@ -1568,7 +1566,7 @@ pub const cpu = struct {...@@ -1568,7 +1566,7 @@ pub const cpu = struct {
1568 pub const corei7 = Cpu{1566 pub const corei7 = Cpu{
1569 .name = "corei7",1567 .name = "corei7",
1570 .llvm_name = "corei7",1568 .llvm_name = "corei7",
1571 .features = featureSet(&all_features, &[_]Feature{1569 .features = featureSet(&[_]Feature{
1572 .@"64bit",1570 .@"64bit",
1573 .cmov,1571 .cmov,
1574 .cx16,1572 .cx16,
...@@ -1586,7 +1584,7 @@ pub const cpu = struct {...@@ -1586,7 +1584,7 @@ pub const cpu = struct {
1586 pub const corei7_avx = Cpu{1584 pub const corei7_avx = Cpu{
1587 .name = "corei7_avx",1585 .name = "corei7_avx",
1588 .llvm_name = "corei7-avx",1586 .llvm_name = "corei7-avx",
1589 .features = featureSet(&all_features, &[_]Feature{1587 .features = featureSet(&[_]Feature{
1590 .@"64bit",1588 .@"64bit",
1591 .avx,1589 .avx,
1592 .cmov,1590 .cmov,
...@@ -1615,7 +1613,7 @@ pub const cpu = struct {...@@ -1615,7 +1613,7 @@ pub const cpu = struct {
1615 pub const generic = Cpu{1613 pub const generic = Cpu{
1616 .name = "generic",1614 .name = "generic",
1617 .llvm_name = "generic",1615 .llvm_name = "generic",
1618 .features = featureSet(&all_features, &[_]Feature{1616 .features = featureSet(&[_]Feature{
1619 .cx8,1617 .cx8,
1620 .slow_unaligned_mem_16,1618 .slow_unaligned_mem_16,
1621 .x87,1619 .x87,
...@@ -1624,7 +1622,7 @@ pub const cpu = struct {...@@ -1624,7 +1622,7 @@ pub const cpu = struct {
1624 pub const geode = Cpu{1622 pub const geode = Cpu{
1625 .name = "geode",1623 .name = "geode",
1626 .llvm_name = "geode",1624 .llvm_name = "geode",
1627 .features = featureSet(&all_features, &[_]Feature{1625 .features = featureSet(&[_]Feature{
1628 .@"3dnowa",1626 .@"3dnowa",
1629 .cx8,1627 .cx8,
1630 .slow_unaligned_mem_16,1628 .slow_unaligned_mem_16,
...@@ -1634,7 +1632,7 @@ pub const cpu = struct {...@@ -1634,7 +1632,7 @@ pub const cpu = struct {
1634 pub const goldmont = Cpu{1632 pub const goldmont = Cpu{
1635 .name = "goldmont",1633 .name = "goldmont",
1636 .llvm_name = "goldmont",1634 .llvm_name = "goldmont",
1637 .features = featureSet(&all_features, &[_]Feature{1635 .features = featureSet(&[_]Feature{
1638 .@"64bit",1636 .@"64bit",
1639 .aes,1637 .aes,
1640 .clflushopt,1638 .clflushopt,
...@@ -1670,7 +1668,7 @@ pub const cpu = struct {...@@ -1670,7 +1668,7 @@ pub const cpu = struct {
1670 pub const goldmont_plus = Cpu{1668 pub const goldmont_plus = Cpu{
1671 .name = "goldmont_plus",1669 .name = "goldmont_plus",
1672 .llvm_name = "goldmont-plus",1670 .llvm_name = "goldmont-plus",
1673 .features = featureSet(&all_features, &[_]Feature{1671 .features = featureSet(&[_]Feature{
1674 .@"64bit",1672 .@"64bit",
1675 .aes,1673 .aes,
1676 .clflushopt,1674 .clflushopt,
...@@ -1708,7 +1706,7 @@ pub const cpu = struct {...@@ -1708,7 +1706,7 @@ pub const cpu = struct {
1708 pub const haswell = Cpu{1706 pub const haswell = Cpu{
1709 .name = "haswell",1707 .name = "haswell",
1710 .llvm_name = "haswell",1708 .llvm_name = "haswell",
1711 .features = featureSet(&all_features, &[_]Feature{1709 .features = featureSet(&[_]Feature{
1712 .@"64bit",1710 .@"64bit",
1713 .avx,1711 .avx,
1714 .avx2,1712 .avx2,
...@@ -1749,7 +1747,7 @@ pub const cpu = struct {...@@ -1749,7 +1747,7 @@ pub const cpu = struct {
1749 pub const _i386 = Cpu{1747 pub const _i386 = Cpu{
1750 .name = "_i386",1748 .name = "_i386",
1751 .llvm_name = "i386",1749 .llvm_name = "i386",
1752 .features = featureSet(&all_features, &[_]Feature{1750 .features = featureSet(&[_]Feature{
1753 .slow_unaligned_mem_16,1751 .slow_unaligned_mem_16,
1754 .x87,1752 .x87,
1755 }),1753 }),
...@@ -1757,7 +1755,7 @@ pub const cpu = struct {...@@ -1757,7 +1755,7 @@ pub const cpu = struct {
1757 pub const _i486 = Cpu{1755 pub const _i486 = Cpu{
1758 .name = "_i486",1756 .name = "_i486",
1759 .llvm_name = "i486",1757 .llvm_name = "i486",
1760 .features = featureSet(&all_features, &[_]Feature{1758 .features = featureSet(&[_]Feature{
1761 .slow_unaligned_mem_16,1759 .slow_unaligned_mem_16,
1762 .x87,1760 .x87,
1763 }),1761 }),
...@@ -1765,7 +1763,7 @@ pub const cpu = struct {...@@ -1765,7 +1763,7 @@ pub const cpu = struct {
1765 pub const _i586 = Cpu{1763 pub const _i586 = Cpu{
1766 .name = "_i586",1764 .name = "_i586",
1767 .llvm_name = "i586",1765 .llvm_name = "i586",
1768 .features = featureSet(&all_features, &[_]Feature{1766 .features = featureSet(&[_]Feature{
1769 .cx8,1767 .cx8,
1770 .slow_unaligned_mem_16,1768 .slow_unaligned_mem_16,
1771 .x87,1769 .x87,
...@@ -1774,7 +1772,7 @@ pub const cpu = struct {...@@ -1774,7 +1772,7 @@ pub const cpu = struct {
1774 pub const _i686 = Cpu{1772 pub const _i686 = Cpu{
1775 .name = "_i686",1773 .name = "_i686",
1776 .llvm_name = "i686",1774 .llvm_name = "i686",
1777 .features = featureSet(&all_features, &[_]Feature{1775 .features = featureSet(&[_]Feature{
1778 .cmov,1776 .cmov,
1779 .cx8,1777 .cx8,
1780 .slow_unaligned_mem_16,1778 .slow_unaligned_mem_16,
...@@ -1784,7 +1782,7 @@ pub const cpu = struct {...@@ -1784,7 +1782,7 @@ pub const cpu = struct {
1784 pub const icelake_client = Cpu{1782 pub const icelake_client = Cpu{
1785 .name = "icelake_client",1783 .name = "icelake_client",
1786 .llvm_name = "icelake-client",1784 .llvm_name = "icelake-client",
1787 .features = featureSet(&all_features, &[_]Feature{1785 .features = featureSet(&[_]Feature{
1788 .@"64bit",1786 .@"64bit",
1789 .adx,1787 .adx,
1790 .aes,1788 .aes,
...@@ -1852,7 +1850,7 @@ pub const cpu = struct {...@@ -1852,7 +1850,7 @@ pub const cpu = struct {
1852 pub const icelake_server = Cpu{1850 pub const icelake_server = Cpu{
1853 .name = "icelake_server",1851 .name = "icelake_server",
1854 .llvm_name = "icelake-server",1852 .llvm_name = "icelake-server",
1855 .features = featureSet(&all_features, &[_]Feature{1853 .features = featureSet(&[_]Feature{
1856 .@"64bit",1854 .@"64bit",
1857 .adx,1855 .adx,
1858 .aes,1856 .aes,
...@@ -1922,7 +1920,7 @@ pub const cpu = struct {...@@ -1922,7 +1920,7 @@ pub const cpu = struct {
1922 pub const ivybridge = Cpu{1920 pub const ivybridge = Cpu{
1923 .name = "ivybridge",1921 .name = "ivybridge",
1924 .llvm_name = "ivybridge",1922 .llvm_name = "ivybridge",
1925 .features = featureSet(&all_features, &[_]Feature{1923 .features = featureSet(&[_]Feature{
1926 .@"64bit",1924 .@"64bit",
1927 .avx,1925 .avx,
1928 .cmov,1926 .cmov,
...@@ -1954,7 +1952,7 @@ pub const cpu = struct {...@@ -1954,7 +1952,7 @@ pub const cpu = struct {
1954 pub const k6 = Cpu{1952 pub const k6 = Cpu{
1955 .name = "k6",1953 .name = "k6",
1956 .llvm_name = "k6",1954 .llvm_name = "k6",
1957 .features = featureSet(&all_features, &[_]Feature{1955 .features = featureSet(&[_]Feature{
1958 .cx8,1956 .cx8,
1959 .mmx,1957 .mmx,
1960 .slow_unaligned_mem_16,1958 .slow_unaligned_mem_16,
...@@ -1964,7 +1962,7 @@ pub const cpu = struct {...@@ -1964,7 +1962,7 @@ pub const cpu = struct {
1964 pub const k6_2 = Cpu{1962 pub const k6_2 = Cpu{
1965 .name = "k6_2",1963 .name = "k6_2",
1966 .llvm_name = "k6-2",1964 .llvm_name = "k6-2",
1967 .features = featureSet(&all_features, &[_]Feature{1965 .features = featureSet(&[_]Feature{
1968 .@"3dnow",1966 .@"3dnow",
1969 .cx8,1967 .cx8,
1970 .slow_unaligned_mem_16,1968 .slow_unaligned_mem_16,
...@@ -1974,7 +1972,7 @@ pub const cpu = struct {...@@ -1974,7 +1972,7 @@ pub const cpu = struct {
1974 pub const k6_3 = Cpu{1972 pub const k6_3 = Cpu{
1975 .name = "k6_3",1973 .name = "k6_3",
1976 .llvm_name = "k6-3",1974 .llvm_name = "k6-3",
1977 .features = featureSet(&all_features, &[_]Feature{1975 .features = featureSet(&[_]Feature{
1978 .@"3dnow",1976 .@"3dnow",
1979 .cx8,1977 .cx8,
1980 .slow_unaligned_mem_16,1978 .slow_unaligned_mem_16,
...@@ -1984,7 +1982,7 @@ pub const cpu = struct {...@@ -1984,7 +1982,7 @@ pub const cpu = struct {
1984 pub const k8 = Cpu{1982 pub const k8 = Cpu{
1985 .name = "k8",1983 .name = "k8",
1986 .llvm_name = "k8",1984 .llvm_name = "k8",
1987 .features = featureSet(&all_features, &[_]Feature{1985 .features = featureSet(&[_]Feature{
1988 .@"3dnowa",1986 .@"3dnowa",
1989 .@"64bit",1987 .@"64bit",
1990 .cmov,1988 .cmov,
...@@ -2001,7 +1999,7 @@ pub const cpu = struct {...@@ -2001,7 +1999,7 @@ pub const cpu = struct {
2001 pub const k8_sse3 = Cpu{1999 pub const k8_sse3 = Cpu{
2002 .name = "k8_sse3",2000 .name = "k8_sse3",
2003 .llvm_name = "k8-sse3",2001 .llvm_name = "k8-sse3",
2004 .features = featureSet(&all_features, &[_]Feature{2002 .features = featureSet(&[_]Feature{
2005 .@"3dnowa",2003 .@"3dnowa",
2006 .@"64bit",2004 .@"64bit",
2007 .cmov,2005 .cmov,
...@@ -2019,7 +2017,7 @@ pub const cpu = struct {...@@ -2019,7 +2017,7 @@ pub const cpu = struct {
2019 pub const knl = Cpu{2017 pub const knl = Cpu{
2020 .name = "knl",2018 .name = "knl",
2021 .llvm_name = "knl",2019 .llvm_name = "knl",
2022 .features = featureSet(&all_features, &[_]Feature{2020 .features = featureSet(&[_]Feature{
2023 .@"64bit",2021 .@"64bit",
2024 .adx,2022 .adx,
2025 .aes,2023 .aes,
...@@ -2062,7 +2060,7 @@ pub const cpu = struct {...@@ -2062,7 +2060,7 @@ pub const cpu = struct {
2062 pub const knm = Cpu{2060 pub const knm = Cpu{
2063 .name = "knm",2061 .name = "knm",
2064 .llvm_name = "knm",2062 .llvm_name = "knm",
2065 .features = featureSet(&all_features, &[_]Feature{2063 .features = featureSet(&[_]Feature{
2066 .@"64bit",2064 .@"64bit",
2067 .adx,2065 .adx,
2068 .aes,2066 .aes,
...@@ -2106,12 +2104,12 @@ pub const cpu = struct {...@@ -2106,12 +2104,12 @@ pub const cpu = struct {
2106 pub const lakemont = Cpu{2104 pub const lakemont = Cpu{
2107 .name = "lakemont",2105 .name = "lakemont",
2108 .llvm_name = "lakemont",2106 .llvm_name = "lakemont",
2109 .features = featureSet(&all_features, &[_]Feature{}),2107 .features = featureSet(&[_]Feature{}),
2110 };2108 };
2111 pub const nehalem = Cpu{2109 pub const nehalem = Cpu{
2112 .name = "nehalem",2110 .name = "nehalem",
2113 .llvm_name = "nehalem",2111 .llvm_name = "nehalem",
2114 .features = featureSet(&all_features, &[_]Feature{2112 .features = featureSet(&[_]Feature{
2115 .@"64bit",2113 .@"64bit",
2116 .cmov,2114 .cmov,
2117 .cx16,2115 .cx16,
...@@ -2129,7 +2127,7 @@ pub const cpu = struct {...@@ -2129,7 +2127,7 @@ pub const cpu = struct {
2129 pub const nocona = Cpu{2127 pub const nocona = Cpu{
2130 .name = "nocona",2128 .name = "nocona",
2131 .llvm_name = "nocona",2129 .llvm_name = "nocona",
2132 .features = featureSet(&all_features, &[_]Feature{2130 .features = featureSet(&[_]Feature{
2133 .@"64bit",2131 .@"64bit",
2134 .cmov,2132 .cmov,
2135 .cx16,2133 .cx16,
...@@ -2145,7 +2143,7 @@ pub const cpu = struct {...@@ -2145,7 +2143,7 @@ pub const cpu = struct {
2145 pub const opteron = Cpu{2143 pub const opteron = Cpu{
2146 .name = "opteron",2144 .name = "opteron",
2147 .llvm_name = "opteron",2145 .llvm_name = "opteron",
2148 .features = featureSet(&all_features, &[_]Feature{2146 .features = featureSet(&[_]Feature{
2149 .@"3dnowa",2147 .@"3dnowa",
2150 .@"64bit",2148 .@"64bit",
2151 .cmov,2149 .cmov,
...@@ -2162,7 +2160,7 @@ pub const cpu = struct {...@@ -2162,7 +2160,7 @@ pub const cpu = struct {
2162 pub const opteron_sse3 = Cpu{2160 pub const opteron_sse3 = Cpu{
2163 .name = "opteron_sse3",2161 .name = "opteron_sse3",
2164 .llvm_name = "opteron-sse3",2162 .llvm_name = "opteron-sse3",
2165 .features = featureSet(&all_features, &[_]Feature{2163 .features = featureSet(&[_]Feature{
2166 .@"3dnowa",2164 .@"3dnowa",
2167 .@"64bit",2165 .@"64bit",
2168 .cmov,2166 .cmov,
...@@ -2180,7 +2178,7 @@ pub const cpu = struct {...@@ -2180,7 +2178,7 @@ pub const cpu = struct {
2180 pub const penryn = Cpu{2178 pub const penryn = Cpu{
2181 .name = "penryn",2179 .name = "penryn",
2182 .llvm_name = "penryn",2180 .llvm_name = "penryn",
2183 .features = featureSet(&all_features, &[_]Feature{2181 .features = featureSet(&[_]Feature{
2184 .@"64bit",2182 .@"64bit",
2185 .cmov,2183 .cmov,
2186 .cx16,2184 .cx16,
...@@ -2198,7 +2196,7 @@ pub const cpu = struct {...@@ -2198,7 +2196,7 @@ pub const cpu = struct {
2198 pub const pentium = Cpu{2196 pub const pentium = Cpu{
2199 .name = "pentium",2197 .name = "pentium",
2200 .llvm_name = "pentium",2198 .llvm_name = "pentium",
2201 .features = featureSet(&all_features, &[_]Feature{2199 .features = featureSet(&[_]Feature{
2202 .cx8,2200 .cx8,
2203 .slow_unaligned_mem_16,2201 .slow_unaligned_mem_16,
2204 .x87,2202 .x87,
...@@ -2207,7 +2205,7 @@ pub const cpu = struct {...@@ -2207,7 +2205,7 @@ pub const cpu = struct {
2207 pub const pentium_m = Cpu{2205 pub const pentium_m = Cpu{
2208 .name = "pentium_m",2206 .name = "pentium_m",
2209 .llvm_name = "pentium-m",2207 .llvm_name = "pentium-m",
2210 .features = featureSet(&all_features, &[_]Feature{2208 .features = featureSet(&[_]Feature{
2211 .cmov,2209 .cmov,
2212 .cx8,2210 .cx8,
2213 .fxsr,2211 .fxsr,
...@@ -2221,7 +2219,7 @@ pub const cpu = struct {...@@ -2221,7 +2219,7 @@ pub const cpu = struct {
2221 pub const pentium_mmx = Cpu{2219 pub const pentium_mmx = Cpu{
2222 .name = "pentium_mmx",2220 .name = "pentium_mmx",
2223 .llvm_name = "pentium-mmx",2221 .llvm_name = "pentium-mmx",
2224 .features = featureSet(&all_features, &[_]Feature{2222 .features = featureSet(&[_]Feature{
2225 .cx8,2223 .cx8,
2226 .mmx,2224 .mmx,
2227 .slow_unaligned_mem_16,2225 .slow_unaligned_mem_16,
...@@ -2231,7 +2229,7 @@ pub const cpu = struct {...@@ -2231,7 +2229,7 @@ pub const cpu = struct {
2231 pub const pentium2 = Cpu{2229 pub const pentium2 = Cpu{
2232 .name = "pentium2",2230 .name = "pentium2",
2233 .llvm_name = "pentium2",2231 .llvm_name = "pentium2",
2234 .features = featureSet(&all_features, &[_]Feature{2232 .features = featureSet(&[_]Feature{
2235 .cmov,2233 .cmov,
2236 .cx8,2234 .cx8,
2237 .fxsr,2235 .fxsr,
...@@ -2244,7 +2242,7 @@ pub const cpu = struct {...@@ -2244,7 +2242,7 @@ pub const cpu = struct {
2244 pub const pentium3 = Cpu{2242 pub const pentium3 = Cpu{
2245 .name = "pentium3",2243 .name = "pentium3",
2246 .llvm_name = "pentium3",2244 .llvm_name = "pentium3",
2247 .features = featureSet(&all_features, &[_]Feature{2245 .features = featureSet(&[_]Feature{
2248 .cmov,2246 .cmov,
2249 .cx8,2247 .cx8,
2250 .fxsr,2248 .fxsr,
...@@ -2258,7 +2256,7 @@ pub const cpu = struct {...@@ -2258,7 +2256,7 @@ pub const cpu = struct {
2258 pub const pentium3m = Cpu{2256 pub const pentium3m = Cpu{
2259 .name = "pentium3m",2257 .name = "pentium3m",
2260 .llvm_name = "pentium3m",2258 .llvm_name = "pentium3m",
2261 .features = featureSet(&all_features, &[_]Feature{2259 .features = featureSet(&[_]Feature{
2262 .cmov,2260 .cmov,
2263 .cx8,2261 .cx8,
2264 .fxsr,2262 .fxsr,
...@@ -2272,7 +2270,7 @@ pub const cpu = struct {...@@ -2272,7 +2270,7 @@ pub const cpu = struct {
2272 pub const pentium4 = Cpu{2270 pub const pentium4 = Cpu{
2273 .name = "pentium4",2271 .name = "pentium4",
2274 .llvm_name = "pentium4",2272 .llvm_name = "pentium4",
2275 .features = featureSet(&all_features, &[_]Feature{2273 .features = featureSet(&[_]Feature{
2276 .cmov,2274 .cmov,
2277 .cx8,2275 .cx8,
2278 .fxsr,2276 .fxsr,
...@@ -2286,7 +2284,7 @@ pub const cpu = struct {...@@ -2286,7 +2284,7 @@ pub const cpu = struct {
2286 pub const pentium4m = Cpu{2284 pub const pentium4m = Cpu{
2287 .name = "pentium4m",2285 .name = "pentium4m",
2288 .llvm_name = "pentium4m",2286 .llvm_name = "pentium4m",
2289 .features = featureSet(&all_features, &[_]Feature{2287 .features = featureSet(&[_]Feature{
2290 .cmov,2288 .cmov,
2291 .cx8,2289 .cx8,
2292 .fxsr,2290 .fxsr,
...@@ -2300,7 +2298,7 @@ pub const cpu = struct {...@@ -2300,7 +2298,7 @@ pub const cpu = struct {
2300 pub const pentiumpro = Cpu{2298 pub const pentiumpro = Cpu{
2301 .name = "pentiumpro",2299 .name = "pentiumpro",
2302 .llvm_name = "pentiumpro",2300 .llvm_name = "pentiumpro",
2303 .features = featureSet(&all_features, &[_]Feature{2301 .features = featureSet(&[_]Feature{
2304 .cmov,2302 .cmov,
2305 .cx8,2303 .cx8,
2306 .nopl,2304 .nopl,
...@@ -2311,7 +2309,7 @@ pub const cpu = struct {...@@ -2311,7 +2309,7 @@ pub const cpu = struct {
2311 pub const prescott = Cpu{2309 pub const prescott = Cpu{
2312 .name = "prescott",2310 .name = "prescott",
2313 .llvm_name = "prescott",2311 .llvm_name = "prescott",
2314 .features = featureSet(&all_features, &[_]Feature{2312 .features = featureSet(&[_]Feature{
2315 .cmov,2313 .cmov,
2316 .cx8,2314 .cx8,
2317 .fxsr,2315 .fxsr,
...@@ -2325,7 +2323,7 @@ pub const cpu = struct {...@@ -2325,7 +2323,7 @@ pub const cpu = struct {
2325 pub const sandybridge = Cpu{2323 pub const sandybridge = Cpu{
2326 .name = "sandybridge",2324 .name = "sandybridge",
2327 .llvm_name = "sandybridge",2325 .llvm_name = "sandybridge",
2328 .features = featureSet(&all_features, &[_]Feature{2326 .features = featureSet(&[_]Feature{
2329 .@"64bit",2327 .@"64bit",
2330 .avx,2328 .avx,
2331 .cmov,2329 .cmov,
...@@ -2354,7 +2352,7 @@ pub const cpu = struct {...@@ -2354,7 +2352,7 @@ pub const cpu = struct {
2354 pub const silvermont = Cpu{2352 pub const silvermont = Cpu{
2355 .name = "silvermont",2353 .name = "silvermont",
2356 .llvm_name = "silvermont",2354 .llvm_name = "silvermont",
2357 .features = featureSet(&all_features, &[_]Feature{2355 .features = featureSet(&[_]Feature{
2358 .@"64bit",2356 .@"64bit",
2359 .cmov,2357 .cmov,
2360 .cx16,2358 .cx16,
...@@ -2382,7 +2380,7 @@ pub const cpu = struct {...@@ -2382,7 +2380,7 @@ pub const cpu = struct {
2382 pub const skx = Cpu{2380 pub const skx = Cpu{
2383 .name = "skx",2381 .name = "skx",
2384 .llvm_name = "skx",2382 .llvm_name = "skx",
2385 .features = featureSet(&all_features, &[_]Feature{2383 .features = featureSet(&[_]Feature{
2386 .@"64bit",2384 .@"64bit",
2387 .adx,2385 .adx,
2388 .aes,2386 .aes,
...@@ -2439,7 +2437,7 @@ pub const cpu = struct {...@@ -2439,7 +2437,7 @@ pub const cpu = struct {
2439 pub const skylake = Cpu{2437 pub const skylake = Cpu{
2440 .name = "skylake",2438 .name = "skylake",
2441 .llvm_name = "skylake",2439 .llvm_name = "skylake",
2442 .features = featureSet(&all_features, &[_]Feature{2440 .features = featureSet(&[_]Feature{
2443 .@"64bit",2441 .@"64bit",
2444 .adx,2442 .adx,
2445 .aes,2443 .aes,
...@@ -2490,7 +2488,7 @@ pub const cpu = struct {...@@ -2490,7 +2488,7 @@ pub const cpu = struct {
2490 pub const skylake_avx512 = Cpu{2488 pub const skylake_avx512 = Cpu{
2491 .name = "skylake_avx512",2489 .name = "skylake_avx512",
2492 .llvm_name = "skylake-avx512",2490 .llvm_name = "skylake-avx512",
2493 .features = featureSet(&all_features, &[_]Feature{2491 .features = featureSet(&[_]Feature{
2494 .@"64bit",2492 .@"64bit",
2495 .adx,2493 .adx,
2496 .aes,2494 .aes,
...@@ -2547,7 +2545,7 @@ pub const cpu = struct {...@@ -2547,7 +2545,7 @@ pub const cpu = struct {
2547 pub const slm = Cpu{2545 pub const slm = Cpu{
2548 .name = "slm",2546 .name = "slm",
2549 .llvm_name = "slm",2547 .llvm_name = "slm",
2550 .features = featureSet(&all_features, &[_]Feature{2548 .features = featureSet(&[_]Feature{
2551 .@"64bit",2549 .@"64bit",
2552 .cmov,2550 .cmov,
2553 .cx16,2551 .cx16,
...@@ -2575,7 +2573,7 @@ pub const cpu = struct {...@@ -2575,7 +2573,7 @@ pub const cpu = struct {
2575 pub const tremont = Cpu{2573 pub const tremont = Cpu{
2576 .name = "tremont",2574 .name = "tremont",
2577 .llvm_name = "tremont",2575 .llvm_name = "tremont",
2578 .features = featureSet(&all_features, &[_]Feature{2576 .features = featureSet(&[_]Feature{
2579 .@"64bit",2577 .@"64bit",
2580 .aes,2578 .aes,
2581 .cldemote,2579 .cldemote,
...@@ -2618,7 +2616,7 @@ pub const cpu = struct {...@@ -2618,7 +2616,7 @@ pub const cpu = struct {
2618 pub const westmere = Cpu{2616 pub const westmere = Cpu{
2619 .name = "westmere",2617 .name = "westmere",
2620 .llvm_name = "westmere",2618 .llvm_name = "westmere",
2621 .features = featureSet(&all_features, &[_]Feature{2619 .features = featureSet(&[_]Feature{
2622 .@"64bit",2620 .@"64bit",
2623 .cmov,2621 .cmov,
2624 .cx16,2622 .cx16,
...@@ -2637,7 +2635,7 @@ pub const cpu = struct {...@@ -2637,7 +2635,7 @@ pub const cpu = struct {
2637 pub const winchip_c6 = Cpu{2635 pub const winchip_c6 = Cpu{
2638 .name = "winchip_c6",2636 .name = "winchip_c6",
2639 .llvm_name = "winchip-c6",2637 .llvm_name = "winchip-c6",
2640 .features = featureSet(&all_features, &[_]Feature{2638 .features = featureSet(&[_]Feature{
2641 .mmx,2639 .mmx,
2642 .slow_unaligned_mem_16,2640 .slow_unaligned_mem_16,
2643 .x87,2641 .x87,
...@@ -2646,7 +2644,7 @@ pub const cpu = struct {...@@ -2646,7 +2644,7 @@ pub const cpu = struct {
2646 pub const winchip2 = Cpu{2644 pub const winchip2 = Cpu{
2647 .name = "winchip2",2645 .name = "winchip2",
2648 .llvm_name = "winchip2",2646 .llvm_name = "winchip2",
2649 .features = featureSet(&all_features, &[_]Feature{2647 .features = featureSet(&[_]Feature{
2650 .@"3dnow",2648 .@"3dnow",
2651 .slow_unaligned_mem_16,2649 .slow_unaligned_mem_16,
2652 .x87,2650 .x87,
...@@ -2655,7 +2653,7 @@ pub const cpu = struct {...@@ -2655,7 +2653,7 @@ pub const cpu = struct {
2655 pub const x86_64 = Cpu{2653 pub const x86_64 = Cpu{
2656 .name = "x86_64",2654 .name = "x86_64",
2657 .llvm_name = "x86-64",2655 .llvm_name = "x86-64",
2658 .features = featureSet(&all_features, &[_]Feature{2656 .features = featureSet(&[_]Feature{
2659 .@"64bit",2657 .@"64bit",
2660 .cmov,2658 .cmov,
2661 .cx8,2659 .cx8,
...@@ -2672,7 +2670,7 @@ pub const cpu = struct {...@@ -2672,7 +2670,7 @@ pub const cpu = struct {
2672 pub const yonah = Cpu{2670 pub const yonah = Cpu{
2673 .name = "yonah",2671 .name = "yonah",
2674 .llvm_name = "yonah",2672 .llvm_name = "yonah",
2675 .features = featureSet(&all_features, &[_]Feature{2673 .features = featureSet(&[_]Feature{
2676 .cmov,2674 .cmov,
2677 .cx8,2675 .cx8,
2678 .fxsr,2676 .fxsr,
...@@ -2686,7 +2684,7 @@ pub const cpu = struct {...@@ -2686,7 +2684,7 @@ pub const cpu = struct {
2686 pub const znver1 = Cpu{2684 pub const znver1 = Cpu{
2687 .name = "znver1",2685 .name = "znver1",
2688 .llvm_name = "znver1",2686 .llvm_name = "znver1",
2689 .features = featureSet(&all_features, &[_]Feature{2687 .features = featureSet(&[_]Feature{
2690 .@"64bit",2688 .@"64bit",
2691 .adx,2689 .adx,
2692 .aes,2690 .aes,
...@@ -2730,7 +2728,7 @@ pub const cpu = struct {...@@ -2730,7 +2728,7 @@ pub const cpu = struct {
2730 pub const znver2 = Cpu{2728 pub const znver2 = Cpu{
2731 .name = "znver2",2729 .name = "znver2",
2732 .llvm_name = "znver2",2730 .llvm_name = "znver2",
2733 .features = featureSet(&all_features, &[_]Feature{2731 .features = featureSet(&[_]Feature{
2734 .@"64bit",2732 .@"64bit",
2735 .adx,2733 .adx,
2736 .aes,2734 .aes,
src-self-hosted/stage1.zig+4-3
...@@ -581,8 +581,8 @@ fn cpuFeaturesFromLLVM(...@@ -581,8 +581,8 @@ fn cpuFeaturesFromLLVM(
581 const this_llvm_name = feature.llvm_name orelse continue;581 const this_llvm_name = feature.llvm_name orelse continue;
582 if (mem.eql(u8, llvm_feat, this_llvm_name)) {582 if (mem.eql(u8, llvm_feat, this_llvm_name)) {
583 switch (op) {583 switch (op) {
584 .add => set.addSparseFeature(@intCast(u8, index)),584 .add => set.addFeature(@intCast(u8, index)),
585 .sub => set.removeSparseFeature(@intCast(u8, index)),585 .sub => set.removeFeature(@intCast(u8, index)),
586 }586 }
587 break;587 break;
588 }588 }
...@@ -701,8 +701,9 @@ const Stage2CpuFeatures = struct {...@@ -701,8 +701,9 @@ const Stage2CpuFeatures = struct {
701 const all_features = arch.allFeaturesList();701 const all_features = arch.allFeaturesList();
702 var populated_feature_set = feature_set;702 var populated_feature_set = feature_set;
703 if (arch.subArchFeature()) |sub_arch_index| {703 if (arch.subArchFeature()) |sub_arch_index| {
704 populated_feature_set.addFeature(sub_arch_index, all_features);704 populated_feature_set.addFeature(sub_arch_index);
705 }705 }
706 populated_feature_set.populateDependencies(all_features);
706 for (all_features) |feature, index| {707 for (all_features) |feature, index| {
707 const llvm_name = feature.llvm_name orelse continue;708 const llvm_name = feature.llvm_name orelse continue;
708 const plus_or_minus = "-+"[@boolToInt(populated_feature_set.isEnabled(@intCast(u8, index)))];709 const plus_or_minus = "-+"[@boolToInt(populated_feature_set.isEnabled(@intCast(u8, index)))];