authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-21 19:40:44-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-21 19:40:44-05:00
log92559cd02cbf6497b99eb5193c9094e6d92c214e
tree13ff36b93f06555fd31803750debbd03d10f4b47
parent15d5cab569a5ffc6495d606f460264429043aabf
signature Commit is signed but in an unrecognized format.

hit a comptime limitation with computing dense sets


21 files changed, 1728 insertions(+), 3115 deletions(-)

lib/std/build.zig+1-1
...@@ -1983,7 +1983,7 @@ pub const LibExeObjStep = struct {...@@ -1983,7 +1983,7 @@ pub const LibExeObjStep = struct {
19831983
1984 var feature_str_buffer = try std.Buffer.initSize(builder.allocator, 0);1984 var feature_str_buffer = try std.Buffer.initSize(builder.allocator, 0);
1985 for (self.target.getArch().allFeaturesList()) |feature, i| {1985 for (self.target.getArch().allFeaturesList()) |feature, i| {
1986 if (features.isEnabled(@intCast(u8, i))) {1986 if (features.isEnabled(@intCast(Target.Cpu.Feature.Set.Index, i))) {
1987 try feature_str_buffer.append(feature.name);1987 try feature_str_buffer.append(feature.name);
1988 try feature_str_buffer.append(",");1988 try feature_str_buffer.append(",");
1989 }1989 }
lib/std/target.zig+156-30
...@@ -172,6 +172,48 @@ pub const Target = union(enum) {...@@ -172,6 +172,48 @@ pub const Target = union(enum) {
172 r6,172 r6,
173 };173 };
174174
175 pub fn subArchFeature(arch: Arch) ?u8 {
176 return switch (arch) {
177 .arm, .armeb, .thumb, .thumbeb => |arm32| switch (arm32) {
178 .v8_5a => @enumToInt(arm.Feature.armv8_5_a),
179 .v8_4a => @enumToInt(arm.Feature.armv8_4_a),
180 .v8_3a => @enumToInt(arm.Feature.armv8_3_a),
181 .v8_2a => @enumToInt(arm.Feature.armv8_2_a),
182 .v8_1a => @enumToInt(arm.Feature.armv8_1_a),
183 .v8 => @enumToInt(arm.Feature.armv8_a),
184 .v8r => @enumToInt(arm.Feature.armv8_r),
185 .v8m_baseline => @enumToInt(arm.Feature.armv8_m_base),
186 .v8m_mainline => @enumToInt(arm.Feature.armv8_m_main),
187 .v8_1m_mainline => @enumToInt(arm.Feature.armv8_1_m_main),
188 .v7 => @enumToInt(arm.Feature.armv7_a),
189 .v7em => @enumToInt(arm.Feature.armv7e_m),
190 .v7m => @enumToInt(arm.Feature.armv7_m),
191 .v7s => @enumToInt(arm.Feature.armv7s),
192 .v7k => @enumToInt(arm.Feature.armv7k),
193 .v7ve => @enumToInt(arm.Feature.armv7ve),
194 .v6 => @enumToInt(arm.Feature.armv6),
195 .v6m => @enumToInt(arm.Feature.armv6_m),
196 .v6k => @enumToInt(arm.Feature.armv6k),
197 .v6t2 => @enumToInt(arm.Feature.armv6t2),
198 .v5 => @enumToInt(arm.Feature.armv5t),
199 .v5te => @enumToInt(arm.Feature.armv5te),
200 .v4t => @enumToInt(arm.Feature.armv4t),
201 },
202 .aarch64, .aarch64_be, .aarch64_32 => |arm64| switch (arm64) {
203 .v8_5a => @enumToInt(aarch64.Feature.v8_5a),
204 .v8_4a => @enumToInt(aarch64.Feature.v8_4a),
205 .v8_3a => @enumToInt(aarch64.Feature.v8_3a),
206 .v8_2a => @enumToInt(aarch64.Feature.v8_2a),
207 .v8_1a => @enumToInt(aarch64.Feature.v8_1a),
208 .v8 => @enumToInt(aarch64.Feature.v8_1a),
209 .v8r => @enumToInt(aarch64.Feature.v8_1a),
210 .v8m_baseline => @enumToInt(aarch64.Feature.v8_1a),
211 .v8m_mainline => @enumToInt(aarch64.Feature.v8_1a),
212 },
213 else => return null,
214 };
215 }
216
175 pub fn isARM(arch: Arch) bool {217 pub fn isARM(arch: Arch) bool {
176 return switch (arch) {218 return switch (arch) {
177 .arm, .armeb => true,219 .arm, .armeb => true,
...@@ -219,7 +261,7 @@ pub const Target = union(enum) {...@@ -219,7 +261,7 @@ pub const Target = union(enum) {
219 pub fn parseCpuFeatureSet(arch: Arch, features_text: []const u8) !Cpu.Feature.Set {261 pub fn parseCpuFeatureSet(arch: Arch, features_text: []const u8) !Cpu.Feature.Set {
220 // Here we compute both and choose the correct result at the end, based262 // Here we compute both and choose the correct result at the end, based
221 // on whether or not we saw + and - signs.263 // on whether or not we saw + and - signs.
222 var whitelist_set = Cpu.Feature.Set.empty();264 var whitelist_set = Cpu.Feature.Set.empty;
223 var baseline_set = arch.baselineFeatures();265 var baseline_set = arch.baselineFeatures();
224 var mode: enum {266 var mode: enum {
225 unknown,267 unknown,
...@@ -256,16 +298,18 @@ pub const Target = union(enum) {...@@ -256,16 +298,18 @@ pub const Target = union(enum) {
256 op = .add;298 op = .add;
257 feature_name = item_text;299 feature_name = item_text;
258 }300 }
259 for (arch.allFeaturesList()) |feature, index| {301 const all_features = arch.allFeaturesList();
302 for (all_features) |feature, index_usize| {
303 const index = @intCast(Cpu.Feature.Set.Index, index_usize);
260 if (mem.eql(u8, feature_name, feature.name)) {304 if (mem.eql(u8, feature_name, feature.name)) {
261 switch (op) {305 switch (op) {
262 .add => {306 .add => {
263 baseline_set.addFeature(@intCast(u8, index));307 baseline_set.addFeature(index, all_features);
264 whitelist_set.addFeature(@intCast(u8, index));308 whitelist_set.addFeature(index, all_features);
265 },309 },
266 .sub => {310 .sub => {
267 baseline_set.removeFeature(@intCast(u8, index));311 baseline_set.removeFeature(index, all_features);
268 whitelist_set.removeFeature(@intCast(u8, index));312 whitelist_set.removeFeature(index, all_features);
269 },313 },
270 }314 }
271 break;315 break;
...@@ -462,7 +506,7 @@ pub const Target = union(enum) {...@@ -462,7 +506,7 @@ pub const Target = union(enum) {
462 .nvptx, .nvptx64 => nvptx.cpu.sm_20.features,506 .nvptx, .nvptx64 => nvptx.cpu.sm_20.features,
463 .wasm32, .wasm64 => wasm.cpu.generic.features,507 .wasm32, .wasm64 => wasm.cpu.generic.features,
464508
465 else => Cpu.Feature.Set.empty(),509 else => Cpu.Feature.Set.empty,
466 };510 };
467 }511 }
468512
...@@ -521,48 +565,130 @@ pub const Target = union(enum) {...@@ -521,48 +565,130 @@ pub const Target = union(enum) {
521 features: Feature.Set,565 features: Feature.Set,
522566
523 pub const Feature = struct {567 pub const Feature = struct {
524 /// The bit index into `Set`.568 /// The bit index into `Set`. Has a default value of `undefined` because the canonical
525 index: u8,569 /// structures are populated via comptime logic.
526 name: []const u8,570 index: Set.Index = undefined,
571
572 /// Has a default value of `undefined` because the canonical
573 /// structures are populated via comptime logic.
574 name: []const u8 = undefined,
575
576 /// If this corresponds to an LLVM-recognized feature, this will be populated;
577 /// otherwise null.
527 llvm_name: ?[:0]const u8,578 llvm_name: ?[:0]const u8,
579
580 /// Human-friendly UTF-8 text.
528 description: []const u8,581 description: []const u8,
529 dependencies: Set,582
583 /// `Set` of all features this depends on, and this feature itself.
584 /// Can be "or"ed with another set to remove this feature and all
585 /// its dependencies.
586 /// Has a default value of `undefined` because the canonical
587 /// structures are populated via comptime logic.
588 dependencies: Set = undefined,
530589
531 /// A bit set of all the features.590 /// A bit set of all the features.
532 pub const Set = struct {591 pub const Set = struct {
533 bytes: [bit_count / 8]u8,592 ints: [usize_count]usize,
593
594 pub const needed_bit_count = 174;
595 pub const byte_count = (needed_bit_count + 7) / 8;
596 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
597 pub const Index = std.math.Log2Int(@IntType(false, usize_count * @bitSizeOf(usize)));
598 pub const ShiftInt = std.math.Log2Int(usize);
599
600 pub const empty = Set{ .ints = [1]usize{0} ** usize_count };
601
602 pub fn isEnabled(set: Set, arch_feature_index: Index) bool {
603 const usize_index = arch_feature_index / @bitSizeOf(usize);
604 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
605 return (set.ints[usize_index] & (@as(usize, 1) << bit_index)) != 0;
606 }
607
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 }
534617
535 pub const bit_count = 22 * 8;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 }
536628
537 pub fn empty() Set {629 /// Adds the specified feature but not its dependencies.
538 return .{ .bytes = [1]u8{0} ** 22 };630 pub fn addSparseFeature(set: *Set, arch_feature_index: Index) void {
631 const usize_index = arch_feature_index / @bitSizeOf(usize);
632 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
633 set.ints[usize_index] |= @as(usize, 1) << bit_index;
539 }634 }
540635
541 pub fn isEnabled(set: Set, arch_feature_index: u8) bool {636 /// Removes the specified feature but not its dependents.
542 const byte_index = arch_feature_index / 8;637 pub fn removeSparseFeature(set: *Set, arch_feature_index: Index) void {
543 const bit_index = @intCast(u3, arch_feature_index % 8);638 const usize_index = arch_feature_index / @bitSizeOf(usize);
544 return (set.bytes[byte_index] & (@as(u8, 1) << bit_index)) != 0;639 const bit_index = @intCast(ShiftInt, arch_feature_index % @bitSizeOf(usize));
640 set.ints[usize_index] &= ~(@as(usize, 1) << bit_index);
545 }641 }
546642
547 pub fn addFeature(set: *Set, arch_feature_index: u8) void {643 pub fn initAsDependencies(
548 const byte_index = arch_feature_index / 8;644 set: *Set,
549 const bit_index = @intCast(u3, arch_feature_index % 8);645 arch_feature_index: Index,
550 set.bytes[byte_index] |= @as(u8, 1) << bit_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;
657 while (true) {
658 for (all_features_list) |feature, index| {
659 const casted_index = @intCast(Index, index);
660 if (set.isEnabled(casted_index)) {
661 set.addFeature(casted_index, all_features_list);
662 }
663 }
664 const nothing_changed = mem.eql(usize, &old, &set.ints);
665 if (nothing_changed) return;
666 old = set.ints;
667 }
551 }668 }
552669
553 pub fn removeFeature(set: *Set, arch_feature_index: u8) void {670 pub fn asBytes(set: *const Set) *const [byte_count]u8 {
554 const byte_index = arch_feature_index / 8;671 return @ptrCast(*const [byte_count]u8, &set.ints);
555 const bit_index = @intCast(u3, arch_feature_index % 8);
556 set.bytes[byte_index] &= ~(@as(u8, 1) << bit_index);
557 }672 }
558 };673 };
559674
560 pub fn feature_set_fns(comptime F: type) type {675 pub fn feature_set_fns(comptime F: type) type {
561 return struct {676 return struct {
562 pub fn featureSet(features: []const F) Set {677 /// Populates a set with the list of features and all their dependencies included.
563 var x = Set.empty();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.
688 pub fn sparseFeatureSet(features: []const F) Set {
689 var x = Set.empty;
564 for (features) |feature| {690 for (features) |feature| {
565 x.addFeature(@enumToInt(feature));691 x.addSparseFeature(@enumToInt(feature));
566 }692 }
567 return x;693 return x;
568 }694 }
lib/std/target/aarch64.zig+181-466
...@@ -153,15 +153,14 @@ pub const Feature = enum {...@@ -153,15 +153,14 @@ 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);
156 const len = @typeInfo(Feature).Enum.fields.len;157 const len = @typeInfo(Feature).Enum.fields.len;
157 std.debug.assert(len <= Cpu.Feature.Set.bit_count);158 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
158 var result: [len]Cpu.Feature = undefined;159 var result: [len]Cpu.Feature = undefined;
159 result[@enumToInt(Feature.a35)] = .{160 result[@enumToInt(Feature.a35)] = .{
160 .index = @enumToInt(Feature.a35),
161 .name = @tagName(Feature.a35),
162 .llvm_name = "a35",161 .llvm_name = "a35",
163 .description = "Cortex-A35 ARM processors",162 .description = "Cortex-A35 ARM processors",
164 .dependencies = featureSet(&[_]Feature{163 .dependencies = sparseFeatureSet(&[_]Feature{
165 .crc,164 .crc,
166 .crypto,165 .crypto,
167 .fp_armv8,166 .fp_armv8,
...@@ -170,11 +169,9 @@ pub const all_features = blk: {...@@ -170,11 +169,9 @@ pub const all_features = blk: {
170 }),169 }),
171 };170 };
172 result[@enumToInt(Feature.a53)] = .{171 result[@enumToInt(Feature.a53)] = .{
173 .index = @enumToInt(Feature.a53),
174 .name = @tagName(Feature.a53),
175 .llvm_name = "a53",172 .llvm_name = "a53",
176 .description = "Cortex-A53 ARM processors",173 .description = "Cortex-A53 ARM processors",
177 .dependencies = featureSet(&[_]Feature{174 .dependencies = sparseFeatureSet(&[_]Feature{
178 .balance_fp_ops,175 .balance_fp_ops,
179 .crc,176 .crc,
180 .crypto,177 .crypto,
...@@ -188,11 +185,9 @@ pub const all_features = blk: {...@@ -188,11 +185,9 @@ pub const all_features = blk: {
188 }),185 }),
189 };186 };
190 result[@enumToInt(Feature.a55)] = .{187 result[@enumToInt(Feature.a55)] = .{
191 .index = @enumToInt(Feature.a55),
192 .name = @tagName(Feature.a55),
193 .llvm_name = "a55",188 .llvm_name = "a55",
194 .description = "Cortex-A55 ARM processors",189 .description = "Cortex-A55 ARM processors",
195 .dependencies = featureSet(&[_]Feature{190 .dependencies = sparseFeatureSet(&[_]Feature{
196 .crypto,191 .crypto,
197 .dotprod,192 .dotprod,
198 .fp_armv8,193 .fp_armv8,
...@@ -205,11 +200,9 @@ pub const all_features = blk: {...@@ -205,11 +200,9 @@ pub const all_features = blk: {
205 }),200 }),
206 };201 };
207 result[@enumToInt(Feature.a57)] = .{202 result[@enumToInt(Feature.a57)] = .{
208 .index = @enumToInt(Feature.a57),
209 .name = @tagName(Feature.a57),
210 .llvm_name = "a57",203 .llvm_name = "a57",
211 .description = "Cortex-A57 ARM processors",204 .description = "Cortex-A57 ARM processors",
212 .dependencies = featureSet(&[_]Feature{205 .dependencies = sparseFeatureSet(&[_]Feature{
213 .balance_fp_ops,206 .balance_fp_ops,
214 .crc,207 .crc,
215 .crypto,208 .crypto,
...@@ -224,11 +217,9 @@ pub const all_features = blk: {...@@ -224,11 +217,9 @@ pub const all_features = blk: {
224 }),217 }),
225 };218 };
226 result[@enumToInt(Feature.a72)] = .{219 result[@enumToInt(Feature.a72)] = .{
227 .index = @enumToInt(Feature.a72),
228 .name = @tagName(Feature.a72),
229 .llvm_name = "a72",220 .llvm_name = "a72",
230 .description = "Cortex-A72 ARM processors",221 .description = "Cortex-A72 ARM processors",
231 .dependencies = featureSet(&[_]Feature{222 .dependencies = sparseFeatureSet(&[_]Feature{
232 .crc,223 .crc,
233 .crypto,224 .crypto,
234 .fp_armv8,225 .fp_armv8,
...@@ -238,11 +229,9 @@ pub const all_features = blk: {...@@ -238,11 +229,9 @@ pub const all_features = blk: {
238 }),229 }),
239 };230 };
240 result[@enumToInt(Feature.a73)] = .{231 result[@enumToInt(Feature.a73)] = .{
241 .index = @enumToInt(Feature.a73),
242 .name = @tagName(Feature.a73),
243 .llvm_name = "a73",232 .llvm_name = "a73",
244 .description = "Cortex-A73 ARM processors",233 .description = "Cortex-A73 ARM processors",
245 .dependencies = featureSet(&[_]Feature{234 .dependencies = sparseFeatureSet(&[_]Feature{
246 .crc,235 .crc,
247 .crypto,236 .crypto,
248 .fp_armv8,237 .fp_armv8,
...@@ -252,11 +241,9 @@ pub const all_features = blk: {...@@ -252,11 +241,9 @@ pub const all_features = blk: {
252 }),241 }),
253 };242 };
254 result[@enumToInt(Feature.a75)] = .{243 result[@enumToInt(Feature.a75)] = .{
255 .index = @enumToInt(Feature.a75),
256 .name = @tagName(Feature.a75),
257 .llvm_name = "a75",244 .llvm_name = "a75",
258 .description = "Cortex-A75 ARM processors",245 .description = "Cortex-A75 ARM processors",
259 .dependencies = featureSet(&[_]Feature{246 .dependencies = sparseFeatureSet(&[_]Feature{
260 .crypto,247 .crypto,
261 .dotprod,248 .dotprod,
262 .fp_armv8,249 .fp_armv8,
...@@ -269,11 +256,9 @@ pub const all_features = blk: {...@@ -269,11 +256,9 @@ pub const all_features = blk: {
269 }),256 }),
270 };257 };
271 result[@enumToInt(Feature.a76)] = .{258 result[@enumToInt(Feature.a76)] = .{
272 .index = @enumToInt(Feature.a76),
273 .name = @tagName(Feature.a76),
274 .llvm_name = "a76",259 .llvm_name = "a76",
275 .description = "Cortex-A76 ARM processors",260 .description = "Cortex-A76 ARM processors",
276 .dependencies = featureSet(&[_]Feature{261 .dependencies = sparseFeatureSet(&[_]Feature{
277 .crypto,262 .crypto,
278 .dotprod,263 .dotprod,
279 .fp_armv8,264 .fp_armv8,
...@@ -285,194 +270,142 @@ pub const all_features = blk: {...@@ -285,194 +270,142 @@ pub const all_features = blk: {
285 }),270 }),
286 };271 };
287 result[@enumToInt(Feature.aes)] = .{272 result[@enumToInt(Feature.aes)] = .{
288 .index = @enumToInt(Feature.aes),
289 .name = @tagName(Feature.aes),
290 .llvm_name = "aes",273 .llvm_name = "aes",
291 .description = "Enable AES support",274 .description = "Enable AES support",
292 .dependencies = featureSet(&[_]Feature{275 .dependencies = sparseFeatureSet(&[_]Feature{
293 .neon,276 .neon,
294 }),277 }),
295 };278 };
296 result[@enumToInt(Feature.aggressive_fma)] = .{279 result[@enumToInt(Feature.aggressive_fma)] = .{
297 .index = @enumToInt(Feature.aggressive_fma),
298 .name = @tagName(Feature.aggressive_fma),
299 .llvm_name = "aggressive-fma",280 .llvm_name = "aggressive-fma",
300 .description = "Enable Aggressive FMA for floating-point.",281 .description = "Enable Aggressive FMA for floating-point.",
301 .dependencies = featureSet(&[_]Feature{}),282 .dependencies = sparseFeatureSet(&[_]Feature{}),
302 };283 };
303 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{284 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
304 .index = @enumToInt(Feature.alternate_sextload_cvt_f32_pattern),
305 .name = @tagName(Feature.alternate_sextload_cvt_f32_pattern),
306 .llvm_name = "alternate-sextload-cvt-f32-pattern",285 .llvm_name = "alternate-sextload-cvt-f32-pattern",
307 .description = "Use alternative pattern for sextload convert to f32",286 .description = "Use alternative pattern for sextload convert to f32",
308 .dependencies = featureSet(&[_]Feature{}),287 .dependencies = sparseFeatureSet(&[_]Feature{}),
309 };288 };
310 result[@enumToInt(Feature.altnzcv)] = .{289 result[@enumToInt(Feature.altnzcv)] = .{
311 .index = @enumToInt(Feature.altnzcv),
312 .name = @tagName(Feature.altnzcv),
313 .llvm_name = "altnzcv",290 .llvm_name = "altnzcv",
314 .description = "Enable alternative NZCV format for floating point comparisons",291 .description = "Enable alternative NZCV format for floating point comparisons",
315 .dependencies = featureSet(&[_]Feature{}),292 .dependencies = sparseFeatureSet(&[_]Feature{}),
316 };293 };
317 result[@enumToInt(Feature.am)] = .{294 result[@enumToInt(Feature.am)] = .{
318 .index = @enumToInt(Feature.am),
319 .name = @tagName(Feature.am),
320 .llvm_name = "am",295 .llvm_name = "am",
321 .description = "Enable v8.4-A Activity Monitors extension",296 .description = "Enable v8.4-A Activity Monitors extension",
322 .dependencies = featureSet(&[_]Feature{}),297 .dependencies = sparseFeatureSet(&[_]Feature{}),
323 };298 };
324 result[@enumToInt(Feature.arith_bcc_fusion)] = .{299 result[@enumToInt(Feature.arith_bcc_fusion)] = .{
325 .index = @enumToInt(Feature.arith_bcc_fusion),
326 .name = @tagName(Feature.arith_bcc_fusion),
327 .llvm_name = "arith-bcc-fusion",300 .llvm_name = "arith-bcc-fusion",
328 .description = "CPU fuses arithmetic+bcc operations",301 .description = "CPU fuses arithmetic+bcc operations",
329 .dependencies = featureSet(&[_]Feature{}),302 .dependencies = sparseFeatureSet(&[_]Feature{}),
330 };303 };
331 result[@enumToInt(Feature.arith_cbz_fusion)] = .{304 result[@enumToInt(Feature.arith_cbz_fusion)] = .{
332 .index = @enumToInt(Feature.arith_cbz_fusion),
333 .name = @tagName(Feature.arith_cbz_fusion),
334 .llvm_name = "arith-cbz-fusion",305 .llvm_name = "arith-cbz-fusion",
335 .description = "CPU fuses arithmetic + cbz/cbnz operations",306 .description = "CPU fuses arithmetic + cbz/cbnz operations",
336 .dependencies = featureSet(&[_]Feature{}),307 .dependencies = sparseFeatureSet(&[_]Feature{}),
337 };308 };
338 result[@enumToInt(Feature.balance_fp_ops)] = .{309 result[@enumToInt(Feature.balance_fp_ops)] = .{
339 .index = @enumToInt(Feature.balance_fp_ops),
340 .name = @tagName(Feature.balance_fp_ops),
341 .llvm_name = "balance-fp-ops",310 .llvm_name = "balance-fp-ops",
342 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",311 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",
343 .dependencies = featureSet(&[_]Feature{}),312 .dependencies = sparseFeatureSet(&[_]Feature{}),
344 };313 };
345 result[@enumToInt(Feature.bti)] = .{314 result[@enumToInt(Feature.bti)] = .{
346 .index = @enumToInt(Feature.bti),
347 .name = @tagName(Feature.bti),
348 .llvm_name = "bti",315 .llvm_name = "bti",
349 .description = "Enable Branch Target Identification",316 .description = "Enable Branch Target Identification",
350 .dependencies = featureSet(&[_]Feature{}),317 .dependencies = sparseFeatureSet(&[_]Feature{}),
351 };318 };
352 result[@enumToInt(Feature.call_saved_x10)] = .{319 result[@enumToInt(Feature.call_saved_x10)] = .{
353 .index = @enumToInt(Feature.call_saved_x10),
354 .name = @tagName(Feature.call_saved_x10),
355 .llvm_name = "call-saved-x10",320 .llvm_name = "call-saved-x10",
356 .description = "Make X10 callee saved.",321 .description = "Make X10 callee saved.",
357 .dependencies = featureSet(&[_]Feature{}),322 .dependencies = sparseFeatureSet(&[_]Feature{}),
358 };323 };
359 result[@enumToInt(Feature.call_saved_x11)] = .{324 result[@enumToInt(Feature.call_saved_x11)] = .{
360 .index = @enumToInt(Feature.call_saved_x11),
361 .name = @tagName(Feature.call_saved_x11),
362 .llvm_name = "call-saved-x11",325 .llvm_name = "call-saved-x11",
363 .description = "Make X11 callee saved.",326 .description = "Make X11 callee saved.",
364 .dependencies = featureSet(&[_]Feature{}),327 .dependencies = sparseFeatureSet(&[_]Feature{}),
365 };328 };
366 result[@enumToInt(Feature.call_saved_x12)] = .{329 result[@enumToInt(Feature.call_saved_x12)] = .{
367 .index = @enumToInt(Feature.call_saved_x12),
368 .name = @tagName(Feature.call_saved_x12),
369 .llvm_name = "call-saved-x12",330 .llvm_name = "call-saved-x12",
370 .description = "Make X12 callee saved.",331 .description = "Make X12 callee saved.",
371 .dependencies = featureSet(&[_]Feature{}),332 .dependencies = sparseFeatureSet(&[_]Feature{}),
372 };333 };
373 result[@enumToInt(Feature.call_saved_x13)] = .{334 result[@enumToInt(Feature.call_saved_x13)] = .{
374 .index = @enumToInt(Feature.call_saved_x13),
375 .name = @tagName(Feature.call_saved_x13),
376 .llvm_name = "call-saved-x13",335 .llvm_name = "call-saved-x13",
377 .description = "Make X13 callee saved.",336 .description = "Make X13 callee saved.",
378 .dependencies = featureSet(&[_]Feature{}),337 .dependencies = sparseFeatureSet(&[_]Feature{}),
379 };338 };
380 result[@enumToInt(Feature.call_saved_x14)] = .{339 result[@enumToInt(Feature.call_saved_x14)] = .{
381 .index = @enumToInt(Feature.call_saved_x14),
382 .name = @tagName(Feature.call_saved_x14),
383 .llvm_name = "call-saved-x14",340 .llvm_name = "call-saved-x14",
384 .description = "Make X14 callee saved.",341 .description = "Make X14 callee saved.",
385 .dependencies = featureSet(&[_]Feature{}),342 .dependencies = sparseFeatureSet(&[_]Feature{}),
386 };343 };
387 result[@enumToInt(Feature.call_saved_x15)] = .{344 result[@enumToInt(Feature.call_saved_x15)] = .{
388 .index = @enumToInt(Feature.call_saved_x15),
389 .name = @tagName(Feature.call_saved_x15),
390 .llvm_name = "call-saved-x15",345 .llvm_name = "call-saved-x15",
391 .description = "Make X15 callee saved.",346 .description = "Make X15 callee saved.",
392 .dependencies = featureSet(&[_]Feature{}),347 .dependencies = sparseFeatureSet(&[_]Feature{}),
393 };348 };
394 result[@enumToInt(Feature.call_saved_x18)] = .{349 result[@enumToInt(Feature.call_saved_x18)] = .{
395 .index = @enumToInt(Feature.call_saved_x18),
396 .name = @tagName(Feature.call_saved_x18),
397 .llvm_name = "call-saved-x18",350 .llvm_name = "call-saved-x18",
398 .description = "Make X18 callee saved.",351 .description = "Make X18 callee saved.",
399 .dependencies = featureSet(&[_]Feature{}),352 .dependencies = sparseFeatureSet(&[_]Feature{}),
400 };353 };
401 result[@enumToInt(Feature.call_saved_x8)] = .{354 result[@enumToInt(Feature.call_saved_x8)] = .{
402 .index = @enumToInt(Feature.call_saved_x8),
403 .name = @tagName(Feature.call_saved_x8),
404 .llvm_name = "call-saved-x8",355 .llvm_name = "call-saved-x8",
405 .description = "Make X8 callee saved.",356 .description = "Make X8 callee saved.",
406 .dependencies = featureSet(&[_]Feature{}),357 .dependencies = sparseFeatureSet(&[_]Feature{}),
407 };358 };
408 result[@enumToInt(Feature.call_saved_x9)] = .{359 result[@enumToInt(Feature.call_saved_x9)] = .{
409 .index = @enumToInt(Feature.call_saved_x9),
410 .name = @tagName(Feature.call_saved_x9),
411 .llvm_name = "call-saved-x9",360 .llvm_name = "call-saved-x9",
412 .description = "Make X9 callee saved.",361 .description = "Make X9 callee saved.",
413 .dependencies = featureSet(&[_]Feature{}),362 .dependencies = sparseFeatureSet(&[_]Feature{}),
414 };363 };
415 result[@enumToInt(Feature.ccdp)] = .{364 result[@enumToInt(Feature.ccdp)] = .{
416 .index = @enumToInt(Feature.ccdp),
417 .name = @tagName(Feature.ccdp),
418 .llvm_name = "ccdp",365 .llvm_name = "ccdp",
419 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",366 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
420 .dependencies = featureSet(&[_]Feature{}),367 .dependencies = sparseFeatureSet(&[_]Feature{}),
421 };368 };
422 result[@enumToInt(Feature.ccidx)] = .{369 result[@enumToInt(Feature.ccidx)] = .{
423 .index = @enumToInt(Feature.ccidx),
424 .name = @tagName(Feature.ccidx),
425 .llvm_name = "ccidx",370 .llvm_name = "ccidx",
426 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",371 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
427 .dependencies = featureSet(&[_]Feature{}),372 .dependencies = sparseFeatureSet(&[_]Feature{}),
428 };373 };
429 result[@enumToInt(Feature.ccpp)] = .{374 result[@enumToInt(Feature.ccpp)] = .{
430 .index = @enumToInt(Feature.ccpp),
431 .name = @tagName(Feature.ccpp),
432 .llvm_name = "ccpp",375 .llvm_name = "ccpp",
433 .description = "Enable v8.2 data Cache Clean to Point of Persistence",376 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
434 .dependencies = featureSet(&[_]Feature{}),377 .dependencies = sparseFeatureSet(&[_]Feature{}),
435 };378 };
436 result[@enumToInt(Feature.complxnum)] = .{379 result[@enumToInt(Feature.complxnum)] = .{
437 .index = @enumToInt(Feature.complxnum),
438 .name = @tagName(Feature.complxnum),
439 .llvm_name = "complxnum",380 .llvm_name = "complxnum",
440 .description = "Enable v8.3-A Floating-point complex number support",381 .description = "Enable v8.3-A Floating-point complex number support",
441 .dependencies = featureSet(&[_]Feature{382 .dependencies = sparseFeatureSet(&[_]Feature{
442 .neon,383 .neon,
443 }),384 }),
444 };385 };
445 result[@enumToInt(Feature.crc)] = .{386 result[@enumToInt(Feature.crc)] = .{
446 .index = @enumToInt(Feature.crc),
447 .name = @tagName(Feature.crc),
448 .llvm_name = "crc",387 .llvm_name = "crc",
449 .description = "Enable ARMv8 CRC-32 checksum instructions",388 .description = "Enable ARMv8 CRC-32 checksum instructions",
450 .dependencies = featureSet(&[_]Feature{}),389 .dependencies = sparseFeatureSet(&[_]Feature{}),
451 };390 };
452 result[@enumToInt(Feature.crypto)] = .{391 result[@enumToInt(Feature.crypto)] = .{
453 .index = @enumToInt(Feature.crypto),
454 .name = @tagName(Feature.crypto),
455 .llvm_name = "crypto",392 .llvm_name = "crypto",
456 .description = "Enable cryptographic instructions",393 .description = "Enable cryptographic instructions",
457 .dependencies = featureSet(&[_]Feature{394 .dependencies = sparseFeatureSet(&[_]Feature{
458 .aes,395 .aes,
459 .neon,396 .neon,
460 .sha2,397 .sha2,
461 }),398 }),
462 };399 };
463 result[@enumToInt(Feature.custom_cheap_as_move)] = .{400 result[@enumToInt(Feature.custom_cheap_as_move)] = .{
464 .index = @enumToInt(Feature.custom_cheap_as_move),
465 .name = @tagName(Feature.custom_cheap_as_move),
466 .llvm_name = "custom-cheap-as-move",401 .llvm_name = "custom-cheap-as-move",
467 .description = "Use custom handling of cheap instructions",402 .description = "Use custom handling of cheap instructions",
468 .dependencies = featureSet(&[_]Feature{}),403 .dependencies = sparseFeatureSet(&[_]Feature{}),
469 };404 };
470 result[@enumToInt(Feature.cyclone)] = .{405 result[@enumToInt(Feature.cyclone)] = .{
471 .index = @enumToInt(Feature.cyclone),
472 .name = @tagName(Feature.cyclone),
473 .llvm_name = "cyclone",406 .llvm_name = "cyclone",
474 .description = "Cyclone",407 .description = "Cyclone",
475 .dependencies = featureSet(&[_]Feature{408 .dependencies = sparseFeatureSet(&[_]Feature{
476 .alternate_sextload_cvt_f32_pattern,409 .alternate_sextload_cvt_f32_pattern,
477 .arith_bcc_fusion,410 .arith_bcc_fusion,
478 .arith_cbz_fusion,411 .arith_cbz_fusion,
...@@ -489,41 +422,31 @@ pub const all_features = blk: {...@@ -489,41 +422,31 @@ pub const all_features = blk: {
489 }),422 }),
490 };423 };
491 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{424 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
492 .index = @enumToInt(Feature.disable_latency_sched_heuristic),
493 .name = @tagName(Feature.disable_latency_sched_heuristic),
494 .llvm_name = "disable-latency-sched-heuristic",425 .llvm_name = "disable-latency-sched-heuristic",
495 .description = "Disable latency scheduling heuristic",426 .description = "Disable latency scheduling heuristic",
496 .dependencies = featureSet(&[_]Feature{}),427 .dependencies = sparseFeatureSet(&[_]Feature{}),
497 };428 };
498 result[@enumToInt(Feature.dit)] = .{429 result[@enumToInt(Feature.dit)] = .{
499 .index = @enumToInt(Feature.dit),
500 .name = @tagName(Feature.dit),
501 .llvm_name = "dit",430 .llvm_name = "dit",
502 .description = "Enable v8.4-A Data Independent Timing instructions",431 .description = "Enable v8.4-A Data Independent Timing instructions",
503 .dependencies = featureSet(&[_]Feature{}),432 .dependencies = sparseFeatureSet(&[_]Feature{}),
504 };433 };
505 result[@enumToInt(Feature.dotprod)] = .{434 result[@enumToInt(Feature.dotprod)] = .{
506 .index = @enumToInt(Feature.dotprod),
507 .name = @tagName(Feature.dotprod),
508 .llvm_name = "dotprod",435 .llvm_name = "dotprod",
509 .description = "Enable dot product support",436 .description = "Enable dot product support",
510 .dependencies = featureSet(&[_]Feature{}),437 .dependencies = sparseFeatureSet(&[_]Feature{}),
511 };438 };
512 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{439 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{
513 .index = @enumToInt(Feature.exynos_cheap_as_move),
514 .name = @tagName(Feature.exynos_cheap_as_move),
515 .llvm_name = "exynos-cheap-as-move",440 .llvm_name = "exynos-cheap-as-move",
516 .description = "Use Exynos specific handling of cheap instructions",441 .description = "Use Exynos specific handling of cheap instructions",
517 .dependencies = featureSet(&[_]Feature{442 .dependencies = sparseFeatureSet(&[_]Feature{
518 .custom_cheap_as_move,443 .custom_cheap_as_move,
519 }),444 }),
520 };445 };
521 result[@enumToInt(Feature.exynosm1)] = .{446 result[@enumToInt(Feature.exynosm1)] = .{
522 .index = @enumToInt(Feature.exynosm1),
523 .name = @tagName(Feature.exynosm1),
524 .llvm_name = "exynosm1",447 .llvm_name = "exynosm1",
525 .description = "Samsung Exynos-M1 processors",448 .description = "Samsung Exynos-M1 processors",
526 .dependencies = featureSet(&[_]Feature{449 .dependencies = sparseFeatureSet(&[_]Feature{
527 .crc,450 .crc,
528 .crypto,451 .crypto,
529 .exynos_cheap_as_move,452 .exynos_cheap_as_move,
...@@ -538,11 +461,9 @@ pub const all_features = blk: {...@@ -538,11 +461,9 @@ pub const all_features = blk: {
538 }),461 }),
539 };462 };
540 result[@enumToInt(Feature.exynosm2)] = .{463 result[@enumToInt(Feature.exynosm2)] = .{
541 .index = @enumToInt(Feature.exynosm2),
542 .name = @tagName(Feature.exynosm2),
543 .llvm_name = "exynosm2",464 .llvm_name = "exynosm2",
544 .description = "Samsung Exynos-M2 processors",465 .description = "Samsung Exynos-M2 processors",
545 .dependencies = featureSet(&[_]Feature{466 .dependencies = sparseFeatureSet(&[_]Feature{
546 .crc,467 .crc,
547 .crypto,468 .crypto,
548 .exynos_cheap_as_move,469 .exynos_cheap_as_move,
...@@ -556,11 +477,9 @@ pub const all_features = blk: {...@@ -556,11 +477,9 @@ pub const all_features = blk: {
556 }),477 }),
557 };478 };
558 result[@enumToInt(Feature.exynosm3)] = .{479 result[@enumToInt(Feature.exynosm3)] = .{
559 .index = @enumToInt(Feature.exynosm3),
560 .name = @tagName(Feature.exynosm3),
561 .llvm_name = "exynosm3",480 .llvm_name = "exynosm3",
562 .description = "Samsung Exynos-M3 processors",481 .description = "Samsung Exynos-M3 processors",
563 .dependencies = featureSet(&[_]Feature{482 .dependencies = sparseFeatureSet(&[_]Feature{
564 .crc,483 .crc,
565 .crypto,484 .crypto,
566 .exynos_cheap_as_move,485 .exynos_cheap_as_move,
...@@ -577,11 +496,9 @@ pub const all_features = blk: {...@@ -577,11 +496,9 @@ pub const all_features = blk: {
577 }),496 }),
578 };497 };
579 result[@enumToInt(Feature.exynosm4)] = .{498 result[@enumToInt(Feature.exynosm4)] = .{
580 .index = @enumToInt(Feature.exynosm4),
581 .name = @tagName(Feature.exynosm4),
582 .llvm_name = "exynosm4",499 .llvm_name = "exynosm4",
583 .description = "Samsung Exynos-M4 processors",500 .description = "Samsung Exynos-M4 processors",
584 .dependencies = featureSet(&[_]Feature{501 .dependencies = sparseFeatureSet(&[_]Feature{
585 .arith_bcc_fusion,502 .arith_bcc_fusion,
586 .arith_cbz_fusion,503 .arith_cbz_fusion,
587 .crypto,504 .crypto,
...@@ -602,11 +519,9 @@ pub const all_features = blk: {...@@ -602,11 +519,9 @@ pub const all_features = blk: {
602 }),519 }),
603 };520 };
604 result[@enumToInt(Feature.falkor)] = .{521 result[@enumToInt(Feature.falkor)] = .{
605 .index = @enumToInt(Feature.falkor),
606 .name = @tagName(Feature.falkor),
607 .llvm_name = "falkor",522 .llvm_name = "falkor",
608 .description = "Qualcomm Falkor processors",523 .description = "Qualcomm Falkor processors",
609 .dependencies = featureSet(&[_]Feature{524 .dependencies = sparseFeatureSet(&[_]Feature{
610 .crc,525 .crc,
611 .crypto,526 .crypto,
612 .custom_cheap_as_move,527 .custom_cheap_as_move,
...@@ -622,108 +537,80 @@ pub const all_features = blk: {...@@ -622,108 +537,80 @@ pub const all_features = blk: {
622 }),537 }),
623 };538 };
624 result[@enumToInt(Feature.fmi)] = .{539 result[@enumToInt(Feature.fmi)] = .{
625 .index = @enumToInt(Feature.fmi),
626 .name = @tagName(Feature.fmi),
627 .llvm_name = "fmi",540 .llvm_name = "fmi",
628 .description = "Enable v8.4-A Flag Manipulation Instructions",541 .description = "Enable v8.4-A Flag Manipulation Instructions",
629 .dependencies = featureSet(&[_]Feature{}),542 .dependencies = sparseFeatureSet(&[_]Feature{}),
630 };543 };
631 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{544 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
632 .index = @enumToInt(Feature.force_32bit_jump_tables),
633 .name = @tagName(Feature.force_32bit_jump_tables),
634 .llvm_name = "force-32bit-jump-tables",545 .llvm_name = "force-32bit-jump-tables",
635 .description = "Force jump table entries to be 32-bits wide except at MinSize",546 .description = "Force jump table entries to be 32-bits wide except at MinSize",
636 .dependencies = featureSet(&[_]Feature{}),547 .dependencies = sparseFeatureSet(&[_]Feature{}),
637 };548 };
638 result[@enumToInt(Feature.fp_armv8)] = .{549 result[@enumToInt(Feature.fp_armv8)] = .{
639 .index = @enumToInt(Feature.fp_armv8),
640 .name = @tagName(Feature.fp_armv8),
641 .llvm_name = "fp-armv8",550 .llvm_name = "fp-armv8",
642 .description = "Enable ARMv8 FP",551 .description = "Enable ARMv8 FP",
643 .dependencies = featureSet(&[_]Feature{}),552 .dependencies = sparseFeatureSet(&[_]Feature{}),
644 };553 };
645 result[@enumToInt(Feature.fp16fml)] = .{554 result[@enumToInt(Feature.fp16fml)] = .{
646 .index = @enumToInt(Feature.fp16fml),
647 .name = @tagName(Feature.fp16fml),
648 .llvm_name = "fp16fml",555 .llvm_name = "fp16fml",
649 .description = "Enable FP16 FML instructions",556 .description = "Enable FP16 FML instructions",
650 .dependencies = featureSet(&[_]Feature{557 .dependencies = sparseFeatureSet(&[_]Feature{
651 .fullfp16,558 .fullfp16,
652 }),559 }),
653 };560 };
654 result[@enumToInt(Feature.fptoint)] = .{561 result[@enumToInt(Feature.fptoint)] = .{
655 .index = @enumToInt(Feature.fptoint),
656 .name = @tagName(Feature.fptoint),
657 .llvm_name = "fptoint",562 .llvm_name = "fptoint",
658 .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",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",
659 .dependencies = featureSet(&[_]Feature{}),564 .dependencies = sparseFeatureSet(&[_]Feature{}),
660 };565 };
661 result[@enumToInt(Feature.fullfp16)] = .{566 result[@enumToInt(Feature.fullfp16)] = .{
662 .index = @enumToInt(Feature.fullfp16),
663 .name = @tagName(Feature.fullfp16),
664 .llvm_name = "fullfp16",567 .llvm_name = "fullfp16",
665 .description = "Full FP16",568 .description = "Full FP16",
666 .dependencies = featureSet(&[_]Feature{569 .dependencies = sparseFeatureSet(&[_]Feature{
667 .fp_armv8,570 .fp_armv8,
668 }),571 }),
669 };572 };
670 result[@enumToInt(Feature.fuse_address)] = .{573 result[@enumToInt(Feature.fuse_address)] = .{
671 .index = @enumToInt(Feature.fuse_address),
672 .name = @tagName(Feature.fuse_address),
673 .llvm_name = "fuse-address",574 .llvm_name = "fuse-address",
674 .description = "CPU fuses address generation and memory operations",575 .description = "CPU fuses address generation and memory operations",
675 .dependencies = featureSet(&[_]Feature{}),576 .dependencies = sparseFeatureSet(&[_]Feature{}),
676 };577 };
677 result[@enumToInt(Feature.fuse_aes)] = .{578 result[@enumToInt(Feature.fuse_aes)] = .{
678 .index = @enumToInt(Feature.fuse_aes),
679 .name = @tagName(Feature.fuse_aes),
680 .llvm_name = "fuse-aes",579 .llvm_name = "fuse-aes",
681 .description = "CPU fuses AES crypto operations",580 .description = "CPU fuses AES crypto operations",
682 .dependencies = featureSet(&[_]Feature{}),581 .dependencies = sparseFeatureSet(&[_]Feature{}),
683 };582 };
684 result[@enumToInt(Feature.fuse_arith_logic)] = .{583 result[@enumToInt(Feature.fuse_arith_logic)] = .{
685 .index = @enumToInt(Feature.fuse_arith_logic),
686 .name = @tagName(Feature.fuse_arith_logic),
687 .llvm_name = "fuse-arith-logic",584 .llvm_name = "fuse-arith-logic",
688 .description = "CPU fuses arithmetic and logic operations",585 .description = "CPU fuses arithmetic and logic operations",
689 .dependencies = featureSet(&[_]Feature{}),586 .dependencies = sparseFeatureSet(&[_]Feature{}),
690 };587 };
691 result[@enumToInt(Feature.fuse_crypto_eor)] = .{588 result[@enumToInt(Feature.fuse_crypto_eor)] = .{
692 .index = @enumToInt(Feature.fuse_crypto_eor),
693 .name = @tagName(Feature.fuse_crypto_eor),
694 .llvm_name = "fuse-crypto-eor",589 .llvm_name = "fuse-crypto-eor",
695 .description = "CPU fuses AES/PMULL and EOR operations",590 .description = "CPU fuses AES/PMULL and EOR operations",
696 .dependencies = featureSet(&[_]Feature{}),591 .dependencies = sparseFeatureSet(&[_]Feature{}),
697 };592 };
698 result[@enumToInt(Feature.fuse_csel)] = .{593 result[@enumToInt(Feature.fuse_csel)] = .{
699 .index = @enumToInt(Feature.fuse_csel),
700 .name = @tagName(Feature.fuse_csel),
701 .llvm_name = "fuse-csel",594 .llvm_name = "fuse-csel",
702 .description = "CPU fuses conditional select operations",595 .description = "CPU fuses conditional select operations",
703 .dependencies = featureSet(&[_]Feature{}),596 .dependencies = sparseFeatureSet(&[_]Feature{}),
704 };597 };
705 result[@enumToInt(Feature.fuse_literals)] = .{598 result[@enumToInt(Feature.fuse_literals)] = .{
706 .index = @enumToInt(Feature.fuse_literals),
707 .name = @tagName(Feature.fuse_literals),
708 .llvm_name = "fuse-literals",599 .llvm_name = "fuse-literals",
709 .description = "CPU fuses literal generation operations",600 .description = "CPU fuses literal generation operations",
710 .dependencies = featureSet(&[_]Feature{}),601 .dependencies = sparseFeatureSet(&[_]Feature{}),
711 };602 };
712 result[@enumToInt(Feature.jsconv)] = .{603 result[@enumToInt(Feature.jsconv)] = .{
713 .index = @enumToInt(Feature.jsconv),
714 .name = @tagName(Feature.jsconv),
715 .llvm_name = "jsconv",604 .llvm_name = "jsconv",
716 .description = "Enable v8.3-A JavaScript FP conversion enchancement",605 .description = "Enable v8.3-A JavaScript FP conversion enchancement",
717 .dependencies = featureSet(&[_]Feature{606 .dependencies = sparseFeatureSet(&[_]Feature{
718 .fp_armv8,607 .fp_armv8,
719 }),608 }),
720 };609 };
721 result[@enumToInt(Feature.kryo)] = .{610 result[@enumToInt(Feature.kryo)] = .{
722 .index = @enumToInt(Feature.kryo),
723 .name = @tagName(Feature.kryo),
724 .llvm_name = "kryo",611 .llvm_name = "kryo",
725 .description = "Qualcomm Kryo processors",612 .description = "Qualcomm Kryo processors",
726 .dependencies = featureSet(&[_]Feature{613 .dependencies = sparseFeatureSet(&[_]Feature{
727 .crc,614 .crc,
728 .crypto,615 .crypto,
729 .custom_cheap_as_move,616 .custom_cheap_as_move,
...@@ -737,327 +624,237 @@ pub const all_features = blk: {...@@ -737,327 +624,237 @@ pub const all_features = blk: {
737 }),624 }),
738 };625 };
739 result[@enumToInt(Feature.lor)] = .{626 result[@enumToInt(Feature.lor)] = .{
740 .index = @enumToInt(Feature.lor),
741 .name = @tagName(Feature.lor),
742 .llvm_name = "lor",627 .llvm_name = "lor",
743 .description = "Enables ARM v8.1 Limited Ordering Regions extension",628 .description = "Enables ARM v8.1 Limited Ordering Regions extension",
744 .dependencies = featureSet(&[_]Feature{}),629 .dependencies = sparseFeatureSet(&[_]Feature{}),
745 };630 };
746 result[@enumToInt(Feature.lse)] = .{631 result[@enumToInt(Feature.lse)] = .{
747 .index = @enumToInt(Feature.lse),
748 .name = @tagName(Feature.lse),
749 .llvm_name = "lse",632 .llvm_name = "lse",
750 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",633 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",
751 .dependencies = featureSet(&[_]Feature{}),634 .dependencies = sparseFeatureSet(&[_]Feature{}),
752 };635 };
753 result[@enumToInt(Feature.lsl_fast)] = .{636 result[@enumToInt(Feature.lsl_fast)] = .{
754 .index = @enumToInt(Feature.lsl_fast),
755 .name = @tagName(Feature.lsl_fast),
756 .llvm_name = "lsl-fast",637 .llvm_name = "lsl-fast",
757 .description = "CPU has a fastpath logical shift of up to 3 places",638 .description = "CPU has a fastpath logical shift of up to 3 places",
758 .dependencies = featureSet(&[_]Feature{}),639 .dependencies = sparseFeatureSet(&[_]Feature{}),
759 };640 };
760 result[@enumToInt(Feature.mpam)] = .{641 result[@enumToInt(Feature.mpam)] = .{
761 .index = @enumToInt(Feature.mpam),
762 .name = @tagName(Feature.mpam),
763 .llvm_name = "mpam",642 .llvm_name = "mpam",
764 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",643 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",
765 .dependencies = featureSet(&[_]Feature{}),644 .dependencies = sparseFeatureSet(&[_]Feature{}),
766 };645 };
767 result[@enumToInt(Feature.mte)] = .{646 result[@enumToInt(Feature.mte)] = .{
768 .index = @enumToInt(Feature.mte),
769 .name = @tagName(Feature.mte),
770 .llvm_name = "mte",647 .llvm_name = "mte",
771 .description = "Enable Memory Tagging Extension",648 .description = "Enable Memory Tagging Extension",
772 .dependencies = featureSet(&[_]Feature{}),649 .dependencies = sparseFeatureSet(&[_]Feature{}),
773 };650 };
774 result[@enumToInt(Feature.neon)] = .{651 result[@enumToInt(Feature.neon)] = .{
775 .index = @enumToInt(Feature.neon),
776 .name = @tagName(Feature.neon),
777 .llvm_name = "neon",652 .llvm_name = "neon",
778 .description = "Enable Advanced SIMD instructions",653 .description = "Enable Advanced SIMD instructions",
779 .dependencies = featureSet(&[_]Feature{654 .dependencies = sparseFeatureSet(&[_]Feature{
780 .fp_armv8,655 .fp_armv8,
781 }),656 }),
782 };657 };
783 result[@enumToInt(Feature.no_neg_immediates)] = .{658 result[@enumToInt(Feature.no_neg_immediates)] = .{
784 .index = @enumToInt(Feature.no_neg_immediates),
785 .name = @tagName(Feature.no_neg_immediates),
786 .llvm_name = "no-neg-immediates",659 .llvm_name = "no-neg-immediates",
787 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",660 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
788 .dependencies = featureSet(&[_]Feature{}),661 .dependencies = sparseFeatureSet(&[_]Feature{}),
789 };662 };
790 result[@enumToInt(Feature.nv)] = .{663 result[@enumToInt(Feature.nv)] = .{
791 .index = @enumToInt(Feature.nv),
792 .name = @tagName(Feature.nv),
793 .llvm_name = "nv",664 .llvm_name = "nv",
794 .description = "Enable v8.4-A Nested Virtualization Enchancement",665 .description = "Enable v8.4-A Nested Virtualization Enchancement",
795 .dependencies = featureSet(&[_]Feature{}),666 .dependencies = sparseFeatureSet(&[_]Feature{}),
796 };667 };
797 result[@enumToInt(Feature.pa)] = .{668 result[@enumToInt(Feature.pa)] = .{
798 .index = @enumToInt(Feature.pa),
799 .name = @tagName(Feature.pa),
800 .llvm_name = "pa",669 .llvm_name = "pa",
801 .description = "Enable v8.3-A Pointer Authentication enchancement",670 .description = "Enable v8.3-A Pointer Authentication enchancement",
802 .dependencies = featureSet(&[_]Feature{}),671 .dependencies = sparseFeatureSet(&[_]Feature{}),
803 };672 };
804 result[@enumToInt(Feature.pan)] = .{673 result[@enumToInt(Feature.pan)] = .{
805 .index = @enumToInt(Feature.pan),
806 .name = @tagName(Feature.pan),
807 .llvm_name = "pan",674 .llvm_name = "pan",
808 .description = "Enables ARM v8.1 Privileged Access-Never extension",675 .description = "Enables ARM v8.1 Privileged Access-Never extension",
809 .dependencies = featureSet(&[_]Feature{}),676 .dependencies = sparseFeatureSet(&[_]Feature{}),
810 };677 };
811 result[@enumToInt(Feature.pan_rwv)] = .{678 result[@enumToInt(Feature.pan_rwv)] = .{
812 .index = @enumToInt(Feature.pan_rwv),
813 .name = @tagName(Feature.pan_rwv),
814 .llvm_name = "pan-rwv",679 .llvm_name = "pan-rwv",
815 .description = "Enable v8.2 PAN s1e1R and s1e1W Variants",680 .description = "Enable v8.2 PAN s1e1R and s1e1W Variants",
816 .dependencies = featureSet(&[_]Feature{681 .dependencies = sparseFeatureSet(&[_]Feature{
817 .pan,682 .pan,
818 }),683 }),
819 };684 };
820 result[@enumToInt(Feature.perfmon)] = .{685 result[@enumToInt(Feature.perfmon)] = .{
821 .index = @enumToInt(Feature.perfmon),
822 .name = @tagName(Feature.perfmon),
823 .llvm_name = "perfmon",686 .llvm_name = "perfmon",
824 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",687 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",
825 .dependencies = featureSet(&[_]Feature{}),688 .dependencies = sparseFeatureSet(&[_]Feature{}),
826 };689 };
827 result[@enumToInt(Feature.predictable_select_expensive)] = .{690 result[@enumToInt(Feature.predictable_select_expensive)] = .{
828 .index = @enumToInt(Feature.predictable_select_expensive),
829 .name = @tagName(Feature.predictable_select_expensive),
830 .llvm_name = "predictable-select-expensive",691 .llvm_name = "predictable-select-expensive",
831 .description = "Prefer likely predicted branches over selects",692 .description = "Prefer likely predicted branches over selects",
832 .dependencies = featureSet(&[_]Feature{}),693 .dependencies = sparseFeatureSet(&[_]Feature{}),
833 };694 };
834 result[@enumToInt(Feature.predres)] = .{695 result[@enumToInt(Feature.predres)] = .{
835 .index = @enumToInt(Feature.predres),
836 .name = @tagName(Feature.predres),
837 .llvm_name = "predres",696 .llvm_name = "predres",
838 .description = "Enable v8.5a execution and data prediction invalidation instructions",697 .description = "Enable v8.5a execution and data prediction invalidation instructions",
839 .dependencies = featureSet(&[_]Feature{}),698 .dependencies = sparseFeatureSet(&[_]Feature{}),
840 };699 };
841 result[@enumToInt(Feature.rand)] = .{700 result[@enumToInt(Feature.rand)] = .{
842 .index = @enumToInt(Feature.rand),
843 .name = @tagName(Feature.rand),
844 .llvm_name = "rand",701 .llvm_name = "rand",
845 .description = "Enable Random Number generation instructions",702 .description = "Enable Random Number generation instructions",
846 .dependencies = featureSet(&[_]Feature{}),703 .dependencies = sparseFeatureSet(&[_]Feature{}),
847 };704 };
848 result[@enumToInt(Feature.ras)] = .{705 result[@enumToInt(Feature.ras)] = .{
849 .index = @enumToInt(Feature.ras),
850 .name = @tagName(Feature.ras),
851 .llvm_name = "ras",706 .llvm_name = "ras",
852 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",707 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",
853 .dependencies = featureSet(&[_]Feature{}),708 .dependencies = sparseFeatureSet(&[_]Feature{}),
854 };709 };
855 result[@enumToInt(Feature.rasv8_4)] = .{710 result[@enumToInt(Feature.rasv8_4)] = .{
856 .index = @enumToInt(Feature.rasv8_4),
857 .name = @tagName(Feature.rasv8_4),
858 .llvm_name = "rasv8_4",711 .llvm_name = "rasv8_4",
859 .description = "Enable v8.4-A Reliability, Availability and Serviceability extension",712 .description = "Enable v8.4-A Reliability, Availability and Serviceability extension",
860 .dependencies = featureSet(&[_]Feature{713 .dependencies = sparseFeatureSet(&[_]Feature{
861 .ras,714 .ras,
862 }),715 }),
863 };716 };
864 result[@enumToInt(Feature.rcpc)] = .{717 result[@enumToInt(Feature.rcpc)] = .{
865 .index = @enumToInt(Feature.rcpc),
866 .name = @tagName(Feature.rcpc),
867 .llvm_name = "rcpc",718 .llvm_name = "rcpc",
868 .description = "Enable support for RCPC extension",719 .description = "Enable support for RCPC extension",
869 .dependencies = featureSet(&[_]Feature{}),720 .dependencies = sparseFeatureSet(&[_]Feature{}),
870 };721 };
871 result[@enumToInt(Feature.rcpc_immo)] = .{722 result[@enumToInt(Feature.rcpc_immo)] = .{
872 .index = @enumToInt(Feature.rcpc_immo),
873 .name = @tagName(Feature.rcpc_immo),
874 .llvm_name = "rcpc-immo",723 .llvm_name = "rcpc-immo",
875 .description = "Enable v8.4-A RCPC instructions with Immediate Offsets",724 .description = "Enable v8.4-A RCPC instructions with Immediate Offsets",
876 .dependencies = featureSet(&[_]Feature{725 .dependencies = sparseFeatureSet(&[_]Feature{
877 .rcpc,726 .rcpc,
878 }),727 }),
879 };728 };
880 result[@enumToInt(Feature.rdm)] = .{729 result[@enumToInt(Feature.rdm)] = .{
881 .index = @enumToInt(Feature.rdm),
882 .name = @tagName(Feature.rdm),
883 .llvm_name = "rdm",730 .llvm_name = "rdm",
884 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",731 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",
885 .dependencies = featureSet(&[_]Feature{}),732 .dependencies = sparseFeatureSet(&[_]Feature{}),
886 };733 };
887 result[@enumToInt(Feature.reserve_x1)] = .{734 result[@enumToInt(Feature.reserve_x1)] = .{
888 .index = @enumToInt(Feature.reserve_x1),
889 .name = @tagName(Feature.reserve_x1),
890 .llvm_name = "reserve-x1",735 .llvm_name = "reserve-x1",
891 .description = "Reserve X1, making it unavailable as a GPR",736 .description = "Reserve X1, making it unavailable as a GPR",
892 .dependencies = featureSet(&[_]Feature{}),737 .dependencies = sparseFeatureSet(&[_]Feature{}),
893 };738 };
894 result[@enumToInt(Feature.reserve_x10)] = .{739 result[@enumToInt(Feature.reserve_x10)] = .{
895 .index = @enumToInt(Feature.reserve_x10),
896 .name = @tagName(Feature.reserve_x10),
897 .llvm_name = "reserve-x10",740 .llvm_name = "reserve-x10",
898 .description = "Reserve X10, making it unavailable as a GPR",741 .description = "Reserve X10, making it unavailable as a GPR",
899 .dependencies = featureSet(&[_]Feature{}),742 .dependencies = sparseFeatureSet(&[_]Feature{}),
900 };743 };
901 result[@enumToInt(Feature.reserve_x11)] = .{744 result[@enumToInt(Feature.reserve_x11)] = .{
902 .index = @enumToInt(Feature.reserve_x11),
903 .name = @tagName(Feature.reserve_x11),
904 .llvm_name = "reserve-x11",745 .llvm_name = "reserve-x11",
905 .description = "Reserve X11, making it unavailable as a GPR",746 .description = "Reserve X11, making it unavailable as a GPR",
906 .dependencies = featureSet(&[_]Feature{}),747 .dependencies = sparseFeatureSet(&[_]Feature{}),
907 };748 };
908 result[@enumToInt(Feature.reserve_x12)] = .{749 result[@enumToInt(Feature.reserve_x12)] = .{
909 .index = @enumToInt(Feature.reserve_x12),
910 .name = @tagName(Feature.reserve_x12),
911 .llvm_name = "reserve-x12",750 .llvm_name = "reserve-x12",
912 .description = "Reserve X12, making it unavailable as a GPR",751 .description = "Reserve X12, making it unavailable as a GPR",
913 .dependencies = featureSet(&[_]Feature{}),752 .dependencies = sparseFeatureSet(&[_]Feature{}),
914 };753 };
915 result[@enumToInt(Feature.reserve_x13)] = .{754 result[@enumToInt(Feature.reserve_x13)] = .{
916 .index = @enumToInt(Feature.reserve_x13),
917 .name = @tagName(Feature.reserve_x13),
918 .llvm_name = "reserve-x13",755 .llvm_name = "reserve-x13",
919 .description = "Reserve X13, making it unavailable as a GPR",756 .description = "Reserve X13, making it unavailable as a GPR",
920 .dependencies = featureSet(&[_]Feature{}),757 .dependencies = sparseFeatureSet(&[_]Feature{}),
921 };758 };
922 result[@enumToInt(Feature.reserve_x14)] = .{759 result[@enumToInt(Feature.reserve_x14)] = .{
923 .index = @enumToInt(Feature.reserve_x14),
924 .name = @tagName(Feature.reserve_x14),
925 .llvm_name = "reserve-x14",760 .llvm_name = "reserve-x14",
926 .description = "Reserve X14, making it unavailable as a GPR",761 .description = "Reserve X14, making it unavailable as a GPR",
927 .dependencies = featureSet(&[_]Feature{}),762 .dependencies = sparseFeatureSet(&[_]Feature{}),
928 };763 };
929 result[@enumToInt(Feature.reserve_x15)] = .{764 result[@enumToInt(Feature.reserve_x15)] = .{
930 .index = @enumToInt(Feature.reserve_x15),
931 .name = @tagName(Feature.reserve_x15),
932 .llvm_name = "reserve-x15",765 .llvm_name = "reserve-x15",
933 .description = "Reserve X15, making it unavailable as a GPR",766 .description = "Reserve X15, making it unavailable as a GPR",
934 .dependencies = featureSet(&[_]Feature{}),767 .dependencies = sparseFeatureSet(&[_]Feature{}),
935 };768 };
936 result[@enumToInt(Feature.reserve_x18)] = .{769 result[@enumToInt(Feature.reserve_x18)] = .{
937 .index = @enumToInt(Feature.reserve_x18),
938 .name = @tagName(Feature.reserve_x18),
939 .llvm_name = "reserve-x18",770 .llvm_name = "reserve-x18",
940 .description = "Reserve X18, making it unavailable as a GPR",771 .description = "Reserve X18, making it unavailable as a GPR",
941 .dependencies = featureSet(&[_]Feature{}),772 .dependencies = sparseFeatureSet(&[_]Feature{}),
942 };773 };
943 result[@enumToInt(Feature.reserve_x2)] = .{774 result[@enumToInt(Feature.reserve_x2)] = .{
944 .index = @enumToInt(Feature.reserve_x2),
945 .name = @tagName(Feature.reserve_x2),
946 .llvm_name = "reserve-x2",775 .llvm_name = "reserve-x2",
947 .description = "Reserve X2, making it unavailable as a GPR",776 .description = "Reserve X2, making it unavailable as a GPR",
948 .dependencies = featureSet(&[_]Feature{}),777 .dependencies = sparseFeatureSet(&[_]Feature{}),
949 };778 };
950 result[@enumToInt(Feature.reserve_x20)] = .{779 result[@enumToInt(Feature.reserve_x20)] = .{
951 .index = @enumToInt(Feature.reserve_x20),
952 .name = @tagName(Feature.reserve_x20),
953 .llvm_name = "reserve-x20",780 .llvm_name = "reserve-x20",
954 .description = "Reserve X20, making it unavailable as a GPR",781 .description = "Reserve X20, making it unavailable as a GPR",
955 .dependencies = featureSet(&[_]Feature{}),782 .dependencies = sparseFeatureSet(&[_]Feature{}),
956 };783 };
957 result[@enumToInt(Feature.reserve_x21)] = .{784 result[@enumToInt(Feature.reserve_x21)] = .{
958 .index = @enumToInt(Feature.reserve_x21),
959 .name = @tagName(Feature.reserve_x21),
960 .llvm_name = "reserve-x21",785 .llvm_name = "reserve-x21",
961 .description = "Reserve X21, making it unavailable as a GPR",786 .description = "Reserve X21, making it unavailable as a GPR",
962 .dependencies = featureSet(&[_]Feature{}),787 .dependencies = sparseFeatureSet(&[_]Feature{}),
963 };788 };
964 result[@enumToInt(Feature.reserve_x22)] = .{789 result[@enumToInt(Feature.reserve_x22)] = .{
965 .index = @enumToInt(Feature.reserve_x22),
966 .name = @tagName(Feature.reserve_x22),
967 .llvm_name = "reserve-x22",790 .llvm_name = "reserve-x22",
968 .description = "Reserve X22, making it unavailable as a GPR",791 .description = "Reserve X22, making it unavailable as a GPR",
969 .dependencies = featureSet(&[_]Feature{}),792 .dependencies = sparseFeatureSet(&[_]Feature{}),
970 };793 };
971 result[@enumToInt(Feature.reserve_x23)] = .{794 result[@enumToInt(Feature.reserve_x23)] = .{
972 .index = @enumToInt(Feature.reserve_x23),
973 .name = @tagName(Feature.reserve_x23),
974 .llvm_name = "reserve-x23",795 .llvm_name = "reserve-x23",
975 .description = "Reserve X23, making it unavailable as a GPR",796 .description = "Reserve X23, making it unavailable as a GPR",
976 .dependencies = featureSet(&[_]Feature{}),797 .dependencies = sparseFeatureSet(&[_]Feature{}),
977 };798 };
978 result[@enumToInt(Feature.reserve_x24)] = .{799 result[@enumToInt(Feature.reserve_x24)] = .{
979 .index = @enumToInt(Feature.reserve_x24),
980 .name = @tagName(Feature.reserve_x24),
981 .llvm_name = "reserve-x24",800 .llvm_name = "reserve-x24",
982 .description = "Reserve X24, making it unavailable as a GPR",801 .description = "Reserve X24, making it unavailable as a GPR",
983 .dependencies = featureSet(&[_]Feature{}),802 .dependencies = sparseFeatureSet(&[_]Feature{}),
984 };803 };
985 result[@enumToInt(Feature.reserve_x25)] = .{804 result[@enumToInt(Feature.reserve_x25)] = .{
986 .index = @enumToInt(Feature.reserve_x25),
987 .name = @tagName(Feature.reserve_x25),
988 .llvm_name = "reserve-x25",805 .llvm_name = "reserve-x25",
989 .description = "Reserve X25, making it unavailable as a GPR",806 .description = "Reserve X25, making it unavailable as a GPR",
990 .dependencies = featureSet(&[_]Feature{}),807 .dependencies = sparseFeatureSet(&[_]Feature{}),
991 };808 };
992 result[@enumToInt(Feature.reserve_x26)] = .{809 result[@enumToInt(Feature.reserve_x26)] = .{
993 .index = @enumToInt(Feature.reserve_x26),
994 .name = @tagName(Feature.reserve_x26),
995 .llvm_name = "reserve-x26",810 .llvm_name = "reserve-x26",
996 .description = "Reserve X26, making it unavailable as a GPR",811 .description = "Reserve X26, making it unavailable as a GPR",
997 .dependencies = featureSet(&[_]Feature{}),812 .dependencies = sparseFeatureSet(&[_]Feature{}),
998 };813 };
999 result[@enumToInt(Feature.reserve_x27)] = .{814 result[@enumToInt(Feature.reserve_x27)] = .{
1000 .index = @enumToInt(Feature.reserve_x27),
1001 .name = @tagName(Feature.reserve_x27),
1002 .llvm_name = "reserve-x27",815 .llvm_name = "reserve-x27",
1003 .description = "Reserve X27, making it unavailable as a GPR",816 .description = "Reserve X27, making it unavailable as a GPR",
1004 .dependencies = featureSet(&[_]Feature{}),817 .dependencies = sparseFeatureSet(&[_]Feature{}),
1005 };818 };
1006 result[@enumToInt(Feature.reserve_x28)] = .{819 result[@enumToInt(Feature.reserve_x28)] = .{
1007 .index = @enumToInt(Feature.reserve_x28),
1008 .name = @tagName(Feature.reserve_x28),
1009 .llvm_name = "reserve-x28",820 .llvm_name = "reserve-x28",
1010 .description = "Reserve X28, making it unavailable as a GPR",821 .description = "Reserve X28, making it unavailable as a GPR",
1011 .dependencies = featureSet(&[_]Feature{}),822 .dependencies = sparseFeatureSet(&[_]Feature{}),
1012 };823 };
1013 result[@enumToInt(Feature.reserve_x3)] = .{824 result[@enumToInt(Feature.reserve_x3)] = .{
1014 .index = @enumToInt(Feature.reserve_x3),
1015 .name = @tagName(Feature.reserve_x3),
1016 .llvm_name = "reserve-x3",825 .llvm_name = "reserve-x3",
1017 .description = "Reserve X3, making it unavailable as a GPR",826 .description = "Reserve X3, making it unavailable as a GPR",
1018 .dependencies = featureSet(&[_]Feature{}),827 .dependencies = sparseFeatureSet(&[_]Feature{}),
1019 };828 };
1020 result[@enumToInt(Feature.reserve_x4)] = .{829 result[@enumToInt(Feature.reserve_x4)] = .{
1021 .index = @enumToInt(Feature.reserve_x4),
1022 .name = @tagName(Feature.reserve_x4),
1023 .llvm_name = "reserve-x4",830 .llvm_name = "reserve-x4",
1024 .description = "Reserve X4, making it unavailable as a GPR",831 .description = "Reserve X4, making it unavailable as a GPR",
1025 .dependencies = featureSet(&[_]Feature{}),832 .dependencies = sparseFeatureSet(&[_]Feature{}),
1026 };833 };
1027 result[@enumToInt(Feature.reserve_x5)] = .{834 result[@enumToInt(Feature.reserve_x5)] = .{
1028 .index = @enumToInt(Feature.reserve_x5),
1029 .name = @tagName(Feature.reserve_x5),
1030 .llvm_name = "reserve-x5",835 .llvm_name = "reserve-x5",
1031 .description = "Reserve X5, making it unavailable as a GPR",836 .description = "Reserve X5, making it unavailable as a GPR",
1032 .dependencies = featureSet(&[_]Feature{}),837 .dependencies = sparseFeatureSet(&[_]Feature{}),
1033 };838 };
1034 result[@enumToInt(Feature.reserve_x6)] = .{839 result[@enumToInt(Feature.reserve_x6)] = .{
1035 .index = @enumToInt(Feature.reserve_x6),
1036 .name = @tagName(Feature.reserve_x6),
1037 .llvm_name = "reserve-x6",840 .llvm_name = "reserve-x6",
1038 .description = "Reserve X6, making it unavailable as a GPR",841 .description = "Reserve X6, making it unavailable as a GPR",
1039 .dependencies = featureSet(&[_]Feature{}),842 .dependencies = sparseFeatureSet(&[_]Feature{}),
1040 };843 };
1041 result[@enumToInt(Feature.reserve_x7)] = .{844 result[@enumToInt(Feature.reserve_x7)] = .{
1042 .index = @enumToInt(Feature.reserve_x7),
1043 .name = @tagName(Feature.reserve_x7),
1044 .llvm_name = "reserve-x7",845 .llvm_name = "reserve-x7",
1045 .description = "Reserve X7, making it unavailable as a GPR",846 .description = "Reserve X7, making it unavailable as a GPR",
1046 .dependencies = featureSet(&[_]Feature{}),847 .dependencies = sparseFeatureSet(&[_]Feature{}),
1047 };848 };
1048 result[@enumToInt(Feature.reserve_x9)] = .{849 result[@enumToInt(Feature.reserve_x9)] = .{
1049 .index = @enumToInt(Feature.reserve_x9),
1050 .name = @tagName(Feature.reserve_x9),
1051 .llvm_name = "reserve-x9",850 .llvm_name = "reserve-x9",
1052 .description = "Reserve X9, making it unavailable as a GPR",851 .description = "Reserve X9, making it unavailable as a GPR",
1053 .dependencies = featureSet(&[_]Feature{}),852 .dependencies = sparseFeatureSet(&[_]Feature{}),
1054 };853 };
1055 result[@enumToInt(Feature.saphira)] = .{854 result[@enumToInt(Feature.saphira)] = .{
1056 .index = @enumToInt(Feature.saphira),
1057 .name = @tagName(Feature.saphira),
1058 .llvm_name = "saphira",855 .llvm_name = "saphira",
1059 .description = "Qualcomm Saphira processors",856 .description = "Qualcomm Saphira processors",
1060 .dependencies = featureSet(&[_]Feature{857 .dependencies = sparseFeatureSet(&[_]Feature{
1061 .crypto,858 .crypto,
1062 .custom_cheap_as_move,859 .custom_cheap_as_move,
1063 .fp_armv8,860 .fp_armv8,
...@@ -1072,157 +869,119 @@ pub const all_features = blk: {...@@ -1072,157 +869,119 @@ pub const all_features = blk: {
1072 }),869 }),
1073 };870 };
1074 result[@enumToInt(Feature.sb)] = .{871 result[@enumToInt(Feature.sb)] = .{
1075 .index = @enumToInt(Feature.sb),
1076 .name = @tagName(Feature.sb),
1077 .llvm_name = "sb",872 .llvm_name = "sb",
1078 .description = "Enable v8.5 Speculation Barrier",873 .description = "Enable v8.5 Speculation Barrier",
1079 .dependencies = featureSet(&[_]Feature{}),874 .dependencies = sparseFeatureSet(&[_]Feature{}),
1080 };875 };
1081 result[@enumToInt(Feature.sel2)] = .{876 result[@enumToInt(Feature.sel2)] = .{
1082 .index = @enumToInt(Feature.sel2),
1083 .name = @tagName(Feature.sel2),
1084 .llvm_name = "sel2",877 .llvm_name = "sel2",
1085 .description = "Enable v8.4-A Secure Exception Level 2 extension",878 .description = "Enable v8.4-A Secure Exception Level 2 extension",
1086 .dependencies = featureSet(&[_]Feature{}),879 .dependencies = sparseFeatureSet(&[_]Feature{}),
1087 };880 };
1088 result[@enumToInt(Feature.sha2)] = .{881 result[@enumToInt(Feature.sha2)] = .{
1089 .index = @enumToInt(Feature.sha2),
1090 .name = @tagName(Feature.sha2),
1091 .llvm_name = "sha2",882 .llvm_name = "sha2",
1092 .description = "Enable SHA1 and SHA256 support",883 .description = "Enable SHA1 and SHA256 support",
1093 .dependencies = featureSet(&[_]Feature{884 .dependencies = sparseFeatureSet(&[_]Feature{
1094 .neon,885 .neon,
1095 }),886 }),
1096 };887 };
1097 result[@enumToInt(Feature.sha3)] = .{888 result[@enumToInt(Feature.sha3)] = .{
1098 .index = @enumToInt(Feature.sha3),
1099 .name = @tagName(Feature.sha3),
1100 .llvm_name = "sha3",889 .llvm_name = "sha3",
1101 .description = "Enable SHA512 and SHA3 support",890 .description = "Enable SHA512 and SHA3 support",
1102 .dependencies = featureSet(&[_]Feature{891 .dependencies = sparseFeatureSet(&[_]Feature{
1103 .neon,892 .neon,
1104 .sha2,893 .sha2,
1105 }),894 }),
1106 };895 };
1107 result[@enumToInt(Feature.slow_misaligned_128store)] = .{896 result[@enumToInt(Feature.slow_misaligned_128store)] = .{
1108 .index = @enumToInt(Feature.slow_misaligned_128store),
1109 .name = @tagName(Feature.slow_misaligned_128store),
1110 .llvm_name = "slow-misaligned-128store",897 .llvm_name = "slow-misaligned-128store",
1111 .description = "Misaligned 128 bit stores are slow",898 .description = "Misaligned 128 bit stores are slow",
1112 .dependencies = featureSet(&[_]Feature{}),899 .dependencies = sparseFeatureSet(&[_]Feature{}),
1113 };900 };
1114 result[@enumToInt(Feature.slow_paired_128)] = .{901 result[@enumToInt(Feature.slow_paired_128)] = .{
1115 .index = @enumToInt(Feature.slow_paired_128),
1116 .name = @tagName(Feature.slow_paired_128),
1117 .llvm_name = "slow-paired-128",902 .llvm_name = "slow-paired-128",
1118 .description = "Paired 128 bit loads and stores are slow",903 .description = "Paired 128 bit loads and stores are slow",
1119 .dependencies = featureSet(&[_]Feature{}),904 .dependencies = sparseFeatureSet(&[_]Feature{}),
1120 };905 };
1121 result[@enumToInt(Feature.slow_strqro_store)] = .{906 result[@enumToInt(Feature.slow_strqro_store)] = .{
1122 .index = @enumToInt(Feature.slow_strqro_store),
1123 .name = @tagName(Feature.slow_strqro_store),
1124 .llvm_name = "slow-strqro-store",907 .llvm_name = "slow-strqro-store",
1125 .description = "STR of Q register with register offset is slow",908 .description = "STR of Q register with register offset is slow",
1126 .dependencies = featureSet(&[_]Feature{}),909 .dependencies = sparseFeatureSet(&[_]Feature{}),
1127 };910 };
1128 result[@enumToInt(Feature.sm4)] = .{911 result[@enumToInt(Feature.sm4)] = .{
1129 .index = @enumToInt(Feature.sm4),
1130 .name = @tagName(Feature.sm4),
1131 .llvm_name = "sm4",912 .llvm_name = "sm4",
1132 .description = "Enable SM3 and SM4 support",913 .description = "Enable SM3 and SM4 support",
1133 .dependencies = featureSet(&[_]Feature{914 .dependencies = sparseFeatureSet(&[_]Feature{
1134 .neon,915 .neon,
1135 }),916 }),
1136 };917 };
1137 result[@enumToInt(Feature.spe)] = .{918 result[@enumToInt(Feature.spe)] = .{
1138 .index = @enumToInt(Feature.spe),
1139 .name = @tagName(Feature.spe),
1140 .llvm_name = "spe",919 .llvm_name = "spe",
1141 .description = "Enable Statistical Profiling extension",920 .description = "Enable Statistical Profiling extension",
1142 .dependencies = featureSet(&[_]Feature{}),921 .dependencies = sparseFeatureSet(&[_]Feature{}),
1143 };922 };
1144 result[@enumToInt(Feature.specrestrict)] = .{923 result[@enumToInt(Feature.specrestrict)] = .{
1145 .index = @enumToInt(Feature.specrestrict),
1146 .name = @tagName(Feature.specrestrict),
1147 .llvm_name = "specrestrict",924 .llvm_name = "specrestrict",
1148 .description = "Enable architectural speculation restriction",925 .description = "Enable architectural speculation restriction",
1149 .dependencies = featureSet(&[_]Feature{}),926 .dependencies = sparseFeatureSet(&[_]Feature{}),
1150 };927 };
1151 result[@enumToInt(Feature.ssbs)] = .{928 result[@enumToInt(Feature.ssbs)] = .{
1152 .index = @enumToInt(Feature.ssbs),
1153 .name = @tagName(Feature.ssbs),
1154 .llvm_name = "ssbs",929 .llvm_name = "ssbs",
1155 .description = "Enable Speculative Store Bypass Safe bit",930 .description = "Enable Speculative Store Bypass Safe bit",
1156 .dependencies = featureSet(&[_]Feature{}),931 .dependencies = sparseFeatureSet(&[_]Feature{}),
1157 };932 };
1158 result[@enumToInt(Feature.strict_align)] = .{933 result[@enumToInt(Feature.strict_align)] = .{
1159 .index = @enumToInt(Feature.strict_align),
1160 .name = @tagName(Feature.strict_align),
1161 .llvm_name = "strict-align",934 .llvm_name = "strict-align",
1162 .description = "Disallow all unaligned memory access",935 .description = "Disallow all unaligned memory access",
1163 .dependencies = featureSet(&[_]Feature{}),936 .dependencies = sparseFeatureSet(&[_]Feature{}),
1164 };937 };
1165 result[@enumToInt(Feature.sve)] = .{938 result[@enumToInt(Feature.sve)] = .{
1166 .index = @enumToInt(Feature.sve),
1167 .name = @tagName(Feature.sve),
1168 .llvm_name = "sve",939 .llvm_name = "sve",
1169 .description = "Enable Scalable Vector Extension (SVE) instructions",940 .description = "Enable Scalable Vector Extension (SVE) instructions",
1170 .dependencies = featureSet(&[_]Feature{}),941 .dependencies = sparseFeatureSet(&[_]Feature{}),
1171 };942 };
1172 result[@enumToInt(Feature.sve2)] = .{943 result[@enumToInt(Feature.sve2)] = .{
1173 .index = @enumToInt(Feature.sve2),
1174 .name = @tagName(Feature.sve2),
1175 .llvm_name = "sve2",944 .llvm_name = "sve2",
1176 .description = "Enable Scalable Vector Extension 2 (SVE2) instructions",945 .description = "Enable Scalable Vector Extension 2 (SVE2) instructions",
1177 .dependencies = featureSet(&[_]Feature{946 .dependencies = sparseFeatureSet(&[_]Feature{
1178 .sve,947 .sve,
1179 }),948 }),
1180 };949 };
1181 result[@enumToInt(Feature.sve2_aes)] = .{950 result[@enumToInt(Feature.sve2_aes)] = .{
1182 .index = @enumToInt(Feature.sve2_aes),
1183 .name = @tagName(Feature.sve2_aes),
1184 .llvm_name = "sve2-aes",951 .llvm_name = "sve2-aes",
1185 .description = "Enable AES SVE2 instructions",952 .description = "Enable AES SVE2 instructions",
1186 .dependencies = featureSet(&[_]Feature{953 .dependencies = sparseFeatureSet(&[_]Feature{
1187 .aes,954 .aes,
1188 .sve2,955 .sve2,
1189 }),956 }),
1190 };957 };
1191 result[@enumToInt(Feature.sve2_bitperm)] = .{958 result[@enumToInt(Feature.sve2_bitperm)] = .{
1192 .index = @enumToInt(Feature.sve2_bitperm),
1193 .name = @tagName(Feature.sve2_bitperm),
1194 .llvm_name = "sve2-bitperm",959 .llvm_name = "sve2-bitperm",
1195 .description = "Enable bit permutation SVE2 instructions",960 .description = "Enable bit permutation SVE2 instructions",
1196 .dependencies = featureSet(&[_]Feature{961 .dependencies = sparseFeatureSet(&[_]Feature{
1197 .sve2,962 .sve2,
1198 }),963 }),
1199 };964 };
1200 result[@enumToInt(Feature.sve2_sha3)] = .{965 result[@enumToInt(Feature.sve2_sha3)] = .{
1201 .index = @enumToInt(Feature.sve2_sha3),
1202 .name = @tagName(Feature.sve2_sha3),
1203 .llvm_name = "sve2-sha3",966 .llvm_name = "sve2-sha3",
1204 .description = "Enable SHA3 SVE2 instructions",967 .description = "Enable SHA3 SVE2 instructions",
1205 .dependencies = featureSet(&[_]Feature{968 .dependencies = sparseFeatureSet(&[_]Feature{
1206 .sha3,969 .sha3,
1207 .sve2,970 .sve2,
1208 }),971 }),
1209 };972 };
1210 result[@enumToInt(Feature.sve2_sm4)] = .{973 result[@enumToInt(Feature.sve2_sm4)] = .{
1211 .index = @enumToInt(Feature.sve2_sm4),
1212 .name = @tagName(Feature.sve2_sm4),
1213 .llvm_name = "sve2-sm4",974 .llvm_name = "sve2-sm4",
1214 .description = "Enable SM4 SVE2 instructions",975 .description = "Enable SM4 SVE2 instructions",
1215 .dependencies = featureSet(&[_]Feature{976 .dependencies = sparseFeatureSet(&[_]Feature{
1216 .sm4,977 .sm4,
1217 .sve2,978 .sve2,
1218 }),979 }),
1219 };980 };
1220 result[@enumToInt(Feature.thunderx)] = .{981 result[@enumToInt(Feature.thunderx)] = .{
1221 .index = @enumToInt(Feature.thunderx),
1222 .name = @tagName(Feature.thunderx),
1223 .llvm_name = "thunderx",982 .llvm_name = "thunderx",
1224 .description = "Cavium ThunderX processors",983 .description = "Cavium ThunderX processors",
1225 .dependencies = featureSet(&[_]Feature{984 .dependencies = sparseFeatureSet(&[_]Feature{
1226 .crc,985 .crc,
1227 .crypto,986 .crypto,
1228 .fp_armv8,987 .fp_armv8,
...@@ -1233,11 +992,9 @@ pub const all_features = blk: {...@@ -1233,11 +992,9 @@ pub const all_features = blk: {
1233 }),992 }),
1234 };993 };
1235 result[@enumToInt(Feature.thunderx2t99)] = .{994 result[@enumToInt(Feature.thunderx2t99)] = .{
1236 .index = @enumToInt(Feature.thunderx2t99),
1237 .name = @tagName(Feature.thunderx2t99),
1238 .llvm_name = "thunderx2t99",995 .llvm_name = "thunderx2t99",
1239 .description = "Cavium ThunderX2 processors",996 .description = "Cavium ThunderX2 processors",
1240 .dependencies = featureSet(&[_]Feature{997 .dependencies = sparseFeatureSet(&[_]Feature{
1241 .aggressive_fma,998 .aggressive_fma,
1242 .arith_bcc_fusion,999 .arith_bcc_fusion,
1243 .crc,1000 .crc,
...@@ -1251,11 +1008,9 @@ pub const all_features = blk: {...@@ -1251,11 +1008,9 @@ pub const all_features = blk: {
1251 }),1008 }),
1252 };1009 };
1253 result[@enumToInt(Feature.thunderxt81)] = .{1010 result[@enumToInt(Feature.thunderxt81)] = .{
1254 .index = @enumToInt(Feature.thunderxt81),
1255 .name = @tagName(Feature.thunderxt81),
1256 .llvm_name = "thunderxt81",1011 .llvm_name = "thunderxt81",
1257 .description = "Cavium ThunderX processors",1012 .description = "Cavium ThunderX processors",
1258 .dependencies = featureSet(&[_]Feature{1013 .dependencies = sparseFeatureSet(&[_]Feature{
1259 .crc,1014 .crc,
1260 .crypto,1015 .crypto,
1261 .fp_armv8,1016 .fp_armv8,
...@@ -1266,11 +1021,9 @@ pub const all_features = blk: {...@@ -1266,11 +1021,9 @@ pub const all_features = blk: {
1266 }),1021 }),
1267 };1022 };
1268 result[@enumToInt(Feature.thunderxt83)] = .{1023 result[@enumToInt(Feature.thunderxt83)] = .{
1269 .index = @enumToInt(Feature.thunderxt83),
1270 .name = @tagName(Feature.thunderxt83),
1271 .llvm_name = "thunderxt83",1024 .llvm_name = "thunderxt83",
1272 .description = "Cavium ThunderX processors",1025 .description = "Cavium ThunderX processors",
1273 .dependencies = featureSet(&[_]Feature{1026 .dependencies = sparseFeatureSet(&[_]Feature{
1274 .crc,1027 .crc,
1275 .crypto,1028 .crypto,
1276 .fp_armv8,1029 .fp_armv8,
...@@ -1281,11 +1034,9 @@ pub const all_features = blk: {...@@ -1281,11 +1034,9 @@ pub const all_features = blk: {
1281 }),1034 }),
1282 };1035 };
1283 result[@enumToInt(Feature.thunderxt88)] = .{1036 result[@enumToInt(Feature.thunderxt88)] = .{
1284 .index = @enumToInt(Feature.thunderxt88),
1285 .name = @tagName(Feature.thunderxt88),
1286 .llvm_name = "thunderxt88",1037 .llvm_name = "thunderxt88",
1287 .description = "Cavium ThunderX processors",1038 .description = "Cavium ThunderX processors",
1288 .dependencies = featureSet(&[_]Feature{1039 .dependencies = sparseFeatureSet(&[_]Feature{
1289 .crc,1040 .crc,
1290 .crypto,1041 .crypto,
1291 .fp_armv8,1042 .fp_armv8,
...@@ -1296,46 +1047,34 @@ pub const all_features = blk: {...@@ -1296,46 +1047,34 @@ pub const all_features = blk: {
1296 }),1047 }),
1297 };1048 };
1298 result[@enumToInt(Feature.tlb_rmi)] = .{1049 result[@enumToInt(Feature.tlb_rmi)] = .{
1299 .index = @enumToInt(Feature.tlb_rmi),
1300 .name = @tagName(Feature.tlb_rmi),
1301 .llvm_name = "tlb-rmi",1050 .llvm_name = "tlb-rmi",
1302 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",1051 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1303 .dependencies = featureSet(&[_]Feature{}),1052 .dependencies = sparseFeatureSet(&[_]Feature{}),
1304 };1053 };
1305 result[@enumToInt(Feature.tpidr_el1)] = .{1054 result[@enumToInt(Feature.tpidr_el1)] = .{
1306 .index = @enumToInt(Feature.tpidr_el1),
1307 .name = @tagName(Feature.tpidr_el1),
1308 .llvm_name = "tpidr-el1",1055 .llvm_name = "tpidr-el1",
1309 .description = "Permit use of TPIDR_EL1 for the TLS base",1056 .description = "Permit use of TPIDR_EL1 for the TLS base",
1310 .dependencies = featureSet(&[_]Feature{}),1057 .dependencies = sparseFeatureSet(&[_]Feature{}),
1311 };1058 };
1312 result[@enumToInt(Feature.tpidr_el2)] = .{1059 result[@enumToInt(Feature.tpidr_el2)] = .{
1313 .index = @enumToInt(Feature.tpidr_el2),
1314 .name = @tagName(Feature.tpidr_el2),
1315 .llvm_name = "tpidr-el2",1060 .llvm_name = "tpidr-el2",
1316 .description = "Permit use of TPIDR_EL2 for the TLS base",1061 .description = "Permit use of TPIDR_EL2 for the TLS base",
1317 .dependencies = featureSet(&[_]Feature{}),1062 .dependencies = sparseFeatureSet(&[_]Feature{}),
1318 };1063 };
1319 result[@enumToInt(Feature.tpidr_el3)] = .{1064 result[@enumToInt(Feature.tpidr_el3)] = .{
1320 .index = @enumToInt(Feature.tpidr_el3),
1321 .name = @tagName(Feature.tpidr_el3),
1322 .llvm_name = "tpidr-el3",1065 .llvm_name = "tpidr-el3",
1323 .description = "Permit use of TPIDR_EL3 for the TLS base",1066 .description = "Permit use of TPIDR_EL3 for the TLS base",
1324 .dependencies = featureSet(&[_]Feature{}),1067 .dependencies = sparseFeatureSet(&[_]Feature{}),
1325 };1068 };
1326 result[@enumToInt(Feature.tracev8_4)] = .{1069 result[@enumToInt(Feature.tracev8_4)] = .{
1327 .index = @enumToInt(Feature.tracev8_4),
1328 .name = @tagName(Feature.tracev8_4),
1329 .llvm_name = "tracev8.4",1070 .llvm_name = "tracev8.4",
1330 .description = "Enable v8.4-A Trace extension",1071 .description = "Enable v8.4-A Trace extension",
1331 .dependencies = featureSet(&[_]Feature{}),1072 .dependencies = sparseFeatureSet(&[_]Feature{}),
1332 };1073 };
1333 result[@enumToInt(Feature.tsv110)] = .{1074 result[@enumToInt(Feature.tsv110)] = .{
1334 .index = @enumToInt(Feature.tsv110),
1335 .name = @tagName(Feature.tsv110),
1336 .llvm_name = "tsv110",1075 .llvm_name = "tsv110",
1337 .description = "HiSilicon TS-V110 processors",1076 .description = "HiSilicon TS-V110 processors",
1338 .dependencies = featureSet(&[_]Feature{1077 .dependencies = sparseFeatureSet(&[_]Feature{
1339 .crypto,1078 .crypto,
1340 .custom_cheap_as_move,1079 .custom_cheap_as_move,
1341 .dotprod,1080 .dotprod,
...@@ -1351,39 +1090,29 @@ pub const all_features = blk: {...@@ -1351,39 +1090,29 @@ pub const all_features = blk: {
1351 }),1090 }),
1352 };1091 };
1353 result[@enumToInt(Feature.uaops)] = .{1092 result[@enumToInt(Feature.uaops)] = .{
1354 .index = @enumToInt(Feature.uaops),
1355 .name = @tagName(Feature.uaops),
1356 .llvm_name = "uaops",1093 .llvm_name = "uaops",
1357 .description = "Enable v8.2 UAO PState",1094 .description = "Enable v8.2 UAO PState",
1358 .dependencies = featureSet(&[_]Feature{}),1095 .dependencies = sparseFeatureSet(&[_]Feature{}),
1359 };1096 };
1360 result[@enumToInt(Feature.use_aa)] = .{1097 result[@enumToInt(Feature.use_aa)] = .{
1361 .index = @enumToInt(Feature.use_aa),
1362 .name = @tagName(Feature.use_aa),
1363 .llvm_name = "use-aa",1098 .llvm_name = "use-aa",
1364 .description = "Use alias analysis during codegen",1099 .description = "Use alias analysis during codegen",
1365 .dependencies = featureSet(&[_]Feature{}),1100 .dependencies = sparseFeatureSet(&[_]Feature{}),
1366 };1101 };
1367 result[@enumToInt(Feature.use_postra_scheduler)] = .{1102 result[@enumToInt(Feature.use_postra_scheduler)] = .{
1368 .index = @enumToInt(Feature.use_postra_scheduler),
1369 .name = @tagName(Feature.use_postra_scheduler),
1370 .llvm_name = "use-postra-scheduler",1103 .llvm_name = "use-postra-scheduler",
1371 .description = "Schedule again after register allocation",1104 .description = "Schedule again after register allocation",
1372 .dependencies = featureSet(&[_]Feature{}),1105 .dependencies = sparseFeatureSet(&[_]Feature{}),
1373 };1106 };
1374 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{1107 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{
1375 .index = @enumToInt(Feature.use_reciprocal_square_root),
1376 .name = @tagName(Feature.use_reciprocal_square_root),
1377 .llvm_name = "use-reciprocal-square-root",1108 .llvm_name = "use-reciprocal-square-root",
1378 .description = "Use the reciprocal square root approximation",1109 .description = "Use the reciprocal square root approximation",
1379 .dependencies = featureSet(&[_]Feature{}),1110 .dependencies = sparseFeatureSet(&[_]Feature{}),
1380 };1111 };
1381 result[@enumToInt(Feature.v8_1a)] = .{1112 result[@enumToInt(Feature.v8_1a)] = .{
1382 .index = @enumToInt(Feature.v8_1a),
1383 .name = @tagName(Feature.v8_1a),
1384 .llvm_name = "v8.1a",1113 .llvm_name = "v8.1a",
1385 .description = "Support ARM v8.1a instructions",1114 .description = "Support ARM v8.1a instructions",
1386 .dependencies = featureSet(&[_]Feature{1115 .dependencies = sparseFeatureSet(&[_]Feature{
1387 .crc,1116 .crc,
1388 .lor,1117 .lor,
1389 .lse,1118 .lse,
...@@ -1393,11 +1122,9 @@ pub const all_features = blk: {...@@ -1393,11 +1122,9 @@ pub const all_features = blk: {
1393 }),1122 }),
1394 };1123 };
1395 result[@enumToInt(Feature.v8_2a)] = .{1124 result[@enumToInt(Feature.v8_2a)] = .{
1396 .index = @enumToInt(Feature.v8_2a),
1397 .name = @tagName(Feature.v8_2a),
1398 .llvm_name = "v8.2a",1125 .llvm_name = "v8.2a",
1399 .description = "Support ARM v8.2a instructions",1126 .description = "Support ARM v8.2a instructions",
1400 .dependencies = featureSet(&[_]Feature{1127 .dependencies = sparseFeatureSet(&[_]Feature{
1401 .ccpp,1128 .ccpp,
1402 .pan_rwv,1129 .pan_rwv,
1403 .ras,1130 .ras,
...@@ -1406,11 +1133,9 @@ pub const all_features = blk: {...@@ -1406,11 +1133,9 @@ pub const all_features = blk: {
1406 }),1133 }),
1407 };1134 };
1408 result[@enumToInt(Feature.v8_3a)] = .{1135 result[@enumToInt(Feature.v8_3a)] = .{
1409 .index = @enumToInt(Feature.v8_3a),
1410 .name = @tagName(Feature.v8_3a),
1411 .llvm_name = "v8.3a",1136 .llvm_name = "v8.3a",
1412 .description = "Support ARM v8.3a instructions",1137 .description = "Support ARM v8.3a instructions",
1413 .dependencies = featureSet(&[_]Feature{1138 .dependencies = sparseFeatureSet(&[_]Feature{
1414 .ccidx,1139 .ccidx,
1415 .complxnum,1140 .complxnum,
1416 .jsconv,1141 .jsconv,
...@@ -1420,11 +1145,9 @@ pub const all_features = blk: {...@@ -1420,11 +1145,9 @@ pub const all_features = blk: {
1420 }),1145 }),
1421 };1146 };
1422 result[@enumToInt(Feature.v8_4a)] = .{1147 result[@enumToInt(Feature.v8_4a)] = .{
1423 .index = @enumToInt(Feature.v8_4a),
1424 .name = @tagName(Feature.v8_4a),
1425 .llvm_name = "v8.4a",1148 .llvm_name = "v8.4a",
1426 .description = "Support ARM v8.4a instructions",1149 .description = "Support ARM v8.4a instructions",
1427 .dependencies = featureSet(&[_]Feature{1150 .dependencies = sparseFeatureSet(&[_]Feature{
1428 .am,1151 .am,
1429 .dit,1152 .dit,
1430 .dotprod,1153 .dotprod,
...@@ -1440,11 +1163,9 @@ pub const all_features = blk: {...@@ -1440,11 +1163,9 @@ pub const all_features = blk: {
1440 }),1163 }),
1441 };1164 };
1442 result[@enumToInt(Feature.v8_5a)] = .{1165 result[@enumToInt(Feature.v8_5a)] = .{
1443 .index = @enumToInt(Feature.v8_5a),
1444 .name = @tagName(Feature.v8_5a),
1445 .llvm_name = "v8.5a",1166 .llvm_name = "v8.5a",
1446 .description = "Support ARM v8.5a instructions",1167 .description = "Support ARM v8.5a instructions",
1447 .dependencies = featureSet(&[_]Feature{1168 .dependencies = sparseFeatureSet(&[_]Feature{
1448 .altnzcv,1169 .altnzcv,
1449 .bti,1170 .bti,
1450 .ccdp,1171 .ccdp,
...@@ -1457,50 +1178,44 @@ pub const all_features = blk: {...@@ -1457,50 +1178,44 @@ pub const all_features = blk: {
1457 }),1178 }),
1458 };1179 };
1459 result[@enumToInt(Feature.vh)] = .{1180 result[@enumToInt(Feature.vh)] = .{
1460 .index = @enumToInt(Feature.vh),
1461 .name = @tagName(Feature.vh),
1462 .llvm_name = "vh",1181 .llvm_name = "vh",
1463 .description = "Enables ARM v8.1 Virtual Host extension",1182 .description = "Enables ARM v8.1 Virtual Host extension",
1464 .dependencies = featureSet(&[_]Feature{}),1183 .dependencies = sparseFeatureSet(&[_]Feature{}),
1465 };1184 };
1466 result[@enumToInt(Feature.zcm)] = .{1185 result[@enumToInt(Feature.zcm)] = .{
1467 .index = @enumToInt(Feature.zcm),
1468 .name = @tagName(Feature.zcm),
1469 .llvm_name = "zcm",1186 .llvm_name = "zcm",
1470 .description = "Has zero-cycle register moves",1187 .description = "Has zero-cycle register moves",
1471 .dependencies = featureSet(&[_]Feature{}),1188 .dependencies = sparseFeatureSet(&[_]Feature{}),
1472 };1189 };
1473 result[@enumToInt(Feature.zcz)] = .{1190 result[@enumToInt(Feature.zcz)] = .{
1474 .index = @enumToInt(Feature.zcz),
1475 .name = @tagName(Feature.zcz),
1476 .llvm_name = "zcz",1191 .llvm_name = "zcz",
1477 .description = "Has zero-cycle zeroing instructions",1192 .description = "Has zero-cycle zeroing instructions",
1478 .dependencies = featureSet(&[_]Feature{1193 .dependencies = sparseFeatureSet(&[_]Feature{
1479 .zcz_fp,1194 .zcz_fp,
1480 .zcz_gp,1195 .zcz_gp,
1481 }),1196 }),
1482 };1197 };
1483 result[@enumToInt(Feature.zcz_fp)] = .{1198 result[@enumToInt(Feature.zcz_fp)] = .{
1484 .index = @enumToInt(Feature.zcz_fp),
1485 .name = @tagName(Feature.zcz_fp),
1486 .llvm_name = "zcz-fp",1199 .llvm_name = "zcz-fp",
1487 .description = "Has zero-cycle zeroing instructions for FP registers",1200 .description = "Has zero-cycle zeroing instructions for FP registers",
1488 .dependencies = featureSet(&[_]Feature{}),1201 .dependencies = sparseFeatureSet(&[_]Feature{}),
1489 };1202 };
1490 result[@enumToInt(Feature.zcz_fp_workaround)] = .{1203 result[@enumToInt(Feature.zcz_fp_workaround)] = .{
1491 .index = @enumToInt(Feature.zcz_fp_workaround),
1492 .name = @tagName(Feature.zcz_fp_workaround),
1493 .llvm_name = "zcz-fp-workaround",1204 .llvm_name = "zcz-fp-workaround",
1494 .description = "The zero-cycle floating-point zeroing instruction has a bug",1205 .description = "The zero-cycle floating-point zeroing instruction has a bug",
1495 .dependencies = featureSet(&[_]Feature{}),1206 .dependencies = sparseFeatureSet(&[_]Feature{}),
1496 };1207 };
1497 result[@enumToInt(Feature.zcz_gp)] = .{1208 result[@enumToInt(Feature.zcz_gp)] = .{
1498 .index = @enumToInt(Feature.zcz_gp),
1499 .name = @tagName(Feature.zcz_gp),
1500 .llvm_name = "zcz-gp",1209 .llvm_name = "zcz-gp",
1501 .description = "Has zero-cycle zeroing instructions for generic registers",1210 .description = "Has zero-cycle zeroing instructions for generic registers",
1502 .dependencies = featureSet(&[_]Feature{}),1211 .dependencies = sparseFeatureSet(&[_]Feature{}),
1503 };1212 };
1213 const ti = @typeInfo(Feature);
1214 for (result) |*elem, i| {
1215 elem.index = i;
1216 elem.name = ti.Enum.fields[i].name;
1217 elem.dependencies.initAsDependencies(i, &result);
1218 }
1504 break :blk result;1219 break :blk result;
1505};1220};
15061221
...@@ -1508,126 +1223,126 @@ pub const cpu = struct {...@@ -1508,126 +1223,126 @@ pub const cpu = struct {
1508 pub const apple_latest = Cpu{1223 pub const apple_latest = Cpu{
1509 .name = "apple_latest",1224 .name = "apple_latest",
1510 .llvm_name = "apple-latest",1225 .llvm_name = "apple-latest",
1511 .features = featureSet(&[_]Feature{1226 .features = featureSet(&all_features, &[_]Feature{
1512 .cyclone,1227 .cyclone,
1513 }),1228 }),
1514 };1229 };
1515 pub const cortex_a35 = Cpu{1230 pub const cortex_a35 = Cpu{
1516 .name = "cortex_a35",1231 .name = "cortex_a35",
1517 .llvm_name = "cortex-a35",1232 .llvm_name = "cortex-a35",
1518 .features = featureSet(&[_]Feature{1233 .features = featureSet(&all_features, &[_]Feature{
1519 .a35,1234 .a35,
1520 }),1235 }),
1521 };1236 };
1522 pub const cortex_a53 = Cpu{1237 pub const cortex_a53 = Cpu{
1523 .name = "cortex_a53",1238 .name = "cortex_a53",
1524 .llvm_name = "cortex-a53",1239 .llvm_name = "cortex-a53",
1525 .features = featureSet(&[_]Feature{1240 .features = featureSet(&all_features, &[_]Feature{
1526 .a53,1241 .a53,
1527 }),1242 }),
1528 };1243 };
1529 pub const cortex_a55 = Cpu{1244 pub const cortex_a55 = Cpu{
1530 .name = "cortex_a55",1245 .name = "cortex_a55",
1531 .llvm_name = "cortex-a55",1246 .llvm_name = "cortex-a55",
1532 .features = featureSet(&[_]Feature{1247 .features = featureSet(&all_features, &[_]Feature{
1533 .a55,1248 .a55,
1534 }),1249 }),
1535 };1250 };
1536 pub const cortex_a57 = Cpu{1251 pub const cortex_a57 = Cpu{
1537 .name = "cortex_a57",1252 .name = "cortex_a57",
1538 .llvm_name = "cortex-a57",1253 .llvm_name = "cortex-a57",
1539 .features = featureSet(&[_]Feature{1254 .features = featureSet(&all_features, &[_]Feature{
1540 .a57,1255 .a57,
1541 }),1256 }),
1542 };1257 };
1543 pub const cortex_a72 = Cpu{1258 pub const cortex_a72 = Cpu{
1544 .name = "cortex_a72",1259 .name = "cortex_a72",
1545 .llvm_name = "cortex-a72",1260 .llvm_name = "cortex-a72",
1546 .features = featureSet(&[_]Feature{1261 .features = featureSet(&all_features, &[_]Feature{
1547 .a72,1262 .a72,
1548 }),1263 }),
1549 };1264 };
1550 pub const cortex_a73 = Cpu{1265 pub const cortex_a73 = Cpu{
1551 .name = "cortex_a73",1266 .name = "cortex_a73",
1552 .llvm_name = "cortex-a73",1267 .llvm_name = "cortex-a73",
1553 .features = featureSet(&[_]Feature{1268 .features = featureSet(&all_features, &[_]Feature{
1554 .a73,1269 .a73,
1555 }),1270 }),
1556 };1271 };
1557 pub const cortex_a75 = Cpu{1272 pub const cortex_a75 = Cpu{
1558 .name = "cortex_a75",1273 .name = "cortex_a75",
1559 .llvm_name = "cortex-a75",1274 .llvm_name = "cortex-a75",
1560 .features = featureSet(&[_]Feature{1275 .features = featureSet(&all_features, &[_]Feature{
1561 .a75,1276 .a75,
1562 }),1277 }),
1563 };1278 };
1564 pub const cortex_a76 = Cpu{1279 pub const cortex_a76 = Cpu{
1565 .name = "cortex_a76",1280 .name = "cortex_a76",
1566 .llvm_name = "cortex-a76",1281 .llvm_name = "cortex-a76",
1567 .features = featureSet(&[_]Feature{1282 .features = featureSet(&all_features, &[_]Feature{
1568 .a76,1283 .a76,
1569 }),1284 }),
1570 };1285 };
1571 pub const cortex_a76ae = Cpu{1286 pub const cortex_a76ae = Cpu{
1572 .name = "cortex_a76ae",1287 .name = "cortex_a76ae",
1573 .llvm_name = "cortex-a76ae",1288 .llvm_name = "cortex-a76ae",
1574 .features = featureSet(&[_]Feature{1289 .features = featureSet(&all_features, &[_]Feature{
1575 .a76,1290 .a76,
1576 }),1291 }),
1577 };1292 };
1578 pub const cyclone = Cpu{1293 pub const cyclone = Cpu{
1579 .name = "cyclone",1294 .name = "cyclone",
1580 .llvm_name = "cyclone",1295 .llvm_name = "cyclone",
1581 .features = featureSet(&[_]Feature{1296 .features = featureSet(&all_features, &[_]Feature{
1582 .cyclone,1297 .cyclone,
1583 }),1298 }),
1584 };1299 };
1585 pub const exynos_m1 = Cpu{1300 pub const exynos_m1 = Cpu{
1586 .name = "exynos_m1",1301 .name = "exynos_m1",
1587 .llvm_name = "exynos-m1",1302 .llvm_name = "exynos-m1",
1588 .features = featureSet(&[_]Feature{1303 .features = featureSet(&all_features, &[_]Feature{
1589 .exynosm1,1304 .exynosm1,
1590 }),1305 }),
1591 };1306 };
1592 pub const exynos_m2 = Cpu{1307 pub const exynos_m2 = Cpu{
1593 .name = "exynos_m2",1308 .name = "exynos_m2",
1594 .llvm_name = "exynos-m2",1309 .llvm_name = "exynos-m2",
1595 .features = featureSet(&[_]Feature{1310 .features = featureSet(&all_features, &[_]Feature{
1596 .exynosm2,1311 .exynosm2,
1597 }),1312 }),
1598 };1313 };
1599 pub const exynos_m3 = Cpu{1314 pub const exynos_m3 = Cpu{
1600 .name = "exynos_m3",1315 .name = "exynos_m3",
1601 .llvm_name = "exynos-m3",1316 .llvm_name = "exynos-m3",
1602 .features = featureSet(&[_]Feature{1317 .features = featureSet(&all_features, &[_]Feature{
1603 .exynosm3,1318 .exynosm3,
1604 }),1319 }),
1605 };1320 };
1606 pub const exynos_m4 = Cpu{1321 pub const exynos_m4 = Cpu{
1607 .name = "exynos_m4",1322 .name = "exynos_m4",
1608 .llvm_name = "exynos-m4",1323 .llvm_name = "exynos-m4",
1609 .features = featureSet(&[_]Feature{1324 .features = featureSet(&all_features, &[_]Feature{
1610 .exynosm4,1325 .exynosm4,
1611 }),1326 }),
1612 };1327 };
1613 pub const exynos_m5 = Cpu{1328 pub const exynos_m5 = Cpu{
1614 .name = "exynos_m5",1329 .name = "exynos_m5",
1615 .llvm_name = "exynos-m5",1330 .llvm_name = "exynos-m5",
1616 .features = featureSet(&[_]Feature{1331 .features = featureSet(&all_features, &[_]Feature{
1617 .exynosm4,1332 .exynosm4,
1618 }),1333 }),
1619 };1334 };
1620 pub const falkor = Cpu{1335 pub const falkor = Cpu{
1621 .name = "falkor",1336 .name = "falkor",
1622 .llvm_name = "falkor",1337 .llvm_name = "falkor",
1623 .features = featureSet(&[_]Feature{1338 .features = featureSet(&all_features, &[_]Feature{
1624 .falkor,1339 .falkor,
1625 }),1340 }),
1626 };1341 };
1627 pub const generic = Cpu{1342 pub const generic = Cpu{
1628 .name = "generic",1343 .name = "generic",
1629 .llvm_name = "generic",1344 .llvm_name = "generic",
1630 .features = featureSet(&[_]Feature{1345 .features = featureSet(&all_features, &[_]Feature{
1631 .fp_armv8,1346 .fp_armv8,
1632 .fuse_aes,1347 .fuse_aes,
1633 .neon,1348 .neon,
...@@ -1638,56 +1353,56 @@ pub const cpu = struct {...@@ -1638,56 +1353,56 @@ pub const cpu = struct {
1638 pub const kryo = Cpu{1353 pub const kryo = Cpu{
1639 .name = "kryo",1354 .name = "kryo",
1640 .llvm_name = "kryo",1355 .llvm_name = "kryo",
1641 .features = featureSet(&[_]Feature{1356 .features = featureSet(&all_features, &[_]Feature{
1642 .kryo,1357 .kryo,
1643 }),1358 }),
1644 };1359 };
1645 pub const saphira = Cpu{1360 pub const saphira = Cpu{
1646 .name = "saphira",1361 .name = "saphira",
1647 .llvm_name = "saphira",1362 .llvm_name = "saphira",
1648 .features = featureSet(&[_]Feature{1363 .features = featureSet(&all_features, &[_]Feature{
1649 .saphira,1364 .saphira,
1650 }),1365 }),
1651 };1366 };
1652 pub const thunderx = Cpu{1367 pub const thunderx = Cpu{
1653 .name = "thunderx",1368 .name = "thunderx",
1654 .llvm_name = "thunderx",1369 .llvm_name = "thunderx",
1655 .features = featureSet(&[_]Feature{1370 .features = featureSet(&all_features, &[_]Feature{
1656 .thunderx,1371 .thunderx,
1657 }),1372 }),
1658 };1373 };
1659 pub const thunderx2t99 = Cpu{1374 pub const thunderx2t99 = Cpu{
1660 .name = "thunderx2t99",1375 .name = "thunderx2t99",
1661 .llvm_name = "thunderx2t99",1376 .llvm_name = "thunderx2t99",
1662 .features = featureSet(&[_]Feature{1377 .features = featureSet(&all_features, &[_]Feature{
1663 .thunderx2t99,1378 .thunderx2t99,
1664 }),1379 }),
1665 };1380 };
1666 pub const thunderxt81 = Cpu{1381 pub const thunderxt81 = Cpu{
1667 .name = "thunderxt81",1382 .name = "thunderxt81",
1668 .llvm_name = "thunderxt81",1383 .llvm_name = "thunderxt81",
1669 .features = featureSet(&[_]Feature{1384 .features = featureSet(&all_features, &[_]Feature{
1670 .thunderxt81,1385 .thunderxt81,
1671 }),1386 }),
1672 };1387 };
1673 pub const thunderxt83 = Cpu{1388 pub const thunderxt83 = Cpu{
1674 .name = "thunderxt83",1389 .name = "thunderxt83",
1675 .llvm_name = "thunderxt83",1390 .llvm_name = "thunderxt83",
1676 .features = featureSet(&[_]Feature{1391 .features = featureSet(&all_features, &[_]Feature{
1677 .thunderxt83,1392 .thunderxt83,
1678 }),1393 }),
1679 };1394 };
1680 pub const thunderxt88 = Cpu{1395 pub const thunderxt88 = Cpu{
1681 .name = "thunderxt88",1396 .name = "thunderxt88",
1682 .llvm_name = "thunderxt88",1397 .llvm_name = "thunderxt88",
1683 .features = featureSet(&[_]Feature{1398 .features = featureSet(&all_features, &[_]Feature{
1684 .thunderxt88,1399 .thunderxt88,
1685 }),1400 }),
1686 };1401 };
1687 pub const tsv110 = Cpu{1402 pub const tsv110 = Cpu{
1688 .name = "tsv110",1403 .name = "tsv110",
1689 .llvm_name = "tsv110",1404 .llvm_name = "tsv110",
1690 .features = featureSet(&[_]Feature{1405 .features = featureSet(&all_features, &[_]Feature{
1691 .tsv110,1406 .tsv110,
1692 }),1407 }),
1693 };1408 };
lib/std/target/amdgpu.zig+155-362
...@@ -114,281 +114,206 @@ pub const Feature = enum {...@@ -114,281 +114,206 @@ 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);
117 const len = @typeInfo(Feature).Enum.fields.len;118 const len = @typeInfo(Feature).Enum.fields.len;
118 std.debug.assert(len <= Cpu.Feature.Set.bit_count);119 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
119 var result: [len]Cpu.Feature = undefined;120 var result: [len]Cpu.Feature = undefined;
120 result[@enumToInt(Feature.@"16_bit_insts")] = .{121 result[@enumToInt(Feature.@"16_bit_insts")] = .{
121 .index = @enumToInt(Feature.@"16_bit_insts"),
122 .name = @tagName(Feature.@"16_bit_insts"),
123 .llvm_name = "16-bit-insts",122 .llvm_name = "16-bit-insts",
124 .description = "Has i16/f16 instructions",123 .description = "Has i16/f16 instructions",
125 .dependencies = featureSet(&[_]Feature{}),124 .dependencies = sparseFeatureSet(&[_]Feature{}),
126 };125 };
127 result[@enumToInt(Feature.DumpCode)] = .{126 result[@enumToInt(Feature.DumpCode)] = .{
128 .index = @enumToInt(Feature.DumpCode),
129 .name = @tagName(Feature.DumpCode),
130 .llvm_name = "DumpCode",127 .llvm_name = "DumpCode",
131 .description = "Dump MachineInstrs in the CodeEmitter",128 .description = "Dump MachineInstrs in the CodeEmitter",
132 .dependencies = featureSet(&[_]Feature{}),129 .dependencies = sparseFeatureSet(&[_]Feature{}),
133 };130 };
134 result[@enumToInt(Feature.add_no_carry_insts)] = .{131 result[@enumToInt(Feature.add_no_carry_insts)] = .{
135 .index = @enumToInt(Feature.add_no_carry_insts),
136 .name = @tagName(Feature.add_no_carry_insts),
137 .llvm_name = "add-no-carry-insts",132 .llvm_name = "add-no-carry-insts",
138 .description = "Have VALU add/sub instructions without carry out",133 .description = "Have VALU add/sub instructions without carry out",
139 .dependencies = featureSet(&[_]Feature{}),134 .dependencies = sparseFeatureSet(&[_]Feature{}),
140 };135 };
141 result[@enumToInt(Feature.aperture_regs)] = .{136 result[@enumToInt(Feature.aperture_regs)] = .{
142 .index = @enumToInt(Feature.aperture_regs),
143 .name = @tagName(Feature.aperture_regs),
144 .llvm_name = "aperture-regs",137 .llvm_name = "aperture-regs",
145 .description = "Has Memory Aperture Base and Size Registers",138 .description = "Has Memory Aperture Base and Size Registers",
146 .dependencies = featureSet(&[_]Feature{}),139 .dependencies = sparseFeatureSet(&[_]Feature{}),
147 };140 };
148 result[@enumToInt(Feature.atomic_fadd_insts)] = .{141 result[@enumToInt(Feature.atomic_fadd_insts)] = .{
149 .index = @enumToInt(Feature.atomic_fadd_insts),
150 .name = @tagName(Feature.atomic_fadd_insts),
151 .llvm_name = "atomic-fadd-insts",142 .llvm_name = "atomic-fadd-insts",
152 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",143 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
153 .dependencies = featureSet(&[_]Feature{}),144 .dependencies = sparseFeatureSet(&[_]Feature{}),
154 };145 };
155 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{146 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
156 .index = @enumToInt(Feature.auto_waitcnt_before_barrier),
157 .name = @tagName(Feature.auto_waitcnt_before_barrier),
158 .llvm_name = "auto-waitcnt-before-barrier",147 .llvm_name = "auto-waitcnt-before-barrier",
159 .description = "Hardware automatically inserts waitcnt before barrier",148 .description = "Hardware automatically inserts waitcnt before barrier",
160 .dependencies = featureSet(&[_]Feature{}),149 .dependencies = sparseFeatureSet(&[_]Feature{}),
161 };150 };
162 result[@enumToInt(Feature.ci_insts)] = .{151 result[@enumToInt(Feature.ci_insts)] = .{
163 .index = @enumToInt(Feature.ci_insts),
164 .name = @tagName(Feature.ci_insts),
165 .llvm_name = "ci-insts",152 .llvm_name = "ci-insts",
166 .description = "Additional instructions for CI+",153 .description = "Additional instructions for CI+",
167 .dependencies = featureSet(&[_]Feature{}),154 .dependencies = sparseFeatureSet(&[_]Feature{}),
168 };155 };
169 result[@enumToInt(Feature.code_object_v3)] = .{156 result[@enumToInt(Feature.code_object_v3)] = .{
170 .index = @enumToInt(Feature.code_object_v3),
171 .name = @tagName(Feature.code_object_v3),
172 .llvm_name = "code-object-v3",157 .llvm_name = "code-object-v3",
173 .description = "Generate code object version 3",158 .description = "Generate code object version 3",
174 .dependencies = featureSet(&[_]Feature{}),159 .dependencies = sparseFeatureSet(&[_]Feature{}),
175 };160 };
176 result[@enumToInt(Feature.cumode)] = .{161 result[@enumToInt(Feature.cumode)] = .{
177 .index = @enumToInt(Feature.cumode),
178 .name = @tagName(Feature.cumode),
179 .llvm_name = "cumode",162 .llvm_name = "cumode",
180 .description = "Enable CU wavefront execution mode",163 .description = "Enable CU wavefront execution mode",
181 .dependencies = featureSet(&[_]Feature{}),164 .dependencies = sparseFeatureSet(&[_]Feature{}),
182 };165 };
183 result[@enumToInt(Feature.dl_insts)] = .{166 result[@enumToInt(Feature.dl_insts)] = .{
184 .index = @enumToInt(Feature.dl_insts),
185 .name = @tagName(Feature.dl_insts),
186 .llvm_name = "dl-insts",167 .llvm_name = "dl-insts",
187 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",168 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
188 .dependencies = featureSet(&[_]Feature{}),169 .dependencies = sparseFeatureSet(&[_]Feature{}),
189 };170 };
190 result[@enumToInt(Feature.dot1_insts)] = .{171 result[@enumToInt(Feature.dot1_insts)] = .{
191 .index = @enumToInt(Feature.dot1_insts),
192 .name = @tagName(Feature.dot1_insts),
193 .llvm_name = "dot1-insts",172 .llvm_name = "dot1-insts",
194 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",173 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
195 .dependencies = featureSet(&[_]Feature{}),174 .dependencies = sparseFeatureSet(&[_]Feature{}),
196 };175 };
197 result[@enumToInt(Feature.dot2_insts)] = .{176 result[@enumToInt(Feature.dot2_insts)] = .{
198 .index = @enumToInt(Feature.dot2_insts),
199 .name = @tagName(Feature.dot2_insts),
200 .llvm_name = "dot2-insts",177 .llvm_name = "dot2-insts",
201 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",178 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",
202 .dependencies = featureSet(&[_]Feature{}),179 .dependencies = sparseFeatureSet(&[_]Feature{}),
203 };180 };
204 result[@enumToInt(Feature.dot3_insts)] = .{181 result[@enumToInt(Feature.dot3_insts)] = .{
205 .index = @enumToInt(Feature.dot3_insts),
206 .name = @tagName(Feature.dot3_insts),
207 .llvm_name = "dot3-insts",182 .llvm_name = "dot3-insts",
208 .description = "Has v_dot8c_i32_i4 instruction",183 .description = "Has v_dot8c_i32_i4 instruction",
209 .dependencies = featureSet(&[_]Feature{}),184 .dependencies = sparseFeatureSet(&[_]Feature{}),
210 };185 };
211 result[@enumToInt(Feature.dot4_insts)] = .{186 result[@enumToInt(Feature.dot4_insts)] = .{
212 .index = @enumToInt(Feature.dot4_insts),
213 .name = @tagName(Feature.dot4_insts),
214 .llvm_name = "dot4-insts",187 .llvm_name = "dot4-insts",
215 .description = "Has v_dot2c_i32_i16 instruction",188 .description = "Has v_dot2c_i32_i16 instruction",
216 .dependencies = featureSet(&[_]Feature{}),189 .dependencies = sparseFeatureSet(&[_]Feature{}),
217 };190 };
218 result[@enumToInt(Feature.dot5_insts)] = .{191 result[@enumToInt(Feature.dot5_insts)] = .{
219 .index = @enumToInt(Feature.dot5_insts),
220 .name = @tagName(Feature.dot5_insts),
221 .llvm_name = "dot5-insts",192 .llvm_name = "dot5-insts",
222 .description = "Has v_dot2c_f32_f16 instruction",193 .description = "Has v_dot2c_f32_f16 instruction",
223 .dependencies = featureSet(&[_]Feature{}),194 .dependencies = sparseFeatureSet(&[_]Feature{}),
224 };195 };
225 result[@enumToInt(Feature.dot6_insts)] = .{196 result[@enumToInt(Feature.dot6_insts)] = .{
226 .index = @enumToInt(Feature.dot6_insts),
227 .name = @tagName(Feature.dot6_insts),
228 .llvm_name = "dot6-insts",197 .llvm_name = "dot6-insts",
229 .description = "Has v_dot4c_i32_i8 instruction",198 .description = "Has v_dot4c_i32_i8 instruction",
230 .dependencies = featureSet(&[_]Feature{}),199 .dependencies = sparseFeatureSet(&[_]Feature{}),
231 };200 };
232 result[@enumToInt(Feature.dpp)] = .{201 result[@enumToInt(Feature.dpp)] = .{
233 .index = @enumToInt(Feature.dpp),
234 .name = @tagName(Feature.dpp),
235 .llvm_name = "dpp",202 .llvm_name = "dpp",
236 .description = "Support DPP (Data Parallel Primitives) extension",203 .description = "Support DPP (Data Parallel Primitives) extension",
237 .dependencies = featureSet(&[_]Feature{}),204 .dependencies = sparseFeatureSet(&[_]Feature{}),
238 };205 };
239 result[@enumToInt(Feature.dpp8)] = .{206 result[@enumToInt(Feature.dpp8)] = .{
240 .index = @enumToInt(Feature.dpp8),
241 .name = @tagName(Feature.dpp8),
242 .llvm_name = "dpp8",207 .llvm_name = "dpp8",
243 .description = "Support DPP8 (Data Parallel Primitives) extension",208 .description = "Support DPP8 (Data Parallel Primitives) extension",
244 .dependencies = featureSet(&[_]Feature{}),209 .dependencies = sparseFeatureSet(&[_]Feature{}),
245 };210 };
246 result[@enumToInt(Feature.dumpcode)] = .{211 result[@enumToInt(Feature.dumpcode)] = .{
247 .index = @enumToInt(Feature.dumpcode),
248 .name = @tagName(Feature.dumpcode),
249 .llvm_name = "dumpcode",212 .llvm_name = "dumpcode",
250 .description = "Dump MachineInstrs in the CodeEmitter",213 .description = "Dump MachineInstrs in the CodeEmitter",
251 .dependencies = featureSet(&[_]Feature{}),214 .dependencies = sparseFeatureSet(&[_]Feature{}),
252 };215 };
253 result[@enumToInt(Feature.enable_ds128)] = .{216 result[@enumToInt(Feature.enable_ds128)] = .{
254 .index = @enumToInt(Feature.enable_ds128),
255 .name = @tagName(Feature.enable_ds128),
256 .llvm_name = "enable-ds128",217 .llvm_name = "enable-ds128",
257 .description = "Use ds_read|write_b128",218 .description = "Use ds_read|write_b128",
258 .dependencies = featureSet(&[_]Feature{}),219 .dependencies = sparseFeatureSet(&[_]Feature{}),
259 };220 };
260 result[@enumToInt(Feature.enable_prt_strict_null)] = .{221 result[@enumToInt(Feature.enable_prt_strict_null)] = .{
261 .index = @enumToInt(Feature.enable_prt_strict_null),
262 .name = @tagName(Feature.enable_prt_strict_null),
263 .llvm_name = "enable-prt-strict-null",222 .llvm_name = "enable-prt-strict-null",
264 .description = "Enable zeroing of result registers for sparse texture fetches",223 .description = "Enable zeroing of result registers for sparse texture fetches",
265 .dependencies = featureSet(&[_]Feature{}),224 .dependencies = sparseFeatureSet(&[_]Feature{}),
266 };225 };
267 result[@enumToInt(Feature.fast_fmaf)] = .{226 result[@enumToInt(Feature.fast_fmaf)] = .{
268 .index = @enumToInt(Feature.fast_fmaf),
269 .name = @tagName(Feature.fast_fmaf),
270 .llvm_name = "fast-fmaf",227 .llvm_name = "fast-fmaf",
271 .description = "Assuming f32 fma is at least as fast as mul + add",228 .description = "Assuming f32 fma is at least as fast as mul + add",
272 .dependencies = featureSet(&[_]Feature{}),229 .dependencies = sparseFeatureSet(&[_]Feature{}),
273 };230 };
274 result[@enumToInt(Feature.flat_address_space)] = .{231 result[@enumToInt(Feature.flat_address_space)] = .{
275 .index = @enumToInt(Feature.flat_address_space),
276 .name = @tagName(Feature.flat_address_space),
277 .llvm_name = "flat-address-space",232 .llvm_name = "flat-address-space",
278 .description = "Support flat address space",233 .description = "Support flat address space",
279 .dependencies = featureSet(&[_]Feature{}),234 .dependencies = sparseFeatureSet(&[_]Feature{}),
280 };235 };
281 result[@enumToInt(Feature.flat_for_global)] = .{236 result[@enumToInt(Feature.flat_for_global)] = .{
282 .index = @enumToInt(Feature.flat_for_global),
283 .name = @tagName(Feature.flat_for_global),
284 .llvm_name = "flat-for-global",237 .llvm_name = "flat-for-global",
285 .description = "Force to generate flat instruction for global",238 .description = "Force to generate flat instruction for global",
286 .dependencies = featureSet(&[_]Feature{}),239 .dependencies = sparseFeatureSet(&[_]Feature{}),
287 };240 };
288 result[@enumToInt(Feature.flat_global_insts)] = .{241 result[@enumToInt(Feature.flat_global_insts)] = .{
289 .index = @enumToInt(Feature.flat_global_insts),
290 .name = @tagName(Feature.flat_global_insts),
291 .llvm_name = "flat-global-insts",242 .llvm_name = "flat-global-insts",
292 .description = "Have global_* flat memory instructions",243 .description = "Have global_* flat memory instructions",
293 .dependencies = featureSet(&[_]Feature{}),244 .dependencies = sparseFeatureSet(&[_]Feature{}),
294 };245 };
295 result[@enumToInt(Feature.flat_inst_offsets)] = .{246 result[@enumToInt(Feature.flat_inst_offsets)] = .{
296 .index = @enumToInt(Feature.flat_inst_offsets),
297 .name = @tagName(Feature.flat_inst_offsets),
298 .llvm_name = "flat-inst-offsets",247 .llvm_name = "flat-inst-offsets",
299 .description = "Flat instructions have immediate offset addressing mode",248 .description = "Flat instructions have immediate offset addressing mode",
300 .dependencies = featureSet(&[_]Feature{}),249 .dependencies = sparseFeatureSet(&[_]Feature{}),
301 };250 };
302 result[@enumToInt(Feature.flat_scratch_insts)] = .{251 result[@enumToInt(Feature.flat_scratch_insts)] = .{
303 .index = @enumToInt(Feature.flat_scratch_insts),
304 .name = @tagName(Feature.flat_scratch_insts),
305 .llvm_name = "flat-scratch-insts",252 .llvm_name = "flat-scratch-insts",
306 .description = "Have scratch_* flat memory instructions",253 .description = "Have scratch_* flat memory instructions",
307 .dependencies = featureSet(&[_]Feature{}),254 .dependencies = sparseFeatureSet(&[_]Feature{}),
308 };255 };
309 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{256 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
310 .index = @enumToInt(Feature.flat_segment_offset_bug),
311 .name = @tagName(Feature.flat_segment_offset_bug),
312 .llvm_name = "flat-segment-offset-bug",257 .llvm_name = "flat-segment-offset-bug",
313 .description = "GFX10 bug, inst_offset ignored in flat segment",258 .description = "GFX10 bug, inst_offset ignored in flat segment",
314 .dependencies = featureSet(&[_]Feature{}),259 .dependencies = sparseFeatureSet(&[_]Feature{}),
315 };260 };
316 result[@enumToInt(Feature.fma_mix_insts)] = .{261 result[@enumToInt(Feature.fma_mix_insts)] = .{
317 .index = @enumToInt(Feature.fma_mix_insts),
318 .name = @tagName(Feature.fma_mix_insts),
319 .llvm_name = "fma-mix-insts",262 .llvm_name = "fma-mix-insts",
320 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",263 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
321 .dependencies = featureSet(&[_]Feature{}),264 .dependencies = sparseFeatureSet(&[_]Feature{}),
322 };265 };
323 result[@enumToInt(Feature.fmaf)] = .{266 result[@enumToInt(Feature.fmaf)] = .{
324 .index = @enumToInt(Feature.fmaf),
325 .name = @tagName(Feature.fmaf),
326 .llvm_name = "fmaf",267 .llvm_name = "fmaf",
327 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",268 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
328 .dependencies = featureSet(&[_]Feature{}),269 .dependencies = sparseFeatureSet(&[_]Feature{}),
329 };270 };
330 result[@enumToInt(Feature.fp_exceptions)] = .{271 result[@enumToInt(Feature.fp_exceptions)] = .{
331 .index = @enumToInt(Feature.fp_exceptions),
332 .name = @tagName(Feature.fp_exceptions),
333 .llvm_name = "fp-exceptions",272 .llvm_name = "fp-exceptions",
334 .description = "Enable floating point exceptions",273 .description = "Enable floating point exceptions",
335 .dependencies = featureSet(&[_]Feature{}),274 .dependencies = sparseFeatureSet(&[_]Feature{}),
336 };275 };
337 result[@enumToInt(Feature.fp16_denormals)] = .{276 result[@enumToInt(Feature.fp16_denormals)] = .{
338 .index = @enumToInt(Feature.fp16_denormals),
339 .name = @tagName(Feature.fp16_denormals),
340 .llvm_name = "fp16-denormals",277 .llvm_name = "fp16-denormals",
341 .description = "Enable half precision denormal handling",278 .description = "Enable half precision denormal handling",
342 .dependencies = featureSet(&[_]Feature{279 .dependencies = sparseFeatureSet(&[_]Feature{
343 .fp64_fp16_denormals,280 .fp64_fp16_denormals,
344 }),281 }),
345 };282 };
346 result[@enumToInt(Feature.fp32_denormals)] = .{283 result[@enumToInt(Feature.fp32_denormals)] = .{
347 .index = @enumToInt(Feature.fp32_denormals),
348 .name = @tagName(Feature.fp32_denormals),
349 .llvm_name = "fp32-denormals",284 .llvm_name = "fp32-denormals",
350 .description = "Enable single precision denormal handling",285 .description = "Enable single precision denormal handling",
351 .dependencies = featureSet(&[_]Feature{}),286 .dependencies = sparseFeatureSet(&[_]Feature{}),
352 };287 };
353 result[@enumToInt(Feature.fp64)] = .{288 result[@enumToInt(Feature.fp64)] = .{
354 .index = @enumToInt(Feature.fp64),
355 .name = @tagName(Feature.fp64),
356 .llvm_name = "fp64",289 .llvm_name = "fp64",
357 .description = "Enable double precision operations",290 .description = "Enable double precision operations",
358 .dependencies = featureSet(&[_]Feature{}),291 .dependencies = sparseFeatureSet(&[_]Feature{}),
359 };292 };
360 result[@enumToInt(Feature.fp64_denormals)] = .{293 result[@enumToInt(Feature.fp64_denormals)] = .{
361 .index = @enumToInt(Feature.fp64_denormals),
362 .name = @tagName(Feature.fp64_denormals),
363 .llvm_name = "fp64-denormals",294 .llvm_name = "fp64-denormals",
364 .description = "Enable double and half precision denormal handling",295 .description = "Enable double and half precision denormal handling",
365 .dependencies = featureSet(&[_]Feature{296 .dependencies = sparseFeatureSet(&[_]Feature{
366 .fp64,297 .fp64,
367 .fp64_fp16_denormals,298 .fp64_fp16_denormals,
368 }),299 }),
369 };300 };
370 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{301 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{
371 .index = @enumToInt(Feature.fp64_fp16_denormals),
372 .name = @tagName(Feature.fp64_fp16_denormals),
373 .llvm_name = "fp64-fp16-denormals",302 .llvm_name = "fp64-fp16-denormals",
374 .description = "Enable double and half precision denormal handling",303 .description = "Enable double and half precision denormal handling",
375 .dependencies = featureSet(&[_]Feature{304 .dependencies = sparseFeatureSet(&[_]Feature{
376 .fp64,305 .fp64,
377 }),306 }),
378 };307 };
379 result[@enumToInt(Feature.gcn3_encoding)] = .{308 result[@enumToInt(Feature.gcn3_encoding)] = .{
380 .index = @enumToInt(Feature.gcn3_encoding),
381 .name = @tagName(Feature.gcn3_encoding),
382 .llvm_name = "gcn3-encoding",309 .llvm_name = "gcn3-encoding",
383 .description = "Encoding format for VI",310 .description = "Encoding format for VI",
384 .dependencies = featureSet(&[_]Feature{}),311 .dependencies = sparseFeatureSet(&[_]Feature{}),
385 };312 };
386 result[@enumToInt(Feature.gfx10)] = .{313 result[@enumToInt(Feature.gfx10)] = .{
387 .index = @enumToInt(Feature.gfx10),
388 .name = @tagName(Feature.gfx10),
389 .llvm_name = "gfx10",314 .llvm_name = "gfx10",
390 .description = "GFX10 GPU generation",315 .description = "GFX10 GPU generation",
391 .dependencies = featureSet(&[_]Feature{316 .dependencies = sparseFeatureSet(&[_]Feature{
392 .@"16_bit_insts",317 .@"16_bit_insts",
393 .add_no_carry_insts,318 .add_no_carry_insts,
394 .aperture_regs,319 .aperture_regs,
...@@ -426,32 +351,24 @@ pub const all_features = blk: {...@@ -426,32 +351,24 @@ pub const all_features = blk: {
426 }),351 }),
427 };352 };
428 result[@enumToInt(Feature.gfx10_insts)] = .{353 result[@enumToInt(Feature.gfx10_insts)] = .{
429 .index = @enumToInt(Feature.gfx10_insts),
430 .name = @tagName(Feature.gfx10_insts),
431 .llvm_name = "gfx10-insts",354 .llvm_name = "gfx10-insts",
432 .description = "Additional instructions for GFX10+",355 .description = "Additional instructions for GFX10+",
433 .dependencies = featureSet(&[_]Feature{}),356 .dependencies = sparseFeatureSet(&[_]Feature{}),
434 };357 };
435 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{358 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
436 .index = @enumToInt(Feature.gfx7_gfx8_gfx9_insts),
437 .name = @tagName(Feature.gfx7_gfx8_gfx9_insts),
438 .llvm_name = "gfx7-gfx8-gfx9-insts",359 .llvm_name = "gfx7-gfx8-gfx9-insts",
439 .description = "Instructions shared in GFX7, GFX8, GFX9",360 .description = "Instructions shared in GFX7, GFX8, GFX9",
440 .dependencies = featureSet(&[_]Feature{}),361 .dependencies = sparseFeatureSet(&[_]Feature{}),
441 };362 };
442 result[@enumToInt(Feature.gfx8_insts)] = .{363 result[@enumToInt(Feature.gfx8_insts)] = .{
443 .index = @enumToInt(Feature.gfx8_insts),
444 .name = @tagName(Feature.gfx8_insts),
445 .llvm_name = "gfx8-insts",364 .llvm_name = "gfx8-insts",
446 .description = "Additional instructions for GFX8+",365 .description = "Additional instructions for GFX8+",
447 .dependencies = featureSet(&[_]Feature{}),366 .dependencies = sparseFeatureSet(&[_]Feature{}),
448 };367 };
449 result[@enumToInt(Feature.gfx9)] = .{368 result[@enumToInt(Feature.gfx9)] = .{
450 .index = @enumToInt(Feature.gfx9),
451 .name = @tagName(Feature.gfx9),
452 .llvm_name = "gfx9",369 .llvm_name = "gfx9",
453 .description = "GFX9 GPU generation",370 .description = "GFX9 GPU generation",
454 .dependencies = featureSet(&[_]Feature{371 .dependencies = sparseFeatureSet(&[_]Feature{
455 .@"16_bit_insts",372 .@"16_bit_insts",
456 .add_no_carry_insts,373 .add_no_carry_insts,
457 .aperture_regs,374 .aperture_regs,
...@@ -485,298 +402,214 @@ pub const all_features = blk: {...@@ -485,298 +402,214 @@ pub const all_features = blk: {
485 }),402 }),
486 };403 };
487 result[@enumToInt(Feature.gfx9_insts)] = .{404 result[@enumToInt(Feature.gfx9_insts)] = .{
488 .index = @enumToInt(Feature.gfx9_insts),
489 .name = @tagName(Feature.gfx9_insts),
490 .llvm_name = "gfx9-insts",405 .llvm_name = "gfx9-insts",
491 .description = "Additional instructions for GFX9+",406 .description = "Additional instructions for GFX9+",
492 .dependencies = featureSet(&[_]Feature{}),407 .dependencies = sparseFeatureSet(&[_]Feature{}),
493 };408 };
494 result[@enumToInt(Feature.half_rate_64_ops)] = .{409 result[@enumToInt(Feature.half_rate_64_ops)] = .{
495 .index = @enumToInt(Feature.half_rate_64_ops),
496 .name = @tagName(Feature.half_rate_64_ops),
497 .llvm_name = "half-rate-64-ops",410 .llvm_name = "half-rate-64-ops",
498 .description = "Most fp64 instructions are half rate instead of quarter",411 .description = "Most fp64 instructions are half rate instead of quarter",
499 .dependencies = featureSet(&[_]Feature{}),412 .dependencies = sparseFeatureSet(&[_]Feature{}),
500 };413 };
501 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{414 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{
502 .index = @enumToInt(Feature.inst_fwd_prefetch_bug),
503 .name = @tagName(Feature.inst_fwd_prefetch_bug),
504 .llvm_name = "inst-fwd-prefetch-bug",415 .llvm_name = "inst-fwd-prefetch-bug",
505 .description = "S_INST_PREFETCH instruction causes shader to hang",416 .description = "S_INST_PREFETCH instruction causes shader to hang",
506 .dependencies = featureSet(&[_]Feature{}),417 .dependencies = sparseFeatureSet(&[_]Feature{}),
507 };418 };
508 result[@enumToInt(Feature.int_clamp_insts)] = .{419 result[@enumToInt(Feature.int_clamp_insts)] = .{
509 .index = @enumToInt(Feature.int_clamp_insts),
510 .name = @tagName(Feature.int_clamp_insts),
511 .llvm_name = "int-clamp-insts",420 .llvm_name = "int-clamp-insts",
512 .description = "Support clamp for integer destination",421 .description = "Support clamp for integer destination",
513 .dependencies = featureSet(&[_]Feature{}),422 .dependencies = sparseFeatureSet(&[_]Feature{}),
514 };423 };
515 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{424 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{
516 .index = @enumToInt(Feature.inv_2pi_inline_imm),
517 .name = @tagName(Feature.inv_2pi_inline_imm),
518 .llvm_name = "inv-2pi-inline-imm",425 .llvm_name = "inv-2pi-inline-imm",
519 .description = "Has 1 / (2 * pi) as inline immediate",426 .description = "Has 1 / (2 * pi) as inline immediate",
520 .dependencies = featureSet(&[_]Feature{}),427 .dependencies = sparseFeatureSet(&[_]Feature{}),
521 };428 };
522 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{429 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{
523 .index = @enumToInt(Feature.lds_branch_vmem_war_hazard),
524 .name = @tagName(Feature.lds_branch_vmem_war_hazard),
525 .llvm_name = "lds-branch-vmem-war-hazard",430 .llvm_name = "lds-branch-vmem-war-hazard",
526 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",431 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
527 .dependencies = featureSet(&[_]Feature{}),432 .dependencies = sparseFeatureSet(&[_]Feature{}),
528 };433 };
529 result[@enumToInt(Feature.lds_misaligned_bug)] = .{434 result[@enumToInt(Feature.lds_misaligned_bug)] = .{
530 .index = @enumToInt(Feature.lds_misaligned_bug),
531 .name = @tagName(Feature.lds_misaligned_bug),
532 .llvm_name = "lds-misaligned-bug",435 .llvm_name = "lds-misaligned-bug",
533 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",436 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
534 .dependencies = featureSet(&[_]Feature{}),437 .dependencies = sparseFeatureSet(&[_]Feature{}),
535 };438 };
536 result[@enumToInt(Feature.ldsbankcount16)] = .{439 result[@enumToInt(Feature.ldsbankcount16)] = .{
537 .index = @enumToInt(Feature.ldsbankcount16),
538 .name = @tagName(Feature.ldsbankcount16),
539 .llvm_name = "ldsbankcount16",440 .llvm_name = "ldsbankcount16",
540 .description = "The number of LDS banks per compute unit.",441 .description = "The number of LDS banks per compute unit.",
541 .dependencies = featureSet(&[_]Feature{}),442 .dependencies = sparseFeatureSet(&[_]Feature{}),
542 };443 };
543 result[@enumToInt(Feature.ldsbankcount32)] = .{444 result[@enumToInt(Feature.ldsbankcount32)] = .{
544 .index = @enumToInt(Feature.ldsbankcount32),
545 .name = @tagName(Feature.ldsbankcount32),
546 .llvm_name = "ldsbankcount32",445 .llvm_name = "ldsbankcount32",
547 .description = "The number of LDS banks per compute unit.",446 .description = "The number of LDS banks per compute unit.",
548 .dependencies = featureSet(&[_]Feature{}),447 .dependencies = sparseFeatureSet(&[_]Feature{}),
549 };448 };
550 result[@enumToInt(Feature.load_store_opt)] = .{449 result[@enumToInt(Feature.load_store_opt)] = .{
551 .index = @enumToInt(Feature.load_store_opt),
552 .name = @tagName(Feature.load_store_opt),
553 .llvm_name = "load-store-opt",450 .llvm_name = "load-store-opt",
554 .description = "Enable SI load/store optimizer pass",451 .description = "Enable SI load/store optimizer pass",
555 .dependencies = featureSet(&[_]Feature{}),452 .dependencies = sparseFeatureSet(&[_]Feature{}),
556 };453 };
557 result[@enumToInt(Feature.localmemorysize0)] = .{454 result[@enumToInt(Feature.localmemorysize0)] = .{
558 .index = @enumToInt(Feature.localmemorysize0),
559 .name = @tagName(Feature.localmemorysize0),
560 .llvm_name = "localmemorysize0",455 .llvm_name = "localmemorysize0",
561 .description = "The size of local memory in bytes",456 .description = "The size of local memory in bytes",
562 .dependencies = featureSet(&[_]Feature{}),457 .dependencies = sparseFeatureSet(&[_]Feature{}),
563 };458 };
564 result[@enumToInt(Feature.localmemorysize32768)] = .{459 result[@enumToInt(Feature.localmemorysize32768)] = .{
565 .index = @enumToInt(Feature.localmemorysize32768),
566 .name = @tagName(Feature.localmemorysize32768),
567 .llvm_name = "localmemorysize32768",460 .llvm_name = "localmemorysize32768",
568 .description = "The size of local memory in bytes",461 .description = "The size of local memory in bytes",
569 .dependencies = featureSet(&[_]Feature{}),462 .dependencies = sparseFeatureSet(&[_]Feature{}),
570 };463 };
571 result[@enumToInt(Feature.localmemorysize65536)] = .{464 result[@enumToInt(Feature.localmemorysize65536)] = .{
572 .index = @enumToInt(Feature.localmemorysize65536),
573 .name = @tagName(Feature.localmemorysize65536),
574 .llvm_name = "localmemorysize65536",465 .llvm_name = "localmemorysize65536",
575 .description = "The size of local memory in bytes",466 .description = "The size of local memory in bytes",
576 .dependencies = featureSet(&[_]Feature{}),467 .dependencies = sparseFeatureSet(&[_]Feature{}),
577 };468 };
578 result[@enumToInt(Feature.mad_mix_insts)] = .{469 result[@enumToInt(Feature.mad_mix_insts)] = .{
579 .index = @enumToInt(Feature.mad_mix_insts),
580 .name = @tagName(Feature.mad_mix_insts),
581 .llvm_name = "mad-mix-insts",470 .llvm_name = "mad-mix-insts",
582 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",471 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
583 .dependencies = featureSet(&[_]Feature{}),472 .dependencies = sparseFeatureSet(&[_]Feature{}),
584 };473 };
585 result[@enumToInt(Feature.mai_insts)] = .{474 result[@enumToInt(Feature.mai_insts)] = .{
586 .index = @enumToInt(Feature.mai_insts),
587 .name = @tagName(Feature.mai_insts),
588 .llvm_name = "mai-insts",475 .llvm_name = "mai-insts",
589 .description = "Has mAI instructions",476 .description = "Has mAI instructions",
590 .dependencies = featureSet(&[_]Feature{}),477 .dependencies = sparseFeatureSet(&[_]Feature{}),
591 };478 };
592 result[@enumToInt(Feature.max_private_element_size_16)] = .{479 result[@enumToInt(Feature.max_private_element_size_16)] = .{
593 .index = @enumToInt(Feature.max_private_element_size_16),
594 .name = @tagName(Feature.max_private_element_size_16),
595 .llvm_name = "max-private-element-size-16",480 .llvm_name = "max-private-element-size-16",
596 .description = "Maximum private access size may be 16",481 .description = "Maximum private access size may be 16",
597 .dependencies = featureSet(&[_]Feature{}),482 .dependencies = sparseFeatureSet(&[_]Feature{}),
598 };483 };
599 result[@enumToInt(Feature.max_private_element_size_4)] = .{484 result[@enumToInt(Feature.max_private_element_size_4)] = .{
600 .index = @enumToInt(Feature.max_private_element_size_4),
601 .name = @tagName(Feature.max_private_element_size_4),
602 .llvm_name = "max-private-element-size-4",485 .llvm_name = "max-private-element-size-4",
603 .description = "Maximum private access size may be 4",486 .description = "Maximum private access size may be 4",
604 .dependencies = featureSet(&[_]Feature{}),487 .dependencies = sparseFeatureSet(&[_]Feature{}),
605 };488 };
606 result[@enumToInt(Feature.max_private_element_size_8)] = .{489 result[@enumToInt(Feature.max_private_element_size_8)] = .{
607 .index = @enumToInt(Feature.max_private_element_size_8),
608 .name = @tagName(Feature.max_private_element_size_8),
609 .llvm_name = "max-private-element-size-8",490 .llvm_name = "max-private-element-size-8",
610 .description = "Maximum private access size may be 8",491 .description = "Maximum private access size may be 8",
611 .dependencies = featureSet(&[_]Feature{}),492 .dependencies = sparseFeatureSet(&[_]Feature{}),
612 };493 };
613 result[@enumToInt(Feature.mimg_r128)] = .{494 result[@enumToInt(Feature.mimg_r128)] = .{
614 .index = @enumToInt(Feature.mimg_r128),
615 .name = @tagName(Feature.mimg_r128),
616 .llvm_name = "mimg-r128",495 .llvm_name = "mimg-r128",
617 .description = "Support 128-bit texture resources",496 .description = "Support 128-bit texture resources",
618 .dependencies = featureSet(&[_]Feature{}),497 .dependencies = sparseFeatureSet(&[_]Feature{}),
619 };498 };
620 result[@enumToInt(Feature.movrel)] = .{499 result[@enumToInt(Feature.movrel)] = .{
621 .index = @enumToInt(Feature.movrel),
622 .name = @tagName(Feature.movrel),
623 .llvm_name = "movrel",500 .llvm_name = "movrel",
624 .description = "Has v_movrel*_b32 instructions",501 .description = "Has v_movrel*_b32 instructions",
625 .dependencies = featureSet(&[_]Feature{}),502 .dependencies = sparseFeatureSet(&[_]Feature{}),
626 };503 };
627 result[@enumToInt(Feature.no_data_dep_hazard)] = .{504 result[@enumToInt(Feature.no_data_dep_hazard)] = .{
628 .index = @enumToInt(Feature.no_data_dep_hazard),
629 .name = @tagName(Feature.no_data_dep_hazard),
630 .llvm_name = "no-data-dep-hazard",505 .llvm_name = "no-data-dep-hazard",
631 .description = "Does not need SW waitstates",506 .description = "Does not need SW waitstates",
632 .dependencies = featureSet(&[_]Feature{}),507 .dependencies = sparseFeatureSet(&[_]Feature{}),
633 };508 };
634 result[@enumToInt(Feature.no_sdst_cmpx)] = .{509 result[@enumToInt(Feature.no_sdst_cmpx)] = .{
635 .index = @enumToInt(Feature.no_sdst_cmpx),
636 .name = @tagName(Feature.no_sdst_cmpx),
637 .llvm_name = "no-sdst-cmpx",510 .llvm_name = "no-sdst-cmpx",
638 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",511 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
639 .dependencies = featureSet(&[_]Feature{}),512 .dependencies = sparseFeatureSet(&[_]Feature{}),
640 };513 };
641 result[@enumToInt(Feature.no_sram_ecc_support)] = .{514 result[@enumToInt(Feature.no_sram_ecc_support)] = .{
642 .index = @enumToInt(Feature.no_sram_ecc_support),
643 .name = @tagName(Feature.no_sram_ecc_support),
644 .llvm_name = "no-sram-ecc-support",515 .llvm_name = "no-sram-ecc-support",
645 .description = "Hardware does not support SRAM ECC",516 .description = "Hardware does not support SRAM ECC",
646 .dependencies = featureSet(&[_]Feature{}),517 .dependencies = sparseFeatureSet(&[_]Feature{}),
647 };518 };
648 result[@enumToInt(Feature.no_xnack_support)] = .{519 result[@enumToInt(Feature.no_xnack_support)] = .{
649 .index = @enumToInt(Feature.no_xnack_support),
650 .name = @tagName(Feature.no_xnack_support),
651 .llvm_name = "no-xnack-support",520 .llvm_name = "no-xnack-support",
652 .description = "Hardware does not support XNACK",521 .description = "Hardware does not support XNACK",
653 .dependencies = featureSet(&[_]Feature{}),522 .dependencies = sparseFeatureSet(&[_]Feature{}),
654 };523 };
655 result[@enumToInt(Feature.nsa_encoding)] = .{524 result[@enumToInt(Feature.nsa_encoding)] = .{
656 .index = @enumToInt(Feature.nsa_encoding),
657 .name = @tagName(Feature.nsa_encoding),
658 .llvm_name = "nsa-encoding",525 .llvm_name = "nsa-encoding",
659 .description = "Support NSA encoding for image instructions",526 .description = "Support NSA encoding for image instructions",
660 .dependencies = featureSet(&[_]Feature{}),527 .dependencies = sparseFeatureSet(&[_]Feature{}),
661 };528 };
662 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{529 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
663 .index = @enumToInt(Feature.nsa_to_vmem_bug),
664 .name = @tagName(Feature.nsa_to_vmem_bug),
665 .llvm_name = "nsa-to-vmem-bug",530 .llvm_name = "nsa-to-vmem-bug",
666 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",531 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
667 .dependencies = featureSet(&[_]Feature{}),532 .dependencies = sparseFeatureSet(&[_]Feature{}),
668 };533 };
669 result[@enumToInt(Feature.offset_3f_bug)] = .{534 result[@enumToInt(Feature.offset_3f_bug)] = .{
670 .index = @enumToInt(Feature.offset_3f_bug),
671 .name = @tagName(Feature.offset_3f_bug),
672 .llvm_name = "offset-3f-bug",535 .llvm_name = "offset-3f-bug",
673 .description = "Branch offset of 3f hardware bug",536 .description = "Branch offset of 3f hardware bug",
674 .dependencies = featureSet(&[_]Feature{}),537 .dependencies = sparseFeatureSet(&[_]Feature{}),
675 };538 };
676 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{539 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
677 .index = @enumToInt(Feature.pk_fmac_f16_inst),
678 .name = @tagName(Feature.pk_fmac_f16_inst),
679 .llvm_name = "pk-fmac-f16-inst",540 .llvm_name = "pk-fmac-f16-inst",
680 .description = "Has v_pk_fmac_f16 instruction",541 .description = "Has v_pk_fmac_f16 instruction",
681 .dependencies = featureSet(&[_]Feature{}),542 .dependencies = sparseFeatureSet(&[_]Feature{}),
682 };543 };
683 result[@enumToInt(Feature.promote_alloca)] = .{544 result[@enumToInt(Feature.promote_alloca)] = .{
684 .index = @enumToInt(Feature.promote_alloca),
685 .name = @tagName(Feature.promote_alloca),
686 .llvm_name = "promote-alloca",545 .llvm_name = "promote-alloca",
687 .description = "Enable promote alloca pass",546 .description = "Enable promote alloca pass",
688 .dependencies = featureSet(&[_]Feature{}),547 .dependencies = sparseFeatureSet(&[_]Feature{}),
689 };548 };
690 result[@enumToInt(Feature.r128_a16)] = .{549 result[@enumToInt(Feature.r128_a16)] = .{
691 .index = @enumToInt(Feature.r128_a16),
692 .name = @tagName(Feature.r128_a16),
693 .llvm_name = "r128-a16",550 .llvm_name = "r128-a16",
694 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",551 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
695 .dependencies = featureSet(&[_]Feature{}),552 .dependencies = sparseFeatureSet(&[_]Feature{}),
696 };553 };
697 result[@enumToInt(Feature.register_banking)] = .{554 result[@enumToInt(Feature.register_banking)] = .{
698 .index = @enumToInt(Feature.register_banking),
699 .name = @tagName(Feature.register_banking),
700 .llvm_name = "register-banking",555 .llvm_name = "register-banking",
701 .description = "Has register banking",556 .description = "Has register banking",
702 .dependencies = featureSet(&[_]Feature{}),557 .dependencies = sparseFeatureSet(&[_]Feature{}),
703 };558 };
704 result[@enumToInt(Feature.s_memrealtime)] = .{559 result[@enumToInt(Feature.s_memrealtime)] = .{
705 .index = @enumToInt(Feature.s_memrealtime),
706 .name = @tagName(Feature.s_memrealtime),
707 .llvm_name = "s-memrealtime",560 .llvm_name = "s-memrealtime",
708 .description = "Has s_memrealtime instruction",561 .description = "Has s_memrealtime instruction",
709 .dependencies = featureSet(&[_]Feature{}),562 .dependencies = sparseFeatureSet(&[_]Feature{}),
710 };563 };
711 result[@enumToInt(Feature.scalar_atomics)] = .{564 result[@enumToInt(Feature.scalar_atomics)] = .{
712 .index = @enumToInt(Feature.scalar_atomics),
713 .name = @tagName(Feature.scalar_atomics),
714 .llvm_name = "scalar-atomics",565 .llvm_name = "scalar-atomics",
715 .description = "Has atomic scalar memory instructions",566 .description = "Has atomic scalar memory instructions",
716 .dependencies = featureSet(&[_]Feature{}),567 .dependencies = sparseFeatureSet(&[_]Feature{}),
717 };568 };
718 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{569 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{
719 .index = @enumToInt(Feature.scalar_flat_scratch_insts),
720 .name = @tagName(Feature.scalar_flat_scratch_insts),
721 .llvm_name = "scalar-flat-scratch-insts",570 .llvm_name = "scalar-flat-scratch-insts",
722 .description = "Have s_scratch_* flat memory instructions",571 .description = "Have s_scratch_* flat memory instructions",
723 .dependencies = featureSet(&[_]Feature{}),572 .dependencies = sparseFeatureSet(&[_]Feature{}),
724 };573 };
725 result[@enumToInt(Feature.scalar_stores)] = .{574 result[@enumToInt(Feature.scalar_stores)] = .{
726 .index = @enumToInt(Feature.scalar_stores),
727 .name = @tagName(Feature.scalar_stores),
728 .llvm_name = "scalar-stores",575 .llvm_name = "scalar-stores",
729 .description = "Has store scalar memory instructions",576 .description = "Has store scalar memory instructions",
730 .dependencies = featureSet(&[_]Feature{}),577 .dependencies = sparseFeatureSet(&[_]Feature{}),
731 };578 };
732 result[@enumToInt(Feature.sdwa)] = .{579 result[@enumToInt(Feature.sdwa)] = .{
733 .index = @enumToInt(Feature.sdwa),
734 .name = @tagName(Feature.sdwa),
735 .llvm_name = "sdwa",580 .llvm_name = "sdwa",
736 .description = "Support SDWA (Sub-DWORD Addressing) extension",581 .description = "Support SDWA (Sub-DWORD Addressing) extension",
737 .dependencies = featureSet(&[_]Feature{}),582 .dependencies = sparseFeatureSet(&[_]Feature{}),
738 };583 };
739 result[@enumToInt(Feature.sdwa_mav)] = .{584 result[@enumToInt(Feature.sdwa_mav)] = .{
740 .index = @enumToInt(Feature.sdwa_mav),
741 .name = @tagName(Feature.sdwa_mav),
742 .llvm_name = "sdwa-mav",585 .llvm_name = "sdwa-mav",
743 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",586 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
744 .dependencies = featureSet(&[_]Feature{}),587 .dependencies = sparseFeatureSet(&[_]Feature{}),
745 };588 };
746 result[@enumToInt(Feature.sdwa_omod)] = .{589 result[@enumToInt(Feature.sdwa_omod)] = .{
747 .index = @enumToInt(Feature.sdwa_omod),
748 .name = @tagName(Feature.sdwa_omod),
749 .llvm_name = "sdwa-omod",590 .llvm_name = "sdwa-omod",
750 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",591 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
751 .dependencies = featureSet(&[_]Feature{}),592 .dependencies = sparseFeatureSet(&[_]Feature{}),
752 };593 };
753 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{594 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{
754 .index = @enumToInt(Feature.sdwa_out_mods_vopc),
755 .name = @tagName(Feature.sdwa_out_mods_vopc),
756 .llvm_name = "sdwa-out-mods-vopc",595 .llvm_name = "sdwa-out-mods-vopc",
757 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",596 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
758 .dependencies = featureSet(&[_]Feature{}),597 .dependencies = sparseFeatureSet(&[_]Feature{}),
759 };598 };
760 result[@enumToInt(Feature.sdwa_scalar)] = .{599 result[@enumToInt(Feature.sdwa_scalar)] = .{
761 .index = @enumToInt(Feature.sdwa_scalar),
762 .name = @tagName(Feature.sdwa_scalar),
763 .llvm_name = "sdwa-scalar",600 .llvm_name = "sdwa-scalar",
764 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",601 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
765 .dependencies = featureSet(&[_]Feature{}),602 .dependencies = sparseFeatureSet(&[_]Feature{}),
766 };603 };
767 result[@enumToInt(Feature.sdwa_sdst)] = .{604 result[@enumToInt(Feature.sdwa_sdst)] = .{
768 .index = @enumToInt(Feature.sdwa_sdst),
769 .name = @tagName(Feature.sdwa_sdst),
770 .llvm_name = "sdwa-sdst",605 .llvm_name = "sdwa-sdst",
771 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",606 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
772 .dependencies = featureSet(&[_]Feature{}),607 .dependencies = sparseFeatureSet(&[_]Feature{}),
773 };608 };
774 result[@enumToInt(Feature.sea_islands)] = .{609 result[@enumToInt(Feature.sea_islands)] = .{
775 .index = @enumToInt(Feature.sea_islands),
776 .name = @tagName(Feature.sea_islands),
777 .llvm_name = "sea-islands",610 .llvm_name = "sea-islands",
778 .description = "SEA_ISLANDS GPU generation",611 .description = "SEA_ISLANDS GPU generation",
779 .dependencies = featureSet(&[_]Feature{612 .dependencies = sparseFeatureSet(&[_]Feature{
780 .ci_insts,613 .ci_insts,
781 .flat_address_space,614 .flat_address_space,
782 .fp64,615 .fp64,
...@@ -790,32 +623,24 @@ pub const all_features = blk: {...@@ -790,32 +623,24 @@ pub const all_features = blk: {
790 }),623 }),
791 };624 };
792 result[@enumToInt(Feature.sgpr_init_bug)] = .{625 result[@enumToInt(Feature.sgpr_init_bug)] = .{
793 .index = @enumToInt(Feature.sgpr_init_bug),
794 .name = @tagName(Feature.sgpr_init_bug),
795 .llvm_name = "sgpr-init-bug",626 .llvm_name = "sgpr-init-bug",
796 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",627 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
797 .dependencies = featureSet(&[_]Feature{}),628 .dependencies = sparseFeatureSet(&[_]Feature{}),
798 };629 };
799 result[@enumToInt(Feature.si_scheduler)] = .{630 result[@enumToInt(Feature.si_scheduler)] = .{
800 .index = @enumToInt(Feature.si_scheduler),
801 .name = @tagName(Feature.si_scheduler),
802 .llvm_name = "si-scheduler",631 .llvm_name = "si-scheduler",
803 .description = "Enable SI Machine Scheduler",632 .description = "Enable SI Machine Scheduler",
804 .dependencies = featureSet(&[_]Feature{}),633 .dependencies = sparseFeatureSet(&[_]Feature{}),
805 };634 };
806 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{635 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{
807 .index = @enumToInt(Feature.smem_to_vector_write_hazard),
808 .name = @tagName(Feature.smem_to_vector_write_hazard),
809 .llvm_name = "smem-to-vector-write-hazard",636 .llvm_name = "smem-to-vector-write-hazard",
810 .description = "s_load_dword followed by v_cmp page faults",637 .description = "s_load_dword followed by v_cmp page faults",
811 .dependencies = featureSet(&[_]Feature{}),638 .dependencies = sparseFeatureSet(&[_]Feature{}),
812 };639 };
813 result[@enumToInt(Feature.southern_islands)] = .{640 result[@enumToInt(Feature.southern_islands)] = .{
814 .index = @enumToInt(Feature.southern_islands),
815 .name = @tagName(Feature.southern_islands),
816 .llvm_name = "southern-islands",641 .llvm_name = "southern-islands",
817 .description = "SOUTHERN_ISLANDS GPU generation",642 .description = "SOUTHERN_ISLANDS GPU generation",
818 .dependencies = featureSet(&[_]Feature{643 .dependencies = sparseFeatureSet(&[_]Feature{
819 .fp64,644 .fp64,
820 .ldsbankcount32,645 .ldsbankcount32,
821 .localmemorysize32768,646 .localmemorysize32768,
...@@ -828,88 +653,64 @@ pub const all_features = blk: {...@@ -828,88 +653,64 @@ pub const all_features = blk: {
828 }),653 }),
829 };654 };
830 result[@enumToInt(Feature.sram_ecc)] = .{655 result[@enumToInt(Feature.sram_ecc)] = .{
831 .index = @enumToInt(Feature.sram_ecc),
832 .name = @tagName(Feature.sram_ecc),
833 .llvm_name = "sram-ecc",656 .llvm_name = "sram-ecc",
834 .description = "Enable SRAM ECC",657 .description = "Enable SRAM ECC",
835 .dependencies = featureSet(&[_]Feature{}),658 .dependencies = sparseFeatureSet(&[_]Feature{}),
836 };659 };
837 result[@enumToInt(Feature.trap_handler)] = .{660 result[@enumToInt(Feature.trap_handler)] = .{
838 .index = @enumToInt(Feature.trap_handler),
839 .name = @tagName(Feature.trap_handler),
840 .llvm_name = "trap-handler",661 .llvm_name = "trap-handler",
841 .description = "Trap handler support",662 .description = "Trap handler support",
842 .dependencies = featureSet(&[_]Feature{}),663 .dependencies = sparseFeatureSet(&[_]Feature{}),
843 };664 };
844 result[@enumToInt(Feature.trig_reduced_range)] = .{665 result[@enumToInt(Feature.trig_reduced_range)] = .{
845 .index = @enumToInt(Feature.trig_reduced_range),
846 .name = @tagName(Feature.trig_reduced_range),
847 .llvm_name = "trig-reduced-range",666 .llvm_name = "trig-reduced-range",
848 .description = "Requires use of fract on arguments to trig instructions",667 .description = "Requires use of fract on arguments to trig instructions",
849 .dependencies = featureSet(&[_]Feature{}),668 .dependencies = sparseFeatureSet(&[_]Feature{}),
850 };669 };
851 result[@enumToInt(Feature.unaligned_buffer_access)] = .{670 result[@enumToInt(Feature.unaligned_buffer_access)] = .{
852 .index = @enumToInt(Feature.unaligned_buffer_access),
853 .name = @tagName(Feature.unaligned_buffer_access),
854 .llvm_name = "unaligned-buffer-access",671 .llvm_name = "unaligned-buffer-access",
855 .description = "Support unaligned global loads and stores",672 .description = "Support unaligned global loads and stores",
856 .dependencies = featureSet(&[_]Feature{}),673 .dependencies = sparseFeatureSet(&[_]Feature{}),
857 };674 };
858 result[@enumToInt(Feature.unaligned_scratch_access)] = .{675 result[@enumToInt(Feature.unaligned_scratch_access)] = .{
859 .index = @enumToInt(Feature.unaligned_scratch_access),
860 .name = @tagName(Feature.unaligned_scratch_access),
861 .llvm_name = "unaligned-scratch-access",676 .llvm_name = "unaligned-scratch-access",
862 .description = "Support unaligned scratch loads and stores",677 .description = "Support unaligned scratch loads and stores",
863 .dependencies = featureSet(&[_]Feature{}),678 .dependencies = sparseFeatureSet(&[_]Feature{}),
864 };679 };
865 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{680 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{
866 .index = @enumToInt(Feature.unpacked_d16_vmem),
867 .name = @tagName(Feature.unpacked_d16_vmem),
868 .llvm_name = "unpacked-d16-vmem",681 .llvm_name = "unpacked-d16-vmem",
869 .description = "Has unpacked d16 vmem instructions",682 .description = "Has unpacked d16 vmem instructions",
870 .dependencies = featureSet(&[_]Feature{}),683 .dependencies = sparseFeatureSet(&[_]Feature{}),
871 };684 };
872 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{685 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{
873 .index = @enumToInt(Feature.unsafe_ds_offset_folding),
874 .name = @tagName(Feature.unsafe_ds_offset_folding),
875 .llvm_name = "unsafe-ds-offset-folding",686 .llvm_name = "unsafe-ds-offset-folding",
876 .description = "Force using DS instruction immediate offsets on SI",687 .description = "Force using DS instruction immediate offsets on SI",
877 .dependencies = featureSet(&[_]Feature{}),688 .dependencies = sparseFeatureSet(&[_]Feature{}),
878 };689 };
879 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{690 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{
880 .index = @enumToInt(Feature.vcmpx_exec_war_hazard),
881 .name = @tagName(Feature.vcmpx_exec_war_hazard),
882 .llvm_name = "vcmpx-exec-war-hazard",691 .llvm_name = "vcmpx-exec-war-hazard",
883 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",692 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
884 .dependencies = featureSet(&[_]Feature{}),693 .dependencies = sparseFeatureSet(&[_]Feature{}),
885 };694 };
886 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{695 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{
887 .index = @enumToInt(Feature.vcmpx_permlane_hazard),
888 .name = @tagName(Feature.vcmpx_permlane_hazard),
889 .llvm_name = "vcmpx-permlane-hazard",696 .llvm_name = "vcmpx-permlane-hazard",
890 .description = "TODO: describe me",697 .description = "TODO: describe me",
891 .dependencies = featureSet(&[_]Feature{}),698 .dependencies = sparseFeatureSet(&[_]Feature{}),
892 };699 };
893 result[@enumToInt(Feature.vgpr_index_mode)] = .{700 result[@enumToInt(Feature.vgpr_index_mode)] = .{
894 .index = @enumToInt(Feature.vgpr_index_mode),
895 .name = @tagName(Feature.vgpr_index_mode),
896 .llvm_name = "vgpr-index-mode",701 .llvm_name = "vgpr-index-mode",
897 .description = "Has VGPR mode register indexing",702 .description = "Has VGPR mode register indexing",
898 .dependencies = featureSet(&[_]Feature{}),703 .dependencies = sparseFeatureSet(&[_]Feature{}),
899 };704 };
900 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{705 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{
901 .index = @enumToInt(Feature.vmem_to_scalar_write_hazard),
902 .name = @tagName(Feature.vmem_to_scalar_write_hazard),
903 .llvm_name = "vmem-to-scalar-write-hazard",706 .llvm_name = "vmem-to-scalar-write-hazard",
904 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",707 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
905 .dependencies = featureSet(&[_]Feature{}),708 .dependencies = sparseFeatureSet(&[_]Feature{}),
906 };709 };
907 result[@enumToInt(Feature.volcanic_islands)] = .{710 result[@enumToInt(Feature.volcanic_islands)] = .{
908 .index = @enumToInt(Feature.volcanic_islands),
909 .name = @tagName(Feature.volcanic_islands),
910 .llvm_name = "volcanic-islands",711 .llvm_name = "volcanic-islands",
911 .description = "VOLCANIC_ISLANDS GPU generation",712 .description = "VOLCANIC_ISLANDS GPU generation",
912 .dependencies = featureSet(&[_]Feature{713 .dependencies = sparseFeatureSet(&[_]Feature{
913 .@"16_bit_insts",714 .@"16_bit_insts",
914 .ci_insts,715 .ci_insts,
915 .dpp,716 .dpp,
...@@ -935,54 +736,46 @@ pub const all_features = blk: {...@@ -935,54 +736,46 @@ pub const all_features = blk: {
935 }),736 }),
936 };737 };
937 result[@enumToInt(Feature.vop3_literal)] = .{738 result[@enumToInt(Feature.vop3_literal)] = .{
938 .index = @enumToInt(Feature.vop3_literal),
939 .name = @tagName(Feature.vop3_literal),
940 .llvm_name = "vop3-literal",739 .llvm_name = "vop3-literal",
941 .description = "Can use one literal in VOP3",740 .description = "Can use one literal in VOP3",
942 .dependencies = featureSet(&[_]Feature{}),741 .dependencies = sparseFeatureSet(&[_]Feature{}),
943 };742 };
944 result[@enumToInt(Feature.vop3p)] = .{743 result[@enumToInt(Feature.vop3p)] = .{
945 .index = @enumToInt(Feature.vop3p),
946 .name = @tagName(Feature.vop3p),
947 .llvm_name = "vop3p",744 .llvm_name = "vop3p",
948 .description = "Has VOP3P packed instructions",745 .description = "Has VOP3P packed instructions",
949 .dependencies = featureSet(&[_]Feature{}),746 .dependencies = sparseFeatureSet(&[_]Feature{}),
950 };747 };
951 result[@enumToInt(Feature.vscnt)] = .{748 result[@enumToInt(Feature.vscnt)] = .{
952 .index = @enumToInt(Feature.vscnt),
953 .name = @tagName(Feature.vscnt),
954 .llvm_name = "vscnt",749 .llvm_name = "vscnt",
955 .description = "Has separate store vscnt counter",750 .description = "Has separate store vscnt counter",
956 .dependencies = featureSet(&[_]Feature{}),751 .dependencies = sparseFeatureSet(&[_]Feature{}),
957 };752 };
958 result[@enumToInt(Feature.wavefrontsize16)] = .{753 result[@enumToInt(Feature.wavefrontsize16)] = .{
959 .index = @enumToInt(Feature.wavefrontsize16),
960 .name = @tagName(Feature.wavefrontsize16),
961 .llvm_name = "wavefrontsize16",754 .llvm_name = "wavefrontsize16",
962 .description = "The number of threads per wavefront",755 .description = "The number of threads per wavefront",
963 .dependencies = featureSet(&[_]Feature{}),756 .dependencies = sparseFeatureSet(&[_]Feature{}),
964 };757 };
965 result[@enumToInt(Feature.wavefrontsize32)] = .{758 result[@enumToInt(Feature.wavefrontsize32)] = .{
966 .index = @enumToInt(Feature.wavefrontsize32),
967 .name = @tagName(Feature.wavefrontsize32),
968 .llvm_name = "wavefrontsize32",759 .llvm_name = "wavefrontsize32",
969 .description = "The number of threads per wavefront",760 .description = "The number of threads per wavefront",
970 .dependencies = featureSet(&[_]Feature{}),761 .dependencies = sparseFeatureSet(&[_]Feature{}),
971 };762 };
972 result[@enumToInt(Feature.wavefrontsize64)] = .{763 result[@enumToInt(Feature.wavefrontsize64)] = .{
973 .index = @enumToInt(Feature.wavefrontsize64),
974 .name = @tagName(Feature.wavefrontsize64),
975 .llvm_name = "wavefrontsize64",764 .llvm_name = "wavefrontsize64",
976 .description = "The number of threads per wavefront",765 .description = "The number of threads per wavefront",
977 .dependencies = featureSet(&[_]Feature{}),766 .dependencies = sparseFeatureSet(&[_]Feature{}),
978 };767 };
979 result[@enumToInt(Feature.xnack)] = .{768 result[@enumToInt(Feature.xnack)] = .{
980 .index = @enumToInt(Feature.xnack),
981 .name = @tagName(Feature.xnack),
982 .llvm_name = "xnack",769 .llvm_name = "xnack",
983 .description = "Enable XNACK support",770 .description = "Enable XNACK support",
984 .dependencies = featureSet(&[_]Feature{}),771 .dependencies = sparseFeatureSet(&[_]Feature{}),
985 };772 };
773 const ti = @typeInfo(Feature);
774 for (result) |*elem, i| {
775 elem.index = i;
776 elem.name = ti.Enum.fields[i].name;
777 elem.dependencies.initAsDependencies(i, &result);
778 }
986 break :blk result;779 break :blk result;
987};780};
988781
...@@ -990,7 +783,7 @@ pub const cpu = struct {...@@ -990,7 +783,7 @@ pub const cpu = struct {
990 pub const bonaire = Cpu{783 pub const bonaire = Cpu{
991 .name = "bonaire",784 .name = "bonaire",
992 .llvm_name = "bonaire",785 .llvm_name = "bonaire",
993 .features = featureSet(&[_]Feature{786 .features = featureSet(&all_features, &[_]Feature{
994 .code_object_v3,787 .code_object_v3,
995 .ldsbankcount32,788 .ldsbankcount32,
996 .no_xnack_support,789 .no_xnack_support,
...@@ -1000,7 +793,7 @@ pub const cpu = struct {...@@ -1000,7 +793,7 @@ pub const cpu = struct {
1000 pub const carrizo = Cpu{793 pub const carrizo = Cpu{
1001 .name = "carrizo",794 .name = "carrizo",
1002 .llvm_name = "carrizo",795 .llvm_name = "carrizo",
1003 .features = featureSet(&[_]Feature{796 .features = featureSet(&all_features, &[_]Feature{
1004 .code_object_v3,797 .code_object_v3,
1005 .fast_fmaf,798 .fast_fmaf,
1006 .half_rate_64_ops,799 .half_rate_64_ops,
...@@ -1013,7 +806,7 @@ pub const cpu = struct {...@@ -1013,7 +806,7 @@ pub const cpu = struct {
1013 pub const fiji = Cpu{806 pub const fiji = Cpu{
1014 .name = "fiji",807 .name = "fiji",
1015 .llvm_name = "fiji",808 .llvm_name = "fiji",
1016 .features = featureSet(&[_]Feature{809 .features = featureSet(&all_features, &[_]Feature{
1017 .code_object_v3,810 .code_object_v3,
1018 .ldsbankcount32,811 .ldsbankcount32,
1019 .no_xnack_support,812 .no_xnack_support,
...@@ -1024,14 +817,14 @@ pub const cpu = struct {...@@ -1024,14 +817,14 @@ pub const cpu = struct {
1024 pub const generic = Cpu{817 pub const generic = Cpu{
1025 .name = "generic",818 .name = "generic",
1026 .llvm_name = "generic",819 .llvm_name = "generic",
1027 .features = featureSet(&[_]Feature{820 .features = featureSet(&all_features, &[_]Feature{
1028 .wavefrontsize64,821 .wavefrontsize64,
1029 }),822 }),
1030 };823 };
1031 pub const generic_hsa = Cpu{824 pub const generic_hsa = Cpu{
1032 .name = "generic_hsa",825 .name = "generic_hsa",
1033 .llvm_name = "generic-hsa",826 .llvm_name = "generic-hsa",
1034 .features = featureSet(&[_]Feature{827 .features = featureSet(&all_features, &[_]Feature{
1035 .flat_address_space,828 .flat_address_space,
1036 .wavefrontsize64,829 .wavefrontsize64,
1037 }),830 }),
...@@ -1039,7 +832,7 @@ pub const cpu = struct {...@@ -1039,7 +832,7 @@ pub const cpu = struct {
1039 pub const gfx1010 = Cpu{832 pub const gfx1010 = Cpu{
1040 .name = "gfx1010",833 .name = "gfx1010",
1041 .llvm_name = "gfx1010",834 .llvm_name = "gfx1010",
1042 .features = featureSet(&[_]Feature{835 .features = featureSet(&all_features, &[_]Feature{
1043 .code_object_v3,836 .code_object_v3,
1044 .dl_insts,837 .dl_insts,
1045 .flat_segment_offset_bug,838 .flat_segment_offset_bug,
...@@ -1065,7 +858,7 @@ pub const cpu = struct {...@@ -1065,7 +858,7 @@ pub const cpu = struct {
1065 pub const gfx1011 = Cpu{858 pub const gfx1011 = Cpu{
1066 .name = "gfx1011",859 .name = "gfx1011",
1067 .llvm_name = "gfx1011",860 .llvm_name = "gfx1011",
1068 .features = featureSet(&[_]Feature{861 .features = featureSet(&all_features, &[_]Feature{
1069 .code_object_v3,862 .code_object_v3,
1070 .dl_insts,863 .dl_insts,
1071 .dot1_insts,864 .dot1_insts,
...@@ -1094,7 +887,7 @@ pub const cpu = struct {...@@ -1094,7 +887,7 @@ pub const cpu = struct {
1094 pub const gfx1012 = Cpu{887 pub const gfx1012 = Cpu{
1095 .name = "gfx1012",888 .name = "gfx1012",
1096 .llvm_name = "gfx1012",889 .llvm_name = "gfx1012",
1097 .features = featureSet(&[_]Feature{890 .features = featureSet(&all_features, &[_]Feature{
1098 .code_object_v3,891 .code_object_v3,
1099 .dl_insts,892 .dl_insts,
1100 .dot1_insts,893 .dot1_insts,
...@@ -1124,7 +917,7 @@ pub const cpu = struct {...@@ -1124,7 +917,7 @@ pub const cpu = struct {
1124 pub const gfx600 = Cpu{917 pub const gfx600 = Cpu{
1125 .name = "gfx600",918 .name = "gfx600",
1126 .llvm_name = "gfx600",919 .llvm_name = "gfx600",
1127 .features = featureSet(&[_]Feature{920 .features = featureSet(&all_features, &[_]Feature{
1128 .code_object_v3,921 .code_object_v3,
1129 .fast_fmaf,922 .fast_fmaf,
1130 .half_rate_64_ops,923 .half_rate_64_ops,
...@@ -1136,7 +929,7 @@ pub const cpu = struct {...@@ -1136,7 +929,7 @@ pub const cpu = struct {
1136 pub const gfx601 = Cpu{929 pub const gfx601 = Cpu{
1137 .name = "gfx601",930 .name = "gfx601",
1138 .llvm_name = "gfx601",931 .llvm_name = "gfx601",
1139 .features = featureSet(&[_]Feature{932 .features = featureSet(&all_features, &[_]Feature{
1140 .code_object_v3,933 .code_object_v3,
1141 .ldsbankcount32,934 .ldsbankcount32,
1142 .no_xnack_support,935 .no_xnack_support,
...@@ -1146,7 +939,7 @@ pub const cpu = struct {...@@ -1146,7 +939,7 @@ pub const cpu = struct {
1146 pub const gfx700 = Cpu{939 pub const gfx700 = Cpu{
1147 .name = "gfx700",940 .name = "gfx700",
1148 .llvm_name = "gfx700",941 .llvm_name = "gfx700",
1149 .features = featureSet(&[_]Feature{942 .features = featureSet(&all_features, &[_]Feature{
1150 .code_object_v3,943 .code_object_v3,
1151 .ldsbankcount32,944 .ldsbankcount32,
1152 .no_xnack_support,945 .no_xnack_support,
...@@ -1156,7 +949,7 @@ pub const cpu = struct {...@@ -1156,7 +949,7 @@ pub const cpu = struct {
1156 pub const gfx701 = Cpu{949 pub const gfx701 = Cpu{
1157 .name = "gfx701",950 .name = "gfx701",
1158 .llvm_name = "gfx701",951 .llvm_name = "gfx701",
1159 .features = featureSet(&[_]Feature{952 .features = featureSet(&all_features, &[_]Feature{
1160 .code_object_v3,953 .code_object_v3,
1161 .fast_fmaf,954 .fast_fmaf,
1162 .half_rate_64_ops,955 .half_rate_64_ops,
...@@ -1168,7 +961,7 @@ pub const cpu = struct {...@@ -1168,7 +961,7 @@ pub const cpu = struct {
1168 pub const gfx702 = Cpu{961 pub const gfx702 = Cpu{
1169 .name = "gfx702",962 .name = "gfx702",
1170 .llvm_name = "gfx702",963 .llvm_name = "gfx702",
1171 .features = featureSet(&[_]Feature{964 .features = featureSet(&all_features, &[_]Feature{
1172 .code_object_v3,965 .code_object_v3,
1173 .fast_fmaf,966 .fast_fmaf,
1174 .ldsbankcount16,967 .ldsbankcount16,
...@@ -1179,7 +972,7 @@ pub const cpu = struct {...@@ -1179,7 +972,7 @@ pub const cpu = struct {
1179 pub const gfx703 = Cpu{972 pub const gfx703 = Cpu{
1180 .name = "gfx703",973 .name = "gfx703",
1181 .llvm_name = "gfx703",974 .llvm_name = "gfx703",
1182 .features = featureSet(&[_]Feature{975 .features = featureSet(&all_features, &[_]Feature{
1183 .code_object_v3,976 .code_object_v3,
1184 .ldsbankcount16,977 .ldsbankcount16,
1185 .no_xnack_support,978 .no_xnack_support,
...@@ -1189,7 +982,7 @@ pub const cpu = struct {...@@ -1189,7 +982,7 @@ pub const cpu = struct {
1189 pub const gfx704 = Cpu{982 pub const gfx704 = Cpu{
1190 .name = "gfx704",983 .name = "gfx704",
1191 .llvm_name = "gfx704",984 .llvm_name = "gfx704",
1192 .features = featureSet(&[_]Feature{985 .features = featureSet(&all_features, &[_]Feature{
1193 .code_object_v3,986 .code_object_v3,
1194 .ldsbankcount32,987 .ldsbankcount32,
1195 .no_xnack_support,988 .no_xnack_support,
...@@ -1199,7 +992,7 @@ pub const cpu = struct {...@@ -1199,7 +992,7 @@ pub const cpu = struct {
1199 pub const gfx801 = Cpu{992 pub const gfx801 = Cpu{
1200 .name = "gfx801",993 .name = "gfx801",
1201 .llvm_name = "gfx801",994 .llvm_name = "gfx801",
1202 .features = featureSet(&[_]Feature{995 .features = featureSet(&all_features, &[_]Feature{
1203 .code_object_v3,996 .code_object_v3,
1204 .fast_fmaf,997 .fast_fmaf,
1205 .half_rate_64_ops,998 .half_rate_64_ops,
...@@ -1212,7 +1005,7 @@ pub const cpu = struct {...@@ -1212,7 +1005,7 @@ pub const cpu = struct {
1212 pub const gfx802 = Cpu{1005 pub const gfx802 = Cpu{
1213 .name = "gfx802",1006 .name = "gfx802",
1214 .llvm_name = "gfx802",1007 .llvm_name = "gfx802",
1215 .features = featureSet(&[_]Feature{1008 .features = featureSet(&all_features, &[_]Feature{
1216 .code_object_v3,1009 .code_object_v3,
1217 .ldsbankcount32,1010 .ldsbankcount32,
1218 .no_xnack_support,1011 .no_xnack_support,
...@@ -1224,7 +1017,7 @@ pub const cpu = struct {...@@ -1224,7 +1017,7 @@ pub const cpu = struct {
1224 pub const gfx803 = Cpu{1017 pub const gfx803 = Cpu{
1225 .name = "gfx803",1018 .name = "gfx803",
1226 .llvm_name = "gfx803",1019 .llvm_name = "gfx803",
1227 .features = featureSet(&[_]Feature{1020 .features = featureSet(&all_features, &[_]Feature{
1228 .code_object_v3,1021 .code_object_v3,
1229 .ldsbankcount32,1022 .ldsbankcount32,
1230 .no_xnack_support,1023 .no_xnack_support,
...@@ -1235,7 +1028,7 @@ pub const cpu = struct {...@@ -1235,7 +1028,7 @@ pub const cpu = struct {
1235 pub const gfx810 = Cpu{1028 pub const gfx810 = Cpu{
1236 .name = "gfx810",1029 .name = "gfx810",
1237 .llvm_name = "gfx810",1030 .llvm_name = "gfx810",
1238 .features = featureSet(&[_]Feature{1031 .features = featureSet(&all_features, &[_]Feature{
1239 .code_object_v3,1032 .code_object_v3,
1240 .ldsbankcount16,1033 .ldsbankcount16,
1241 .volcanic_islands,1034 .volcanic_islands,
...@@ -1245,7 +1038,7 @@ pub const cpu = struct {...@@ -1245,7 +1038,7 @@ pub const cpu = struct {
1245 pub const gfx900 = Cpu{1038 pub const gfx900 = Cpu{
1246 .name = "gfx900",1039 .name = "gfx900",
1247 .llvm_name = "gfx900",1040 .llvm_name = "gfx900",
1248 .features = featureSet(&[_]Feature{1041 .features = featureSet(&all_features, &[_]Feature{
1249 .code_object_v3,1042 .code_object_v3,
1250 .gfx9,1043 .gfx9,
1251 .ldsbankcount32,1044 .ldsbankcount32,
...@@ -1257,7 +1050,7 @@ pub const cpu = struct {...@@ -1257,7 +1050,7 @@ pub const cpu = struct {
1257 pub const gfx902 = Cpu{1050 pub const gfx902 = Cpu{
1258 .name = "gfx902",1051 .name = "gfx902",
1259 .llvm_name = "gfx902",1052 .llvm_name = "gfx902",
1260 .features = featureSet(&[_]Feature{1053 .features = featureSet(&all_features, &[_]Feature{
1261 .code_object_v3,1054 .code_object_v3,
1262 .gfx9,1055 .gfx9,
1263 .ldsbankcount32,1056 .ldsbankcount32,
...@@ -1269,7 +1062,7 @@ pub const cpu = struct {...@@ -1269,7 +1062,7 @@ pub const cpu = struct {
1269 pub const gfx904 = Cpu{1062 pub const gfx904 = Cpu{
1270 .name = "gfx904",1063 .name = "gfx904",
1271 .llvm_name = "gfx904",1064 .llvm_name = "gfx904",
1272 .features = featureSet(&[_]Feature{1065 .features = featureSet(&all_features, &[_]Feature{
1273 .code_object_v3,1066 .code_object_v3,
1274 .fma_mix_insts,1067 .fma_mix_insts,
1275 .gfx9,1068 .gfx9,
...@@ -1281,7 +1074,7 @@ pub const cpu = struct {...@@ -1281,7 +1074,7 @@ pub const cpu = struct {
1281 pub const gfx906 = Cpu{1074 pub const gfx906 = Cpu{
1282 .name = "gfx906",1075 .name = "gfx906",
1283 .llvm_name = "gfx906",1076 .llvm_name = "gfx906",
1284 .features = featureSet(&[_]Feature{1077 .features = featureSet(&all_features, &[_]Feature{
1285 .code_object_v3,1078 .code_object_v3,
1286 .dl_insts,1079 .dl_insts,
1287 .dot1_insts,1080 .dot1_insts,
...@@ -1296,7 +1089,7 @@ pub const cpu = struct {...@@ -1296,7 +1089,7 @@ pub const cpu = struct {
1296 pub const gfx908 = Cpu{1089 pub const gfx908 = Cpu{
1297 .name = "gfx908",1090 .name = "gfx908",
1298 .llvm_name = "gfx908",1091 .llvm_name = "gfx908",
1299 .features = featureSet(&[_]Feature{1092 .features = featureSet(&all_features, &[_]Feature{
1300 .atomic_fadd_insts,1093 .atomic_fadd_insts,
1301 .code_object_v3,1094 .code_object_v3,
1302 .dl_insts,1095 .dl_insts,
...@@ -1318,7 +1111,7 @@ pub const cpu = struct {...@@ -1318,7 +1111,7 @@ pub const cpu = struct {
1318 pub const gfx909 = Cpu{1111 pub const gfx909 = Cpu{
1319 .name = "gfx909",1112 .name = "gfx909",
1320 .llvm_name = "gfx909",1113 .llvm_name = "gfx909",
1321 .features = featureSet(&[_]Feature{1114 .features = featureSet(&all_features, &[_]Feature{
1322 .code_object_v3,1115 .code_object_v3,
1323 .gfx9,1116 .gfx9,
1324 .ldsbankcount32,1117 .ldsbankcount32,
...@@ -1329,7 +1122,7 @@ pub const cpu = struct {...@@ -1329,7 +1122,7 @@ pub const cpu = struct {
1329 pub const hainan = Cpu{1122 pub const hainan = Cpu{
1330 .name = "hainan",1123 .name = "hainan",
1331 .llvm_name = "hainan",1124 .llvm_name = "hainan",
1332 .features = featureSet(&[_]Feature{1125 .features = featureSet(&all_features, &[_]Feature{
1333 .code_object_v3,1126 .code_object_v3,
1334 .ldsbankcount32,1127 .ldsbankcount32,
1335 .no_xnack_support,1128 .no_xnack_support,
...@@ -1339,7 +1132,7 @@ pub const cpu = struct {...@@ -1339,7 +1132,7 @@ pub const cpu = struct {
1339 pub const hawaii = Cpu{1132 pub const hawaii = Cpu{
1340 .name = "hawaii",1133 .name = "hawaii",
1341 .llvm_name = "hawaii",1134 .llvm_name = "hawaii",
1342 .features = featureSet(&[_]Feature{1135 .features = featureSet(&all_features, &[_]Feature{
1343 .code_object_v3,1136 .code_object_v3,
1344 .fast_fmaf,1137 .fast_fmaf,
1345 .half_rate_64_ops,1138 .half_rate_64_ops,
...@@ -1351,7 +1144,7 @@ pub const cpu = struct {...@@ -1351,7 +1144,7 @@ pub const cpu = struct {
1351 pub const iceland = Cpu{1144 pub const iceland = Cpu{
1352 .name = "iceland",1145 .name = "iceland",
1353 .llvm_name = "iceland",1146 .llvm_name = "iceland",
1354 .features = featureSet(&[_]Feature{1147 .features = featureSet(&all_features, &[_]Feature{
1355 .code_object_v3,1148 .code_object_v3,
1356 .ldsbankcount32,1149 .ldsbankcount32,
1357 .no_xnack_support,1150 .no_xnack_support,
...@@ -1363,7 +1156,7 @@ pub const cpu = struct {...@@ -1363,7 +1156,7 @@ pub const cpu = struct {
1363 pub const kabini = Cpu{1156 pub const kabini = Cpu{
1364 .name = "kabini",1157 .name = "kabini",
1365 .llvm_name = "kabini",1158 .llvm_name = "kabini",
1366 .features = featureSet(&[_]Feature{1159 .features = featureSet(&all_features, &[_]Feature{
1367 .code_object_v3,1160 .code_object_v3,
1368 .ldsbankcount16,1161 .ldsbankcount16,
1369 .no_xnack_support,1162 .no_xnack_support,
...@@ -1373,7 +1166,7 @@ pub const cpu = struct {...@@ -1373,7 +1166,7 @@ pub const cpu = struct {
1373 pub const kaveri = Cpu{1166 pub const kaveri = Cpu{
1374 .name = "kaveri",1167 .name = "kaveri",
1375 .llvm_name = "kaveri",1168 .llvm_name = "kaveri",
1376 .features = featureSet(&[_]Feature{1169 .features = featureSet(&all_features, &[_]Feature{
1377 .code_object_v3,1170 .code_object_v3,
1378 .ldsbankcount32,1171 .ldsbankcount32,
1379 .no_xnack_support,1172 .no_xnack_support,
...@@ -1383,7 +1176,7 @@ pub const cpu = struct {...@@ -1383,7 +1176,7 @@ pub const cpu = struct {
1383 pub const mullins = Cpu{1176 pub const mullins = Cpu{
1384 .name = "mullins",1177 .name = "mullins",
1385 .llvm_name = "mullins",1178 .llvm_name = "mullins",
1386 .features = featureSet(&[_]Feature{1179 .features = featureSet(&all_features, &[_]Feature{
1387 .code_object_v3,1180 .code_object_v3,
1388 .ldsbankcount16,1181 .ldsbankcount16,
1389 .no_xnack_support,1182 .no_xnack_support,
...@@ -1393,7 +1186,7 @@ pub const cpu = struct {...@@ -1393,7 +1186,7 @@ pub const cpu = struct {
1393 pub const oland = Cpu{1186 pub const oland = Cpu{
1394 .name = "oland",1187 .name = "oland",
1395 .llvm_name = "oland",1188 .llvm_name = "oland",
1396 .features = featureSet(&[_]Feature{1189 .features = featureSet(&all_features, &[_]Feature{
1397 .code_object_v3,1190 .code_object_v3,
1398 .ldsbankcount32,1191 .ldsbankcount32,
1399 .no_xnack_support,1192 .no_xnack_support,
...@@ -1403,7 +1196,7 @@ pub const cpu = struct {...@@ -1403,7 +1196,7 @@ pub const cpu = struct {
1403 pub const pitcairn = Cpu{1196 pub const pitcairn = Cpu{
1404 .name = "pitcairn",1197 .name = "pitcairn",
1405 .llvm_name = "pitcairn",1198 .llvm_name = "pitcairn",
1406 .features = featureSet(&[_]Feature{1199 .features = featureSet(&all_features, &[_]Feature{
1407 .code_object_v3,1200 .code_object_v3,
1408 .ldsbankcount32,1201 .ldsbankcount32,
1409 .no_xnack_support,1202 .no_xnack_support,
...@@ -1413,7 +1206,7 @@ pub const cpu = struct {...@@ -1413,7 +1206,7 @@ pub const cpu = struct {
1413 pub const polaris10 = Cpu{1206 pub const polaris10 = Cpu{
1414 .name = "polaris10",1207 .name = "polaris10",
1415 .llvm_name = "polaris10",1208 .llvm_name = "polaris10",
1416 .features = featureSet(&[_]Feature{1209 .features = featureSet(&all_features, &[_]Feature{
1417 .code_object_v3,1210 .code_object_v3,
1418 .ldsbankcount32,1211 .ldsbankcount32,
1419 .no_xnack_support,1212 .no_xnack_support,
...@@ -1424,7 +1217,7 @@ pub const cpu = struct {...@@ -1424,7 +1217,7 @@ pub const cpu = struct {
1424 pub const polaris11 = Cpu{1217 pub const polaris11 = Cpu{
1425 .name = "polaris11",1218 .name = "polaris11",
1426 .llvm_name = "polaris11",1219 .llvm_name = "polaris11",
1427 .features = featureSet(&[_]Feature{1220 .features = featureSet(&all_features, &[_]Feature{
1428 .code_object_v3,1221 .code_object_v3,
1429 .ldsbankcount32,1222 .ldsbankcount32,
1430 .no_xnack_support,1223 .no_xnack_support,
...@@ -1435,7 +1228,7 @@ pub const cpu = struct {...@@ -1435,7 +1228,7 @@ pub const cpu = struct {
1435 pub const stoney = Cpu{1228 pub const stoney = Cpu{
1436 .name = "stoney",1229 .name = "stoney",
1437 .llvm_name = "stoney",1230 .llvm_name = "stoney",
1438 .features = featureSet(&[_]Feature{1231 .features = featureSet(&all_features, &[_]Feature{
1439 .code_object_v3,1232 .code_object_v3,
1440 .ldsbankcount16,1233 .ldsbankcount16,
1441 .volcanic_islands,1234 .volcanic_islands,
...@@ -1445,7 +1238,7 @@ pub const cpu = struct {...@@ -1445,7 +1238,7 @@ pub const cpu = struct {
1445 pub const tahiti = Cpu{1238 pub const tahiti = Cpu{
1446 .name = "tahiti",1239 .name = "tahiti",
1447 .llvm_name = "tahiti",1240 .llvm_name = "tahiti",
1448 .features = featureSet(&[_]Feature{1241 .features = featureSet(&all_features, &[_]Feature{
1449 .code_object_v3,1242 .code_object_v3,
1450 .fast_fmaf,1243 .fast_fmaf,
1451 .half_rate_64_ops,1244 .half_rate_64_ops,
...@@ -1457,7 +1250,7 @@ pub const cpu = struct {...@@ -1457,7 +1250,7 @@ pub const cpu = struct {
1457 pub const tonga = Cpu{1250 pub const tonga = Cpu{
1458 .name = "tonga",1251 .name = "tonga",
1459 .llvm_name = "tonga",1252 .llvm_name = "tonga",
1460 .features = featureSet(&[_]Feature{1253 .features = featureSet(&all_features, &[_]Feature{
1461 .code_object_v3,1254 .code_object_v3,
1462 .ldsbankcount32,1255 .ldsbankcount32,
1463 .no_xnack_support,1256 .no_xnack_support,
...@@ -1469,7 +1262,7 @@ pub const cpu = struct {...@@ -1469,7 +1262,7 @@ pub const cpu = struct {
1469 pub const verde = Cpu{1262 pub const verde = Cpu{
1470 .name = "verde",1263 .name = "verde",
1471 .llvm_name = "verde",1264 .llvm_name = "verde",
1472 .features = featureSet(&[_]Feature{1265 .features = featureSet(&all_features, &[_]Feature{
1473 .code_object_v3,1266 .code_object_v3,
1474 .ldsbankcount32,1267 .ldsbankcount32,
1475 .no_xnack_support,1268 .no_xnack_support,
lib/std/target/arm.zig+265-606
...@@ -181,245 +181,182 @@ pub const Feature = enum {...@@ -181,245 +181,182 @@ pub const Feature = enum {
181pub usingnamespace Cpu.Feature.feature_set_fns(Feature);181pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
182182
183pub const all_features = blk: {183pub const all_features = blk: {
184 @setEvalBranchQuota(10000);
184 const len = @typeInfo(Feature).Enum.fields.len;185 const len = @typeInfo(Feature).Enum.fields.len;
185 std.debug.assert(len <= Cpu.Feature.Set.bit_count);186 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
186 var result: [len]Cpu.Feature = undefined;187 var result: [len]Cpu.Feature = undefined;
187 result[@enumToInt(Feature.@"32bit")] = .{188 result[@enumToInt(Feature.@"32bit")] = .{
188 .index = @enumToInt(Feature.@"32bit"),
189 .name = @tagName(Feature.@"32bit"),
190 .llvm_name = "32bit",189 .llvm_name = "32bit",
191 .description = "Prefer 32-bit Thumb instrs",190 .description = "Prefer 32-bit Thumb instrs",
192 .dependencies = featureSet(&[_]Feature{}),191 .dependencies = sparseFeatureSet(&[_]Feature{}),
193 };192 };
194 result[@enumToInt(Feature.@"8msecext")] = .{193 result[@enumToInt(Feature.@"8msecext")] = .{
195 .index = @enumToInt(Feature.@"8msecext"),
196 .name = @tagName(Feature.@"8msecext"),
197 .llvm_name = "8msecext",194 .llvm_name = "8msecext",
198 .description = "Enable support for ARMv8-M Security Extensions",195 .description = "Enable support for ARMv8-M Security Extensions",
199 .dependencies = featureSet(&[_]Feature{}),196 .dependencies = sparseFeatureSet(&[_]Feature{}),
200 };197 };
201 result[@enumToInt(Feature.a12)] = .{198 result[@enumToInt(Feature.a12)] = .{
202 .index = @enumToInt(Feature.a12),
203 .name = @tagName(Feature.a12),
204 .llvm_name = "a12",199 .llvm_name = "a12",
205 .description = "Cortex-A12 ARM processors",200 .description = "Cortex-A12 ARM processors",
206 .dependencies = featureSet(&[_]Feature{}),201 .dependencies = sparseFeatureSet(&[_]Feature{}),
207 };202 };
208 result[@enumToInt(Feature.a15)] = .{203 result[@enumToInt(Feature.a15)] = .{
209 .index = @enumToInt(Feature.a15),
210 .name = @tagName(Feature.a15),
211 .llvm_name = "a15",204 .llvm_name = "a15",
212 .description = "Cortex-A15 ARM processors",205 .description = "Cortex-A15 ARM processors",
213 .dependencies = featureSet(&[_]Feature{}),206 .dependencies = sparseFeatureSet(&[_]Feature{}),
214 };207 };
215 result[@enumToInt(Feature.a17)] = .{208 result[@enumToInt(Feature.a17)] = .{
216 .index = @enumToInt(Feature.a17),
217 .name = @tagName(Feature.a17),
218 .llvm_name = "a17",209 .llvm_name = "a17",
219 .description = "Cortex-A17 ARM processors",210 .description = "Cortex-A17 ARM processors",
220 .dependencies = featureSet(&[_]Feature{}),211 .dependencies = sparseFeatureSet(&[_]Feature{}),
221 };212 };
222 result[@enumToInt(Feature.a32)] = .{213 result[@enumToInt(Feature.a32)] = .{
223 .index = @enumToInt(Feature.a32),
224 .name = @tagName(Feature.a32),
225 .llvm_name = "a32",214 .llvm_name = "a32",
226 .description = "Cortex-A32 ARM processors",215 .description = "Cortex-A32 ARM processors",
227 .dependencies = featureSet(&[_]Feature{}),216 .dependencies = sparseFeatureSet(&[_]Feature{}),
228 };217 };
229 result[@enumToInt(Feature.a35)] = .{218 result[@enumToInt(Feature.a35)] = .{
230 .index = @enumToInt(Feature.a35),
231 .name = @tagName(Feature.a35),
232 .llvm_name = "a35",219 .llvm_name = "a35",
233 .description = "Cortex-A35 ARM processors",220 .description = "Cortex-A35 ARM processors",
234 .dependencies = featureSet(&[_]Feature{}),221 .dependencies = sparseFeatureSet(&[_]Feature{}),
235 };222 };
236 result[@enumToInt(Feature.a5)] = .{223 result[@enumToInt(Feature.a5)] = .{
237 .index = @enumToInt(Feature.a5),
238 .name = @tagName(Feature.a5),
239 .llvm_name = "a5",224 .llvm_name = "a5",
240 .description = "Cortex-A5 ARM processors",225 .description = "Cortex-A5 ARM processors",
241 .dependencies = featureSet(&[_]Feature{}),226 .dependencies = sparseFeatureSet(&[_]Feature{}),
242 };227 };
243 result[@enumToInt(Feature.a53)] = .{228 result[@enumToInt(Feature.a53)] = .{
244 .index = @enumToInt(Feature.a53),
245 .name = @tagName(Feature.a53),
246 .llvm_name = "a53",229 .llvm_name = "a53",
247 .description = "Cortex-A53 ARM processors",230 .description = "Cortex-A53 ARM processors",
248 .dependencies = featureSet(&[_]Feature{}),231 .dependencies = sparseFeatureSet(&[_]Feature{}),
249 };232 };
250 result[@enumToInt(Feature.a55)] = .{233 result[@enumToInt(Feature.a55)] = .{
251 .index = @enumToInt(Feature.a55),
252 .name = @tagName(Feature.a55),
253 .llvm_name = "a55",234 .llvm_name = "a55",
254 .description = "Cortex-A55 ARM processors",235 .description = "Cortex-A55 ARM processors",
255 .dependencies = featureSet(&[_]Feature{}),236 .dependencies = sparseFeatureSet(&[_]Feature{}),
256 };237 };
257 result[@enumToInt(Feature.a57)] = .{238 result[@enumToInt(Feature.a57)] = .{
258 .index = @enumToInt(Feature.a57),
259 .name = @tagName(Feature.a57),
260 .llvm_name = "a57",239 .llvm_name = "a57",
261 .description = "Cortex-A57 ARM processors",240 .description = "Cortex-A57 ARM processors",
262 .dependencies = featureSet(&[_]Feature{}),241 .dependencies = sparseFeatureSet(&[_]Feature{}),
263 };242 };
264 result[@enumToInt(Feature.a7)] = .{243 result[@enumToInt(Feature.a7)] = .{
265 .index = @enumToInt(Feature.a7),
266 .name = @tagName(Feature.a7),
267 .llvm_name = "a7",244 .llvm_name = "a7",
268 .description = "Cortex-A7 ARM processors",245 .description = "Cortex-A7 ARM processors",
269 .dependencies = featureSet(&[_]Feature{}),246 .dependencies = sparseFeatureSet(&[_]Feature{}),
270 };247 };
271 result[@enumToInt(Feature.a72)] = .{248 result[@enumToInt(Feature.a72)] = .{
272 .index = @enumToInt(Feature.a72),
273 .name = @tagName(Feature.a72),
274 .llvm_name = "a72",249 .llvm_name = "a72",
275 .description = "Cortex-A72 ARM processors",250 .description = "Cortex-A72 ARM processors",
276 .dependencies = featureSet(&[_]Feature{}),251 .dependencies = sparseFeatureSet(&[_]Feature{}),
277 };252 };
278 result[@enumToInt(Feature.a73)] = .{253 result[@enumToInt(Feature.a73)] = .{
279 .index = @enumToInt(Feature.a73),
280 .name = @tagName(Feature.a73),
281 .llvm_name = "a73",254 .llvm_name = "a73",
282 .description = "Cortex-A73 ARM processors",255 .description = "Cortex-A73 ARM processors",
283 .dependencies = featureSet(&[_]Feature{}),256 .dependencies = sparseFeatureSet(&[_]Feature{}),
284 };257 };
285 result[@enumToInt(Feature.a75)] = .{258 result[@enumToInt(Feature.a75)] = .{
286 .index = @enumToInt(Feature.a75),
287 .name = @tagName(Feature.a75),
288 .llvm_name = "a75",259 .llvm_name = "a75",
289 .description = "Cortex-A75 ARM processors",260 .description = "Cortex-A75 ARM processors",
290 .dependencies = featureSet(&[_]Feature{}),261 .dependencies = sparseFeatureSet(&[_]Feature{}),
291 };262 };
292 result[@enumToInt(Feature.a76)] = .{263 result[@enumToInt(Feature.a76)] = .{
293 .index = @enumToInt(Feature.a76),
294 .name = @tagName(Feature.a76),
295 .llvm_name = "a76",264 .llvm_name = "a76",
296 .description = "Cortex-A76 ARM processors",265 .description = "Cortex-A76 ARM processors",
297 .dependencies = featureSet(&[_]Feature{}),266 .dependencies = sparseFeatureSet(&[_]Feature{}),
298 };267 };
299 result[@enumToInt(Feature.a8)] = .{268 result[@enumToInt(Feature.a8)] = .{
300 .index = @enumToInt(Feature.a8),
301 .name = @tagName(Feature.a8),
302 .llvm_name = "a8",269 .llvm_name = "a8",
303 .description = "Cortex-A8 ARM processors",270 .description = "Cortex-A8 ARM processors",
304 .dependencies = featureSet(&[_]Feature{}),271 .dependencies = sparseFeatureSet(&[_]Feature{}),
305 };272 };
306 result[@enumToInt(Feature.a9)] = .{273 result[@enumToInt(Feature.a9)] = .{
307 .index = @enumToInt(Feature.a9),
308 .name = @tagName(Feature.a9),
309 .llvm_name = "a9",274 .llvm_name = "a9",
310 .description = "Cortex-A9 ARM processors",275 .description = "Cortex-A9 ARM processors",
311 .dependencies = featureSet(&[_]Feature{}),276 .dependencies = sparseFeatureSet(&[_]Feature{}),
312 };277 };
313 result[@enumToInt(Feature.aclass)] = .{278 result[@enumToInt(Feature.aclass)] = .{
314 .index = @enumToInt(Feature.aclass),
315 .name = @tagName(Feature.aclass),
316 .llvm_name = "aclass",279 .llvm_name = "aclass",
317 .description = "Is application profile ('A' series)",280 .description = "Is application profile ('A' series)",
318 .dependencies = featureSet(&[_]Feature{}),281 .dependencies = sparseFeatureSet(&[_]Feature{}),
319 };282 };
320 result[@enumToInt(Feature.acquire_release)] = .{283 result[@enumToInt(Feature.acquire_release)] = .{
321 .index = @enumToInt(Feature.acquire_release),
322 .name = @tagName(Feature.acquire_release),
323 .llvm_name = "acquire-release",284 .llvm_name = "acquire-release",
324 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",285 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
325 .dependencies = featureSet(&[_]Feature{}),286 .dependencies = sparseFeatureSet(&[_]Feature{}),
326 };287 };
327 result[@enumToInt(Feature.aes)] = .{288 result[@enumToInt(Feature.aes)] = .{
328 .index = @enumToInt(Feature.aes),
329 .name = @tagName(Feature.aes),
330 .llvm_name = "aes",289 .llvm_name = "aes",
331 .description = "Enable AES support",290 .description = "Enable AES support",
332 .dependencies = featureSet(&[_]Feature{291 .dependencies = sparseFeatureSet(&[_]Feature{
333 .neon,292 .neon,
334 }),293 }),
335 };294 };
336 result[@enumToInt(Feature.armv2)] = .{295 result[@enumToInt(Feature.armv2)] = .{
337 .index = @enumToInt(Feature.armv2),
338 .name = @tagName(Feature.armv2),
339 .llvm_name = "armv2",296 .llvm_name = "armv2",
340 .description = "ARMv2 architecture",297 .description = "ARMv2 architecture",
341 .dependencies = featureSet(&[_]Feature{}),298 .dependencies = sparseFeatureSet(&[_]Feature{}),
342 };299 };
343 result[@enumToInt(Feature.armv2a)] = .{300 result[@enumToInt(Feature.armv2a)] = .{
344 .index = @enumToInt(Feature.armv2a),
345 .name = @tagName(Feature.armv2a),
346 .llvm_name = "armv2a",301 .llvm_name = "armv2a",
347 .description = "ARMv2a architecture",302 .description = "ARMv2a architecture",
348 .dependencies = featureSet(&[_]Feature{}),303 .dependencies = sparseFeatureSet(&[_]Feature{}),
349 };304 };
350 result[@enumToInt(Feature.armv3)] = .{305 result[@enumToInt(Feature.armv3)] = .{
351 .index = @enumToInt(Feature.armv3),
352 .name = @tagName(Feature.armv3),
353 .llvm_name = "armv3",306 .llvm_name = "armv3",
354 .description = "ARMv3 architecture",307 .description = "ARMv3 architecture",
355 .dependencies = featureSet(&[_]Feature{}),308 .dependencies = sparseFeatureSet(&[_]Feature{}),
356 };309 };
357 result[@enumToInt(Feature.armv3m)] = .{310 result[@enumToInt(Feature.armv3m)] = .{
358 .index = @enumToInt(Feature.armv3m),
359 .name = @tagName(Feature.armv3m),
360 .llvm_name = "armv3m",311 .llvm_name = "armv3m",
361 .description = "ARMv3m architecture",312 .description = "ARMv3m architecture",
362 .dependencies = featureSet(&[_]Feature{}),313 .dependencies = sparseFeatureSet(&[_]Feature{}),
363 };314 };
364 result[@enumToInt(Feature.armv4)] = .{315 result[@enumToInt(Feature.armv4)] = .{
365 .index = @enumToInt(Feature.armv4),
366 .name = @tagName(Feature.armv4),
367 .llvm_name = "armv4",316 .llvm_name = "armv4",
368 .description = "ARMv4 architecture",317 .description = "ARMv4 architecture",
369 .dependencies = featureSet(&[_]Feature{}),318 .dependencies = sparseFeatureSet(&[_]Feature{}),
370 };319 };
371 result[@enumToInt(Feature.armv4t)] = .{320 result[@enumToInt(Feature.armv4t)] = .{
372 .index = @enumToInt(Feature.armv4t),
373 .name = @tagName(Feature.armv4t),
374 .llvm_name = "armv4t",321 .llvm_name = "armv4t",
375 .description = "ARMv4t architecture",322 .description = "ARMv4t architecture",
376 .dependencies = featureSet(&[_]Feature{323 .dependencies = sparseFeatureSet(&[_]Feature{
377 .v4t,324 .v4t,
378 }),325 }),
379 };326 };
380 result[@enumToInt(Feature.armv5t)] = .{327 result[@enumToInt(Feature.armv5t)] = .{
381 .index = @enumToInt(Feature.armv5t),
382 .name = @tagName(Feature.armv5t),
383 .llvm_name = "armv5t",328 .llvm_name = "armv5t",
384 .description = "ARMv5t architecture",329 .description = "ARMv5t architecture",
385 .dependencies = featureSet(&[_]Feature{330 .dependencies = sparseFeatureSet(&[_]Feature{
386 .v5t,331 .v5t,
387 }),332 }),
388 };333 };
389 result[@enumToInt(Feature.armv5te)] = .{334 result[@enumToInt(Feature.armv5te)] = .{
390 .index = @enumToInt(Feature.armv5te),
391 .name = @tagName(Feature.armv5te),
392 .llvm_name = "armv5te",335 .llvm_name = "armv5te",
393 .description = "ARMv5te architecture",336 .description = "ARMv5te architecture",
394 .dependencies = featureSet(&[_]Feature{337 .dependencies = sparseFeatureSet(&[_]Feature{
395 .v5te,338 .v5te,
396 }),339 }),
397 };340 };
398 result[@enumToInt(Feature.armv5tej)] = .{341 result[@enumToInt(Feature.armv5tej)] = .{
399 .index = @enumToInt(Feature.armv5tej),
400 .name = @tagName(Feature.armv5tej),
401 .llvm_name = "armv5tej",342 .llvm_name = "armv5tej",
402 .description = "ARMv5tej architecture",343 .description = "ARMv5tej architecture",
403 .dependencies = featureSet(&[_]Feature{344 .dependencies = sparseFeatureSet(&[_]Feature{
404 .v5te,345 .v5te,
405 }),346 }),
406 };347 };
407 result[@enumToInt(Feature.armv6)] = .{348 result[@enumToInt(Feature.armv6)] = .{
408 .index = @enumToInt(Feature.armv6),
409 .name = @tagName(Feature.armv6),
410 .llvm_name = "armv6",349 .llvm_name = "armv6",
411 .description = "ARMv6 architecture",350 .description = "ARMv6 architecture",
412 .dependencies = featureSet(&[_]Feature{351 .dependencies = sparseFeatureSet(&[_]Feature{
413 .dsp,352 .dsp,
414 .v6,353 .v6,
415 }),354 }),
416 };355 };
417 result[@enumToInt(Feature.armv6_m)] = .{356 result[@enumToInt(Feature.armv6_m)] = .{
418 .index = @enumToInt(Feature.armv6_m),
419 .name = @tagName(Feature.armv6_m),
420 .llvm_name = "armv6-m",357 .llvm_name = "armv6-m",
421 .description = "ARMv6m architecture",358 .description = "ARMv6m architecture",
422 .dependencies = featureSet(&[_]Feature{359 .dependencies = sparseFeatureSet(&[_]Feature{
423 .db,360 .db,
424 .mclass,361 .mclass,
425 .noarm,362 .noarm,
...@@ -429,39 +366,31 @@ pub const all_features = blk: {...@@ -429,39 +366,31 @@ pub const all_features = blk: {
429 }),366 }),
430 };367 };
431 result[@enumToInt(Feature.armv6j)] = .{368 result[@enumToInt(Feature.armv6j)] = .{
432 .index = @enumToInt(Feature.armv6j),
433 .name = @tagName(Feature.armv6j),
434 .llvm_name = "armv6j",369 .llvm_name = "armv6j",
435 .description = "ARMv7a architecture",370 .description = "ARMv7a architecture",
436 .dependencies = featureSet(&[_]Feature{371 .dependencies = sparseFeatureSet(&[_]Feature{
437 .armv6,372 .armv6,
438 }),373 }),
439 };374 };
440 result[@enumToInt(Feature.armv6k)] = .{375 result[@enumToInt(Feature.armv6k)] = .{
441 .index = @enumToInt(Feature.armv6k),
442 .name = @tagName(Feature.armv6k),
443 .llvm_name = "armv6k",376 .llvm_name = "armv6k",
444 .description = "ARMv6k architecture",377 .description = "ARMv6k architecture",
445 .dependencies = featureSet(&[_]Feature{378 .dependencies = sparseFeatureSet(&[_]Feature{
446 .v6k,379 .v6k,
447 }),380 }),
448 };381 };
449 result[@enumToInt(Feature.armv6kz)] = .{382 result[@enumToInt(Feature.armv6kz)] = .{
450 .index = @enumToInt(Feature.armv6kz),
451 .name = @tagName(Feature.armv6kz),
452 .llvm_name = "armv6kz",383 .llvm_name = "armv6kz",
453 .description = "ARMv6kz architecture",384 .description = "ARMv6kz architecture",
454 .dependencies = featureSet(&[_]Feature{385 .dependencies = sparseFeatureSet(&[_]Feature{
455 .trustzone,386 .trustzone,
456 .v6k,387 .v6k,
457 }),388 }),
458 };389 };
459 result[@enumToInt(Feature.armv6s_m)] = .{390 result[@enumToInt(Feature.armv6s_m)] = .{
460 .index = @enumToInt(Feature.armv6s_m),
461 .name = @tagName(Feature.armv6s_m),
462 .llvm_name = "armv6s-m",391 .llvm_name = "armv6s-m",
463 .description = "ARMv6sm architecture",392 .description = "ARMv6sm architecture",
464 .dependencies = featureSet(&[_]Feature{393 .dependencies = sparseFeatureSet(&[_]Feature{
465 .db,394 .db,
466 .mclass,395 .mclass,
467 .noarm,396 .noarm,
...@@ -471,21 +400,17 @@ pub const all_features = blk: {...@@ -471,21 +400,17 @@ pub const all_features = blk: {
471 }),400 }),
472 };401 };
473 result[@enumToInt(Feature.armv6t2)] = .{402 result[@enumToInt(Feature.armv6t2)] = .{
474 .index = @enumToInt(Feature.armv6t2),
475 .name = @tagName(Feature.armv6t2),
476 .llvm_name = "armv6t2",403 .llvm_name = "armv6t2",
477 .description = "ARMv6t2 architecture",404 .description = "ARMv6t2 architecture",
478 .dependencies = featureSet(&[_]Feature{405 .dependencies = sparseFeatureSet(&[_]Feature{
479 .dsp,406 .dsp,
480 .v6t2,407 .v6t2,
481 }),408 }),
482 };409 };
483 result[@enumToInt(Feature.armv7_a)] = .{410 result[@enumToInt(Feature.armv7_a)] = .{
484 .index = @enumToInt(Feature.armv7_a),
485 .name = @tagName(Feature.armv7_a),
486 .llvm_name = "armv7-a",411 .llvm_name = "armv7-a",
487 .description = "ARMv7a architecture",412 .description = "ARMv7a architecture",
488 .dependencies = featureSet(&[_]Feature{413 .dependencies = sparseFeatureSet(&[_]Feature{
489 .aclass,414 .aclass,
490 .db,415 .db,
491 .dsp,416 .dsp,
...@@ -494,11 +419,9 @@ pub const all_features = blk: {...@@ -494,11 +419,9 @@ pub const all_features = blk: {
494 }),419 }),
495 };420 };
496 result[@enumToInt(Feature.armv7_m)] = .{421 result[@enumToInt(Feature.armv7_m)] = .{
497 .index = @enumToInt(Feature.armv7_m),
498 .name = @tagName(Feature.armv7_m),
499 .llvm_name = "armv7-m",422 .llvm_name = "armv7-m",
500 .description = "ARMv7m architecture",423 .description = "ARMv7m architecture",
501 .dependencies = featureSet(&[_]Feature{424 .dependencies = sparseFeatureSet(&[_]Feature{
502 .db,425 .db,
503 .hwdiv,426 .hwdiv,
504 .mclass,427 .mclass,
...@@ -509,11 +432,9 @@ pub const all_features = blk: {...@@ -509,11 +432,9 @@ pub const all_features = blk: {
509 }),432 }),
510 };433 };
511 result[@enumToInt(Feature.armv7_r)] = .{434 result[@enumToInt(Feature.armv7_r)] = .{
512 .index = @enumToInt(Feature.armv7_r),
513 .name = @tagName(Feature.armv7_r),
514 .llvm_name = "armv7-r",435 .llvm_name = "armv7-r",
515 .description = "ARMv7r architecture",436 .description = "ARMv7r architecture",
516 .dependencies = featureSet(&[_]Feature{437 .dependencies = sparseFeatureSet(&[_]Feature{
517 .db,438 .db,
518 .dsp,439 .dsp,
519 .hwdiv,440 .hwdiv,
...@@ -522,11 +443,9 @@ pub const all_features = blk: {...@@ -522,11 +443,9 @@ pub const all_features = blk: {
522 }),443 }),
523 };444 };
524 result[@enumToInt(Feature.armv7e_m)] = .{445 result[@enumToInt(Feature.armv7e_m)] = .{
525 .index = @enumToInt(Feature.armv7e_m),
526 .name = @tagName(Feature.armv7e_m),
527 .llvm_name = "armv7e-m",446 .llvm_name = "armv7e-m",
528 .description = "ARMv7em architecture",447 .description = "ARMv7em architecture",
529 .dependencies = featureSet(&[_]Feature{448 .dependencies = sparseFeatureSet(&[_]Feature{
530 .db,449 .db,
531 .dsp,450 .dsp,
532 .hwdiv,451 .hwdiv,
...@@ -538,29 +457,23 @@ pub const all_features = blk: {...@@ -538,29 +457,23 @@ pub const all_features = blk: {
538 }),457 }),
539 };458 };
540 result[@enumToInt(Feature.armv7k)] = .{459 result[@enumToInt(Feature.armv7k)] = .{
541 .index = @enumToInt(Feature.armv7k),
542 .name = @tagName(Feature.armv7k),
543 .llvm_name = "armv7k",460 .llvm_name = "armv7k",
544 .description = "ARMv7a architecture",461 .description = "ARMv7a architecture",
545 .dependencies = featureSet(&[_]Feature{462 .dependencies = sparseFeatureSet(&[_]Feature{
546 .armv7_a,463 .armv7_a,
547 }),464 }),
548 };465 };
549 result[@enumToInt(Feature.armv7s)] = .{466 result[@enumToInt(Feature.armv7s)] = .{
550 .index = @enumToInt(Feature.armv7s),
551 .name = @tagName(Feature.armv7s),
552 .llvm_name = "armv7s",467 .llvm_name = "armv7s",
553 .description = "ARMv7a architecture",468 .description = "ARMv7a architecture",
554 .dependencies = featureSet(&[_]Feature{469 .dependencies = sparseFeatureSet(&[_]Feature{
555 .armv7_a,470 .armv7_a,
556 }),471 }),
557 };472 };
558 result[@enumToInt(Feature.armv7ve)] = .{473 result[@enumToInt(Feature.armv7ve)] = .{
559 .index = @enumToInt(Feature.armv7ve),
560 .name = @tagName(Feature.armv7ve),
561 .llvm_name = "armv7ve",474 .llvm_name = "armv7ve",
562 .description = "ARMv7ve architecture",475 .description = "ARMv7ve architecture",
563 .dependencies = featureSet(&[_]Feature{476 .dependencies = sparseFeatureSet(&[_]Feature{
564 .aclass,477 .aclass,
565 .db,478 .db,
566 .dsp,479 .dsp,
...@@ -572,11 +485,9 @@ pub const all_features = blk: {...@@ -572,11 +485,9 @@ pub const all_features = blk: {
572 }),485 }),
573 };486 };
574 result[@enumToInt(Feature.armv8_a)] = .{487 result[@enumToInt(Feature.armv8_a)] = .{
575 .index = @enumToInt(Feature.armv8_a),
576 .name = @tagName(Feature.armv8_a),
577 .llvm_name = "armv8-a",488 .llvm_name = "armv8-a",
578 .description = "ARMv8a architecture",489 .description = "ARMv8a architecture",
579 .dependencies = featureSet(&[_]Feature{490 .dependencies = sparseFeatureSet(&[_]Feature{
580 .aclass,491 .aclass,
581 .crc,492 .crc,
582 .crypto,493 .crypto,
...@@ -591,11 +502,9 @@ pub const all_features = blk: {...@@ -591,11 +502,9 @@ pub const all_features = blk: {
591 }),502 }),
592 };503 };
593 result[@enumToInt(Feature.armv8_m_base)] = .{504 result[@enumToInt(Feature.armv8_m_base)] = .{
594 .index = @enumToInt(Feature.armv8_m_base),
595 .name = @tagName(Feature.armv8_m_base),
596 .llvm_name = "armv8-m.base",505 .llvm_name = "armv8-m.base",
597 .description = "ARMv8mBaseline architecture",506 .description = "ARMv8mBaseline architecture",
598 .dependencies = featureSet(&[_]Feature{507 .dependencies = sparseFeatureSet(&[_]Feature{
599 .@"8msecext",508 .@"8msecext",
600 .acquire_release,509 .acquire_release,
601 .db,510 .db,
...@@ -609,11 +518,9 @@ pub const all_features = blk: {...@@ -609,11 +518,9 @@ pub const all_features = blk: {
609 }),518 }),
610 };519 };
611 result[@enumToInt(Feature.armv8_m_main)] = .{520 result[@enumToInt(Feature.armv8_m_main)] = .{
612 .index = @enumToInt(Feature.armv8_m_main),
613 .name = @tagName(Feature.armv8_m_main),
614 .llvm_name = "armv8-m.main",521 .llvm_name = "armv8-m.main",
615 .description = "ARMv8mMainline architecture",522 .description = "ARMv8mMainline architecture",
616 .dependencies = featureSet(&[_]Feature{523 .dependencies = sparseFeatureSet(&[_]Feature{
617 .@"8msecext",524 .@"8msecext",
618 .acquire_release,525 .acquire_release,
619 .db,526 .db,
...@@ -625,11 +532,9 @@ pub const all_features = blk: {...@@ -625,11 +532,9 @@ pub const all_features = blk: {
625 }),532 }),
626 };533 };
627 result[@enumToInt(Feature.armv8_r)] = .{534 result[@enumToInt(Feature.armv8_r)] = .{
628 .index = @enumToInt(Feature.armv8_r),
629 .name = @tagName(Feature.armv8_r),
630 .llvm_name = "armv8-r",535 .llvm_name = "armv8-r",
631 .description = "ARMv8r architecture",536 .description = "ARMv8r architecture",
632 .dependencies = featureSet(&[_]Feature{537 .dependencies = sparseFeatureSet(&[_]Feature{
633 .crc,538 .crc,
634 .db,539 .db,
635 .dfb,540 .dfb,
...@@ -643,11 +548,9 @@ pub const all_features = blk: {...@@ -643,11 +548,9 @@ pub const all_features = blk: {
643 }),548 }),
644 };549 };
645 result[@enumToInt(Feature.armv8_1_a)] = .{550 result[@enumToInt(Feature.armv8_1_a)] = .{
646 .index = @enumToInt(Feature.armv8_1_a),
647 .name = @tagName(Feature.armv8_1_a),
648 .llvm_name = "armv8.1-a",551 .llvm_name = "armv8.1-a",
649 .description = "ARMv81a architecture",552 .description = "ARMv81a architecture",
650 .dependencies = featureSet(&[_]Feature{553 .dependencies = sparseFeatureSet(&[_]Feature{
651 .aclass,554 .aclass,
652 .crc,555 .crc,
653 .crypto,556 .crypto,
...@@ -662,11 +565,9 @@ pub const all_features = blk: {...@@ -662,11 +565,9 @@ pub const all_features = blk: {
662 }),565 }),
663 };566 };
664 result[@enumToInt(Feature.armv8_1_m_main)] = .{567 result[@enumToInt(Feature.armv8_1_m_main)] = .{
665 .index = @enumToInt(Feature.armv8_1_m_main),
666 .name = @tagName(Feature.armv8_1_m_main),
667 .llvm_name = "armv8.1-m.main",568 .llvm_name = "armv8.1-m.main",
668 .description = "ARMv81mMainline architecture",569 .description = "ARMv81mMainline architecture",
669 .dependencies = featureSet(&[_]Feature{570 .dependencies = sparseFeatureSet(&[_]Feature{
670 .@"8msecext",571 .@"8msecext",
671 .acquire_release,572 .acquire_release,
672 .db,573 .db,
...@@ -680,11 +581,9 @@ pub const all_features = blk: {...@@ -680,11 +581,9 @@ pub const all_features = blk: {
680 }),581 }),
681 };582 };
682 result[@enumToInt(Feature.armv8_2_a)] = .{583 result[@enumToInt(Feature.armv8_2_a)] = .{
683 .index = @enumToInt(Feature.armv8_2_a),
684 .name = @tagName(Feature.armv8_2_a),
685 .llvm_name = "armv8.2-a",584 .llvm_name = "armv8.2-a",
686 .description = "ARMv82a architecture",585 .description = "ARMv82a architecture",
687 .dependencies = featureSet(&[_]Feature{586 .dependencies = sparseFeatureSet(&[_]Feature{
688 .aclass,587 .aclass,
689 .crc,588 .crc,
690 .crypto,589 .crypto,
...@@ -700,11 +599,9 @@ pub const all_features = blk: {...@@ -700,11 +599,9 @@ pub const all_features = blk: {
700 }),599 }),
701 };600 };
702 result[@enumToInt(Feature.armv8_3_a)] = .{601 result[@enumToInt(Feature.armv8_3_a)] = .{
703 .index = @enumToInt(Feature.armv8_3_a),
704 .name = @tagName(Feature.armv8_3_a),
705 .llvm_name = "armv8.3-a",602 .llvm_name = "armv8.3-a",
706 .description = "ARMv83a architecture",603 .description = "ARMv83a architecture",
707 .dependencies = featureSet(&[_]Feature{604 .dependencies = sparseFeatureSet(&[_]Feature{
708 .aclass,605 .aclass,
709 .crc,606 .crc,
710 .crypto,607 .crypto,
...@@ -720,11 +617,9 @@ pub const all_features = blk: {...@@ -720,11 +617,9 @@ pub const all_features = blk: {
720 }),617 }),
721 };618 };
722 result[@enumToInt(Feature.armv8_4_a)] = .{619 result[@enumToInt(Feature.armv8_4_a)] = .{
723 .index = @enumToInt(Feature.armv8_4_a),
724 .name = @tagName(Feature.armv8_4_a),
725 .llvm_name = "armv8.4-a",620 .llvm_name = "armv8.4-a",
726 .description = "ARMv84a architecture",621 .description = "ARMv84a architecture",
727 .dependencies = featureSet(&[_]Feature{622 .dependencies = sparseFeatureSet(&[_]Feature{
728 .aclass,623 .aclass,
729 .crc,624 .crc,
730 .crypto,625 .crypto,
...@@ -741,11 +636,9 @@ pub const all_features = blk: {...@@ -741,11 +636,9 @@ pub const all_features = blk: {
741 }),636 }),
742 };637 };
743 result[@enumToInt(Feature.armv8_5_a)] = .{638 result[@enumToInt(Feature.armv8_5_a)] = .{
744 .index = @enumToInt(Feature.armv8_5_a),
745 .name = @tagName(Feature.armv8_5_a),
746 .llvm_name = "armv8.5-a",639 .llvm_name = "armv8.5-a",
747 .description = "ARMv85a architecture",640 .description = "ARMv85a architecture",
748 .dependencies = featureSet(&[_]Feature{641 .dependencies = sparseFeatureSet(&[_]Feature{
749 .aclass,642 .aclass,
750 .crc,643 .crc,
751 .crypto,644 .crypto,
...@@ -762,115 +655,85 @@ pub const all_features = blk: {...@@ -762,115 +655,85 @@ pub const all_features = blk: {
762 }),655 }),
763 };656 };
764 result[@enumToInt(Feature.avoid_movs_shop)] = .{657 result[@enumToInt(Feature.avoid_movs_shop)] = .{
765 .index = @enumToInt(Feature.avoid_movs_shop),
766 .name = @tagName(Feature.avoid_movs_shop),
767 .llvm_name = "avoid-movs-shop",658 .llvm_name = "avoid-movs-shop",
768 .description = "Avoid movs instructions with shifter operand",659 .description = "Avoid movs instructions with shifter operand",
769 .dependencies = featureSet(&[_]Feature{}),660 .dependencies = sparseFeatureSet(&[_]Feature{}),
770 };661 };
771 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{662 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{
772 .index = @enumToInt(Feature.avoid_partial_cpsr),
773 .name = @tagName(Feature.avoid_partial_cpsr),
774 .llvm_name = "avoid-partial-cpsr",663 .llvm_name = "avoid-partial-cpsr",
775 .description = "Avoid CPSR partial update for OOO execution",664 .description = "Avoid CPSR partial update for OOO execution",
776 .dependencies = featureSet(&[_]Feature{}),665 .dependencies = sparseFeatureSet(&[_]Feature{}),
777 };666 };
778 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{667 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
779 .index = @enumToInt(Feature.cheap_predicable_cpsr),
780 .name = @tagName(Feature.cheap_predicable_cpsr),
781 .llvm_name = "cheap-predicable-cpsr",668 .llvm_name = "cheap-predicable-cpsr",
782 .description = "Disable +1 predication cost for instructions updating CPSR",669 .description = "Disable +1 predication cost for instructions updating CPSR",
783 .dependencies = featureSet(&[_]Feature{}),670 .dependencies = sparseFeatureSet(&[_]Feature{}),
784 };671 };
785 result[@enumToInt(Feature.crc)] = .{672 result[@enumToInt(Feature.crc)] = .{
786 .index = @enumToInt(Feature.crc),
787 .name = @tagName(Feature.crc),
788 .llvm_name = "crc",673 .llvm_name = "crc",
789 .description = "Enable support for CRC instructions",674 .description = "Enable support for CRC instructions",
790 .dependencies = featureSet(&[_]Feature{}),675 .dependencies = sparseFeatureSet(&[_]Feature{}),
791 };676 };
792 result[@enumToInt(Feature.crypto)] = .{677 result[@enumToInt(Feature.crypto)] = .{
793 .index = @enumToInt(Feature.crypto),
794 .name = @tagName(Feature.crypto),
795 .llvm_name = "crypto",678 .llvm_name = "crypto",
796 .description = "Enable support for Cryptography extensions",679 .description = "Enable support for Cryptography extensions",
797 .dependencies = featureSet(&[_]Feature{680 .dependencies = sparseFeatureSet(&[_]Feature{
798 .aes,681 .aes,
799 .neon,682 .neon,
800 .sha2,683 .sha2,
801 }),684 }),
802 };685 };
803 result[@enumToInt(Feature.d32)] = .{686 result[@enumToInt(Feature.d32)] = .{
804 .index = @enumToInt(Feature.d32),
805 .name = @tagName(Feature.d32),
806 .llvm_name = "d32",687 .llvm_name = "d32",
807 .description = "Extend FP to 32 double registers",688 .description = "Extend FP to 32 double registers",
808 .dependencies = featureSet(&[_]Feature{}),689 .dependencies = sparseFeatureSet(&[_]Feature{}),
809 };690 };
810 result[@enumToInt(Feature.db)] = .{691 result[@enumToInt(Feature.db)] = .{
811 .index = @enumToInt(Feature.db),
812 .name = @tagName(Feature.db),
813 .llvm_name = "db",692 .llvm_name = "db",
814 .description = "Has data barrier (dmb/dsb) instructions",693 .description = "Has data barrier (dmb/dsb) instructions",
815 .dependencies = featureSet(&[_]Feature{}),694 .dependencies = sparseFeatureSet(&[_]Feature{}),
816 };695 };
817 result[@enumToInt(Feature.dfb)] = .{696 result[@enumToInt(Feature.dfb)] = .{
818 .index = @enumToInt(Feature.dfb),
819 .name = @tagName(Feature.dfb),
820 .llvm_name = "dfb",697 .llvm_name = "dfb",
821 .description = "Has full data barrier (dfb) instruction",698 .description = "Has full data barrier (dfb) instruction",
822 .dependencies = featureSet(&[_]Feature{}),699 .dependencies = sparseFeatureSet(&[_]Feature{}),
823 };700 };
824 result[@enumToInt(Feature.disable_postra_scheduler)] = .{701 result[@enumToInt(Feature.disable_postra_scheduler)] = .{
825 .index = @enumToInt(Feature.disable_postra_scheduler),
826 .name = @tagName(Feature.disable_postra_scheduler),
827 .llvm_name = "disable-postra-scheduler",702 .llvm_name = "disable-postra-scheduler",
828 .description = "Don't schedule again after register allocation",703 .description = "Don't schedule again after register allocation",
829 .dependencies = featureSet(&[_]Feature{}),704 .dependencies = sparseFeatureSet(&[_]Feature{}),
830 };705 };
831 result[@enumToInt(Feature.dont_widen_vmovs)] = .{706 result[@enumToInt(Feature.dont_widen_vmovs)] = .{
832 .index = @enumToInt(Feature.dont_widen_vmovs),
833 .name = @tagName(Feature.dont_widen_vmovs),
834 .llvm_name = "dont-widen-vmovs",707 .llvm_name = "dont-widen-vmovs",
835 .description = "Don't widen VMOVS to VMOVD",708 .description = "Don't widen VMOVS to VMOVD",
836 .dependencies = featureSet(&[_]Feature{}),709 .dependencies = sparseFeatureSet(&[_]Feature{}),
837 };710 };
838 result[@enumToInt(Feature.dotprod)] = .{711 result[@enumToInt(Feature.dotprod)] = .{
839 .index = @enumToInt(Feature.dotprod),
840 .name = @tagName(Feature.dotprod),
841 .llvm_name = "dotprod",712 .llvm_name = "dotprod",
842 .description = "Enable support for dot product instructions",713 .description = "Enable support for dot product instructions",
843 .dependencies = featureSet(&[_]Feature{714 .dependencies = sparseFeatureSet(&[_]Feature{
844 .neon,715 .neon,
845 }),716 }),
846 };717 };
847 result[@enumToInt(Feature.dsp)] = .{718 result[@enumToInt(Feature.dsp)] = .{
848 .index = @enumToInt(Feature.dsp),
849 .name = @tagName(Feature.dsp),
850 .llvm_name = "dsp",719 .llvm_name = "dsp",
851 .description = "Supports DSP instructions in ARM and/or Thumb2",720 .description = "Supports DSP instructions in ARM and/or Thumb2",
852 .dependencies = featureSet(&[_]Feature{}),721 .dependencies = sparseFeatureSet(&[_]Feature{}),
853 };722 };
854 result[@enumToInt(Feature.execute_only)] = .{723 result[@enumToInt(Feature.execute_only)] = .{
855 .index = @enumToInt(Feature.execute_only),
856 .name = @tagName(Feature.execute_only),
857 .llvm_name = "execute-only",724 .llvm_name = "execute-only",
858 .description = "Enable the generation of execute only code.",725 .description = "Enable the generation of execute only code.",
859 .dependencies = featureSet(&[_]Feature{}),726 .dependencies = sparseFeatureSet(&[_]Feature{}),
860 };727 };
861 result[@enumToInt(Feature.expand_fp_mlx)] = .{728 result[@enumToInt(Feature.expand_fp_mlx)] = .{
862 .index = @enumToInt(Feature.expand_fp_mlx),
863 .name = @tagName(Feature.expand_fp_mlx),
864 .llvm_name = "expand-fp-mlx",729 .llvm_name = "expand-fp-mlx",
865 .description = "Expand VFP/NEON MLA/MLS instructions",730 .description = "Expand VFP/NEON MLA/MLS instructions",
866 .dependencies = featureSet(&[_]Feature{}),731 .dependencies = sparseFeatureSet(&[_]Feature{}),
867 };732 };
868 result[@enumToInt(Feature.exynos)] = .{733 result[@enumToInt(Feature.exynos)] = .{
869 .index = @enumToInt(Feature.exynos),
870 .name = @tagName(Feature.exynos),
871 .llvm_name = "exynos",734 .llvm_name = "exynos",
872 .description = "Samsung Exynos processors",735 .description = "Samsung Exynos processors",
873 .dependencies = featureSet(&[_]Feature{736 .dependencies = sparseFeatureSet(&[_]Feature{
874 .crc,737 .crc,
875 .crypto,738 .crypto,
876 .expand_fp_mlx,739 .expand_fp_mlx,
...@@ -891,229 +754,173 @@ pub const all_features = blk: {...@@ -891,229 +754,173 @@ pub const all_features = blk: {
891 }),754 }),
892 };755 };
893 result[@enumToInt(Feature.fp_armv8)] = .{756 result[@enumToInt(Feature.fp_armv8)] = .{
894 .index = @enumToInt(Feature.fp_armv8),
895 .name = @tagName(Feature.fp_armv8),
896 .llvm_name = "fp-armv8",757 .llvm_name = "fp-armv8",
897 .description = "Enable ARMv8 FP",758 .description = "Enable ARMv8 FP",
898 .dependencies = featureSet(&[_]Feature{759 .dependencies = sparseFeatureSet(&[_]Feature{
899 .fp_armv8d16,760 .fp_armv8d16,
900 .fp_armv8sp,761 .fp_armv8sp,
901 .vfp4,762 .vfp4,
902 }),763 }),
903 };764 };
904 result[@enumToInt(Feature.fp_armv8d16)] = .{765 result[@enumToInt(Feature.fp_armv8d16)] = .{
905 .index = @enumToInt(Feature.fp_armv8d16),
906 .name = @tagName(Feature.fp_armv8d16),
907 .llvm_name = "fp-armv8d16",766 .llvm_name = "fp-armv8d16",
908 .description = "Enable ARMv8 FP with only 16 d-registers",767 .description = "Enable ARMv8 FP with only 16 d-registers",
909 .dependencies = featureSet(&[_]Feature{768 .dependencies = sparseFeatureSet(&[_]Feature{
910 .fp_armv8d16sp,769 .fp_armv8d16sp,
911 .fp64,770 .fp64,
912 .vfp4d16,771 .vfp4d16,
913 }),772 }),
914 };773 };
915 result[@enumToInt(Feature.fp_armv8d16sp)] = .{774 result[@enumToInt(Feature.fp_armv8d16sp)] = .{
916 .index = @enumToInt(Feature.fp_armv8d16sp),
917 .name = @tagName(Feature.fp_armv8d16sp),
918 .llvm_name = "fp-armv8d16sp",775 .llvm_name = "fp-armv8d16sp",
919 .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",
920 .dependencies = featureSet(&[_]Feature{777 .dependencies = sparseFeatureSet(&[_]Feature{
921 .vfp4d16sp,778 .vfp4d16sp,
922 }),779 }),
923 };780 };
924 result[@enumToInt(Feature.fp_armv8sp)] = .{781 result[@enumToInt(Feature.fp_armv8sp)] = .{
925 .index = @enumToInt(Feature.fp_armv8sp),
926 .name = @tagName(Feature.fp_armv8sp),
927 .llvm_name = "fp-armv8sp",782 .llvm_name = "fp-armv8sp",
928 .description = "Enable ARMv8 FP with no double precision",783 .description = "Enable ARMv8 FP with no double precision",
929 .dependencies = featureSet(&[_]Feature{784 .dependencies = sparseFeatureSet(&[_]Feature{
930 .d32,785 .d32,
931 .fp_armv8d16sp,786 .fp_armv8d16sp,
932 .vfp4sp,787 .vfp4sp,
933 }),788 }),
934 };789 };
935 result[@enumToInt(Feature.fp16)] = .{790 result[@enumToInt(Feature.fp16)] = .{
936 .index = @enumToInt(Feature.fp16),
937 .name = @tagName(Feature.fp16),
938 .llvm_name = "fp16",791 .llvm_name = "fp16",
939 .description = "Enable half-precision floating point",792 .description = "Enable half-precision floating point",
940 .dependencies = featureSet(&[_]Feature{}),793 .dependencies = sparseFeatureSet(&[_]Feature{}),
941 };794 };
942 result[@enumToInt(Feature.fp16fml)] = .{795 result[@enumToInt(Feature.fp16fml)] = .{
943 .index = @enumToInt(Feature.fp16fml),
944 .name = @tagName(Feature.fp16fml),
945 .llvm_name = "fp16fml",796 .llvm_name = "fp16fml",
946 .description = "Enable full half-precision floating point fml instructions",797 .description = "Enable full half-precision floating point fml instructions",
947 .dependencies = featureSet(&[_]Feature{798 .dependencies = sparseFeatureSet(&[_]Feature{
948 .fullfp16,799 .fullfp16,
949 }),800 }),
950 };801 };
951 result[@enumToInt(Feature.fp64)] = .{802 result[@enumToInt(Feature.fp64)] = .{
952 .index = @enumToInt(Feature.fp64),
953 .name = @tagName(Feature.fp64),
954 .llvm_name = "fp64",803 .llvm_name = "fp64",
955 .description = "Floating point unit supports double precision",804 .description = "Floating point unit supports double precision",
956 .dependencies = featureSet(&[_]Feature{805 .dependencies = sparseFeatureSet(&[_]Feature{
957 .fpregs64,806 .fpregs64,
958 }),807 }),
959 };808 };
960 result[@enumToInt(Feature.fpao)] = .{809 result[@enumToInt(Feature.fpao)] = .{
961 .index = @enumToInt(Feature.fpao),
962 .name = @tagName(Feature.fpao),
963 .llvm_name = "fpao",810 .llvm_name = "fpao",
964 .description = "Enable fast computation of positive address offsets",811 .description = "Enable fast computation of positive address offsets",
965 .dependencies = featureSet(&[_]Feature{}),812 .dependencies = sparseFeatureSet(&[_]Feature{}),
966 };813 };
967 result[@enumToInt(Feature.fpregs)] = .{814 result[@enumToInt(Feature.fpregs)] = .{
968 .index = @enumToInt(Feature.fpregs),
969 .name = @tagName(Feature.fpregs),
970 .llvm_name = "fpregs",815 .llvm_name = "fpregs",
971 .description = "Enable FP registers",816 .description = "Enable FP registers",
972 .dependencies = featureSet(&[_]Feature{}),817 .dependencies = sparseFeatureSet(&[_]Feature{}),
973 };818 };
974 result[@enumToInt(Feature.fpregs16)] = .{819 result[@enumToInt(Feature.fpregs16)] = .{
975 .index = @enumToInt(Feature.fpregs16),
976 .name = @tagName(Feature.fpregs16),
977 .llvm_name = "fpregs16",820 .llvm_name = "fpregs16",
978 .description = "Enable 16-bit FP registers",821 .description = "Enable 16-bit FP registers",
979 .dependencies = featureSet(&[_]Feature{822 .dependencies = sparseFeatureSet(&[_]Feature{
980 .fpregs,823 .fpregs,
981 }),824 }),
982 };825 };
983 result[@enumToInt(Feature.fpregs64)] = .{826 result[@enumToInt(Feature.fpregs64)] = .{
984 .index = @enumToInt(Feature.fpregs64),
985 .name = @tagName(Feature.fpregs64),
986 .llvm_name = "fpregs64",827 .llvm_name = "fpregs64",
987 .description = "Enable 64-bit FP registers",828 .description = "Enable 64-bit FP registers",
988 .dependencies = featureSet(&[_]Feature{829 .dependencies = sparseFeatureSet(&[_]Feature{
989 .fpregs,830 .fpregs,
990 }),831 }),
991 };832 };
992 result[@enumToInt(Feature.fullfp16)] = .{833 result[@enumToInt(Feature.fullfp16)] = .{
993 .index = @enumToInt(Feature.fullfp16),
994 .name = @tagName(Feature.fullfp16),
995 .llvm_name = "fullfp16",834 .llvm_name = "fullfp16",
996 .description = "Enable full half-precision floating point",835 .description = "Enable full half-precision floating point",
997 .dependencies = featureSet(&[_]Feature{836 .dependencies = sparseFeatureSet(&[_]Feature{
998 .fp_armv8d16sp,837 .fp_armv8d16sp,
999 .fpregs16,838 .fpregs16,
1000 }),839 }),
1001 };840 };
1002 result[@enumToInt(Feature.fuse_aes)] = .{841 result[@enumToInt(Feature.fuse_aes)] = .{
1003 .index = @enumToInt(Feature.fuse_aes),
1004 .name = @tagName(Feature.fuse_aes),
1005 .llvm_name = "fuse-aes",842 .llvm_name = "fuse-aes",
1006 .description = "CPU fuses AES crypto operations",843 .description = "CPU fuses AES crypto operations",
1007 .dependencies = featureSet(&[_]Feature{}),844 .dependencies = sparseFeatureSet(&[_]Feature{}),
1008 };845 };
1009 result[@enumToInt(Feature.fuse_literals)] = .{846 result[@enumToInt(Feature.fuse_literals)] = .{
1010 .index = @enumToInt(Feature.fuse_literals),
1011 .name = @tagName(Feature.fuse_literals),
1012 .llvm_name = "fuse-literals",847 .llvm_name = "fuse-literals",
1013 .description = "CPU fuses literal generation operations",848 .description = "CPU fuses literal generation operations",
1014 .dependencies = featureSet(&[_]Feature{}),849 .dependencies = sparseFeatureSet(&[_]Feature{}),
1015 };850 };
1016 result[@enumToInt(Feature.hwdiv)] = .{851 result[@enumToInt(Feature.hwdiv)] = .{
1017 .index = @enumToInt(Feature.hwdiv),
1018 .name = @tagName(Feature.hwdiv),
1019 .llvm_name = "hwdiv",852 .llvm_name = "hwdiv",
1020 .description = "Enable divide instructions in Thumb",853 .description = "Enable divide instructions in Thumb",
1021 .dependencies = featureSet(&[_]Feature{}),854 .dependencies = sparseFeatureSet(&[_]Feature{}),
1022 };855 };
1023 result[@enumToInt(Feature.hwdiv_arm)] = .{856 result[@enumToInt(Feature.hwdiv_arm)] = .{
1024 .index = @enumToInt(Feature.hwdiv_arm),
1025 .name = @tagName(Feature.hwdiv_arm),
1026 .llvm_name = "hwdiv-arm",857 .llvm_name = "hwdiv-arm",
1027 .description = "Enable divide instructions in ARM mode",858 .description = "Enable divide instructions in ARM mode",
1028 .dependencies = featureSet(&[_]Feature{}),859 .dependencies = sparseFeatureSet(&[_]Feature{}),
1029 };860 };
1030 result[@enumToInt(Feature.iwmmxt)] = .{861 result[@enumToInt(Feature.iwmmxt)] = .{
1031 .index = @enumToInt(Feature.iwmmxt),
1032 .name = @tagName(Feature.iwmmxt),
1033 .llvm_name = "iwmmxt",862 .llvm_name = "iwmmxt",
1034 .description = "ARMv5te architecture",863 .description = "ARMv5te architecture",
1035 .dependencies = featureSet(&[_]Feature{864 .dependencies = sparseFeatureSet(&[_]Feature{
1036 .armv5te,865 .armv5te,
1037 }),866 }),
1038 };867 };
1039 result[@enumToInt(Feature.iwmmxt2)] = .{868 result[@enumToInt(Feature.iwmmxt2)] = .{
1040 .index = @enumToInt(Feature.iwmmxt2),
1041 .name = @tagName(Feature.iwmmxt2),
1042 .llvm_name = "iwmmxt2",869 .llvm_name = "iwmmxt2",
1043 .description = "ARMv5te architecture",870 .description = "ARMv5te architecture",
1044 .dependencies = featureSet(&[_]Feature{871 .dependencies = sparseFeatureSet(&[_]Feature{
1045 .armv5te,872 .armv5te,
1046 }),873 }),
1047 };874 };
1048 result[@enumToInt(Feature.krait)] = .{875 result[@enumToInt(Feature.krait)] = .{
1049 .index = @enumToInt(Feature.krait),
1050 .name = @tagName(Feature.krait),
1051 .llvm_name = "krait",876 .llvm_name = "krait",
1052 .description = "Qualcomm Krait processors",877 .description = "Qualcomm Krait processors",
1053 .dependencies = featureSet(&[_]Feature{}),878 .dependencies = sparseFeatureSet(&[_]Feature{}),
1054 };879 };
1055 result[@enumToInt(Feature.kryo)] = .{880 result[@enumToInt(Feature.kryo)] = .{
1056 .index = @enumToInt(Feature.kryo),
1057 .name = @tagName(Feature.kryo),
1058 .llvm_name = "kryo",881 .llvm_name = "kryo",
1059 .description = "Qualcomm Kryo processors",882 .description = "Qualcomm Kryo processors",
1060 .dependencies = featureSet(&[_]Feature{}),883 .dependencies = sparseFeatureSet(&[_]Feature{}),
1061 };884 };
1062 result[@enumToInt(Feature.lob)] = .{885 result[@enumToInt(Feature.lob)] = .{
1063 .index = @enumToInt(Feature.lob),
1064 .name = @tagName(Feature.lob),
1065 .llvm_name = "lob",886 .llvm_name = "lob",
1066 .description = "Enable Low Overhead Branch extensions",887 .description = "Enable Low Overhead Branch extensions",
1067 .dependencies = featureSet(&[_]Feature{}),888 .dependencies = sparseFeatureSet(&[_]Feature{}),
1068 };889 };
1069 result[@enumToInt(Feature.long_calls)] = .{890 result[@enumToInt(Feature.long_calls)] = .{
1070 .index = @enumToInt(Feature.long_calls),
1071 .name = @tagName(Feature.long_calls),
1072 .llvm_name = "long-calls",891 .llvm_name = "long-calls",
1073 .description = "Generate calls via indirect call instructions",892 .description = "Generate calls via indirect call instructions",
1074 .dependencies = featureSet(&[_]Feature{}),893 .dependencies = sparseFeatureSet(&[_]Feature{}),
1075 };894 };
1076 result[@enumToInt(Feature.loop_align)] = .{895 result[@enumToInt(Feature.loop_align)] = .{
1077 .index = @enumToInt(Feature.loop_align),
1078 .name = @tagName(Feature.loop_align),
1079 .llvm_name = "loop-align",896 .llvm_name = "loop-align",
1080 .description = "Prefer 32-bit alignment for loops",897 .description = "Prefer 32-bit alignment for loops",
1081 .dependencies = featureSet(&[_]Feature{}),898 .dependencies = sparseFeatureSet(&[_]Feature{}),
1082 };899 };
1083 result[@enumToInt(Feature.m3)] = .{900 result[@enumToInt(Feature.m3)] = .{
1084 .index = @enumToInt(Feature.m3),
1085 .name = @tagName(Feature.m3),
1086 .llvm_name = "m3",901 .llvm_name = "m3",
1087 .description = "Cortex-M3 ARM processors",902 .description = "Cortex-M3 ARM processors",
1088 .dependencies = featureSet(&[_]Feature{}),903 .dependencies = sparseFeatureSet(&[_]Feature{}),
1089 };904 };
1090 result[@enumToInt(Feature.mclass)] = .{905 result[@enumToInt(Feature.mclass)] = .{
1091 .index = @enumToInt(Feature.mclass),
1092 .name = @tagName(Feature.mclass),
1093 .llvm_name = "mclass",906 .llvm_name = "mclass",
1094 .description = "Is microcontroller profile ('M' series)",907 .description = "Is microcontroller profile ('M' series)",
1095 .dependencies = featureSet(&[_]Feature{}),908 .dependencies = sparseFeatureSet(&[_]Feature{}),
1096 };909 };
1097 result[@enumToInt(Feature.mp)] = .{910 result[@enumToInt(Feature.mp)] = .{
1098 .index = @enumToInt(Feature.mp),
1099 .name = @tagName(Feature.mp),
1100 .llvm_name = "mp",911 .llvm_name = "mp",
1101 .description = "Supports Multiprocessing extension",912 .description = "Supports Multiprocessing extension",
1102 .dependencies = featureSet(&[_]Feature{}),913 .dependencies = sparseFeatureSet(&[_]Feature{}),
1103 };914 };
1104 result[@enumToInt(Feature.muxed_units)] = .{915 result[@enumToInt(Feature.muxed_units)] = .{
1105 .index = @enumToInt(Feature.muxed_units),
1106 .name = @tagName(Feature.muxed_units),
1107 .llvm_name = "muxed-units",916 .llvm_name = "muxed-units",
1108 .description = "Has muxed AGU and NEON/FPU",917 .description = "Has muxed AGU and NEON/FPU",
1109 .dependencies = featureSet(&[_]Feature{}),918 .dependencies = sparseFeatureSet(&[_]Feature{}),
1110 };919 };
1111 result[@enumToInt(Feature.mve)] = .{920 result[@enumToInt(Feature.mve)] = .{
1112 .index = @enumToInt(Feature.mve),
1113 .name = @tagName(Feature.mve),
1114 .llvm_name = "mve",921 .llvm_name = "mve",
1115 .description = "Support M-Class Vector Extension with integer ops",922 .description = "Support M-Class Vector Extension with integer ops",
1116 .dependencies = featureSet(&[_]Feature{923 .dependencies = sparseFeatureSet(&[_]Feature{
1117 .dsp,924 .dsp,
1118 .fpregs16,925 .fpregs16,
1119 .fpregs64,926 .fpregs64,
...@@ -1121,544 +928,410 @@ pub const all_features = blk: {...@@ -1121,544 +928,410 @@ pub const all_features = blk: {
1121 }),928 }),
1122 };929 };
1123 result[@enumToInt(Feature.mve_fp)] = .{930 result[@enumToInt(Feature.mve_fp)] = .{
1124 .index = @enumToInt(Feature.mve_fp),
1125 .name = @tagName(Feature.mve_fp),
1126 .llvm_name = "mve.fp",931 .llvm_name = "mve.fp",
1127 .description = "Support M-Class Vector Extension with integer and floating ops",932 .description = "Support M-Class Vector Extension with integer and floating ops",
1128 .dependencies = featureSet(&[_]Feature{933 .dependencies = sparseFeatureSet(&[_]Feature{
1129 .fp_armv8d16sp,934 .fp_armv8d16sp,
1130 .fullfp16,935 .fullfp16,
1131 .mve,936 .mve,
1132 }),937 }),
1133 };938 };
1134 result[@enumToInt(Feature.nacl_trap)] = .{939 result[@enumToInt(Feature.nacl_trap)] = .{
1135 .index = @enumToInt(Feature.nacl_trap),
1136 .name = @tagName(Feature.nacl_trap),
1137 .llvm_name = "nacl-trap",940 .llvm_name = "nacl-trap",
1138 .description = "NaCl trap",941 .description = "NaCl trap",
1139 .dependencies = featureSet(&[_]Feature{}),942 .dependencies = sparseFeatureSet(&[_]Feature{}),
1140 };943 };
1141 result[@enumToInt(Feature.neon)] = .{944 result[@enumToInt(Feature.neon)] = .{
1142 .index = @enumToInt(Feature.neon),
1143 .name = @tagName(Feature.neon),
1144 .llvm_name = "neon",945 .llvm_name = "neon",
1145 .description = "Enable NEON instructions",946 .description = "Enable NEON instructions",
1146 .dependencies = featureSet(&[_]Feature{947 .dependencies = sparseFeatureSet(&[_]Feature{
1147 .vfp3,948 .vfp3,
1148 }),949 }),
1149 };950 };
1150 result[@enumToInt(Feature.neon_fpmovs)] = .{951 result[@enumToInt(Feature.neon_fpmovs)] = .{
1151 .index = @enumToInt(Feature.neon_fpmovs),
1152 .name = @tagName(Feature.neon_fpmovs),
1153 .llvm_name = "neon-fpmovs",952 .llvm_name = "neon-fpmovs",
1154 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",953 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
1155 .dependencies = featureSet(&[_]Feature{}),954 .dependencies = sparseFeatureSet(&[_]Feature{}),
1156 };955 };
1157 result[@enumToInt(Feature.neonfp)] = .{956 result[@enumToInt(Feature.neonfp)] = .{
1158 .index = @enumToInt(Feature.neonfp),
1159 .name = @tagName(Feature.neonfp),
1160 .llvm_name = "neonfp",957 .llvm_name = "neonfp",
1161 .description = "Use NEON for single precision FP",958 .description = "Use NEON for single precision FP",
1162 .dependencies = featureSet(&[_]Feature{}),959 .dependencies = sparseFeatureSet(&[_]Feature{}),
1163 };960 };
1164 result[@enumToInt(Feature.no_branch_predictor)] = .{961 result[@enumToInt(Feature.no_branch_predictor)] = .{
1165 .index = @enumToInt(Feature.no_branch_predictor),
1166 .name = @tagName(Feature.no_branch_predictor),
1167 .llvm_name = "no-branch-predictor",962 .llvm_name = "no-branch-predictor",
1168 .description = "Has no branch predictor",963 .description = "Has no branch predictor",
1169 .dependencies = featureSet(&[_]Feature{}),964 .dependencies = sparseFeatureSet(&[_]Feature{}),
1170 };965 };
1171 result[@enumToInt(Feature.no_movt)] = .{966 result[@enumToInt(Feature.no_movt)] = .{
1172 .index = @enumToInt(Feature.no_movt),
1173 .name = @tagName(Feature.no_movt),
1174 .llvm_name = "no-movt",967 .llvm_name = "no-movt",
1175 .description = "Don't use movt/movw pairs for 32-bit imms",968 .description = "Don't use movt/movw pairs for 32-bit imms",
1176 .dependencies = featureSet(&[_]Feature{}),969 .dependencies = sparseFeatureSet(&[_]Feature{}),
1177 };970 };
1178 result[@enumToInt(Feature.no_neg_immediates)] = .{971 result[@enumToInt(Feature.no_neg_immediates)] = .{
1179 .index = @enumToInt(Feature.no_neg_immediates),
1180 .name = @tagName(Feature.no_neg_immediates),
1181 .llvm_name = "no-neg-immediates",972 .llvm_name = "no-neg-immediates",
1182 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",973 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
1183 .dependencies = featureSet(&[_]Feature{}),974 .dependencies = sparseFeatureSet(&[_]Feature{}),
1184 };975 };
1185 result[@enumToInt(Feature.noarm)] = .{976 result[@enumToInt(Feature.noarm)] = .{
1186 .index = @enumToInt(Feature.noarm),
1187 .name = @tagName(Feature.noarm),
1188 .llvm_name = "noarm",977 .llvm_name = "noarm",
1189 .description = "Does not support ARM mode execution",978 .description = "Does not support ARM mode execution",
1190 .dependencies = featureSet(&[_]Feature{}),979 .dependencies = sparseFeatureSet(&[_]Feature{}),
1191 };980 };
1192 result[@enumToInt(Feature.nonpipelined_vfp)] = .{981 result[@enumToInt(Feature.nonpipelined_vfp)] = .{
1193 .index = @enumToInt(Feature.nonpipelined_vfp),
1194 .name = @tagName(Feature.nonpipelined_vfp),
1195 .llvm_name = "nonpipelined-vfp",982 .llvm_name = "nonpipelined-vfp",
1196 .description = "VFP instructions are not pipelined",983 .description = "VFP instructions are not pipelined",
1197 .dependencies = featureSet(&[_]Feature{}),984 .dependencies = sparseFeatureSet(&[_]Feature{}),
1198 };985 };
1199 result[@enumToInt(Feature.perfmon)] = .{986 result[@enumToInt(Feature.perfmon)] = .{
1200 .index = @enumToInt(Feature.perfmon),
1201 .name = @tagName(Feature.perfmon),
1202 .llvm_name = "perfmon",987 .llvm_name = "perfmon",
1203 .description = "Enable support for Performance Monitor extensions",988 .description = "Enable support for Performance Monitor extensions",
1204 .dependencies = featureSet(&[_]Feature{}),989 .dependencies = sparseFeatureSet(&[_]Feature{}),
1205 };990 };
1206 result[@enumToInt(Feature.prefer_ishst)] = .{991 result[@enumToInt(Feature.prefer_ishst)] = .{
1207 .index = @enumToInt(Feature.prefer_ishst),
1208 .name = @tagName(Feature.prefer_ishst),
1209 .llvm_name = "prefer-ishst",992 .llvm_name = "prefer-ishst",
1210 .description = "Prefer ISHST barriers",993 .description = "Prefer ISHST barriers",
1211 .dependencies = featureSet(&[_]Feature{}),994 .dependencies = sparseFeatureSet(&[_]Feature{}),
1212 };995 };
1213 result[@enumToInt(Feature.prefer_vmovsr)] = .{996 result[@enumToInt(Feature.prefer_vmovsr)] = .{
1214 .index = @enumToInt(Feature.prefer_vmovsr),
1215 .name = @tagName(Feature.prefer_vmovsr),
1216 .llvm_name = "prefer-vmovsr",997 .llvm_name = "prefer-vmovsr",
1217 .description = "Prefer VMOVSR",998 .description = "Prefer VMOVSR",
1218 .dependencies = featureSet(&[_]Feature{}),999 .dependencies = sparseFeatureSet(&[_]Feature{}),
1219 };1000 };
1220 result[@enumToInt(Feature.prof_unpr)] = .{1001 result[@enumToInt(Feature.prof_unpr)] = .{
1221 .index = @enumToInt(Feature.prof_unpr),
1222 .name = @tagName(Feature.prof_unpr),
1223 .llvm_name = "prof-unpr",1002 .llvm_name = "prof-unpr",
1224 .description = "Is profitable to unpredicate",1003 .description = "Is profitable to unpredicate",
1225 .dependencies = featureSet(&[_]Feature{}),1004 .dependencies = sparseFeatureSet(&[_]Feature{}),
1226 };1005 };
1227 result[@enumToInt(Feature.r4)] = .{1006 result[@enumToInt(Feature.r4)] = .{
1228 .index = @enumToInt(Feature.r4),
1229 .name = @tagName(Feature.r4),
1230 .llvm_name = "r4",1007 .llvm_name = "r4",
1231 .description = "Cortex-R4 ARM processors",1008 .description = "Cortex-R4 ARM processors",
1232 .dependencies = featureSet(&[_]Feature{}),1009 .dependencies = sparseFeatureSet(&[_]Feature{}),
1233 };1010 };
1234 result[@enumToInt(Feature.r5)] = .{1011 result[@enumToInt(Feature.r5)] = .{
1235 .index = @enumToInt(Feature.r5),
1236 .name = @tagName(Feature.r5),
1237 .llvm_name = "r5",1012 .llvm_name = "r5",
1238 .description = "Cortex-R5 ARM processors",1013 .description = "Cortex-R5 ARM processors",
1239 .dependencies = featureSet(&[_]Feature{}),1014 .dependencies = sparseFeatureSet(&[_]Feature{}),
1240 };1015 };
1241 result[@enumToInt(Feature.r52)] = .{1016 result[@enumToInt(Feature.r52)] = .{
1242 .index = @enumToInt(Feature.r52),
1243 .name = @tagName(Feature.r52),
1244 .llvm_name = "r52",1017 .llvm_name = "r52",
1245 .description = "Cortex-R52 ARM processors",1018 .description = "Cortex-R52 ARM processors",
1246 .dependencies = featureSet(&[_]Feature{}),1019 .dependencies = sparseFeatureSet(&[_]Feature{}),
1247 };1020 };
1248 result[@enumToInt(Feature.r7)] = .{1021 result[@enumToInt(Feature.r7)] = .{
1249 .index = @enumToInt(Feature.r7),
1250 .name = @tagName(Feature.r7),
1251 .llvm_name = "r7",1022 .llvm_name = "r7",
1252 .description = "Cortex-R7 ARM processors",1023 .description = "Cortex-R7 ARM processors",
1253 .dependencies = featureSet(&[_]Feature{}),1024 .dependencies = sparseFeatureSet(&[_]Feature{}),
1254 };1025 };
1255 result[@enumToInt(Feature.ras)] = .{1026 result[@enumToInt(Feature.ras)] = .{
1256 .index = @enumToInt(Feature.ras),
1257 .name = @tagName(Feature.ras),
1258 .llvm_name = "ras",1027 .llvm_name = "ras",
1259 .description = "Enable Reliability, Availability and Serviceability extensions",1028 .description = "Enable Reliability, Availability and Serviceability extensions",
1260 .dependencies = featureSet(&[_]Feature{}),1029 .dependencies = sparseFeatureSet(&[_]Feature{}),
1261 };1030 };
1262 result[@enumToInt(Feature.rclass)] = .{1031 result[@enumToInt(Feature.rclass)] = .{
1263 .index = @enumToInt(Feature.rclass),
1264 .name = @tagName(Feature.rclass),
1265 .llvm_name = "rclass",1032 .llvm_name = "rclass",
1266 .description = "Is realtime profile ('R' series)",1033 .description = "Is realtime profile ('R' series)",
1267 .dependencies = featureSet(&[_]Feature{}),1034 .dependencies = sparseFeatureSet(&[_]Feature{}),
1268 };1035 };
1269 result[@enumToInt(Feature.read_tp_hard)] = .{1036 result[@enumToInt(Feature.read_tp_hard)] = .{
1270 .index = @enumToInt(Feature.read_tp_hard),
1271 .name = @tagName(Feature.read_tp_hard),
1272 .llvm_name = "read-tp-hard",1037 .llvm_name = "read-tp-hard",
1273 .description = "Reading thread pointer from register",1038 .description = "Reading thread pointer from register",
1274 .dependencies = featureSet(&[_]Feature{}),1039 .dependencies = sparseFeatureSet(&[_]Feature{}),
1275 };1040 };
1276 result[@enumToInt(Feature.reserve_r9)] = .{1041 result[@enumToInt(Feature.reserve_r9)] = .{
1277 .index = @enumToInt(Feature.reserve_r9),
1278 .name = @tagName(Feature.reserve_r9),
1279 .llvm_name = "reserve-r9",1042 .llvm_name = "reserve-r9",
1280 .description = "Reserve R9, making it unavailable as GPR",1043 .description = "Reserve R9, making it unavailable as GPR",
1281 .dependencies = featureSet(&[_]Feature{}),1044 .dependencies = sparseFeatureSet(&[_]Feature{}),
1282 };1045 };
1283 result[@enumToInt(Feature.ret_addr_stack)] = .{1046 result[@enumToInt(Feature.ret_addr_stack)] = .{
1284 .index = @enumToInt(Feature.ret_addr_stack),
1285 .name = @tagName(Feature.ret_addr_stack),
1286 .llvm_name = "ret-addr-stack",1047 .llvm_name = "ret-addr-stack",
1287 .description = "Has return address stack",1048 .description = "Has return address stack",
1288 .dependencies = featureSet(&[_]Feature{}),1049 .dependencies = sparseFeatureSet(&[_]Feature{}),
1289 };1050 };
1290 result[@enumToInt(Feature.sb)] = .{1051 result[@enumToInt(Feature.sb)] = .{
1291 .index = @enumToInt(Feature.sb),
1292 .name = @tagName(Feature.sb),
1293 .llvm_name = "sb",1052 .llvm_name = "sb",
1294 .description = "Enable v8.5a Speculation Barrier",1053 .description = "Enable v8.5a Speculation Barrier",
1295 .dependencies = featureSet(&[_]Feature{}),1054 .dependencies = sparseFeatureSet(&[_]Feature{}),
1296 };1055 };
1297 result[@enumToInt(Feature.sha2)] = .{1056 result[@enumToInt(Feature.sha2)] = .{
1298 .index = @enumToInt(Feature.sha2),
1299 .name = @tagName(Feature.sha2),
1300 .llvm_name = "sha2",1057 .llvm_name = "sha2",
1301 .description = "Enable SHA1 and SHA256 support",1058 .description = "Enable SHA1 and SHA256 support",
1302 .dependencies = featureSet(&[_]Feature{1059 .dependencies = sparseFeatureSet(&[_]Feature{
1303 .neon,1060 .neon,
1304 }),1061 }),
1305 };1062 };
1306 result[@enumToInt(Feature.slow_fp_brcc)] = .{1063 result[@enumToInt(Feature.slow_fp_brcc)] = .{
1307 .index = @enumToInt(Feature.slow_fp_brcc),
1308 .name = @tagName(Feature.slow_fp_brcc),
1309 .llvm_name = "slow-fp-brcc",1064 .llvm_name = "slow-fp-brcc",
1310 .description = "FP compare + branch is slow",1065 .description = "FP compare + branch is slow",
1311 .dependencies = featureSet(&[_]Feature{}),1066 .dependencies = sparseFeatureSet(&[_]Feature{}),
1312 };1067 };
1313 result[@enumToInt(Feature.slow_load_D_subreg)] = .{1068 result[@enumToInt(Feature.slow_load_D_subreg)] = .{
1314 .index = @enumToInt(Feature.slow_load_D_subreg),
1315 .name = @tagName(Feature.slow_load_D_subreg),
1316 .llvm_name = "slow-load-D-subreg",1069 .llvm_name = "slow-load-D-subreg",
1317 .description = "Loading into D subregs is slow",1070 .description = "Loading into D subregs is slow",
1318 .dependencies = featureSet(&[_]Feature{}),1071 .dependencies = sparseFeatureSet(&[_]Feature{}),
1319 };1072 };
1320 result[@enumToInt(Feature.slow_odd_reg)] = .{1073 result[@enumToInt(Feature.slow_odd_reg)] = .{
1321 .index = @enumToInt(Feature.slow_odd_reg),
1322 .name = @tagName(Feature.slow_odd_reg),
1323 .llvm_name = "slow-odd-reg",1074 .llvm_name = "slow-odd-reg",
1324 .description = "VLDM/VSTM starting with an odd register is slow",1075 .description = "VLDM/VSTM starting with an odd register is slow",
1325 .dependencies = featureSet(&[_]Feature{}),1076 .dependencies = sparseFeatureSet(&[_]Feature{}),
1326 };1077 };
1327 result[@enumToInt(Feature.slow_vdup32)] = .{1078 result[@enumToInt(Feature.slow_vdup32)] = .{
1328 .index = @enumToInt(Feature.slow_vdup32),
1329 .name = @tagName(Feature.slow_vdup32),
1330 .llvm_name = "slow-vdup32",1079 .llvm_name = "slow-vdup32",
1331 .description = "Has slow VDUP32 - prefer VMOV",1080 .description = "Has slow VDUP32 - prefer VMOV",
1332 .dependencies = featureSet(&[_]Feature{}),1081 .dependencies = sparseFeatureSet(&[_]Feature{}),
1333 };1082 };
1334 result[@enumToInt(Feature.slow_vgetlni32)] = .{1083 result[@enumToInt(Feature.slow_vgetlni32)] = .{
1335 .index = @enumToInt(Feature.slow_vgetlni32),
1336 .name = @tagName(Feature.slow_vgetlni32),
1337 .llvm_name = "slow-vgetlni32",1084 .llvm_name = "slow-vgetlni32",
1338 .description = "Has slow VGETLNi32 - prefer VMOV",1085 .description = "Has slow VGETLNi32 - prefer VMOV",
1339 .dependencies = featureSet(&[_]Feature{}),1086 .dependencies = sparseFeatureSet(&[_]Feature{}),
1340 };1087 };
1341 result[@enumToInt(Feature.slowfpvmlx)] = .{1088 result[@enumToInt(Feature.slowfpvmlx)] = .{
1342 .index = @enumToInt(Feature.slowfpvmlx),
1343 .name = @tagName(Feature.slowfpvmlx),
1344 .llvm_name = "slowfpvmlx",1089 .llvm_name = "slowfpvmlx",
1345 .description = "Disable VFP / NEON MAC instructions",1090 .description = "Disable VFP / NEON MAC instructions",
1346 .dependencies = featureSet(&[_]Feature{}),1091 .dependencies = sparseFeatureSet(&[_]Feature{}),
1347 };1092 };
1348 result[@enumToInt(Feature.soft_float)] = .{1093 result[@enumToInt(Feature.soft_float)] = .{
1349 .index = @enumToInt(Feature.soft_float),
1350 .name = @tagName(Feature.soft_float),
1351 .llvm_name = "soft-float",1094 .llvm_name = "soft-float",
1352 .description = "Use software floating point features.",1095 .description = "Use software floating point features.",
1353 .dependencies = featureSet(&[_]Feature{}),1096 .dependencies = sparseFeatureSet(&[_]Feature{}),
1354 };1097 };
1355 result[@enumToInt(Feature.splat_vfp_neon)] = .{1098 result[@enumToInt(Feature.splat_vfp_neon)] = .{
1356 .index = @enumToInt(Feature.splat_vfp_neon),
1357 .name = @tagName(Feature.splat_vfp_neon),
1358 .llvm_name = "splat-vfp-neon",1099 .llvm_name = "splat-vfp-neon",
1359 .description = "Splat register from VFP to NEON",1100 .description = "Splat register from VFP to NEON",
1360 .dependencies = featureSet(&[_]Feature{1101 .dependencies = sparseFeatureSet(&[_]Feature{
1361 .dont_widen_vmovs,1102 .dont_widen_vmovs,
1362 }),1103 }),
1363 };1104 };
1364 result[@enumToInt(Feature.strict_align)] = .{1105 result[@enumToInt(Feature.strict_align)] = .{
1365 .index = @enumToInt(Feature.strict_align),
1366 .name = @tagName(Feature.strict_align),
1367 .llvm_name = "strict-align",1106 .llvm_name = "strict-align",
1368 .description = "Disallow all unaligned memory access",1107 .description = "Disallow all unaligned memory access",
1369 .dependencies = featureSet(&[_]Feature{}),1108 .dependencies = sparseFeatureSet(&[_]Feature{}),
1370 };1109 };
1371 result[@enumToInt(Feature.swift)] = .{1110 result[@enumToInt(Feature.swift)] = .{
1372 .index = @enumToInt(Feature.swift),
1373 .name = @tagName(Feature.swift),
1374 .llvm_name = "swift",1111 .llvm_name = "swift",
1375 .description = "Swift ARM processors",1112 .description = "Swift ARM processors",
1376 .dependencies = featureSet(&[_]Feature{}),1113 .dependencies = sparseFeatureSet(&[_]Feature{}),
1377 };1114 };
1378 result[@enumToInt(Feature.thumb_mode)] = .{1115 result[@enumToInt(Feature.thumb_mode)] = .{
1379 .index = @enumToInt(Feature.thumb_mode),
1380 .name = @tagName(Feature.thumb_mode),
1381 .llvm_name = "thumb-mode",1116 .llvm_name = "thumb-mode",
1382 .description = "Thumb mode",1117 .description = "Thumb mode",
1383 .dependencies = featureSet(&[_]Feature{}),1118 .dependencies = sparseFeatureSet(&[_]Feature{}),
1384 };1119 };
1385 result[@enumToInt(Feature.thumb2)] = .{1120 result[@enumToInt(Feature.thumb2)] = .{
1386 .index = @enumToInt(Feature.thumb2),
1387 .name = @tagName(Feature.thumb2),
1388 .llvm_name = "thumb2",1121 .llvm_name = "thumb2",
1389 .description = "Enable Thumb2 instructions",1122 .description = "Enable Thumb2 instructions",
1390 .dependencies = featureSet(&[_]Feature{}),1123 .dependencies = sparseFeatureSet(&[_]Feature{}),
1391 };1124 };
1392 result[@enumToInt(Feature.trustzone)] = .{1125 result[@enumToInt(Feature.trustzone)] = .{
1393 .index = @enumToInt(Feature.trustzone),
1394 .name = @tagName(Feature.trustzone),
1395 .llvm_name = "trustzone",1126 .llvm_name = "trustzone",
1396 .description = "Enable support for TrustZone security extensions",1127 .description = "Enable support for TrustZone security extensions",
1397 .dependencies = featureSet(&[_]Feature{}),1128 .dependencies = sparseFeatureSet(&[_]Feature{}),
1398 };1129 };
1399 result[@enumToInt(Feature.use_aa)] = .{1130 result[@enumToInt(Feature.use_aa)] = .{
1400 .index = @enumToInt(Feature.use_aa),
1401 .name = @tagName(Feature.use_aa),
1402 .llvm_name = "use-aa",1131 .llvm_name = "use-aa",
1403 .description = "Use alias analysis during codegen",1132 .description = "Use alias analysis during codegen",
1404 .dependencies = featureSet(&[_]Feature{}),1133 .dependencies = sparseFeatureSet(&[_]Feature{}),
1405 };1134 };
1406 result[@enumToInt(Feature.use_misched)] = .{1135 result[@enumToInt(Feature.use_misched)] = .{
1407 .index = @enumToInt(Feature.use_misched),
1408 .name = @tagName(Feature.use_misched),
1409 .llvm_name = "use-misched",1136 .llvm_name = "use-misched",
1410 .description = "Use the MachineScheduler",1137 .description = "Use the MachineScheduler",
1411 .dependencies = featureSet(&[_]Feature{}),1138 .dependencies = sparseFeatureSet(&[_]Feature{}),
1412 };1139 };
1413 result[@enumToInt(Feature.v4t)] = .{1140 result[@enumToInt(Feature.v4t)] = .{
1414 .index = @enumToInt(Feature.v4t),
1415 .name = @tagName(Feature.v4t),
1416 .llvm_name = "v4t",1141 .llvm_name = "v4t",
1417 .description = "Support ARM v4T instructions",1142 .description = "Support ARM v4T instructions",
1418 .dependencies = featureSet(&[_]Feature{}),1143 .dependencies = sparseFeatureSet(&[_]Feature{}),
1419 };1144 };
1420 result[@enumToInt(Feature.v5t)] = .{1145 result[@enumToInt(Feature.v5t)] = .{
1421 .index = @enumToInt(Feature.v5t),
1422 .name = @tagName(Feature.v5t),
1423 .llvm_name = "v5t",1146 .llvm_name = "v5t",
1424 .description = "Support ARM v5T instructions",1147 .description = "Support ARM v5T instructions",
1425 .dependencies = featureSet(&[_]Feature{1148 .dependencies = sparseFeatureSet(&[_]Feature{
1426 .v4t,1149 .v4t,
1427 }),1150 }),
1428 };1151 };
1429 result[@enumToInt(Feature.v5te)] = .{1152 result[@enumToInt(Feature.v5te)] = .{
1430 .index = @enumToInt(Feature.v5te),
1431 .name = @tagName(Feature.v5te),
1432 .llvm_name = "v5te",1153 .llvm_name = "v5te",
1433 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",1154 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
1434 .dependencies = featureSet(&[_]Feature{1155 .dependencies = sparseFeatureSet(&[_]Feature{
1435 .v5t,1156 .v5t,
1436 }),1157 }),
1437 };1158 };
1438 result[@enumToInt(Feature.v6)] = .{1159 result[@enumToInt(Feature.v6)] = .{
1439 .index = @enumToInt(Feature.v6),
1440 .name = @tagName(Feature.v6),
1441 .llvm_name = "v6",1160 .llvm_name = "v6",
1442 .description = "Support ARM v6 instructions",1161 .description = "Support ARM v6 instructions",
1443 .dependencies = featureSet(&[_]Feature{1162 .dependencies = sparseFeatureSet(&[_]Feature{
1444 .v5te,1163 .v5te,
1445 }),1164 }),
1446 };1165 };
1447 result[@enumToInt(Feature.v6k)] = .{1166 result[@enumToInt(Feature.v6k)] = .{
1448 .index = @enumToInt(Feature.v6k),
1449 .name = @tagName(Feature.v6k),
1450 .llvm_name = "v6k",1167 .llvm_name = "v6k",
1451 .description = "Support ARM v6k instructions",1168 .description = "Support ARM v6k instructions",
1452 .dependencies = featureSet(&[_]Feature{1169 .dependencies = sparseFeatureSet(&[_]Feature{
1453 .v6,1170 .v6,
1454 }),1171 }),
1455 };1172 };
1456 result[@enumToInt(Feature.v6m)] = .{1173 result[@enumToInt(Feature.v6m)] = .{
1457 .index = @enumToInt(Feature.v6m),
1458 .name = @tagName(Feature.v6m),
1459 .llvm_name = "v6m",1174 .llvm_name = "v6m",
1460 .description = "Support ARM v6M instructions",1175 .description = "Support ARM v6M instructions",
1461 .dependencies = featureSet(&[_]Feature{1176 .dependencies = sparseFeatureSet(&[_]Feature{
1462 .v6,1177 .v6,
1463 }),1178 }),
1464 };1179 };
1465 result[@enumToInt(Feature.v6t2)] = .{1180 result[@enumToInt(Feature.v6t2)] = .{
1466 .index = @enumToInt(Feature.v6t2),
1467 .name = @tagName(Feature.v6t2),
1468 .llvm_name = "v6t2",1181 .llvm_name = "v6t2",
1469 .description = "Support ARM v6t2 instructions",1182 .description = "Support ARM v6t2 instructions",
1470 .dependencies = featureSet(&[_]Feature{1183 .dependencies = sparseFeatureSet(&[_]Feature{
1471 .thumb2,1184 .thumb2,
1472 .v6k,1185 .v6k,
1473 .v8m,1186 .v8m,
1474 }),1187 }),
1475 };1188 };
1476 result[@enumToInt(Feature.v7)] = .{1189 result[@enumToInt(Feature.v7)] = .{
1477 .index = @enumToInt(Feature.v7),
1478 .name = @tagName(Feature.v7),
1479 .llvm_name = "v7",1190 .llvm_name = "v7",
1480 .description = "Support ARM v7 instructions",1191 .description = "Support ARM v7 instructions",
1481 .dependencies = featureSet(&[_]Feature{1192 .dependencies = sparseFeatureSet(&[_]Feature{
1482 .perfmon,1193 .perfmon,
1483 .v6t2,1194 .v6t2,
1484 .v7clrex,1195 .v7clrex,
1485 }),1196 }),
1486 };1197 };
1487 result[@enumToInt(Feature.v7clrex)] = .{1198 result[@enumToInt(Feature.v7clrex)] = .{
1488 .index = @enumToInt(Feature.v7clrex),
1489 .name = @tagName(Feature.v7clrex),
1490 .llvm_name = "v7clrex",1199 .llvm_name = "v7clrex",
1491 .description = "Has v7 clrex instruction",1200 .description = "Has v7 clrex instruction",
1492 .dependencies = featureSet(&[_]Feature{}),1201 .dependencies = sparseFeatureSet(&[_]Feature{}),
1493 };1202 };
1494 result[@enumToInt(Feature.v8)] = .{1203 result[@enumToInt(Feature.v8)] = .{
1495 .index = @enumToInt(Feature.v8),
1496 .name = @tagName(Feature.v8),
1497 .llvm_name = "v8",1204 .llvm_name = "v8",
1498 .description = "Support ARM v8 instructions",1205 .description = "Support ARM v8 instructions",
1499 .dependencies = featureSet(&[_]Feature{1206 .dependencies = sparseFeatureSet(&[_]Feature{
1500 .acquire_release,1207 .acquire_release,
1501 .v7,1208 .v7,
1502 }),1209 }),
1503 };1210 };
1504 result[@enumToInt(Feature.v8_1a)] = .{1211 result[@enumToInt(Feature.v8_1a)] = .{
1505 .index = @enumToInt(Feature.v8_1a),
1506 .name = @tagName(Feature.v8_1a),
1507 .llvm_name = "v8.1a",1212 .llvm_name = "v8.1a",
1508 .description = "Support ARM v8.1a instructions",1213 .description = "Support ARM v8.1a instructions",
1509 .dependencies = featureSet(&[_]Feature{1214 .dependencies = sparseFeatureSet(&[_]Feature{
1510 .v8,1215 .v8,
1511 }),1216 }),
1512 };1217 };
1513 result[@enumToInt(Feature.v8_1m_main)] = .{1218 result[@enumToInt(Feature.v8_1m_main)] = .{
1514 .index = @enumToInt(Feature.v8_1m_main),
1515 .name = @tagName(Feature.v8_1m_main),
1516 .llvm_name = "v8.1m.main",1219 .llvm_name = "v8.1m.main",
1517 .description = "Support ARM v8-1M Mainline instructions",1220 .description = "Support ARM v8-1M Mainline instructions",
1518 .dependencies = featureSet(&[_]Feature{1221 .dependencies = sparseFeatureSet(&[_]Feature{
1519 .v8m_main,1222 .v8m_main,
1520 }),1223 }),
1521 };1224 };
1522 result[@enumToInt(Feature.v8_2a)] = .{1225 result[@enumToInt(Feature.v8_2a)] = .{
1523 .index = @enumToInt(Feature.v8_2a),
1524 .name = @tagName(Feature.v8_2a),
1525 .llvm_name = "v8.2a",1226 .llvm_name = "v8.2a",
1526 .description = "Support ARM v8.2a instructions",1227 .description = "Support ARM v8.2a instructions",
1527 .dependencies = featureSet(&[_]Feature{1228 .dependencies = sparseFeatureSet(&[_]Feature{
1528 .v8_1a,1229 .v8_1a,
1529 }),1230 }),
1530 };1231 };
1531 result[@enumToInt(Feature.v8_3a)] = .{1232 result[@enumToInt(Feature.v8_3a)] = .{
1532 .index = @enumToInt(Feature.v8_3a),
1533 .name = @tagName(Feature.v8_3a),
1534 .llvm_name = "v8.3a",1233 .llvm_name = "v8.3a",
1535 .description = "Support ARM v8.3a instructions",1234 .description = "Support ARM v8.3a instructions",
1536 .dependencies = featureSet(&[_]Feature{1235 .dependencies = sparseFeatureSet(&[_]Feature{
1537 .v8_2a,1236 .v8_2a,
1538 }),1237 }),
1539 };1238 };
1540 result[@enumToInt(Feature.v8_4a)] = .{1239 result[@enumToInt(Feature.v8_4a)] = .{
1541 .index = @enumToInt(Feature.v8_4a),
1542 .name = @tagName(Feature.v8_4a),
1543 .llvm_name = "v8.4a",1240 .llvm_name = "v8.4a",
1544 .description = "Support ARM v8.4a instructions",1241 .description = "Support ARM v8.4a instructions",
1545 .dependencies = featureSet(&[_]Feature{1242 .dependencies = sparseFeatureSet(&[_]Feature{
1546 .dotprod,1243 .dotprod,
1547 .v8_3a,1244 .v8_3a,
1548 }),1245 }),
1549 };1246 };
1550 result[@enumToInt(Feature.v8_5a)] = .{1247 result[@enumToInt(Feature.v8_5a)] = .{
1551 .index = @enumToInt(Feature.v8_5a),
1552 .name = @tagName(Feature.v8_5a),
1553 .llvm_name = "v8.5a",1248 .llvm_name = "v8.5a",
1554 .description = "Support ARM v8.5a instructions",1249 .description = "Support ARM v8.5a instructions",
1555 .dependencies = featureSet(&[_]Feature{1250 .dependencies = sparseFeatureSet(&[_]Feature{
1556 .sb,1251 .sb,
1557 .v8_4a,1252 .v8_4a,
1558 }),1253 }),
1559 };1254 };
1560 result[@enumToInt(Feature.v8m)] = .{1255 result[@enumToInt(Feature.v8m)] = .{
1561 .index = @enumToInt(Feature.v8m),
1562 .name = @tagName(Feature.v8m),
1563 .llvm_name = "v8m",1256 .llvm_name = "v8m",
1564 .description = "Support ARM v8M Baseline instructions",1257 .description = "Support ARM v8M Baseline instructions",
1565 .dependencies = featureSet(&[_]Feature{1258 .dependencies = sparseFeatureSet(&[_]Feature{
1566 .v6m,1259 .v6m,
1567 }),1260 }),
1568 };1261 };
1569 result[@enumToInt(Feature.v8m_main)] = .{1262 result[@enumToInt(Feature.v8m_main)] = .{
1570 .index = @enumToInt(Feature.v8m_main),
1571 .name = @tagName(Feature.v8m_main),
1572 .llvm_name = "v8m.main",1263 .llvm_name = "v8m.main",
1573 .description = "Support ARM v8M Mainline instructions",1264 .description = "Support ARM v8M Mainline instructions",
1574 .dependencies = featureSet(&[_]Feature{1265 .dependencies = sparseFeatureSet(&[_]Feature{
1575 .v7,1266 .v7,
1576 }),1267 }),
1577 };1268 };
1578 result[@enumToInt(Feature.vfp2)] = .{1269 result[@enumToInt(Feature.vfp2)] = .{
1579 .index = @enumToInt(Feature.vfp2),
1580 .name = @tagName(Feature.vfp2),
1581 .llvm_name = "vfp2",1270 .llvm_name = "vfp2",
1582 .description = "Enable VFP2 instructions",1271 .description = "Enable VFP2 instructions",
1583 .dependencies = featureSet(&[_]Feature{1272 .dependencies = sparseFeatureSet(&[_]Feature{
1584 .vfp2d16,1273 .vfp2d16,
1585 .vfp2sp,1274 .vfp2sp,
1586 }),1275 }),
1587 };1276 };
1588 result[@enumToInt(Feature.vfp2d16)] = .{1277 result[@enumToInt(Feature.vfp2d16)] = .{
1589 .index = @enumToInt(Feature.vfp2d16),
1590 .name = @tagName(Feature.vfp2d16),
1591 .llvm_name = "vfp2d16",1278 .llvm_name = "vfp2d16",
1592 .description = "Enable VFP2 instructions",1279 .description = "Enable VFP2 instructions",
1593 .dependencies = featureSet(&[_]Feature{1280 .dependencies = sparseFeatureSet(&[_]Feature{
1594 .fp64,1281 .fp64,
1595 .vfp2d16sp,1282 .vfp2d16sp,
1596 }),1283 }),
1597 };1284 };
1598 result[@enumToInt(Feature.vfp2d16sp)] = .{1285 result[@enumToInt(Feature.vfp2d16sp)] = .{
1599 .index = @enumToInt(Feature.vfp2d16sp),
1600 .name = @tagName(Feature.vfp2d16sp),
1601 .llvm_name = "vfp2d16sp",1286 .llvm_name = "vfp2d16sp",
1602 .description = "Enable VFP2 instructions with no double precision",1287 .description = "Enable VFP2 instructions with no double precision",
1603 .dependencies = featureSet(&[_]Feature{1288 .dependencies = sparseFeatureSet(&[_]Feature{
1604 .fpregs,1289 .fpregs,
1605 }),1290 }),
1606 };1291 };
1607 result[@enumToInt(Feature.vfp2sp)] = .{1292 result[@enumToInt(Feature.vfp2sp)] = .{
1608 .index = @enumToInt(Feature.vfp2sp),
1609 .name = @tagName(Feature.vfp2sp),
1610 .llvm_name = "vfp2sp",1293 .llvm_name = "vfp2sp",
1611 .description = "Enable VFP2 instructions with no double precision",1294 .description = "Enable VFP2 instructions with no double precision",
1612 .dependencies = featureSet(&[_]Feature{1295 .dependencies = sparseFeatureSet(&[_]Feature{
1613 .vfp2d16sp,1296 .vfp2d16sp,
1614 }),1297 }),
1615 };1298 };
1616 result[@enumToInt(Feature.vfp3)] = .{1299 result[@enumToInt(Feature.vfp3)] = .{
1617 .index = @enumToInt(Feature.vfp3),
1618 .name = @tagName(Feature.vfp3),
1619 .llvm_name = "vfp3",1300 .llvm_name = "vfp3",
1620 .description = "Enable VFP3 instructions",1301 .description = "Enable VFP3 instructions",
1621 .dependencies = featureSet(&[_]Feature{1302 .dependencies = sparseFeatureSet(&[_]Feature{
1622 .vfp3d16,1303 .vfp3d16,
1623 .vfp3sp,1304 .vfp3sp,
1624 }),1305 }),
1625 };1306 };
1626 result[@enumToInt(Feature.vfp3d16)] = .{1307 result[@enumToInt(Feature.vfp3d16)] = .{
1627 .index = @enumToInt(Feature.vfp3d16),
1628 .name = @tagName(Feature.vfp3d16),
1629 .llvm_name = "vfp3d16",1308 .llvm_name = "vfp3d16",
1630 .description = "Enable VFP3 instructions with only 16 d-registers",1309 .description = "Enable VFP3 instructions with only 16 d-registers",
1631 .dependencies = featureSet(&[_]Feature{1310 .dependencies = sparseFeatureSet(&[_]Feature{
1632 .fp64,1311 .fp64,
1633 .vfp2,1312 .vfp2,
1634 .vfp3d16sp,1313 .vfp3d16sp,
1635 }),1314 }),
1636 };1315 };
1637 result[@enumToInt(Feature.vfp3d16sp)] = .{1316 result[@enumToInt(Feature.vfp3d16sp)] = .{
1638 .index = @enumToInt(Feature.vfp3d16sp),
1639 .name = @tagName(Feature.vfp3d16sp),
1640 .llvm_name = "vfp3d16sp",1317 .llvm_name = "vfp3d16sp",
1641 .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",
1642 .dependencies = featureSet(&[_]Feature{1319 .dependencies = sparseFeatureSet(&[_]Feature{
1643 .vfp2sp,1320 .vfp2sp,
1644 }),1321 }),
1645 };1322 };
1646 result[@enumToInt(Feature.vfp3sp)] = .{1323 result[@enumToInt(Feature.vfp3sp)] = .{
1647 .index = @enumToInt(Feature.vfp3sp),
1648 .name = @tagName(Feature.vfp3sp),
1649 .llvm_name = "vfp3sp",1324 .llvm_name = "vfp3sp",
1650 .description = "Enable VFP3 instructions with no double precision",1325 .description = "Enable VFP3 instructions with no double precision",
1651 .dependencies = featureSet(&[_]Feature{1326 .dependencies = sparseFeatureSet(&[_]Feature{
1652 .d32,1327 .d32,
1653 .vfp3d16sp,1328 .vfp3d16sp,
1654 }),1329 }),
1655 };1330 };
1656 result[@enumToInt(Feature.vfp4)] = .{1331 result[@enumToInt(Feature.vfp4)] = .{
1657 .index = @enumToInt(Feature.vfp4),
1658 .name = @tagName(Feature.vfp4),
1659 .llvm_name = "vfp4",1332 .llvm_name = "vfp4",
1660 .description = "Enable VFP4 instructions",1333 .description = "Enable VFP4 instructions",
1661 .dependencies = featureSet(&[_]Feature{1334 .dependencies = sparseFeatureSet(&[_]Feature{
1662 .fp16,1335 .fp16,
1663 .vfp3,1336 .vfp3,
1664 .vfp4d16,1337 .vfp4d16,
...@@ -1666,11 +1339,9 @@ pub const all_features = blk: {...@@ -1666,11 +1339,9 @@ pub const all_features = blk: {
1666 }),1339 }),
1667 };1340 };
1668 result[@enumToInt(Feature.vfp4d16)] = .{1341 result[@enumToInt(Feature.vfp4d16)] = .{
1669 .index = @enumToInt(Feature.vfp4d16),
1670 .name = @tagName(Feature.vfp4d16),
1671 .llvm_name = "vfp4d16",1342 .llvm_name = "vfp4d16",
1672 .description = "Enable VFP4 instructions with only 16 d-registers",1343 .description = "Enable VFP4 instructions with only 16 d-registers",
1673 .dependencies = featureSet(&[_]Feature{1344 .dependencies = sparseFeatureSet(&[_]Feature{
1674 .fp16,1345 .fp16,
1675 .fp64,1346 .fp64,
1676 .vfp3d16,1347 .vfp3d16,
...@@ -1678,21 +1349,17 @@ pub const all_features = blk: {...@@ -1678,21 +1349,17 @@ pub const all_features = blk: {
1678 }),1349 }),
1679 };1350 };
1680 result[@enumToInt(Feature.vfp4d16sp)] = .{1351 result[@enumToInt(Feature.vfp4d16sp)] = .{
1681 .index = @enumToInt(Feature.vfp4d16sp),
1682 .name = @tagName(Feature.vfp4d16sp),
1683 .llvm_name = "vfp4d16sp",1352 .llvm_name = "vfp4d16sp",
1684 .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",
1685 .dependencies = featureSet(&[_]Feature{1354 .dependencies = sparseFeatureSet(&[_]Feature{
1686 .fp16,1355 .fp16,
1687 .vfp3d16sp,1356 .vfp3d16sp,
1688 }),1357 }),
1689 };1358 };
1690 result[@enumToInt(Feature.vfp4sp)] = .{1359 result[@enumToInt(Feature.vfp4sp)] = .{
1691 .index = @enumToInt(Feature.vfp4sp),
1692 .name = @tagName(Feature.vfp4sp),
1693 .llvm_name = "vfp4sp",1360 .llvm_name = "vfp4sp",
1694 .description = "Enable VFP4 instructions with no double precision",1361 .description = "Enable VFP4 instructions with no double precision",
1695 .dependencies = featureSet(&[_]Feature{1362 .dependencies = sparseFeatureSet(&[_]Feature{
1696 .d32,1363 .d32,
1697 .fp16,1364 .fp16,
1698 .vfp3sp,1365 .vfp3sp,
...@@ -1700,59 +1367,51 @@ pub const all_features = blk: {...@@ -1700,59 +1367,51 @@ pub const all_features = blk: {
1700 }),1367 }),
1701 };1368 };
1702 result[@enumToInt(Feature.virtualization)] = .{1369 result[@enumToInt(Feature.virtualization)] = .{
1703 .index = @enumToInt(Feature.virtualization),
1704 .name = @tagName(Feature.virtualization),
1705 .llvm_name = "virtualization",1370 .llvm_name = "virtualization",
1706 .description = "Supports Virtualization extension",1371 .description = "Supports Virtualization extension",
1707 .dependencies = featureSet(&[_]Feature{1372 .dependencies = sparseFeatureSet(&[_]Feature{
1708 .hwdiv,1373 .hwdiv,
1709 .hwdiv_arm,1374 .hwdiv_arm,
1710 }),1375 }),
1711 };1376 };
1712 result[@enumToInt(Feature.vldn_align)] = .{1377 result[@enumToInt(Feature.vldn_align)] = .{
1713 .index = @enumToInt(Feature.vldn_align),
1714 .name = @tagName(Feature.vldn_align),
1715 .llvm_name = "vldn-align",1378 .llvm_name = "vldn-align",
1716 .description = "Check for VLDn unaligned access",1379 .description = "Check for VLDn unaligned access",
1717 .dependencies = featureSet(&[_]Feature{}),1380 .dependencies = sparseFeatureSet(&[_]Feature{}),
1718 };1381 };
1719 result[@enumToInt(Feature.vmlx_forwarding)] = .{1382 result[@enumToInt(Feature.vmlx_forwarding)] = .{
1720 .index = @enumToInt(Feature.vmlx_forwarding),
1721 .name = @tagName(Feature.vmlx_forwarding),
1722 .llvm_name = "vmlx-forwarding",1383 .llvm_name = "vmlx-forwarding",
1723 .description = "Has multiplier accumulator forwarding",1384 .description = "Has multiplier accumulator forwarding",
1724 .dependencies = featureSet(&[_]Feature{}),1385 .dependencies = sparseFeatureSet(&[_]Feature{}),
1725 };1386 };
1726 result[@enumToInt(Feature.vmlx_hazards)] = .{1387 result[@enumToInt(Feature.vmlx_hazards)] = .{
1727 .index = @enumToInt(Feature.vmlx_hazards),
1728 .name = @tagName(Feature.vmlx_hazards),
1729 .llvm_name = "vmlx-hazards",1388 .llvm_name = "vmlx-hazards",
1730 .description = "Has VMLx hazards",1389 .description = "Has VMLx hazards",
1731 .dependencies = featureSet(&[_]Feature{}),1390 .dependencies = sparseFeatureSet(&[_]Feature{}),
1732 };1391 };
1733 result[@enumToInt(Feature.wide_stride_vfp)] = .{1392 result[@enumToInt(Feature.wide_stride_vfp)] = .{
1734 .index = @enumToInt(Feature.wide_stride_vfp),
1735 .name = @tagName(Feature.wide_stride_vfp),
1736 .llvm_name = "wide-stride-vfp",1393 .llvm_name = "wide-stride-vfp",
1737 .description = "Use a wide stride when allocating VFP registers",1394 .description = "Use a wide stride when allocating VFP registers",
1738 .dependencies = featureSet(&[_]Feature{}),1395 .dependencies = sparseFeatureSet(&[_]Feature{}),
1739 };1396 };
1740 result[@enumToInt(Feature.xscale)] = .{1397 result[@enumToInt(Feature.xscale)] = .{
1741 .index = @enumToInt(Feature.xscale),
1742 .name = @tagName(Feature.xscale),
1743 .llvm_name = "xscale",1398 .llvm_name = "xscale",
1744 .description = "ARMv5te architecture",1399 .description = "ARMv5te architecture",
1745 .dependencies = featureSet(&[_]Feature{1400 .dependencies = sparseFeatureSet(&[_]Feature{
1746 .armv5te,1401 .armv5te,
1747 }),1402 }),
1748 };1403 };
1749 result[@enumToInt(Feature.zcz)] = .{1404 result[@enumToInt(Feature.zcz)] = .{
1750 .index = @enumToInt(Feature.zcz),
1751 .name = @tagName(Feature.zcz),
1752 .llvm_name = "zcz",1405 .llvm_name = "zcz",
1753 .description = "Has zero-cycle zeroing instructions",1406 .description = "Has zero-cycle zeroing instructions",
1754 .dependencies = featureSet(&[_]Feature{}),1407 .dependencies = sparseFeatureSet(&[_]Feature{}),
1755 };1408 };
1409 const ti = @typeInfo(Feature);
1410 for (result) |*elem, i| {
1411 elem.index = i;
1412 elem.name = ti.Enum.fields[i].name;
1413 elem.dependencies.initAsDependencies(i, &result);
1414 }
1756 break :blk result;1415 break :blk result;
1757};1416};
17581417
...@@ -1760,49 +1419,49 @@ pub const cpu = struct {...@@ -1760,49 +1419,49 @@ pub const cpu = struct {
1760 pub const arm1020e = Cpu{1419 pub const arm1020e = Cpu{
1761 .name = "arm1020e",1420 .name = "arm1020e",
1762 .llvm_name = "arm1020e",1421 .llvm_name = "arm1020e",
1763 .features = featureSet(&[_]Feature{1422 .features = featureSet(&all_features, &[_]Feature{
1764 .armv5te,1423 .armv5te,
1765 }),1424 }),
1766 };1425 };
1767 pub const arm1020t = Cpu{1426 pub const arm1020t = Cpu{
1768 .name = "arm1020t",1427 .name = "arm1020t",
1769 .llvm_name = "arm1020t",1428 .llvm_name = "arm1020t",
1770 .features = featureSet(&[_]Feature{1429 .features = featureSet(&all_features, &[_]Feature{
1771 .armv5t,1430 .armv5t,
1772 }),1431 }),
1773 };1432 };
1774 pub const arm1022e = Cpu{1433 pub const arm1022e = Cpu{
1775 .name = "arm1022e",1434 .name = "arm1022e",
1776 .llvm_name = "arm1022e",1435 .llvm_name = "arm1022e",
1777 .features = featureSet(&[_]Feature{1436 .features = featureSet(&all_features, &[_]Feature{
1778 .armv5te,1437 .armv5te,
1779 }),1438 }),
1780 };1439 };
1781 pub const arm10e = Cpu{1440 pub const arm10e = Cpu{
1782 .name = "arm10e",1441 .name = "arm10e",
1783 .llvm_name = "arm10e",1442 .llvm_name = "arm10e",
1784 .features = featureSet(&[_]Feature{1443 .features = featureSet(&all_features, &[_]Feature{
1785 .armv5te,1444 .armv5te,
1786 }),1445 }),
1787 };1446 };
1788 pub const arm10tdmi = Cpu{1447 pub const arm10tdmi = Cpu{
1789 .name = "arm10tdmi",1448 .name = "arm10tdmi",
1790 .llvm_name = "arm10tdmi",1449 .llvm_name = "arm10tdmi",
1791 .features = featureSet(&[_]Feature{1450 .features = featureSet(&all_features, &[_]Feature{
1792 .armv5t,1451 .armv5t,
1793 }),1452 }),
1794 };1453 };
1795 pub const arm1136j_s = Cpu{1454 pub const arm1136j_s = Cpu{
1796 .name = "arm1136j_s",1455 .name = "arm1136j_s",
1797 .llvm_name = "arm1136j-s",1456 .llvm_name = "arm1136j-s",
1798 .features = featureSet(&[_]Feature{1457 .features = featureSet(&all_features, &[_]Feature{
1799 .armv6,1458 .armv6,
1800 }),1459 }),
1801 };1460 };
1802 pub const arm1136jf_s = Cpu{1461 pub const arm1136jf_s = Cpu{
1803 .name = "arm1136jf_s",1462 .name = "arm1136jf_s",
1804 .llvm_name = "arm1136jf-s",1463 .llvm_name = "arm1136jf-s",
1805 .features = featureSet(&[_]Feature{1464 .features = featureSet(&all_features, &[_]Feature{
1806 .armv6,1465 .armv6,
1807 .slowfpvmlx,1466 .slowfpvmlx,
1808 .vfp2,1467 .vfp2,
...@@ -1811,14 +1470,14 @@ pub const cpu = struct {...@@ -1811,14 +1470,14 @@ pub const cpu = struct {
1811 pub const arm1156t2_s = Cpu{1470 pub const arm1156t2_s = Cpu{
1812 .name = "arm1156t2_s",1471 .name = "arm1156t2_s",
1813 .llvm_name = "arm1156t2-s",1472 .llvm_name = "arm1156t2-s",
1814 .features = featureSet(&[_]Feature{1473 .features = featureSet(&all_features, &[_]Feature{
1815 .armv6t2,1474 .armv6t2,
1816 }),1475 }),
1817 };1476 };
1818 pub const arm1156t2f_s = Cpu{1477 pub const arm1156t2f_s = Cpu{
1819 .name = "arm1156t2f_s",1478 .name = "arm1156t2f_s",
1820 .llvm_name = "arm1156t2f-s",1479 .llvm_name = "arm1156t2f-s",
1821 .features = featureSet(&[_]Feature{1480 .features = featureSet(&all_features, &[_]Feature{
1822 .armv6t2,1481 .armv6t2,
1823 .slowfpvmlx,1482 .slowfpvmlx,
1824 .vfp2,1483 .vfp2,
...@@ -1827,21 +1486,21 @@ pub const cpu = struct {...@@ -1827,21 +1486,21 @@ pub const cpu = struct {
1827 pub const arm1176j_s = Cpu{1486 pub const arm1176j_s = Cpu{
1828 .name = "arm1176j_s",1487 .name = "arm1176j_s",
1829 .llvm_name = "arm1176j-s",1488 .llvm_name = "arm1176j-s",
1830 .features = featureSet(&[_]Feature{1489 .features = featureSet(&all_features, &[_]Feature{
1831 .armv6kz,1490 .armv6kz,
1832 }),1491 }),
1833 };1492 };
1834 pub const arm1176jz_s = Cpu{1493 pub const arm1176jz_s = Cpu{
1835 .name = "arm1176jz_s",1494 .name = "arm1176jz_s",
1836 .llvm_name = "arm1176jz-s",1495 .llvm_name = "arm1176jz-s",
1837 .features = featureSet(&[_]Feature{1496 .features = featureSet(&all_features, &[_]Feature{
1838 .armv6kz,1497 .armv6kz,
1839 }),1498 }),
1840 };1499 };
1841 pub const arm1176jzf_s = Cpu{1500 pub const arm1176jzf_s = Cpu{
1842 .name = "arm1176jzf_s",1501 .name = "arm1176jzf_s",
1843 .llvm_name = "arm1176jzf-s",1502 .llvm_name = "arm1176jzf-s",
1844 .features = featureSet(&[_]Feature{1503 .features = featureSet(&all_features, &[_]Feature{
1845 .armv6kz,1504 .armv6kz,
1846 .slowfpvmlx,1505 .slowfpvmlx,
1847 .vfp2,1506 .vfp2,
...@@ -1850,126 +1509,126 @@ pub const cpu = struct {...@@ -1850,126 +1509,126 @@ pub const cpu = struct {
1850 pub const arm710t = Cpu{1509 pub const arm710t = Cpu{
1851 .name = "arm710t",1510 .name = "arm710t",
1852 .llvm_name = "arm710t",1511 .llvm_name = "arm710t",
1853 .features = featureSet(&[_]Feature{1512 .features = featureSet(&all_features, &[_]Feature{
1854 .armv4t,1513 .armv4t,
1855 }),1514 }),
1856 };1515 };
1857 pub const arm720t = Cpu{1516 pub const arm720t = Cpu{
1858 .name = "arm720t",1517 .name = "arm720t",
1859 .llvm_name = "arm720t",1518 .llvm_name = "arm720t",
1860 .features = featureSet(&[_]Feature{1519 .features = featureSet(&all_features, &[_]Feature{
1861 .armv4t,1520 .armv4t,
1862 }),1521 }),
1863 };1522 };
1864 pub const arm7tdmi = Cpu{1523 pub const arm7tdmi = Cpu{
1865 .name = "arm7tdmi",1524 .name = "arm7tdmi",
1866 .llvm_name = "arm7tdmi",1525 .llvm_name = "arm7tdmi",
1867 .features = featureSet(&[_]Feature{1526 .features = featureSet(&all_features, &[_]Feature{
1868 .armv4t,1527 .armv4t,
1869 }),1528 }),
1870 };1529 };
1871 pub const arm7tdmi_s = Cpu{1530 pub const arm7tdmi_s = Cpu{
1872 .name = "arm7tdmi_s",1531 .name = "arm7tdmi_s",
1873 .llvm_name = "arm7tdmi-s",1532 .llvm_name = "arm7tdmi-s",
1874 .features = featureSet(&[_]Feature{1533 .features = featureSet(&all_features, &[_]Feature{
1875 .armv4t,1534 .armv4t,
1876 }),1535 }),
1877 };1536 };
1878 pub const arm8 = Cpu{1537 pub const arm8 = Cpu{
1879 .name = "arm8",1538 .name = "arm8",
1880 .llvm_name = "arm8",1539 .llvm_name = "arm8",
1881 .features = featureSet(&[_]Feature{1540 .features = featureSet(&all_features, &[_]Feature{
1882 .armv4,1541 .armv4,
1883 }),1542 }),
1884 };1543 };
1885 pub const arm810 = Cpu{1544 pub const arm810 = Cpu{
1886 .name = "arm810",1545 .name = "arm810",
1887 .llvm_name = "arm810",1546 .llvm_name = "arm810",
1888 .features = featureSet(&[_]Feature{1547 .features = featureSet(&all_features, &[_]Feature{
1889 .armv4,1548 .armv4,
1890 }),1549 }),
1891 };1550 };
1892 pub const arm9 = Cpu{1551 pub const arm9 = Cpu{
1893 .name = "arm9",1552 .name = "arm9",
1894 .llvm_name = "arm9",1553 .llvm_name = "arm9",
1895 .features = featureSet(&[_]Feature{1554 .features = featureSet(&all_features, &[_]Feature{
1896 .armv4t,1555 .armv4t,
1897 }),1556 }),
1898 };1557 };
1899 pub const arm920 = Cpu{1558 pub const arm920 = Cpu{
1900 .name = "arm920",1559 .name = "arm920",
1901 .llvm_name = "arm920",1560 .llvm_name = "arm920",
1902 .features = featureSet(&[_]Feature{1561 .features = featureSet(&all_features, &[_]Feature{
1903 .armv4t,1562 .armv4t,
1904 }),1563 }),
1905 };1564 };
1906 pub const arm920t = Cpu{1565 pub const arm920t = Cpu{
1907 .name = "arm920t",1566 .name = "arm920t",
1908 .llvm_name = "arm920t",1567 .llvm_name = "arm920t",
1909 .features = featureSet(&[_]Feature{1568 .features = featureSet(&all_features, &[_]Feature{
1910 .armv4t,1569 .armv4t,
1911 }),1570 }),
1912 };1571 };
1913 pub const arm922t = Cpu{1572 pub const arm922t = Cpu{
1914 .name = "arm922t",1573 .name = "arm922t",
1915 .llvm_name = "arm922t",1574 .llvm_name = "arm922t",
1916 .features = featureSet(&[_]Feature{1575 .features = featureSet(&all_features, &[_]Feature{
1917 .armv4t,1576 .armv4t,
1918 }),1577 }),
1919 };1578 };
1920 pub const arm926ej_s = Cpu{1579 pub const arm926ej_s = Cpu{
1921 .name = "arm926ej_s",1580 .name = "arm926ej_s",
1922 .llvm_name = "arm926ej-s",1581 .llvm_name = "arm926ej-s",
1923 .features = featureSet(&[_]Feature{1582 .features = featureSet(&all_features, &[_]Feature{
1924 .armv5te,1583 .armv5te,
1925 }),1584 }),
1926 };1585 };
1927 pub const arm940t = Cpu{1586 pub const arm940t = Cpu{
1928 .name = "arm940t",1587 .name = "arm940t",
1929 .llvm_name = "arm940t",1588 .llvm_name = "arm940t",
1930 .features = featureSet(&[_]Feature{1589 .features = featureSet(&all_features, &[_]Feature{
1931 .armv4t,1590 .armv4t,
1932 }),1591 }),
1933 };1592 };
1934 pub const arm946e_s = Cpu{1593 pub const arm946e_s = Cpu{
1935 .name = "arm946e_s",1594 .name = "arm946e_s",
1936 .llvm_name = "arm946e-s",1595 .llvm_name = "arm946e-s",
1937 .features = featureSet(&[_]Feature{1596 .features = featureSet(&all_features, &[_]Feature{
1938 .armv5te,1597 .armv5te,
1939 }),1598 }),
1940 };1599 };
1941 pub const arm966e_s = Cpu{1600 pub const arm966e_s = Cpu{
1942 .name = "arm966e_s",1601 .name = "arm966e_s",
1943 .llvm_name = "arm966e-s",1602 .llvm_name = "arm966e-s",
1944 .features = featureSet(&[_]Feature{1603 .features = featureSet(&all_features, &[_]Feature{
1945 .armv5te,1604 .armv5te,
1946 }),1605 }),
1947 };1606 };
1948 pub const arm968e_s = Cpu{1607 pub const arm968e_s = Cpu{
1949 .name = "arm968e_s",1608 .name = "arm968e_s",
1950 .llvm_name = "arm968e-s",1609 .llvm_name = "arm968e-s",
1951 .features = featureSet(&[_]Feature{1610 .features = featureSet(&all_features, &[_]Feature{
1952 .armv5te,1611 .armv5te,
1953 }),1612 }),
1954 };1613 };
1955 pub const arm9e = Cpu{1614 pub const arm9e = Cpu{
1956 .name = "arm9e",1615 .name = "arm9e",
1957 .llvm_name = "arm9e",1616 .llvm_name = "arm9e",
1958 .features = featureSet(&[_]Feature{1617 .features = featureSet(&all_features, &[_]Feature{
1959 .armv5te,1618 .armv5te,
1960 }),1619 }),
1961 };1620 };
1962 pub const arm9tdmi = Cpu{1621 pub const arm9tdmi = Cpu{
1963 .name = "arm9tdmi",1622 .name = "arm9tdmi",
1964 .llvm_name = "arm9tdmi",1623 .llvm_name = "arm9tdmi",
1965 .features = featureSet(&[_]Feature{1624 .features = featureSet(&all_features, &[_]Feature{
1966 .armv4t,1625 .armv4t,
1967 }),1626 }),
1968 };1627 };
1969 pub const cortex_a12 = Cpu{1628 pub const cortex_a12 = Cpu{
1970 .name = "cortex_a12",1629 .name = "cortex_a12",
1971 .llvm_name = "cortex-a12",1630 .llvm_name = "cortex-a12",
1972 .features = featureSet(&[_]Feature{1631 .features = featureSet(&all_features, &[_]Feature{
1973 .a12,1632 .a12,
1974 .armv7_a,1633 .armv7_a,
1975 .avoid_partial_cpsr,1634 .avoid_partial_cpsr,
...@@ -1984,7 +1643,7 @@ pub const cpu = struct {...@@ -1984,7 +1643,7 @@ pub const cpu = struct {
1984 pub const cortex_a15 = Cpu{1643 pub const cortex_a15 = Cpu{
1985 .name = "cortex_a15",1644 .name = "cortex_a15",
1986 .llvm_name = "cortex-a15",1645 .llvm_name = "cortex-a15",
1987 .features = featureSet(&[_]Feature{1646 .features = featureSet(&all_features, &[_]Feature{
1988 .a15,1647 .a15,
1989 .armv7_a,1648 .armv7_a,
1990 .avoid_partial_cpsr,1649 .avoid_partial_cpsr,
...@@ -2002,7 +1661,7 @@ pub const cpu = struct {...@@ -2002,7 +1661,7 @@ pub const cpu = struct {
2002 pub const cortex_a17 = Cpu{1661 pub const cortex_a17 = Cpu{
2003 .name = "cortex_a17",1662 .name = "cortex_a17",
2004 .llvm_name = "cortex-a17",1663 .llvm_name = "cortex-a17",
2005 .features = featureSet(&[_]Feature{1664 .features = featureSet(&all_features, &[_]Feature{
2006 .a17,1665 .a17,
2007 .armv7_a,1666 .armv7_a,
2008 .avoid_partial_cpsr,1667 .avoid_partial_cpsr,
...@@ -2017,7 +1676,7 @@ pub const cpu = struct {...@@ -2017,7 +1676,7 @@ pub const cpu = struct {
2017 pub const cortex_a32 = Cpu{1676 pub const cortex_a32 = Cpu{
2018 .name = "cortex_a32",1677 .name = "cortex_a32",
2019 .llvm_name = "cortex-a32",1678 .llvm_name = "cortex-a32",
2020 .features = featureSet(&[_]Feature{1679 .features = featureSet(&all_features, &[_]Feature{
2021 .armv8_a,1680 .armv8_a,
2022 .crc,1681 .crc,
2023 .crypto,1682 .crypto,
...@@ -2028,7 +1687,7 @@ pub const cpu = struct {...@@ -2028,7 +1687,7 @@ pub const cpu = struct {
2028 pub const cortex_a35 = Cpu{1687 pub const cortex_a35 = Cpu{
2029 .name = "cortex_a35",1688 .name = "cortex_a35",
2030 .llvm_name = "cortex-a35",1689 .llvm_name = "cortex-a35",
2031 .features = featureSet(&[_]Feature{1690 .features = featureSet(&all_features, &[_]Feature{
2032 .a35,1691 .a35,
2033 .armv8_a,1692 .armv8_a,
2034 .crc,1693 .crc,
...@@ -2040,7 +1699,7 @@ pub const cpu = struct {...@@ -2040,7 +1699,7 @@ pub const cpu = struct {
2040 pub const cortex_a5 = Cpu{1699 pub const cortex_a5 = Cpu{
2041 .name = "cortex_a5",1700 .name = "cortex_a5",
2042 .llvm_name = "cortex-a5",1701 .llvm_name = "cortex-a5",
2043 .features = featureSet(&[_]Feature{1702 .features = featureSet(&all_features, &[_]Feature{
2044 .a5,1703 .a5,
2045 .armv7_a,1704 .armv7_a,
2046 .mp,1705 .mp,
...@@ -2055,7 +1714,7 @@ pub const cpu = struct {...@@ -2055,7 +1714,7 @@ pub const cpu = struct {
2055 pub const cortex_a53 = Cpu{1714 pub const cortex_a53 = Cpu{
2056 .name = "cortex_a53",1715 .name = "cortex_a53",
2057 .llvm_name = "cortex-a53",1716 .llvm_name = "cortex-a53",
2058 .features = featureSet(&[_]Feature{1717 .features = featureSet(&all_features, &[_]Feature{
2059 .a53,1718 .a53,
2060 .armv8_a,1719 .armv8_a,
2061 .crc,1720 .crc,
...@@ -2068,7 +1727,7 @@ pub const cpu = struct {...@@ -2068,7 +1727,7 @@ pub const cpu = struct {
2068 pub const cortex_a55 = Cpu{1727 pub const cortex_a55 = Cpu{
2069 .name = "cortex_a55",1728 .name = "cortex_a55",
2070 .llvm_name = "cortex-a55",1729 .llvm_name = "cortex-a55",
2071 .features = featureSet(&[_]Feature{1730 .features = featureSet(&all_features, &[_]Feature{
2072 .a55,1731 .a55,
2073 .armv8_2_a,1732 .armv8_2_a,
2074 .dotprod,1733 .dotprod,
...@@ -2079,7 +1738,7 @@ pub const cpu = struct {...@@ -2079,7 +1738,7 @@ pub const cpu = struct {
2079 pub const cortex_a57 = Cpu{1738 pub const cortex_a57 = Cpu{
2080 .name = "cortex_a57",1739 .name = "cortex_a57",
2081 .llvm_name = "cortex-a57",1740 .llvm_name = "cortex-a57",
2082 .features = featureSet(&[_]Feature{1741 .features = featureSet(&all_features, &[_]Feature{
2083 .a57,1742 .a57,
2084 .armv8_a,1743 .armv8_a,
2085 .avoid_partial_cpsr,1744 .avoid_partial_cpsr,
...@@ -2094,7 +1753,7 @@ pub const cpu = struct {...@@ -2094,7 +1753,7 @@ pub const cpu = struct {
2094 pub const cortex_a7 = Cpu{1753 pub const cortex_a7 = Cpu{
2095 .name = "cortex_a7",1754 .name = "cortex_a7",
2096 .llvm_name = "cortex-a7",1755 .llvm_name = "cortex-a7",
2097 .features = featureSet(&[_]Feature{1756 .features = featureSet(&all_features, &[_]Feature{
2098 .a7,1757 .a7,
2099 .armv7_a,1758 .armv7_a,
2100 .mp,1759 .mp,
...@@ -2111,7 +1770,7 @@ pub const cpu = struct {...@@ -2111,7 +1770,7 @@ pub const cpu = struct {
2111 pub const cortex_a72 = Cpu{1770 pub const cortex_a72 = Cpu{
2112 .name = "cortex_a72",1771 .name = "cortex_a72",
2113 .llvm_name = "cortex-a72",1772 .llvm_name = "cortex-a72",
2114 .features = featureSet(&[_]Feature{1773 .features = featureSet(&all_features, &[_]Feature{
2115 .a72,1774 .a72,
2116 .armv8_a,1775 .armv8_a,
2117 .crc,1776 .crc,
...@@ -2123,7 +1782,7 @@ pub const cpu = struct {...@@ -2123,7 +1782,7 @@ pub const cpu = struct {
2123 pub const cortex_a73 = Cpu{1782 pub const cortex_a73 = Cpu{
2124 .name = "cortex_a73",1783 .name = "cortex_a73",
2125 .llvm_name = "cortex-a73",1784 .llvm_name = "cortex-a73",
2126 .features = featureSet(&[_]Feature{1785 .features = featureSet(&all_features, &[_]Feature{
2127 .a73,1786 .a73,
2128 .armv8_a,1787 .armv8_a,
2129 .crc,1788 .crc,
...@@ -2135,7 +1794,7 @@ pub const cpu = struct {...@@ -2135,7 +1794,7 @@ pub const cpu = struct {
2135 pub const cortex_a75 = Cpu{1794 pub const cortex_a75 = Cpu{
2136 .name = "cortex_a75",1795 .name = "cortex_a75",
2137 .llvm_name = "cortex-a75",1796 .llvm_name = "cortex-a75",
2138 .features = featureSet(&[_]Feature{1797 .features = featureSet(&all_features, &[_]Feature{
2139 .a75,1798 .a75,
2140 .armv8_2_a,1799 .armv8_2_a,
2141 .dotprod,1800 .dotprod,
...@@ -2146,7 +1805,7 @@ pub const cpu = struct {...@@ -2146,7 +1805,7 @@ pub const cpu = struct {
2146 pub const cortex_a76 = Cpu{1805 pub const cortex_a76 = Cpu{
2147 .name = "cortex_a76",1806 .name = "cortex_a76",
2148 .llvm_name = "cortex-a76",1807 .llvm_name = "cortex-a76",
2149 .features = featureSet(&[_]Feature{1808 .features = featureSet(&all_features, &[_]Feature{
2150 .a76,1809 .a76,
2151 .armv8_2_a,1810 .armv8_2_a,
2152 .crc,1811 .crc,
...@@ -2160,7 +1819,7 @@ pub const cpu = struct {...@@ -2160,7 +1819,7 @@ pub const cpu = struct {
2160 pub const cortex_a76ae = Cpu{1819 pub const cortex_a76ae = Cpu{
2161 .name = "cortex_a76ae",1820 .name = "cortex_a76ae",
2162 .llvm_name = "cortex-a76ae",1821 .llvm_name = "cortex-a76ae",
2163 .features = featureSet(&[_]Feature{1822 .features = featureSet(&all_features, &[_]Feature{
2164 .a76,1823 .a76,
2165 .armv8_2_a,1824 .armv8_2_a,
2166 .crc,1825 .crc,
...@@ -2174,7 +1833,7 @@ pub const cpu = struct {...@@ -2174,7 +1833,7 @@ pub const cpu = struct {
2174 pub const cortex_a8 = Cpu{1833 pub const cortex_a8 = Cpu{
2175 .name = "cortex_a8",1834 .name = "cortex_a8",
2176 .llvm_name = "cortex-a8",1835 .llvm_name = "cortex-a8",
2177 .features = featureSet(&[_]Feature{1836 .features = featureSet(&all_features, &[_]Feature{
2178 .a8,1837 .a8,
2179 .armv7_a,1838 .armv7_a,
2180 .nonpipelined_vfp,1839 .nonpipelined_vfp,
...@@ -2189,7 +1848,7 @@ pub const cpu = struct {...@@ -2189,7 +1848,7 @@ pub const cpu = struct {
2189 pub const cortex_a9 = Cpu{1848 pub const cortex_a9 = Cpu{
2190 .name = "cortex_a9",1849 .name = "cortex_a9",
2191 .llvm_name = "cortex-a9",1850 .llvm_name = "cortex-a9",
2192 .features = featureSet(&[_]Feature{1851 .features = featureSet(&all_features, &[_]Feature{
2193 .a9,1852 .a9,
2194 .armv7_a,1853 .armv7_a,
2195 .avoid_partial_cpsr,1854 .avoid_partial_cpsr,
...@@ -2209,28 +1868,28 @@ pub const cpu = struct {...@@ -2209,28 +1868,28 @@ pub const cpu = struct {
2209 pub const cortex_m0 = Cpu{1868 pub const cortex_m0 = Cpu{
2210 .name = "cortex_m0",1869 .name = "cortex_m0",
2211 .llvm_name = "cortex-m0",1870 .llvm_name = "cortex-m0",
2212 .features = featureSet(&[_]Feature{1871 .features = featureSet(&all_features, &[_]Feature{
2213 .armv6_m,1872 .armv6_m,
2214 }),1873 }),
2215 };1874 };
2216 pub const cortex_m0plus = Cpu{1875 pub const cortex_m0plus = Cpu{
2217 .name = "cortex_m0plus",1876 .name = "cortex_m0plus",
2218 .llvm_name = "cortex-m0plus",1877 .llvm_name = "cortex-m0plus",
2219 .features = featureSet(&[_]Feature{1878 .features = featureSet(&all_features, &[_]Feature{
2220 .armv6_m,1879 .armv6_m,
2221 }),1880 }),
2222 };1881 };
2223 pub const cortex_m1 = Cpu{1882 pub const cortex_m1 = Cpu{
2224 .name = "cortex_m1",1883 .name = "cortex_m1",
2225 .llvm_name = "cortex-m1",1884 .llvm_name = "cortex-m1",
2226 .features = featureSet(&[_]Feature{1885 .features = featureSet(&all_features, &[_]Feature{
2227 .armv6_m,1886 .armv6_m,
2228 }),1887 }),
2229 };1888 };
2230 pub const cortex_m23 = Cpu{1889 pub const cortex_m23 = Cpu{
2231 .name = "cortex_m23",1890 .name = "cortex_m23",
2232 .llvm_name = "cortex-m23",1891 .llvm_name = "cortex-m23",
2233 .features = featureSet(&[_]Feature{1892 .features = featureSet(&all_features, &[_]Feature{
2234 .armv8_m_base,1893 .armv8_m_base,
2235 .no_movt,1894 .no_movt,
2236 }),1895 }),
...@@ -2238,7 +1897,7 @@ pub const cpu = struct {...@@ -2238,7 +1897,7 @@ pub const cpu = struct {
2238 pub const cortex_m3 = Cpu{1897 pub const cortex_m3 = Cpu{
2239 .name = "cortex_m3",1898 .name = "cortex_m3",
2240 .llvm_name = "cortex-m3",1899 .llvm_name = "cortex-m3",
2241 .features = featureSet(&[_]Feature{1900 .features = featureSet(&all_features, &[_]Feature{
2242 .armv7_m,1901 .armv7_m,
2243 .loop_align,1902 .loop_align,
2244 .m3,1903 .m3,
...@@ -2250,7 +1909,7 @@ pub const cpu = struct {...@@ -2250,7 +1909,7 @@ pub const cpu = struct {
2250 pub const cortex_m33 = Cpu{1909 pub const cortex_m33 = Cpu{
2251 .name = "cortex_m33",1910 .name = "cortex_m33",
2252 .llvm_name = "cortex-m33",1911 .llvm_name = "cortex-m33",
2253 .features = featureSet(&[_]Feature{1912 .features = featureSet(&all_features, &[_]Feature{
2254 .armv8_m_main,1913 .armv8_m_main,
2255 .dsp,1914 .dsp,
2256 .fp_armv8d16sp,1915 .fp_armv8d16sp,
...@@ -2264,7 +1923,7 @@ pub const cpu = struct {...@@ -2264,7 +1923,7 @@ pub const cpu = struct {
2264 pub const cortex_m35p = Cpu{1923 pub const cortex_m35p = Cpu{
2265 .name = "cortex_m35p",1924 .name = "cortex_m35p",
2266 .llvm_name = "cortex-m35p",1925 .llvm_name = "cortex-m35p",
2267 .features = featureSet(&[_]Feature{1926 .features = featureSet(&all_features, &[_]Feature{
2268 .armv8_m_main,1927 .armv8_m_main,
2269 .dsp,1928 .dsp,
2270 .fp_armv8d16sp,1929 .fp_armv8d16sp,
...@@ -2278,7 +1937,7 @@ pub const cpu = struct {...@@ -2278,7 +1937,7 @@ pub const cpu = struct {
2278 pub const cortex_m4 = Cpu{1937 pub const cortex_m4 = Cpu{
2279 .name = "cortex_m4",1938 .name = "cortex_m4",
2280 .llvm_name = "cortex-m4",1939 .llvm_name = "cortex-m4",
2281 .features = featureSet(&[_]Feature{1940 .features = featureSet(&all_features, &[_]Feature{
2282 .armv7e_m,1941 .armv7e_m,
2283 .loop_align,1942 .loop_align,
2284 .no_branch_predictor,1943 .no_branch_predictor,
...@@ -2291,7 +1950,7 @@ pub const cpu = struct {...@@ -2291,7 +1950,7 @@ pub const cpu = struct {
2291 pub const cortex_m7 = Cpu{1950 pub const cortex_m7 = Cpu{
2292 .name = "cortex_m7",1951 .name = "cortex_m7",
2293 .llvm_name = "cortex-m7",1952 .llvm_name = "cortex-m7",
2294 .features = featureSet(&[_]Feature{1953 .features = featureSet(&all_features, &[_]Feature{
2295 .armv7e_m,1954 .armv7e_m,
2296 .fp_armv8d16,1955 .fp_armv8d16,
2297 }),1956 }),
...@@ -2299,7 +1958,7 @@ pub const cpu = struct {...@@ -2299,7 +1958,7 @@ pub const cpu = struct {
2299 pub const cortex_r4 = Cpu{1958 pub const cortex_r4 = Cpu{
2300 .name = "cortex_r4",1959 .name = "cortex_r4",
2301 .llvm_name = "cortex-r4",1960 .llvm_name = "cortex-r4",
2302 .features = featureSet(&[_]Feature{1961 .features = featureSet(&all_features, &[_]Feature{
2303 .armv7_r,1962 .armv7_r,
2304 .avoid_partial_cpsr,1963 .avoid_partial_cpsr,
2305 .r4,1964 .r4,
...@@ -2309,7 +1968,7 @@ pub const cpu = struct {...@@ -2309,7 +1968,7 @@ pub const cpu = struct {
2309 pub const cortex_r4f = Cpu{1968 pub const cortex_r4f = Cpu{
2310 .name = "cortex_r4f",1969 .name = "cortex_r4f",
2311 .llvm_name = "cortex-r4f",1970 .llvm_name = "cortex-r4f",
2312 .features = featureSet(&[_]Feature{1971 .features = featureSet(&all_features, &[_]Feature{
2313 .armv7_r,1972 .armv7_r,
2314 .avoid_partial_cpsr,1973 .avoid_partial_cpsr,
2315 .r4,1974 .r4,
...@@ -2322,7 +1981,7 @@ pub const cpu = struct {...@@ -2322,7 +1981,7 @@ pub const cpu = struct {
2322 pub const cortex_r5 = Cpu{1981 pub const cortex_r5 = Cpu{
2323 .name = "cortex_r5",1982 .name = "cortex_r5",
2324 .llvm_name = "cortex-r5",1983 .llvm_name = "cortex-r5",
2325 .features = featureSet(&[_]Feature{1984 .features = featureSet(&all_features, &[_]Feature{
2326 .armv7_r,1985 .armv7_r,
2327 .avoid_partial_cpsr,1986 .avoid_partial_cpsr,
2328 .hwdiv_arm,1987 .hwdiv_arm,
...@@ -2336,7 +1995,7 @@ pub const cpu = struct {...@@ -2336,7 +1995,7 @@ pub const cpu = struct {
2336 pub const cortex_r52 = Cpu{1995 pub const cortex_r52 = Cpu{
2337 .name = "cortex_r52",1996 .name = "cortex_r52",
2338 .llvm_name = "cortex-r52",1997 .llvm_name = "cortex-r52",
2339 .features = featureSet(&[_]Feature{1998 .features = featureSet(&all_features, &[_]Feature{
2340 .armv8_r,1999 .armv8_r,
2341 .fpao,2000 .fpao,
2342 .r52,2001 .r52,
...@@ -2347,7 +2006,7 @@ pub const cpu = struct {...@@ -2347,7 +2006,7 @@ pub const cpu = struct {
2347 pub const cortex_r7 = Cpu{2006 pub const cortex_r7 = Cpu{
2348 .name = "cortex_r7",2007 .name = "cortex_r7",
2349 .llvm_name = "cortex-r7",2008 .llvm_name = "cortex-r7",
2350 .features = featureSet(&[_]Feature{2009 .features = featureSet(&all_features, &[_]Feature{
2351 .armv7_r,2010 .armv7_r,
2352 .avoid_partial_cpsr,2011 .avoid_partial_cpsr,
2353 .fp16,2012 .fp16,
...@@ -2363,7 +2022,7 @@ pub const cpu = struct {...@@ -2363,7 +2022,7 @@ pub const cpu = struct {
2363 pub const cortex_r8 = Cpu{2022 pub const cortex_r8 = Cpu{
2364 .name = "cortex_r8",2023 .name = "cortex_r8",
2365 .llvm_name = "cortex-r8",2024 .llvm_name = "cortex-r8",
2366 .features = featureSet(&[_]Feature{2025 .features = featureSet(&all_features, &[_]Feature{
2367 .armv7_r,2026 .armv7_r,
2368 .avoid_partial_cpsr,2027 .avoid_partial_cpsr,
2369 .fp16,2028 .fp16,
...@@ -2378,7 +2037,7 @@ pub const cpu = struct {...@@ -2378,7 +2037,7 @@ pub const cpu = struct {
2378 pub const cyclone = Cpu{2037 pub const cyclone = Cpu{
2379 .name = "cyclone",2038 .name = "cyclone",
2380 .llvm_name = "cyclone",2039 .llvm_name = "cyclone",
2381 .features = featureSet(&[_]Feature{2040 .features = featureSet(&all_features, &[_]Feature{
2382 .armv8_a,2041 .armv8_a,
2383 .avoid_movs_shop,2042 .avoid_movs_shop,
2384 .avoid_partial_cpsr,2043 .avoid_partial_cpsr,
...@@ -2399,14 +2058,14 @@ pub const cpu = struct {...@@ -2399,14 +2058,14 @@ pub const cpu = struct {
2399 pub const ep9312 = Cpu{2058 pub const ep9312 = Cpu{
2400 .name = "ep9312",2059 .name = "ep9312",
2401 .llvm_name = "ep9312",2060 .llvm_name = "ep9312",
2402 .features = featureSet(&[_]Feature{2061 .features = featureSet(&all_features, &[_]Feature{
2403 .armv4t,2062 .armv4t,
2404 }),2063 }),
2405 };2064 };
2406 pub const exynos_m1 = Cpu{2065 pub const exynos_m1 = Cpu{
2407 .name = "exynos_m1",2066 .name = "exynos_m1",
2408 .llvm_name = "exynos-m1",2067 .llvm_name = "exynos-m1",
2409 .features = featureSet(&[_]Feature{2068 .features = featureSet(&all_features, &[_]Feature{
2410 .armv8_a,2069 .armv8_a,
2411 .exynos,2070 .exynos,
2412 }),2071 }),
...@@ -2414,7 +2073,7 @@ pub const cpu = struct {...@@ -2414,7 +2073,7 @@ pub const cpu = struct {
2414 pub const exynos_m2 = Cpu{2073 pub const exynos_m2 = Cpu{
2415 .name = "exynos_m2",2074 .name = "exynos_m2",
2416 .llvm_name = "exynos-m2",2075 .llvm_name = "exynos-m2",
2417 .features = featureSet(&[_]Feature{2076 .features = featureSet(&all_features, &[_]Feature{
2418 .armv8_a,2077 .armv8_a,
2419 .exynos,2078 .exynos,
2420 }),2079 }),
...@@ -2422,7 +2081,7 @@ pub const cpu = struct {...@@ -2422,7 +2081,7 @@ pub const cpu = struct {
2422 pub const exynos_m3 = Cpu{2081 pub const exynos_m3 = Cpu{
2423 .name = "exynos_m3",2082 .name = "exynos_m3",
2424 .llvm_name = "exynos-m3",2083 .llvm_name = "exynos-m3",
2425 .features = featureSet(&[_]Feature{2084 .features = featureSet(&all_features, &[_]Feature{
2426 .armv8_a,2085 .armv8_a,
2427 .exynos,2086 .exynos,
2428 }),2087 }),
...@@ -2430,7 +2089,7 @@ pub const cpu = struct {...@@ -2430,7 +2089,7 @@ pub const cpu = struct {
2430 pub const exynos_m4 = Cpu{2089 pub const exynos_m4 = Cpu{
2431 .name = "exynos_m4",2090 .name = "exynos_m4",
2432 .llvm_name = "exynos-m4",2091 .llvm_name = "exynos-m4",
2433 .features = featureSet(&[_]Feature{2092 .features = featureSet(&all_features, &[_]Feature{
2434 .armv8_2_a,2093 .armv8_2_a,
2435 .dotprod,2094 .dotprod,
2436 .exynos,2095 .exynos,
...@@ -2440,7 +2099,7 @@ pub const cpu = struct {...@@ -2440,7 +2099,7 @@ pub const cpu = struct {
2440 pub const exynos_m5 = Cpu{2099 pub const exynos_m5 = Cpu{
2441 .name = "exynos_m5",2100 .name = "exynos_m5",
2442 .llvm_name = "exynos-m5",2101 .llvm_name = "exynos-m5",
2443 .features = featureSet(&[_]Feature{2102 .features = featureSet(&all_features, &[_]Feature{
2444 .armv8_2_a,2103 .armv8_2_a,
2445 .dotprod,2104 .dotprod,
2446 .exynos,2105 .exynos,
...@@ -2450,19 +2109,19 @@ pub const cpu = struct {...@@ -2450,19 +2109,19 @@ pub const cpu = struct {
2450 pub const generic = Cpu{2109 pub const generic = Cpu{
2451 .name = "generic",2110 .name = "generic",
2452 .llvm_name = "generic",2111 .llvm_name = "generic",
2453 .features = featureSet(&[_]Feature{}),2112 .features = featureSet(&all_features, &[_]Feature{}),
2454 };2113 };
2455 pub const iwmmxt = Cpu{2114 pub const iwmmxt = Cpu{
2456 .name = "iwmmxt",2115 .name = "iwmmxt",
2457 .llvm_name = "iwmmxt",2116 .llvm_name = "iwmmxt",
2458 .features = featureSet(&[_]Feature{2117 .features = featureSet(&all_features, &[_]Feature{
2459 .armv5te,2118 .armv5te,
2460 }),2119 }),
2461 };2120 };
2462 pub const krait = Cpu{2121 pub const krait = Cpu{
2463 .name = "krait",2122 .name = "krait",
2464 .llvm_name = "krait",2123 .llvm_name = "krait",
2465 .features = featureSet(&[_]Feature{2124 .features = featureSet(&all_features, &[_]Feature{
2466 .armv7_a,2125 .armv7_a,
2467 .avoid_partial_cpsr,2126 .avoid_partial_cpsr,
2468 .fp16,2127 .fp16,
...@@ -2479,7 +2138,7 @@ pub const cpu = struct {...@@ -2479,7 +2138,7 @@ pub const cpu = struct {
2479 pub const kryo = Cpu{2138 pub const kryo = Cpu{
2480 .name = "kryo",2139 .name = "kryo",
2481 .llvm_name = "kryo",2140 .llvm_name = "kryo",
2482 .features = featureSet(&[_]Feature{2141 .features = featureSet(&all_features, &[_]Feature{
2483 .armv8_a,2142 .armv8_a,
2484 .crc,2143 .crc,
2485 .crypto,2144 .crypto,
...@@ -2491,7 +2150,7 @@ pub const cpu = struct {...@@ -2491,7 +2150,7 @@ pub const cpu = struct {
2491 pub const mpcore = Cpu{2150 pub const mpcore = Cpu{
2492 .name = "mpcore",2151 .name = "mpcore",
2493 .llvm_name = "mpcore",2152 .llvm_name = "mpcore",
2494 .features = featureSet(&[_]Feature{2153 .features = featureSet(&all_features, &[_]Feature{
2495 .armv6k,2154 .armv6k,
2496 .slowfpvmlx,2155 .slowfpvmlx,
2497 .vfp2,2156 .vfp2,
...@@ -2500,21 +2159,21 @@ pub const cpu = struct {...@@ -2500,21 +2159,21 @@ pub const cpu = struct {
2500 pub const mpcorenovfp = Cpu{2159 pub const mpcorenovfp = Cpu{
2501 .name = "mpcorenovfp",2160 .name = "mpcorenovfp",
2502 .llvm_name = "mpcorenovfp",2161 .llvm_name = "mpcorenovfp",
2503 .features = featureSet(&[_]Feature{2162 .features = featureSet(&all_features, &[_]Feature{
2504 .armv6k,2163 .armv6k,
2505 }),2164 }),
2506 };2165 };
2507 pub const sc000 = Cpu{2166 pub const sc000 = Cpu{
2508 .name = "sc000",2167 .name = "sc000",
2509 .llvm_name = "sc000",2168 .llvm_name = "sc000",
2510 .features = featureSet(&[_]Feature{2169 .features = featureSet(&all_features, &[_]Feature{
2511 .armv6_m,2170 .armv6_m,
2512 }),2171 }),
2513 };2172 };
2514 pub const sc300 = Cpu{2173 pub const sc300 = Cpu{
2515 .name = "sc300",2174 .name = "sc300",
2516 .llvm_name = "sc300",2175 .llvm_name = "sc300",
2517 .features = featureSet(&[_]Feature{2176 .features = featureSet(&all_features, &[_]Feature{
2518 .armv7_m,2177 .armv7_m,
2519 .m3,2178 .m3,
2520 .no_branch_predictor,2179 .no_branch_predictor,
...@@ -2525,35 +2184,35 @@ pub const cpu = struct {...@@ -2525,35 +2184,35 @@ pub const cpu = struct {
2525 pub const strongarm = Cpu{2184 pub const strongarm = Cpu{
2526 .name = "strongarm",2185 .name = "strongarm",
2527 .llvm_name = "strongarm",2186 .llvm_name = "strongarm",
2528 .features = featureSet(&[_]Feature{2187 .features = featureSet(&all_features, &[_]Feature{
2529 .armv4,2188 .armv4,
2530 }),2189 }),
2531 };2190 };
2532 pub const strongarm110 = Cpu{2191 pub const strongarm110 = Cpu{
2533 .name = "strongarm110",2192 .name = "strongarm110",
2534 .llvm_name = "strongarm110",2193 .llvm_name = "strongarm110",
2535 .features = featureSet(&[_]Feature{2194 .features = featureSet(&all_features, &[_]Feature{
2536 .armv4,2195 .armv4,
2537 }),2196 }),
2538 };2197 };
2539 pub const strongarm1100 = Cpu{2198 pub const strongarm1100 = Cpu{
2540 .name = "strongarm1100",2199 .name = "strongarm1100",
2541 .llvm_name = "strongarm1100",2200 .llvm_name = "strongarm1100",
2542 .features = featureSet(&[_]Feature{2201 .features = featureSet(&all_features, &[_]Feature{
2543 .armv4,2202 .armv4,
2544 }),2203 }),
2545 };2204 };
2546 pub const strongarm1110 = Cpu{2205 pub const strongarm1110 = Cpu{
2547 .name = "strongarm1110",2206 .name = "strongarm1110",
2548 .llvm_name = "strongarm1110",2207 .llvm_name = "strongarm1110",
2549 .features = featureSet(&[_]Feature{2208 .features = featureSet(&all_features, &[_]Feature{
2550 .armv4,2209 .armv4,
2551 }),2210 }),
2552 };2211 };
2553 pub const swift = Cpu{2212 pub const swift = Cpu{
2554 .name = "swift",2213 .name = "swift",
2555 .llvm_name = "swift",2214 .llvm_name = "swift",
2556 .features = featureSet(&[_]Feature{2215 .features = featureSet(&all_features, &[_]Feature{
2557 .armv7_a,2216 .armv7_a,
2558 .avoid_movs_shop,2217 .avoid_movs_shop,
2559 .avoid_partial_cpsr,2218 .avoid_partial_cpsr,
...@@ -2580,7 +2239,7 @@ pub const cpu = struct {...@@ -2580,7 +2239,7 @@ pub const cpu = struct {
2580 pub const xscale = Cpu{2239 pub const xscale = Cpu{
2581 .name = "xscale",2240 .name = "xscale",
2582 .llvm_name = "xscale",2241 .llvm_name = "xscale",
2583 .features = featureSet(&[_]Feature{2242 .features = featureSet(&all_features, &[_]Feature{
2584 .armv5te,2243 .armv5te,
2585 }),2244 }),
2586 };2245 };
lib/std/target/avr.zig+298-358
...@@ -41,38 +41,30 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -41,38 +41,30 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
4141
42pub const all_features = blk: {42pub const all_features = blk: {
43 const len = @typeInfo(Feature).Enum.fields.len;43 const len = @typeInfo(Feature).Enum.fields.len;
44 std.debug.assert(len <= Cpu.Feature.Set.bit_count);44 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
45 var result: [len]Cpu.Feature = undefined;45 var result: [len]Cpu.Feature = undefined;
46 result[@enumToInt(Feature.addsubiw)] = .{46 result[@enumToInt(Feature.addsubiw)] = .{
47 .index = @enumToInt(Feature.addsubiw),
48 .name = @tagName(Feature.addsubiw),
49 .llvm_name = "addsubiw",47 .llvm_name = "addsubiw",
50 .description = "Enable 16-bit register-immediate addition and subtraction instructions",48 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
51 .dependencies = featureSet(&[_]Feature{}),49 .dependencies = sparseFeatureSet(&[_]Feature{}),
52 };50 };
53 result[@enumToInt(Feature.avr0)] = .{51 result[@enumToInt(Feature.avr0)] = .{
54 .index = @enumToInt(Feature.avr0),
55 .name = @tagName(Feature.avr0),
56 .llvm_name = "avr0",52 .llvm_name = "avr0",
57 .description = "The device is a part of the avr0 family",53 .description = "The device is a part of the avr0 family",
58 .dependencies = featureSet(&[_]Feature{}),54 .dependencies = sparseFeatureSet(&[_]Feature{}),
59 };55 };
60 result[@enumToInt(Feature.avr1)] = .{56 result[@enumToInt(Feature.avr1)] = .{
61 .index = @enumToInt(Feature.avr1),
62 .name = @tagName(Feature.avr1),
63 .llvm_name = "avr1",57 .llvm_name = "avr1",
64 .description = "The device is a part of the avr1 family",58 .description = "The device is a part of the avr1 family",
65 .dependencies = featureSet(&[_]Feature{59 .dependencies = sparseFeatureSet(&[_]Feature{
66 .avr0,60 .avr0,
67 .lpm,61 .lpm,
68 }),62 }),
69 };63 };
70 result[@enumToInt(Feature.avr2)] = .{64 result[@enumToInt(Feature.avr2)] = .{
71 .index = @enumToInt(Feature.avr2),
72 .name = @tagName(Feature.avr2),
73 .llvm_name = "avr2",65 .llvm_name = "avr2",
74 .description = "The device is a part of the avr2 family",66 .description = "The device is a part of the avr2 family",
75 .dependencies = featureSet(&[_]Feature{67 .dependencies = sparseFeatureSet(&[_]Feature{
76 .addsubiw,68 .addsubiw,
77 .avr1,69 .avr1,
78 .ijmpcall,70 .ijmpcall,
...@@ -80,11 +72,9 @@ pub const all_features = blk: {...@@ -80,11 +72,9 @@ pub const all_features = blk: {
80 }),72 }),
81 };73 };
82 result[@enumToInt(Feature.avr25)] = .{74 result[@enumToInt(Feature.avr25)] = .{
83 .index = @enumToInt(Feature.avr25),
84 .name = @tagName(Feature.avr25),
85 .llvm_name = "avr25",75 .llvm_name = "avr25",
86 .description = "The device is a part of the avr25 family",76 .description = "The device is a part of the avr25 family",
87 .dependencies = featureSet(&[_]Feature{77 .dependencies = sparseFeatureSet(&[_]Feature{
88 .avr2,78 .avr2,
89 .@"break",79 .@"break",
90 .lpmx,80 .lpmx,
...@@ -93,31 +83,25 @@ pub const all_features = blk: {...@@ -93,31 +83,25 @@ pub const all_features = blk: {
93 }),83 }),
94 };84 };
95 result[@enumToInt(Feature.avr3)] = .{85 result[@enumToInt(Feature.avr3)] = .{
96 .index = @enumToInt(Feature.avr3),
97 .name = @tagName(Feature.avr3),
98 .llvm_name = "avr3",86 .llvm_name = "avr3",
99 .description = "The device is a part of the avr3 family",87 .description = "The device is a part of the avr3 family",
100 .dependencies = featureSet(&[_]Feature{88 .dependencies = sparseFeatureSet(&[_]Feature{
101 .avr2,89 .avr2,
102 .jmpcall,90 .jmpcall,
103 }),91 }),
104 };92 };
105 result[@enumToInt(Feature.avr31)] = .{93 result[@enumToInt(Feature.avr31)] = .{
106 .index = @enumToInt(Feature.avr31),
107 .name = @tagName(Feature.avr31),
108 .llvm_name = "avr31",94 .llvm_name = "avr31",
109 .description = "The device is a part of the avr31 family",95 .description = "The device is a part of the avr31 family",
110 .dependencies = featureSet(&[_]Feature{96 .dependencies = sparseFeatureSet(&[_]Feature{
111 .avr3,97 .avr3,
112 .elpm,98 .elpm,
113 }),99 }),
114 };100 };
115 result[@enumToInt(Feature.avr35)] = .{101 result[@enumToInt(Feature.avr35)] = .{
116 .index = @enumToInt(Feature.avr35),
117 .name = @tagName(Feature.avr35),
118 .llvm_name = "avr35",102 .llvm_name = "avr35",
119 .description = "The device is a part of the avr35 family",103 .description = "The device is a part of the avr35 family",
120 .dependencies = featureSet(&[_]Feature{104 .dependencies = sparseFeatureSet(&[_]Feature{
121 .avr3,105 .avr3,
122 .@"break",106 .@"break",
123 .lpmx,107 .lpmx,
...@@ -126,11 +110,9 @@ pub const all_features = blk: {...@@ -126,11 +110,9 @@ pub const all_features = blk: {
126 }),110 }),
127 };111 };
128 result[@enumToInt(Feature.avr4)] = .{112 result[@enumToInt(Feature.avr4)] = .{
129 .index = @enumToInt(Feature.avr4),
130 .name = @tagName(Feature.avr4),
131 .llvm_name = "avr4",113 .llvm_name = "avr4",
132 .description = "The device is a part of the avr4 family",114 .description = "The device is a part of the avr4 family",
133 .dependencies = featureSet(&[_]Feature{115 .dependencies = sparseFeatureSet(&[_]Feature{
134 .avr2,116 .avr2,
135 .@"break",117 .@"break",
136 .lpmx,118 .lpmx,
...@@ -140,11 +122,9 @@ pub const all_features = blk: {...@@ -140,11 +122,9 @@ pub const all_features = blk: {
140 }),122 }),
141 };123 };
142 result[@enumToInt(Feature.avr5)] = .{124 result[@enumToInt(Feature.avr5)] = .{
143 .index = @enumToInt(Feature.avr5),
144 .name = @tagName(Feature.avr5),
145 .llvm_name = "avr5",125 .llvm_name = "avr5",
146 .description = "The device is a part of the avr5 family",126 .description = "The device is a part of the avr5 family",
147 .dependencies = featureSet(&[_]Feature{127 .dependencies = sparseFeatureSet(&[_]Feature{
148 .avr3,128 .avr3,
149 .@"break",129 .@"break",
150 .lpmx,130 .lpmx,
...@@ -154,31 +134,25 @@ pub const all_features = blk: {...@@ -154,31 +134,25 @@ pub const all_features = blk: {
154 }),134 }),
155 };135 };
156 result[@enumToInt(Feature.avr51)] = .{136 result[@enumToInt(Feature.avr51)] = .{
157 .index = @enumToInt(Feature.avr51),
158 .name = @tagName(Feature.avr51),
159 .llvm_name = "avr51",137 .llvm_name = "avr51",
160 .description = "The device is a part of the avr51 family",138 .description = "The device is a part of the avr51 family",
161 .dependencies = featureSet(&[_]Feature{139 .dependencies = sparseFeatureSet(&[_]Feature{
162 .avr5,140 .avr5,
163 .elpm,141 .elpm,
164 .elpmx,142 .elpmx,
165 }),143 }),
166 };144 };
167 result[@enumToInt(Feature.avr6)] = .{145 result[@enumToInt(Feature.avr6)] = .{
168 .index = @enumToInt(Feature.avr6),
169 .name = @tagName(Feature.avr6),
170 .llvm_name = "avr6",146 .llvm_name = "avr6",
171 .description = "The device is a part of the avr6 family",147 .description = "The device is a part of the avr6 family",
172 .dependencies = featureSet(&[_]Feature{148 .dependencies = sparseFeatureSet(&[_]Feature{
173 .avr51,149 .avr51,
174 }),150 }),
175 };151 };
176 result[@enumToInt(Feature.avrtiny)] = .{152 result[@enumToInt(Feature.avrtiny)] = .{
177 .index = @enumToInt(Feature.avrtiny),
178 .name = @tagName(Feature.avrtiny),
179 .llvm_name = "avrtiny",153 .llvm_name = "avrtiny",
180 .description = "The device is a part of the avrtiny family",154 .description = "The device is a part of the avrtiny family",
181 .dependencies = featureSet(&[_]Feature{155 .dependencies = sparseFeatureSet(&[_]Feature{
182 .avr0,156 .avr0,
183 .@"break",157 .@"break",
184 .sram,158 .sram,
...@@ -186,102 +160,74 @@ pub const all_features = blk: {...@@ -186,102 +160,74 @@ pub const all_features = blk: {
186 }),160 }),
187 };161 };
188 result[@enumToInt(Feature.@"break")] = .{162 result[@enumToInt(Feature.@"break")] = .{
189 .index = @enumToInt(Feature.@"break"),
190 .name = @tagName(Feature.@"break"),
191 .llvm_name = "break",163 .llvm_name = "break",
192 .description = "The device supports the `BREAK` debugging instruction",164 .description = "The device supports the `BREAK` debugging instruction",
193 .dependencies = featureSet(&[_]Feature{}),165 .dependencies = sparseFeatureSet(&[_]Feature{}),
194 };166 };
195 result[@enumToInt(Feature.des)] = .{167 result[@enumToInt(Feature.des)] = .{
196 .index = @enumToInt(Feature.des),
197 .name = @tagName(Feature.des),
198 .llvm_name = "des",168 .llvm_name = "des",
199 .description = "The device supports the `DES k` encryption instruction",169 .description = "The device supports the `DES k` encryption instruction",
200 .dependencies = featureSet(&[_]Feature{}),170 .dependencies = sparseFeatureSet(&[_]Feature{}),
201 };171 };
202 result[@enumToInt(Feature.eijmpcall)] = .{172 result[@enumToInt(Feature.eijmpcall)] = .{
203 .index = @enumToInt(Feature.eijmpcall),
204 .name = @tagName(Feature.eijmpcall),
205 .llvm_name = "eijmpcall",173 .llvm_name = "eijmpcall",
206 .description = "The device supports the `EIJMP`/`EICALL` instructions",174 .description = "The device supports the `EIJMP`/`EICALL` instructions",
207 .dependencies = featureSet(&[_]Feature{}),175 .dependencies = sparseFeatureSet(&[_]Feature{}),
208 };176 };
209 result[@enumToInt(Feature.elpm)] = .{177 result[@enumToInt(Feature.elpm)] = .{
210 .index = @enumToInt(Feature.elpm),
211 .name = @tagName(Feature.elpm),
212 .llvm_name = "elpm",178 .llvm_name = "elpm",
213 .description = "The device supports the ELPM instruction",179 .description = "The device supports the ELPM instruction",
214 .dependencies = featureSet(&[_]Feature{}),180 .dependencies = sparseFeatureSet(&[_]Feature{}),
215 };181 };
216 result[@enumToInt(Feature.elpmx)] = .{182 result[@enumToInt(Feature.elpmx)] = .{
217 .index = @enumToInt(Feature.elpmx),
218 .name = @tagName(Feature.elpmx),
219 .llvm_name = "elpmx",183 .llvm_name = "elpmx",
220 .description = "The device supports the `ELPM Rd, Z[+]` instructions",184 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
221 .dependencies = featureSet(&[_]Feature{}),185 .dependencies = sparseFeatureSet(&[_]Feature{}),
222 };186 };
223 result[@enumToInt(Feature.ijmpcall)] = .{187 result[@enumToInt(Feature.ijmpcall)] = .{
224 .index = @enumToInt(Feature.ijmpcall),
225 .name = @tagName(Feature.ijmpcall),
226 .llvm_name = "ijmpcall",188 .llvm_name = "ijmpcall",
227 .description = "The device supports `IJMP`/`ICALL`instructions",189 .description = "The device supports `IJMP`/`ICALL`instructions",
228 .dependencies = featureSet(&[_]Feature{}),190 .dependencies = sparseFeatureSet(&[_]Feature{}),
229 };191 };
230 result[@enumToInt(Feature.jmpcall)] = .{192 result[@enumToInt(Feature.jmpcall)] = .{
231 .index = @enumToInt(Feature.jmpcall),
232 .name = @tagName(Feature.jmpcall),
233 .llvm_name = "jmpcall",193 .llvm_name = "jmpcall",
234 .description = "The device supports the `JMP` and `CALL` instructions",194 .description = "The device supports the `JMP` and `CALL` instructions",
235 .dependencies = featureSet(&[_]Feature{}),195 .dependencies = sparseFeatureSet(&[_]Feature{}),
236 };196 };
237 result[@enumToInt(Feature.lpm)] = .{197 result[@enumToInt(Feature.lpm)] = .{
238 .index = @enumToInt(Feature.lpm),
239 .name = @tagName(Feature.lpm),
240 .llvm_name = "lpm",198 .llvm_name = "lpm",
241 .description = "The device supports the `LPM` instruction",199 .description = "The device supports the `LPM` instruction",
242 .dependencies = featureSet(&[_]Feature{}),200 .dependencies = sparseFeatureSet(&[_]Feature{}),
243 };201 };
244 result[@enumToInt(Feature.lpmx)] = .{202 result[@enumToInt(Feature.lpmx)] = .{
245 .index = @enumToInt(Feature.lpmx),
246 .name = @tagName(Feature.lpmx),
247 .llvm_name = "lpmx",203 .llvm_name = "lpmx",
248 .description = "The device supports the `LPM Rd, Z[+]` instruction",204 .description = "The device supports the `LPM Rd, Z[+]` instruction",
249 .dependencies = featureSet(&[_]Feature{}),205 .dependencies = sparseFeatureSet(&[_]Feature{}),
250 };206 };
251 result[@enumToInt(Feature.movw)] = .{207 result[@enumToInt(Feature.movw)] = .{
252 .index = @enumToInt(Feature.movw),
253 .name = @tagName(Feature.movw),
254 .llvm_name = "movw",208 .llvm_name = "movw",
255 .description = "The device supports the 16-bit MOVW instruction",209 .description = "The device supports the 16-bit MOVW instruction",
256 .dependencies = featureSet(&[_]Feature{}),210 .dependencies = sparseFeatureSet(&[_]Feature{}),
257 };211 };
258 result[@enumToInt(Feature.mul)] = .{212 result[@enumToInt(Feature.mul)] = .{
259 .index = @enumToInt(Feature.mul),
260 .name = @tagName(Feature.mul),
261 .llvm_name = "mul",213 .llvm_name = "mul",
262 .description = "The device supports the multiplication instructions",214 .description = "The device supports the multiplication instructions",
263 .dependencies = featureSet(&[_]Feature{}),215 .dependencies = sparseFeatureSet(&[_]Feature{}),
264 };216 };
265 result[@enumToInt(Feature.rmw)] = .{217 result[@enumToInt(Feature.rmw)] = .{
266 .index = @enumToInt(Feature.rmw),
267 .name = @tagName(Feature.rmw),
268 .llvm_name = "rmw",218 .llvm_name = "rmw",
269 .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",
270 .dependencies = featureSet(&[_]Feature{}),220 .dependencies = sparseFeatureSet(&[_]Feature{}),
271 };221 };
272 result[@enumToInt(Feature.smallstack)] = .{222 result[@enumToInt(Feature.smallstack)] = .{
273 .index = @enumToInt(Feature.smallstack),
274 .name = @tagName(Feature.smallstack),
275 .llvm_name = "smallstack",223 .llvm_name = "smallstack",
276 .description = "The device has an 8-bit stack pointer",224 .description = "The device has an 8-bit stack pointer",
277 .dependencies = featureSet(&[_]Feature{}),225 .dependencies = sparseFeatureSet(&[_]Feature{}),
278 };226 };
279 result[@enumToInt(Feature.special)] = .{227 result[@enumToInt(Feature.special)] = .{
280 .index = @enumToInt(Feature.special),
281 .name = @tagName(Feature.special),
282 .llvm_name = "special",228 .llvm_name = "special",
283 .description = "Enable use of the entire instruction set - used for debugging",229 .description = "Enable use of the entire instruction set - used for debugging",
284 .dependencies = featureSet(&[_]Feature{230 .dependencies = sparseFeatureSet(&[_]Feature{
285 .addsubiw,231 .addsubiw,
286 .@"break",232 .@"break",
287 .des,233 .des,
...@@ -301,39 +247,29 @@ pub const all_features = blk: {...@@ -301,39 +247,29 @@ pub const all_features = blk: {
301 }),247 }),
302 };248 };
303 result[@enumToInt(Feature.spm)] = .{249 result[@enumToInt(Feature.spm)] = .{
304 .index = @enumToInt(Feature.spm),
305 .name = @tagName(Feature.spm),
306 .llvm_name = "spm",250 .llvm_name = "spm",
307 .description = "The device supports the `SPM` instruction",251 .description = "The device supports the `SPM` instruction",
308 .dependencies = featureSet(&[_]Feature{}),252 .dependencies = sparseFeatureSet(&[_]Feature{}),
309 };253 };
310 result[@enumToInt(Feature.spmx)] = .{254 result[@enumToInt(Feature.spmx)] = .{
311 .index = @enumToInt(Feature.spmx),
312 .name = @tagName(Feature.spmx),
313 .llvm_name = "spmx",255 .llvm_name = "spmx",
314 .description = "The device supports the `SPM Z+` instruction",256 .description = "The device supports the `SPM Z+` instruction",
315 .dependencies = featureSet(&[_]Feature{}),257 .dependencies = sparseFeatureSet(&[_]Feature{}),
316 };258 };
317 result[@enumToInt(Feature.sram)] = .{259 result[@enumToInt(Feature.sram)] = .{
318 .index = @enumToInt(Feature.sram),
319 .name = @tagName(Feature.sram),
320 .llvm_name = "sram",260 .llvm_name = "sram",
321 .description = "The device has random access memory",261 .description = "The device has random access memory",
322 .dependencies = featureSet(&[_]Feature{}),262 .dependencies = sparseFeatureSet(&[_]Feature{}),
323 };263 };
324 result[@enumToInt(Feature.tinyencoding)] = .{264 result[@enumToInt(Feature.tinyencoding)] = .{
325 .index = @enumToInt(Feature.tinyencoding),
326 .name = @tagName(Feature.tinyencoding),
327 .llvm_name = "tinyencoding",265 .llvm_name = "tinyencoding",
328 .description = "The device has Tiny core specific instruction encodings",266 .description = "The device has Tiny core specific instruction encodings",
329 .dependencies = featureSet(&[_]Feature{}),267 .dependencies = sparseFeatureSet(&[_]Feature{}),
330 };268 };
331 result[@enumToInt(Feature.xmega)] = .{269 result[@enumToInt(Feature.xmega)] = .{
332 .index = @enumToInt(Feature.xmega),
333 .name = @tagName(Feature.xmega),
334 .llvm_name = "xmega",270 .llvm_name = "xmega",
335 .description = "The device is a part of the xmega family",271 .description = "The device is a part of the xmega family",
336 .dependencies = featureSet(&[_]Feature{272 .dependencies = sparseFeatureSet(&[_]Feature{
337 .avr51,273 .avr51,
338 .des,274 .des,
339 .eijmpcall,275 .eijmpcall,
...@@ -341,15 +277,19 @@ pub const all_features = blk: {...@@ -341,15 +277,19 @@ pub const all_features = blk: {
341 }),277 }),
342 };278 };
343 result[@enumToInt(Feature.xmegau)] = .{279 result[@enumToInt(Feature.xmegau)] = .{
344 .index = @enumToInt(Feature.xmegau),
345 .name = @tagName(Feature.xmegau),
346 .llvm_name = "xmegau",280 .llvm_name = "xmegau",
347 .description = "The device is a part of the xmegau family",281 .description = "The device is a part of the xmegau family",
348 .dependencies = featureSet(&[_]Feature{282 .dependencies = sparseFeatureSet(&[_]Feature{
349 .rmw,283 .rmw,
350 .xmega,284 .xmega,
351 }),285 }),
352 };286 };
287 const ti = @typeInfo(Feature);
288 for (result) |*elem, i| {
289 elem.index = i;
290 elem.name = ti.Enum.fields[i].name;
291 elem.dependencies.initAsDependencies(i, &result);
292 }
353 break :blk result;293 break :blk result;
354};294};
355295
...@@ -357,28 +297,28 @@ pub const cpu = struct {...@@ -357,28 +297,28 @@ pub const cpu = struct {
357 pub const at43usb320 = Cpu{297 pub const at43usb320 = Cpu{
358 .name = "at43usb320",298 .name = "at43usb320",
359 .llvm_name = "at43usb320",299 .llvm_name = "at43usb320",
360 .features = featureSet(&[_]Feature{300 .features = featureSet(&all_features, &[_]Feature{
361 .avr31,301 .avr31,
362 }),302 }),
363 };303 };
364 pub const at43usb355 = Cpu{304 pub const at43usb355 = Cpu{
365 .name = "at43usb355",305 .name = "at43usb355",
366 .llvm_name = "at43usb355",306 .llvm_name = "at43usb355",
367 .features = featureSet(&[_]Feature{307 .features = featureSet(&all_features, &[_]Feature{
368 .avr3,308 .avr3,
369 }),309 }),
370 };310 };
371 pub const at76c711 = Cpu{311 pub const at76c711 = Cpu{
372 .name = "at76c711",312 .name = "at76c711",
373 .llvm_name = "at76c711",313 .llvm_name = "at76c711",
374 .features = featureSet(&[_]Feature{314 .features = featureSet(&all_features, &[_]Feature{
375 .avr3,315 .avr3,
376 }),316 }),
377 };317 };
378 pub const at86rf401 = Cpu{318 pub const at86rf401 = Cpu{
379 .name = "at86rf401",319 .name = "at86rf401",
380 .llvm_name = "at86rf401",320 .llvm_name = "at86rf401",
381 .features = featureSet(&[_]Feature{321 .features = featureSet(&all_features, &[_]Feature{
382 .avr2,322 .avr2,
383 .lpmx,323 .lpmx,
384 .movw,324 .movw,
...@@ -387,217 +327,217 @@ pub const cpu = struct {...@@ -387,217 +327,217 @@ pub const cpu = struct {
387 pub const at90c8534 = Cpu{327 pub const at90c8534 = Cpu{
388 .name = "at90c8534",328 .name = "at90c8534",
389 .llvm_name = "at90c8534",329 .llvm_name = "at90c8534",
390 .features = featureSet(&[_]Feature{330 .features = featureSet(&all_features, &[_]Feature{
391 .avr2,331 .avr2,
392 }),332 }),
393 };333 };
394 pub const at90can128 = Cpu{334 pub const at90can128 = Cpu{
395 .name = "at90can128",335 .name = "at90can128",
396 .llvm_name = "at90can128",336 .llvm_name = "at90can128",
397 .features = featureSet(&[_]Feature{337 .features = featureSet(&all_features, &[_]Feature{
398 .avr51,338 .avr51,
399 }),339 }),
400 };340 };
401 pub const at90can32 = Cpu{341 pub const at90can32 = Cpu{
402 .name = "at90can32",342 .name = "at90can32",
403 .llvm_name = "at90can32",343 .llvm_name = "at90can32",
404 .features = featureSet(&[_]Feature{344 .features = featureSet(&all_features, &[_]Feature{
405 .avr5,345 .avr5,
406 }),346 }),
407 };347 };
408 pub const at90can64 = Cpu{348 pub const at90can64 = Cpu{
409 .name = "at90can64",349 .name = "at90can64",
410 .llvm_name = "at90can64",350 .llvm_name = "at90can64",
411 .features = featureSet(&[_]Feature{351 .features = featureSet(&all_features, &[_]Feature{
412 .avr5,352 .avr5,
413 }),353 }),
414 };354 };
415 pub const at90pwm1 = Cpu{355 pub const at90pwm1 = Cpu{
416 .name = "at90pwm1",356 .name = "at90pwm1",
417 .llvm_name = "at90pwm1",357 .llvm_name = "at90pwm1",
418 .features = featureSet(&[_]Feature{358 .features = featureSet(&all_features, &[_]Feature{
419 .avr4,359 .avr4,
420 }),360 }),
421 };361 };
422 pub const at90pwm161 = Cpu{362 pub const at90pwm161 = Cpu{
423 .name = "at90pwm161",363 .name = "at90pwm161",
424 .llvm_name = "at90pwm161",364 .llvm_name = "at90pwm161",
425 .features = featureSet(&[_]Feature{365 .features = featureSet(&all_features, &[_]Feature{
426 .avr5,366 .avr5,
427 }),367 }),
428 };368 };
429 pub const at90pwm2 = Cpu{369 pub const at90pwm2 = Cpu{
430 .name = "at90pwm2",370 .name = "at90pwm2",
431 .llvm_name = "at90pwm2",371 .llvm_name = "at90pwm2",
432 .features = featureSet(&[_]Feature{372 .features = featureSet(&all_features, &[_]Feature{
433 .avr4,373 .avr4,
434 }),374 }),
435 };375 };
436 pub const at90pwm216 = Cpu{376 pub const at90pwm216 = Cpu{
437 .name = "at90pwm216",377 .name = "at90pwm216",
438 .llvm_name = "at90pwm216",378 .llvm_name = "at90pwm216",
439 .features = featureSet(&[_]Feature{379 .features = featureSet(&all_features, &[_]Feature{
440 .avr5,380 .avr5,
441 }),381 }),
442 };382 };
443 pub const at90pwm2b = Cpu{383 pub const at90pwm2b = Cpu{
444 .name = "at90pwm2b",384 .name = "at90pwm2b",
445 .llvm_name = "at90pwm2b",385 .llvm_name = "at90pwm2b",
446 .features = featureSet(&[_]Feature{386 .features = featureSet(&all_features, &[_]Feature{
447 .avr4,387 .avr4,
448 }),388 }),
449 };389 };
450 pub const at90pwm3 = Cpu{390 pub const at90pwm3 = Cpu{
451 .name = "at90pwm3",391 .name = "at90pwm3",
452 .llvm_name = "at90pwm3",392 .llvm_name = "at90pwm3",
453 .features = featureSet(&[_]Feature{393 .features = featureSet(&all_features, &[_]Feature{
454 .avr4,394 .avr4,
455 }),395 }),
456 };396 };
457 pub const at90pwm316 = Cpu{397 pub const at90pwm316 = Cpu{
458 .name = "at90pwm316",398 .name = "at90pwm316",
459 .llvm_name = "at90pwm316",399 .llvm_name = "at90pwm316",
460 .features = featureSet(&[_]Feature{400 .features = featureSet(&all_features, &[_]Feature{
461 .avr5,401 .avr5,
462 }),402 }),
463 };403 };
464 pub const at90pwm3b = Cpu{404 pub const at90pwm3b = Cpu{
465 .name = "at90pwm3b",405 .name = "at90pwm3b",
466 .llvm_name = "at90pwm3b",406 .llvm_name = "at90pwm3b",
467 .features = featureSet(&[_]Feature{407 .features = featureSet(&all_features, &[_]Feature{
468 .avr4,408 .avr4,
469 }),409 }),
470 };410 };
471 pub const at90pwm81 = Cpu{411 pub const at90pwm81 = Cpu{
472 .name = "at90pwm81",412 .name = "at90pwm81",
473 .llvm_name = "at90pwm81",413 .llvm_name = "at90pwm81",
474 .features = featureSet(&[_]Feature{414 .features = featureSet(&all_features, &[_]Feature{
475 .avr4,415 .avr4,
476 }),416 }),
477 };417 };
478 pub const at90s1200 = Cpu{418 pub const at90s1200 = Cpu{
479 .name = "at90s1200",419 .name = "at90s1200",
480 .llvm_name = "at90s1200",420 .llvm_name = "at90s1200",
481 .features = featureSet(&[_]Feature{421 .features = featureSet(&all_features, &[_]Feature{
482 .avr0,422 .avr0,
483 }),423 }),
484 };424 };
485 pub const at90s2313 = Cpu{425 pub const at90s2313 = Cpu{
486 .name = "at90s2313",426 .name = "at90s2313",
487 .llvm_name = "at90s2313",427 .llvm_name = "at90s2313",
488 .features = featureSet(&[_]Feature{428 .features = featureSet(&all_features, &[_]Feature{
489 .avr2,429 .avr2,
490 }),430 }),
491 };431 };
492 pub const at90s2323 = Cpu{432 pub const at90s2323 = Cpu{
493 .name = "at90s2323",433 .name = "at90s2323",
494 .llvm_name = "at90s2323",434 .llvm_name = "at90s2323",
495 .features = featureSet(&[_]Feature{435 .features = featureSet(&all_features, &[_]Feature{
496 .avr2,436 .avr2,
497 }),437 }),
498 };438 };
499 pub const at90s2333 = Cpu{439 pub const at90s2333 = Cpu{
500 .name = "at90s2333",440 .name = "at90s2333",
501 .llvm_name = "at90s2333",441 .llvm_name = "at90s2333",
502 .features = featureSet(&[_]Feature{442 .features = featureSet(&all_features, &[_]Feature{
503 .avr2,443 .avr2,
504 }),444 }),
505 };445 };
506 pub const at90s2343 = Cpu{446 pub const at90s2343 = Cpu{
507 .name = "at90s2343",447 .name = "at90s2343",
508 .llvm_name = "at90s2343",448 .llvm_name = "at90s2343",
509 .features = featureSet(&[_]Feature{449 .features = featureSet(&all_features, &[_]Feature{
510 .avr2,450 .avr2,
511 }),451 }),
512 };452 };
513 pub const at90s4414 = Cpu{453 pub const at90s4414 = Cpu{
514 .name = "at90s4414",454 .name = "at90s4414",
515 .llvm_name = "at90s4414",455 .llvm_name = "at90s4414",
516 .features = featureSet(&[_]Feature{456 .features = featureSet(&all_features, &[_]Feature{
517 .avr2,457 .avr2,
518 }),458 }),
519 };459 };
520 pub const at90s4433 = Cpu{460 pub const at90s4433 = Cpu{
521 .name = "at90s4433",461 .name = "at90s4433",
522 .llvm_name = "at90s4433",462 .llvm_name = "at90s4433",
523 .features = featureSet(&[_]Feature{463 .features = featureSet(&all_features, &[_]Feature{
524 .avr2,464 .avr2,
525 }),465 }),
526 };466 };
527 pub const at90s4434 = Cpu{467 pub const at90s4434 = Cpu{
528 .name = "at90s4434",468 .name = "at90s4434",
529 .llvm_name = "at90s4434",469 .llvm_name = "at90s4434",
530 .features = featureSet(&[_]Feature{470 .features = featureSet(&all_features, &[_]Feature{
531 .avr2,471 .avr2,
532 }),472 }),
533 };473 };
534 pub const at90s8515 = Cpu{474 pub const at90s8515 = Cpu{
535 .name = "at90s8515",475 .name = "at90s8515",
536 .llvm_name = "at90s8515",476 .llvm_name = "at90s8515",
537 .features = featureSet(&[_]Feature{477 .features = featureSet(&all_features, &[_]Feature{
538 .avr2,478 .avr2,
539 }),479 }),
540 };480 };
541 pub const at90s8535 = Cpu{481 pub const at90s8535 = Cpu{
542 .name = "at90s8535",482 .name = "at90s8535",
543 .llvm_name = "at90s8535",483 .llvm_name = "at90s8535",
544 .features = featureSet(&[_]Feature{484 .features = featureSet(&all_features, &[_]Feature{
545 .avr2,485 .avr2,
546 }),486 }),
547 };487 };
548 pub const at90scr100 = Cpu{488 pub const at90scr100 = Cpu{
549 .name = "at90scr100",489 .name = "at90scr100",
550 .llvm_name = "at90scr100",490 .llvm_name = "at90scr100",
551 .features = featureSet(&[_]Feature{491 .features = featureSet(&all_features, &[_]Feature{
552 .avr5,492 .avr5,
553 }),493 }),
554 };494 };
555 pub const at90usb1286 = Cpu{495 pub const at90usb1286 = Cpu{
556 .name = "at90usb1286",496 .name = "at90usb1286",
557 .llvm_name = "at90usb1286",497 .llvm_name = "at90usb1286",
558 .features = featureSet(&[_]Feature{498 .features = featureSet(&all_features, &[_]Feature{
559 .avr51,499 .avr51,
560 }),500 }),
561 };501 };
562 pub const at90usb1287 = Cpu{502 pub const at90usb1287 = Cpu{
563 .name = "at90usb1287",503 .name = "at90usb1287",
564 .llvm_name = "at90usb1287",504 .llvm_name = "at90usb1287",
565 .features = featureSet(&[_]Feature{505 .features = featureSet(&all_features, &[_]Feature{
566 .avr51,506 .avr51,
567 }),507 }),
568 };508 };
569 pub const at90usb162 = Cpu{509 pub const at90usb162 = Cpu{
570 .name = "at90usb162",510 .name = "at90usb162",
571 .llvm_name = "at90usb162",511 .llvm_name = "at90usb162",
572 .features = featureSet(&[_]Feature{512 .features = featureSet(&all_features, &[_]Feature{
573 .avr35,513 .avr35,
574 }),514 }),
575 };515 };
576 pub const at90usb646 = Cpu{516 pub const at90usb646 = Cpu{
577 .name = "at90usb646",517 .name = "at90usb646",
578 .llvm_name = "at90usb646",518 .llvm_name = "at90usb646",
579 .features = featureSet(&[_]Feature{519 .features = featureSet(&all_features, &[_]Feature{
580 .avr5,520 .avr5,
581 }),521 }),
582 };522 };
583 pub const at90usb647 = Cpu{523 pub const at90usb647 = Cpu{
584 .name = "at90usb647",524 .name = "at90usb647",
585 .llvm_name = "at90usb647",525 .llvm_name = "at90usb647",
586 .features = featureSet(&[_]Feature{526 .features = featureSet(&all_features, &[_]Feature{
587 .avr5,527 .avr5,
588 }),528 }),
589 };529 };
590 pub const at90usb82 = Cpu{530 pub const at90usb82 = Cpu{
591 .name = "at90usb82",531 .name = "at90usb82",
592 .llvm_name = "at90usb82",532 .llvm_name = "at90usb82",
593 .features = featureSet(&[_]Feature{533 .features = featureSet(&all_features, &[_]Feature{
594 .avr35,534 .avr35,
595 }),535 }),
596 };536 };
597 pub const at94k = Cpu{537 pub const at94k = Cpu{
598 .name = "at94k",538 .name = "at94k",
599 .llvm_name = "at94k",539 .llvm_name = "at94k",
600 .features = featureSet(&[_]Feature{540 .features = featureSet(&all_features, &[_]Feature{
601 .avr3,541 .avr3,
602 .lpmx,542 .lpmx,
603 .movw,543 .movw,
...@@ -607,133 +547,133 @@ pub const cpu = struct {...@@ -607,133 +547,133 @@ pub const cpu = struct {
607 pub const ata5272 = Cpu{547 pub const ata5272 = Cpu{
608 .name = "ata5272",548 .name = "ata5272",
609 .llvm_name = "ata5272",549 .llvm_name = "ata5272",
610 .features = featureSet(&[_]Feature{550 .features = featureSet(&all_features, &[_]Feature{
611 .avr25,551 .avr25,
612 }),552 }),
613 };553 };
614 pub const ata5505 = Cpu{554 pub const ata5505 = Cpu{
615 .name = "ata5505",555 .name = "ata5505",
616 .llvm_name = "ata5505",556 .llvm_name = "ata5505",
617 .features = featureSet(&[_]Feature{557 .features = featureSet(&all_features, &[_]Feature{
618 .avr35,558 .avr35,
619 }),559 }),
620 };560 };
621 pub const ata5790 = Cpu{561 pub const ata5790 = Cpu{
622 .name = "ata5790",562 .name = "ata5790",
623 .llvm_name = "ata5790",563 .llvm_name = "ata5790",
624 .features = featureSet(&[_]Feature{564 .features = featureSet(&all_features, &[_]Feature{
625 .avr5,565 .avr5,
626 }),566 }),
627 };567 };
628 pub const ata5795 = Cpu{568 pub const ata5795 = Cpu{
629 .name = "ata5795",569 .name = "ata5795",
630 .llvm_name = "ata5795",570 .llvm_name = "ata5795",
631 .features = featureSet(&[_]Feature{571 .features = featureSet(&all_features, &[_]Feature{
632 .avr5,572 .avr5,
633 }),573 }),
634 };574 };
635 pub const ata6285 = Cpu{575 pub const ata6285 = Cpu{
636 .name = "ata6285",576 .name = "ata6285",
637 .llvm_name = "ata6285",577 .llvm_name = "ata6285",
638 .features = featureSet(&[_]Feature{578 .features = featureSet(&all_features, &[_]Feature{
639 .avr4,579 .avr4,
640 }),580 }),
641 };581 };
642 pub const ata6286 = Cpu{582 pub const ata6286 = Cpu{
643 .name = "ata6286",583 .name = "ata6286",
644 .llvm_name = "ata6286",584 .llvm_name = "ata6286",
645 .features = featureSet(&[_]Feature{585 .features = featureSet(&all_features, &[_]Feature{
646 .avr4,586 .avr4,
647 }),587 }),
648 };588 };
649 pub const ata6289 = Cpu{589 pub const ata6289 = Cpu{
650 .name = "ata6289",590 .name = "ata6289",
651 .llvm_name = "ata6289",591 .llvm_name = "ata6289",
652 .features = featureSet(&[_]Feature{592 .features = featureSet(&all_features, &[_]Feature{
653 .avr4,593 .avr4,
654 }),594 }),
655 };595 };
656 pub const atmega103 = Cpu{596 pub const atmega103 = Cpu{
657 .name = "atmega103",597 .name = "atmega103",
658 .llvm_name = "atmega103",598 .llvm_name = "atmega103",
659 .features = featureSet(&[_]Feature{599 .features = featureSet(&all_features, &[_]Feature{
660 .avr31,600 .avr31,
661 }),601 }),
662 };602 };
663 pub const atmega128 = Cpu{603 pub const atmega128 = Cpu{
664 .name = "atmega128",604 .name = "atmega128",
665 .llvm_name = "atmega128",605 .llvm_name = "atmega128",
666 .features = featureSet(&[_]Feature{606 .features = featureSet(&all_features, &[_]Feature{
667 .avr51,607 .avr51,
668 }),608 }),
669 };609 };
670 pub const atmega1280 = Cpu{610 pub const atmega1280 = Cpu{
671 .name = "atmega1280",611 .name = "atmega1280",
672 .llvm_name = "atmega1280",612 .llvm_name = "atmega1280",
673 .features = featureSet(&[_]Feature{613 .features = featureSet(&all_features, &[_]Feature{
674 .avr51,614 .avr51,
675 }),615 }),
676 };616 };
677 pub const atmega1281 = Cpu{617 pub const atmega1281 = Cpu{
678 .name = "atmega1281",618 .name = "atmega1281",
679 .llvm_name = "atmega1281",619 .llvm_name = "atmega1281",
680 .features = featureSet(&[_]Feature{620 .features = featureSet(&all_features, &[_]Feature{
681 .avr51,621 .avr51,
682 }),622 }),
683 };623 };
684 pub const atmega1284 = Cpu{624 pub const atmega1284 = Cpu{
685 .name = "atmega1284",625 .name = "atmega1284",
686 .llvm_name = "atmega1284",626 .llvm_name = "atmega1284",
687 .features = featureSet(&[_]Feature{627 .features = featureSet(&all_features, &[_]Feature{
688 .avr51,628 .avr51,
689 }),629 }),
690 };630 };
691 pub const atmega1284p = Cpu{631 pub const atmega1284p = Cpu{
692 .name = "atmega1284p",632 .name = "atmega1284p",
693 .llvm_name = "atmega1284p",633 .llvm_name = "atmega1284p",
694 .features = featureSet(&[_]Feature{634 .features = featureSet(&all_features, &[_]Feature{
695 .avr51,635 .avr51,
696 }),636 }),
697 };637 };
698 pub const atmega1284rfr2 = Cpu{638 pub const atmega1284rfr2 = Cpu{
699 .name = "atmega1284rfr2",639 .name = "atmega1284rfr2",
700 .llvm_name = "atmega1284rfr2",640 .llvm_name = "atmega1284rfr2",
701 .features = featureSet(&[_]Feature{641 .features = featureSet(&all_features, &[_]Feature{
702 .avr51,642 .avr51,
703 }),643 }),
704 };644 };
705 pub const atmega128a = Cpu{645 pub const atmega128a = Cpu{
706 .name = "atmega128a",646 .name = "atmega128a",
707 .llvm_name = "atmega128a",647 .llvm_name = "atmega128a",
708 .features = featureSet(&[_]Feature{648 .features = featureSet(&all_features, &[_]Feature{
709 .avr51,649 .avr51,
710 }),650 }),
711 };651 };
712 pub const atmega128rfa1 = Cpu{652 pub const atmega128rfa1 = Cpu{
713 .name = "atmega128rfa1",653 .name = "atmega128rfa1",
714 .llvm_name = "atmega128rfa1",654 .llvm_name = "atmega128rfa1",
715 .features = featureSet(&[_]Feature{655 .features = featureSet(&all_features, &[_]Feature{
716 .avr51,656 .avr51,
717 }),657 }),
718 };658 };
719 pub const atmega128rfr2 = Cpu{659 pub const atmega128rfr2 = Cpu{
720 .name = "atmega128rfr2",660 .name = "atmega128rfr2",
721 .llvm_name = "atmega128rfr2",661 .llvm_name = "atmega128rfr2",
722 .features = featureSet(&[_]Feature{662 .features = featureSet(&all_features, &[_]Feature{
723 .avr51,663 .avr51,
724 }),664 }),
725 };665 };
726 pub const atmega16 = Cpu{666 pub const atmega16 = Cpu{
727 .name = "atmega16",667 .name = "atmega16",
728 .llvm_name = "atmega16",668 .llvm_name = "atmega16",
729 .features = featureSet(&[_]Feature{669 .features = featureSet(&all_features, &[_]Feature{
730 .avr5,670 .avr5,
731 }),671 }),
732 };672 };
733 pub const atmega161 = Cpu{673 pub const atmega161 = Cpu{
734 .name = "atmega161",674 .name = "atmega161",
735 .llvm_name = "atmega161",675 .llvm_name = "atmega161",
736 .features = featureSet(&[_]Feature{676 .features = featureSet(&all_features, &[_]Feature{
737 .avr3,677 .avr3,
738 .lpmx,678 .lpmx,
739 .movw,679 .movw,
...@@ -744,14 +684,14 @@ pub const cpu = struct {...@@ -744,14 +684,14 @@ pub const cpu = struct {
744 pub const atmega162 = Cpu{684 pub const atmega162 = Cpu{
745 .name = "atmega162",685 .name = "atmega162",
746 .llvm_name = "atmega162",686 .llvm_name = "atmega162",
747 .features = featureSet(&[_]Feature{687 .features = featureSet(&all_features, &[_]Feature{
748 .avr5,688 .avr5,
749 }),689 }),
750 };690 };
751 pub const atmega163 = Cpu{691 pub const atmega163 = Cpu{
752 .name = "atmega163",692 .name = "atmega163",
753 .llvm_name = "atmega163",693 .llvm_name = "atmega163",
754 .features = featureSet(&[_]Feature{694 .features = featureSet(&all_features, &[_]Feature{
755 .avr3,695 .avr3,
756 .lpmx,696 .lpmx,
757 .movw,697 .movw,
...@@ -762,623 +702,623 @@ pub const cpu = struct {...@@ -762,623 +702,623 @@ pub const cpu = struct {
762 pub const atmega164a = Cpu{702 pub const atmega164a = Cpu{
763 .name = "atmega164a",703 .name = "atmega164a",
764 .llvm_name = "atmega164a",704 .llvm_name = "atmega164a",
765 .features = featureSet(&[_]Feature{705 .features = featureSet(&all_features, &[_]Feature{
766 .avr5,706 .avr5,
767 }),707 }),
768 };708 };
769 pub const atmega164p = Cpu{709 pub const atmega164p = Cpu{
770 .name = "atmega164p",710 .name = "atmega164p",
771 .llvm_name = "atmega164p",711 .llvm_name = "atmega164p",
772 .features = featureSet(&[_]Feature{712 .features = featureSet(&all_features, &[_]Feature{
773 .avr5,713 .avr5,
774 }),714 }),
775 };715 };
776 pub const atmega164pa = Cpu{716 pub const atmega164pa = Cpu{
777 .name = "atmega164pa",717 .name = "atmega164pa",
778 .llvm_name = "atmega164pa",718 .llvm_name = "atmega164pa",
779 .features = featureSet(&[_]Feature{719 .features = featureSet(&all_features, &[_]Feature{
780 .avr5,720 .avr5,
781 }),721 }),
782 };722 };
783 pub const atmega165 = Cpu{723 pub const atmega165 = Cpu{
784 .name = "atmega165",724 .name = "atmega165",
785 .llvm_name = "atmega165",725 .llvm_name = "atmega165",
786 .features = featureSet(&[_]Feature{726 .features = featureSet(&all_features, &[_]Feature{
787 .avr5,727 .avr5,
788 }),728 }),
789 };729 };
790 pub const atmega165a = Cpu{730 pub const atmega165a = Cpu{
791 .name = "atmega165a",731 .name = "atmega165a",
792 .llvm_name = "atmega165a",732 .llvm_name = "atmega165a",
793 .features = featureSet(&[_]Feature{733 .features = featureSet(&all_features, &[_]Feature{
794 .avr5,734 .avr5,
795 }),735 }),
796 };736 };
797 pub const atmega165p = Cpu{737 pub const atmega165p = Cpu{
798 .name = "atmega165p",738 .name = "atmega165p",
799 .llvm_name = "atmega165p",739 .llvm_name = "atmega165p",
800 .features = featureSet(&[_]Feature{740 .features = featureSet(&all_features, &[_]Feature{
801 .avr5,741 .avr5,
802 }),742 }),
803 };743 };
804 pub const atmega165pa = Cpu{744 pub const atmega165pa = Cpu{
805 .name = "atmega165pa",745 .name = "atmega165pa",
806 .llvm_name = "atmega165pa",746 .llvm_name = "atmega165pa",
807 .features = featureSet(&[_]Feature{747 .features = featureSet(&all_features, &[_]Feature{
808 .avr5,748 .avr5,
809 }),749 }),
810 };750 };
811 pub const atmega168 = Cpu{751 pub const atmega168 = Cpu{
812 .name = "atmega168",752 .name = "atmega168",
813 .llvm_name = "atmega168",753 .llvm_name = "atmega168",
814 .features = featureSet(&[_]Feature{754 .features = featureSet(&all_features, &[_]Feature{
815 .avr5,755 .avr5,
816 }),756 }),
817 };757 };
818 pub const atmega168a = Cpu{758 pub const atmega168a = Cpu{
819 .name = "atmega168a",759 .name = "atmega168a",
820 .llvm_name = "atmega168a",760 .llvm_name = "atmega168a",
821 .features = featureSet(&[_]Feature{761 .features = featureSet(&all_features, &[_]Feature{
822 .avr5,762 .avr5,
823 }),763 }),
824 };764 };
825 pub const atmega168p = Cpu{765 pub const atmega168p = Cpu{
826 .name = "atmega168p",766 .name = "atmega168p",
827 .llvm_name = "atmega168p",767 .llvm_name = "atmega168p",
828 .features = featureSet(&[_]Feature{768 .features = featureSet(&all_features, &[_]Feature{
829 .avr5,769 .avr5,
830 }),770 }),
831 };771 };
832 pub const atmega168pa = Cpu{772 pub const atmega168pa = Cpu{
833 .name = "atmega168pa",773 .name = "atmega168pa",
834 .llvm_name = "atmega168pa",774 .llvm_name = "atmega168pa",
835 .features = featureSet(&[_]Feature{775 .features = featureSet(&all_features, &[_]Feature{
836 .avr5,776 .avr5,
837 }),777 }),
838 };778 };
839 pub const atmega169 = Cpu{779 pub const atmega169 = Cpu{
840 .name = "atmega169",780 .name = "atmega169",
841 .llvm_name = "atmega169",781 .llvm_name = "atmega169",
842 .features = featureSet(&[_]Feature{782 .features = featureSet(&all_features, &[_]Feature{
843 .avr5,783 .avr5,
844 }),784 }),
845 };785 };
846 pub const atmega169a = Cpu{786 pub const atmega169a = Cpu{
847 .name = "atmega169a",787 .name = "atmega169a",
848 .llvm_name = "atmega169a",788 .llvm_name = "atmega169a",
849 .features = featureSet(&[_]Feature{789 .features = featureSet(&all_features, &[_]Feature{
850 .avr5,790 .avr5,
851 }),791 }),
852 };792 };
853 pub const atmega169p = Cpu{793 pub const atmega169p = Cpu{
854 .name = "atmega169p",794 .name = "atmega169p",
855 .llvm_name = "atmega169p",795 .llvm_name = "atmega169p",
856 .features = featureSet(&[_]Feature{796 .features = featureSet(&all_features, &[_]Feature{
857 .avr5,797 .avr5,
858 }),798 }),
859 };799 };
860 pub const atmega169pa = Cpu{800 pub const atmega169pa = Cpu{
861 .name = "atmega169pa",801 .name = "atmega169pa",
862 .llvm_name = "atmega169pa",802 .llvm_name = "atmega169pa",
863 .features = featureSet(&[_]Feature{803 .features = featureSet(&all_features, &[_]Feature{
864 .avr5,804 .avr5,
865 }),805 }),
866 };806 };
867 pub const atmega16a = Cpu{807 pub const atmega16a = Cpu{
868 .name = "atmega16a",808 .name = "atmega16a",
869 .llvm_name = "atmega16a",809 .llvm_name = "atmega16a",
870 .features = featureSet(&[_]Feature{810 .features = featureSet(&all_features, &[_]Feature{
871 .avr5,811 .avr5,
872 }),812 }),
873 };813 };
874 pub const atmega16hva = Cpu{814 pub const atmega16hva = Cpu{
875 .name = "atmega16hva",815 .name = "atmega16hva",
876 .llvm_name = "atmega16hva",816 .llvm_name = "atmega16hva",
877 .features = featureSet(&[_]Feature{817 .features = featureSet(&all_features, &[_]Feature{
878 .avr5,818 .avr5,
879 }),819 }),
880 };820 };
881 pub const atmega16hva2 = Cpu{821 pub const atmega16hva2 = Cpu{
882 .name = "atmega16hva2",822 .name = "atmega16hva2",
883 .llvm_name = "atmega16hva2",823 .llvm_name = "atmega16hva2",
884 .features = featureSet(&[_]Feature{824 .features = featureSet(&all_features, &[_]Feature{
885 .avr5,825 .avr5,
886 }),826 }),
887 };827 };
888 pub const atmega16hvb = Cpu{828 pub const atmega16hvb = Cpu{
889 .name = "atmega16hvb",829 .name = "atmega16hvb",
890 .llvm_name = "atmega16hvb",830 .llvm_name = "atmega16hvb",
891 .features = featureSet(&[_]Feature{831 .features = featureSet(&all_features, &[_]Feature{
892 .avr5,832 .avr5,
893 }),833 }),
894 };834 };
895 pub const atmega16hvbrevb = Cpu{835 pub const atmega16hvbrevb = Cpu{
896 .name = "atmega16hvbrevb",836 .name = "atmega16hvbrevb",
897 .llvm_name = "atmega16hvbrevb",837 .llvm_name = "atmega16hvbrevb",
898 .features = featureSet(&[_]Feature{838 .features = featureSet(&all_features, &[_]Feature{
899 .avr5,839 .avr5,
900 }),840 }),
901 };841 };
902 pub const atmega16m1 = Cpu{842 pub const atmega16m1 = Cpu{
903 .name = "atmega16m1",843 .name = "atmega16m1",
904 .llvm_name = "atmega16m1",844 .llvm_name = "atmega16m1",
905 .features = featureSet(&[_]Feature{845 .features = featureSet(&all_features, &[_]Feature{
906 .avr5,846 .avr5,
907 }),847 }),
908 };848 };
909 pub const atmega16u2 = Cpu{849 pub const atmega16u2 = Cpu{
910 .name = "atmega16u2",850 .name = "atmega16u2",
911 .llvm_name = "atmega16u2",851 .llvm_name = "atmega16u2",
912 .features = featureSet(&[_]Feature{852 .features = featureSet(&all_features, &[_]Feature{
913 .avr35,853 .avr35,
914 }),854 }),
915 };855 };
916 pub const atmega16u4 = Cpu{856 pub const atmega16u4 = Cpu{
917 .name = "atmega16u4",857 .name = "atmega16u4",
918 .llvm_name = "atmega16u4",858 .llvm_name = "atmega16u4",
919 .features = featureSet(&[_]Feature{859 .features = featureSet(&all_features, &[_]Feature{
920 .avr5,860 .avr5,
921 }),861 }),
922 };862 };
923 pub const atmega2560 = Cpu{863 pub const atmega2560 = Cpu{
924 .name = "atmega2560",864 .name = "atmega2560",
925 .llvm_name = "atmega2560",865 .llvm_name = "atmega2560",
926 .features = featureSet(&[_]Feature{866 .features = featureSet(&all_features, &[_]Feature{
927 .avr6,867 .avr6,
928 }),868 }),
929 };869 };
930 pub const atmega2561 = Cpu{870 pub const atmega2561 = Cpu{
931 .name = "atmega2561",871 .name = "atmega2561",
932 .llvm_name = "atmega2561",872 .llvm_name = "atmega2561",
933 .features = featureSet(&[_]Feature{873 .features = featureSet(&all_features, &[_]Feature{
934 .avr6,874 .avr6,
935 }),875 }),
936 };876 };
937 pub const atmega2564rfr2 = Cpu{877 pub const atmega2564rfr2 = Cpu{
938 .name = "atmega2564rfr2",878 .name = "atmega2564rfr2",
939 .llvm_name = "atmega2564rfr2",879 .llvm_name = "atmega2564rfr2",
940 .features = featureSet(&[_]Feature{880 .features = featureSet(&all_features, &[_]Feature{
941 .avr6,881 .avr6,
942 }),882 }),
943 };883 };
944 pub const atmega256rfr2 = Cpu{884 pub const atmega256rfr2 = Cpu{
945 .name = "atmega256rfr2",885 .name = "atmega256rfr2",
946 .llvm_name = "atmega256rfr2",886 .llvm_name = "atmega256rfr2",
947 .features = featureSet(&[_]Feature{887 .features = featureSet(&all_features, &[_]Feature{
948 .avr6,888 .avr6,
949 }),889 }),
950 };890 };
951 pub const atmega32 = Cpu{891 pub const atmega32 = Cpu{
952 .name = "atmega32",892 .name = "atmega32",
953 .llvm_name = "atmega32",893 .llvm_name = "atmega32",
954 .features = featureSet(&[_]Feature{894 .features = featureSet(&all_features, &[_]Feature{
955 .avr5,895 .avr5,
956 }),896 }),
957 };897 };
958 pub const atmega323 = Cpu{898 pub const atmega323 = Cpu{
959 .name = "atmega323",899 .name = "atmega323",
960 .llvm_name = "atmega323",900 .llvm_name = "atmega323",
961 .features = featureSet(&[_]Feature{901 .features = featureSet(&all_features, &[_]Feature{
962 .avr5,902 .avr5,
963 }),903 }),
964 };904 };
965 pub const atmega324a = Cpu{905 pub const atmega324a = Cpu{
966 .name = "atmega324a",906 .name = "atmega324a",
967 .llvm_name = "atmega324a",907 .llvm_name = "atmega324a",
968 .features = featureSet(&[_]Feature{908 .features = featureSet(&all_features, &[_]Feature{
969 .avr5,909 .avr5,
970 }),910 }),
971 };911 };
972 pub const atmega324p = Cpu{912 pub const atmega324p = Cpu{
973 .name = "atmega324p",913 .name = "atmega324p",
974 .llvm_name = "atmega324p",914 .llvm_name = "atmega324p",
975 .features = featureSet(&[_]Feature{915 .features = featureSet(&all_features, &[_]Feature{
976 .avr5,916 .avr5,
977 }),917 }),
978 };918 };
979 pub const atmega324pa = Cpu{919 pub const atmega324pa = Cpu{
980 .name = "atmega324pa",920 .name = "atmega324pa",
981 .llvm_name = "atmega324pa",921 .llvm_name = "atmega324pa",
982 .features = featureSet(&[_]Feature{922 .features = featureSet(&all_features, &[_]Feature{
983 .avr5,923 .avr5,
984 }),924 }),
985 };925 };
986 pub const atmega325 = Cpu{926 pub const atmega325 = Cpu{
987 .name = "atmega325",927 .name = "atmega325",
988 .llvm_name = "atmega325",928 .llvm_name = "atmega325",
989 .features = featureSet(&[_]Feature{929 .features = featureSet(&all_features, &[_]Feature{
990 .avr5,930 .avr5,
991 }),931 }),
992 };932 };
993 pub const atmega3250 = Cpu{933 pub const atmega3250 = Cpu{
994 .name = "atmega3250",934 .name = "atmega3250",
995 .llvm_name = "atmega3250",935 .llvm_name = "atmega3250",
996 .features = featureSet(&[_]Feature{936 .features = featureSet(&all_features, &[_]Feature{
997 .avr5,937 .avr5,
998 }),938 }),
999 };939 };
1000 pub const atmega3250a = Cpu{940 pub const atmega3250a = Cpu{
1001 .name = "atmega3250a",941 .name = "atmega3250a",
1002 .llvm_name = "atmega3250a",942 .llvm_name = "atmega3250a",
1003 .features = featureSet(&[_]Feature{943 .features = featureSet(&all_features, &[_]Feature{
1004 .avr5,944 .avr5,
1005 }),945 }),
1006 };946 };
1007 pub const atmega3250p = Cpu{947 pub const atmega3250p = Cpu{
1008 .name = "atmega3250p",948 .name = "atmega3250p",
1009 .llvm_name = "atmega3250p",949 .llvm_name = "atmega3250p",
1010 .features = featureSet(&[_]Feature{950 .features = featureSet(&all_features, &[_]Feature{
1011 .avr5,951 .avr5,
1012 }),952 }),
1013 };953 };
1014 pub const atmega3250pa = Cpu{954 pub const atmega3250pa = Cpu{
1015 .name = "atmega3250pa",955 .name = "atmega3250pa",
1016 .llvm_name = "atmega3250pa",956 .llvm_name = "atmega3250pa",
1017 .features = featureSet(&[_]Feature{957 .features = featureSet(&all_features, &[_]Feature{
1018 .avr5,958 .avr5,
1019 }),959 }),
1020 };960 };
1021 pub const atmega325a = Cpu{961 pub const atmega325a = Cpu{
1022 .name = "atmega325a",962 .name = "atmega325a",
1023 .llvm_name = "atmega325a",963 .llvm_name = "atmega325a",
1024 .features = featureSet(&[_]Feature{964 .features = featureSet(&all_features, &[_]Feature{
1025 .avr5,965 .avr5,
1026 }),966 }),
1027 };967 };
1028 pub const atmega325p = Cpu{968 pub const atmega325p = Cpu{
1029 .name = "atmega325p",969 .name = "atmega325p",
1030 .llvm_name = "atmega325p",970 .llvm_name = "atmega325p",
1031 .features = featureSet(&[_]Feature{971 .features = featureSet(&all_features, &[_]Feature{
1032 .avr5,972 .avr5,
1033 }),973 }),
1034 };974 };
1035 pub const atmega325pa = Cpu{975 pub const atmega325pa = Cpu{
1036 .name = "atmega325pa",976 .name = "atmega325pa",
1037 .llvm_name = "atmega325pa",977 .llvm_name = "atmega325pa",
1038 .features = featureSet(&[_]Feature{978 .features = featureSet(&all_features, &[_]Feature{
1039 .avr5,979 .avr5,
1040 }),980 }),
1041 };981 };
1042 pub const atmega328 = Cpu{982 pub const atmega328 = Cpu{
1043 .name = "atmega328",983 .name = "atmega328",
1044 .llvm_name = "atmega328",984 .llvm_name = "atmega328",
1045 .features = featureSet(&[_]Feature{985 .features = featureSet(&all_features, &[_]Feature{
1046 .avr5,986 .avr5,
1047 }),987 }),
1048 };988 };
1049 pub const atmega328p = Cpu{989 pub const atmega328p = Cpu{
1050 .name = "atmega328p",990 .name = "atmega328p",
1051 .llvm_name = "atmega328p",991 .llvm_name = "atmega328p",
1052 .features = featureSet(&[_]Feature{992 .features = featureSet(&all_features, &[_]Feature{
1053 .avr5,993 .avr5,
1054 }),994 }),
1055 };995 };
1056 pub const atmega329 = Cpu{996 pub const atmega329 = Cpu{
1057 .name = "atmega329",997 .name = "atmega329",
1058 .llvm_name = "atmega329",998 .llvm_name = "atmega329",
1059 .features = featureSet(&[_]Feature{999 .features = featureSet(&all_features, &[_]Feature{
1060 .avr5,1000 .avr5,
1061 }),1001 }),
1062 };1002 };
1063 pub const atmega3290 = Cpu{1003 pub const atmega3290 = Cpu{
1064 .name = "atmega3290",1004 .name = "atmega3290",
1065 .llvm_name = "atmega3290",1005 .llvm_name = "atmega3290",
1066 .features = featureSet(&[_]Feature{1006 .features = featureSet(&all_features, &[_]Feature{
1067 .avr5,1007 .avr5,
1068 }),1008 }),
1069 };1009 };
1070 pub const atmega3290a = Cpu{1010 pub const atmega3290a = Cpu{
1071 .name = "atmega3290a",1011 .name = "atmega3290a",
1072 .llvm_name = "atmega3290a",1012 .llvm_name = "atmega3290a",
1073 .features = featureSet(&[_]Feature{1013 .features = featureSet(&all_features, &[_]Feature{
1074 .avr5,1014 .avr5,
1075 }),1015 }),
1076 };1016 };
1077 pub const atmega3290p = Cpu{1017 pub const atmega3290p = Cpu{
1078 .name = "atmega3290p",1018 .name = "atmega3290p",
1079 .llvm_name = "atmega3290p",1019 .llvm_name = "atmega3290p",
1080 .features = featureSet(&[_]Feature{1020 .features = featureSet(&all_features, &[_]Feature{
1081 .avr5,1021 .avr5,
1082 }),1022 }),
1083 };1023 };
1084 pub const atmega3290pa = Cpu{1024 pub const atmega3290pa = Cpu{
1085 .name = "atmega3290pa",1025 .name = "atmega3290pa",
1086 .llvm_name = "atmega3290pa",1026 .llvm_name = "atmega3290pa",
1087 .features = featureSet(&[_]Feature{1027 .features = featureSet(&all_features, &[_]Feature{
1088 .avr5,1028 .avr5,
1089 }),1029 }),
1090 };1030 };
1091 pub const atmega329a = Cpu{1031 pub const atmega329a = Cpu{
1092 .name = "atmega329a",1032 .name = "atmega329a",
1093 .llvm_name = "atmega329a",1033 .llvm_name = "atmega329a",
1094 .features = featureSet(&[_]Feature{1034 .features = featureSet(&all_features, &[_]Feature{
1095 .avr5,1035 .avr5,
1096 }),1036 }),
1097 };1037 };
1098 pub const atmega329p = Cpu{1038 pub const atmega329p = Cpu{
1099 .name = "atmega329p",1039 .name = "atmega329p",
1100 .llvm_name = "atmega329p",1040 .llvm_name = "atmega329p",
1101 .features = featureSet(&[_]Feature{1041 .features = featureSet(&all_features, &[_]Feature{
1102 .avr5,1042 .avr5,
1103 }),1043 }),
1104 };1044 };
1105 pub const atmega329pa = Cpu{1045 pub const atmega329pa = Cpu{
1106 .name = "atmega329pa",1046 .name = "atmega329pa",
1107 .llvm_name = "atmega329pa",1047 .llvm_name = "atmega329pa",
1108 .features = featureSet(&[_]Feature{1048 .features = featureSet(&all_features, &[_]Feature{
1109 .avr5,1049 .avr5,
1110 }),1050 }),
1111 };1051 };
1112 pub const atmega32a = Cpu{1052 pub const atmega32a = Cpu{
1113 .name = "atmega32a",1053 .name = "atmega32a",
1114 .llvm_name = "atmega32a",1054 .llvm_name = "atmega32a",
1115 .features = featureSet(&[_]Feature{1055 .features = featureSet(&all_features, &[_]Feature{
1116 .avr5,1056 .avr5,
1117 }),1057 }),
1118 };1058 };
1119 pub const atmega32c1 = Cpu{1059 pub const atmega32c1 = Cpu{
1120 .name = "atmega32c1",1060 .name = "atmega32c1",
1121 .llvm_name = "atmega32c1",1061 .llvm_name = "atmega32c1",
1122 .features = featureSet(&[_]Feature{1062 .features = featureSet(&all_features, &[_]Feature{
1123 .avr5,1063 .avr5,
1124 }),1064 }),
1125 };1065 };
1126 pub const atmega32hvb = Cpu{1066 pub const atmega32hvb = Cpu{
1127 .name = "atmega32hvb",1067 .name = "atmega32hvb",
1128 .llvm_name = "atmega32hvb",1068 .llvm_name = "atmega32hvb",
1129 .features = featureSet(&[_]Feature{1069 .features = featureSet(&all_features, &[_]Feature{
1130 .avr5,1070 .avr5,
1131 }),1071 }),
1132 };1072 };
1133 pub const atmega32hvbrevb = Cpu{1073 pub const atmega32hvbrevb = Cpu{
1134 .name = "atmega32hvbrevb",1074 .name = "atmega32hvbrevb",
1135 .llvm_name = "atmega32hvbrevb",1075 .llvm_name = "atmega32hvbrevb",
1136 .features = featureSet(&[_]Feature{1076 .features = featureSet(&all_features, &[_]Feature{
1137 .avr5,1077 .avr5,
1138 }),1078 }),
1139 };1079 };
1140 pub const atmega32m1 = Cpu{1080 pub const atmega32m1 = Cpu{
1141 .name = "atmega32m1",1081 .name = "atmega32m1",
1142 .llvm_name = "atmega32m1",1082 .llvm_name = "atmega32m1",
1143 .features = featureSet(&[_]Feature{1083 .features = featureSet(&all_features, &[_]Feature{
1144 .avr5,1084 .avr5,
1145 }),1085 }),
1146 };1086 };
1147 pub const atmega32u2 = Cpu{1087 pub const atmega32u2 = Cpu{
1148 .name = "atmega32u2",1088 .name = "atmega32u2",
1149 .llvm_name = "atmega32u2",1089 .llvm_name = "atmega32u2",
1150 .features = featureSet(&[_]Feature{1090 .features = featureSet(&all_features, &[_]Feature{
1151 .avr35,1091 .avr35,
1152 }),1092 }),
1153 };1093 };
1154 pub const atmega32u4 = Cpu{1094 pub const atmega32u4 = Cpu{
1155 .name = "atmega32u4",1095 .name = "atmega32u4",
1156 .llvm_name = "atmega32u4",1096 .llvm_name = "atmega32u4",
1157 .features = featureSet(&[_]Feature{1097 .features = featureSet(&all_features, &[_]Feature{
1158 .avr5,1098 .avr5,
1159 }),1099 }),
1160 };1100 };
1161 pub const atmega32u6 = Cpu{1101 pub const atmega32u6 = Cpu{
1162 .name = "atmega32u6",1102 .name = "atmega32u6",
1163 .llvm_name = "atmega32u6",1103 .llvm_name = "atmega32u6",
1164 .features = featureSet(&[_]Feature{1104 .features = featureSet(&all_features, &[_]Feature{
1165 .avr5,1105 .avr5,
1166 }),1106 }),
1167 };1107 };
1168 pub const atmega406 = Cpu{1108 pub const atmega406 = Cpu{
1169 .name = "atmega406",1109 .name = "atmega406",
1170 .llvm_name = "atmega406",1110 .llvm_name = "atmega406",
1171 .features = featureSet(&[_]Feature{1111 .features = featureSet(&all_features, &[_]Feature{
1172 .avr5,1112 .avr5,
1173 }),1113 }),
1174 };1114 };
1175 pub const atmega48 = Cpu{1115 pub const atmega48 = Cpu{
1176 .name = "atmega48",1116 .name = "atmega48",
1177 .llvm_name = "atmega48",1117 .llvm_name = "atmega48",
1178 .features = featureSet(&[_]Feature{1118 .features = featureSet(&all_features, &[_]Feature{
1179 .avr4,1119 .avr4,
1180 }),1120 }),
1181 };1121 };
1182 pub const atmega48a = Cpu{1122 pub const atmega48a = Cpu{
1183 .name = "atmega48a",1123 .name = "atmega48a",
1184 .llvm_name = "atmega48a",1124 .llvm_name = "atmega48a",
1185 .features = featureSet(&[_]Feature{1125 .features = featureSet(&all_features, &[_]Feature{
1186 .avr4,1126 .avr4,
1187 }),1127 }),
1188 };1128 };
1189 pub const atmega48p = Cpu{1129 pub const atmega48p = Cpu{
1190 .name = "atmega48p",1130 .name = "atmega48p",
1191 .llvm_name = "atmega48p",1131 .llvm_name = "atmega48p",
1192 .features = featureSet(&[_]Feature{1132 .features = featureSet(&all_features, &[_]Feature{
1193 .avr4,1133 .avr4,
1194 }),1134 }),
1195 };1135 };
1196 pub const atmega48pa = Cpu{1136 pub const atmega48pa = Cpu{
1197 .name = "atmega48pa",1137 .name = "atmega48pa",
1198 .llvm_name = "atmega48pa",1138 .llvm_name = "atmega48pa",
1199 .features = featureSet(&[_]Feature{1139 .features = featureSet(&all_features, &[_]Feature{
1200 .avr4,1140 .avr4,
1201 }),1141 }),
1202 };1142 };
1203 pub const atmega64 = Cpu{1143 pub const atmega64 = Cpu{
1204 .name = "atmega64",1144 .name = "atmega64",
1205 .llvm_name = "atmega64",1145 .llvm_name = "atmega64",
1206 .features = featureSet(&[_]Feature{1146 .features = featureSet(&all_features, &[_]Feature{
1207 .avr5,1147 .avr5,
1208 }),1148 }),
1209 };1149 };
1210 pub const atmega640 = Cpu{1150 pub const atmega640 = Cpu{
1211 .name = "atmega640",1151 .name = "atmega640",
1212 .llvm_name = "atmega640",1152 .llvm_name = "atmega640",
1213 .features = featureSet(&[_]Feature{1153 .features = featureSet(&all_features, &[_]Feature{
1214 .avr5,1154 .avr5,
1215 }),1155 }),
1216 };1156 };
1217 pub const atmega644 = Cpu{1157 pub const atmega644 = Cpu{
1218 .name = "atmega644",1158 .name = "atmega644",
1219 .llvm_name = "atmega644",1159 .llvm_name = "atmega644",
1220 .features = featureSet(&[_]Feature{1160 .features = featureSet(&all_features, &[_]Feature{
1221 .avr5,1161 .avr5,
1222 }),1162 }),
1223 };1163 };
1224 pub const atmega644a = Cpu{1164 pub const atmega644a = Cpu{
1225 .name = "atmega644a",1165 .name = "atmega644a",
1226 .llvm_name = "atmega644a",1166 .llvm_name = "atmega644a",
1227 .features = featureSet(&[_]Feature{1167 .features = featureSet(&all_features, &[_]Feature{
1228 .avr5,1168 .avr5,
1229 }),1169 }),
1230 };1170 };
1231 pub const atmega644p = Cpu{1171 pub const atmega644p = Cpu{
1232 .name = "atmega644p",1172 .name = "atmega644p",
1233 .llvm_name = "atmega644p",1173 .llvm_name = "atmega644p",
1234 .features = featureSet(&[_]Feature{1174 .features = featureSet(&all_features, &[_]Feature{
1235 .avr5,1175 .avr5,
1236 }),1176 }),
1237 };1177 };
1238 pub const atmega644pa = Cpu{1178 pub const atmega644pa = Cpu{
1239 .name = "atmega644pa",1179 .name = "atmega644pa",
1240 .llvm_name = "atmega644pa",1180 .llvm_name = "atmega644pa",
1241 .features = featureSet(&[_]Feature{1181 .features = featureSet(&all_features, &[_]Feature{
1242 .avr5,1182 .avr5,
1243 }),1183 }),
1244 };1184 };
1245 pub const atmega644rfr2 = Cpu{1185 pub const atmega644rfr2 = Cpu{
1246 .name = "atmega644rfr2",1186 .name = "atmega644rfr2",
1247 .llvm_name = "atmega644rfr2",1187 .llvm_name = "atmega644rfr2",
1248 .features = featureSet(&[_]Feature{1188 .features = featureSet(&all_features, &[_]Feature{
1249 .avr5,1189 .avr5,
1250 }),1190 }),
1251 };1191 };
1252 pub const atmega645 = Cpu{1192 pub const atmega645 = Cpu{
1253 .name = "atmega645",1193 .name = "atmega645",
1254 .llvm_name = "atmega645",1194 .llvm_name = "atmega645",
1255 .features = featureSet(&[_]Feature{1195 .features = featureSet(&all_features, &[_]Feature{
1256 .avr5,1196 .avr5,
1257 }),1197 }),
1258 };1198 };
1259 pub const atmega6450 = Cpu{1199 pub const atmega6450 = Cpu{
1260 .name = "atmega6450",1200 .name = "atmega6450",
1261 .llvm_name = "atmega6450",1201 .llvm_name = "atmega6450",
1262 .features = featureSet(&[_]Feature{1202 .features = featureSet(&all_features, &[_]Feature{
1263 .avr5,1203 .avr5,
1264 }),1204 }),
1265 };1205 };
1266 pub const atmega6450a = Cpu{1206 pub const atmega6450a = Cpu{
1267 .name = "atmega6450a",1207 .name = "atmega6450a",
1268 .llvm_name = "atmega6450a",1208 .llvm_name = "atmega6450a",
1269 .features = featureSet(&[_]Feature{1209 .features = featureSet(&all_features, &[_]Feature{
1270 .avr5,1210 .avr5,
1271 }),1211 }),
1272 };1212 };
1273 pub const atmega6450p = Cpu{1213 pub const atmega6450p = Cpu{
1274 .name = "atmega6450p",1214 .name = "atmega6450p",
1275 .llvm_name = "atmega6450p",1215 .llvm_name = "atmega6450p",
1276 .features = featureSet(&[_]Feature{1216 .features = featureSet(&all_features, &[_]Feature{
1277 .avr5,1217 .avr5,
1278 }),1218 }),
1279 };1219 };
1280 pub const atmega645a = Cpu{1220 pub const atmega645a = Cpu{
1281 .name = "atmega645a",1221 .name = "atmega645a",
1282 .llvm_name = "atmega645a",1222 .llvm_name = "atmega645a",
1283 .features = featureSet(&[_]Feature{1223 .features = featureSet(&all_features, &[_]Feature{
1284 .avr5,1224 .avr5,
1285 }),1225 }),
1286 };1226 };
1287 pub const atmega645p = Cpu{1227 pub const atmega645p = Cpu{
1288 .name = "atmega645p",1228 .name = "atmega645p",
1289 .llvm_name = "atmega645p",1229 .llvm_name = "atmega645p",
1290 .features = featureSet(&[_]Feature{1230 .features = featureSet(&all_features, &[_]Feature{
1291 .avr5,1231 .avr5,
1292 }),1232 }),
1293 };1233 };
1294 pub const atmega649 = Cpu{1234 pub const atmega649 = Cpu{
1295 .name = "atmega649",1235 .name = "atmega649",
1296 .llvm_name = "atmega649",1236 .llvm_name = "atmega649",
1297 .features = featureSet(&[_]Feature{1237 .features = featureSet(&all_features, &[_]Feature{
1298 .avr5,1238 .avr5,
1299 }),1239 }),
1300 };1240 };
1301 pub const atmega6490 = Cpu{1241 pub const atmega6490 = Cpu{
1302 .name = "atmega6490",1242 .name = "atmega6490",
1303 .llvm_name = "atmega6490",1243 .llvm_name = "atmega6490",
1304 .features = featureSet(&[_]Feature{1244 .features = featureSet(&all_features, &[_]Feature{
1305 .avr5,1245 .avr5,
1306 }),1246 }),
1307 };1247 };
1308 pub const atmega6490a = Cpu{1248 pub const atmega6490a = Cpu{
1309 .name = "atmega6490a",1249 .name = "atmega6490a",
1310 .llvm_name = "atmega6490a",1250 .llvm_name = "atmega6490a",
1311 .features = featureSet(&[_]Feature{1251 .features = featureSet(&all_features, &[_]Feature{
1312 .avr5,1252 .avr5,
1313 }),1253 }),
1314 };1254 };
1315 pub const atmega6490p = Cpu{1255 pub const atmega6490p = Cpu{
1316 .name = "atmega6490p",1256 .name = "atmega6490p",
1317 .llvm_name = "atmega6490p",1257 .llvm_name = "atmega6490p",
1318 .features = featureSet(&[_]Feature{1258 .features = featureSet(&all_features, &[_]Feature{
1319 .avr5,1259 .avr5,
1320 }),1260 }),
1321 };1261 };
1322 pub const atmega649a = Cpu{1262 pub const atmega649a = Cpu{
1323 .name = "atmega649a",1263 .name = "atmega649a",
1324 .llvm_name = "atmega649a",1264 .llvm_name = "atmega649a",
1325 .features = featureSet(&[_]Feature{1265 .features = featureSet(&all_features, &[_]Feature{
1326 .avr5,1266 .avr5,
1327 }),1267 }),
1328 };1268 };
1329 pub const atmega649p = Cpu{1269 pub const atmega649p = Cpu{
1330 .name = "atmega649p",1270 .name = "atmega649p",
1331 .llvm_name = "atmega649p",1271 .llvm_name = "atmega649p",
1332 .features = featureSet(&[_]Feature{1272 .features = featureSet(&all_features, &[_]Feature{
1333 .avr5,1273 .avr5,
1334 }),1274 }),
1335 };1275 };
1336 pub const atmega64a = Cpu{1276 pub const atmega64a = Cpu{
1337 .name = "atmega64a",1277 .name = "atmega64a",
1338 .llvm_name = "atmega64a",1278 .llvm_name = "atmega64a",
1339 .features = featureSet(&[_]Feature{1279 .features = featureSet(&all_features, &[_]Feature{
1340 .avr5,1280 .avr5,
1341 }),1281 }),
1342 };1282 };
1343 pub const atmega64c1 = Cpu{1283 pub const atmega64c1 = Cpu{
1344 .name = "atmega64c1",1284 .name = "atmega64c1",
1345 .llvm_name = "atmega64c1",1285 .llvm_name = "atmega64c1",
1346 .features = featureSet(&[_]Feature{1286 .features = featureSet(&all_features, &[_]Feature{
1347 .avr5,1287 .avr5,
1348 }),1288 }),
1349 };1289 };
1350 pub const atmega64hve = Cpu{1290 pub const atmega64hve = Cpu{
1351 .name = "atmega64hve",1291 .name = "atmega64hve",
1352 .llvm_name = "atmega64hve",1292 .llvm_name = "atmega64hve",
1353 .features = featureSet(&[_]Feature{1293 .features = featureSet(&all_features, &[_]Feature{
1354 .avr5,1294 .avr5,
1355 }),1295 }),
1356 };1296 };
1357 pub const atmega64m1 = Cpu{1297 pub const atmega64m1 = Cpu{
1358 .name = "atmega64m1",1298 .name = "atmega64m1",
1359 .llvm_name = "atmega64m1",1299 .llvm_name = "atmega64m1",
1360 .features = featureSet(&[_]Feature{1300 .features = featureSet(&all_features, &[_]Feature{
1361 .avr5,1301 .avr5,
1362 }),1302 }),
1363 };1303 };
1364 pub const atmega64rfr2 = Cpu{1304 pub const atmega64rfr2 = Cpu{
1365 .name = "atmega64rfr2",1305 .name = "atmega64rfr2",
1366 .llvm_name = "atmega64rfr2",1306 .llvm_name = "atmega64rfr2",
1367 .features = featureSet(&[_]Feature{1307 .features = featureSet(&all_features, &[_]Feature{
1368 .avr5,1308 .avr5,
1369 }),1309 }),
1370 };1310 };
1371 pub const atmega8 = Cpu{1311 pub const atmega8 = Cpu{
1372 .name = "atmega8",1312 .name = "atmega8",
1373 .llvm_name = "atmega8",1313 .llvm_name = "atmega8",
1374 .features = featureSet(&[_]Feature{1314 .features = featureSet(&all_features, &[_]Feature{
1375 .avr4,1315 .avr4,
1376 }),1316 }),
1377 };1317 };
1378 pub const atmega8515 = Cpu{1318 pub const atmega8515 = Cpu{
1379 .name = "atmega8515",1319 .name = "atmega8515",
1380 .llvm_name = "atmega8515",1320 .llvm_name = "atmega8515",
1381 .features = featureSet(&[_]Feature{1321 .features = featureSet(&all_features, &[_]Feature{
1382 .avr2,1322 .avr2,
1383 .lpmx,1323 .lpmx,
1384 .movw,1324 .movw,
...@@ -1389,7 +1329,7 @@ pub const cpu = struct {...@@ -1389,7 +1329,7 @@ pub const cpu = struct {
1389 pub const atmega8535 = Cpu{1329 pub const atmega8535 = Cpu{
1390 .name = "atmega8535",1330 .name = "atmega8535",
1391 .llvm_name = "atmega8535",1331 .llvm_name = "atmega8535",
1392 .features = featureSet(&[_]Feature{1332 .features = featureSet(&all_features, &[_]Feature{
1393 .avr2,1333 .avr2,
1394 .lpmx,1334 .lpmx,
1395 .movw,1335 .movw,
...@@ -1400,175 +1340,175 @@ pub const cpu = struct {...@@ -1400,175 +1340,175 @@ pub const cpu = struct {
1400 pub const atmega88 = Cpu{1340 pub const atmega88 = Cpu{
1401 .name = "atmega88",1341 .name = "atmega88",
1402 .llvm_name = "atmega88",1342 .llvm_name = "atmega88",
1403 .features = featureSet(&[_]Feature{1343 .features = featureSet(&all_features, &[_]Feature{
1404 .avr4,1344 .avr4,
1405 }),1345 }),
1406 };1346 };
1407 pub const atmega88a = Cpu{1347 pub const atmega88a = Cpu{
1408 .name = "atmega88a",1348 .name = "atmega88a",
1409 .llvm_name = "atmega88a",1349 .llvm_name = "atmega88a",
1410 .features = featureSet(&[_]Feature{1350 .features = featureSet(&all_features, &[_]Feature{
1411 .avr4,1351 .avr4,
1412 }),1352 }),
1413 };1353 };
1414 pub const atmega88p = Cpu{1354 pub const atmega88p = Cpu{
1415 .name = "atmega88p",1355 .name = "atmega88p",
1416 .llvm_name = "atmega88p",1356 .llvm_name = "atmega88p",
1417 .features = featureSet(&[_]Feature{1357 .features = featureSet(&all_features, &[_]Feature{
1418 .avr4,1358 .avr4,
1419 }),1359 }),
1420 };1360 };
1421 pub const atmega88pa = Cpu{1361 pub const atmega88pa = Cpu{
1422 .name = "atmega88pa",1362 .name = "atmega88pa",
1423 .llvm_name = "atmega88pa",1363 .llvm_name = "atmega88pa",
1424 .features = featureSet(&[_]Feature{1364 .features = featureSet(&all_features, &[_]Feature{
1425 .avr4,1365 .avr4,
1426 }),1366 }),
1427 };1367 };
1428 pub const atmega8a = Cpu{1368 pub const atmega8a = Cpu{
1429 .name = "atmega8a",1369 .name = "atmega8a",
1430 .llvm_name = "atmega8a",1370 .llvm_name = "atmega8a",
1431 .features = featureSet(&[_]Feature{1371 .features = featureSet(&all_features, &[_]Feature{
1432 .avr4,1372 .avr4,
1433 }),1373 }),
1434 };1374 };
1435 pub const atmega8hva = Cpu{1375 pub const atmega8hva = Cpu{
1436 .name = "atmega8hva",1376 .name = "atmega8hva",
1437 .llvm_name = "atmega8hva",1377 .llvm_name = "atmega8hva",
1438 .features = featureSet(&[_]Feature{1378 .features = featureSet(&all_features, &[_]Feature{
1439 .avr4,1379 .avr4,
1440 }),1380 }),
1441 };1381 };
1442 pub const atmega8u2 = Cpu{1382 pub const atmega8u2 = Cpu{
1443 .name = "atmega8u2",1383 .name = "atmega8u2",
1444 .llvm_name = "atmega8u2",1384 .llvm_name = "atmega8u2",
1445 .features = featureSet(&[_]Feature{1385 .features = featureSet(&all_features, &[_]Feature{
1446 .avr35,1386 .avr35,
1447 }),1387 }),
1448 };1388 };
1449 pub const attiny10 = Cpu{1389 pub const attiny10 = Cpu{
1450 .name = "attiny10",1390 .name = "attiny10",
1451 .llvm_name = "attiny10",1391 .llvm_name = "attiny10",
1452 .features = featureSet(&[_]Feature{1392 .features = featureSet(&all_features, &[_]Feature{
1453 .avrtiny,1393 .avrtiny,
1454 }),1394 }),
1455 };1395 };
1456 pub const attiny102 = Cpu{1396 pub const attiny102 = Cpu{
1457 .name = "attiny102",1397 .name = "attiny102",
1458 .llvm_name = "attiny102",1398 .llvm_name = "attiny102",
1459 .features = featureSet(&[_]Feature{1399 .features = featureSet(&all_features, &[_]Feature{
1460 .avrtiny,1400 .avrtiny,
1461 }),1401 }),
1462 };1402 };
1463 pub const attiny104 = Cpu{1403 pub const attiny104 = Cpu{
1464 .name = "attiny104",1404 .name = "attiny104",
1465 .llvm_name = "attiny104",1405 .llvm_name = "attiny104",
1466 .features = featureSet(&[_]Feature{1406 .features = featureSet(&all_features, &[_]Feature{
1467 .avrtiny,1407 .avrtiny,
1468 }),1408 }),
1469 };1409 };
1470 pub const attiny11 = Cpu{1410 pub const attiny11 = Cpu{
1471 .name = "attiny11",1411 .name = "attiny11",
1472 .llvm_name = "attiny11",1412 .llvm_name = "attiny11",
1473 .features = featureSet(&[_]Feature{1413 .features = featureSet(&all_features, &[_]Feature{
1474 .avr1,1414 .avr1,
1475 }),1415 }),
1476 };1416 };
1477 pub const attiny12 = Cpu{1417 pub const attiny12 = Cpu{
1478 .name = "attiny12",1418 .name = "attiny12",
1479 .llvm_name = "attiny12",1419 .llvm_name = "attiny12",
1480 .features = featureSet(&[_]Feature{1420 .features = featureSet(&all_features, &[_]Feature{
1481 .avr1,1421 .avr1,
1482 }),1422 }),
1483 };1423 };
1484 pub const attiny13 = Cpu{1424 pub const attiny13 = Cpu{
1485 .name = "attiny13",1425 .name = "attiny13",
1486 .llvm_name = "attiny13",1426 .llvm_name = "attiny13",
1487 .features = featureSet(&[_]Feature{1427 .features = featureSet(&all_features, &[_]Feature{
1488 .avr25,1428 .avr25,
1489 }),1429 }),
1490 };1430 };
1491 pub const attiny13a = Cpu{1431 pub const attiny13a = Cpu{
1492 .name = "attiny13a",1432 .name = "attiny13a",
1493 .llvm_name = "attiny13a",1433 .llvm_name = "attiny13a",
1494 .features = featureSet(&[_]Feature{1434 .features = featureSet(&all_features, &[_]Feature{
1495 .avr25,1435 .avr25,
1496 }),1436 }),
1497 };1437 };
1498 pub const attiny15 = Cpu{1438 pub const attiny15 = Cpu{
1499 .name = "attiny15",1439 .name = "attiny15",
1500 .llvm_name = "attiny15",1440 .llvm_name = "attiny15",
1501 .features = featureSet(&[_]Feature{1441 .features = featureSet(&all_features, &[_]Feature{
1502 .avr1,1442 .avr1,
1503 }),1443 }),
1504 };1444 };
1505 pub const attiny1634 = Cpu{1445 pub const attiny1634 = Cpu{
1506 .name = "attiny1634",1446 .name = "attiny1634",
1507 .llvm_name = "attiny1634",1447 .llvm_name = "attiny1634",
1508 .features = featureSet(&[_]Feature{1448 .features = featureSet(&all_features, &[_]Feature{
1509 .avr35,1449 .avr35,
1510 }),1450 }),
1511 };1451 };
1512 pub const attiny167 = Cpu{1452 pub const attiny167 = Cpu{
1513 .name = "attiny167",1453 .name = "attiny167",
1514 .llvm_name = "attiny167",1454 .llvm_name = "attiny167",
1515 .features = featureSet(&[_]Feature{1455 .features = featureSet(&all_features, &[_]Feature{
1516 .avr35,1456 .avr35,
1517 }),1457 }),
1518 };1458 };
1519 pub const attiny20 = Cpu{1459 pub const attiny20 = Cpu{
1520 .name = "attiny20",1460 .name = "attiny20",
1521 .llvm_name = "attiny20",1461 .llvm_name = "attiny20",
1522 .features = featureSet(&[_]Feature{1462 .features = featureSet(&all_features, &[_]Feature{
1523 .avrtiny,1463 .avrtiny,
1524 }),1464 }),
1525 };1465 };
1526 pub const attiny22 = Cpu{1466 pub const attiny22 = Cpu{
1527 .name = "attiny22",1467 .name = "attiny22",
1528 .llvm_name = "attiny22",1468 .llvm_name = "attiny22",
1529 .features = featureSet(&[_]Feature{1469 .features = featureSet(&all_features, &[_]Feature{
1530 .avr2,1470 .avr2,
1531 }),1471 }),
1532 };1472 };
1533 pub const attiny2313 = Cpu{1473 pub const attiny2313 = Cpu{
1534 .name = "attiny2313",1474 .name = "attiny2313",
1535 .llvm_name = "attiny2313",1475 .llvm_name = "attiny2313",
1536 .features = featureSet(&[_]Feature{1476 .features = featureSet(&all_features, &[_]Feature{
1537 .avr25,1477 .avr25,
1538 }),1478 }),
1539 };1479 };
1540 pub const attiny2313a = Cpu{1480 pub const attiny2313a = Cpu{
1541 .name = "attiny2313a",1481 .name = "attiny2313a",
1542 .llvm_name = "attiny2313a",1482 .llvm_name = "attiny2313a",
1543 .features = featureSet(&[_]Feature{1483 .features = featureSet(&all_features, &[_]Feature{
1544 .avr25,1484 .avr25,
1545 }),1485 }),
1546 };1486 };
1547 pub const attiny24 = Cpu{1487 pub const attiny24 = Cpu{
1548 .name = "attiny24",1488 .name = "attiny24",
1549 .llvm_name = "attiny24",1489 .llvm_name = "attiny24",
1550 .features = featureSet(&[_]Feature{1490 .features = featureSet(&all_features, &[_]Feature{
1551 .avr25,1491 .avr25,
1552 }),1492 }),
1553 };1493 };
1554 pub const attiny24a = Cpu{1494 pub const attiny24a = Cpu{
1555 .name = "attiny24a",1495 .name = "attiny24a",
1556 .llvm_name = "attiny24a",1496 .llvm_name = "attiny24a",
1557 .features = featureSet(&[_]Feature{1497 .features = featureSet(&all_features, &[_]Feature{
1558 .avr25,1498 .avr25,
1559 }),1499 }),
1560 };1500 };
1561 pub const attiny25 = Cpu{1501 pub const attiny25 = Cpu{
1562 .name = "attiny25",1502 .name = "attiny25",
1563 .llvm_name = "attiny25",1503 .llvm_name = "attiny25",
1564 .features = featureSet(&[_]Feature{1504 .features = featureSet(&all_features, &[_]Feature{
1565 .avr25,1505 .avr25,
1566 }),1506 }),
1567 };1507 };
1568 pub const attiny26 = Cpu{1508 pub const attiny26 = Cpu{
1569 .name = "attiny26",1509 .name = "attiny26",
1570 .llvm_name = "attiny26",1510 .llvm_name = "attiny26",
1571 .features = featureSet(&[_]Feature{1511 .features = featureSet(&all_features, &[_]Feature{
1572 .avr2,1512 .avr2,
1573 .lpmx,1513 .lpmx,
1574 }),1514 }),
...@@ -1576,602 +1516,602 @@ pub const cpu = struct {...@@ -1576,602 +1516,602 @@ pub const cpu = struct {
1576 pub const attiny261 = Cpu{1516 pub const attiny261 = Cpu{
1577 .name = "attiny261",1517 .name = "attiny261",
1578 .llvm_name = "attiny261",1518 .llvm_name = "attiny261",
1579 .features = featureSet(&[_]Feature{1519 .features = featureSet(&all_features, &[_]Feature{
1580 .avr25,1520 .avr25,
1581 }),1521 }),
1582 };1522 };
1583 pub const attiny261a = Cpu{1523 pub const attiny261a = Cpu{
1584 .name = "attiny261a",1524 .name = "attiny261a",
1585 .llvm_name = "attiny261a",1525 .llvm_name = "attiny261a",
1586 .features = featureSet(&[_]Feature{1526 .features = featureSet(&all_features, &[_]Feature{
1587 .avr25,1527 .avr25,
1588 }),1528 }),
1589 };1529 };
1590 pub const attiny28 = Cpu{1530 pub const attiny28 = Cpu{
1591 .name = "attiny28",1531 .name = "attiny28",
1592 .llvm_name = "attiny28",1532 .llvm_name = "attiny28",
1593 .features = featureSet(&[_]Feature{1533 .features = featureSet(&all_features, &[_]Feature{
1594 .avr1,1534 .avr1,
1595 }),1535 }),
1596 };1536 };
1597 pub const attiny4 = Cpu{1537 pub const attiny4 = Cpu{
1598 .name = "attiny4",1538 .name = "attiny4",
1599 .llvm_name = "attiny4",1539 .llvm_name = "attiny4",
1600 .features = featureSet(&[_]Feature{1540 .features = featureSet(&all_features, &[_]Feature{
1601 .avrtiny,1541 .avrtiny,
1602 }),1542 }),
1603 };1543 };
1604 pub const attiny40 = Cpu{1544 pub const attiny40 = Cpu{
1605 .name = "attiny40",1545 .name = "attiny40",
1606 .llvm_name = "attiny40",1546 .llvm_name = "attiny40",
1607 .features = featureSet(&[_]Feature{1547 .features = featureSet(&all_features, &[_]Feature{
1608 .avrtiny,1548 .avrtiny,
1609 }),1549 }),
1610 };1550 };
1611 pub const attiny4313 = Cpu{1551 pub const attiny4313 = Cpu{
1612 .name = "attiny4313",1552 .name = "attiny4313",
1613 .llvm_name = "attiny4313",1553 .llvm_name = "attiny4313",
1614 .features = featureSet(&[_]Feature{1554 .features = featureSet(&all_features, &[_]Feature{
1615 .avr25,1555 .avr25,
1616 }),1556 }),
1617 };1557 };
1618 pub const attiny43u = Cpu{1558 pub const attiny43u = Cpu{
1619 .name = "attiny43u",1559 .name = "attiny43u",
1620 .llvm_name = "attiny43u",1560 .llvm_name = "attiny43u",
1621 .features = featureSet(&[_]Feature{1561 .features = featureSet(&all_features, &[_]Feature{
1622 .avr25,1562 .avr25,
1623 }),1563 }),
1624 };1564 };
1625 pub const attiny44 = Cpu{1565 pub const attiny44 = Cpu{
1626 .name = "attiny44",1566 .name = "attiny44",
1627 .llvm_name = "attiny44",1567 .llvm_name = "attiny44",
1628 .features = featureSet(&[_]Feature{1568 .features = featureSet(&all_features, &[_]Feature{
1629 .avr25,1569 .avr25,
1630 }),1570 }),
1631 };1571 };
1632 pub const attiny44a = Cpu{1572 pub const attiny44a = Cpu{
1633 .name = "attiny44a",1573 .name = "attiny44a",
1634 .llvm_name = "attiny44a",1574 .llvm_name = "attiny44a",
1635 .features = featureSet(&[_]Feature{1575 .features = featureSet(&all_features, &[_]Feature{
1636 .avr25,1576 .avr25,
1637 }),1577 }),
1638 };1578 };
1639 pub const attiny45 = Cpu{1579 pub const attiny45 = Cpu{
1640 .name = "attiny45",1580 .name = "attiny45",
1641 .llvm_name = "attiny45",1581 .llvm_name = "attiny45",
1642 .features = featureSet(&[_]Feature{1582 .features = featureSet(&all_features, &[_]Feature{
1643 .avr25,1583 .avr25,
1644 }),1584 }),
1645 };1585 };
1646 pub const attiny461 = Cpu{1586 pub const attiny461 = Cpu{
1647 .name = "attiny461",1587 .name = "attiny461",
1648 .llvm_name = "attiny461",1588 .llvm_name = "attiny461",
1649 .features = featureSet(&[_]Feature{1589 .features = featureSet(&all_features, &[_]Feature{
1650 .avr25,1590 .avr25,
1651 }),1591 }),
1652 };1592 };
1653 pub const attiny461a = Cpu{1593 pub const attiny461a = Cpu{
1654 .name = "attiny461a",1594 .name = "attiny461a",
1655 .llvm_name = "attiny461a",1595 .llvm_name = "attiny461a",
1656 .features = featureSet(&[_]Feature{1596 .features = featureSet(&all_features, &[_]Feature{
1657 .avr25,1597 .avr25,
1658 }),1598 }),
1659 };1599 };
1660 pub const attiny48 = Cpu{1600 pub const attiny48 = Cpu{
1661 .name = "attiny48",1601 .name = "attiny48",
1662 .llvm_name = "attiny48",1602 .llvm_name = "attiny48",
1663 .features = featureSet(&[_]Feature{1603 .features = featureSet(&all_features, &[_]Feature{
1664 .avr25,1604 .avr25,
1665 }),1605 }),
1666 };1606 };
1667 pub const attiny5 = Cpu{1607 pub const attiny5 = Cpu{
1668 .name = "attiny5",1608 .name = "attiny5",
1669 .llvm_name = "attiny5",1609 .llvm_name = "attiny5",
1670 .features = featureSet(&[_]Feature{1610 .features = featureSet(&all_features, &[_]Feature{
1671 .avrtiny,1611 .avrtiny,
1672 }),1612 }),
1673 };1613 };
1674 pub const attiny828 = Cpu{1614 pub const attiny828 = Cpu{
1675 .name = "attiny828",1615 .name = "attiny828",
1676 .llvm_name = "attiny828",1616 .llvm_name = "attiny828",
1677 .features = featureSet(&[_]Feature{1617 .features = featureSet(&all_features, &[_]Feature{
1678 .avr25,1618 .avr25,
1679 }),1619 }),
1680 };1620 };
1681 pub const attiny84 = Cpu{1621 pub const attiny84 = Cpu{
1682 .name = "attiny84",1622 .name = "attiny84",
1683 .llvm_name = "attiny84",1623 .llvm_name = "attiny84",
1684 .features = featureSet(&[_]Feature{1624 .features = featureSet(&all_features, &[_]Feature{
1685 .avr25,1625 .avr25,
1686 }),1626 }),
1687 };1627 };
1688 pub const attiny84a = Cpu{1628 pub const attiny84a = Cpu{
1689 .name = "attiny84a",1629 .name = "attiny84a",
1690 .llvm_name = "attiny84a",1630 .llvm_name = "attiny84a",
1691 .features = featureSet(&[_]Feature{1631 .features = featureSet(&all_features, &[_]Feature{
1692 .avr25,1632 .avr25,
1693 }),1633 }),
1694 };1634 };
1695 pub const attiny85 = Cpu{1635 pub const attiny85 = Cpu{
1696 .name = "attiny85",1636 .name = "attiny85",
1697 .llvm_name = "attiny85",1637 .llvm_name = "attiny85",
1698 .features = featureSet(&[_]Feature{1638 .features = featureSet(&all_features, &[_]Feature{
1699 .avr25,1639 .avr25,
1700 }),1640 }),
1701 };1641 };
1702 pub const attiny861 = Cpu{1642 pub const attiny861 = Cpu{
1703 .name = "attiny861",1643 .name = "attiny861",
1704 .llvm_name = "attiny861",1644 .llvm_name = "attiny861",
1705 .features = featureSet(&[_]Feature{1645 .features = featureSet(&all_features, &[_]Feature{
1706 .avr25,1646 .avr25,
1707 }),1647 }),
1708 };1648 };
1709 pub const attiny861a = Cpu{1649 pub const attiny861a = Cpu{
1710 .name = "attiny861a",1650 .name = "attiny861a",
1711 .llvm_name = "attiny861a",1651 .llvm_name = "attiny861a",
1712 .features = featureSet(&[_]Feature{1652 .features = featureSet(&all_features, &[_]Feature{
1713 .avr25,1653 .avr25,
1714 }),1654 }),
1715 };1655 };
1716 pub const attiny87 = Cpu{1656 pub const attiny87 = Cpu{
1717 .name = "attiny87",1657 .name = "attiny87",
1718 .llvm_name = "attiny87",1658 .llvm_name = "attiny87",
1719 .features = featureSet(&[_]Feature{1659 .features = featureSet(&all_features, &[_]Feature{
1720 .avr25,1660 .avr25,
1721 }),1661 }),
1722 };1662 };
1723 pub const attiny88 = Cpu{1663 pub const attiny88 = Cpu{
1724 .name = "attiny88",1664 .name = "attiny88",
1725 .llvm_name = "attiny88",1665 .llvm_name = "attiny88",
1726 .features = featureSet(&[_]Feature{1666 .features = featureSet(&all_features, &[_]Feature{
1727 .avr25,1667 .avr25,
1728 }),1668 }),
1729 };1669 };
1730 pub const attiny9 = Cpu{1670 pub const attiny9 = Cpu{
1731 .name = "attiny9",1671 .name = "attiny9",
1732 .llvm_name = "attiny9",1672 .llvm_name = "attiny9",
1733 .features = featureSet(&[_]Feature{1673 .features = featureSet(&all_features, &[_]Feature{
1734 .avrtiny,1674 .avrtiny,
1735 }),1675 }),
1736 };1676 };
1737 pub const atxmega128a1 = Cpu{1677 pub const atxmega128a1 = Cpu{
1738 .name = "atxmega128a1",1678 .name = "atxmega128a1",
1739 .llvm_name = "atxmega128a1",1679 .llvm_name = "atxmega128a1",
1740 .features = featureSet(&[_]Feature{1680 .features = featureSet(&all_features, &[_]Feature{
1741 .xmega,1681 .xmega,
1742 }),1682 }),
1743 };1683 };
1744 pub const atxmega128a1u = Cpu{1684 pub const atxmega128a1u = Cpu{
1745 .name = "atxmega128a1u",1685 .name = "atxmega128a1u",
1746 .llvm_name = "atxmega128a1u",1686 .llvm_name = "atxmega128a1u",
1747 .features = featureSet(&[_]Feature{1687 .features = featureSet(&all_features, &[_]Feature{
1748 .xmegau,1688 .xmegau,
1749 }),1689 }),
1750 };1690 };
1751 pub const atxmega128a3 = Cpu{1691 pub const atxmega128a3 = Cpu{
1752 .name = "atxmega128a3",1692 .name = "atxmega128a3",
1753 .llvm_name = "atxmega128a3",1693 .llvm_name = "atxmega128a3",
1754 .features = featureSet(&[_]Feature{1694 .features = featureSet(&all_features, &[_]Feature{
1755 .xmega,1695 .xmega,
1756 }),1696 }),
1757 };1697 };
1758 pub const atxmega128a3u = Cpu{1698 pub const atxmega128a3u = Cpu{
1759 .name = "atxmega128a3u",1699 .name = "atxmega128a3u",
1760 .llvm_name = "atxmega128a3u",1700 .llvm_name = "atxmega128a3u",
1761 .features = featureSet(&[_]Feature{1701 .features = featureSet(&all_features, &[_]Feature{
1762 .xmegau,1702 .xmegau,
1763 }),1703 }),
1764 };1704 };
1765 pub const atxmega128a4u = Cpu{1705 pub const atxmega128a4u = Cpu{
1766 .name = "atxmega128a4u",1706 .name = "atxmega128a4u",
1767 .llvm_name = "atxmega128a4u",1707 .llvm_name = "atxmega128a4u",
1768 .features = featureSet(&[_]Feature{1708 .features = featureSet(&all_features, &[_]Feature{
1769 .xmegau,1709 .xmegau,
1770 }),1710 }),
1771 };1711 };
1772 pub const atxmega128b1 = Cpu{1712 pub const atxmega128b1 = Cpu{
1773 .name = "atxmega128b1",1713 .name = "atxmega128b1",
1774 .llvm_name = "atxmega128b1",1714 .llvm_name = "atxmega128b1",
1775 .features = featureSet(&[_]Feature{1715 .features = featureSet(&all_features, &[_]Feature{
1776 .xmegau,1716 .xmegau,
1777 }),1717 }),
1778 };1718 };
1779 pub const atxmega128b3 = Cpu{1719 pub const atxmega128b3 = Cpu{
1780 .name = "atxmega128b3",1720 .name = "atxmega128b3",
1781 .llvm_name = "atxmega128b3",1721 .llvm_name = "atxmega128b3",
1782 .features = featureSet(&[_]Feature{1722 .features = featureSet(&all_features, &[_]Feature{
1783 .xmegau,1723 .xmegau,
1784 }),1724 }),
1785 };1725 };
1786 pub const atxmega128c3 = Cpu{1726 pub const atxmega128c3 = Cpu{
1787 .name = "atxmega128c3",1727 .name = "atxmega128c3",
1788 .llvm_name = "atxmega128c3",1728 .llvm_name = "atxmega128c3",
1789 .features = featureSet(&[_]Feature{1729 .features = featureSet(&all_features, &[_]Feature{
1790 .xmegau,1730 .xmegau,
1791 }),1731 }),
1792 };1732 };
1793 pub const atxmega128d3 = Cpu{1733 pub const atxmega128d3 = Cpu{
1794 .name = "atxmega128d3",1734 .name = "atxmega128d3",
1795 .llvm_name = "atxmega128d3",1735 .llvm_name = "atxmega128d3",
1796 .features = featureSet(&[_]Feature{1736 .features = featureSet(&all_features, &[_]Feature{
1797 .xmega,1737 .xmega,
1798 }),1738 }),
1799 };1739 };
1800 pub const atxmega128d4 = Cpu{1740 pub const atxmega128d4 = Cpu{
1801 .name = "atxmega128d4",1741 .name = "atxmega128d4",
1802 .llvm_name = "atxmega128d4",1742 .llvm_name = "atxmega128d4",
1803 .features = featureSet(&[_]Feature{1743 .features = featureSet(&all_features, &[_]Feature{
1804 .xmega,1744 .xmega,
1805 }),1745 }),
1806 };1746 };
1807 pub const atxmega16a4 = Cpu{1747 pub const atxmega16a4 = Cpu{
1808 .name = "atxmega16a4",1748 .name = "atxmega16a4",
1809 .llvm_name = "atxmega16a4",1749 .llvm_name = "atxmega16a4",
1810 .features = featureSet(&[_]Feature{1750 .features = featureSet(&all_features, &[_]Feature{
1811 .xmega,1751 .xmega,
1812 }),1752 }),
1813 };1753 };
1814 pub const atxmega16a4u = Cpu{1754 pub const atxmega16a4u = Cpu{
1815 .name = "atxmega16a4u",1755 .name = "atxmega16a4u",
1816 .llvm_name = "atxmega16a4u",1756 .llvm_name = "atxmega16a4u",
1817 .features = featureSet(&[_]Feature{1757 .features = featureSet(&all_features, &[_]Feature{
1818 .xmegau,1758 .xmegau,
1819 }),1759 }),
1820 };1760 };
1821 pub const atxmega16c4 = Cpu{1761 pub const atxmega16c4 = Cpu{
1822 .name = "atxmega16c4",1762 .name = "atxmega16c4",
1823 .llvm_name = "atxmega16c4",1763 .llvm_name = "atxmega16c4",
1824 .features = featureSet(&[_]Feature{1764 .features = featureSet(&all_features, &[_]Feature{
1825 .xmegau,1765 .xmegau,
1826 }),1766 }),
1827 };1767 };
1828 pub const atxmega16d4 = Cpu{1768 pub const atxmega16d4 = Cpu{
1829 .name = "atxmega16d4",1769 .name = "atxmega16d4",
1830 .llvm_name = "atxmega16d4",1770 .llvm_name = "atxmega16d4",
1831 .features = featureSet(&[_]Feature{1771 .features = featureSet(&all_features, &[_]Feature{
1832 .xmega,1772 .xmega,
1833 }),1773 }),
1834 };1774 };
1835 pub const atxmega16e5 = Cpu{1775 pub const atxmega16e5 = Cpu{
1836 .name = "atxmega16e5",1776 .name = "atxmega16e5",
1837 .llvm_name = "atxmega16e5",1777 .llvm_name = "atxmega16e5",
1838 .features = featureSet(&[_]Feature{1778 .features = featureSet(&all_features, &[_]Feature{
1839 .xmega,1779 .xmega,
1840 }),1780 }),
1841 };1781 };
1842 pub const atxmega192a3 = Cpu{1782 pub const atxmega192a3 = Cpu{
1843 .name = "atxmega192a3",1783 .name = "atxmega192a3",
1844 .llvm_name = "atxmega192a3",1784 .llvm_name = "atxmega192a3",
1845 .features = featureSet(&[_]Feature{1785 .features = featureSet(&all_features, &[_]Feature{
1846 .xmega,1786 .xmega,
1847 }),1787 }),
1848 };1788 };
1849 pub const atxmega192a3u = Cpu{1789 pub const atxmega192a3u = Cpu{
1850 .name = "atxmega192a3u",1790 .name = "atxmega192a3u",
1851 .llvm_name = "atxmega192a3u",1791 .llvm_name = "atxmega192a3u",
1852 .features = featureSet(&[_]Feature{1792 .features = featureSet(&all_features, &[_]Feature{
1853 .xmegau,1793 .xmegau,
1854 }),1794 }),
1855 };1795 };
1856 pub const atxmega192c3 = Cpu{1796 pub const atxmega192c3 = Cpu{
1857 .name = "atxmega192c3",1797 .name = "atxmega192c3",
1858 .llvm_name = "atxmega192c3",1798 .llvm_name = "atxmega192c3",
1859 .features = featureSet(&[_]Feature{1799 .features = featureSet(&all_features, &[_]Feature{
1860 .xmegau,1800 .xmegau,
1861 }),1801 }),
1862 };1802 };
1863 pub const atxmega192d3 = Cpu{1803 pub const atxmega192d3 = Cpu{
1864 .name = "atxmega192d3",1804 .name = "atxmega192d3",
1865 .llvm_name = "atxmega192d3",1805 .llvm_name = "atxmega192d3",
1866 .features = featureSet(&[_]Feature{1806 .features = featureSet(&all_features, &[_]Feature{
1867 .xmega,1807 .xmega,
1868 }),1808 }),
1869 };1809 };
1870 pub const atxmega256a3 = Cpu{1810 pub const atxmega256a3 = Cpu{
1871 .name = "atxmega256a3",1811 .name = "atxmega256a3",
1872 .llvm_name = "atxmega256a3",1812 .llvm_name = "atxmega256a3",
1873 .features = featureSet(&[_]Feature{1813 .features = featureSet(&all_features, &[_]Feature{
1874 .xmega,1814 .xmega,
1875 }),1815 }),
1876 };1816 };
1877 pub const atxmega256a3b = Cpu{1817 pub const atxmega256a3b = Cpu{
1878 .name = "atxmega256a3b",1818 .name = "atxmega256a3b",
1879 .llvm_name = "atxmega256a3b",1819 .llvm_name = "atxmega256a3b",
1880 .features = featureSet(&[_]Feature{1820 .features = featureSet(&all_features, &[_]Feature{
1881 .xmega,1821 .xmega,
1882 }),1822 }),
1883 };1823 };
1884 pub const atxmega256a3bu = Cpu{1824 pub const atxmega256a3bu = Cpu{
1885 .name = "atxmega256a3bu",1825 .name = "atxmega256a3bu",
1886 .llvm_name = "atxmega256a3bu",1826 .llvm_name = "atxmega256a3bu",
1887 .features = featureSet(&[_]Feature{1827 .features = featureSet(&all_features, &[_]Feature{
1888 .xmegau,1828 .xmegau,
1889 }),1829 }),
1890 };1830 };
1891 pub const atxmega256a3u = Cpu{1831 pub const atxmega256a3u = Cpu{
1892 .name = "atxmega256a3u",1832 .name = "atxmega256a3u",
1893 .llvm_name = "atxmega256a3u",1833 .llvm_name = "atxmega256a3u",
1894 .features = featureSet(&[_]Feature{1834 .features = featureSet(&all_features, &[_]Feature{
1895 .xmegau,1835 .xmegau,
1896 }),1836 }),
1897 };1837 };
1898 pub const atxmega256c3 = Cpu{1838 pub const atxmega256c3 = Cpu{
1899 .name = "atxmega256c3",1839 .name = "atxmega256c3",
1900 .llvm_name = "atxmega256c3",1840 .llvm_name = "atxmega256c3",
1901 .features = featureSet(&[_]Feature{1841 .features = featureSet(&all_features, &[_]Feature{
1902 .xmegau,1842 .xmegau,
1903 }),1843 }),
1904 };1844 };
1905 pub const atxmega256d3 = Cpu{1845 pub const atxmega256d3 = Cpu{
1906 .name = "atxmega256d3",1846 .name = "atxmega256d3",
1907 .llvm_name = "atxmega256d3",1847 .llvm_name = "atxmega256d3",
1908 .features = featureSet(&[_]Feature{1848 .features = featureSet(&all_features, &[_]Feature{
1909 .xmega,1849 .xmega,
1910 }),1850 }),
1911 };1851 };
1912 pub const atxmega32a4 = Cpu{1852 pub const atxmega32a4 = Cpu{
1913 .name = "atxmega32a4",1853 .name = "atxmega32a4",
1914 .llvm_name = "atxmega32a4",1854 .llvm_name = "atxmega32a4",
1915 .features = featureSet(&[_]Feature{1855 .features = featureSet(&all_features, &[_]Feature{
1916 .xmega,1856 .xmega,
1917 }),1857 }),
1918 };1858 };
1919 pub const atxmega32a4u = Cpu{1859 pub const atxmega32a4u = Cpu{
1920 .name = "atxmega32a4u",1860 .name = "atxmega32a4u",
1921 .llvm_name = "atxmega32a4u",1861 .llvm_name = "atxmega32a4u",
1922 .features = featureSet(&[_]Feature{1862 .features = featureSet(&all_features, &[_]Feature{
1923 .xmegau,1863 .xmegau,
1924 }),1864 }),
1925 };1865 };
1926 pub const atxmega32c4 = Cpu{1866 pub const atxmega32c4 = Cpu{
1927 .name = "atxmega32c4",1867 .name = "atxmega32c4",
1928 .llvm_name = "atxmega32c4",1868 .llvm_name = "atxmega32c4",
1929 .features = featureSet(&[_]Feature{1869 .features = featureSet(&all_features, &[_]Feature{
1930 .xmegau,1870 .xmegau,
1931 }),1871 }),
1932 };1872 };
1933 pub const atxmega32d4 = Cpu{1873 pub const atxmega32d4 = Cpu{
1934 .name = "atxmega32d4",1874 .name = "atxmega32d4",
1935 .llvm_name = "atxmega32d4",1875 .llvm_name = "atxmega32d4",
1936 .features = featureSet(&[_]Feature{1876 .features = featureSet(&all_features, &[_]Feature{
1937 .xmega,1877 .xmega,
1938 }),1878 }),
1939 };1879 };
1940 pub const atxmega32e5 = Cpu{1880 pub const atxmega32e5 = Cpu{
1941 .name = "atxmega32e5",1881 .name = "atxmega32e5",
1942 .llvm_name = "atxmega32e5",1882 .llvm_name = "atxmega32e5",
1943 .features = featureSet(&[_]Feature{1883 .features = featureSet(&all_features, &[_]Feature{
1944 .xmega,1884 .xmega,
1945 }),1885 }),
1946 };1886 };
1947 pub const atxmega32x1 = Cpu{1887 pub const atxmega32x1 = Cpu{
1948 .name = "atxmega32x1",1888 .name = "atxmega32x1",
1949 .llvm_name = "atxmega32x1",1889 .llvm_name = "atxmega32x1",
1950 .features = featureSet(&[_]Feature{1890 .features = featureSet(&all_features, &[_]Feature{
1951 .xmega,1891 .xmega,
1952 }),1892 }),
1953 };1893 };
1954 pub const atxmega384c3 = Cpu{1894 pub const atxmega384c3 = Cpu{
1955 .name = "atxmega384c3",1895 .name = "atxmega384c3",
1956 .llvm_name = "atxmega384c3",1896 .llvm_name = "atxmega384c3",
1957 .features = featureSet(&[_]Feature{1897 .features = featureSet(&all_features, &[_]Feature{
1958 .xmegau,1898 .xmegau,
1959 }),1899 }),
1960 };1900 };
1961 pub const atxmega384d3 = Cpu{1901 pub const atxmega384d3 = Cpu{
1962 .name = "atxmega384d3",1902 .name = "atxmega384d3",
1963 .llvm_name = "atxmega384d3",1903 .llvm_name = "atxmega384d3",
1964 .features = featureSet(&[_]Feature{1904 .features = featureSet(&all_features, &[_]Feature{
1965 .xmega,1905 .xmega,
1966 }),1906 }),
1967 };1907 };
1968 pub const atxmega64a1 = Cpu{1908 pub const atxmega64a1 = Cpu{
1969 .name = "atxmega64a1",1909 .name = "atxmega64a1",
1970 .llvm_name = "atxmega64a1",1910 .llvm_name = "atxmega64a1",
1971 .features = featureSet(&[_]Feature{1911 .features = featureSet(&all_features, &[_]Feature{
1972 .xmega,1912 .xmega,
1973 }),1913 }),
1974 };1914 };
1975 pub const atxmega64a1u = Cpu{1915 pub const atxmega64a1u = Cpu{
1976 .name = "atxmega64a1u",1916 .name = "atxmega64a1u",
1977 .llvm_name = "atxmega64a1u",1917 .llvm_name = "atxmega64a1u",
1978 .features = featureSet(&[_]Feature{1918 .features = featureSet(&all_features, &[_]Feature{
1979 .xmegau,1919 .xmegau,
1980 }),1920 }),
1981 };1921 };
1982 pub const atxmega64a3 = Cpu{1922 pub const atxmega64a3 = Cpu{
1983 .name = "atxmega64a3",1923 .name = "atxmega64a3",
1984 .llvm_name = "atxmega64a3",1924 .llvm_name = "atxmega64a3",
1985 .features = featureSet(&[_]Feature{1925 .features = featureSet(&all_features, &[_]Feature{
1986 .xmega,1926 .xmega,
1987 }),1927 }),
1988 };1928 };
1989 pub const atxmega64a3u = Cpu{1929 pub const atxmega64a3u = Cpu{
1990 .name = "atxmega64a3u",1930 .name = "atxmega64a3u",
1991 .llvm_name = "atxmega64a3u",1931 .llvm_name = "atxmega64a3u",
1992 .features = featureSet(&[_]Feature{1932 .features = featureSet(&all_features, &[_]Feature{
1993 .xmegau,1933 .xmegau,
1994 }),1934 }),
1995 };1935 };
1996 pub const atxmega64a4u = Cpu{1936 pub const atxmega64a4u = Cpu{
1997 .name = "atxmega64a4u",1937 .name = "atxmega64a4u",
1998 .llvm_name = "atxmega64a4u",1938 .llvm_name = "atxmega64a4u",
1999 .features = featureSet(&[_]Feature{1939 .features = featureSet(&all_features, &[_]Feature{
2000 .xmegau,1940 .xmegau,
2001 }),1941 }),
2002 };1942 };
2003 pub const atxmega64b1 = Cpu{1943 pub const atxmega64b1 = Cpu{
2004 .name = "atxmega64b1",1944 .name = "atxmega64b1",
2005 .llvm_name = "atxmega64b1",1945 .llvm_name = "atxmega64b1",
2006 .features = featureSet(&[_]Feature{1946 .features = featureSet(&all_features, &[_]Feature{
2007 .xmegau,1947 .xmegau,
2008 }),1948 }),
2009 };1949 };
2010 pub const atxmega64b3 = Cpu{1950 pub const atxmega64b3 = Cpu{
2011 .name = "atxmega64b3",1951 .name = "atxmega64b3",
2012 .llvm_name = "atxmega64b3",1952 .llvm_name = "atxmega64b3",
2013 .features = featureSet(&[_]Feature{1953 .features = featureSet(&all_features, &[_]Feature{
2014 .xmegau,1954 .xmegau,
2015 }),1955 }),
2016 };1956 };
2017 pub const atxmega64c3 = Cpu{1957 pub const atxmega64c3 = Cpu{
2018 .name = "atxmega64c3",1958 .name = "atxmega64c3",
2019 .llvm_name = "atxmega64c3",1959 .llvm_name = "atxmega64c3",
2020 .features = featureSet(&[_]Feature{1960 .features = featureSet(&all_features, &[_]Feature{
2021 .xmegau,1961 .xmegau,
2022 }),1962 }),
2023 };1963 };
2024 pub const atxmega64d3 = Cpu{1964 pub const atxmega64d3 = Cpu{
2025 .name = "atxmega64d3",1965 .name = "atxmega64d3",
2026 .llvm_name = "atxmega64d3",1966 .llvm_name = "atxmega64d3",
2027 .features = featureSet(&[_]Feature{1967 .features = featureSet(&all_features, &[_]Feature{
2028 .xmega,1968 .xmega,
2029 }),1969 }),
2030 };1970 };
2031 pub const atxmega64d4 = Cpu{1971 pub const atxmega64d4 = Cpu{
2032 .name = "atxmega64d4",1972 .name = "atxmega64d4",
2033 .llvm_name = "atxmega64d4",1973 .llvm_name = "atxmega64d4",
2034 .features = featureSet(&[_]Feature{1974 .features = featureSet(&all_features, &[_]Feature{
2035 .xmega,1975 .xmega,
2036 }),1976 }),
2037 };1977 };
2038 pub const atxmega8e5 = Cpu{1978 pub const atxmega8e5 = Cpu{
2039 .name = "atxmega8e5",1979 .name = "atxmega8e5",
2040 .llvm_name = "atxmega8e5",1980 .llvm_name = "atxmega8e5",
2041 .features = featureSet(&[_]Feature{1981 .features = featureSet(&all_features, &[_]Feature{
2042 .xmega,1982 .xmega,
2043 }),1983 }),
2044 };1984 };
2045 pub const avr1 = Cpu{1985 pub const avr1 = Cpu{
2046 .name = "avr1",1986 .name = "avr1",
2047 .llvm_name = "avr1",1987 .llvm_name = "avr1",
2048 .features = featureSet(&[_]Feature{1988 .features = featureSet(&all_features, &[_]Feature{
2049 .avr1,1989 .avr1,
2050 }),1990 }),
2051 };1991 };
2052 pub const avr2 = Cpu{1992 pub const avr2 = Cpu{
2053 .name = "avr2",1993 .name = "avr2",
2054 .llvm_name = "avr2",1994 .llvm_name = "avr2",
2055 .features = featureSet(&[_]Feature{1995 .features = featureSet(&all_features, &[_]Feature{
2056 .avr2,1996 .avr2,
2057 }),1997 }),
2058 };1998 };
2059 pub const avr25 = Cpu{1999 pub const avr25 = Cpu{
2060 .name = "avr25",2000 .name = "avr25",
2061 .llvm_name = "avr25",2001 .llvm_name = "avr25",
2062 .features = featureSet(&[_]Feature{2002 .features = featureSet(&all_features, &[_]Feature{
2063 .avr25,2003 .avr25,
2064 }),2004 }),
2065 };2005 };
2066 pub const avr3 = Cpu{2006 pub const avr3 = Cpu{
2067 .name = "avr3",2007 .name = "avr3",
2068 .llvm_name = "avr3",2008 .llvm_name = "avr3",
2069 .features = featureSet(&[_]Feature{2009 .features = featureSet(&all_features, &[_]Feature{
2070 .avr3,2010 .avr3,
2071 }),2011 }),
2072 };2012 };
2073 pub const avr31 = Cpu{2013 pub const avr31 = Cpu{
2074 .name = "avr31",2014 .name = "avr31",
2075 .llvm_name = "avr31",2015 .llvm_name = "avr31",
2076 .features = featureSet(&[_]Feature{2016 .features = featureSet(&all_features, &[_]Feature{
2077 .avr31,2017 .avr31,
2078 }),2018 }),
2079 };2019 };
2080 pub const avr35 = Cpu{2020 pub const avr35 = Cpu{
2081 .name = "avr35",2021 .name = "avr35",
2082 .llvm_name = "avr35",2022 .llvm_name = "avr35",
2083 .features = featureSet(&[_]Feature{2023 .features = featureSet(&all_features, &[_]Feature{
2084 .avr35,2024 .avr35,
2085 }),2025 }),
2086 };2026 };
2087 pub const avr4 = Cpu{2027 pub const avr4 = Cpu{
2088 .name = "avr4",2028 .name = "avr4",
2089 .llvm_name = "avr4",2029 .llvm_name = "avr4",
2090 .features = featureSet(&[_]Feature{2030 .features = featureSet(&all_features, &[_]Feature{
2091 .avr4,2031 .avr4,
2092 }),2032 }),
2093 };2033 };
2094 pub const avr5 = Cpu{2034 pub const avr5 = Cpu{
2095 .name = "avr5",2035 .name = "avr5",
2096 .llvm_name = "avr5",2036 .llvm_name = "avr5",
2097 .features = featureSet(&[_]Feature{2037 .features = featureSet(&all_features, &[_]Feature{
2098 .avr5,2038 .avr5,
2099 }),2039 }),
2100 };2040 };
2101 pub const avr51 = Cpu{2041 pub const avr51 = Cpu{
2102 .name = "avr51",2042 .name = "avr51",
2103 .llvm_name = "avr51",2043 .llvm_name = "avr51",
2104 .features = featureSet(&[_]Feature{2044 .features = featureSet(&all_features, &[_]Feature{
2105 .avr51,2045 .avr51,
2106 }),2046 }),
2107 };2047 };
2108 pub const avr6 = Cpu{2048 pub const avr6 = Cpu{
2109 .name = "avr6",2049 .name = "avr6",
2110 .llvm_name = "avr6",2050 .llvm_name = "avr6",
2111 .features = featureSet(&[_]Feature{2051 .features = featureSet(&all_features, &[_]Feature{
2112 .avr6,2052 .avr6,
2113 }),2053 }),
2114 };2054 };
2115 pub const avrtiny = Cpu{2055 pub const avrtiny = Cpu{
2116 .name = "avrtiny",2056 .name = "avrtiny",
2117 .llvm_name = "avrtiny",2057 .llvm_name = "avrtiny",
2118 .features = featureSet(&[_]Feature{2058 .features = featureSet(&all_features, &[_]Feature{
2119 .avrtiny,2059 .avrtiny,
2120 }),2060 }),
2121 };2061 };
2122 pub const avrxmega1 = Cpu{2062 pub const avrxmega1 = Cpu{
2123 .name = "avrxmega1",2063 .name = "avrxmega1",
2124 .llvm_name = "avrxmega1",2064 .llvm_name = "avrxmega1",
2125 .features = featureSet(&[_]Feature{2065 .features = featureSet(&all_features, &[_]Feature{
2126 .xmega,2066 .xmega,
2127 }),2067 }),
2128 };2068 };
2129 pub const avrxmega2 = Cpu{2069 pub const avrxmega2 = Cpu{
2130 .name = "avrxmega2",2070 .name = "avrxmega2",
2131 .llvm_name = "avrxmega2",2071 .llvm_name = "avrxmega2",
2132 .features = featureSet(&[_]Feature{2072 .features = featureSet(&all_features, &[_]Feature{
2133 .xmega,2073 .xmega,
2134 }),2074 }),
2135 };2075 };
2136 pub const avrxmega3 = Cpu{2076 pub const avrxmega3 = Cpu{
2137 .name = "avrxmega3",2077 .name = "avrxmega3",
2138 .llvm_name = "avrxmega3",2078 .llvm_name = "avrxmega3",
2139 .features = featureSet(&[_]Feature{2079 .features = featureSet(&all_features, &[_]Feature{
2140 .xmega,2080 .xmega,
2141 }),2081 }),
2142 };2082 };
2143 pub const avrxmega4 = Cpu{2083 pub const avrxmega4 = Cpu{
2144 .name = "avrxmega4",2084 .name = "avrxmega4",
2145 .llvm_name = "avrxmega4",2085 .llvm_name = "avrxmega4",
2146 .features = featureSet(&[_]Feature{2086 .features = featureSet(&all_features, &[_]Feature{
2147 .xmega,2087 .xmega,
2148 }),2088 }),
2149 };2089 };
2150 pub const avrxmega5 = Cpu{2090 pub const avrxmega5 = Cpu{
2151 .name = "avrxmega5",2091 .name = "avrxmega5",
2152 .llvm_name = "avrxmega5",2092 .llvm_name = "avrxmega5",
2153 .features = featureSet(&[_]Feature{2093 .features = featureSet(&all_features, &[_]Feature{
2154 .xmega,2094 .xmega,
2155 }),2095 }),
2156 };2096 };
2157 pub const avrxmega6 = Cpu{2097 pub const avrxmega6 = Cpu{
2158 .name = "avrxmega6",2098 .name = "avrxmega6",
2159 .llvm_name = "avrxmega6",2099 .llvm_name = "avrxmega6",
2160 .features = featureSet(&[_]Feature{2100 .features = featureSet(&all_features, &[_]Feature{
2161 .xmega,2101 .xmega,
2162 }),2102 }),
2163 };2103 };
2164 pub const avrxmega7 = Cpu{2104 pub const avrxmega7 = Cpu{
2165 .name = "avrxmega7",2105 .name = "avrxmega7",
2166 .llvm_name = "avrxmega7",2106 .llvm_name = "avrxmega7",
2167 .features = featureSet(&[_]Feature{2107 .features = featureSet(&all_features, &[_]Feature{
2168 .xmega,2108 .xmega,
2169 }),2109 }),
2170 };2110 };
2171 pub const m3000 = Cpu{2111 pub const m3000 = Cpu{
2172 .name = "m3000",2112 .name = "m3000",
2173 .llvm_name = "m3000",2113 .llvm_name = "m3000",
2174 .features = featureSet(&[_]Feature{2114 .features = featureSet(&all_features, &[_]Feature{
2175 .avr5,2115 .avr5,
2176 }),2116 }),
2177 };2117 };
...@@ -2440,6 +2380,6 @@ pub const all_cpus = &[_]*const Cpu{...@@ -2440,6 +2380,6 @@ pub const all_cpus = &[_]*const Cpu{
2440 &cpu.m3000,2380 &cpu.m3000,
2441};2381};
24422382
2443pub const baseline_features = featureSet(&[_]Feature{2383pub const baseline_features = featureSet(&all_features, &[_]Feature{
2444 .avr0,2384 .avr0,
2445});2385});
lib/std/target/bpf.zig+15-15
...@@ -11,29 +11,29 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -11,29 +11,29 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
1111
12pub const all_features = blk: {12pub const all_features = blk: {
13 const len = @typeInfo(Feature).Enum.fields.len;13 const len = @typeInfo(Feature).Enum.fields.len;
14 std.debug.assert(len <= Cpu.Feature.Set.bit_count);14 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
15 var result: [len]Cpu.Feature = undefined;15 var result: [len]Cpu.Feature = undefined;
16 result[@enumToInt(Feature.alu32)] = .{16 result[@enumToInt(Feature.alu32)] = .{
17 .index = @enumToInt(Feature.alu32),
18 .name = @tagName(Feature.alu32),
19 .llvm_name = "alu32",17 .llvm_name = "alu32",
20 .description = "Enable ALU32 instructions",18 .description = "Enable ALU32 instructions",
21 .dependencies = featureSet(&[_]Feature{}),19 .dependencies = sparseFeatureSet(&[_]Feature{}),
22 };20 };
23 result[@enumToInt(Feature.dummy)] = .{21 result[@enumToInt(Feature.dummy)] = .{
24 .index = @enumToInt(Feature.dummy),
25 .name = @tagName(Feature.dummy),
26 .llvm_name = "dummy",22 .llvm_name = "dummy",
27 .description = "unused feature",23 .description = "unused feature",
28 .dependencies = featureSet(&[_]Feature{}),24 .dependencies = sparseFeatureSet(&[_]Feature{}),
29 };25 };
30 result[@enumToInt(Feature.dwarfris)] = .{26 result[@enumToInt(Feature.dwarfris)] = .{
31 .index = @enumToInt(Feature.dwarfris),
32 .name = @tagName(Feature.dwarfris),
33 .llvm_name = "dwarfris",27 .llvm_name = "dwarfris",
34 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",28 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
35 .dependencies = featureSet(&[_]Feature{}),29 .dependencies = sparseFeatureSet(&[_]Feature{}),
36 };30 };
31 const ti = @typeInfo(Feature);
32 for (result) |*elem, i| {
33 elem.index = i;
34 elem.name = ti.Enum.fields[i].name;
35 elem.dependencies.initAsDependencies(i, &result);
36 }
37 break :blk result;37 break :blk result;
38};38};
3939
...@@ -41,27 +41,27 @@ pub const cpu = struct {...@@ -41,27 +41,27 @@ pub const cpu = struct {
41 pub const generic = Cpu{41 pub const generic = Cpu{
42 .name = "generic",42 .name = "generic",
43 .llvm_name = "generic",43 .llvm_name = "generic",
44 .features = featureSet(&[_]Feature{}),44 .features = featureSet(&all_features, &[_]Feature{}),
45 };45 };
46 pub const probe = Cpu{46 pub const probe = Cpu{
47 .name = "probe",47 .name = "probe",
48 .llvm_name = "probe",48 .llvm_name = "probe",
49 .features = featureSet(&[_]Feature{}),49 .features = featureSet(&all_features, &[_]Feature{}),
50 };50 };
51 pub const v1 = Cpu{51 pub const v1 = Cpu{
52 .name = "v1",52 .name = "v1",
53 .llvm_name = "v1",53 .llvm_name = "v1",
54 .features = featureSet(&[_]Feature{}),54 .features = featureSet(&all_features, &[_]Feature{}),
55 };55 };
56 pub const v2 = Cpu{56 pub const v2 = Cpu{
57 .name = "v2",57 .name = "v2",
58 .llvm_name = "v2",58 .llvm_name = "v2",
59 .features = featureSet(&[_]Feature{}),59 .features = featureSet(&all_features, &[_]Feature{}),
60 };60 };
61 pub const v3 = Cpu{61 pub const v3 = Cpu{
62 .name = "v3",62 .name = "v3",
63 .llvm_name = "v3",63 .llvm_name = "v3",
64 .features = featureSet(&[_]Feature{}),64 .features = featureSet(&all_features, &[_]Feature{}),
65 };65 };
66};66};
6767
lib/std/target/hexagon.zig+38-80
...@@ -32,76 +32,60 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -32,76 +32,60 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
3232
33pub const all_features = blk: {33pub const all_features = blk: {
34 const len = @typeInfo(Feature).Enum.fields.len;34 const len = @typeInfo(Feature).Enum.fields.len;
35 std.debug.assert(len <= Cpu.Feature.Set.bit_count);35 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
36 var result: [len]Cpu.Feature = undefined;36 var result: [len]Cpu.Feature = undefined;
37 result[@enumToInt(Feature.duplex)] = .{37 result[@enumToInt(Feature.duplex)] = .{
38 .index = @enumToInt(Feature.duplex),
39 .name = @tagName(Feature.duplex),
40 .llvm_name = "duplex",38 .llvm_name = "duplex",
41 .description = "Enable generation of duplex instruction",39 .description = "Enable generation of duplex instruction",
42 .dependencies = featureSet(&[_]Feature{}),40 .dependencies = sparseFeatureSet(&[_]Feature{}),
43 };41 };
44 result[@enumToInt(Feature.hvx)] = .{42 result[@enumToInt(Feature.hvx)] = .{
45 .index = @enumToInt(Feature.hvx),
46 .name = @tagName(Feature.hvx),
47 .llvm_name = "hvx",43 .llvm_name = "hvx",
48 .description = "Hexagon HVX instructions",44 .description = "Hexagon HVX instructions",
49 .dependencies = featureSet(&[_]Feature{}),45 .dependencies = sparseFeatureSet(&[_]Feature{}),
50 };46 };
51 result[@enumToInt(Feature.hvx_length128b)] = .{47 result[@enumToInt(Feature.hvx_length128b)] = .{
52 .index = @enumToInt(Feature.hvx_length128b),
53 .name = @tagName(Feature.hvx_length128b),
54 .llvm_name = "hvx-length128b",48 .llvm_name = "hvx-length128b",
55 .description = "Hexagon HVX 128B instructions",49 .description = "Hexagon HVX 128B instructions",
56 .dependencies = featureSet(&[_]Feature{50 .dependencies = sparseFeatureSet(&[_]Feature{
57 .hvx,51 .hvx,
58 }),52 }),
59 };53 };
60 result[@enumToInt(Feature.hvx_length64b)] = .{54 result[@enumToInt(Feature.hvx_length64b)] = .{
61 .index = @enumToInt(Feature.hvx_length64b),
62 .name = @tagName(Feature.hvx_length64b),
63 .llvm_name = "hvx-length64b",55 .llvm_name = "hvx-length64b",
64 .description = "Hexagon HVX 64B instructions",56 .description = "Hexagon HVX 64B instructions",
65 .dependencies = featureSet(&[_]Feature{57 .dependencies = sparseFeatureSet(&[_]Feature{
66 .hvx,58 .hvx,
67 }),59 }),
68 };60 };
69 result[@enumToInt(Feature.hvxv60)] = .{61 result[@enumToInt(Feature.hvxv60)] = .{
70 .index = @enumToInt(Feature.hvxv60),
71 .name = @tagName(Feature.hvxv60),
72 .llvm_name = "hvxv60",62 .llvm_name = "hvxv60",
73 .description = "Hexagon HVX instructions",63 .description = "Hexagon HVX instructions",
74 .dependencies = featureSet(&[_]Feature{64 .dependencies = sparseFeatureSet(&[_]Feature{
75 .hvx,65 .hvx,
76 }),66 }),
77 };67 };
78 result[@enumToInt(Feature.hvxv62)] = .{68 result[@enumToInt(Feature.hvxv62)] = .{
79 .index = @enumToInt(Feature.hvxv62),
80 .name = @tagName(Feature.hvxv62),
81 .llvm_name = "hvxv62",69 .llvm_name = "hvxv62",
82 .description = "Hexagon HVX instructions",70 .description = "Hexagon HVX instructions",
83 .dependencies = featureSet(&[_]Feature{71 .dependencies = sparseFeatureSet(&[_]Feature{
84 .hvx,72 .hvx,
85 .hvxv60,73 .hvxv60,
86 }),74 }),
87 };75 };
88 result[@enumToInt(Feature.hvxv65)] = .{76 result[@enumToInt(Feature.hvxv65)] = .{
89 .index = @enumToInt(Feature.hvxv65),
90 .name = @tagName(Feature.hvxv65),
91 .llvm_name = "hvxv65",77 .llvm_name = "hvxv65",
92 .description = "Hexagon HVX instructions",78 .description = "Hexagon HVX instructions",
93 .dependencies = featureSet(&[_]Feature{79 .dependencies = sparseFeatureSet(&[_]Feature{
94 .hvx,80 .hvx,
95 .hvxv60,81 .hvxv60,
96 .hvxv62,82 .hvxv62,
97 }),83 }),
98 };84 };
99 result[@enumToInt(Feature.hvxv66)] = .{85 result[@enumToInt(Feature.hvxv66)] = .{
100 .index = @enumToInt(Feature.hvxv66),
101 .name = @tagName(Feature.hvxv66),
102 .llvm_name = "hvxv66",86 .llvm_name = "hvxv66",
103 .description = "Hexagon HVX instructions",87 .description = "Hexagon HVX instructions",
104 .dependencies = featureSet(&[_]Feature{88 .dependencies = sparseFeatureSet(&[_]Feature{
105 .hvx,89 .hvx,
106 .hvxv60,90 .hvxv60,
107 .hvxv62,91 .hvxv62,
...@@ -110,121 +94,95 @@ pub const all_features = blk: {...@@ -110,121 +94,95 @@ pub const all_features = blk: {
110 }),94 }),
111 };95 };
112 result[@enumToInt(Feature.long_calls)] = .{96 result[@enumToInt(Feature.long_calls)] = .{
113 .index = @enumToInt(Feature.long_calls),
114 .name = @tagName(Feature.long_calls),
115 .llvm_name = "long-calls",97 .llvm_name = "long-calls",
116 .description = "Use constant-extended calls",98 .description = "Use constant-extended calls",
117 .dependencies = featureSet(&[_]Feature{}),99 .dependencies = sparseFeatureSet(&[_]Feature{}),
118 };100 };
119 result[@enumToInt(Feature.mem_noshuf)] = .{101 result[@enumToInt(Feature.mem_noshuf)] = .{
120 .index = @enumToInt(Feature.mem_noshuf),
121 .name = @tagName(Feature.mem_noshuf),
122 .llvm_name = "mem_noshuf",102 .llvm_name = "mem_noshuf",
123 .description = "Supports mem_noshuf feature",103 .description = "Supports mem_noshuf feature",
124 .dependencies = featureSet(&[_]Feature{}),104 .dependencies = sparseFeatureSet(&[_]Feature{}),
125 };105 };
126 result[@enumToInt(Feature.memops)] = .{106 result[@enumToInt(Feature.memops)] = .{
127 .index = @enumToInt(Feature.memops),
128 .name = @tagName(Feature.memops),
129 .llvm_name = "memops",107 .llvm_name = "memops",
130 .description = "Use memop instructions",108 .description = "Use memop instructions",
131 .dependencies = featureSet(&[_]Feature{}),109 .dependencies = sparseFeatureSet(&[_]Feature{}),
132 };110 };
133 result[@enumToInt(Feature.noreturn_stack_elim)] = .{111 result[@enumToInt(Feature.noreturn_stack_elim)] = .{
134 .index = @enumToInt(Feature.noreturn_stack_elim),
135 .name = @tagName(Feature.noreturn_stack_elim),
136 .llvm_name = "noreturn-stack-elim",112 .llvm_name = "noreturn-stack-elim",
137 .description = "Eliminate stack allocation in a noreturn function when possible",113 .description = "Eliminate stack allocation in a noreturn function when possible",
138 .dependencies = featureSet(&[_]Feature{}),114 .dependencies = sparseFeatureSet(&[_]Feature{}),
139 };115 };
140 result[@enumToInt(Feature.nvj)] = .{116 result[@enumToInt(Feature.nvj)] = .{
141 .index = @enumToInt(Feature.nvj),
142 .name = @tagName(Feature.nvj),
143 .llvm_name = "nvj",117 .llvm_name = "nvj",
144 .description = "Support for new-value jumps",118 .description = "Support for new-value jumps",
145 .dependencies = featureSet(&[_]Feature{119 .dependencies = sparseFeatureSet(&[_]Feature{
146 .packets,120 .packets,
147 }),121 }),
148 };122 };
149 result[@enumToInt(Feature.nvs)] = .{123 result[@enumToInt(Feature.nvs)] = .{
150 .index = @enumToInt(Feature.nvs),
151 .name = @tagName(Feature.nvs),
152 .llvm_name = "nvs",124 .llvm_name = "nvs",
153 .description = "Support for new-value stores",125 .description = "Support for new-value stores",
154 .dependencies = featureSet(&[_]Feature{126 .dependencies = sparseFeatureSet(&[_]Feature{
155 .packets,127 .packets,
156 }),128 }),
157 };129 };
158 result[@enumToInt(Feature.packets)] = .{130 result[@enumToInt(Feature.packets)] = .{
159 .index = @enumToInt(Feature.packets),
160 .name = @tagName(Feature.packets),
161 .llvm_name = "packets",131 .llvm_name = "packets",
162 .description = "Support for instruction packets",132 .description = "Support for instruction packets",
163 .dependencies = featureSet(&[_]Feature{}),133 .dependencies = sparseFeatureSet(&[_]Feature{}),
164 };134 };
165 result[@enumToInt(Feature.reserved_r19)] = .{135 result[@enumToInt(Feature.reserved_r19)] = .{
166 .index = @enumToInt(Feature.reserved_r19),
167 .name = @tagName(Feature.reserved_r19),
168 .llvm_name = "reserved-r19",136 .llvm_name = "reserved-r19",
169 .description = "Reserve register R19",137 .description = "Reserve register R19",
170 .dependencies = featureSet(&[_]Feature{}),138 .dependencies = sparseFeatureSet(&[_]Feature{}),
171 };139 };
172 result[@enumToInt(Feature.small_data)] = .{140 result[@enumToInt(Feature.small_data)] = .{
173 .index = @enumToInt(Feature.small_data),
174 .name = @tagName(Feature.small_data),
175 .llvm_name = "small-data",141 .llvm_name = "small-data",
176 .description = "Allow GP-relative addressing of global variables",142 .description = "Allow GP-relative addressing of global variables",
177 .dependencies = featureSet(&[_]Feature{}),143 .dependencies = sparseFeatureSet(&[_]Feature{}),
178 };144 };
179 result[@enumToInt(Feature.v5)] = .{145 result[@enumToInt(Feature.v5)] = .{
180 .index = @enumToInt(Feature.v5),
181 .name = @tagName(Feature.v5),
182 .llvm_name = "v5",146 .llvm_name = "v5",
183 .description = "Enable Hexagon V5 architecture",147 .description = "Enable Hexagon V5 architecture",
184 .dependencies = featureSet(&[_]Feature{}),148 .dependencies = sparseFeatureSet(&[_]Feature{}),
185 };149 };
186 result[@enumToInt(Feature.v55)] = .{150 result[@enumToInt(Feature.v55)] = .{
187 .index = @enumToInt(Feature.v55),
188 .name = @tagName(Feature.v55),
189 .llvm_name = "v55",151 .llvm_name = "v55",
190 .description = "Enable Hexagon V55 architecture",152 .description = "Enable Hexagon V55 architecture",
191 .dependencies = featureSet(&[_]Feature{}),153 .dependencies = sparseFeatureSet(&[_]Feature{}),
192 };154 };
193 result[@enumToInt(Feature.v60)] = .{155 result[@enumToInt(Feature.v60)] = .{
194 .index = @enumToInt(Feature.v60),
195 .name = @tagName(Feature.v60),
196 .llvm_name = "v60",156 .llvm_name = "v60",
197 .description = "Enable Hexagon V60 architecture",157 .description = "Enable Hexagon V60 architecture",
198 .dependencies = featureSet(&[_]Feature{}),158 .dependencies = sparseFeatureSet(&[_]Feature{}),
199 };159 };
200 result[@enumToInt(Feature.v62)] = .{160 result[@enumToInt(Feature.v62)] = .{
201 .index = @enumToInt(Feature.v62),
202 .name = @tagName(Feature.v62),
203 .llvm_name = "v62",161 .llvm_name = "v62",
204 .description = "Enable Hexagon V62 architecture",162 .description = "Enable Hexagon V62 architecture",
205 .dependencies = featureSet(&[_]Feature{}),163 .dependencies = sparseFeatureSet(&[_]Feature{}),
206 };164 };
207 result[@enumToInt(Feature.v65)] = .{165 result[@enumToInt(Feature.v65)] = .{
208 .index = @enumToInt(Feature.v65),
209 .name = @tagName(Feature.v65),
210 .llvm_name = "v65",166 .llvm_name = "v65",
211 .description = "Enable Hexagon V65 architecture",167 .description = "Enable Hexagon V65 architecture",
212 .dependencies = featureSet(&[_]Feature{}),168 .dependencies = sparseFeatureSet(&[_]Feature{}),
213 };169 };
214 result[@enumToInt(Feature.v66)] = .{170 result[@enumToInt(Feature.v66)] = .{
215 .index = @enumToInt(Feature.v66),
216 .name = @tagName(Feature.v66),
217 .llvm_name = "v66",171 .llvm_name = "v66",
218 .description = "Enable Hexagon V66 architecture",172 .description = "Enable Hexagon V66 architecture",
219 .dependencies = featureSet(&[_]Feature{}),173 .dependencies = sparseFeatureSet(&[_]Feature{}),
220 };174 };
221 result[@enumToInt(Feature.zreg)] = .{175 result[@enumToInt(Feature.zreg)] = .{
222 .index = @enumToInt(Feature.zreg),
223 .name = @tagName(Feature.zreg),
224 .llvm_name = "zreg",176 .llvm_name = "zreg",
225 .description = "Hexagon ZReg extension instructions",177 .description = "Hexagon ZReg extension instructions",
226 .dependencies = featureSet(&[_]Feature{}),178 .dependencies = sparseFeatureSet(&[_]Feature{}),
227 };179 };
180 const ti = @typeInfo(Feature);
181 for (result) |*elem, i| {
182 elem.index = i;
183 elem.name = ti.Enum.fields[i].name;
184 elem.dependencies.initAsDependencies(i, &result);
185 }
228 break :blk result;186 break :blk result;
229};187};
230188
...@@ -232,7 +190,7 @@ pub const cpu = struct {...@@ -232,7 +190,7 @@ pub const cpu = struct {
232 pub const generic = Cpu{190 pub const generic = Cpu{
233 .name = "generic",191 .name = "generic",
234 .llvm_name = "generic",192 .llvm_name = "generic",
235 .features = featureSet(&[_]Feature{193 .features = featureSet(&all_features, &[_]Feature{
236 .duplex,194 .duplex,
237 .memops,195 .memops,
238 .nvj,196 .nvj,
...@@ -247,7 +205,7 @@ pub const cpu = struct {...@@ -247,7 +205,7 @@ pub const cpu = struct {
247 pub const hexagonv5 = Cpu{205 pub const hexagonv5 = Cpu{
248 .name = "hexagonv5",206 .name = "hexagonv5",
249 .llvm_name = "hexagonv5",207 .llvm_name = "hexagonv5",
250 .features = featureSet(&[_]Feature{208 .features = featureSet(&all_features, &[_]Feature{
251 .duplex,209 .duplex,
252 .memops,210 .memops,
253 .nvj,211 .nvj,
...@@ -260,7 +218,7 @@ pub const cpu = struct {...@@ -260,7 +218,7 @@ pub const cpu = struct {
260 pub const hexagonv55 = Cpu{218 pub const hexagonv55 = Cpu{
261 .name = "hexagonv55",219 .name = "hexagonv55",
262 .llvm_name = "hexagonv55",220 .llvm_name = "hexagonv55",
263 .features = featureSet(&[_]Feature{221 .features = featureSet(&all_features, &[_]Feature{
264 .duplex,222 .duplex,
265 .memops,223 .memops,
266 .nvj,224 .nvj,
...@@ -274,7 +232,7 @@ pub const cpu = struct {...@@ -274,7 +232,7 @@ pub const cpu = struct {
274 pub const hexagonv60 = Cpu{232 pub const hexagonv60 = Cpu{
275 .name = "hexagonv60",233 .name = "hexagonv60",
276 .llvm_name = "hexagonv60",234 .llvm_name = "hexagonv60",
277 .features = featureSet(&[_]Feature{235 .features = featureSet(&all_features, &[_]Feature{
278 .duplex,236 .duplex,
279 .memops,237 .memops,
280 .nvj,238 .nvj,
...@@ -289,7 +247,7 @@ pub const cpu = struct {...@@ -289,7 +247,7 @@ pub const cpu = struct {
289 pub const hexagonv62 = Cpu{247 pub const hexagonv62 = Cpu{
290 .name = "hexagonv62",248 .name = "hexagonv62",
291 .llvm_name = "hexagonv62",249 .llvm_name = "hexagonv62",
292 .features = featureSet(&[_]Feature{250 .features = featureSet(&all_features, &[_]Feature{
293 .duplex,251 .duplex,
294 .memops,252 .memops,
295 .nvj,253 .nvj,
...@@ -305,7 +263,7 @@ pub const cpu = struct {...@@ -305,7 +263,7 @@ pub const cpu = struct {
305 pub const hexagonv65 = Cpu{263 pub const hexagonv65 = Cpu{
306 .name = "hexagonv65",264 .name = "hexagonv65",
307 .llvm_name = "hexagonv65",265 .llvm_name = "hexagonv65",
308 .features = featureSet(&[_]Feature{266 .features = featureSet(&all_features, &[_]Feature{
309 .duplex,267 .duplex,
310 .mem_noshuf,268 .mem_noshuf,
311 .memops,269 .memops,
...@@ -323,7 +281,7 @@ pub const cpu = struct {...@@ -323,7 +281,7 @@ pub const cpu = struct {
323 pub const hexagonv66 = Cpu{281 pub const hexagonv66 = Cpu{
324 .name = "hexagonv66",282 .name = "hexagonv66",
325 .llvm_name = "hexagonv66",283 .llvm_name = "hexagonv66",
326 .features = featureSet(&[_]Feature{284 .features = featureSet(&all_features, &[_]Feature{
327 .duplex,285 .duplex,
328 .mem_noshuf,286 .mem_noshuf,
329 .memops,287 .memops,
lib/std/target/mips.zig+74-166
...@@ -57,135 +57,101 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -57,135 +57,101 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
5757
58pub const all_features = blk: {58pub const all_features = blk: {
59 const len = @typeInfo(Feature).Enum.fields.len;59 const len = @typeInfo(Feature).Enum.fields.len;
60 std.debug.assert(len <= Cpu.Feature.Set.bit_count);60 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
61 var result: [len]Cpu.Feature = undefined;61 var result: [len]Cpu.Feature = undefined;
62 result[@enumToInt(Feature.abs2008)] = .{62 result[@enumToInt(Feature.abs2008)] = .{
63 .index = @enumToInt(Feature.abs2008),
64 .name = @tagName(Feature.abs2008),
65 .llvm_name = "abs2008",63 .llvm_name = "abs2008",
66 .description = "Disable IEEE 754-2008 abs.fmt mode",64 .description = "Disable IEEE 754-2008 abs.fmt mode",
67 .dependencies = featureSet(&[_]Feature{}),65 .dependencies = sparseFeatureSet(&[_]Feature{}),
68 };66 };
69 result[@enumToInt(Feature.cnmips)] = .{67 result[@enumToInt(Feature.cnmips)] = .{
70 .index = @enumToInt(Feature.cnmips),
71 .name = @tagName(Feature.cnmips),
72 .llvm_name = "cnmips",68 .llvm_name = "cnmips",
73 .description = "Octeon cnMIPS Support",69 .description = "Octeon cnMIPS Support",
74 .dependencies = featureSet(&[_]Feature{70 .dependencies = sparseFeatureSet(&[_]Feature{
75 .mips64r2,71 .mips64r2,
76 }),72 }),
77 };73 };
78 result[@enumToInt(Feature.crc)] = .{74 result[@enumToInt(Feature.crc)] = .{
79 .index = @enumToInt(Feature.crc),
80 .name = @tagName(Feature.crc),
81 .llvm_name = "crc",75 .llvm_name = "crc",
82 .description = "Mips R6 CRC ASE",76 .description = "Mips R6 CRC ASE",
83 .dependencies = featureSet(&[_]Feature{}),77 .dependencies = sparseFeatureSet(&[_]Feature{}),
84 };78 };
85 result[@enumToInt(Feature.dsp)] = .{79 result[@enumToInt(Feature.dsp)] = .{
86 .index = @enumToInt(Feature.dsp),
87 .name = @tagName(Feature.dsp),
88 .llvm_name = "dsp",80 .llvm_name = "dsp",
89 .description = "Mips DSP ASE",81 .description = "Mips DSP ASE",
90 .dependencies = featureSet(&[_]Feature{}),82 .dependencies = sparseFeatureSet(&[_]Feature{}),
91 };83 };
92 result[@enumToInt(Feature.dspr2)] = .{84 result[@enumToInt(Feature.dspr2)] = .{
93 .index = @enumToInt(Feature.dspr2),
94 .name = @tagName(Feature.dspr2),
95 .llvm_name = "dspr2",85 .llvm_name = "dspr2",
96 .description = "Mips DSP-R2 ASE",86 .description = "Mips DSP-R2 ASE",
97 .dependencies = featureSet(&[_]Feature{87 .dependencies = sparseFeatureSet(&[_]Feature{
98 .dsp,88 .dsp,
99 }),89 }),
100 };90 };
101 result[@enumToInt(Feature.dspr3)] = .{91 result[@enumToInt(Feature.dspr3)] = .{
102 .index = @enumToInt(Feature.dspr3),
103 .name = @tagName(Feature.dspr3),
104 .llvm_name = "dspr3",92 .llvm_name = "dspr3",
105 .description = "Mips DSP-R3 ASE",93 .description = "Mips DSP-R3 ASE",
106 .dependencies = featureSet(&[_]Feature{94 .dependencies = sparseFeatureSet(&[_]Feature{
107 .dsp,95 .dsp,
108 .dspr2,96 .dspr2,
109 }),97 }),
110 };98 };
111 result[@enumToInt(Feature.eva)] = .{99 result[@enumToInt(Feature.eva)] = .{
112 .index = @enumToInt(Feature.eva),
113 .name = @tagName(Feature.eva),
114 .llvm_name = "eva",100 .llvm_name = "eva",
115 .description = "Mips EVA ASE",101 .description = "Mips EVA ASE",
116 .dependencies = featureSet(&[_]Feature{}),102 .dependencies = sparseFeatureSet(&[_]Feature{}),
117 };103 };
118 result[@enumToInt(Feature.fp64)] = .{104 result[@enumToInt(Feature.fp64)] = .{
119 .index = @enumToInt(Feature.fp64),
120 .name = @tagName(Feature.fp64),
121 .llvm_name = "fp64",105 .llvm_name = "fp64",
122 .description = "Support 64-bit FP registers",106 .description = "Support 64-bit FP registers",
123 .dependencies = featureSet(&[_]Feature{}),107 .dependencies = sparseFeatureSet(&[_]Feature{}),
124 };108 };
125 result[@enumToInt(Feature.fpxx)] = .{109 result[@enumToInt(Feature.fpxx)] = .{
126 .index = @enumToInt(Feature.fpxx),
127 .name = @tagName(Feature.fpxx),
128 .llvm_name = "fpxx",110 .llvm_name = "fpxx",
129 .description = "Support for FPXX",111 .description = "Support for FPXX",
130 .dependencies = featureSet(&[_]Feature{}),112 .dependencies = sparseFeatureSet(&[_]Feature{}),
131 };113 };
132 result[@enumToInt(Feature.ginv)] = .{114 result[@enumToInt(Feature.ginv)] = .{
133 .index = @enumToInt(Feature.ginv),
134 .name = @tagName(Feature.ginv),
135 .llvm_name = "ginv",115 .llvm_name = "ginv",
136 .description = "Mips Global Invalidate ASE",116 .description = "Mips Global Invalidate ASE",
137 .dependencies = featureSet(&[_]Feature{}),117 .dependencies = sparseFeatureSet(&[_]Feature{}),
138 };118 };
139 result[@enumToInt(Feature.gp64)] = .{119 result[@enumToInt(Feature.gp64)] = .{
140 .index = @enumToInt(Feature.gp64),
141 .name = @tagName(Feature.gp64),
142 .llvm_name = "gp64",120 .llvm_name = "gp64",
143 .description = "General Purpose Registers are 64-bit wide",121 .description = "General Purpose Registers are 64-bit wide",
144 .dependencies = featureSet(&[_]Feature{}),122 .dependencies = sparseFeatureSet(&[_]Feature{}),
145 };123 };
146 result[@enumToInt(Feature.long_calls)] = .{124 result[@enumToInt(Feature.long_calls)] = .{
147 .index = @enumToInt(Feature.long_calls),
148 .name = @tagName(Feature.long_calls),
149 .llvm_name = "long-calls",125 .llvm_name = "long-calls",
150 .description = "Disable use of the jal instruction",126 .description = "Disable use of the jal instruction",
151 .dependencies = featureSet(&[_]Feature{}),127 .dependencies = sparseFeatureSet(&[_]Feature{}),
152 };128 };
153 result[@enumToInt(Feature.micromips)] = .{129 result[@enumToInt(Feature.micromips)] = .{
154 .index = @enumToInt(Feature.micromips),
155 .name = @tagName(Feature.micromips),
156 .llvm_name = "micromips",130 .llvm_name = "micromips",
157 .description = "microMips mode",131 .description = "microMips mode",
158 .dependencies = featureSet(&[_]Feature{}),132 .dependencies = sparseFeatureSet(&[_]Feature{}),
159 };133 };
160 result[@enumToInt(Feature.mips1)] = .{134 result[@enumToInt(Feature.mips1)] = .{
161 .index = @enumToInt(Feature.mips1),
162 .name = @tagName(Feature.mips1),
163 .llvm_name = "mips1",135 .llvm_name = "mips1",
164 .description = "Mips I ISA Support [highly experimental]",136 .description = "Mips I ISA Support [highly experimental]",
165 .dependencies = featureSet(&[_]Feature{}),137 .dependencies = sparseFeatureSet(&[_]Feature{}),
166 };138 };
167 result[@enumToInt(Feature.mips16)] = .{139 result[@enumToInt(Feature.mips16)] = .{
168 .index = @enumToInt(Feature.mips16),
169 .name = @tagName(Feature.mips16),
170 .llvm_name = "mips16",140 .llvm_name = "mips16",
171 .description = "Mips16 mode",141 .description = "Mips16 mode",
172 .dependencies = featureSet(&[_]Feature{}),142 .dependencies = sparseFeatureSet(&[_]Feature{}),
173 };143 };
174 result[@enumToInt(Feature.mips2)] = .{144 result[@enumToInt(Feature.mips2)] = .{
175 .index = @enumToInt(Feature.mips2),
176 .name = @tagName(Feature.mips2),
177 .llvm_name = "mips2",145 .llvm_name = "mips2",
178 .description = "Mips II ISA Support [highly experimental]",146 .description = "Mips II ISA Support [highly experimental]",
179 .dependencies = featureSet(&[_]Feature{147 .dependencies = sparseFeatureSet(&[_]Feature{
180 .mips1,148 .mips1,
181 }),149 }),
182 };150 };
183 result[@enumToInt(Feature.mips3)] = .{151 result[@enumToInt(Feature.mips3)] = .{
184 .index = @enumToInt(Feature.mips3),
185 .name = @tagName(Feature.mips3),
186 .llvm_name = "mips3",152 .llvm_name = "mips3",
187 .description = "MIPS III ISA Support [highly experimental]",153 .description = "MIPS III ISA Support [highly experimental]",
188 .dependencies = featureSet(&[_]Feature{154 .dependencies = sparseFeatureSet(&[_]Feature{
189 .fp64,155 .fp64,
190 .gp64,156 .gp64,
191 .mips2,157 .mips2,
...@@ -194,22 +160,18 @@ pub const all_features = blk: {...@@ -194,22 +160,18 @@ pub const all_features = blk: {
194 }),160 }),
195 };161 };
196 result[@enumToInt(Feature.mips32)] = .{162 result[@enumToInt(Feature.mips32)] = .{
197 .index = @enumToInt(Feature.mips32),
198 .name = @tagName(Feature.mips32),
199 .llvm_name = "mips32",163 .llvm_name = "mips32",
200 .description = "Mips32 ISA Support",164 .description = "Mips32 ISA Support",
201 .dependencies = featureSet(&[_]Feature{165 .dependencies = sparseFeatureSet(&[_]Feature{
202 .mips2,166 .mips2,
203 .mips3_32,167 .mips3_32,
204 .mips4_32,168 .mips4_32,
205 }),169 }),
206 };170 };
207 result[@enumToInt(Feature.mips32r2)] = .{171 result[@enumToInt(Feature.mips32r2)] = .{
208 .index = @enumToInt(Feature.mips32r2),
209 .name = @tagName(Feature.mips32r2),
210 .llvm_name = "mips32r2",172 .llvm_name = "mips32r2",
211 .description = "Mips32r2 ISA Support",173 .description = "Mips32r2 ISA Support",
212 .dependencies = featureSet(&[_]Feature{174 .dependencies = sparseFeatureSet(&[_]Feature{
213 .mips32,175 .mips32,
214 .mips3_32r2,176 .mips3_32r2,
215 .mips4_32r2,177 .mips4_32r2,
...@@ -217,29 +179,23 @@ pub const all_features = blk: {...@@ -217,29 +179,23 @@ pub const all_features = blk: {
217 }),179 }),
218 };180 };
219 result[@enumToInt(Feature.mips32r3)] = .{181 result[@enumToInt(Feature.mips32r3)] = .{
220 .index = @enumToInt(Feature.mips32r3),
221 .name = @tagName(Feature.mips32r3),
222 .llvm_name = "mips32r3",182 .llvm_name = "mips32r3",
223 .description = "Mips32r3 ISA Support",183 .description = "Mips32r3 ISA Support",
224 .dependencies = featureSet(&[_]Feature{184 .dependencies = sparseFeatureSet(&[_]Feature{
225 .mips32r2,185 .mips32r2,
226 }),186 }),
227 };187 };
228 result[@enumToInt(Feature.mips32r5)] = .{188 result[@enumToInt(Feature.mips32r5)] = .{
229 .index = @enumToInt(Feature.mips32r5),
230 .name = @tagName(Feature.mips32r5),
231 .llvm_name = "mips32r5",189 .llvm_name = "mips32r5",
232 .description = "Mips32r5 ISA Support",190 .description = "Mips32r5 ISA Support",
233 .dependencies = featureSet(&[_]Feature{191 .dependencies = sparseFeatureSet(&[_]Feature{
234 .mips32r3,192 .mips32r3,
235 }),193 }),
236 };194 };
237 result[@enumToInt(Feature.mips32r6)] = .{195 result[@enumToInt(Feature.mips32r6)] = .{
238 .index = @enumToInt(Feature.mips32r6),
239 .name = @tagName(Feature.mips32r6),
240 .llvm_name = "mips32r6",196 .llvm_name = "mips32r6",
241 .description = "Mips32r6 ISA Support [experimental]",197 .description = "Mips32r6 ISA Support [experimental]",
242 .dependencies = featureSet(&[_]Feature{198 .dependencies = sparseFeatureSet(&[_]Feature{
243 .abs2008,199 .abs2008,
244 .fp64,200 .fp64,
245 .mips32r5,201 .mips32r5,
...@@ -247,107 +203,83 @@ pub const all_features = blk: {...@@ -247,107 +203,83 @@ pub const all_features = blk: {
247 }),203 }),
248 };204 };
249 result[@enumToInt(Feature.mips3_32)] = .{205 result[@enumToInt(Feature.mips3_32)] = .{
250 .index = @enumToInt(Feature.mips3_32),
251 .name = @tagName(Feature.mips3_32),
252 .llvm_name = "mips3_32",206 .llvm_name = "mips3_32",
253 .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]",
254 .dependencies = featureSet(&[_]Feature{}),208 .dependencies = sparseFeatureSet(&[_]Feature{}),
255 };209 };
256 result[@enumToInt(Feature.mips3_32r2)] = .{210 result[@enumToInt(Feature.mips3_32r2)] = .{
257 .index = @enumToInt(Feature.mips3_32r2),
258 .name = @tagName(Feature.mips3_32r2),
259 .llvm_name = "mips3_32r2",211 .llvm_name = "mips3_32r2",
260 .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]",
261 .dependencies = featureSet(&[_]Feature{}),213 .dependencies = sparseFeatureSet(&[_]Feature{}),
262 };214 };
263 result[@enumToInt(Feature.mips4)] = .{215 result[@enumToInt(Feature.mips4)] = .{
264 .index = @enumToInt(Feature.mips4),
265 .name = @tagName(Feature.mips4),
266 .llvm_name = "mips4",216 .llvm_name = "mips4",
267 .description = "MIPS IV ISA Support",217 .description = "MIPS IV ISA Support",
268 .dependencies = featureSet(&[_]Feature{218 .dependencies = sparseFeatureSet(&[_]Feature{
269 .mips3,219 .mips3,
270 .mips4_32,220 .mips4_32,
271 .mips4_32r2,221 .mips4_32r2,
272 }),222 }),
273 };223 };
274 result[@enumToInt(Feature.mips4_32)] = .{224 result[@enumToInt(Feature.mips4_32)] = .{
275 .index = @enumToInt(Feature.mips4_32),
276 .name = @tagName(Feature.mips4_32),
277 .llvm_name = "mips4_32",225 .llvm_name = "mips4_32",
278 .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]",
279 .dependencies = featureSet(&[_]Feature{}),227 .dependencies = sparseFeatureSet(&[_]Feature{}),
280 };228 };
281 result[@enumToInt(Feature.mips4_32r2)] = .{229 result[@enumToInt(Feature.mips4_32r2)] = .{
282 .index = @enumToInt(Feature.mips4_32r2),
283 .name = @tagName(Feature.mips4_32r2),
284 .llvm_name = "mips4_32r2",230 .llvm_name = "mips4_32r2",
285 .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]",
286 .dependencies = featureSet(&[_]Feature{}),232 .dependencies = sparseFeatureSet(&[_]Feature{}),
287 };233 };
288 result[@enumToInt(Feature.mips5)] = .{234 result[@enumToInt(Feature.mips5)] = .{
289 .index = @enumToInt(Feature.mips5),
290 .name = @tagName(Feature.mips5),
291 .llvm_name = "mips5",235 .llvm_name = "mips5",
292 .description = "MIPS V ISA Support [highly experimental]",236 .description = "MIPS V ISA Support [highly experimental]",
293 .dependencies = featureSet(&[_]Feature{237 .dependencies = sparseFeatureSet(&[_]Feature{
294 .mips4,238 .mips4,
295 .mips5_32r2,239 .mips5_32r2,
296 }),240 }),
297 };241 };
298 result[@enumToInt(Feature.mips5_32r2)] = .{242 result[@enumToInt(Feature.mips5_32r2)] = .{
299 .index = @enumToInt(Feature.mips5_32r2),
300 .name = @tagName(Feature.mips5_32r2),
301 .llvm_name = "mips5_32r2",243 .llvm_name = "mips5_32r2",
302 .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]",
303 .dependencies = featureSet(&[_]Feature{}),245 .dependencies = sparseFeatureSet(&[_]Feature{}),
304 };246 };
305 result[@enumToInt(Feature.mips64)] = .{247 result[@enumToInt(Feature.mips64)] = .{
306 .index = @enumToInt(Feature.mips64),
307 .name = @tagName(Feature.mips64),
308 .llvm_name = "mips64",248 .llvm_name = "mips64",
309 .description = "Mips64 ISA Support",249 .description = "Mips64 ISA Support",
310 .dependencies = featureSet(&[_]Feature{250 .dependencies = sparseFeatureSet(&[_]Feature{
311 .mips32,251 .mips32,
312 .mips5,252 .mips5,
313 }),253 }),
314 };254 };
315 result[@enumToInt(Feature.mips64r2)] = .{255 result[@enumToInt(Feature.mips64r2)] = .{
316 .index = @enumToInt(Feature.mips64r2),
317 .name = @tagName(Feature.mips64r2),
318 .llvm_name = "mips64r2",256 .llvm_name = "mips64r2",
319 .description = "Mips64r2 ISA Support",257 .description = "Mips64r2 ISA Support",
320 .dependencies = featureSet(&[_]Feature{258 .dependencies = sparseFeatureSet(&[_]Feature{
321 .mips32r2,259 .mips32r2,
322 .mips64,260 .mips64,
323 }),261 }),
324 };262 };
325 result[@enumToInt(Feature.mips64r3)] = .{263 result[@enumToInt(Feature.mips64r3)] = .{
326 .index = @enumToInt(Feature.mips64r3),
327 .name = @tagName(Feature.mips64r3),
328 .llvm_name = "mips64r3",264 .llvm_name = "mips64r3",
329 .description = "Mips64r3 ISA Support",265 .description = "Mips64r3 ISA Support",
330 .dependencies = featureSet(&[_]Feature{266 .dependencies = sparseFeatureSet(&[_]Feature{
331 .mips32r3,267 .mips32r3,
332 .mips64r2,268 .mips64r2,
333 }),269 }),
334 };270 };
335 result[@enumToInt(Feature.mips64r5)] = .{271 result[@enumToInt(Feature.mips64r5)] = .{
336 .index = @enumToInt(Feature.mips64r5),
337 .name = @tagName(Feature.mips64r5),
338 .llvm_name = "mips64r5",272 .llvm_name = "mips64r5",
339 .description = "Mips64r5 ISA Support",273 .description = "Mips64r5 ISA Support",
340 .dependencies = featureSet(&[_]Feature{274 .dependencies = sparseFeatureSet(&[_]Feature{
341 .mips32r5,275 .mips32r5,
342 .mips64r3,276 .mips64r3,
343 }),277 }),
344 };278 };
345 result[@enumToInt(Feature.mips64r6)] = .{279 result[@enumToInt(Feature.mips64r6)] = .{
346 .index = @enumToInt(Feature.mips64r6),
347 .name = @tagName(Feature.mips64r6),
348 .llvm_name = "mips64r6",280 .llvm_name = "mips64r6",
349 .description = "Mips64r6 ISA Support [experimental]",281 .description = "Mips64r6 ISA Support [experimental]",
350 .dependencies = featureSet(&[_]Feature{282 .dependencies = sparseFeatureSet(&[_]Feature{
351 .abs2008,283 .abs2008,
352 .mips32r6,284 .mips32r6,
353 .mips64r5,285 .mips64r5,
...@@ -355,112 +287,88 @@ pub const all_features = blk: {...@@ -355,112 +287,88 @@ pub const all_features = blk: {
355 }),287 }),
356 };288 };
357 result[@enumToInt(Feature.msa)] = .{289 result[@enumToInt(Feature.msa)] = .{
358 .index = @enumToInt(Feature.msa),
359 .name = @tagName(Feature.msa),
360 .llvm_name = "msa",290 .llvm_name = "msa",
361 .description = "Mips MSA ASE",291 .description = "Mips MSA ASE",
362 .dependencies = featureSet(&[_]Feature{}),292 .dependencies = sparseFeatureSet(&[_]Feature{}),
363 };293 };
364 result[@enumToInt(Feature.mt)] = .{294 result[@enumToInt(Feature.mt)] = .{
365 .index = @enumToInt(Feature.mt),
366 .name = @tagName(Feature.mt),
367 .llvm_name = "mt",295 .llvm_name = "mt",
368 .description = "Mips MT ASE",296 .description = "Mips MT ASE",
369 .dependencies = featureSet(&[_]Feature{}),297 .dependencies = sparseFeatureSet(&[_]Feature{}),
370 };298 };
371 result[@enumToInt(Feature.nan2008)] = .{299 result[@enumToInt(Feature.nan2008)] = .{
372 .index = @enumToInt(Feature.nan2008),
373 .name = @tagName(Feature.nan2008),
374 .llvm_name = "nan2008",300 .llvm_name = "nan2008",
375 .description = "IEEE 754-2008 NaN encoding",301 .description = "IEEE 754-2008 NaN encoding",
376 .dependencies = featureSet(&[_]Feature{}),302 .dependencies = sparseFeatureSet(&[_]Feature{}),
377 };303 };
378 result[@enumToInt(Feature.noabicalls)] = .{304 result[@enumToInt(Feature.noabicalls)] = .{
379 .index = @enumToInt(Feature.noabicalls),
380 .name = @tagName(Feature.noabicalls),
381 .llvm_name = "noabicalls",305 .llvm_name = "noabicalls",
382 .description = "Disable SVR4-style position-independent code",306 .description = "Disable SVR4-style position-independent code",
383 .dependencies = featureSet(&[_]Feature{}),307 .dependencies = sparseFeatureSet(&[_]Feature{}),
384 };308 };
385 result[@enumToInt(Feature.nomadd4)] = .{309 result[@enumToInt(Feature.nomadd4)] = .{
386 .index = @enumToInt(Feature.nomadd4),
387 .name = @tagName(Feature.nomadd4),
388 .llvm_name = "nomadd4",310 .llvm_name = "nomadd4",
389 .description = "Disable 4-operand madd.fmt and related instructions",311 .description = "Disable 4-operand madd.fmt and related instructions",
390 .dependencies = featureSet(&[_]Feature{}),312 .dependencies = sparseFeatureSet(&[_]Feature{}),
391 };313 };
392 result[@enumToInt(Feature.nooddspreg)] = .{314 result[@enumToInt(Feature.nooddspreg)] = .{
393 .index = @enumToInt(Feature.nooddspreg),
394 .name = @tagName(Feature.nooddspreg),
395 .llvm_name = "nooddspreg",315 .llvm_name = "nooddspreg",
396 .description = "Disable odd numbered single-precision registers",316 .description = "Disable odd numbered single-precision registers",
397 .dependencies = featureSet(&[_]Feature{}),317 .dependencies = sparseFeatureSet(&[_]Feature{}),
398 };318 };
399 result[@enumToInt(Feature.p5600)] = .{319 result[@enumToInt(Feature.p5600)] = .{
400 .index = @enumToInt(Feature.p5600),
401 .name = @tagName(Feature.p5600),
402 .llvm_name = "p5600",320 .llvm_name = "p5600",
403 .description = "The P5600 Processor",321 .description = "The P5600 Processor",
404 .dependencies = featureSet(&[_]Feature{322 .dependencies = sparseFeatureSet(&[_]Feature{
405 .mips32r5,323 .mips32r5,
406 }),324 }),
407 };325 };
408 result[@enumToInt(Feature.ptr64)] = .{326 result[@enumToInt(Feature.ptr64)] = .{
409 .index = @enumToInt(Feature.ptr64),
410 .name = @tagName(Feature.ptr64),
411 .llvm_name = "ptr64",327 .llvm_name = "ptr64",
412 .description = "Pointers are 64-bit wide",328 .description = "Pointers are 64-bit wide",
413 .dependencies = featureSet(&[_]Feature{}),329 .dependencies = sparseFeatureSet(&[_]Feature{}),
414 };330 };
415 result[@enumToInt(Feature.single_float)] = .{331 result[@enumToInt(Feature.single_float)] = .{
416 .index = @enumToInt(Feature.single_float),
417 .name = @tagName(Feature.single_float),
418 .llvm_name = "single-float",332 .llvm_name = "single-float",
419 .description = "Only supports single precision float",333 .description = "Only supports single precision float",
420 .dependencies = featureSet(&[_]Feature{}),334 .dependencies = sparseFeatureSet(&[_]Feature{}),
421 };335 };
422 result[@enumToInt(Feature.soft_float)] = .{336 result[@enumToInt(Feature.soft_float)] = .{
423 .index = @enumToInt(Feature.soft_float),
424 .name = @tagName(Feature.soft_float),
425 .llvm_name = "soft-float",337 .llvm_name = "soft-float",
426 .description = "Does not support floating point instructions",338 .description = "Does not support floating point instructions",
427 .dependencies = featureSet(&[_]Feature{}),339 .dependencies = sparseFeatureSet(&[_]Feature{}),
428 };340 };
429 result[@enumToInt(Feature.sym32)] = .{341 result[@enumToInt(Feature.sym32)] = .{
430 .index = @enumToInt(Feature.sym32),
431 .name = @tagName(Feature.sym32),
432 .llvm_name = "sym32",342 .llvm_name = "sym32",
433 .description = "Symbols are 32 bit on Mips64",343 .description = "Symbols are 32 bit on Mips64",
434 .dependencies = featureSet(&[_]Feature{}),344 .dependencies = sparseFeatureSet(&[_]Feature{}),
435 };345 };
436 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{346 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{
437 .index = @enumToInt(Feature.use_indirect_jump_hazard),
438 .name = @tagName(Feature.use_indirect_jump_hazard),
439 .llvm_name = "use-indirect-jump-hazard",347 .llvm_name = "use-indirect-jump-hazard",
440 .description = "Use indirect jump guards to prevent certain speculation based attacks",348 .description = "Use indirect jump guards to prevent certain speculation based attacks",
441 .dependencies = featureSet(&[_]Feature{}),349 .dependencies = sparseFeatureSet(&[_]Feature{}),
442 };350 };
443 result[@enumToInt(Feature.use_tcc_in_div)] = .{351 result[@enumToInt(Feature.use_tcc_in_div)] = .{
444 .index = @enumToInt(Feature.use_tcc_in_div),
445 .name = @tagName(Feature.use_tcc_in_div),
446 .llvm_name = "use-tcc-in-div",352 .llvm_name = "use-tcc-in-div",
447 .description = "Force the assembler to use trapping",353 .description = "Force the assembler to use trapping",
448 .dependencies = featureSet(&[_]Feature{}),354 .dependencies = sparseFeatureSet(&[_]Feature{}),
449 };355 };
450 result[@enumToInt(Feature.vfpu)] = .{356 result[@enumToInt(Feature.vfpu)] = .{
451 .index = @enumToInt(Feature.vfpu),
452 .name = @tagName(Feature.vfpu),
453 .llvm_name = "vfpu",357 .llvm_name = "vfpu",
454 .description = "Enable vector FPU instructions",358 .description = "Enable vector FPU instructions",
455 .dependencies = featureSet(&[_]Feature{}),359 .dependencies = sparseFeatureSet(&[_]Feature{}),
456 };360 };
457 result[@enumToInt(Feature.virt)] = .{361 result[@enumToInt(Feature.virt)] = .{
458 .index = @enumToInt(Feature.virt),
459 .name = @tagName(Feature.virt),
460 .llvm_name = "virt",362 .llvm_name = "virt",
461 .description = "Mips Virtualization ASE",363 .description = "Mips Virtualization ASE",
462 .dependencies = featureSet(&[_]Feature{}),364 .dependencies = sparseFeatureSet(&[_]Feature{}),
463 };365 };
366 const ti = @typeInfo(Feature);
367 for (result) |*elem, i| {
368 elem.index = i;
369 elem.name = ti.Enum.fields[i].name;
370 elem.dependencies.initAsDependencies(i, &result);
371 }
464 break :blk result;372 break :blk result;
465};373};
466374
...@@ -468,112 +376,112 @@ pub const cpu = struct {...@@ -468,112 +376,112 @@ pub const cpu = struct {
468 pub const mips1 = Cpu{376 pub const mips1 = Cpu{
469 .name = "mips1",377 .name = "mips1",
470 .llvm_name = "mips1",378 .llvm_name = "mips1",
471 .features = featureSet(&[_]Feature{379 .features = featureSet(&all_features, &[_]Feature{
472 .mips1,380 .mips1,
473 }),381 }),
474 };382 };
475 pub const mips2 = Cpu{383 pub const mips2 = Cpu{
476 .name = "mips2",384 .name = "mips2",
477 .llvm_name = "mips2",385 .llvm_name = "mips2",
478 .features = featureSet(&[_]Feature{386 .features = featureSet(&all_features, &[_]Feature{
479 .mips2,387 .mips2,
480 }),388 }),
481 };389 };
482 pub const mips3 = Cpu{390 pub const mips3 = Cpu{
483 .name = "mips3",391 .name = "mips3",
484 .llvm_name = "mips3",392 .llvm_name = "mips3",
485 .features = featureSet(&[_]Feature{393 .features = featureSet(&all_features, &[_]Feature{
486 .mips3,394 .mips3,
487 }),395 }),
488 };396 };
489 pub const mips32 = Cpu{397 pub const mips32 = Cpu{
490 .name = "mips32",398 .name = "mips32",
491 .llvm_name = "mips32",399 .llvm_name = "mips32",
492 .features = featureSet(&[_]Feature{400 .features = featureSet(&all_features, &[_]Feature{
493 .mips32,401 .mips32,
494 }),402 }),
495 };403 };
496 pub const mips32r2 = Cpu{404 pub const mips32r2 = Cpu{
497 .name = "mips32r2",405 .name = "mips32r2",
498 .llvm_name = "mips32r2",406 .llvm_name = "mips32r2",
499 .features = featureSet(&[_]Feature{407 .features = featureSet(&all_features, &[_]Feature{
500 .mips32r2,408 .mips32r2,
501 }),409 }),
502 };410 };
503 pub const mips32r3 = Cpu{411 pub const mips32r3 = Cpu{
504 .name = "mips32r3",412 .name = "mips32r3",
505 .llvm_name = "mips32r3",413 .llvm_name = "mips32r3",
506 .features = featureSet(&[_]Feature{414 .features = featureSet(&all_features, &[_]Feature{
507 .mips32r3,415 .mips32r3,
508 }),416 }),
509 };417 };
510 pub const mips32r5 = Cpu{418 pub const mips32r5 = Cpu{
511 .name = "mips32r5",419 .name = "mips32r5",
512 .llvm_name = "mips32r5",420 .llvm_name = "mips32r5",
513 .features = featureSet(&[_]Feature{421 .features = featureSet(&all_features, &[_]Feature{
514 .mips32r5,422 .mips32r5,
515 }),423 }),
516 };424 };
517 pub const mips32r6 = Cpu{425 pub const mips32r6 = Cpu{
518 .name = "mips32r6",426 .name = "mips32r6",
519 .llvm_name = "mips32r6",427 .llvm_name = "mips32r6",
520 .features = featureSet(&[_]Feature{428 .features = featureSet(&all_features, &[_]Feature{
521 .mips32r6,429 .mips32r6,
522 }),430 }),
523 };431 };
524 pub const mips4 = Cpu{432 pub const mips4 = Cpu{
525 .name = "mips4",433 .name = "mips4",
526 .llvm_name = "mips4",434 .llvm_name = "mips4",
527 .features = featureSet(&[_]Feature{435 .features = featureSet(&all_features, &[_]Feature{
528 .mips4,436 .mips4,
529 }),437 }),
530 };438 };
531 pub const mips5 = Cpu{439 pub const mips5 = Cpu{
532 .name = "mips5",440 .name = "mips5",
533 .llvm_name = "mips5",441 .llvm_name = "mips5",
534 .features = featureSet(&[_]Feature{442 .features = featureSet(&all_features, &[_]Feature{
535 .mips5,443 .mips5,
536 }),444 }),
537 };445 };
538 pub const mips64 = Cpu{446 pub const mips64 = Cpu{
539 .name = "mips64",447 .name = "mips64",
540 .llvm_name = "mips64",448 .llvm_name = "mips64",
541 .features = featureSet(&[_]Feature{449 .features = featureSet(&all_features, &[_]Feature{
542 .mips64,450 .mips64,
543 }),451 }),
544 };452 };
545 pub const mips64r2 = Cpu{453 pub const mips64r2 = Cpu{
546 .name = "mips64r2",454 .name = "mips64r2",
547 .llvm_name = "mips64r2",455 .llvm_name = "mips64r2",
548 .features = featureSet(&[_]Feature{456 .features = featureSet(&all_features, &[_]Feature{
549 .mips64r2,457 .mips64r2,
550 }),458 }),
551 };459 };
552 pub const mips64r3 = Cpu{460 pub const mips64r3 = Cpu{
553 .name = "mips64r3",461 .name = "mips64r3",
554 .llvm_name = "mips64r3",462 .llvm_name = "mips64r3",
555 .features = featureSet(&[_]Feature{463 .features = featureSet(&all_features, &[_]Feature{
556 .mips64r3,464 .mips64r3,
557 }),465 }),
558 };466 };
559 pub const mips64r5 = Cpu{467 pub const mips64r5 = Cpu{
560 .name = "mips64r5",468 .name = "mips64r5",
561 .llvm_name = "mips64r5",469 .llvm_name = "mips64r5",
562 .features = featureSet(&[_]Feature{470 .features = featureSet(&all_features, &[_]Feature{
563 .mips64r5,471 .mips64r5,
564 }),472 }),
565 };473 };
566 pub const mips64r6 = Cpu{474 pub const mips64r6 = Cpu{
567 .name = "mips64r6",475 .name = "mips64r6",
568 .llvm_name = "mips64r6",476 .llvm_name = "mips64r6",
569 .features = featureSet(&[_]Feature{477 .features = featureSet(&all_features, &[_]Feature{
570 .mips64r6,478 .mips64r6,
571 }),479 }),
572 };480 };
573 pub const octeon = Cpu{481 pub const octeon = Cpu{
574 .name = "octeon",482 .name = "octeon",
575 .llvm_name = "octeon",483 .llvm_name = "octeon",
576 .features = featureSet(&[_]Feature{484 .features = featureSet(&all_features, &[_]Feature{
577 .cnmips,485 .cnmips,
578 .mips64r2,486 .mips64r2,
579 }),487 }),
...@@ -581,7 +489,7 @@ pub const cpu = struct {...@@ -581,7 +489,7 @@ pub const cpu = struct {
581 pub const p5600 = Cpu{489 pub const p5600 = Cpu{
582 .name = "p5600",490 .name = "p5600",
583 .llvm_name = "p5600",491 .llvm_name = "p5600",
584 .features = featureSet(&[_]Feature{492 .features = featureSet(&all_features, &[_]Feature{
585 .p5600,493 .p5600,
586 }),494 }),
587 };495 };
lib/std/target/msp430.zig+14-16
...@@ -12,36 +12,34 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -12,36 +12,34 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
1212
13pub const all_features = blk: {13pub const all_features = blk: {
14 const len = @typeInfo(Feature).Enum.fields.len;14 const len = @typeInfo(Feature).Enum.fields.len;
15 std.debug.assert(len <= Cpu.Feature.Set.bit_count);15 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
16 var result: [len]Cpu.Feature = undefined;16 var result: [len]Cpu.Feature = undefined;
17 result[@enumToInt(Feature.ext)] = .{17 result[@enumToInt(Feature.ext)] = .{
18 .index = @enumToInt(Feature.ext),
19 .name = @tagName(Feature.ext),
20 .llvm_name = "ext",18 .llvm_name = "ext",
21 .description = "Enable MSP430-X extensions",19 .description = "Enable MSP430-X extensions",
22 .dependencies = featureSet(&[_]Feature{}),20 .dependencies = sparseFeatureSet(&[_]Feature{}),
23 };21 };
24 result[@enumToInt(Feature.hwmult16)] = .{22 result[@enumToInt(Feature.hwmult16)] = .{
25 .index = @enumToInt(Feature.hwmult16),
26 .name = @tagName(Feature.hwmult16),
27 .llvm_name = "hwmult16",23 .llvm_name = "hwmult16",
28 .description = "Enable 16-bit hardware multiplier",24 .description = "Enable 16-bit hardware multiplier",
29 .dependencies = featureSet(&[_]Feature{}),25 .dependencies = sparseFeatureSet(&[_]Feature{}),
30 };26 };
31 result[@enumToInt(Feature.hwmult32)] = .{27 result[@enumToInt(Feature.hwmult32)] = .{
32 .index = @enumToInt(Feature.hwmult32),
33 .name = @tagName(Feature.hwmult32),
34 .llvm_name = "hwmult32",28 .llvm_name = "hwmult32",
35 .description = "Enable 32-bit hardware multiplier",29 .description = "Enable 32-bit hardware multiplier",
36 .dependencies = featureSet(&[_]Feature{}),30 .dependencies = sparseFeatureSet(&[_]Feature{}),
37 };31 };
38 result[@enumToInt(Feature.hwmultf5)] = .{32 result[@enumToInt(Feature.hwmultf5)] = .{
39 .index = @enumToInt(Feature.hwmultf5),
40 .name = @tagName(Feature.hwmultf5),
41 .llvm_name = "hwmultf5",33 .llvm_name = "hwmultf5",
42 .description = "Enable F5 series hardware multiplier",34 .description = "Enable F5 series hardware multiplier",
43 .dependencies = featureSet(&[_]Feature{}),35 .dependencies = sparseFeatureSet(&[_]Feature{}),
44 };36 };
37 const ti = @typeInfo(Feature);
38 for (result) |*elem, i| {
39 elem.index = i;
40 elem.name = ti.Enum.fields[i].name;
41 elem.dependencies.initAsDependencies(i, &result);
42 }
45 break :blk result;43 break :blk result;
46};44};
4745
...@@ -49,17 +47,17 @@ pub const cpu = struct {...@@ -49,17 +47,17 @@ pub const cpu = struct {
49 pub const generic = Cpu{47 pub const generic = Cpu{
50 .name = "generic",48 .name = "generic",
51 .llvm_name = "generic",49 .llvm_name = "generic",
52 .features = featureSet(&[_]Feature{}),50 .features = featureSet(&all_features, &[_]Feature{}),
53 };51 };
54 pub const msp430 = Cpu{52 pub const msp430 = Cpu{
55 .name = "msp430",53 .name = "msp430",
56 .llvm_name = "msp430",54 .llvm_name = "msp430",
57 .features = featureSet(&[_]Feature{}),55 .features = featureSet(&all_features, &[_]Feature{}),
58 };56 };
59 pub const msp430x = Cpu{57 pub const msp430x = Cpu{
60 .name = "msp430x",58 .name = "msp430x",
61 .llvm_name = "msp430x",59 .llvm_name = "msp430x",
62 .features = featureSet(&[_]Feature{60 .features = featureSet(&all_features, &[_]Feature{
63 .ext,61 .ext,
64 }),62 }),
65 };63 };
lib/std/target/nvptx.zig+48-92
...@@ -33,183 +33,139 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -33,183 +33,139 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
3333
34pub const all_features = blk: {34pub const all_features = blk: {
35 const len = @typeInfo(Feature).Enum.fields.len;35 const len = @typeInfo(Feature).Enum.fields.len;
36 std.debug.assert(len <= Cpu.Feature.Set.bit_count);36 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
37 var result: [len]Cpu.Feature = undefined;37 var result: [len]Cpu.Feature = undefined;
38 result[@enumToInt(Feature.ptx32)] = .{38 result[@enumToInt(Feature.ptx32)] = .{
39 .index = @enumToInt(Feature.ptx32),
40 .name = @tagName(Feature.ptx32),
41 .llvm_name = "ptx32",39 .llvm_name = "ptx32",
42 .description = "Use PTX version 3.2",40 .description = "Use PTX version 3.2",
43 .dependencies = featureSet(&[_]Feature{}),41 .dependencies = sparseFeatureSet(&[_]Feature{}),
44 };42 };
45 result[@enumToInt(Feature.ptx40)] = .{43 result[@enumToInt(Feature.ptx40)] = .{
46 .index = @enumToInt(Feature.ptx40),
47 .name = @tagName(Feature.ptx40),
48 .llvm_name = "ptx40",44 .llvm_name = "ptx40",
49 .description = "Use PTX version 4.0",45 .description = "Use PTX version 4.0",
50 .dependencies = featureSet(&[_]Feature{}),46 .dependencies = sparseFeatureSet(&[_]Feature{}),
51 };47 };
52 result[@enumToInt(Feature.ptx41)] = .{48 result[@enumToInt(Feature.ptx41)] = .{
53 .index = @enumToInt(Feature.ptx41),
54 .name = @tagName(Feature.ptx41),
55 .llvm_name = "ptx41",49 .llvm_name = "ptx41",
56 .description = "Use PTX version 4.1",50 .description = "Use PTX version 4.1",
57 .dependencies = featureSet(&[_]Feature{}),51 .dependencies = sparseFeatureSet(&[_]Feature{}),
58 };52 };
59 result[@enumToInt(Feature.ptx42)] = .{53 result[@enumToInt(Feature.ptx42)] = .{
60 .index = @enumToInt(Feature.ptx42),
61 .name = @tagName(Feature.ptx42),
62 .llvm_name = "ptx42",54 .llvm_name = "ptx42",
63 .description = "Use PTX version 4.2",55 .description = "Use PTX version 4.2",
64 .dependencies = featureSet(&[_]Feature{}),56 .dependencies = sparseFeatureSet(&[_]Feature{}),
65 };57 };
66 result[@enumToInt(Feature.ptx43)] = .{58 result[@enumToInt(Feature.ptx43)] = .{
67 .index = @enumToInt(Feature.ptx43),
68 .name = @tagName(Feature.ptx43),
69 .llvm_name = "ptx43",59 .llvm_name = "ptx43",
70 .description = "Use PTX version 4.3",60 .description = "Use PTX version 4.3",
71 .dependencies = featureSet(&[_]Feature{}),61 .dependencies = sparseFeatureSet(&[_]Feature{}),
72 };62 };
73 result[@enumToInt(Feature.ptx50)] = .{63 result[@enumToInt(Feature.ptx50)] = .{
74 .index = @enumToInt(Feature.ptx50),
75 .name = @tagName(Feature.ptx50),
76 .llvm_name = "ptx50",64 .llvm_name = "ptx50",
77 .description = "Use PTX version 5.0",65 .description = "Use PTX version 5.0",
78 .dependencies = featureSet(&[_]Feature{}),66 .dependencies = sparseFeatureSet(&[_]Feature{}),
79 };67 };
80 result[@enumToInt(Feature.ptx60)] = .{68 result[@enumToInt(Feature.ptx60)] = .{
81 .index = @enumToInt(Feature.ptx60),
82 .name = @tagName(Feature.ptx60),
83 .llvm_name = "ptx60",69 .llvm_name = "ptx60",
84 .description = "Use PTX version 6.0",70 .description = "Use PTX version 6.0",
85 .dependencies = featureSet(&[_]Feature{}),71 .dependencies = sparseFeatureSet(&[_]Feature{}),
86 };72 };
87 result[@enumToInt(Feature.ptx61)] = .{73 result[@enumToInt(Feature.ptx61)] = .{
88 .index = @enumToInt(Feature.ptx61),
89 .name = @tagName(Feature.ptx61),
90 .llvm_name = "ptx61",74 .llvm_name = "ptx61",
91 .description = "Use PTX version 6.1",75 .description = "Use PTX version 6.1",
92 .dependencies = featureSet(&[_]Feature{}),76 .dependencies = sparseFeatureSet(&[_]Feature{}),
93 };77 };
94 result[@enumToInt(Feature.ptx63)] = .{78 result[@enumToInt(Feature.ptx63)] = .{
95 .index = @enumToInt(Feature.ptx63),
96 .name = @tagName(Feature.ptx63),
97 .llvm_name = "ptx63",79 .llvm_name = "ptx63",
98 .description = "Use PTX version 6.3",80 .description = "Use PTX version 6.3",
99 .dependencies = featureSet(&[_]Feature{}),81 .dependencies = sparseFeatureSet(&[_]Feature{}),
100 };82 };
101 result[@enumToInt(Feature.ptx64)] = .{83 result[@enumToInt(Feature.ptx64)] = .{
102 .index = @enumToInt(Feature.ptx64),
103 .name = @tagName(Feature.ptx64),
104 .llvm_name = "ptx64",84 .llvm_name = "ptx64",
105 .description = "Use PTX version 6.4",85 .description = "Use PTX version 6.4",
106 .dependencies = featureSet(&[_]Feature{}),86 .dependencies = sparseFeatureSet(&[_]Feature{}),
107 };87 };
108 result[@enumToInt(Feature.sm_20)] = .{88 result[@enumToInt(Feature.sm_20)] = .{
109 .index = @enumToInt(Feature.sm_20),
110 .name = @tagName(Feature.sm_20),
111 .llvm_name = "sm_20",89 .llvm_name = "sm_20",
112 .description = "Target SM 2.0",90 .description = "Target SM 2.0",
113 .dependencies = featureSet(&[_]Feature{}),91 .dependencies = sparseFeatureSet(&[_]Feature{}),
114 };92 };
115 result[@enumToInt(Feature.sm_21)] = .{93 result[@enumToInt(Feature.sm_21)] = .{
116 .index = @enumToInt(Feature.sm_21),
117 .name = @tagName(Feature.sm_21),
118 .llvm_name = "sm_21",94 .llvm_name = "sm_21",
119 .description = "Target SM 2.1",95 .description = "Target SM 2.1",
120 .dependencies = featureSet(&[_]Feature{}),96 .dependencies = sparseFeatureSet(&[_]Feature{}),
121 };97 };
122 result[@enumToInt(Feature.sm_30)] = .{98 result[@enumToInt(Feature.sm_30)] = .{
123 .index = @enumToInt(Feature.sm_30),
124 .name = @tagName(Feature.sm_30),
125 .llvm_name = "sm_30",99 .llvm_name = "sm_30",
126 .description = "Target SM 3.0",100 .description = "Target SM 3.0",
127 .dependencies = featureSet(&[_]Feature{}),101 .dependencies = sparseFeatureSet(&[_]Feature{}),
128 };102 };
129 result[@enumToInt(Feature.sm_32)] = .{103 result[@enumToInt(Feature.sm_32)] = .{
130 .index = @enumToInt(Feature.sm_32),
131 .name = @tagName(Feature.sm_32),
132 .llvm_name = "sm_32",104 .llvm_name = "sm_32",
133 .description = "Target SM 3.2",105 .description = "Target SM 3.2",
134 .dependencies = featureSet(&[_]Feature{}),106 .dependencies = sparseFeatureSet(&[_]Feature{}),
135 };107 };
136 result[@enumToInt(Feature.sm_35)] = .{108 result[@enumToInt(Feature.sm_35)] = .{
137 .index = @enumToInt(Feature.sm_35),
138 .name = @tagName(Feature.sm_35),
139 .llvm_name = "sm_35",109 .llvm_name = "sm_35",
140 .description = "Target SM 3.5",110 .description = "Target SM 3.5",
141 .dependencies = featureSet(&[_]Feature{}),111 .dependencies = sparseFeatureSet(&[_]Feature{}),
142 };112 };
143 result[@enumToInt(Feature.sm_37)] = .{113 result[@enumToInt(Feature.sm_37)] = .{
144 .index = @enumToInt(Feature.sm_37),
145 .name = @tagName(Feature.sm_37),
146 .llvm_name = "sm_37",114 .llvm_name = "sm_37",
147 .description = "Target SM 3.7",115 .description = "Target SM 3.7",
148 .dependencies = featureSet(&[_]Feature{}),116 .dependencies = sparseFeatureSet(&[_]Feature{}),
149 };117 };
150 result[@enumToInt(Feature.sm_50)] = .{118 result[@enumToInt(Feature.sm_50)] = .{
151 .index = @enumToInt(Feature.sm_50),
152 .name = @tagName(Feature.sm_50),
153 .llvm_name = "sm_50",119 .llvm_name = "sm_50",
154 .description = "Target SM 5.0",120 .description = "Target SM 5.0",
155 .dependencies = featureSet(&[_]Feature{}),121 .dependencies = sparseFeatureSet(&[_]Feature{}),
156 };122 };
157 result[@enumToInt(Feature.sm_52)] = .{123 result[@enumToInt(Feature.sm_52)] = .{
158 .index = @enumToInt(Feature.sm_52),
159 .name = @tagName(Feature.sm_52),
160 .llvm_name = "sm_52",124 .llvm_name = "sm_52",
161 .description = "Target SM 5.2",125 .description = "Target SM 5.2",
162 .dependencies = featureSet(&[_]Feature{}),126 .dependencies = sparseFeatureSet(&[_]Feature{}),
163 };127 };
164 result[@enumToInt(Feature.sm_53)] = .{128 result[@enumToInt(Feature.sm_53)] = .{
165 .index = @enumToInt(Feature.sm_53),
166 .name = @tagName(Feature.sm_53),
167 .llvm_name = "sm_53",129 .llvm_name = "sm_53",
168 .description = "Target SM 5.3",130 .description = "Target SM 5.3",
169 .dependencies = featureSet(&[_]Feature{}),131 .dependencies = sparseFeatureSet(&[_]Feature{}),
170 };132 };
171 result[@enumToInt(Feature.sm_60)] = .{133 result[@enumToInt(Feature.sm_60)] = .{
172 .index = @enumToInt(Feature.sm_60),
173 .name = @tagName(Feature.sm_60),
174 .llvm_name = "sm_60",134 .llvm_name = "sm_60",
175 .description = "Target SM 6.0",135 .description = "Target SM 6.0",
176 .dependencies = featureSet(&[_]Feature{}),136 .dependencies = sparseFeatureSet(&[_]Feature{}),
177 };137 };
178 result[@enumToInt(Feature.sm_61)] = .{138 result[@enumToInt(Feature.sm_61)] = .{
179 .index = @enumToInt(Feature.sm_61),
180 .name = @tagName(Feature.sm_61),
181 .llvm_name = "sm_61",139 .llvm_name = "sm_61",
182 .description = "Target SM 6.1",140 .description = "Target SM 6.1",
183 .dependencies = featureSet(&[_]Feature{}),141 .dependencies = sparseFeatureSet(&[_]Feature{}),
184 };142 };
185 result[@enumToInt(Feature.sm_62)] = .{143 result[@enumToInt(Feature.sm_62)] = .{
186 .index = @enumToInt(Feature.sm_62),
187 .name = @tagName(Feature.sm_62),
188 .llvm_name = "sm_62",144 .llvm_name = "sm_62",
189 .description = "Target SM 6.2",145 .description = "Target SM 6.2",
190 .dependencies = featureSet(&[_]Feature{}),146 .dependencies = sparseFeatureSet(&[_]Feature{}),
191 };147 };
192 result[@enumToInt(Feature.sm_70)] = .{148 result[@enumToInt(Feature.sm_70)] = .{
193 .index = @enumToInt(Feature.sm_70),
194 .name = @tagName(Feature.sm_70),
195 .llvm_name = "sm_70",149 .llvm_name = "sm_70",
196 .description = "Target SM 7.0",150 .description = "Target SM 7.0",
197 .dependencies = featureSet(&[_]Feature{}),151 .dependencies = sparseFeatureSet(&[_]Feature{}),
198 };152 };
199 result[@enumToInt(Feature.sm_72)] = .{153 result[@enumToInt(Feature.sm_72)] = .{
200 .index = @enumToInt(Feature.sm_72),
201 .name = @tagName(Feature.sm_72),
202 .llvm_name = "sm_72",154 .llvm_name = "sm_72",
203 .description = "Target SM 7.2",155 .description = "Target SM 7.2",
204 .dependencies = featureSet(&[_]Feature{}),156 .dependencies = sparseFeatureSet(&[_]Feature{}),
205 };157 };
206 result[@enumToInt(Feature.sm_75)] = .{158 result[@enumToInt(Feature.sm_75)] = .{
207 .index = @enumToInt(Feature.sm_75),
208 .name = @tagName(Feature.sm_75),
209 .llvm_name = "sm_75",159 .llvm_name = "sm_75",
210 .description = "Target SM 7.5",160 .description = "Target SM 7.5",
211 .dependencies = featureSet(&[_]Feature{}),161 .dependencies = sparseFeatureSet(&[_]Feature{}),
212 };162 };
163 const ti = @typeInfo(Feature);
164 for (result) |*elem, i| {
165 elem.index = i;
166 elem.name = ti.Enum.fields[i].name;
167 elem.dependencies.initAsDependencies(i, &result);
168 }
213 break :blk result;169 break :blk result;
214};170};
215171
...@@ -217,28 +173,28 @@ pub const cpu = struct {...@@ -217,28 +173,28 @@ pub const cpu = struct {
217 pub const sm_20 = Cpu{173 pub const sm_20 = Cpu{
218 .name = "sm_20",174 .name = "sm_20",
219 .llvm_name = "sm_20",175 .llvm_name = "sm_20",
220 .features = featureSet(&[_]Feature{176 .features = featureSet(&all_features, &[_]Feature{
221 .sm_20,177 .sm_20,
222 }),178 }),
223 };179 };
224 pub const sm_21 = Cpu{180 pub const sm_21 = Cpu{
225 .name = "sm_21",181 .name = "sm_21",
226 .llvm_name = "sm_21",182 .llvm_name = "sm_21",
227 .features = featureSet(&[_]Feature{183 .features = featureSet(&all_features, &[_]Feature{
228 .sm_21,184 .sm_21,
229 }),185 }),
230 };186 };
231 pub const sm_30 = Cpu{187 pub const sm_30 = Cpu{
232 .name = "sm_30",188 .name = "sm_30",
233 .llvm_name = "sm_30",189 .llvm_name = "sm_30",
234 .features = featureSet(&[_]Feature{190 .features = featureSet(&all_features, &[_]Feature{
235 .sm_30,191 .sm_30,
236 }),192 }),
237 };193 };
238 pub const sm_32 = Cpu{194 pub const sm_32 = Cpu{
239 .name = "sm_32",195 .name = "sm_32",
240 .llvm_name = "sm_32",196 .llvm_name = "sm_32",
241 .features = featureSet(&[_]Feature{197 .features = featureSet(&all_features, &[_]Feature{
242 .ptx40,198 .ptx40,
243 .sm_32,199 .sm_32,
244 }),200 }),
...@@ -246,14 +202,14 @@ pub const cpu = struct {...@@ -246,14 +202,14 @@ pub const cpu = struct {
246 pub const sm_35 = Cpu{202 pub const sm_35 = Cpu{
247 .name = "sm_35",203 .name = "sm_35",
248 .llvm_name = "sm_35",204 .llvm_name = "sm_35",
249 .features = featureSet(&[_]Feature{205 .features = featureSet(&all_features, &[_]Feature{
250 .sm_35,206 .sm_35,
251 }),207 }),
252 };208 };
253 pub const sm_37 = Cpu{209 pub const sm_37 = Cpu{
254 .name = "sm_37",210 .name = "sm_37",
255 .llvm_name = "sm_37",211 .llvm_name = "sm_37",
256 .features = featureSet(&[_]Feature{212 .features = featureSet(&all_features, &[_]Feature{
257 .ptx41,213 .ptx41,
258 .sm_37,214 .sm_37,
259 }),215 }),
...@@ -261,7 +217,7 @@ pub const cpu = struct {...@@ -261,7 +217,7 @@ pub const cpu = struct {
261 pub const sm_50 = Cpu{217 pub const sm_50 = Cpu{
262 .name = "sm_50",218 .name = "sm_50",
263 .llvm_name = "sm_50",219 .llvm_name = "sm_50",
264 .features = featureSet(&[_]Feature{220 .features = featureSet(&all_features, &[_]Feature{
265 .ptx40,221 .ptx40,
266 .sm_50,222 .sm_50,
267 }),223 }),
...@@ -269,7 +225,7 @@ pub const cpu = struct {...@@ -269,7 +225,7 @@ pub const cpu = struct {
269 pub const sm_52 = Cpu{225 pub const sm_52 = Cpu{
270 .name = "sm_52",226 .name = "sm_52",
271 .llvm_name = "sm_52",227 .llvm_name = "sm_52",
272 .features = featureSet(&[_]Feature{228 .features = featureSet(&all_features, &[_]Feature{
273 .ptx41,229 .ptx41,
274 .sm_52,230 .sm_52,
275 }),231 }),
...@@ -277,7 +233,7 @@ pub const cpu = struct {...@@ -277,7 +233,7 @@ pub const cpu = struct {
277 pub const sm_53 = Cpu{233 pub const sm_53 = Cpu{
278 .name = "sm_53",234 .name = "sm_53",
279 .llvm_name = "sm_53",235 .llvm_name = "sm_53",
280 .features = featureSet(&[_]Feature{236 .features = featureSet(&all_features, &[_]Feature{
281 .ptx42,237 .ptx42,
282 .sm_53,238 .sm_53,
283 }),239 }),
...@@ -285,7 +241,7 @@ pub const cpu = struct {...@@ -285,7 +241,7 @@ pub const cpu = struct {
285 pub const sm_60 = Cpu{241 pub const sm_60 = Cpu{
286 .name = "sm_60",242 .name = "sm_60",
287 .llvm_name = "sm_60",243 .llvm_name = "sm_60",
288 .features = featureSet(&[_]Feature{244 .features = featureSet(&all_features, &[_]Feature{
289 .ptx50,245 .ptx50,
290 .sm_60,246 .sm_60,
291 }),247 }),
...@@ -293,7 +249,7 @@ pub const cpu = struct {...@@ -293,7 +249,7 @@ pub const cpu = struct {
293 pub const sm_61 = Cpu{249 pub const sm_61 = Cpu{
294 .name = "sm_61",250 .name = "sm_61",
295 .llvm_name = "sm_61",251 .llvm_name = "sm_61",
296 .features = featureSet(&[_]Feature{252 .features = featureSet(&all_features, &[_]Feature{
297 .ptx50,253 .ptx50,
298 .sm_61,254 .sm_61,
299 }),255 }),
...@@ -301,7 +257,7 @@ pub const cpu = struct {...@@ -301,7 +257,7 @@ pub const cpu = struct {
301 pub const sm_62 = Cpu{257 pub const sm_62 = Cpu{
302 .name = "sm_62",258 .name = "sm_62",
303 .llvm_name = "sm_62",259 .llvm_name = "sm_62",
304 .features = featureSet(&[_]Feature{260 .features = featureSet(&all_features, &[_]Feature{
305 .ptx50,261 .ptx50,
306 .sm_62,262 .sm_62,
307 }),263 }),
...@@ -309,7 +265,7 @@ pub const cpu = struct {...@@ -309,7 +265,7 @@ pub const cpu = struct {
309 pub const sm_70 = Cpu{265 pub const sm_70 = Cpu{
310 .name = "sm_70",266 .name = "sm_70",
311 .llvm_name = "sm_70",267 .llvm_name = "sm_70",
312 .features = featureSet(&[_]Feature{268 .features = featureSet(&all_features, &[_]Feature{
313 .ptx60,269 .ptx60,
314 .sm_70,270 .sm_70,
315 }),271 }),
...@@ -317,7 +273,7 @@ pub const cpu = struct {...@@ -317,7 +273,7 @@ pub const cpu = struct {
317 pub const sm_72 = Cpu{273 pub const sm_72 = Cpu{
318 .name = "sm_72",274 .name = "sm_72",
319 .llvm_name = "sm_72",275 .llvm_name = "sm_72",
320 .features = featureSet(&[_]Feature{276 .features = featureSet(&all_features, &[_]Feature{
321 .ptx61,277 .ptx61,
322 .sm_72,278 .sm_72,
323 }),279 }),
...@@ -325,7 +281,7 @@ pub const cpu = struct {...@@ -325,7 +281,7 @@ pub const cpu = struct {
325 pub const sm_75 = Cpu{281 pub const sm_75 = Cpu{
326 .name = "sm_75",282 .name = "sm_75",
327 .llvm_name = "sm_75",283 .llvm_name = "sm_75",
328 .features = featureSet(&[_]Feature{284 .features = featureSet(&all_features, &[_]Feature{
329 .ptx63,285 .ptx63,
330 .sm_75,286 .sm_75,
331 }),287 }),
lib/std/target/powerpc.zig+95-191
...@@ -59,417 +59,321 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -59,417 +59,321 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
5959
60pub const all_features = blk: {60pub const all_features = blk: {
61 const len = @typeInfo(Feature).Enum.fields.len;61 const len = @typeInfo(Feature).Enum.fields.len;
62 std.debug.assert(len <= Cpu.Feature.Set.bit_count);62 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
63 var result: [len]Cpu.Feature = undefined;63 var result: [len]Cpu.Feature = undefined;
64 result[@enumToInt(Feature.@"64bit")] = .{64 result[@enumToInt(Feature.@"64bit")] = .{
65 .index = @enumToInt(Feature.@"64bit"),
66 .name = @tagName(Feature.@"64bit"),
67 .llvm_name = "64bit",65 .llvm_name = "64bit",
68 .description = "Enable 64-bit instructions",66 .description = "Enable 64-bit instructions",
69 .dependencies = featureSet(&[_]Feature{}),67 .dependencies = sparseFeatureSet(&[_]Feature{}),
70 };68 };
71 result[@enumToInt(Feature.@"64bitregs")] = .{69 result[@enumToInt(Feature.@"64bitregs")] = .{
72 .index = @enumToInt(Feature.@"64bitregs"),
73 .name = @tagName(Feature.@"64bitregs"),
74 .llvm_name = "64bitregs",70 .llvm_name = "64bitregs",
75 .description = "Enable 64-bit registers usage for ppc32 [beta]",71 .description = "Enable 64-bit registers usage for ppc32 [beta]",
76 .dependencies = featureSet(&[_]Feature{}),72 .dependencies = sparseFeatureSet(&[_]Feature{}),
77 };73 };
78 result[@enumToInt(Feature.altivec)] = .{74 result[@enumToInt(Feature.altivec)] = .{
79 .index = @enumToInt(Feature.altivec),
80 .name = @tagName(Feature.altivec),
81 .llvm_name = "altivec",75 .llvm_name = "altivec",
82 .description = "Enable Altivec instructions",76 .description = "Enable Altivec instructions",
83 .dependencies = featureSet(&[_]Feature{77 .dependencies = sparseFeatureSet(&[_]Feature{
84 .fpu,78 .fpu,
85 }),79 }),
86 };80 };
87 result[@enumToInt(Feature.booke)] = .{81 result[@enumToInt(Feature.booke)] = .{
88 .index = @enumToInt(Feature.booke),
89 .name = @tagName(Feature.booke),
90 .llvm_name = "booke",82 .llvm_name = "booke",
91 .description = "Enable Book E instructions",83 .description = "Enable Book E instructions",
92 .dependencies = featureSet(&[_]Feature{84 .dependencies = sparseFeatureSet(&[_]Feature{
93 .icbt,85 .icbt,
94 }),86 }),
95 };87 };
96 result[@enumToInt(Feature.bpermd)] = .{88 result[@enumToInt(Feature.bpermd)] = .{
97 .index = @enumToInt(Feature.bpermd),
98 .name = @tagName(Feature.bpermd),
99 .llvm_name = "bpermd",89 .llvm_name = "bpermd",
100 .description = "Enable the bpermd instruction",90 .description = "Enable the bpermd instruction",
101 .dependencies = featureSet(&[_]Feature{}),91 .dependencies = sparseFeatureSet(&[_]Feature{}),
102 };92 };
103 result[@enumToInt(Feature.cmpb)] = .{93 result[@enumToInt(Feature.cmpb)] = .{
104 .index = @enumToInt(Feature.cmpb),
105 .name = @tagName(Feature.cmpb),
106 .llvm_name = "cmpb",94 .llvm_name = "cmpb",
107 .description = "Enable the cmpb instruction",95 .description = "Enable the cmpb instruction",
108 .dependencies = featureSet(&[_]Feature{}),96 .dependencies = sparseFeatureSet(&[_]Feature{}),
109 };97 };
110 result[@enumToInt(Feature.crbits)] = .{98 result[@enumToInt(Feature.crbits)] = .{
111 .index = @enumToInt(Feature.crbits),
112 .name = @tagName(Feature.crbits),
113 .llvm_name = "crbits",99 .llvm_name = "crbits",
114 .description = "Use condition-register bits individually",100 .description = "Use condition-register bits individually",
115 .dependencies = featureSet(&[_]Feature{}),101 .dependencies = sparseFeatureSet(&[_]Feature{}),
116 };102 };
117 result[@enumToInt(Feature.crypto)] = .{103 result[@enumToInt(Feature.crypto)] = .{
118 .index = @enumToInt(Feature.crypto),
119 .name = @tagName(Feature.crypto),
120 .llvm_name = "crypto",104 .llvm_name = "crypto",
121 .description = "Enable POWER8 Crypto instructions",105 .description = "Enable POWER8 Crypto instructions",
122 .dependencies = featureSet(&[_]Feature{106 .dependencies = sparseFeatureSet(&[_]Feature{
123 .power8_altivec,107 .power8_altivec,
124 }),108 }),
125 };109 };
126 result[@enumToInt(Feature.direct_move)] = .{110 result[@enumToInt(Feature.direct_move)] = .{
127 .index = @enumToInt(Feature.direct_move),
128 .name = @tagName(Feature.direct_move),
129 .llvm_name = "direct-move",111 .llvm_name = "direct-move",
130 .description = "Enable Power8 direct move instructions",112 .description = "Enable Power8 direct move instructions",
131 .dependencies = featureSet(&[_]Feature{113 .dependencies = sparseFeatureSet(&[_]Feature{
132 .vsx,114 .vsx,
133 }),115 }),
134 };116 };
135 result[@enumToInt(Feature.e500)] = .{117 result[@enumToInt(Feature.e500)] = .{
136 .index = @enumToInt(Feature.e500),
137 .name = @tagName(Feature.e500),
138 .llvm_name = "e500",118 .llvm_name = "e500",
139 .description = "Enable E500/E500mc instructions",119 .description = "Enable E500/E500mc instructions",
140 .dependencies = featureSet(&[_]Feature{}),120 .dependencies = sparseFeatureSet(&[_]Feature{}),
141 };121 };
142 result[@enumToInt(Feature.extdiv)] = .{122 result[@enumToInt(Feature.extdiv)] = .{
143 .index = @enumToInt(Feature.extdiv),
144 .name = @tagName(Feature.extdiv),
145 .llvm_name = "extdiv",123 .llvm_name = "extdiv",
146 .description = "Enable extended divide instructions",124 .description = "Enable extended divide instructions",
147 .dependencies = featureSet(&[_]Feature{}),125 .dependencies = sparseFeatureSet(&[_]Feature{}),
148 };126 };
149 result[@enumToInt(Feature.fcpsgn)] = .{127 result[@enumToInt(Feature.fcpsgn)] = .{
150 .index = @enumToInt(Feature.fcpsgn),
151 .name = @tagName(Feature.fcpsgn),
152 .llvm_name = "fcpsgn",128 .llvm_name = "fcpsgn",
153 .description = "Enable the fcpsgn instruction",129 .description = "Enable the fcpsgn instruction",
154 .dependencies = featureSet(&[_]Feature{130 .dependencies = sparseFeatureSet(&[_]Feature{
155 .fpu,131 .fpu,
156 }),132 }),
157 };133 };
158 result[@enumToInt(Feature.float128)] = .{134 result[@enumToInt(Feature.float128)] = .{
159 .index = @enumToInt(Feature.float128),
160 .name = @tagName(Feature.float128),
161 .llvm_name = "float128",135 .llvm_name = "float128",
162 .description = "Enable the __float128 data type for IEEE-754R Binary128.",136 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
163 .dependencies = featureSet(&[_]Feature{137 .dependencies = sparseFeatureSet(&[_]Feature{
164 .vsx,138 .vsx,
165 }),139 }),
166 };140 };
167 result[@enumToInt(Feature.fpcvt)] = .{141 result[@enumToInt(Feature.fpcvt)] = .{
168 .index = @enumToInt(Feature.fpcvt),
169 .name = @tagName(Feature.fpcvt),
170 .llvm_name = "fpcvt",142 .llvm_name = "fpcvt",
171 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",143 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
172 .dependencies = featureSet(&[_]Feature{144 .dependencies = sparseFeatureSet(&[_]Feature{
173 .fpu,145 .fpu,
174 }),146 }),
175 };147 };
176 result[@enumToInt(Feature.fprnd)] = .{148 result[@enumToInt(Feature.fprnd)] = .{
177 .index = @enumToInt(Feature.fprnd),
178 .name = @tagName(Feature.fprnd),
179 .llvm_name = "fprnd",149 .llvm_name = "fprnd",
180 .description = "Enable the fri[mnpz] instructions",150 .description = "Enable the fri[mnpz] instructions",
181 .dependencies = featureSet(&[_]Feature{151 .dependencies = sparseFeatureSet(&[_]Feature{
182 .fpu,152 .fpu,
183 }),153 }),
184 };154 };
185 result[@enumToInt(Feature.fpu)] = .{155 result[@enumToInt(Feature.fpu)] = .{
186 .index = @enumToInt(Feature.fpu),
187 .name = @tagName(Feature.fpu),
188 .llvm_name = "fpu",156 .llvm_name = "fpu",
189 .description = "Enable classic FPU instructions",157 .description = "Enable classic FPU instructions",
190 .dependencies = featureSet(&[_]Feature{158 .dependencies = sparseFeatureSet(&[_]Feature{
191 .hard_float,159 .hard_float,
192 }),160 }),
193 };161 };
194 result[@enumToInt(Feature.fre)] = .{162 result[@enumToInt(Feature.fre)] = .{
195 .index = @enumToInt(Feature.fre),
196 .name = @tagName(Feature.fre),
197 .llvm_name = "fre",163 .llvm_name = "fre",
198 .description = "Enable the fre instruction",164 .description = "Enable the fre instruction",
199 .dependencies = featureSet(&[_]Feature{165 .dependencies = sparseFeatureSet(&[_]Feature{
200 .fpu,166 .fpu,
201 }),167 }),
202 };168 };
203 result[@enumToInt(Feature.fres)] = .{169 result[@enumToInt(Feature.fres)] = .{
204 .index = @enumToInt(Feature.fres),
205 .name = @tagName(Feature.fres),
206 .llvm_name = "fres",170 .llvm_name = "fres",
207 .description = "Enable the fres instruction",171 .description = "Enable the fres instruction",
208 .dependencies = featureSet(&[_]Feature{172 .dependencies = sparseFeatureSet(&[_]Feature{
209 .fpu,173 .fpu,
210 }),174 }),
211 };175 };
212 result[@enumToInt(Feature.frsqrte)] = .{176 result[@enumToInt(Feature.frsqrte)] = .{
213 .index = @enumToInt(Feature.frsqrte),
214 .name = @tagName(Feature.frsqrte),
215 .llvm_name = "frsqrte",177 .llvm_name = "frsqrte",
216 .description = "Enable the frsqrte instruction",178 .description = "Enable the frsqrte instruction",
217 .dependencies = featureSet(&[_]Feature{179 .dependencies = sparseFeatureSet(&[_]Feature{
218 .fpu,180 .fpu,
219 }),181 }),
220 };182 };
221 result[@enumToInt(Feature.frsqrtes)] = .{183 result[@enumToInt(Feature.frsqrtes)] = .{
222 .index = @enumToInt(Feature.frsqrtes),
223 .name = @tagName(Feature.frsqrtes),
224 .llvm_name = "frsqrtes",184 .llvm_name = "frsqrtes",
225 .description = "Enable the frsqrtes instruction",185 .description = "Enable the frsqrtes instruction",
226 .dependencies = featureSet(&[_]Feature{186 .dependencies = sparseFeatureSet(&[_]Feature{
227 .fpu,187 .fpu,
228 }),188 }),
229 };189 };
230 result[@enumToInt(Feature.fsqrt)] = .{190 result[@enumToInt(Feature.fsqrt)] = .{
231 .index = @enumToInt(Feature.fsqrt),
232 .name = @tagName(Feature.fsqrt),
233 .llvm_name = "fsqrt",191 .llvm_name = "fsqrt",
234 .description = "Enable the fsqrt instruction",192 .description = "Enable the fsqrt instruction",
235 .dependencies = featureSet(&[_]Feature{193 .dependencies = sparseFeatureSet(&[_]Feature{
236 .fpu,194 .fpu,
237 }),195 }),
238 };196 };
239 result[@enumToInt(Feature.hard_float)] = .{197 result[@enumToInt(Feature.hard_float)] = .{
240 .index = @enumToInt(Feature.hard_float),
241 .name = @tagName(Feature.hard_float),
242 .llvm_name = "hard-float",198 .llvm_name = "hard-float",
243 .description = "Enable floating-point instructions",199 .description = "Enable floating-point instructions",
244 .dependencies = featureSet(&[_]Feature{}),200 .dependencies = sparseFeatureSet(&[_]Feature{}),
245 };201 };
246 result[@enumToInt(Feature.htm)] = .{202 result[@enumToInt(Feature.htm)] = .{
247 .index = @enumToInt(Feature.htm),
248 .name = @tagName(Feature.htm),
249 .llvm_name = "htm",203 .llvm_name = "htm",
250 .description = "Enable Hardware Transactional Memory instructions",204 .description = "Enable Hardware Transactional Memory instructions",
251 .dependencies = featureSet(&[_]Feature{}),205 .dependencies = sparseFeatureSet(&[_]Feature{}),
252 };206 };
253 result[@enumToInt(Feature.icbt)] = .{207 result[@enumToInt(Feature.icbt)] = .{
254 .index = @enumToInt(Feature.icbt),
255 .name = @tagName(Feature.icbt),
256 .llvm_name = "icbt",208 .llvm_name = "icbt",
257 .description = "Enable icbt instruction",209 .description = "Enable icbt instruction",
258 .dependencies = featureSet(&[_]Feature{}),210 .dependencies = sparseFeatureSet(&[_]Feature{}),
259 };211 };
260 result[@enumToInt(Feature.invariant_function_descriptors)] = .{212 result[@enumToInt(Feature.invariant_function_descriptors)] = .{
261 .index = @enumToInt(Feature.invariant_function_descriptors),
262 .name = @tagName(Feature.invariant_function_descriptors),
263 .llvm_name = "invariant-function-descriptors",213 .llvm_name = "invariant-function-descriptors",
264 .description = "Assume function descriptors are invariant",214 .description = "Assume function descriptors are invariant",
265 .dependencies = featureSet(&[_]Feature{}),215 .dependencies = sparseFeatureSet(&[_]Feature{}),
266 };216 };
267 result[@enumToInt(Feature.isa_v30_instructions)] = .{217 result[@enumToInt(Feature.isa_v30_instructions)] = .{
268 .index = @enumToInt(Feature.isa_v30_instructions),
269 .name = @tagName(Feature.isa_v30_instructions),
270 .llvm_name = "isa-v30-instructions",218 .llvm_name = "isa-v30-instructions",
271 .description = "Enable instructions added in ISA 3.0.",219 .description = "Enable instructions added in ISA 3.0.",
272 .dependencies = featureSet(&[_]Feature{}),220 .dependencies = sparseFeatureSet(&[_]Feature{}),
273 };221 };
274 result[@enumToInt(Feature.isel)] = .{222 result[@enumToInt(Feature.isel)] = .{
275 .index = @enumToInt(Feature.isel),
276 .name = @tagName(Feature.isel),
277 .llvm_name = "isel",223 .llvm_name = "isel",
278 .description = "Enable the isel instruction",224 .description = "Enable the isel instruction",
279 .dependencies = featureSet(&[_]Feature{}),225 .dependencies = sparseFeatureSet(&[_]Feature{}),
280 };226 };
281 result[@enumToInt(Feature.ldbrx)] = .{227 result[@enumToInt(Feature.ldbrx)] = .{
282 .index = @enumToInt(Feature.ldbrx),
283 .name = @tagName(Feature.ldbrx),
284 .llvm_name = "ldbrx",228 .llvm_name = "ldbrx",
285 .description = "Enable the ldbrx instruction",229 .description = "Enable the ldbrx instruction",
286 .dependencies = featureSet(&[_]Feature{}),230 .dependencies = sparseFeatureSet(&[_]Feature{}),
287 };231 };
288 result[@enumToInt(Feature.lfiwax)] = .{232 result[@enumToInt(Feature.lfiwax)] = .{
289 .index = @enumToInt(Feature.lfiwax),
290 .name = @tagName(Feature.lfiwax),
291 .llvm_name = "lfiwax",233 .llvm_name = "lfiwax",
292 .description = "Enable the lfiwax instruction",234 .description = "Enable the lfiwax instruction",
293 .dependencies = featureSet(&[_]Feature{235 .dependencies = sparseFeatureSet(&[_]Feature{
294 .fpu,236 .fpu,
295 }),237 }),
296 };238 };
297 result[@enumToInt(Feature.longcall)] = .{239 result[@enumToInt(Feature.longcall)] = .{
298 .index = @enumToInt(Feature.longcall),
299 .name = @tagName(Feature.longcall),
300 .llvm_name = "longcall",240 .llvm_name = "longcall",
301 .description = "Always use indirect calls",241 .description = "Always use indirect calls",
302 .dependencies = featureSet(&[_]Feature{}),242 .dependencies = sparseFeatureSet(&[_]Feature{}),
303 };243 };
304 result[@enumToInt(Feature.mfocrf)] = .{244 result[@enumToInt(Feature.mfocrf)] = .{
305 .index = @enumToInt(Feature.mfocrf),
306 .name = @tagName(Feature.mfocrf),
307 .llvm_name = "mfocrf",245 .llvm_name = "mfocrf",
308 .description = "Enable the MFOCRF instruction",246 .description = "Enable the MFOCRF instruction",
309 .dependencies = featureSet(&[_]Feature{}),247 .dependencies = sparseFeatureSet(&[_]Feature{}),
310 };248 };
311 result[@enumToInt(Feature.msync)] = .{249 result[@enumToInt(Feature.msync)] = .{
312 .index = @enumToInt(Feature.msync),
313 .name = @tagName(Feature.msync),
314 .llvm_name = "msync",250 .llvm_name = "msync",
315 .description = "Has only the msync instruction instead of sync",251 .description = "Has only the msync instruction instead of sync",
316 .dependencies = featureSet(&[_]Feature{252 .dependencies = sparseFeatureSet(&[_]Feature{
317 .booke,253 .booke,
318 }),254 }),
319 };255 };
320 result[@enumToInt(Feature.partword_atomics)] = .{256 result[@enumToInt(Feature.partword_atomics)] = .{
321 .index = @enumToInt(Feature.partword_atomics),
322 .name = @tagName(Feature.partword_atomics),
323 .llvm_name = "partword-atomics",257 .llvm_name = "partword-atomics",
324 .description = "Enable l[bh]arx and st[bh]cx.",258 .description = "Enable l[bh]arx and st[bh]cx.",
325 .dependencies = featureSet(&[_]Feature{}),259 .dependencies = sparseFeatureSet(&[_]Feature{}),
326 };260 };
327 result[@enumToInt(Feature.popcntd)] = .{261 result[@enumToInt(Feature.popcntd)] = .{
328 .index = @enumToInt(Feature.popcntd),
329 .name = @tagName(Feature.popcntd),
330 .llvm_name = "popcntd",262 .llvm_name = "popcntd",
331 .description = "Enable the popcnt[dw] instructions",263 .description = "Enable the popcnt[dw] instructions",
332 .dependencies = featureSet(&[_]Feature{}),264 .dependencies = sparseFeatureSet(&[_]Feature{}),
333 };265 };
334 result[@enumToInt(Feature.power8_altivec)] = .{266 result[@enumToInt(Feature.power8_altivec)] = .{
335 .index = @enumToInt(Feature.power8_altivec),
336 .name = @tagName(Feature.power8_altivec),
337 .llvm_name = "power8-altivec",267 .llvm_name = "power8-altivec",
338 .description = "Enable POWER8 Altivec instructions",268 .description = "Enable POWER8 Altivec instructions",
339 .dependencies = featureSet(&[_]Feature{269 .dependencies = sparseFeatureSet(&[_]Feature{
340 .altivec,270 .altivec,
341 }),271 }),
342 };272 };
343 result[@enumToInt(Feature.power8_vector)] = .{273 result[@enumToInt(Feature.power8_vector)] = .{
344 .index = @enumToInt(Feature.power8_vector),
345 .name = @tagName(Feature.power8_vector),
346 .llvm_name = "power8-vector",274 .llvm_name = "power8-vector",
347 .description = "Enable POWER8 vector instructions",275 .description = "Enable POWER8 vector instructions",
348 .dependencies = featureSet(&[_]Feature{276 .dependencies = sparseFeatureSet(&[_]Feature{
349 .power8_altivec,277 .power8_altivec,
350 .vsx,278 .vsx,
351 }),279 }),
352 };280 };
353 result[@enumToInt(Feature.power9_altivec)] = .{281 result[@enumToInt(Feature.power9_altivec)] = .{
354 .index = @enumToInt(Feature.power9_altivec),
355 .name = @tagName(Feature.power9_altivec),
356 .llvm_name = "power9-altivec",282 .llvm_name = "power9-altivec",
357 .description = "Enable POWER9 Altivec instructions",283 .description = "Enable POWER9 Altivec instructions",
358 .dependencies = featureSet(&[_]Feature{284 .dependencies = sparseFeatureSet(&[_]Feature{
359 .isa_v30_instructions,285 .isa_v30_instructions,
360 .power8_altivec,286 .power8_altivec,
361 }),287 }),
362 };288 };
363 result[@enumToInt(Feature.power9_vector)] = .{289 result[@enumToInt(Feature.power9_vector)] = .{
364 .index = @enumToInt(Feature.power9_vector),
365 .name = @tagName(Feature.power9_vector),
366 .llvm_name = "power9-vector",290 .llvm_name = "power9-vector",
367 .description = "Enable POWER9 vector instructions",291 .description = "Enable POWER9 vector instructions",
368 .dependencies = featureSet(&[_]Feature{292 .dependencies = sparseFeatureSet(&[_]Feature{
369 .isa_v30_instructions,293 .isa_v30_instructions,
370 .power8_vector,294 .power8_vector,
371 .power9_altivec,295 .power9_altivec,
372 }),296 }),
373 };297 };
374 result[@enumToInt(Feature.ppc_postra_sched)] = .{298 result[@enumToInt(Feature.ppc_postra_sched)] = .{
375 .index = @enumToInt(Feature.ppc_postra_sched),
376 .name = @tagName(Feature.ppc_postra_sched),
377 .llvm_name = "ppc-postra-sched",299 .llvm_name = "ppc-postra-sched",
378 .description = "Use PowerPC post-RA scheduling strategy",300 .description = "Use PowerPC post-RA scheduling strategy",
379 .dependencies = featureSet(&[_]Feature{}),301 .dependencies = sparseFeatureSet(&[_]Feature{}),
380 };302 };
381 result[@enumToInt(Feature.ppc_prera_sched)] = .{303 result[@enumToInt(Feature.ppc_prera_sched)] = .{
382 .index = @enumToInt(Feature.ppc_prera_sched),
383 .name = @tagName(Feature.ppc_prera_sched),
384 .llvm_name = "ppc-prera-sched",304 .llvm_name = "ppc-prera-sched",
385 .description = "Use PowerPC pre-RA scheduling strategy",305 .description = "Use PowerPC pre-RA scheduling strategy",
386 .dependencies = featureSet(&[_]Feature{}),306 .dependencies = sparseFeatureSet(&[_]Feature{}),
387 };307 };
388 result[@enumToInt(Feature.ppc4xx)] = .{308 result[@enumToInt(Feature.ppc4xx)] = .{
389 .index = @enumToInt(Feature.ppc4xx),
390 .name = @tagName(Feature.ppc4xx),
391 .llvm_name = "ppc4xx",309 .llvm_name = "ppc4xx",
392 .description = "Enable PPC 4xx instructions",310 .description = "Enable PPC 4xx instructions",
393 .dependencies = featureSet(&[_]Feature{}),311 .dependencies = sparseFeatureSet(&[_]Feature{}),
394 };312 };
395 result[@enumToInt(Feature.ppc6xx)] = .{313 result[@enumToInt(Feature.ppc6xx)] = .{
396 .index = @enumToInt(Feature.ppc6xx),
397 .name = @tagName(Feature.ppc6xx),
398 .llvm_name = "ppc6xx",314 .llvm_name = "ppc6xx",
399 .description = "Enable PPC 6xx instructions",315 .description = "Enable PPC 6xx instructions",
400 .dependencies = featureSet(&[_]Feature{}),316 .dependencies = sparseFeatureSet(&[_]Feature{}),
401 };317 };
402 result[@enumToInt(Feature.qpx)] = .{318 result[@enumToInt(Feature.qpx)] = .{
403 .index = @enumToInt(Feature.qpx),
404 .name = @tagName(Feature.qpx),
405 .llvm_name = "qpx",319 .llvm_name = "qpx",
406 .description = "Enable QPX instructions",320 .description = "Enable QPX instructions",
407 .dependencies = featureSet(&[_]Feature{321 .dependencies = sparseFeatureSet(&[_]Feature{
408 .fpu,322 .fpu,
409 }),323 }),
410 };324 };
411 result[@enumToInt(Feature.recipprec)] = .{325 result[@enumToInt(Feature.recipprec)] = .{
412 .index = @enumToInt(Feature.recipprec),
413 .name = @tagName(Feature.recipprec),
414 .llvm_name = "recipprec",326 .llvm_name = "recipprec",
415 .description = "Assume higher precision reciprocal estimates",327 .description = "Assume higher precision reciprocal estimates",
416 .dependencies = featureSet(&[_]Feature{}),328 .dependencies = sparseFeatureSet(&[_]Feature{}),
417 };329 };
418 result[@enumToInt(Feature.secure_plt)] = .{330 result[@enumToInt(Feature.secure_plt)] = .{
419 .index = @enumToInt(Feature.secure_plt),
420 .name = @tagName(Feature.secure_plt),
421 .llvm_name = "secure-plt",331 .llvm_name = "secure-plt",
422 .description = "Enable secure plt mode",332 .description = "Enable secure plt mode",
423 .dependencies = featureSet(&[_]Feature{}),333 .dependencies = sparseFeatureSet(&[_]Feature{}),
424 };334 };
425 result[@enumToInt(Feature.slow_popcntd)] = .{335 result[@enumToInt(Feature.slow_popcntd)] = .{
426 .index = @enumToInt(Feature.slow_popcntd),
427 .name = @tagName(Feature.slow_popcntd),
428 .llvm_name = "slow-popcntd",336 .llvm_name = "slow-popcntd",
429 .description = "Has slow popcnt[dw] instructions",337 .description = "Has slow popcnt[dw] instructions",
430 .dependencies = featureSet(&[_]Feature{}),338 .dependencies = sparseFeatureSet(&[_]Feature{}),
431 };339 };
432 result[@enumToInt(Feature.spe)] = .{340 result[@enumToInt(Feature.spe)] = .{
433 .index = @enumToInt(Feature.spe),
434 .name = @tagName(Feature.spe),
435 .llvm_name = "spe",341 .llvm_name = "spe",
436 .description = "Enable SPE instructions",342 .description = "Enable SPE instructions",
437 .dependencies = featureSet(&[_]Feature{343 .dependencies = sparseFeatureSet(&[_]Feature{
438 .hard_float,344 .hard_float,
439 }),345 }),
440 };346 };
441 result[@enumToInt(Feature.stfiwx)] = .{347 result[@enumToInt(Feature.stfiwx)] = .{
442 .index = @enumToInt(Feature.stfiwx),
443 .name = @tagName(Feature.stfiwx),
444 .llvm_name = "stfiwx",348 .llvm_name = "stfiwx",
445 .description = "Enable the stfiwx instruction",349 .description = "Enable the stfiwx instruction",
446 .dependencies = featureSet(&[_]Feature{350 .dependencies = sparseFeatureSet(&[_]Feature{
447 .fpu,351 .fpu,
448 }),352 }),
449 };353 };
450 result[@enumToInt(Feature.two_const_nr)] = .{354 result[@enumToInt(Feature.two_const_nr)] = .{
451 .index = @enumToInt(Feature.two_const_nr),
452 .name = @tagName(Feature.two_const_nr),
453 .llvm_name = "two-const-nr",355 .llvm_name = "two-const-nr",
454 .description = "Requires two constant Newton-Raphson computation",356 .description = "Requires two constant Newton-Raphson computation",
455 .dependencies = featureSet(&[_]Feature{}),357 .dependencies = sparseFeatureSet(&[_]Feature{}),
456 };358 };
457 result[@enumToInt(Feature.vectors_use_two_units)] = .{359 result[@enumToInt(Feature.vectors_use_two_units)] = .{
458 .index = @enumToInt(Feature.vectors_use_two_units),
459 .name = @tagName(Feature.vectors_use_two_units),
460 .llvm_name = "vectors-use-two-units",360 .llvm_name = "vectors-use-two-units",
461 .description = "Vectors use two units",361 .description = "Vectors use two units",
462 .dependencies = featureSet(&[_]Feature{}),362 .dependencies = sparseFeatureSet(&[_]Feature{}),
463 };363 };
464 result[@enumToInt(Feature.vsx)] = .{364 result[@enumToInt(Feature.vsx)] = .{
465 .index = @enumToInt(Feature.vsx),
466 .name = @tagName(Feature.vsx),
467 .llvm_name = "vsx",365 .llvm_name = "vsx",
468 .description = "Enable VSX instructions",366 .description = "Enable VSX instructions",
469 .dependencies = featureSet(&[_]Feature{367 .dependencies = sparseFeatureSet(&[_]Feature{
470 .altivec,368 .altivec,
471 }),369 }),
472 };370 };
371 const ti = @typeInfo(Feature);
372 for (result) |*elem, i| {
373 elem.index = i;
374 elem.name = ti.Enum.fields[i].name;
375 elem.dependencies.initAsDependencies(i, &result);
376 }
473 break :blk result;377 break :blk result;
474};378};
475379
...@@ -477,7 +381,7 @@ pub const cpu = struct {...@@ -477,7 +381,7 @@ pub const cpu = struct {
477 pub const @"440" = Cpu{381 pub const @"440" = Cpu{
478 .name = "440",382 .name = "440",
479 .llvm_name = "440",383 .llvm_name = "440",
480 .features = featureSet(&[_]Feature{384 .features = featureSet(&all_features, &[_]Feature{
481 .booke,385 .booke,
482 .fres,386 .fres,
483 .frsqrte,387 .frsqrte,
...@@ -489,7 +393,7 @@ pub const cpu = struct {...@@ -489,7 +393,7 @@ pub const cpu = struct {
489 pub const @"450" = Cpu{393 pub const @"450" = Cpu{
490 .name = "450",394 .name = "450",
491 .llvm_name = "450",395 .llvm_name = "450",
492 .features = featureSet(&[_]Feature{396 .features = featureSet(&all_features, &[_]Feature{
493 .booke,397 .booke,
494 .fres,398 .fres,
495 .frsqrte,399 .frsqrte,
...@@ -501,21 +405,21 @@ pub const cpu = struct {...@@ -501,21 +405,21 @@ pub const cpu = struct {
501 pub const @"601" = Cpu{405 pub const @"601" = Cpu{
502 .name = "601",406 .name = "601",
503 .llvm_name = "601",407 .llvm_name = "601",
504 .features = featureSet(&[_]Feature{408 .features = featureSet(&all_features, &[_]Feature{
505 .fpu,409 .fpu,
506 }),410 }),
507 };411 };
508 pub const @"602" = Cpu{412 pub const @"602" = Cpu{
509 .name = "602",413 .name = "602",
510 .llvm_name = "602",414 .llvm_name = "602",
511 .features = featureSet(&[_]Feature{415 .features = featureSet(&all_features, &[_]Feature{
512 .fpu,416 .fpu,
513 }),417 }),
514 };418 };
515 pub const @"603" = Cpu{419 pub const @"603" = Cpu{
516 .name = "603",420 .name = "603",
517 .llvm_name = "603",421 .llvm_name = "603",
518 .features = featureSet(&[_]Feature{422 .features = featureSet(&all_features, &[_]Feature{
519 .fres,423 .fres,
520 .frsqrte,424 .frsqrte,
521 }),425 }),
...@@ -523,7 +427,7 @@ pub const cpu = struct {...@@ -523,7 +427,7 @@ pub const cpu = struct {
523 pub const @"603e" = Cpu{427 pub const @"603e" = Cpu{
524 .name = "603e",428 .name = "603e",
525 .llvm_name = "603e",429 .llvm_name = "603e",
526 .features = featureSet(&[_]Feature{430 .features = featureSet(&all_features, &[_]Feature{
527 .fres,431 .fres,
528 .frsqrte,432 .frsqrte,
529 }),433 }),
...@@ -531,7 +435,7 @@ pub const cpu = struct {...@@ -531,7 +435,7 @@ pub const cpu = struct {
531 pub const @"603ev" = Cpu{435 pub const @"603ev" = Cpu{
532 .name = "603ev",436 .name = "603ev",
533 .llvm_name = "603ev",437 .llvm_name = "603ev",
534 .features = featureSet(&[_]Feature{438 .features = featureSet(&all_features, &[_]Feature{
535 .fres,439 .fres,
536 .frsqrte,440 .frsqrte,
537 }),441 }),
...@@ -539,7 +443,7 @@ pub const cpu = struct {...@@ -539,7 +443,7 @@ pub const cpu = struct {
539 pub const @"604" = Cpu{443 pub const @"604" = Cpu{
540 .name = "604",444 .name = "604",
541 .llvm_name = "604",445 .llvm_name = "604",
542 .features = featureSet(&[_]Feature{446 .features = featureSet(&all_features, &[_]Feature{
543 .fres,447 .fres,
544 .frsqrte,448 .frsqrte,
545 }),449 }),
...@@ -547,7 +451,7 @@ pub const cpu = struct {...@@ -547,7 +451,7 @@ pub const cpu = struct {
547 pub const @"604e" = Cpu{451 pub const @"604e" = Cpu{
548 .name = "604e",452 .name = "604e",
549 .llvm_name = "604e",453 .llvm_name = "604e",
550 .features = featureSet(&[_]Feature{454 .features = featureSet(&all_features, &[_]Feature{
551 .fres,455 .fres,
552 .frsqrte,456 .frsqrte,
553 }),457 }),
...@@ -555,7 +459,7 @@ pub const cpu = struct {...@@ -555,7 +459,7 @@ pub const cpu = struct {
555 pub const @"620" = Cpu{459 pub const @"620" = Cpu{
556 .name = "620",460 .name = "620",
557 .llvm_name = "620",461 .llvm_name = "620",
558 .features = featureSet(&[_]Feature{462 .features = featureSet(&all_features, &[_]Feature{
559 .fres,463 .fres,
560 .frsqrte,464 .frsqrte,
561 }),465 }),
...@@ -563,7 +467,7 @@ pub const cpu = struct {...@@ -563,7 +467,7 @@ pub const cpu = struct {
563 pub const @"7400" = Cpu{467 pub const @"7400" = Cpu{
564 .name = "7400",468 .name = "7400",
565 .llvm_name = "7400",469 .llvm_name = "7400",
566 .features = featureSet(&[_]Feature{470 .features = featureSet(&all_features, &[_]Feature{
567 .altivec,471 .altivec,
568 .fres,472 .fres,
569 .frsqrte,473 .frsqrte,
...@@ -572,7 +476,7 @@ pub const cpu = struct {...@@ -572,7 +476,7 @@ pub const cpu = struct {
572 pub const @"7450" = Cpu{476 pub const @"7450" = Cpu{
573 .name = "7450",477 .name = "7450",
574 .llvm_name = "7450",478 .llvm_name = "7450",
575 .features = featureSet(&[_]Feature{479 .features = featureSet(&all_features, &[_]Feature{
576 .altivec,480 .altivec,
577 .fres,481 .fres,
578 .frsqrte,482 .frsqrte,
...@@ -581,7 +485,7 @@ pub const cpu = struct {...@@ -581,7 +485,7 @@ pub const cpu = struct {
581 pub const @"750" = Cpu{485 pub const @"750" = Cpu{
582 .name = "750",486 .name = "750",
583 .llvm_name = "750",487 .llvm_name = "750",
584 .features = featureSet(&[_]Feature{488 .features = featureSet(&all_features, &[_]Feature{
585 .fres,489 .fres,
586 .frsqrte,490 .frsqrte,
587 }),491 }),
...@@ -589,7 +493,7 @@ pub const cpu = struct {...@@ -589,7 +493,7 @@ pub const cpu = struct {
589 pub const @"970" = Cpu{493 pub const @"970" = Cpu{
590 .name = "970",494 .name = "970",
591 .llvm_name = "970",495 .llvm_name = "970",
592 .features = featureSet(&[_]Feature{496 .features = featureSet(&all_features, &[_]Feature{
593 .@"64bit",497 .@"64bit",
594 .altivec,498 .altivec,
595 .fres,499 .fres,
...@@ -602,7 +506,7 @@ pub const cpu = struct {...@@ -602,7 +506,7 @@ pub const cpu = struct {
602 pub const a2 = Cpu{506 pub const a2 = Cpu{
603 .name = "a2",507 .name = "a2",
604 .llvm_name = "a2",508 .llvm_name = "a2",
605 .features = featureSet(&[_]Feature{509 .features = featureSet(&all_features, &[_]Feature{
606 .@"64bit",510 .@"64bit",
607 .booke,511 .booke,
608 .cmpb,512 .cmpb,
...@@ -627,7 +531,7 @@ pub const cpu = struct {...@@ -627,7 +531,7 @@ pub const cpu = struct {
627 pub const a2q = Cpu{531 pub const a2q = Cpu{
628 .name = "a2q",532 .name = "a2q",
629 .llvm_name = "a2q",533 .llvm_name = "a2q",
630 .features = featureSet(&[_]Feature{534 .features = featureSet(&all_features, &[_]Feature{
631 .@"64bit",535 .@"64bit",
632 .booke,536 .booke,
633 .cmpb,537 .cmpb,
...@@ -653,7 +557,7 @@ pub const cpu = struct {...@@ -653,7 +557,7 @@ pub const cpu = struct {
653 pub const e500 = Cpu{557 pub const e500 = Cpu{
654 .name = "e500",558 .name = "e500",
655 .llvm_name = "e500",559 .llvm_name = "e500",
656 .features = featureSet(&[_]Feature{560 .features = featureSet(&all_features, &[_]Feature{
657 .booke,561 .booke,
658 .icbt,562 .icbt,
659 .isel,563 .isel,
...@@ -662,7 +566,7 @@ pub const cpu = struct {...@@ -662,7 +566,7 @@ pub const cpu = struct {
662 pub const e500mc = Cpu{566 pub const e500mc = Cpu{
663 .name = "e500mc",567 .name = "e500mc",
664 .llvm_name = "e500mc",568 .llvm_name = "e500mc",
665 .features = featureSet(&[_]Feature{569 .features = featureSet(&all_features, &[_]Feature{
666 .booke,570 .booke,
667 .icbt,571 .icbt,
668 .isel,572 .isel,
...@@ -672,7 +576,7 @@ pub const cpu = struct {...@@ -672,7 +576,7 @@ pub const cpu = struct {
672 pub const e5500 = Cpu{576 pub const e5500 = Cpu{
673 .name = "e5500",577 .name = "e5500",
674 .llvm_name = "e5500",578 .llvm_name = "e5500",
675 .features = featureSet(&[_]Feature{579 .features = featureSet(&all_features, &[_]Feature{
676 .@"64bit",580 .@"64bit",
677 .booke,581 .booke,
678 .icbt,582 .icbt,
...@@ -684,7 +588,7 @@ pub const cpu = struct {...@@ -684,7 +588,7 @@ pub const cpu = struct {
684 pub const g3 = Cpu{588 pub const g3 = Cpu{
685 .name = "g3",589 .name = "g3",
686 .llvm_name = "g3",590 .llvm_name = "g3",
687 .features = featureSet(&[_]Feature{591 .features = featureSet(&all_features, &[_]Feature{
688 .fres,592 .fres,
689 .frsqrte,593 .frsqrte,
690 }),594 }),
...@@ -692,7 +596,7 @@ pub const cpu = struct {...@@ -692,7 +596,7 @@ pub const cpu = struct {
692 pub const g4 = Cpu{596 pub const g4 = Cpu{
693 .name = "g4",597 .name = "g4",
694 .llvm_name = "g4",598 .llvm_name = "g4",
695 .features = featureSet(&[_]Feature{599 .features = featureSet(&all_features, &[_]Feature{
696 .altivec,600 .altivec,
697 .fres,601 .fres,
698 .frsqrte,602 .frsqrte,
...@@ -701,7 +605,7 @@ pub const cpu = struct {...@@ -701,7 +605,7 @@ pub const cpu = struct {
701 pub const @"g4+" = Cpu{605 pub const @"g4+" = Cpu{
702 .name = "g4+",606 .name = "g4+",
703 .llvm_name = "g4+",607 .llvm_name = "g4+",
704 .features = featureSet(&[_]Feature{608 .features = featureSet(&all_features, &[_]Feature{
705 .altivec,609 .altivec,
706 .fres,610 .fres,
707 .frsqrte,611 .frsqrte,
...@@ -710,7 +614,7 @@ pub const cpu = struct {...@@ -710,7 +614,7 @@ pub const cpu = struct {
710 pub const g5 = Cpu{614 pub const g5 = Cpu{
711 .name = "g5",615 .name = "g5",
712 .llvm_name = "g5",616 .llvm_name = "g5",
713 .features = featureSet(&[_]Feature{617 .features = featureSet(&all_features, &[_]Feature{
714 .@"64bit",618 .@"64bit",
715 .altivec,619 .altivec,
716 .fres,620 .fres,
...@@ -723,28 +627,28 @@ pub const cpu = struct {...@@ -723,28 +627,28 @@ pub const cpu = struct {
723 pub const generic = Cpu{627 pub const generic = Cpu{
724 .name = "generic",628 .name = "generic",
725 .llvm_name = "generic",629 .llvm_name = "generic",
726 .features = featureSet(&[_]Feature{630 .features = featureSet(&all_features, &[_]Feature{
727 .hard_float,631 .hard_float,
728 }),632 }),
729 };633 };
730 pub const ppc = Cpu{634 pub const ppc = Cpu{
731 .name = "ppc",635 .name = "ppc",
732 .llvm_name = "ppc",636 .llvm_name = "ppc",
733 .features = featureSet(&[_]Feature{637 .features = featureSet(&all_features, &[_]Feature{
734 .hard_float,638 .hard_float,
735 }),639 }),
736 };640 };
737 pub const ppc32 = Cpu{641 pub const ppc32 = Cpu{
738 .name = "ppc32",642 .name = "ppc32",
739 .llvm_name = "ppc32",643 .llvm_name = "ppc32",
740 .features = featureSet(&[_]Feature{644 .features = featureSet(&all_features, &[_]Feature{
741 .hard_float,645 .hard_float,
742 }),646 }),
743 };647 };
744 pub const ppc64 = Cpu{648 pub const ppc64 = Cpu{
745 .name = "ppc64",649 .name = "ppc64",
746 .llvm_name = "ppc64",650 .llvm_name = "ppc64",
747 .features = featureSet(&[_]Feature{651 .features = featureSet(&all_features, &[_]Feature{
748 .@"64bit",652 .@"64bit",
749 .altivec,653 .altivec,
750 .fres,654 .fres,
...@@ -757,7 +661,7 @@ pub const cpu = struct {...@@ -757,7 +661,7 @@ pub const cpu = struct {
757 pub const ppc64le = Cpu{661 pub const ppc64le = Cpu{
758 .name = "ppc64le",662 .name = "ppc64le",
759 .llvm_name = "ppc64le",663 .llvm_name = "ppc64le",
760 .features = featureSet(&[_]Feature{664 .features = featureSet(&all_features, &[_]Feature{
761 .@"64bit",665 .@"64bit",
762 .altivec,666 .altivec,
763 .bpermd,667 .bpermd,
...@@ -792,7 +696,7 @@ pub const cpu = struct {...@@ -792,7 +696,7 @@ pub const cpu = struct {
792 pub const pwr3 = Cpu{696 pub const pwr3 = Cpu{
793 .name = "pwr3",697 .name = "pwr3",
794 .llvm_name = "pwr3",698 .llvm_name = "pwr3",
795 .features = featureSet(&[_]Feature{699 .features = featureSet(&all_features, &[_]Feature{
796 .@"64bit",700 .@"64bit",
797 .altivec,701 .altivec,
798 .fres,702 .fres,
...@@ -804,7 +708,7 @@ pub const cpu = struct {...@@ -804,7 +708,7 @@ pub const cpu = struct {
804 pub const pwr4 = Cpu{708 pub const pwr4 = Cpu{
805 .name = "pwr4",709 .name = "pwr4",
806 .llvm_name = "pwr4",710 .llvm_name = "pwr4",
807 .features = featureSet(&[_]Feature{711 .features = featureSet(&all_features, &[_]Feature{
808 .@"64bit",712 .@"64bit",
809 .altivec,713 .altivec,
810 .fres,714 .fres,
...@@ -817,7 +721,7 @@ pub const cpu = struct {...@@ -817,7 +721,7 @@ pub const cpu = struct {
817 pub const pwr5 = Cpu{721 pub const pwr5 = Cpu{
818 .name = "pwr5",722 .name = "pwr5",
819 .llvm_name = "pwr5",723 .llvm_name = "pwr5",
820 .features = featureSet(&[_]Feature{724 .features = featureSet(&all_features, &[_]Feature{
821 .@"64bit",725 .@"64bit",
822 .altivec,726 .altivec,
823 .fre,727 .fre,
...@@ -832,7 +736,7 @@ pub const cpu = struct {...@@ -832,7 +736,7 @@ pub const cpu = struct {
832 pub const pwr5x = Cpu{736 pub const pwr5x = Cpu{
833 .name = "pwr5x",737 .name = "pwr5x",
834 .llvm_name = "pwr5x",738 .llvm_name = "pwr5x",
835 .features = featureSet(&[_]Feature{739 .features = featureSet(&all_features, &[_]Feature{
836 .@"64bit",740 .@"64bit",
837 .altivec,741 .altivec,
838 .fprnd,742 .fprnd,
...@@ -848,7 +752,7 @@ pub const cpu = struct {...@@ -848,7 +752,7 @@ pub const cpu = struct {
848 pub const pwr6 = Cpu{752 pub const pwr6 = Cpu{
849 .name = "pwr6",753 .name = "pwr6",
850 .llvm_name = "pwr6",754 .llvm_name = "pwr6",
851 .features = featureSet(&[_]Feature{755 .features = featureSet(&all_features, &[_]Feature{
852 .@"64bit",756 .@"64bit",
853 .altivec,757 .altivec,
854 .cmpb,758 .cmpb,
...@@ -868,7 +772,7 @@ pub const cpu = struct {...@@ -868,7 +772,7 @@ pub const cpu = struct {
868 pub const pwr6x = Cpu{772 pub const pwr6x = Cpu{
869 .name = "pwr6x",773 .name = "pwr6x",
870 .llvm_name = "pwr6x",774 .llvm_name = "pwr6x",
871 .features = featureSet(&[_]Feature{775 .features = featureSet(&all_features, &[_]Feature{
872 .@"64bit",776 .@"64bit",
873 .altivec,777 .altivec,
874 .cmpb,778 .cmpb,
...@@ -888,7 +792,7 @@ pub const cpu = struct {...@@ -888,7 +792,7 @@ pub const cpu = struct {
888 pub const pwr7 = Cpu{792 pub const pwr7 = Cpu{
889 .name = "pwr7",793 .name = "pwr7",
890 .llvm_name = "pwr7",794 .llvm_name = "pwr7",
891 .features = featureSet(&[_]Feature{795 .features = featureSet(&all_features, &[_]Feature{
892 .@"64bit",796 .@"64bit",
893 .altivec,797 .altivec,
894 .bpermd,798 .bpermd,
...@@ -916,7 +820,7 @@ pub const cpu = struct {...@@ -916,7 +820,7 @@ pub const cpu = struct {
916 pub const pwr8 = Cpu{820 pub const pwr8 = Cpu{
917 .name = "pwr8",821 .name = "pwr8",
918 .llvm_name = "pwr8",822 .llvm_name = "pwr8",
919 .features = featureSet(&[_]Feature{823 .features = featureSet(&all_features, &[_]Feature{
920 .@"64bit",824 .@"64bit",
921 .altivec,825 .altivec,
922 .bpermd,826 .bpermd,
...@@ -951,7 +855,7 @@ pub const cpu = struct {...@@ -951,7 +855,7 @@ pub const cpu = struct {
951 pub const pwr9 = Cpu{855 pub const pwr9 = Cpu{
952 .name = "pwr9",856 .name = "pwr9",
953 .llvm_name = "pwr9",857 .llvm_name = "pwr9",
954 .features = featureSet(&[_]Feature{858 .features = featureSet(&all_features, &[_]Feature{
955 .@"64bit",859 .@"64bit",
956 .altivec,860 .altivec,
957 .bpermd,861 .bpermd,
lib/std/target/riscv.zig+19-29
...@@ -16,66 +16,56 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -16,66 +16,56 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
1616
17pub const all_features = blk: {17pub const all_features = blk: {
18 const len = @typeInfo(Feature).Enum.fields.len;18 const len = @typeInfo(Feature).Enum.fields.len;
19 std.debug.assert(len <= Cpu.Feature.Set.bit_count);19 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
20 var result: [len]Cpu.Feature = undefined;20 var result: [len]Cpu.Feature = undefined;
21 result[@enumToInt(Feature.@"64bit")] = .{21 result[@enumToInt(Feature.@"64bit")] = .{
22 .index = @enumToInt(Feature.@"64bit"),
23 .name = @tagName(Feature.@"64bit"),
24 .llvm_name = "64bit",22 .llvm_name = "64bit",
25 .description = "Implements RV64",23 .description = "Implements RV64",
26 .dependencies = featureSet(&[_]Feature{}),24 .dependencies = sparseFeatureSet(&[_]Feature{}),
27 };25 };
28 result[@enumToInt(Feature.a)] = .{26 result[@enumToInt(Feature.a)] = .{
29 .index = @enumToInt(Feature.a),
30 .name = @tagName(Feature.a),
31 .llvm_name = "a",27 .llvm_name = "a",
32 .description = "'A' (Atomic Instructions)",28 .description = "'A' (Atomic Instructions)",
33 .dependencies = featureSet(&[_]Feature{}),29 .dependencies = sparseFeatureSet(&[_]Feature{}),
34 };30 };
35 result[@enumToInt(Feature.c)] = .{31 result[@enumToInt(Feature.c)] = .{
36 .index = @enumToInt(Feature.c),
37 .name = @tagName(Feature.c),
38 .llvm_name = "c",32 .llvm_name = "c",
39 .description = "'C' (Compressed Instructions)",33 .description = "'C' (Compressed Instructions)",
40 .dependencies = featureSet(&[_]Feature{}),34 .dependencies = sparseFeatureSet(&[_]Feature{}),
41 };35 };
42 result[@enumToInt(Feature.d)] = .{36 result[@enumToInt(Feature.d)] = .{
43 .index = @enumToInt(Feature.d),
44 .name = @tagName(Feature.d),
45 .llvm_name = "d",37 .llvm_name = "d",
46 .description = "'D' (Double-Precision Floating-Point)",38 .description = "'D' (Double-Precision Floating-Point)",
47 .dependencies = featureSet(&[_]Feature{39 .dependencies = sparseFeatureSet(&[_]Feature{
48 .f,40 .f,
49 }),41 }),
50 };42 };
51 result[@enumToInt(Feature.e)] = .{43 result[@enumToInt(Feature.e)] = .{
52 .index = @enumToInt(Feature.e),
53 .name = @tagName(Feature.e),
54 .llvm_name = "e",44 .llvm_name = "e",
55 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",45 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
56 .dependencies = featureSet(&[_]Feature{}),46 .dependencies = sparseFeatureSet(&[_]Feature{}),
57 };47 };
58 result[@enumToInt(Feature.f)] = .{48 result[@enumToInt(Feature.f)] = .{
59 .index = @enumToInt(Feature.f),
60 .name = @tagName(Feature.f),
61 .llvm_name = "f",49 .llvm_name = "f",
62 .description = "'F' (Single-Precision Floating-Point)",50 .description = "'F' (Single-Precision Floating-Point)",
63 .dependencies = featureSet(&[_]Feature{}),51 .dependencies = sparseFeatureSet(&[_]Feature{}),
64 };52 };
65 result[@enumToInt(Feature.m)] = .{53 result[@enumToInt(Feature.m)] = .{
66 .index = @enumToInt(Feature.m),
67 .name = @tagName(Feature.m),
68 .llvm_name = "m",54 .llvm_name = "m",
69 .description = "'M' (Integer Multiplication and Division)",55 .description = "'M' (Integer Multiplication and Division)",
70 .dependencies = featureSet(&[_]Feature{}),56 .dependencies = sparseFeatureSet(&[_]Feature{}),
71 };57 };
72 result[@enumToInt(Feature.relax)] = .{58 result[@enumToInt(Feature.relax)] = .{
73 .index = @enumToInt(Feature.relax),
74 .name = @tagName(Feature.relax),
75 .llvm_name = "relax",59 .llvm_name = "relax",
76 .description = "Enable Linker relaxation.",60 .description = "Enable Linker relaxation.",
77 .dependencies = featureSet(&[_]Feature{}),61 .dependencies = sparseFeatureSet(&[_]Feature{}),
78 };62 };
63 const ti = @typeInfo(Feature);
64 for (result) |*elem, i| {
65 elem.index = i;
66 elem.name = ti.Enum.fields[i].name;
67 elem.dependencies.initAsDependencies(i, &result);
68 }
79 break :blk result;69 break :blk result;
80};70};
8171
...@@ -83,12 +73,12 @@ pub const cpu = struct {...@@ -83,12 +73,12 @@ pub const cpu = struct {
83 pub const generic_rv32 = Cpu{73 pub const generic_rv32 = Cpu{
84 .name = "generic_rv32",74 .name = "generic_rv32",
85 .llvm_name = "generic-rv32",75 .llvm_name = "generic-rv32",
86 .features = featureSet(&[_]Feature{}),76 .features = featureSet(&all_features, &[_]Feature{}),
87 };77 };
88 pub const generic_rv64 = Cpu{78 pub const generic_rv64 = Cpu{
89 .name = "generic_rv64",79 .name = "generic_rv64",
90 .llvm_name = "generic-rv64",80 .llvm_name = "generic-rv64",
91 .features = featureSet(&[_]Feature{81 .features = featureSet(&all_features, &[_]Feature{
92 .@"64bit",82 .@"64bit",
93 }),83 }),
94 };84 };
...@@ -102,7 +92,7 @@ pub const all_cpus = &[_]*const Cpu{...@@ -102,7 +92,7 @@ pub const all_cpus = &[_]*const Cpu{
102 &cpu.generic_rv64,92 &cpu.generic_rv64,
103};93};
10494
105pub const baseline_32_features = featureSet(&[_]Feature{95pub const baseline_32_features = featureSet(&all_features, &[_]Feature{
106 .a,96 .a,
107 .c,97 .c,
108 .d,98 .d,
...@@ -111,7 +101,7 @@ pub const baseline_32_features = featureSet(&[_]Feature{...@@ -111,7 +101,7 @@ pub const baseline_32_features = featureSet(&[_]Feature{
111 .relax,101 .relax,
112});102});
113103
114pub const baseline_64_features = featureSet(&[_]Feature{104pub const baseline_64_features = featureSet(&all_features, &[_]Feature{
115 .@"64bit",105 .@"64bit",
116 .a,106 .a,
117 .c,107 .c,
lib/std/target/sparc.zig+67-99
...@@ -27,141 +27,109 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -27,141 +27,109 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
2727
28pub const all_features = blk: {28pub const all_features = blk: {
29 const len = @typeInfo(Feature).Enum.fields.len;29 const len = @typeInfo(Feature).Enum.fields.len;
30 std.debug.assert(len <= Cpu.Feature.Set.bit_count);30 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
31 var result: [len]Cpu.Feature = undefined;31 var result: [len]Cpu.Feature = undefined;
32 result[@enumToInt(Feature.deprecated_v8)] = .{32 result[@enumToInt(Feature.deprecated_v8)] = .{
33 .index = @enumToInt(Feature.deprecated_v8),
34 .name = @tagName(Feature.deprecated_v8),
35 .llvm_name = "deprecated-v8",33 .llvm_name = "deprecated-v8",
36 .description = "Enable deprecated V8 instructions in V9 mode",34 .description = "Enable deprecated V8 instructions in V9 mode",
37 .dependencies = featureSet(&[_]Feature{}),35 .dependencies = sparseFeatureSet(&[_]Feature{}),
38 };36 };
39 result[@enumToInt(Feature.detectroundchange)] = .{37 result[@enumToInt(Feature.detectroundchange)] = .{
40 .index = @enumToInt(Feature.detectroundchange),
41 .name = @tagName(Feature.detectroundchange),
42 .llvm_name = "detectroundchange",38 .llvm_name = "detectroundchange",
43 .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",
44 .dependencies = featureSet(&[_]Feature{}),40 .dependencies = sparseFeatureSet(&[_]Feature{}),
45 };41 };
46 result[@enumToInt(Feature.fixallfdivsqrt)] = .{42 result[@enumToInt(Feature.fixallfdivsqrt)] = .{
47 .index = @enumToInt(Feature.fixallfdivsqrt),
48 .name = @tagName(Feature.fixallfdivsqrt),
49 .llvm_name = "fixallfdivsqrt",43 .llvm_name = "fixallfdivsqrt",
50 .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",
51 .dependencies = featureSet(&[_]Feature{}),45 .dependencies = sparseFeatureSet(&[_]Feature{}),
52 };46 };
53 result[@enumToInt(Feature.hard_quad_float)] = .{47 result[@enumToInt(Feature.hard_quad_float)] = .{
54 .index = @enumToInt(Feature.hard_quad_float),
55 .name = @tagName(Feature.hard_quad_float),
56 .llvm_name = "hard-quad-float",48 .llvm_name = "hard-quad-float",
57 .description = "Enable quad-word floating point instructions",49 .description = "Enable quad-word floating point instructions",
58 .dependencies = featureSet(&[_]Feature{}),50 .dependencies = sparseFeatureSet(&[_]Feature{}),
59 };51 };
60 result[@enumToInt(Feature.hasleoncasa)] = .{52 result[@enumToInt(Feature.hasleoncasa)] = .{
61 .index = @enumToInt(Feature.hasleoncasa),
62 .name = @tagName(Feature.hasleoncasa),
63 .llvm_name = "hasleoncasa",53 .llvm_name = "hasleoncasa",
64 .description = "Enable CASA instruction for LEON3 and LEON4 processors",54 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
65 .dependencies = featureSet(&[_]Feature{}),55 .dependencies = sparseFeatureSet(&[_]Feature{}),
66 };56 };
67 result[@enumToInt(Feature.hasumacsmac)] = .{57 result[@enumToInt(Feature.hasumacsmac)] = .{
68 .index = @enumToInt(Feature.hasumacsmac),
69 .name = @tagName(Feature.hasumacsmac),
70 .llvm_name = "hasumacsmac",58 .llvm_name = "hasumacsmac",
71 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",59 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
72 .dependencies = featureSet(&[_]Feature{}),60 .dependencies = sparseFeatureSet(&[_]Feature{}),
73 };61 };
74 result[@enumToInt(Feature.insertnopload)] = .{62 result[@enumToInt(Feature.insertnopload)] = .{
75 .index = @enumToInt(Feature.insertnopload),
76 .name = @tagName(Feature.insertnopload),
77 .llvm_name = "insertnopload",63 .llvm_name = "insertnopload",
78 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",64 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",
79 .dependencies = featureSet(&[_]Feature{}),65 .dependencies = sparseFeatureSet(&[_]Feature{}),
80 };66 };
81 result[@enumToInt(Feature.leon)] = .{67 result[@enumToInt(Feature.leon)] = .{
82 .index = @enumToInt(Feature.leon),
83 .name = @tagName(Feature.leon),
84 .llvm_name = "leon",68 .llvm_name = "leon",
85 .description = "Enable LEON extensions",69 .description = "Enable LEON extensions",
86 .dependencies = featureSet(&[_]Feature{}),70 .dependencies = sparseFeatureSet(&[_]Feature{}),
87 };71 };
88 result[@enumToInt(Feature.leoncyclecounter)] = .{72 result[@enumToInt(Feature.leoncyclecounter)] = .{
89 .index = @enumToInt(Feature.leoncyclecounter),
90 .name = @tagName(Feature.leoncyclecounter),
91 .llvm_name = "leoncyclecounter",73 .llvm_name = "leoncyclecounter",
92 .description = "Use the Leon cycle counter register",74 .description = "Use the Leon cycle counter register",
93 .dependencies = featureSet(&[_]Feature{}),75 .dependencies = sparseFeatureSet(&[_]Feature{}),
94 };76 };
95 result[@enumToInt(Feature.leonpwrpsr)] = .{77 result[@enumToInt(Feature.leonpwrpsr)] = .{
96 .index = @enumToInt(Feature.leonpwrpsr),
97 .name = @tagName(Feature.leonpwrpsr),
98 .llvm_name = "leonpwrpsr",78 .llvm_name = "leonpwrpsr",
99 .description = "Enable the PWRPSR instruction",79 .description = "Enable the PWRPSR instruction",
100 .dependencies = featureSet(&[_]Feature{}),80 .dependencies = sparseFeatureSet(&[_]Feature{}),
101 };81 };
102 result[@enumToInt(Feature.no_fmuls)] = .{82 result[@enumToInt(Feature.no_fmuls)] = .{
103 .index = @enumToInt(Feature.no_fmuls),
104 .name = @tagName(Feature.no_fmuls),
105 .llvm_name = "no-fmuls",83 .llvm_name = "no-fmuls",
106 .description = "Disable the fmuls instruction.",84 .description = "Disable the fmuls instruction.",
107 .dependencies = featureSet(&[_]Feature{}),85 .dependencies = sparseFeatureSet(&[_]Feature{}),
108 };86 };
109 result[@enumToInt(Feature.no_fsmuld)] = .{87 result[@enumToInt(Feature.no_fsmuld)] = .{
110 .index = @enumToInt(Feature.no_fsmuld),
111 .name = @tagName(Feature.no_fsmuld),
112 .llvm_name = "no-fsmuld",88 .llvm_name = "no-fsmuld",
113 .description = "Disable the fsmuld instruction.",89 .description = "Disable the fsmuld instruction.",
114 .dependencies = featureSet(&[_]Feature{}),90 .dependencies = sparseFeatureSet(&[_]Feature{}),
115 };91 };
116 result[@enumToInt(Feature.popc)] = .{92 result[@enumToInt(Feature.popc)] = .{
117 .index = @enumToInt(Feature.popc),
118 .name = @tagName(Feature.popc),
119 .llvm_name = "popc",93 .llvm_name = "popc",
120 .description = "Use the popc (population count) instruction",94 .description = "Use the popc (population count) instruction",
121 .dependencies = featureSet(&[_]Feature{}),95 .dependencies = sparseFeatureSet(&[_]Feature{}),
122 };96 };
123 result[@enumToInt(Feature.soft_float)] = .{97 result[@enumToInt(Feature.soft_float)] = .{
124 .index = @enumToInt(Feature.soft_float),
125 .name = @tagName(Feature.soft_float),
126 .llvm_name = "soft-float",98 .llvm_name = "soft-float",
127 .description = "Use software emulation for floating point",99 .description = "Use software emulation for floating point",
128 .dependencies = featureSet(&[_]Feature{}),100 .dependencies = sparseFeatureSet(&[_]Feature{}),
129 };101 };
130 result[@enumToInt(Feature.soft_mul_div)] = .{102 result[@enumToInt(Feature.soft_mul_div)] = .{
131 .index = @enumToInt(Feature.soft_mul_div),
132 .name = @tagName(Feature.soft_mul_div),
133 .llvm_name = "soft-mul-div",103 .llvm_name = "soft-mul-div",
134 .description = "Use software emulation for integer multiply and divide",104 .description = "Use software emulation for integer multiply and divide",
135 .dependencies = featureSet(&[_]Feature{}),105 .dependencies = sparseFeatureSet(&[_]Feature{}),
136 };106 };
137 result[@enumToInt(Feature.v9)] = .{107 result[@enumToInt(Feature.v9)] = .{
138 .index = @enumToInt(Feature.v9),
139 .name = @tagName(Feature.v9),
140 .llvm_name = "v9",108 .llvm_name = "v9",
141 .description = "Enable SPARC-V9 instructions",109 .description = "Enable SPARC-V9 instructions",
142 .dependencies = featureSet(&[_]Feature{}),110 .dependencies = sparseFeatureSet(&[_]Feature{}),
143 };111 };
144 result[@enumToInt(Feature.vis)] = .{112 result[@enumToInt(Feature.vis)] = .{
145 .index = @enumToInt(Feature.vis),
146 .name = @tagName(Feature.vis),
147 .llvm_name = "vis",113 .llvm_name = "vis",
148 .description = "Enable UltraSPARC Visual Instruction Set extensions",114 .description = "Enable UltraSPARC Visual Instruction Set extensions",
149 .dependencies = featureSet(&[_]Feature{}),115 .dependencies = sparseFeatureSet(&[_]Feature{}),
150 };116 };
151 result[@enumToInt(Feature.vis2)] = .{117 result[@enumToInt(Feature.vis2)] = .{
152 .index = @enumToInt(Feature.vis2),
153 .name = @tagName(Feature.vis2),
154 .llvm_name = "vis2",118 .llvm_name = "vis2",
155 .description = "Enable Visual Instruction Set extensions II",119 .description = "Enable Visual Instruction Set extensions II",
156 .dependencies = featureSet(&[_]Feature{}),120 .dependencies = sparseFeatureSet(&[_]Feature{}),
157 };121 };
158 result[@enumToInt(Feature.vis3)] = .{122 result[@enumToInt(Feature.vis3)] = .{
159 .index = @enumToInt(Feature.vis3),
160 .name = @tagName(Feature.vis3),
161 .llvm_name = "vis3",123 .llvm_name = "vis3",
162 .description = "Enable Visual Instruction Set extensions III",124 .description = "Enable Visual Instruction Set extensions III",
163 .dependencies = featureSet(&[_]Feature{}),125 .dependencies = sparseFeatureSet(&[_]Feature{}),
164 };126 };
127 const ti = @typeInfo(Feature);
128 for (result) |*elem, i| {
129 elem.index = i;
130 elem.name = ti.Enum.fields[i].name;
131 elem.dependencies.initAsDependencies(i, &result);
132 }
165 break :blk result;133 break :blk result;
166};134};
167135
...@@ -169,7 +137,7 @@ pub const cpu = struct {...@@ -169,7 +137,7 @@ pub const cpu = struct {
169 pub const at697e = Cpu{137 pub const at697e = Cpu{
170 .name = "at697e",138 .name = "at697e",
171 .llvm_name = "at697e",139 .llvm_name = "at697e",
172 .features = featureSet(&[_]Feature{140 .features = featureSet(&all_features, &[_]Feature{
173 .insertnopload,141 .insertnopload,
174 .leon,142 .leon,
175 }),143 }),
...@@ -177,7 +145,7 @@ pub const cpu = struct {...@@ -177,7 +145,7 @@ pub const cpu = struct {
177 pub const at697f = Cpu{145 pub const at697f = Cpu{
178 .name = "at697f",146 .name = "at697f",
179 .llvm_name = "at697f",147 .llvm_name = "at697f",
180 .features = featureSet(&[_]Feature{148 .features = featureSet(&all_features, &[_]Feature{
181 .insertnopload,149 .insertnopload,
182 .leon,150 .leon,
183 }),151 }),
...@@ -185,17 +153,17 @@ pub const cpu = struct {...@@ -185,17 +153,17 @@ pub const cpu = struct {
185 pub const f934 = Cpu{153 pub const f934 = Cpu{
186 .name = "f934",154 .name = "f934",
187 .llvm_name = "f934",155 .llvm_name = "f934",
188 .features = featureSet(&[_]Feature{}),156 .features = featureSet(&all_features, &[_]Feature{}),
189 };157 };
190 pub const generic = Cpu{158 pub const generic = Cpu{
191 .name = "generic",159 .name = "generic",
192 .llvm_name = "generic",160 .llvm_name = "generic",
193 .features = featureSet(&[_]Feature{}),161 .features = featureSet(&all_features, &[_]Feature{}),
194 };162 };
195 pub const gr712rc = Cpu{163 pub const gr712rc = Cpu{
196 .name = "gr712rc",164 .name = "gr712rc",
197 .llvm_name = "gr712rc",165 .llvm_name = "gr712rc",
198 .features = featureSet(&[_]Feature{166 .features = featureSet(&all_features, &[_]Feature{
199 .hasleoncasa,167 .hasleoncasa,
200 .leon,168 .leon,
201 }),169 }),
...@@ -203,7 +171,7 @@ pub const cpu = struct {...@@ -203,7 +171,7 @@ pub const cpu = struct {
203 pub const gr740 = Cpu{171 pub const gr740 = Cpu{
204 .name = "gr740",172 .name = "gr740",
205 .llvm_name = "gr740",173 .llvm_name = "gr740",
206 .features = featureSet(&[_]Feature{174 .features = featureSet(&all_features, &[_]Feature{
207 .hasleoncasa,175 .hasleoncasa,
208 .hasumacsmac,176 .hasumacsmac,
209 .leon,177 .leon,
...@@ -214,19 +182,19 @@ pub const cpu = struct {...@@ -214,19 +182,19 @@ pub const cpu = struct {
214 pub const hypersparc = Cpu{182 pub const hypersparc = Cpu{
215 .name = "hypersparc",183 .name = "hypersparc",
216 .llvm_name = "hypersparc",184 .llvm_name = "hypersparc",
217 .features = featureSet(&[_]Feature{}),185 .features = featureSet(&all_features, &[_]Feature{}),
218 };186 };
219 pub const leon2 = Cpu{187 pub const leon2 = Cpu{
220 .name = "leon2",188 .name = "leon2",
221 .llvm_name = "leon2",189 .llvm_name = "leon2",
222 .features = featureSet(&[_]Feature{190 .features = featureSet(&all_features, &[_]Feature{
223 .leon,191 .leon,
224 }),192 }),
225 };193 };
226 pub const leon3 = Cpu{194 pub const leon3 = Cpu{
227 .name = "leon3",195 .name = "leon3",
228 .llvm_name = "leon3",196 .llvm_name = "leon3",
229 .features = featureSet(&[_]Feature{197 .features = featureSet(&all_features, &[_]Feature{
230 .hasumacsmac,198 .hasumacsmac,
231 .leon,199 .leon,
232 }),200 }),
...@@ -234,7 +202,7 @@ pub const cpu = struct {...@@ -234,7 +202,7 @@ pub const cpu = struct {
234 pub const leon4 = Cpu{202 pub const leon4 = Cpu{
235 .name = "leon4",203 .name = "leon4",
236 .llvm_name = "leon4",204 .llvm_name = "leon4",
237 .features = featureSet(&[_]Feature{205 .features = featureSet(&all_features, &[_]Feature{
238 .hasleoncasa,206 .hasleoncasa,
239 .hasumacsmac,207 .hasumacsmac,
240 .leon,208 .leon,
...@@ -243,7 +211,7 @@ pub const cpu = struct {...@@ -243,7 +211,7 @@ pub const cpu = struct {
243 pub const ma2080 = Cpu{211 pub const ma2080 = Cpu{
244 .name = "ma2080",212 .name = "ma2080",
245 .llvm_name = "ma2080",213 .llvm_name = "ma2080",
246 .features = featureSet(&[_]Feature{214 .features = featureSet(&all_features, &[_]Feature{
247 .hasleoncasa,215 .hasleoncasa,
248 .leon,216 .leon,
249 }),217 }),
...@@ -251,7 +219,7 @@ pub const cpu = struct {...@@ -251,7 +219,7 @@ pub const cpu = struct {
251 pub const ma2085 = Cpu{219 pub const ma2085 = Cpu{
252 .name = "ma2085",220 .name = "ma2085",
253 .llvm_name = "ma2085",221 .llvm_name = "ma2085",
254 .features = featureSet(&[_]Feature{222 .features = featureSet(&all_features, &[_]Feature{
255 .hasleoncasa,223 .hasleoncasa,
256 .leon,224 .leon,
257 }),225 }),
...@@ -259,7 +227,7 @@ pub const cpu = struct {...@@ -259,7 +227,7 @@ pub const cpu = struct {
259 pub const ma2100 = Cpu{227 pub const ma2100 = Cpu{
260 .name = "ma2100",228 .name = "ma2100",
261 .llvm_name = "ma2100",229 .llvm_name = "ma2100",
262 .features = featureSet(&[_]Feature{230 .features = featureSet(&all_features, &[_]Feature{
263 .hasleoncasa,231 .hasleoncasa,
264 .leon,232 .leon,
265 }),233 }),
...@@ -267,7 +235,7 @@ pub const cpu = struct {...@@ -267,7 +235,7 @@ pub const cpu = struct {
267 pub const ma2150 = Cpu{235 pub const ma2150 = Cpu{
268 .name = "ma2150",236 .name = "ma2150",
269 .llvm_name = "ma2150",237 .llvm_name = "ma2150",
270 .features = featureSet(&[_]Feature{238 .features = featureSet(&all_features, &[_]Feature{
271 .hasleoncasa,239 .hasleoncasa,
272 .leon,240 .leon,
273 }),241 }),
...@@ -275,7 +243,7 @@ pub const cpu = struct {...@@ -275,7 +243,7 @@ pub const cpu = struct {
275 pub const ma2155 = Cpu{243 pub const ma2155 = Cpu{
276 .name = "ma2155",244 .name = "ma2155",
277 .llvm_name = "ma2155",245 .llvm_name = "ma2155",
278 .features = featureSet(&[_]Feature{246 .features = featureSet(&all_features, &[_]Feature{
279 .hasleoncasa,247 .hasleoncasa,
280 .leon,248 .leon,
281 }),249 }),
...@@ -283,7 +251,7 @@ pub const cpu = struct {...@@ -283,7 +251,7 @@ pub const cpu = struct {
283 pub const ma2450 = Cpu{251 pub const ma2450 = Cpu{
284 .name = "ma2450",252 .name = "ma2450",
285 .llvm_name = "ma2450",253 .llvm_name = "ma2450",
286 .features = featureSet(&[_]Feature{254 .features = featureSet(&all_features, &[_]Feature{
287 .hasleoncasa,255 .hasleoncasa,
288 .leon,256 .leon,
289 }),257 }),
...@@ -291,7 +259,7 @@ pub const cpu = struct {...@@ -291,7 +259,7 @@ pub const cpu = struct {
291 pub const ma2455 = Cpu{259 pub const ma2455 = Cpu{
292 .name = "ma2455",260 .name = "ma2455",
293 .llvm_name = "ma2455",261 .llvm_name = "ma2455",
294 .features = featureSet(&[_]Feature{262 .features = featureSet(&all_features, &[_]Feature{
295 .hasleoncasa,263 .hasleoncasa,
296 .leon,264 .leon,
297 }),265 }),
...@@ -299,7 +267,7 @@ pub const cpu = struct {...@@ -299,7 +267,7 @@ pub const cpu = struct {
299 pub const ma2480 = Cpu{267 pub const ma2480 = Cpu{
300 .name = "ma2480",268 .name = "ma2480",
301 .llvm_name = "ma2480",269 .llvm_name = "ma2480",
302 .features = featureSet(&[_]Feature{270 .features = featureSet(&all_features, &[_]Feature{
303 .hasleoncasa,271 .hasleoncasa,
304 .leon,272 .leon,
305 }),273 }),
...@@ -307,7 +275,7 @@ pub const cpu = struct {...@@ -307,7 +275,7 @@ pub const cpu = struct {
307 pub const ma2485 = Cpu{275 pub const ma2485 = Cpu{
308 .name = "ma2485",276 .name = "ma2485",
309 .llvm_name = "ma2485",277 .llvm_name = "ma2485",
310 .features = featureSet(&[_]Feature{278 .features = featureSet(&all_features, &[_]Feature{
311 .hasleoncasa,279 .hasleoncasa,
312 .leon,280 .leon,
313 }),281 }),
...@@ -315,7 +283,7 @@ pub const cpu = struct {...@@ -315,7 +283,7 @@ pub const cpu = struct {
315 pub const ma2x5x = Cpu{283 pub const ma2x5x = Cpu{
316 .name = "ma2x5x",284 .name = "ma2x5x",
317 .llvm_name = "ma2x5x",285 .llvm_name = "ma2x5x",
318 .features = featureSet(&[_]Feature{286 .features = featureSet(&all_features, &[_]Feature{
319 .hasleoncasa,287 .hasleoncasa,
320 .leon,288 .leon,
321 }),289 }),
...@@ -323,7 +291,7 @@ pub const cpu = struct {...@@ -323,7 +291,7 @@ pub const cpu = struct {
323 pub const ma2x8x = Cpu{291 pub const ma2x8x = Cpu{
324 .name = "ma2x8x",292 .name = "ma2x8x",
325 .llvm_name = "ma2x8x",293 .llvm_name = "ma2x8x",
326 .features = featureSet(&[_]Feature{294 .features = featureSet(&all_features, &[_]Feature{
327 .hasleoncasa,295 .hasleoncasa,
328 .leon,296 .leon,
329 }),297 }),
...@@ -331,7 +299,7 @@ pub const cpu = struct {...@@ -331,7 +299,7 @@ pub const cpu = struct {
331 pub const myriad2 = Cpu{299 pub const myriad2 = Cpu{
332 .name = "myriad2",300 .name = "myriad2",
333 .llvm_name = "myriad2",301 .llvm_name = "myriad2",
334 .features = featureSet(&[_]Feature{302 .features = featureSet(&all_features, &[_]Feature{
335 .hasleoncasa,303 .hasleoncasa,
336 .leon,304 .leon,
337 }),305 }),
...@@ -339,7 +307,7 @@ pub const cpu = struct {...@@ -339,7 +307,7 @@ pub const cpu = struct {
339 pub const myriad2_1 = Cpu{307 pub const myriad2_1 = Cpu{
340 .name = "myriad2_1",308 .name = "myriad2_1",
341 .llvm_name = "myriad2.1",309 .llvm_name = "myriad2.1",
342 .features = featureSet(&[_]Feature{310 .features = featureSet(&all_features, &[_]Feature{
343 .hasleoncasa,311 .hasleoncasa,
344 .leon,312 .leon,
345 }),313 }),
...@@ -347,7 +315,7 @@ pub const cpu = struct {...@@ -347,7 +315,7 @@ pub const cpu = struct {
347 pub const myriad2_2 = Cpu{315 pub const myriad2_2 = Cpu{
348 .name = "myriad2_2",316 .name = "myriad2_2",
349 .llvm_name = "myriad2.2",317 .llvm_name = "myriad2.2",
350 .features = featureSet(&[_]Feature{318 .features = featureSet(&all_features, &[_]Feature{
351 .hasleoncasa,319 .hasleoncasa,
352 .leon,320 .leon,
353 }),321 }),
...@@ -355,7 +323,7 @@ pub const cpu = struct {...@@ -355,7 +323,7 @@ pub const cpu = struct {
355 pub const myriad2_3 = Cpu{323 pub const myriad2_3 = Cpu{
356 .name = "myriad2_3",324 .name = "myriad2_3",
357 .llvm_name = "myriad2.3",325 .llvm_name = "myriad2.3",
358 .features = featureSet(&[_]Feature{326 .features = featureSet(&all_features, &[_]Feature{
359 .hasleoncasa,327 .hasleoncasa,
360 .leon,328 .leon,
361 }),329 }),
...@@ -363,7 +331,7 @@ pub const cpu = struct {...@@ -363,7 +331,7 @@ pub const cpu = struct {
363 pub const niagara = Cpu{331 pub const niagara = Cpu{
364 .name = "niagara",332 .name = "niagara",
365 .llvm_name = "niagara",333 .llvm_name = "niagara",
366 .features = featureSet(&[_]Feature{334 .features = featureSet(&all_features, &[_]Feature{
367 .deprecated_v8,335 .deprecated_v8,
368 .v9,336 .v9,
369 .vis,337 .vis,
...@@ -373,7 +341,7 @@ pub const cpu = struct {...@@ -373,7 +341,7 @@ pub const cpu = struct {
373 pub const niagara2 = Cpu{341 pub const niagara2 = Cpu{
374 .name = "niagara2",342 .name = "niagara2",
375 .llvm_name = "niagara2",343 .llvm_name = "niagara2",
376 .features = featureSet(&[_]Feature{344 .features = featureSet(&all_features, &[_]Feature{
377 .deprecated_v8,345 .deprecated_v8,
378 .popc,346 .popc,
379 .v9,347 .v9,
...@@ -384,7 +352,7 @@ pub const cpu = struct {...@@ -384,7 +352,7 @@ pub const cpu = struct {
384 pub const niagara3 = Cpu{352 pub const niagara3 = Cpu{
385 .name = "niagara3",353 .name = "niagara3",
386 .llvm_name = "niagara3",354 .llvm_name = "niagara3",
387 .features = featureSet(&[_]Feature{355 .features = featureSet(&all_features, &[_]Feature{
388 .deprecated_v8,356 .deprecated_v8,
389 .popc,357 .popc,
390 .v9,358 .v9,
...@@ -395,7 +363,7 @@ pub const cpu = struct {...@@ -395,7 +363,7 @@ pub const cpu = struct {
395 pub const niagara4 = Cpu{363 pub const niagara4 = Cpu{
396 .name = "niagara4",364 .name = "niagara4",
397 .llvm_name = "niagara4",365 .llvm_name = "niagara4",
398 .features = featureSet(&[_]Feature{366 .features = featureSet(&all_features, &[_]Feature{
399 .deprecated_v8,367 .deprecated_v8,
400 .popc,368 .popc,
401 .v9,369 .v9,
...@@ -407,32 +375,32 @@ pub const cpu = struct {...@@ -407,32 +375,32 @@ pub const cpu = struct {
407 pub const sparclet = Cpu{375 pub const sparclet = Cpu{
408 .name = "sparclet",376 .name = "sparclet",
409 .llvm_name = "sparclet",377 .llvm_name = "sparclet",
410 .features = featureSet(&[_]Feature{}),378 .features = featureSet(&all_features, &[_]Feature{}),
411 };379 };
412 pub const sparclite = Cpu{380 pub const sparclite = Cpu{
413 .name = "sparclite",381 .name = "sparclite",
414 .llvm_name = "sparclite",382 .llvm_name = "sparclite",
415 .features = featureSet(&[_]Feature{}),383 .features = featureSet(&all_features, &[_]Feature{}),
416 };384 };
417 pub const sparclite86x = Cpu{385 pub const sparclite86x = Cpu{
418 .name = "sparclite86x",386 .name = "sparclite86x",
419 .llvm_name = "sparclite86x",387 .llvm_name = "sparclite86x",
420 .features = featureSet(&[_]Feature{}),388 .features = featureSet(&all_features, &[_]Feature{}),
421 };389 };
422 pub const supersparc = Cpu{390 pub const supersparc = Cpu{
423 .name = "supersparc",391 .name = "supersparc",
424 .llvm_name = "supersparc",392 .llvm_name = "supersparc",
425 .features = featureSet(&[_]Feature{}),393 .features = featureSet(&all_features, &[_]Feature{}),
426 };394 };
427 pub const tsc701 = Cpu{395 pub const tsc701 = Cpu{
428 .name = "tsc701",396 .name = "tsc701",
429 .llvm_name = "tsc701",397 .llvm_name = "tsc701",
430 .features = featureSet(&[_]Feature{}),398 .features = featureSet(&all_features, &[_]Feature{}),
431 };399 };
432 pub const ultrasparc = Cpu{400 pub const ultrasparc = Cpu{
433 .name = "ultrasparc",401 .name = "ultrasparc",
434 .llvm_name = "ultrasparc",402 .llvm_name = "ultrasparc",
435 .features = featureSet(&[_]Feature{403 .features = featureSet(&all_features, &[_]Feature{
436 .deprecated_v8,404 .deprecated_v8,
437 .v9,405 .v9,
438 .vis,406 .vis,
...@@ -441,7 +409,7 @@ pub const cpu = struct {...@@ -441,7 +409,7 @@ pub const cpu = struct {
441 pub const ultrasparc3 = Cpu{409 pub const ultrasparc3 = Cpu{
442 .name = "ultrasparc3",410 .name = "ultrasparc3",
443 .llvm_name = "ultrasparc3",411 .llvm_name = "ultrasparc3",
444 .features = featureSet(&[_]Feature{412 .features = featureSet(&all_features, &[_]Feature{
445 .deprecated_v8,413 .deprecated_v8,
446 .v9,414 .v9,
447 .vis,415 .vis,
...@@ -451,7 +419,7 @@ pub const cpu = struct {...@@ -451,7 +419,7 @@ pub const cpu = struct {
451 pub const ut699 = Cpu{419 pub const ut699 = Cpu{
452 .name = "ut699",420 .name = "ut699",
453 .llvm_name = "ut699",421 .llvm_name = "ut699",
454 .features = featureSet(&[_]Feature{422 .features = featureSet(&all_features, &[_]Feature{
455 .fixallfdivsqrt,423 .fixallfdivsqrt,
456 .insertnopload,424 .insertnopload,
457 .leon,425 .leon,
...@@ -462,7 +430,7 @@ pub const cpu = struct {...@@ -462,7 +430,7 @@ pub const cpu = struct {
462 pub const v7 = Cpu{430 pub const v7 = Cpu{
463 .name = "v7",431 .name = "v7",
464 .llvm_name = "v7",432 .llvm_name = "v7",
465 .features = featureSet(&[_]Feature{433 .features = featureSet(&all_features, &[_]Feature{
466 .no_fsmuld,434 .no_fsmuld,
467 .soft_mul_div,435 .soft_mul_div,
468 }),436 }),
...@@ -470,12 +438,12 @@ pub const cpu = struct {...@@ -470,12 +438,12 @@ pub const cpu = struct {
470 pub const v8 = Cpu{438 pub const v8 = Cpu{
471 .name = "v8",439 .name = "v8",
472 .llvm_name = "v8",440 .llvm_name = "v8",
473 .features = featureSet(&[_]Feature{}),441 .features = featureSet(&all_features, &[_]Feature{}),
474 };442 };
475 pub const v9 = Cpu{443 pub const v9 = Cpu{
476 .name = "v9",444 .name = "v9",
477 .llvm_name = "v9",445 .llvm_name = "v9",
478 .features = featureSet(&[_]Feature{446 .features = featureSet(&all_features, &[_]Feature{
479 .v9,447 .v9,
480 }),448 }),
481 };449 };
lib/std/target/systemz.zig+55-119
...@@ -43,253 +43,189 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -43,253 +43,189 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
4343
44pub const all_features = blk: {44pub const all_features = blk: {
45 const len = @typeInfo(Feature).Enum.fields.len;45 const len = @typeInfo(Feature).Enum.fields.len;
46 std.debug.assert(len <= Cpu.Feature.Set.bit_count);46 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
47 var result: [len]Cpu.Feature = undefined;47 var result: [len]Cpu.Feature = undefined;
48 result[@enumToInt(Feature.deflate_conversion)] = .{48 result[@enumToInt(Feature.deflate_conversion)] = .{
49 .index = @enumToInt(Feature.deflate_conversion),
50 .name = @tagName(Feature.deflate_conversion),
51 .llvm_name = "deflate-conversion",49 .llvm_name = "deflate-conversion",
52 .description = "Assume that the deflate-conversion facility is installed",50 .description = "Assume that the deflate-conversion facility is installed",
53 .dependencies = featureSet(&[_]Feature{}),51 .dependencies = sparseFeatureSet(&[_]Feature{}),
54 };52 };
55 result[@enumToInt(Feature.dfp_packed_conversion)] = .{53 result[@enumToInt(Feature.dfp_packed_conversion)] = .{
56 .index = @enumToInt(Feature.dfp_packed_conversion),
57 .name = @tagName(Feature.dfp_packed_conversion),
58 .llvm_name = "dfp-packed-conversion",54 .llvm_name = "dfp-packed-conversion",
59 .description = "Assume that the DFP packed-conversion facility is installed",55 .description = "Assume that the DFP packed-conversion facility is installed",
60 .dependencies = featureSet(&[_]Feature{}),56 .dependencies = sparseFeatureSet(&[_]Feature{}),
61 };57 };
62 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{58 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{
63 .index = @enumToInt(Feature.dfp_zoned_conversion),
64 .name = @tagName(Feature.dfp_zoned_conversion),
65 .llvm_name = "dfp-zoned-conversion",59 .llvm_name = "dfp-zoned-conversion",
66 .description = "Assume that the DFP zoned-conversion facility is installed",60 .description = "Assume that the DFP zoned-conversion facility is installed",
67 .dependencies = featureSet(&[_]Feature{}),61 .dependencies = sparseFeatureSet(&[_]Feature{}),
68 };62 };
69 result[@enumToInt(Feature.distinct_ops)] = .{63 result[@enumToInt(Feature.distinct_ops)] = .{
70 .index = @enumToInt(Feature.distinct_ops),
71 .name = @tagName(Feature.distinct_ops),
72 .llvm_name = "distinct-ops",64 .llvm_name = "distinct-ops",
73 .description = "Assume that the distinct-operands facility is installed",65 .description = "Assume that the distinct-operands facility is installed",
74 .dependencies = featureSet(&[_]Feature{}),66 .dependencies = sparseFeatureSet(&[_]Feature{}),
75 };67 };
76 result[@enumToInt(Feature.enhanced_dat_2)] = .{68 result[@enumToInt(Feature.enhanced_dat_2)] = .{
77 .index = @enumToInt(Feature.enhanced_dat_2),
78 .name = @tagName(Feature.enhanced_dat_2),
79 .llvm_name = "enhanced-dat-2",69 .llvm_name = "enhanced-dat-2",
80 .description = "Assume that the enhanced-DAT facility 2 is installed",70 .description = "Assume that the enhanced-DAT facility 2 is installed",
81 .dependencies = featureSet(&[_]Feature{}),71 .dependencies = sparseFeatureSet(&[_]Feature{}),
82 };72 };
83 result[@enumToInt(Feature.enhanced_sort)] = .{73 result[@enumToInt(Feature.enhanced_sort)] = .{
84 .index = @enumToInt(Feature.enhanced_sort),
85 .name = @tagName(Feature.enhanced_sort),
86 .llvm_name = "enhanced-sort",74 .llvm_name = "enhanced-sort",
87 .description = "Assume that the enhanced-sort facility is installed",75 .description = "Assume that the enhanced-sort facility is installed",
88 .dependencies = featureSet(&[_]Feature{}),76 .dependencies = sparseFeatureSet(&[_]Feature{}),
89 };77 };
90 result[@enumToInt(Feature.execution_hint)] = .{78 result[@enumToInt(Feature.execution_hint)] = .{
91 .index = @enumToInt(Feature.execution_hint),
92 .name = @tagName(Feature.execution_hint),
93 .llvm_name = "execution-hint",79 .llvm_name = "execution-hint",
94 .description = "Assume that the execution-hint facility is installed",80 .description = "Assume that the execution-hint facility is installed",
95 .dependencies = featureSet(&[_]Feature{}),81 .dependencies = sparseFeatureSet(&[_]Feature{}),
96 };82 };
97 result[@enumToInt(Feature.fast_serialization)] = .{83 result[@enumToInt(Feature.fast_serialization)] = .{
98 .index = @enumToInt(Feature.fast_serialization),
99 .name = @tagName(Feature.fast_serialization),
100 .llvm_name = "fast-serialization",84 .llvm_name = "fast-serialization",
101 .description = "Assume that the fast-serialization facility is installed",85 .description = "Assume that the fast-serialization facility is installed",
102 .dependencies = featureSet(&[_]Feature{}),86 .dependencies = sparseFeatureSet(&[_]Feature{}),
103 };87 };
104 result[@enumToInt(Feature.fp_extension)] = .{88 result[@enumToInt(Feature.fp_extension)] = .{
105 .index = @enumToInt(Feature.fp_extension),
106 .name = @tagName(Feature.fp_extension),
107 .llvm_name = "fp-extension",89 .llvm_name = "fp-extension",
108 .description = "Assume that the floating-point extension facility is installed",90 .description = "Assume that the floating-point extension facility is installed",
109 .dependencies = featureSet(&[_]Feature{}),91 .dependencies = sparseFeatureSet(&[_]Feature{}),
110 };92 };
111 result[@enumToInt(Feature.guarded_storage)] = .{93 result[@enumToInt(Feature.guarded_storage)] = .{
112 .index = @enumToInt(Feature.guarded_storage),
113 .name = @tagName(Feature.guarded_storage),
114 .llvm_name = "guarded-storage",94 .llvm_name = "guarded-storage",
115 .description = "Assume that the guarded-storage facility is installed",95 .description = "Assume that the guarded-storage facility is installed",
116 .dependencies = featureSet(&[_]Feature{}),96 .dependencies = sparseFeatureSet(&[_]Feature{}),
117 };97 };
118 result[@enumToInt(Feature.high_word)] = .{98 result[@enumToInt(Feature.high_word)] = .{
119 .index = @enumToInt(Feature.high_word),
120 .name = @tagName(Feature.high_word),
121 .llvm_name = "high-word",99 .llvm_name = "high-word",
122 .description = "Assume that the high-word facility is installed",100 .description = "Assume that the high-word facility is installed",
123 .dependencies = featureSet(&[_]Feature{}),101 .dependencies = sparseFeatureSet(&[_]Feature{}),
124 };102 };
125 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{103 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{
126 .index = @enumToInt(Feature.insert_reference_bits_multiple),
127 .name = @tagName(Feature.insert_reference_bits_multiple),
128 .llvm_name = "insert-reference-bits-multiple",104 .llvm_name = "insert-reference-bits-multiple",
129 .description = "Assume that the insert-reference-bits-multiple facility is installed",105 .description = "Assume that the insert-reference-bits-multiple facility is installed",
130 .dependencies = featureSet(&[_]Feature{}),106 .dependencies = sparseFeatureSet(&[_]Feature{}),
131 };107 };
132 result[@enumToInt(Feature.interlocked_access1)] = .{108 result[@enumToInt(Feature.interlocked_access1)] = .{
133 .index = @enumToInt(Feature.interlocked_access1),
134 .name = @tagName(Feature.interlocked_access1),
135 .llvm_name = "interlocked-access1",109 .llvm_name = "interlocked-access1",
136 .description = "Assume that interlocked-access facility 1 is installed",110 .description = "Assume that interlocked-access facility 1 is installed",
137 .dependencies = featureSet(&[_]Feature{}),111 .dependencies = sparseFeatureSet(&[_]Feature{}),
138 };112 };
139 result[@enumToInt(Feature.load_and_trap)] = .{113 result[@enumToInt(Feature.load_and_trap)] = .{
140 .index = @enumToInt(Feature.load_and_trap),
141 .name = @tagName(Feature.load_and_trap),
142 .llvm_name = "load-and-trap",114 .llvm_name = "load-and-trap",
143 .description = "Assume that the load-and-trap facility is installed",115 .description = "Assume that the load-and-trap facility is installed",
144 .dependencies = featureSet(&[_]Feature{}),116 .dependencies = sparseFeatureSet(&[_]Feature{}),
145 };117 };
146 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{118 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{
147 .index = @enumToInt(Feature.load_and_zero_rightmost_byte),
148 .name = @tagName(Feature.load_and_zero_rightmost_byte),
149 .llvm_name = "load-and-zero-rightmost-byte",119 .llvm_name = "load-and-zero-rightmost-byte",
150 .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",
151 .dependencies = featureSet(&[_]Feature{}),121 .dependencies = sparseFeatureSet(&[_]Feature{}),
152 };122 };
153 result[@enumToInt(Feature.load_store_on_cond)] = .{123 result[@enumToInt(Feature.load_store_on_cond)] = .{
154 .index = @enumToInt(Feature.load_store_on_cond),
155 .name = @tagName(Feature.load_store_on_cond),
156 .llvm_name = "load-store-on-cond",124 .llvm_name = "load-store-on-cond",
157 .description = "Assume that the load/store-on-condition facility is installed",125 .description = "Assume that the load/store-on-condition facility is installed",
158 .dependencies = featureSet(&[_]Feature{}),126 .dependencies = sparseFeatureSet(&[_]Feature{}),
159 };127 };
160 result[@enumToInt(Feature.load_store_on_cond_2)] = .{128 result[@enumToInt(Feature.load_store_on_cond_2)] = .{
161 .index = @enumToInt(Feature.load_store_on_cond_2),
162 .name = @tagName(Feature.load_store_on_cond_2),
163 .llvm_name = "load-store-on-cond-2",129 .llvm_name = "load-store-on-cond-2",
164 .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",
165 .dependencies = featureSet(&[_]Feature{}),131 .dependencies = sparseFeatureSet(&[_]Feature{}),
166 };132 };
167 result[@enumToInt(Feature.message_security_assist_extension3)] = .{133 result[@enumToInt(Feature.message_security_assist_extension3)] = .{
168 .index = @enumToInt(Feature.message_security_assist_extension3),
169 .name = @tagName(Feature.message_security_assist_extension3),
170 .llvm_name = "message-security-assist-extension3",134 .llvm_name = "message-security-assist-extension3",
171 .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",
172 .dependencies = featureSet(&[_]Feature{}),136 .dependencies = sparseFeatureSet(&[_]Feature{}),
173 };137 };
174 result[@enumToInt(Feature.message_security_assist_extension4)] = .{138 result[@enumToInt(Feature.message_security_assist_extension4)] = .{
175 .index = @enumToInt(Feature.message_security_assist_extension4),
176 .name = @tagName(Feature.message_security_assist_extension4),
177 .llvm_name = "message-security-assist-extension4",139 .llvm_name = "message-security-assist-extension4",
178 .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",
179 .dependencies = featureSet(&[_]Feature{}),141 .dependencies = sparseFeatureSet(&[_]Feature{}),
180 };142 };
181 result[@enumToInt(Feature.message_security_assist_extension5)] = .{143 result[@enumToInt(Feature.message_security_assist_extension5)] = .{
182 .index = @enumToInt(Feature.message_security_assist_extension5),
183 .name = @tagName(Feature.message_security_assist_extension5),
184 .llvm_name = "message-security-assist-extension5",144 .llvm_name = "message-security-assist-extension5",
185 .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",
186 .dependencies = featureSet(&[_]Feature{}),146 .dependencies = sparseFeatureSet(&[_]Feature{}),
187 };147 };
188 result[@enumToInt(Feature.message_security_assist_extension7)] = .{148 result[@enumToInt(Feature.message_security_assist_extension7)] = .{
189 .index = @enumToInt(Feature.message_security_assist_extension7),
190 .name = @tagName(Feature.message_security_assist_extension7),
191 .llvm_name = "message-security-assist-extension7",149 .llvm_name = "message-security-assist-extension7",
192 .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",
193 .dependencies = featureSet(&[_]Feature{}),151 .dependencies = sparseFeatureSet(&[_]Feature{}),
194 };152 };
195 result[@enumToInt(Feature.message_security_assist_extension8)] = .{153 result[@enumToInt(Feature.message_security_assist_extension8)] = .{
196 .index = @enumToInt(Feature.message_security_assist_extension8),
197 .name = @tagName(Feature.message_security_assist_extension8),
198 .llvm_name = "message-security-assist-extension8",154 .llvm_name = "message-security-assist-extension8",
199 .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",
200 .dependencies = featureSet(&[_]Feature{}),156 .dependencies = sparseFeatureSet(&[_]Feature{}),
201 };157 };
202 result[@enumToInt(Feature.message_security_assist_extension9)] = .{158 result[@enumToInt(Feature.message_security_assist_extension9)] = .{
203 .index = @enumToInt(Feature.message_security_assist_extension9),
204 .name = @tagName(Feature.message_security_assist_extension9),
205 .llvm_name = "message-security-assist-extension9",159 .llvm_name = "message-security-assist-extension9",
206 .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",
207 .dependencies = featureSet(&[_]Feature{}),161 .dependencies = sparseFeatureSet(&[_]Feature{}),
208 };162 };
209 result[@enumToInt(Feature.miscellaneous_extensions)] = .{163 result[@enumToInt(Feature.miscellaneous_extensions)] = .{
210 .index = @enumToInt(Feature.miscellaneous_extensions),
211 .name = @tagName(Feature.miscellaneous_extensions),
212 .llvm_name = "miscellaneous-extensions",164 .llvm_name = "miscellaneous-extensions",
213 .description = "Assume that the miscellaneous-extensions facility is installed",165 .description = "Assume that the miscellaneous-extensions facility is installed",
214 .dependencies = featureSet(&[_]Feature{}),166 .dependencies = sparseFeatureSet(&[_]Feature{}),
215 };167 };
216 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{168 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{
217 .index = @enumToInt(Feature.miscellaneous_extensions_2),
218 .name = @tagName(Feature.miscellaneous_extensions_2),
219 .llvm_name = "miscellaneous-extensions-2",169 .llvm_name = "miscellaneous-extensions-2",
220 .description = "Assume that the miscellaneous-extensions facility 2 is installed",170 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
221 .dependencies = featureSet(&[_]Feature{}),171 .dependencies = sparseFeatureSet(&[_]Feature{}),
222 };172 };
223 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{173 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{
224 .index = @enumToInt(Feature.miscellaneous_extensions_3),
225 .name = @tagName(Feature.miscellaneous_extensions_3),
226 .llvm_name = "miscellaneous-extensions-3",174 .llvm_name = "miscellaneous-extensions-3",
227 .description = "Assume that the miscellaneous-extensions facility 3 is installed",175 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
228 .dependencies = featureSet(&[_]Feature{}),176 .dependencies = sparseFeatureSet(&[_]Feature{}),
229 };177 };
230 result[@enumToInt(Feature.population_count)] = .{178 result[@enumToInt(Feature.population_count)] = .{
231 .index = @enumToInt(Feature.population_count),
232 .name = @tagName(Feature.population_count),
233 .llvm_name = "population-count",179 .llvm_name = "population-count",
234 .description = "Assume that the population-count facility is installed",180 .description = "Assume that the population-count facility is installed",
235 .dependencies = featureSet(&[_]Feature{}),181 .dependencies = sparseFeatureSet(&[_]Feature{}),
236 };182 };
237 result[@enumToInt(Feature.processor_assist)] = .{183 result[@enumToInt(Feature.processor_assist)] = .{
238 .index = @enumToInt(Feature.processor_assist),
239 .name = @tagName(Feature.processor_assist),
240 .llvm_name = "processor-assist",184 .llvm_name = "processor-assist",
241 .description = "Assume that the processor-assist facility is installed",185 .description = "Assume that the processor-assist facility is installed",
242 .dependencies = featureSet(&[_]Feature{}),186 .dependencies = sparseFeatureSet(&[_]Feature{}),
243 };187 };
244 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{188 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
245 .index = @enumToInt(Feature.reset_reference_bits_multiple),
246 .name = @tagName(Feature.reset_reference_bits_multiple),
247 .llvm_name = "reset-reference-bits-multiple",189 .llvm_name = "reset-reference-bits-multiple",
248 .description = "Assume that the reset-reference-bits-multiple facility is installed",190 .description = "Assume that the reset-reference-bits-multiple facility is installed",
249 .dependencies = featureSet(&[_]Feature{}),191 .dependencies = sparseFeatureSet(&[_]Feature{}),
250 };192 };
251 result[@enumToInt(Feature.transactional_execution)] = .{193 result[@enumToInt(Feature.transactional_execution)] = .{
252 .index = @enumToInt(Feature.transactional_execution),
253 .name = @tagName(Feature.transactional_execution),
254 .llvm_name = "transactional-execution",194 .llvm_name = "transactional-execution",
255 .description = "Assume that the transactional-execution facility is installed",195 .description = "Assume that the transactional-execution facility is installed",
256 .dependencies = featureSet(&[_]Feature{}),196 .dependencies = sparseFeatureSet(&[_]Feature{}),
257 };197 };
258 result[@enumToInt(Feature.vector)] = .{198 result[@enumToInt(Feature.vector)] = .{
259 .index = @enumToInt(Feature.vector),
260 .name = @tagName(Feature.vector),
261 .llvm_name = "vector",199 .llvm_name = "vector",
262 .description = "Assume that the vectory facility is installed",200 .description = "Assume that the vectory facility is installed",
263 .dependencies = featureSet(&[_]Feature{}),201 .dependencies = sparseFeatureSet(&[_]Feature{}),
264 };202 };
265 result[@enumToInt(Feature.vector_enhancements_1)] = .{203 result[@enumToInt(Feature.vector_enhancements_1)] = .{
266 .index = @enumToInt(Feature.vector_enhancements_1),
267 .name = @tagName(Feature.vector_enhancements_1),
268 .llvm_name = "vector-enhancements-1",204 .llvm_name = "vector-enhancements-1",
269 .description = "Assume that the vector enhancements facility 1 is installed",205 .description = "Assume that the vector enhancements facility 1 is installed",
270 .dependencies = featureSet(&[_]Feature{}),206 .dependencies = sparseFeatureSet(&[_]Feature{}),
271 };207 };
272 result[@enumToInt(Feature.vector_enhancements_2)] = .{208 result[@enumToInt(Feature.vector_enhancements_2)] = .{
273 .index = @enumToInt(Feature.vector_enhancements_2),
274 .name = @tagName(Feature.vector_enhancements_2),
275 .llvm_name = "vector-enhancements-2",209 .llvm_name = "vector-enhancements-2",
276 .description = "Assume that the vector enhancements facility 2 is installed",210 .description = "Assume that the vector enhancements facility 2 is installed",
277 .dependencies = featureSet(&[_]Feature{}),211 .dependencies = sparseFeatureSet(&[_]Feature{}),
278 };212 };
279 result[@enumToInt(Feature.vector_packed_decimal)] = .{213 result[@enumToInt(Feature.vector_packed_decimal)] = .{
280 .index = @enumToInt(Feature.vector_packed_decimal),
281 .name = @tagName(Feature.vector_packed_decimal),
282 .llvm_name = "vector-packed-decimal",214 .llvm_name = "vector-packed-decimal",
283 .description = "Assume that the vector packed decimal facility is installed",215 .description = "Assume that the vector packed decimal facility is installed",
284 .dependencies = featureSet(&[_]Feature{}),216 .dependencies = sparseFeatureSet(&[_]Feature{}),
285 };217 };
286 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{218 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{
287 .index = @enumToInt(Feature.vector_packed_decimal_enhancement),
288 .name = @tagName(Feature.vector_packed_decimal_enhancement),
289 .llvm_name = "vector-packed-decimal-enhancement",219 .llvm_name = "vector-packed-decimal-enhancement",
290 .description = "Assume that the vector packed decimal enhancement facility is installed",220 .description = "Assume that the vector packed decimal enhancement facility is installed",
291 .dependencies = featureSet(&[_]Feature{}),221 .dependencies = sparseFeatureSet(&[_]Feature{}),
292 };222 };
223 const ti = @typeInfo(Feature);
224 for (result) |*elem, i| {
225 elem.index = i;
226 elem.name = ti.Enum.fields[i].name;
227 elem.dependencies.initAsDependencies(i, &result);
228 }
293 break :blk result;229 break :blk result;
294};230};
295231
...@@ -297,7 +233,7 @@ pub const cpu = struct {...@@ -297,7 +233,7 @@ pub const cpu = struct {
297 pub const arch10 = Cpu{233 pub const arch10 = Cpu{
298 .name = "arch10",234 .name = "arch10",
299 .llvm_name = "arch10",235 .llvm_name = "arch10",
300 .features = featureSet(&[_]Feature{236 .features = featureSet(&all_features, &[_]Feature{
301 .dfp_zoned_conversion,237 .dfp_zoned_conversion,
302 .distinct_ops,238 .distinct_ops,
303 .enhanced_dat_2,239 .enhanced_dat_2,
...@@ -320,7 +256,7 @@ pub const cpu = struct {...@@ -320,7 +256,7 @@ pub const cpu = struct {
320 pub const arch11 = Cpu{256 pub const arch11 = Cpu{
321 .name = "arch11",257 .name = "arch11",
322 .llvm_name = "arch11",258 .llvm_name = "arch11",
323 .features = featureSet(&[_]Feature{259 .features = featureSet(&all_features, &[_]Feature{
324 .dfp_packed_conversion,260 .dfp_packed_conversion,
325 .dfp_zoned_conversion,261 .dfp_zoned_conversion,
326 .distinct_ops,262 .distinct_ops,
...@@ -348,7 +284,7 @@ pub const cpu = struct {...@@ -348,7 +284,7 @@ pub const cpu = struct {
348 pub const arch12 = Cpu{284 pub const arch12 = Cpu{
349 .name = "arch12",285 .name = "arch12",
350 .llvm_name = "arch12",286 .llvm_name = "arch12",
351 .features = featureSet(&[_]Feature{287 .features = featureSet(&all_features, &[_]Feature{
352 .dfp_packed_conversion,288 .dfp_packed_conversion,
353 .dfp_zoned_conversion,289 .dfp_zoned_conversion,
354 .distinct_ops,290 .distinct_ops,
...@@ -383,7 +319,7 @@ pub const cpu = struct {...@@ -383,7 +319,7 @@ pub const cpu = struct {
383 pub const arch13 = Cpu{319 pub const arch13 = Cpu{
384 .name = "arch13",320 .name = "arch13",
385 .llvm_name = "arch13",321 .llvm_name = "arch13",
386 .features = featureSet(&[_]Feature{322 .features = featureSet(&all_features, &[_]Feature{
387 .deflate_conversion,323 .deflate_conversion,
388 .dfp_packed_conversion,324 .dfp_packed_conversion,
389 .dfp_zoned_conversion,325 .dfp_zoned_conversion,
...@@ -424,12 +360,12 @@ pub const cpu = struct {...@@ -424,12 +360,12 @@ pub const cpu = struct {
424 pub const arch8 = Cpu{360 pub const arch8 = Cpu{
425 .name = "arch8",361 .name = "arch8",
426 .llvm_name = "arch8",362 .llvm_name = "arch8",
427 .features = featureSet(&[_]Feature{}),363 .features = featureSet(&all_features, &[_]Feature{}),
428 };364 };
429 pub const arch9 = Cpu{365 pub const arch9 = Cpu{
430 .name = "arch9",366 .name = "arch9",
431 .llvm_name = "arch9",367 .llvm_name = "arch9",
432 .features = featureSet(&[_]Feature{368 .features = featureSet(&all_features, &[_]Feature{
433 .distinct_ops,369 .distinct_ops,
434 .fast_serialization,370 .fast_serialization,
435 .fp_extension,371 .fp_extension,
...@@ -445,17 +381,17 @@ pub const cpu = struct {...@@ -445,17 +381,17 @@ pub const cpu = struct {
445 pub const generic = Cpu{381 pub const generic = Cpu{
446 .name = "generic",382 .name = "generic",
447 .llvm_name = "generic",383 .llvm_name = "generic",
448 .features = featureSet(&[_]Feature{}),384 .features = featureSet(&all_features, &[_]Feature{}),
449 };385 };
450 pub const z10 = Cpu{386 pub const z10 = Cpu{
451 .name = "z10",387 .name = "z10",
452 .llvm_name = "z10",388 .llvm_name = "z10",
453 .features = featureSet(&[_]Feature{}),389 .features = featureSet(&all_features, &[_]Feature{}),
454 };390 };
455 pub const z13 = Cpu{391 pub const z13 = Cpu{
456 .name = "z13",392 .name = "z13",
457 .llvm_name = "z13",393 .llvm_name = "z13",
458 .features = featureSet(&[_]Feature{394 .features = featureSet(&all_features, &[_]Feature{
459 .dfp_packed_conversion,395 .dfp_packed_conversion,
460 .dfp_zoned_conversion,396 .dfp_zoned_conversion,
461 .distinct_ops,397 .distinct_ops,
...@@ -483,7 +419,7 @@ pub const cpu = struct {...@@ -483,7 +419,7 @@ pub const cpu = struct {
483 pub const z14 = Cpu{419 pub const z14 = Cpu{
484 .name = "z14",420 .name = "z14",
485 .llvm_name = "z14",421 .llvm_name = "z14",
486 .features = featureSet(&[_]Feature{422 .features = featureSet(&all_features, &[_]Feature{
487 .dfp_packed_conversion,423 .dfp_packed_conversion,
488 .dfp_zoned_conversion,424 .dfp_zoned_conversion,
489 .distinct_ops,425 .distinct_ops,
...@@ -518,7 +454,7 @@ pub const cpu = struct {...@@ -518,7 +454,7 @@ pub const cpu = struct {
518 pub const z196 = Cpu{454 pub const z196 = Cpu{
519 .name = "z196",455 .name = "z196",
520 .llvm_name = "z196",456 .llvm_name = "z196",
521 .features = featureSet(&[_]Feature{457 .features = featureSet(&all_features, &[_]Feature{
522 .distinct_ops,458 .distinct_ops,
523 .fast_serialization,459 .fast_serialization,
524 .fp_extension,460 .fp_extension,
...@@ -534,7 +470,7 @@ pub const cpu = struct {...@@ -534,7 +470,7 @@ pub const cpu = struct {
534 pub const zEC12 = Cpu{470 pub const zEC12 = Cpu{
535 .name = "zEC12",471 .name = "zEC12",
536 .llvm_name = "zEC12",472 .llvm_name = "zEC12",
537 .features = featureSet(&[_]Feature{473 .features = featureSet(&all_features, &[_]Feature{
538 .dfp_zoned_conversion,474 .dfp_zoned_conversion,
539 .distinct_ops,475 .distinct_ops,
540 .enhanced_dat_2,476 .enhanced_dat_2,
lib/std/target/wasm.zig+20-34
...@@ -18,80 +18,66 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -18,80 +18,66 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
1818
19pub const all_features = blk: {19pub const all_features = blk: {
20 const len = @typeInfo(Feature).Enum.fields.len;20 const len = @typeInfo(Feature).Enum.fields.len;
21 std.debug.assert(len <= Cpu.Feature.Set.bit_count);21 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
22 var result: [len]Cpu.Feature = undefined;22 var result: [len]Cpu.Feature = undefined;
23 result[@enumToInt(Feature.atomics)] = .{23 result[@enumToInt(Feature.atomics)] = .{
24 .index = @enumToInt(Feature.atomics),
25 .name = @tagName(Feature.atomics),
26 .llvm_name = "atomics",24 .llvm_name = "atomics",
27 .description = "Enable Atomics",25 .description = "Enable Atomics",
28 .dependencies = featureSet(&[_]Feature{}),26 .dependencies = sparseFeatureSet(&[_]Feature{}),
29 };27 };
30 result[@enumToInt(Feature.bulk_memory)] = .{28 result[@enumToInt(Feature.bulk_memory)] = .{
31 .index = @enumToInt(Feature.bulk_memory),
32 .name = @tagName(Feature.bulk_memory),
33 .llvm_name = "bulk-memory",29 .llvm_name = "bulk-memory",
34 .description = "Enable bulk memory operations",30 .description = "Enable bulk memory operations",
35 .dependencies = featureSet(&[_]Feature{}),31 .dependencies = sparseFeatureSet(&[_]Feature{}),
36 };32 };
37 result[@enumToInt(Feature.exception_handling)] = .{33 result[@enumToInt(Feature.exception_handling)] = .{
38 .index = @enumToInt(Feature.exception_handling),
39 .name = @tagName(Feature.exception_handling),
40 .llvm_name = "exception-handling",34 .llvm_name = "exception-handling",
41 .description = "Enable Wasm exception handling",35 .description = "Enable Wasm exception handling",
42 .dependencies = featureSet(&[_]Feature{}),36 .dependencies = sparseFeatureSet(&[_]Feature{}),
43 };37 };
44 result[@enumToInt(Feature.multivalue)] = .{38 result[@enumToInt(Feature.multivalue)] = .{
45 .index = @enumToInt(Feature.multivalue),
46 .name = @tagName(Feature.multivalue),
47 .llvm_name = "multivalue",39 .llvm_name = "multivalue",
48 .description = "Enable multivalue blocks, instructions, and functions",40 .description = "Enable multivalue blocks, instructions, and functions",
49 .dependencies = featureSet(&[_]Feature{}),41 .dependencies = sparseFeatureSet(&[_]Feature{}),
50 };42 };
51 result[@enumToInt(Feature.mutable_globals)] = .{43 result[@enumToInt(Feature.mutable_globals)] = .{
52 .index = @enumToInt(Feature.mutable_globals),
53 .name = @tagName(Feature.mutable_globals),
54 .llvm_name = "mutable-globals",44 .llvm_name = "mutable-globals",
55 .description = "Enable mutable globals",45 .description = "Enable mutable globals",
56 .dependencies = featureSet(&[_]Feature{}),46 .dependencies = sparseFeatureSet(&[_]Feature{}),
57 };47 };
58 result[@enumToInt(Feature.nontrapping_fptoint)] = .{48 result[@enumToInt(Feature.nontrapping_fptoint)] = .{
59 .index = @enumToInt(Feature.nontrapping_fptoint),
60 .name = @tagName(Feature.nontrapping_fptoint),
61 .llvm_name = "nontrapping-fptoint",49 .llvm_name = "nontrapping-fptoint",
62 .description = "Enable non-trapping float-to-int conversion operators",50 .description = "Enable non-trapping float-to-int conversion operators",
63 .dependencies = featureSet(&[_]Feature{}),51 .dependencies = sparseFeatureSet(&[_]Feature{}),
64 };52 };
65 result[@enumToInt(Feature.sign_ext)] = .{53 result[@enumToInt(Feature.sign_ext)] = .{
66 .index = @enumToInt(Feature.sign_ext),
67 .name = @tagName(Feature.sign_ext),
68 .llvm_name = "sign-ext",54 .llvm_name = "sign-ext",
69 .description = "Enable sign extension operators",55 .description = "Enable sign extension operators",
70 .dependencies = featureSet(&[_]Feature{}),56 .dependencies = sparseFeatureSet(&[_]Feature{}),
71 };57 };
72 result[@enumToInt(Feature.simd128)] = .{58 result[@enumToInt(Feature.simd128)] = .{
73 .index = @enumToInt(Feature.simd128),
74 .name = @tagName(Feature.simd128),
75 .llvm_name = "simd128",59 .llvm_name = "simd128",
76 .description = "Enable 128-bit SIMD",60 .description = "Enable 128-bit SIMD",
77 .dependencies = featureSet(&[_]Feature{}),61 .dependencies = sparseFeatureSet(&[_]Feature{}),
78 };62 };
79 result[@enumToInt(Feature.tail_call)] = .{63 result[@enumToInt(Feature.tail_call)] = .{
80 .index = @enumToInt(Feature.tail_call),
81 .name = @tagName(Feature.tail_call),
82 .llvm_name = "tail-call",64 .llvm_name = "tail-call",
83 .description = "Enable tail call instructions",65 .description = "Enable tail call instructions",
84 .dependencies = featureSet(&[_]Feature{}),66 .dependencies = sparseFeatureSet(&[_]Feature{}),
85 };67 };
86 result[@enumToInt(Feature.unimplemented_simd128)] = .{68 result[@enumToInt(Feature.unimplemented_simd128)] = .{
87 .index = @enumToInt(Feature.unimplemented_simd128),
88 .name = @tagName(Feature.unimplemented_simd128),
89 .llvm_name = "unimplemented-simd128",69 .llvm_name = "unimplemented-simd128",
90 .description = "Enable 128-bit SIMD not yet implemented in engines",70 .description = "Enable 128-bit SIMD not yet implemented in engines",
91 .dependencies = featureSet(&[_]Feature{71 .dependencies = sparseFeatureSet(&[_]Feature{
92 .simd128,72 .simd128,
93 }),73 }),
94 };74 };
75 const ti = @typeInfo(Feature);
76 for (result) |*elem, i| {
77 elem.index = i;
78 elem.name = ti.Enum.fields[i].name;
79 elem.dependencies.initAsDependencies(i, &result);
80 }
95 break :blk result;81 break :blk result;
96};82};
9783
...@@ -99,7 +85,7 @@ pub const cpu = struct {...@@ -99,7 +85,7 @@ pub const cpu = struct {
99 pub const bleeding_edge = Cpu{85 pub const bleeding_edge = Cpu{
100 .name = "bleeding_edge",86 .name = "bleeding_edge",
101 .llvm_name = "bleeding-edge",87 .llvm_name = "bleeding-edge",
102 .features = featureSet(&[_]Feature{88 .features = featureSet(&all_features, &[_]Feature{
103 .atomics,89 .atomics,
104 .mutable_globals,90 .mutable_globals,
105 .nontrapping_fptoint,91 .nontrapping_fptoint,
...@@ -110,12 +96,12 @@ pub const cpu = struct {...@@ -110,12 +96,12 @@ pub const cpu = struct {
110 pub const generic = Cpu{96 pub const generic = Cpu{
111 .name = "generic",97 .name = "generic",
112 .llvm_name = "generic",98 .llvm_name = "generic",
113 .features = featureSet(&[_]Feature{}),99 .features = featureSet(&all_features, &[_]Feature{}),
114 };100 };
115 pub const mvp = Cpu{101 pub const mvp = Cpu{
116 .name = "mvp",102 .name = "mvp",
117 .llvm_name = "mvp",103 .llvm_name = "mvp",
118 .features = featureSet(&[_]Feature{}),104 .features = featureSet(&all_features, &[_]Feature{}),
119 };105 };
120};106};
121107
lib/std/target/x86.zig+208-443
...@@ -128,940 +128,705 @@ pub const Feature = enum {...@@ -128,940 +128,705 @@ 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);
131 const len = @typeInfo(Feature).Enum.fields.len;132 const len = @typeInfo(Feature).Enum.fields.len;
132 std.debug.assert(len <= Cpu.Feature.Set.bit_count);133 std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count);
133 var result: [len]Cpu.Feature = undefined;134 var result: [len]Cpu.Feature = undefined;
134 result[@enumToInt(Feature.@"3dnow")] = .{135 result[@enumToInt(Feature.@"3dnow")] = .{
135 .index = @enumToInt(Feature.@"3dnow"),
136 .name = @tagName(Feature.@"3dnow"),
137 .llvm_name = "3dnow",136 .llvm_name = "3dnow",
138 .description = "Enable 3DNow! instructions",137 .description = "Enable 3DNow! instructions",
139 .dependencies = featureSet(&[_]Feature{138 .dependencies = sparseFeatureSet(&[_]Feature{
140 .mmx,139 .mmx,
141 }),140 }),
142 };141 };
143 result[@enumToInt(Feature.@"3dnowa")] = .{142 result[@enumToInt(Feature.@"3dnowa")] = .{
144 .index = @enumToInt(Feature.@"3dnowa"),
145 .name = @tagName(Feature.@"3dnowa"),
146 .llvm_name = "3dnowa",143 .llvm_name = "3dnowa",
147 .description = "Enable 3DNow! Athlon instructions",144 .description = "Enable 3DNow! Athlon instructions",
148 .dependencies = featureSet(&[_]Feature{145 .dependencies = sparseFeatureSet(&[_]Feature{
149 .@"3dnow",146 .@"3dnow",
150 }),147 }),
151 };148 };
152 result[@enumToInt(Feature.@"64bit")] = .{149 result[@enumToInt(Feature.@"64bit")] = .{
153 .index = @enumToInt(Feature.@"64bit"),
154 .name = @tagName(Feature.@"64bit"),
155 .llvm_name = "64bit",150 .llvm_name = "64bit",
156 .description = "Support 64-bit instructions",151 .description = "Support 64-bit instructions",
157 .dependencies = featureSet(&[_]Feature{}),152 .dependencies = sparseFeatureSet(&[_]Feature{}),
158 };153 };
159 result[@enumToInt(Feature.adx)] = .{154 result[@enumToInt(Feature.adx)] = .{
160 .index = @enumToInt(Feature.adx),
161 .name = @tagName(Feature.adx),
162 .llvm_name = "adx",155 .llvm_name = "adx",
163 .description = "Support ADX instructions",156 .description = "Support ADX instructions",
164 .dependencies = featureSet(&[_]Feature{}),157 .dependencies = sparseFeatureSet(&[_]Feature{}),
165 };158 };
166 result[@enumToInt(Feature.aes)] = .{159 result[@enumToInt(Feature.aes)] = .{
167 .index = @enumToInt(Feature.aes),
168 .name = @tagName(Feature.aes),
169 .llvm_name = "aes",160 .llvm_name = "aes",
170 .description = "Enable AES instructions",161 .description = "Enable AES instructions",
171 .dependencies = featureSet(&[_]Feature{162 .dependencies = sparseFeatureSet(&[_]Feature{
172 .sse2,163 .sse2,
173 }),164 }),
174 };165 };
175 result[@enumToInt(Feature.avx)] = .{166 result[@enumToInt(Feature.avx)] = .{
176 .index = @enumToInt(Feature.avx),
177 .name = @tagName(Feature.avx),
178 .llvm_name = "avx",167 .llvm_name = "avx",
179 .description = "Enable AVX instructions",168 .description = "Enable AVX instructions",
180 .dependencies = featureSet(&[_]Feature{169 .dependencies = sparseFeatureSet(&[_]Feature{
181 .sse4_2,170 .sse4_2,
182 }),171 }),
183 };172 };
184 result[@enumToInt(Feature.avx2)] = .{173 result[@enumToInt(Feature.avx2)] = .{
185 .index = @enumToInt(Feature.avx2),
186 .name = @tagName(Feature.avx2),
187 .llvm_name = "avx2",174 .llvm_name = "avx2",
188 .description = "Enable AVX2 instructions",175 .description = "Enable AVX2 instructions",
189 .dependencies = featureSet(&[_]Feature{176 .dependencies = sparseFeatureSet(&[_]Feature{
190 .avx,177 .avx,
191 }),178 }),
192 };179 };
193 result[@enumToInt(Feature.avx512bf16)] = .{180 result[@enumToInt(Feature.avx512bf16)] = .{
194 .index = @enumToInt(Feature.avx512bf16),
195 .name = @tagName(Feature.avx512bf16),
196 .llvm_name = "avx512bf16",181 .llvm_name = "avx512bf16",
197 .description = "Support bfloat16 floating point",182 .description = "Support bfloat16 floating point",
198 .dependencies = featureSet(&[_]Feature{183 .dependencies = sparseFeatureSet(&[_]Feature{
199 .avx512bw,184 .avx512bw,
200 }),185 }),
201 };186 };
202 result[@enumToInt(Feature.avx512bitalg)] = .{187 result[@enumToInt(Feature.avx512bitalg)] = .{
203 .index = @enumToInt(Feature.avx512bitalg),
204 .name = @tagName(Feature.avx512bitalg),
205 .llvm_name = "avx512bitalg",188 .llvm_name = "avx512bitalg",
206 .description = "Enable AVX-512 Bit Algorithms",189 .description = "Enable AVX-512 Bit Algorithms",
207 .dependencies = featureSet(&[_]Feature{190 .dependencies = sparseFeatureSet(&[_]Feature{
208 .avx512bw,191 .avx512bw,
209 }),192 }),
210 };193 };
211 result[@enumToInt(Feature.avx512bw)] = .{194 result[@enumToInt(Feature.avx512bw)] = .{
212 .index = @enumToInt(Feature.avx512bw),
213 .name = @tagName(Feature.avx512bw),
214 .llvm_name = "avx512bw",195 .llvm_name = "avx512bw",
215 .description = "Enable AVX-512 Byte and Word Instructions",196 .description = "Enable AVX-512 Byte and Word Instructions",
216 .dependencies = featureSet(&[_]Feature{197 .dependencies = sparseFeatureSet(&[_]Feature{
217 .avx512f,198 .avx512f,
218 }),199 }),
219 };200 };
220 result[@enumToInt(Feature.avx512cd)] = .{201 result[@enumToInt(Feature.avx512cd)] = .{
221 .index = @enumToInt(Feature.avx512cd),
222 .name = @tagName(Feature.avx512cd),
223 .llvm_name = "avx512cd",202 .llvm_name = "avx512cd",
224 .description = "Enable AVX-512 Conflict Detection Instructions",203 .description = "Enable AVX-512 Conflict Detection Instructions",
225 .dependencies = featureSet(&[_]Feature{204 .dependencies = sparseFeatureSet(&[_]Feature{
226 .avx512f,205 .avx512f,
227 }),206 }),
228 };207 };
229 result[@enumToInt(Feature.avx512dq)] = .{208 result[@enumToInt(Feature.avx512dq)] = .{
230 .index = @enumToInt(Feature.avx512dq),
231 .name = @tagName(Feature.avx512dq),
232 .llvm_name = "avx512dq",209 .llvm_name = "avx512dq",
233 .description = "Enable AVX-512 Doubleword and Quadword Instructions",210 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
234 .dependencies = featureSet(&[_]Feature{211 .dependencies = sparseFeatureSet(&[_]Feature{
235 .avx512f,212 .avx512f,
236 }),213 }),
237 };214 };
238 result[@enumToInt(Feature.avx512er)] = .{215 result[@enumToInt(Feature.avx512er)] = .{
239 .index = @enumToInt(Feature.avx512er),
240 .name = @tagName(Feature.avx512er),
241 .llvm_name = "avx512er",216 .llvm_name = "avx512er",
242 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",217 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
243 .dependencies = featureSet(&[_]Feature{218 .dependencies = sparseFeatureSet(&[_]Feature{
244 .avx512f,219 .avx512f,
245 }),220 }),
246 };221 };
247 result[@enumToInt(Feature.avx512f)] = .{222 result[@enumToInt(Feature.avx512f)] = .{
248 .index = @enumToInt(Feature.avx512f),
249 .name = @tagName(Feature.avx512f),
250 .llvm_name = "avx512f",223 .llvm_name = "avx512f",
251 .description = "Enable AVX-512 instructions",224 .description = "Enable AVX-512 instructions",
252 .dependencies = featureSet(&[_]Feature{225 .dependencies = sparseFeatureSet(&[_]Feature{
253 .avx2,226 .avx2,
254 .f16c,227 .f16c,
255 .fma,228 .fma,
256 }),229 }),
257 };230 };
258 result[@enumToInt(Feature.avx512ifma)] = .{231 result[@enumToInt(Feature.avx512ifma)] = .{
259 .index = @enumToInt(Feature.avx512ifma),
260 .name = @tagName(Feature.avx512ifma),
261 .llvm_name = "avx512ifma",232 .llvm_name = "avx512ifma",
262 .description = "Enable AVX-512 Integer Fused Multiple-Add",233 .description = "Enable AVX-512 Integer Fused Multiple-Add",
263 .dependencies = featureSet(&[_]Feature{234 .dependencies = sparseFeatureSet(&[_]Feature{
264 .avx512f,235 .avx512f,
265 }),236 }),
266 };237 };
267 result[@enumToInt(Feature.avx512pf)] = .{238 result[@enumToInt(Feature.avx512pf)] = .{
268 .index = @enumToInt(Feature.avx512pf),
269 .name = @tagName(Feature.avx512pf),
270 .llvm_name = "avx512pf",239 .llvm_name = "avx512pf",
271 .description = "Enable AVX-512 PreFetch Instructions",240 .description = "Enable AVX-512 PreFetch Instructions",
272 .dependencies = featureSet(&[_]Feature{241 .dependencies = sparseFeatureSet(&[_]Feature{
273 .avx512f,242 .avx512f,
274 }),243 }),
275 };244 };
276 result[@enumToInt(Feature.avx512vbmi)] = .{245 result[@enumToInt(Feature.avx512vbmi)] = .{
277 .index = @enumToInt(Feature.avx512vbmi),
278 .name = @tagName(Feature.avx512vbmi),
279 .llvm_name = "avx512vbmi",246 .llvm_name = "avx512vbmi",
280 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",247 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
281 .dependencies = featureSet(&[_]Feature{248 .dependencies = sparseFeatureSet(&[_]Feature{
282 .avx512bw,249 .avx512bw,
283 }),250 }),
284 };251 };
285 result[@enumToInt(Feature.avx512vbmi2)] = .{252 result[@enumToInt(Feature.avx512vbmi2)] = .{
286 .index = @enumToInt(Feature.avx512vbmi2),
287 .name = @tagName(Feature.avx512vbmi2),
288 .llvm_name = "avx512vbmi2",253 .llvm_name = "avx512vbmi2",
289 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",254 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
290 .dependencies = featureSet(&[_]Feature{255 .dependencies = sparseFeatureSet(&[_]Feature{
291 .avx512bw,256 .avx512bw,
292 }),257 }),
293 };258 };
294 result[@enumToInt(Feature.avx512vl)] = .{259 result[@enumToInt(Feature.avx512vl)] = .{
295 .index = @enumToInt(Feature.avx512vl),
296 .name = @tagName(Feature.avx512vl),
297 .llvm_name = "avx512vl",260 .llvm_name = "avx512vl",
298 .description = "Enable AVX-512 Vector Length eXtensions",261 .description = "Enable AVX-512 Vector Length eXtensions",
299 .dependencies = featureSet(&[_]Feature{262 .dependencies = sparseFeatureSet(&[_]Feature{
300 .avx512f,263 .avx512f,
301 }),264 }),
302 };265 };
303 result[@enumToInt(Feature.avx512vnni)] = .{266 result[@enumToInt(Feature.avx512vnni)] = .{
304 .index = @enumToInt(Feature.avx512vnni),
305 .name = @tagName(Feature.avx512vnni),
306 .llvm_name = "avx512vnni",267 .llvm_name = "avx512vnni",
307 .description = "Enable AVX-512 Vector Neural Network Instructions",268 .description = "Enable AVX-512 Vector Neural Network Instructions",
308 .dependencies = featureSet(&[_]Feature{269 .dependencies = sparseFeatureSet(&[_]Feature{
309 .avx512f,270 .avx512f,
310 }),271 }),
311 };272 };
312 result[@enumToInt(Feature.avx512vp2intersect)] = .{273 result[@enumToInt(Feature.avx512vp2intersect)] = .{
313 .index = @enumToInt(Feature.avx512vp2intersect),
314 .name = @tagName(Feature.avx512vp2intersect),
315 .llvm_name = "avx512vp2intersect",274 .llvm_name = "avx512vp2intersect",
316 .description = "Enable AVX-512 vp2intersect",275 .description = "Enable AVX-512 vp2intersect",
317 .dependencies = featureSet(&[_]Feature{276 .dependencies = sparseFeatureSet(&[_]Feature{
318 .avx512f,277 .avx512f,
319 }),278 }),
320 };279 };
321 result[@enumToInt(Feature.avx512vpopcntdq)] = .{280 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
322 .index = @enumToInt(Feature.avx512vpopcntdq),
323 .name = @tagName(Feature.avx512vpopcntdq),
324 .llvm_name = "avx512vpopcntdq",281 .llvm_name = "avx512vpopcntdq",
325 .description = "Enable AVX-512 Population Count Instructions",282 .description = "Enable AVX-512 Population Count Instructions",
326 .dependencies = featureSet(&[_]Feature{283 .dependencies = sparseFeatureSet(&[_]Feature{
327 .avx512f,284 .avx512f,
328 }),285 }),
329 };286 };
330 result[@enumToInt(Feature.bmi)] = .{287 result[@enumToInt(Feature.bmi)] = .{
331 .index = @enumToInt(Feature.bmi),
332 .name = @tagName(Feature.bmi),
333 .llvm_name = "bmi",288 .llvm_name = "bmi",
334 .description = "Support BMI instructions",289 .description = "Support BMI instructions",
335 .dependencies = featureSet(&[_]Feature{}),290 .dependencies = sparseFeatureSet(&[_]Feature{}),
336 };291 };
337 result[@enumToInt(Feature.bmi2)] = .{292 result[@enumToInt(Feature.bmi2)] = .{
338 .index = @enumToInt(Feature.bmi2),
339 .name = @tagName(Feature.bmi2),
340 .llvm_name = "bmi2",293 .llvm_name = "bmi2",
341 .description = "Support BMI2 instructions",294 .description = "Support BMI2 instructions",
342 .dependencies = featureSet(&[_]Feature{}),295 .dependencies = sparseFeatureSet(&[_]Feature{}),
343 };296 };
344 result[@enumToInt(Feature.branchfusion)] = .{297 result[@enumToInt(Feature.branchfusion)] = .{
345 .index = @enumToInt(Feature.branchfusion),
346 .name = @tagName(Feature.branchfusion),
347 .llvm_name = "branchfusion",298 .llvm_name = "branchfusion",
348 .description = "CMP/TEST can be fused with conditional branches",299 .description = "CMP/TEST can be fused with conditional branches",
349 .dependencies = featureSet(&[_]Feature{}),300 .dependencies = sparseFeatureSet(&[_]Feature{}),
350 };301 };
351 result[@enumToInt(Feature.cldemote)] = .{302 result[@enumToInt(Feature.cldemote)] = .{
352 .index = @enumToInt(Feature.cldemote),
353 .name = @tagName(Feature.cldemote),
354 .llvm_name = "cldemote",303 .llvm_name = "cldemote",
355 .description = "Enable Cache Demote",304 .description = "Enable Cache Demote",
356 .dependencies = featureSet(&[_]Feature{}),305 .dependencies = sparseFeatureSet(&[_]Feature{}),
357 };306 };
358 result[@enumToInt(Feature.clflushopt)] = .{307 result[@enumToInt(Feature.clflushopt)] = .{
359 .index = @enumToInt(Feature.clflushopt),
360 .name = @tagName(Feature.clflushopt),
361 .llvm_name = "clflushopt",308 .llvm_name = "clflushopt",
362 .description = "Flush A Cache Line Optimized",309 .description = "Flush A Cache Line Optimized",
363 .dependencies = featureSet(&[_]Feature{}),310 .dependencies = sparseFeatureSet(&[_]Feature{}),
364 };311 };
365 result[@enumToInt(Feature.clwb)] = .{312 result[@enumToInt(Feature.clwb)] = .{
366 .index = @enumToInt(Feature.clwb),
367 .name = @tagName(Feature.clwb),
368 .llvm_name = "clwb",313 .llvm_name = "clwb",
369 .description = "Cache Line Write Back",314 .description = "Cache Line Write Back",
370 .dependencies = featureSet(&[_]Feature{}),315 .dependencies = sparseFeatureSet(&[_]Feature{}),
371 };316 };
372 result[@enumToInt(Feature.clzero)] = .{317 result[@enumToInt(Feature.clzero)] = .{
373 .index = @enumToInt(Feature.clzero),
374 .name = @tagName(Feature.clzero),
375 .llvm_name = "clzero",318 .llvm_name = "clzero",
376 .description = "Enable Cache Line Zero",319 .description = "Enable Cache Line Zero",
377 .dependencies = featureSet(&[_]Feature{}),320 .dependencies = sparseFeatureSet(&[_]Feature{}),
378 };321 };
379 result[@enumToInt(Feature.cmov)] = .{322 result[@enumToInt(Feature.cmov)] = .{
380 .index = @enumToInt(Feature.cmov),
381 .name = @tagName(Feature.cmov),
382 .llvm_name = "cmov",323 .llvm_name = "cmov",
383 .description = "Enable conditional move instructions",324 .description = "Enable conditional move instructions",
384 .dependencies = featureSet(&[_]Feature{}),325 .dependencies = sparseFeatureSet(&[_]Feature{}),
385 };326 };
386 result[@enumToInt(Feature.cx16)] = .{327 result[@enumToInt(Feature.cx16)] = .{
387 .index = @enumToInt(Feature.cx16),
388 .name = @tagName(Feature.cx16),
389 .llvm_name = "cx16",328 .llvm_name = "cx16",
390 .description = "64-bit with cmpxchg16b",329 .description = "64-bit with cmpxchg16b",
391 .dependencies = featureSet(&[_]Feature{330 .dependencies = sparseFeatureSet(&[_]Feature{
392 .cx8,331 .cx8,
393 }),332 }),
394 };333 };
395 result[@enumToInt(Feature.cx8)] = .{334 result[@enumToInt(Feature.cx8)] = .{
396 .index = @enumToInt(Feature.cx8),
397 .name = @tagName(Feature.cx8),
398 .llvm_name = "cx8",335 .llvm_name = "cx8",
399 .description = "Support CMPXCHG8B instructions",336 .description = "Support CMPXCHG8B instructions",
400 .dependencies = featureSet(&[_]Feature{}),337 .dependencies = sparseFeatureSet(&[_]Feature{}),
401 };338 };
402 result[@enumToInt(Feature.enqcmd)] = .{339 result[@enumToInt(Feature.enqcmd)] = .{
403 .index = @enumToInt(Feature.enqcmd),
404 .name = @tagName(Feature.enqcmd),
405 .llvm_name = "enqcmd",340 .llvm_name = "enqcmd",
406 .description = "Has ENQCMD instructions",341 .description = "Has ENQCMD instructions",
407 .dependencies = featureSet(&[_]Feature{}),342 .dependencies = sparseFeatureSet(&[_]Feature{}),
408 };343 };
409 result[@enumToInt(Feature.ermsb)] = .{344 result[@enumToInt(Feature.ermsb)] = .{
410 .index = @enumToInt(Feature.ermsb),
411 .name = @tagName(Feature.ermsb),
412 .llvm_name = "ermsb",345 .llvm_name = "ermsb",
413 .description = "REP MOVS/STOS are fast",346 .description = "REP MOVS/STOS are fast",
414 .dependencies = featureSet(&[_]Feature{}),347 .dependencies = sparseFeatureSet(&[_]Feature{}),
415 };348 };
416 result[@enumToInt(Feature.f16c)] = .{349 result[@enumToInt(Feature.f16c)] = .{
417 .index = @enumToInt(Feature.f16c),
418 .name = @tagName(Feature.f16c),
419 .llvm_name = "f16c",350 .llvm_name = "f16c",
420 .description = "Support 16-bit floating point conversion instructions",351 .description = "Support 16-bit floating point conversion instructions",
421 .dependencies = featureSet(&[_]Feature{352 .dependencies = sparseFeatureSet(&[_]Feature{
422 .avx,353 .avx,
423 }),354 }),
424 };355 };
425 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{356 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{
426 .index = @enumToInt(Feature.false_deps_lzcnt_tzcnt),
427 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),
428 .llvm_name = "false-deps-lzcnt-tzcnt",357 .llvm_name = "false-deps-lzcnt-tzcnt",
429 .description = "LZCNT/TZCNT have a false dependency on dest register",358 .description = "LZCNT/TZCNT have a false dependency on dest register",
430 .dependencies = featureSet(&[_]Feature{}),359 .dependencies = sparseFeatureSet(&[_]Feature{}),
431 };360 };
432 result[@enumToInt(Feature.false_deps_popcnt)] = .{361 result[@enumToInt(Feature.false_deps_popcnt)] = .{
433 .index = @enumToInt(Feature.false_deps_popcnt),
434 .name = @tagName(Feature.false_deps_popcnt),
435 .llvm_name = "false-deps-popcnt",362 .llvm_name = "false-deps-popcnt",
436 .description = "POPCNT has a false dependency on dest register",363 .description = "POPCNT has a false dependency on dest register",
437 .dependencies = featureSet(&[_]Feature{}),364 .dependencies = sparseFeatureSet(&[_]Feature{}),
438 };365 };
439 result[@enumToInt(Feature.fast_11bytenop)] = .{366 result[@enumToInt(Feature.fast_11bytenop)] = .{
440 .index = @enumToInt(Feature.fast_11bytenop),
441 .name = @tagName(Feature.fast_11bytenop),
442 .llvm_name = "fast-11bytenop",367 .llvm_name = "fast-11bytenop",
443 .description = "Target can quickly decode up to 11 byte NOPs",368 .description = "Target can quickly decode up to 11 byte NOPs",
444 .dependencies = featureSet(&[_]Feature{}),369 .dependencies = sparseFeatureSet(&[_]Feature{}),
445 };370 };
446 result[@enumToInt(Feature.fast_15bytenop)] = .{371 result[@enumToInt(Feature.fast_15bytenop)] = .{
447 .index = @enumToInt(Feature.fast_15bytenop),
448 .name = @tagName(Feature.fast_15bytenop),
449 .llvm_name = "fast-15bytenop",372 .llvm_name = "fast-15bytenop",
450 .description = "Target can quickly decode up to 15 byte NOPs",373 .description = "Target can quickly decode up to 15 byte NOPs",
451 .dependencies = featureSet(&[_]Feature{}),374 .dependencies = sparseFeatureSet(&[_]Feature{}),
452 };375 };
453 result[@enumToInt(Feature.fast_bextr)] = .{376 result[@enumToInt(Feature.fast_bextr)] = .{
454 .index = @enumToInt(Feature.fast_bextr),
455 .name = @tagName(Feature.fast_bextr),
456 .llvm_name = "fast-bextr",377 .llvm_name = "fast-bextr",
457 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",378 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
458 .dependencies = featureSet(&[_]Feature{}),379 .dependencies = sparseFeatureSet(&[_]Feature{}),
459 };380 };
460 result[@enumToInt(Feature.fast_gather)] = .{381 result[@enumToInt(Feature.fast_gather)] = .{
461 .index = @enumToInt(Feature.fast_gather),
462 .name = @tagName(Feature.fast_gather),
463 .llvm_name = "fast-gather",382 .llvm_name = "fast-gather",
464 .description = "Indicates if gather is reasonably fast",383 .description = "Indicates if gather is reasonably fast",
465 .dependencies = featureSet(&[_]Feature{}),384 .dependencies = sparseFeatureSet(&[_]Feature{}),
466 };385 };
467 result[@enumToInt(Feature.fast_hops)] = .{386 result[@enumToInt(Feature.fast_hops)] = .{
468 .index = @enumToInt(Feature.fast_hops),
469 .name = @tagName(Feature.fast_hops),
470 .llvm_name = "fast-hops",387 .llvm_name = "fast-hops",
471 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",388 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
472 .dependencies = featureSet(&[_]Feature{389 .dependencies = sparseFeatureSet(&[_]Feature{
473 .sse3,390 .sse3,
474 }),391 }),
475 };392 };
476 result[@enumToInt(Feature.fast_lzcnt)] = .{393 result[@enumToInt(Feature.fast_lzcnt)] = .{
477 .index = @enumToInt(Feature.fast_lzcnt),
478 .name = @tagName(Feature.fast_lzcnt),
479 .llvm_name = "fast-lzcnt",394 .llvm_name = "fast-lzcnt",
480 .description = "LZCNT instructions are as fast as most simple integer ops",395 .description = "LZCNT instructions are as fast as most simple integer ops",
481 .dependencies = featureSet(&[_]Feature{}),396 .dependencies = sparseFeatureSet(&[_]Feature{}),
482 };397 };
483 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{398 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{
484 .index = @enumToInt(Feature.fast_partial_ymm_or_zmm_write),
485 .name = @tagName(Feature.fast_partial_ymm_or_zmm_write),
486 .llvm_name = "fast-partial-ymm-or-zmm-write",399 .llvm_name = "fast-partial-ymm-or-zmm-write",
487 .description = "Partial writes to YMM/ZMM registers are fast",400 .description = "Partial writes to YMM/ZMM registers are fast",
488 .dependencies = featureSet(&[_]Feature{}),401 .dependencies = sparseFeatureSet(&[_]Feature{}),
489 };402 };
490 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{403 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
491 .index = @enumToInt(Feature.fast_scalar_fsqrt),
492 .name = @tagName(Feature.fast_scalar_fsqrt),
493 .llvm_name = "fast-scalar-fsqrt",404 .llvm_name = "fast-scalar-fsqrt",
494 .description = "Scalar SQRT is fast (disable Newton-Raphson)",405 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
495 .dependencies = featureSet(&[_]Feature{}),406 .dependencies = sparseFeatureSet(&[_]Feature{}),
496 };407 };
497 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{408 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{
498 .index = @enumToInt(Feature.fast_scalar_shift_masks),
499 .name = @tagName(Feature.fast_scalar_shift_masks),
500 .llvm_name = "fast-scalar-shift-masks",409 .llvm_name = "fast-scalar-shift-masks",
501 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",410 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
502 .dependencies = featureSet(&[_]Feature{}),411 .dependencies = sparseFeatureSet(&[_]Feature{}),
503 };412 };
504 result[@enumToInt(Feature.fast_shld_rotate)] = .{413 result[@enumToInt(Feature.fast_shld_rotate)] = .{
505 .index = @enumToInt(Feature.fast_shld_rotate),
506 .name = @tagName(Feature.fast_shld_rotate),
507 .llvm_name = "fast-shld-rotate",414 .llvm_name = "fast-shld-rotate",
508 .description = "SHLD can be used as a faster rotate",415 .description = "SHLD can be used as a faster rotate",
509 .dependencies = featureSet(&[_]Feature{}),416 .dependencies = sparseFeatureSet(&[_]Feature{}),
510 };417 };
511 result[@enumToInt(Feature.fast_variable_shuffle)] = .{418 result[@enumToInt(Feature.fast_variable_shuffle)] = .{
512 .index = @enumToInt(Feature.fast_variable_shuffle),
513 .name = @tagName(Feature.fast_variable_shuffle),
514 .llvm_name = "fast-variable-shuffle",419 .llvm_name = "fast-variable-shuffle",
515 .description = "Shuffles with variable masks are fast",420 .description = "Shuffles with variable masks are fast",
516 .dependencies = featureSet(&[_]Feature{}),421 .dependencies = sparseFeatureSet(&[_]Feature{}),
517 };422 };
518 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{423 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
519 .index = @enumToInt(Feature.fast_vector_fsqrt),
520 .name = @tagName(Feature.fast_vector_fsqrt),
521 .llvm_name = "fast-vector-fsqrt",424 .llvm_name = "fast-vector-fsqrt",
522 .description = "Vector SQRT is fast (disable Newton-Raphson)",425 .description = "Vector SQRT is fast (disable Newton-Raphson)",
523 .dependencies = featureSet(&[_]Feature{}),426 .dependencies = sparseFeatureSet(&[_]Feature{}),
524 };427 };
525 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{428 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{
526 .index = @enumToInt(Feature.fast_vector_shift_masks),
527 .name = @tagName(Feature.fast_vector_shift_masks),
528 .llvm_name = "fast-vector-shift-masks",429 .llvm_name = "fast-vector-shift-masks",
529 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",430 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",
530 .dependencies = featureSet(&[_]Feature{}),431 .dependencies = sparseFeatureSet(&[_]Feature{}),
531 };432 };
532 result[@enumToInt(Feature.fma)] = .{433 result[@enumToInt(Feature.fma)] = .{
533 .index = @enumToInt(Feature.fma),
534 .name = @tagName(Feature.fma),
535 .llvm_name = "fma",434 .llvm_name = "fma",
536 .description = "Enable three-operand fused multiple-add",435 .description = "Enable three-operand fused multiple-add",
537 .dependencies = featureSet(&[_]Feature{436 .dependencies = sparseFeatureSet(&[_]Feature{
538 .avx,437 .avx,
539 }),438 }),
540 };439 };
541 result[@enumToInt(Feature.fma4)] = .{440 result[@enumToInt(Feature.fma4)] = .{
542 .index = @enumToInt(Feature.fma4),
543 .name = @tagName(Feature.fma4),
544 .llvm_name = "fma4",441 .llvm_name = "fma4",
545 .description = "Enable four-operand fused multiple-add",442 .description = "Enable four-operand fused multiple-add",
546 .dependencies = featureSet(&[_]Feature{443 .dependencies = sparseFeatureSet(&[_]Feature{
547 .avx,444 .avx,
548 .sse4a,445 .sse4a,
549 }),446 }),
550 };447 };
551 result[@enumToInt(Feature.fsgsbase)] = .{448 result[@enumToInt(Feature.fsgsbase)] = .{
552 .index = @enumToInt(Feature.fsgsbase),
553 .name = @tagName(Feature.fsgsbase),
554 .llvm_name = "fsgsbase",449 .llvm_name = "fsgsbase",
555 .description = "Support FS/GS Base instructions",450 .description = "Support FS/GS Base instructions",
556 .dependencies = featureSet(&[_]Feature{}),451 .dependencies = sparseFeatureSet(&[_]Feature{}),
557 };452 };
558 result[@enumToInt(Feature.fxsr)] = .{453 result[@enumToInt(Feature.fxsr)] = .{
559 .index = @enumToInt(Feature.fxsr),
560 .name = @tagName(Feature.fxsr),
561 .llvm_name = "fxsr",454 .llvm_name = "fxsr",
562 .description = "Support fxsave/fxrestore instructions",455 .description = "Support fxsave/fxrestore instructions",
563 .dependencies = featureSet(&[_]Feature{}),456 .dependencies = sparseFeatureSet(&[_]Feature{}),
564 };457 };
565 result[@enumToInt(Feature.gfni)] = .{458 result[@enumToInt(Feature.gfni)] = .{
566 .index = @enumToInt(Feature.gfni),
567 .name = @tagName(Feature.gfni),
568 .llvm_name = "gfni",459 .llvm_name = "gfni",
569 .description = "Enable Galois Field Arithmetic Instructions",460 .description = "Enable Galois Field Arithmetic Instructions",
570 .dependencies = featureSet(&[_]Feature{461 .dependencies = sparseFeatureSet(&[_]Feature{
571 .sse2,462 .sse2,
572 }),463 }),
573 };464 };
574 result[@enumToInt(Feature.idivl_to_divb)] = .{465 result[@enumToInt(Feature.idivl_to_divb)] = .{
575 .index = @enumToInt(Feature.idivl_to_divb),
576 .name = @tagName(Feature.idivl_to_divb),
577 .llvm_name = "idivl-to-divb",466 .llvm_name = "idivl-to-divb",
578 .description = "Use 8-bit divide for positive values less than 256",467 .description = "Use 8-bit divide for positive values less than 256",
579 .dependencies = featureSet(&[_]Feature{}),468 .dependencies = sparseFeatureSet(&[_]Feature{}),
580 };469 };
581 result[@enumToInt(Feature.idivq_to_divl)] = .{470 result[@enumToInt(Feature.idivq_to_divl)] = .{
582 .index = @enumToInt(Feature.idivq_to_divl),
583 .name = @tagName(Feature.idivq_to_divl),
584 .llvm_name = "idivq-to-divl",471 .llvm_name = "idivq-to-divl",
585 .description = "Use 32-bit divide for positive values less than 2^32",472 .description = "Use 32-bit divide for positive values less than 2^32",
586 .dependencies = featureSet(&[_]Feature{}),473 .dependencies = sparseFeatureSet(&[_]Feature{}),
587 };474 };
588 result[@enumToInt(Feature.invpcid)] = .{475 result[@enumToInt(Feature.invpcid)] = .{
589 .index = @enumToInt(Feature.invpcid),
590 .name = @tagName(Feature.invpcid),
591 .llvm_name = "invpcid",476 .llvm_name = "invpcid",
592 .description = "Invalidate Process-Context Identifier",477 .description = "Invalidate Process-Context Identifier",
593 .dependencies = featureSet(&[_]Feature{}),478 .dependencies = sparseFeatureSet(&[_]Feature{}),
594 };479 };
595 result[@enumToInt(Feature.lea_sp)] = .{480 result[@enumToInt(Feature.lea_sp)] = .{
596 .index = @enumToInt(Feature.lea_sp),
597 .name = @tagName(Feature.lea_sp),
598 .llvm_name = "lea-sp",481 .llvm_name = "lea-sp",
599 .description = "Use LEA for adjusting the stack pointer",482 .description = "Use LEA for adjusting the stack pointer",
600 .dependencies = featureSet(&[_]Feature{}),483 .dependencies = sparseFeatureSet(&[_]Feature{}),
601 };484 };
602 result[@enumToInt(Feature.lea_uses_ag)] = .{485 result[@enumToInt(Feature.lea_uses_ag)] = .{
603 .index = @enumToInt(Feature.lea_uses_ag),
604 .name = @tagName(Feature.lea_uses_ag),
605 .llvm_name = "lea-uses-ag",486 .llvm_name = "lea-uses-ag",
606 .description = "LEA instruction needs inputs at AG stage",487 .description = "LEA instruction needs inputs at AG stage",
607 .dependencies = featureSet(&[_]Feature{}),488 .dependencies = sparseFeatureSet(&[_]Feature{}),
608 };489 };
609 result[@enumToInt(Feature.lwp)] = .{490 result[@enumToInt(Feature.lwp)] = .{
610 .index = @enumToInt(Feature.lwp),
611 .name = @tagName(Feature.lwp),
612 .llvm_name = "lwp",491 .llvm_name = "lwp",
613 .description = "Enable LWP instructions",492 .description = "Enable LWP instructions",
614 .dependencies = featureSet(&[_]Feature{}),493 .dependencies = sparseFeatureSet(&[_]Feature{}),
615 };494 };
616 result[@enumToInt(Feature.lzcnt)] = .{495 result[@enumToInt(Feature.lzcnt)] = .{
617 .index = @enumToInt(Feature.lzcnt),
618 .name = @tagName(Feature.lzcnt),
619 .llvm_name = "lzcnt",496 .llvm_name = "lzcnt",
620 .description = "Support LZCNT instruction",497 .description = "Support LZCNT instruction",
621 .dependencies = featureSet(&[_]Feature{}),498 .dependencies = sparseFeatureSet(&[_]Feature{}),
622 };499 };
623 result[@enumToInt(Feature.macrofusion)] = .{500 result[@enumToInt(Feature.macrofusion)] = .{
624 .index = @enumToInt(Feature.macrofusion),
625 .name = @tagName(Feature.macrofusion),
626 .llvm_name = "macrofusion",501 .llvm_name = "macrofusion",
627 .description = "Various instructions can be fused with conditional branches",502 .description = "Various instructions can be fused with conditional branches",
628 .dependencies = featureSet(&[_]Feature{}),503 .dependencies = sparseFeatureSet(&[_]Feature{}),
629 };504 };
630 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{505 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
631 .index = @enumToInt(Feature.merge_to_threeway_branch),
632 .name = @tagName(Feature.merge_to_threeway_branch),
633 .llvm_name = "merge-to-threeway-branch",506 .llvm_name = "merge-to-threeway-branch",
634 .description = "Merge branches to a three-way conditional branch",507 .description = "Merge branches to a three-way conditional branch",
635 .dependencies = featureSet(&[_]Feature{}),508 .dependencies = sparseFeatureSet(&[_]Feature{}),
636 };509 };
637 result[@enumToInt(Feature.mmx)] = .{510 result[@enumToInt(Feature.mmx)] = .{
638 .index = @enumToInt(Feature.mmx),
639 .name = @tagName(Feature.mmx),
640 .llvm_name = "mmx",511 .llvm_name = "mmx",
641 .description = "Enable MMX instructions",512 .description = "Enable MMX instructions",
642 .dependencies = featureSet(&[_]Feature{}),513 .dependencies = sparseFeatureSet(&[_]Feature{}),
643 };514 };
644 result[@enumToInt(Feature.movbe)] = .{515 result[@enumToInt(Feature.movbe)] = .{
645 .index = @enumToInt(Feature.movbe),
646 .name = @tagName(Feature.movbe),
647 .llvm_name = "movbe",516 .llvm_name = "movbe",
648 .description = "Support MOVBE instruction",517 .description = "Support MOVBE instruction",
649 .dependencies = featureSet(&[_]Feature{}),518 .dependencies = sparseFeatureSet(&[_]Feature{}),
650 };519 };
651 result[@enumToInt(Feature.movdir64b)] = .{520 result[@enumToInt(Feature.movdir64b)] = .{
652 .index = @enumToInt(Feature.movdir64b),
653 .name = @tagName(Feature.movdir64b),
654 .llvm_name = "movdir64b",521 .llvm_name = "movdir64b",
655 .description = "Support movdir64b instruction",522 .description = "Support movdir64b instruction",
656 .dependencies = featureSet(&[_]Feature{}),523 .dependencies = sparseFeatureSet(&[_]Feature{}),
657 };524 };
658 result[@enumToInt(Feature.movdiri)] = .{525 result[@enumToInt(Feature.movdiri)] = .{
659 .index = @enumToInt(Feature.movdiri),
660 .name = @tagName(Feature.movdiri),
661 .llvm_name = "movdiri",526 .llvm_name = "movdiri",
662 .description = "Support movdiri instruction",527 .description = "Support movdiri instruction",
663 .dependencies = featureSet(&[_]Feature{}),528 .dependencies = sparseFeatureSet(&[_]Feature{}),
664 };529 };
665 result[@enumToInt(Feature.mpx)] = .{530 result[@enumToInt(Feature.mpx)] = .{
666 .index = @enumToInt(Feature.mpx),
667 .name = @tagName(Feature.mpx),
668 .llvm_name = "mpx",531 .llvm_name = "mpx",
669 .description = "Support MPX instructions",532 .description = "Support MPX instructions",
670 .dependencies = featureSet(&[_]Feature{}),533 .dependencies = sparseFeatureSet(&[_]Feature{}),
671 };534 };
672 result[@enumToInt(Feature.mwaitx)] = .{535 result[@enumToInt(Feature.mwaitx)] = .{
673 .index = @enumToInt(Feature.mwaitx),
674 .name = @tagName(Feature.mwaitx),
675 .llvm_name = "mwaitx",536 .llvm_name = "mwaitx",
676 .description = "Enable MONITORX/MWAITX timer functionality",537 .description = "Enable MONITORX/MWAITX timer functionality",
677 .dependencies = featureSet(&[_]Feature{}),538 .dependencies = sparseFeatureSet(&[_]Feature{}),
678 };539 };
679 result[@enumToInt(Feature.nopl)] = .{540 result[@enumToInt(Feature.nopl)] = .{
680 .index = @enumToInt(Feature.nopl),
681 .name = @tagName(Feature.nopl),
682 .llvm_name = "nopl",541 .llvm_name = "nopl",
683 .description = "Enable NOPL instruction",542 .description = "Enable NOPL instruction",
684 .dependencies = featureSet(&[_]Feature{}),543 .dependencies = sparseFeatureSet(&[_]Feature{}),
685 };544 };
686 result[@enumToInt(Feature.pad_short_functions)] = .{545 result[@enumToInt(Feature.pad_short_functions)] = .{
687 .index = @enumToInt(Feature.pad_short_functions),
688 .name = @tagName(Feature.pad_short_functions),
689 .llvm_name = "pad-short-functions",546 .llvm_name = "pad-short-functions",
690 .description = "Pad short functions",547 .description = "Pad short functions",
691 .dependencies = featureSet(&[_]Feature{}),548 .dependencies = sparseFeatureSet(&[_]Feature{}),
692 };549 };
693 result[@enumToInt(Feature.pclmul)] = .{550 result[@enumToInt(Feature.pclmul)] = .{
694 .index = @enumToInt(Feature.pclmul),
695 .name = @tagName(Feature.pclmul),
696 .llvm_name = "pclmul",551 .llvm_name = "pclmul",
697 .description = "Enable packed carry-less multiplication instructions",552 .description = "Enable packed carry-less multiplication instructions",
698 .dependencies = featureSet(&[_]Feature{553 .dependencies = sparseFeatureSet(&[_]Feature{
699 .sse2,554 .sse2,
700 }),555 }),
701 };556 };
702 result[@enumToInt(Feature.pconfig)] = .{557 result[@enumToInt(Feature.pconfig)] = .{
703 .index = @enumToInt(Feature.pconfig),
704 .name = @tagName(Feature.pconfig),
705 .llvm_name = "pconfig",558 .llvm_name = "pconfig",
706 .description = "platform configuration instruction",559 .description = "platform configuration instruction",
707 .dependencies = featureSet(&[_]Feature{}),560 .dependencies = sparseFeatureSet(&[_]Feature{}),
708 };561 };
709 result[@enumToInt(Feature.pku)] = .{562 result[@enumToInt(Feature.pku)] = .{
710 .index = @enumToInt(Feature.pku),
711 .name = @tagName(Feature.pku),
712 .llvm_name = "pku",563 .llvm_name = "pku",
713 .description = "Enable protection keys",564 .description = "Enable protection keys",
714 .dependencies = featureSet(&[_]Feature{}),565 .dependencies = sparseFeatureSet(&[_]Feature{}),
715 };566 };
716 result[@enumToInt(Feature.popcnt)] = .{567 result[@enumToInt(Feature.popcnt)] = .{
717 .index = @enumToInt(Feature.popcnt),
718 .name = @tagName(Feature.popcnt),
719 .llvm_name = "popcnt",568 .llvm_name = "popcnt",
720 .description = "Support POPCNT instruction",569 .description = "Support POPCNT instruction",
721 .dependencies = featureSet(&[_]Feature{}),570 .dependencies = sparseFeatureSet(&[_]Feature{}),
722 };571 };
723 result[@enumToInt(Feature.prefer_256_bit)] = .{572 result[@enumToInt(Feature.prefer_256_bit)] = .{
724 .index = @enumToInt(Feature.prefer_256_bit),
725 .name = @tagName(Feature.prefer_256_bit),
726 .llvm_name = "prefer-256-bit",573 .llvm_name = "prefer-256-bit",
727 .description = "Prefer 256-bit AVX instructions",574 .description = "Prefer 256-bit AVX instructions",
728 .dependencies = featureSet(&[_]Feature{}),575 .dependencies = sparseFeatureSet(&[_]Feature{}),
729 };576 };
730 result[@enumToInt(Feature.prefetchwt1)] = .{577 result[@enumToInt(Feature.prefetchwt1)] = .{
731 .index = @enumToInt(Feature.prefetchwt1),
732 .name = @tagName(Feature.prefetchwt1),
733 .llvm_name = "prefetchwt1",578 .llvm_name = "prefetchwt1",
734 .description = "Prefetch with Intent to Write and T1 Hint",579 .description = "Prefetch with Intent to Write and T1 Hint",
735 .dependencies = featureSet(&[_]Feature{}),580 .dependencies = sparseFeatureSet(&[_]Feature{}),
736 };581 };
737 result[@enumToInt(Feature.prfchw)] = .{582 result[@enumToInt(Feature.prfchw)] = .{
738 .index = @enumToInt(Feature.prfchw),
739 .name = @tagName(Feature.prfchw),
740 .llvm_name = "prfchw",583 .llvm_name = "prfchw",
741 .description = "Support PRFCHW instructions",584 .description = "Support PRFCHW instructions",
742 .dependencies = featureSet(&[_]Feature{}),585 .dependencies = sparseFeatureSet(&[_]Feature{}),
743 };586 };
744 result[@enumToInt(Feature.ptwrite)] = .{587 result[@enumToInt(Feature.ptwrite)] = .{
745 .index = @enumToInt(Feature.ptwrite),
746 .name = @tagName(Feature.ptwrite),
747 .llvm_name = "ptwrite",588 .llvm_name = "ptwrite",
748 .description = "Support ptwrite instruction",589 .description = "Support ptwrite instruction",
749 .dependencies = featureSet(&[_]Feature{}),590 .dependencies = sparseFeatureSet(&[_]Feature{}),
750 };591 };
751 result[@enumToInt(Feature.rdpid)] = .{592 result[@enumToInt(Feature.rdpid)] = .{
752 .index = @enumToInt(Feature.rdpid),
753 .name = @tagName(Feature.rdpid),
754 .llvm_name = "rdpid",593 .llvm_name = "rdpid",
755 .description = "Support RDPID instructions",594 .description = "Support RDPID instructions",
756 .dependencies = featureSet(&[_]Feature{}),595 .dependencies = sparseFeatureSet(&[_]Feature{}),
757 };596 };
758 result[@enumToInt(Feature.rdrnd)] = .{597 result[@enumToInt(Feature.rdrnd)] = .{
759 .index = @enumToInt(Feature.rdrnd),
760 .name = @tagName(Feature.rdrnd),
761 .llvm_name = "rdrnd",598 .llvm_name = "rdrnd",
762 .description = "Support RDRAND instruction",599 .description = "Support RDRAND instruction",
763 .dependencies = featureSet(&[_]Feature{}),600 .dependencies = sparseFeatureSet(&[_]Feature{}),
764 };601 };
765 result[@enumToInt(Feature.rdseed)] = .{602 result[@enumToInt(Feature.rdseed)] = .{
766 .index = @enumToInt(Feature.rdseed),
767 .name = @tagName(Feature.rdseed),
768 .llvm_name = "rdseed",603 .llvm_name = "rdseed",
769 .description = "Support RDSEED instruction",604 .description = "Support RDSEED instruction",
770 .dependencies = featureSet(&[_]Feature{}),605 .dependencies = sparseFeatureSet(&[_]Feature{}),
771 };606 };
772 result[@enumToInt(Feature.retpoline)] = .{607 result[@enumToInt(Feature.retpoline)] = .{
773 .index = @enumToInt(Feature.retpoline),
774 .name = @tagName(Feature.retpoline),
775 .llvm_name = "retpoline",608 .llvm_name = "retpoline",
776 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",609 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",
777 .dependencies = featureSet(&[_]Feature{610 .dependencies = sparseFeatureSet(&[_]Feature{
778 .retpoline_indirect_branches,611 .retpoline_indirect_branches,
779 .retpoline_indirect_calls,612 .retpoline_indirect_calls,
780 }),613 }),
781 };614 };
782 result[@enumToInt(Feature.retpoline_external_thunk)] = .{615 result[@enumToInt(Feature.retpoline_external_thunk)] = .{
783 .index = @enumToInt(Feature.retpoline_external_thunk),
784 .name = @tagName(Feature.retpoline_external_thunk),
785 .llvm_name = "retpoline-external-thunk",616 .llvm_name = "retpoline-external-thunk",
786 .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",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",
787 .dependencies = featureSet(&[_]Feature{618 .dependencies = sparseFeatureSet(&[_]Feature{
788 .retpoline_indirect_calls,619 .retpoline_indirect_calls,
789 }),620 }),
790 };621 };
791 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{622 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{
792 .index = @enumToInt(Feature.retpoline_indirect_branches),
793 .name = @tagName(Feature.retpoline_indirect_branches),
794 .llvm_name = "retpoline-indirect-branches",623 .llvm_name = "retpoline-indirect-branches",
795 .description = "Remove speculation of indirect branches from the generated code",624 .description = "Remove speculation of indirect branches from the generated code",
796 .dependencies = featureSet(&[_]Feature{}),625 .dependencies = sparseFeatureSet(&[_]Feature{}),
797 };626 };
798 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{627 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{
799 .index = @enumToInt(Feature.retpoline_indirect_calls),
800 .name = @tagName(Feature.retpoline_indirect_calls),
801 .llvm_name = "retpoline-indirect-calls",628 .llvm_name = "retpoline-indirect-calls",
802 .description = "Remove speculation of indirect calls from the generated code",629 .description = "Remove speculation of indirect calls from the generated code",
803 .dependencies = featureSet(&[_]Feature{}),630 .dependencies = sparseFeatureSet(&[_]Feature{}),
804 };631 };
805 result[@enumToInt(Feature.rtm)] = .{632 result[@enumToInt(Feature.rtm)] = .{
806 .index = @enumToInt(Feature.rtm),
807 .name = @tagName(Feature.rtm),
808 .llvm_name = "rtm",633 .llvm_name = "rtm",
809 .description = "Support RTM instructions",634 .description = "Support RTM instructions",
810 .dependencies = featureSet(&[_]Feature{}),635 .dependencies = sparseFeatureSet(&[_]Feature{}),
811 };636 };
812 result[@enumToInt(Feature.sahf)] = .{637 result[@enumToInt(Feature.sahf)] = .{
813 .index = @enumToInt(Feature.sahf),
814 .name = @tagName(Feature.sahf),
815 .llvm_name = "sahf",638 .llvm_name = "sahf",
816 .description = "Support LAHF and SAHF instructions",639 .description = "Support LAHF and SAHF instructions",
817 .dependencies = featureSet(&[_]Feature{}),640 .dependencies = sparseFeatureSet(&[_]Feature{}),
818 };641 };
819 result[@enumToInt(Feature.sgx)] = .{642 result[@enumToInt(Feature.sgx)] = .{
820 .index = @enumToInt(Feature.sgx),
821 .name = @tagName(Feature.sgx),
822 .llvm_name = "sgx",643 .llvm_name = "sgx",
823 .description = "Enable Software Guard Extensions",644 .description = "Enable Software Guard Extensions",
824 .dependencies = featureSet(&[_]Feature{}),645 .dependencies = sparseFeatureSet(&[_]Feature{}),
825 };646 };
826 result[@enumToInt(Feature.sha)] = .{647 result[@enumToInt(Feature.sha)] = .{
827 .index = @enumToInt(Feature.sha),
828 .name = @tagName(Feature.sha),
829 .llvm_name = "sha",648 .llvm_name = "sha",
830 .description = "Enable SHA instructions",649 .description = "Enable SHA instructions",
831 .dependencies = featureSet(&[_]Feature{650 .dependencies = sparseFeatureSet(&[_]Feature{
832 .sse2,651 .sse2,
833 }),652 }),
834 };653 };
835 result[@enumToInt(Feature.shstk)] = .{654 result[@enumToInt(Feature.shstk)] = .{
836 .index = @enumToInt(Feature.shstk),
837 .name = @tagName(Feature.shstk),
838 .llvm_name = "shstk",655 .llvm_name = "shstk",
839 .description = "Support CET Shadow-Stack instructions",656 .description = "Support CET Shadow-Stack instructions",
840 .dependencies = featureSet(&[_]Feature{}),657 .dependencies = sparseFeatureSet(&[_]Feature{}),
841 };658 };
842 result[@enumToInt(Feature.slow_3ops_lea)] = .{659 result[@enumToInt(Feature.slow_3ops_lea)] = .{
843 .index = @enumToInt(Feature.slow_3ops_lea),
844 .name = @tagName(Feature.slow_3ops_lea),
845 .llvm_name = "slow-3ops-lea",660 .llvm_name = "slow-3ops-lea",
846 .description = "LEA instruction with 3 ops or certain registers is slow",661 .description = "LEA instruction with 3 ops or certain registers is slow",
847 .dependencies = featureSet(&[_]Feature{}),662 .dependencies = sparseFeatureSet(&[_]Feature{}),
848 };663 };
849 result[@enumToInt(Feature.slow_incdec)] = .{664 result[@enumToInt(Feature.slow_incdec)] = .{
850 .index = @enumToInt(Feature.slow_incdec),
851 .name = @tagName(Feature.slow_incdec),
852 .llvm_name = "slow-incdec",665 .llvm_name = "slow-incdec",
853 .description = "INC and DEC instructions are slower than ADD and SUB",666 .description = "INC and DEC instructions are slower than ADD and SUB",
854 .dependencies = featureSet(&[_]Feature{}),667 .dependencies = sparseFeatureSet(&[_]Feature{}),
855 };668 };
856 result[@enumToInt(Feature.slow_lea)] = .{669 result[@enumToInt(Feature.slow_lea)] = .{
857 .index = @enumToInt(Feature.slow_lea),
858 .name = @tagName(Feature.slow_lea),
859 .llvm_name = "slow-lea",670 .llvm_name = "slow-lea",
860 .description = "LEA instruction with certain arguments is slow",671 .description = "LEA instruction with certain arguments is slow",
861 .dependencies = featureSet(&[_]Feature{}),672 .dependencies = sparseFeatureSet(&[_]Feature{}),
862 };673 };
863 result[@enumToInt(Feature.slow_pmaddwd)] = .{674 result[@enumToInt(Feature.slow_pmaddwd)] = .{
864 .index = @enumToInt(Feature.slow_pmaddwd),
865 .name = @tagName(Feature.slow_pmaddwd),
866 .llvm_name = "slow-pmaddwd",675 .llvm_name = "slow-pmaddwd",
867 .description = "PMADDWD is slower than PMULLD",676 .description = "PMADDWD is slower than PMULLD",
868 .dependencies = featureSet(&[_]Feature{}),677 .dependencies = sparseFeatureSet(&[_]Feature{}),
869 };678 };
870 result[@enumToInt(Feature.slow_pmulld)] = .{679 result[@enumToInt(Feature.slow_pmulld)] = .{
871 .index = @enumToInt(Feature.slow_pmulld),
872 .name = @tagName(Feature.slow_pmulld),
873 .llvm_name = "slow-pmulld",680 .llvm_name = "slow-pmulld",
874 .description = "PMULLD instruction is slow",681 .description = "PMULLD instruction is slow",
875 .dependencies = featureSet(&[_]Feature{}),682 .dependencies = sparseFeatureSet(&[_]Feature{}),
876 };683 };
877 result[@enumToInt(Feature.slow_shld)] = .{684 result[@enumToInt(Feature.slow_shld)] = .{
878 .index = @enumToInt(Feature.slow_shld),
879 .name = @tagName(Feature.slow_shld),
880 .llvm_name = "slow-shld",685 .llvm_name = "slow-shld",
881 .description = "SHLD instruction is slow",686 .description = "SHLD instruction is slow",
882 .dependencies = featureSet(&[_]Feature{}),687 .dependencies = sparseFeatureSet(&[_]Feature{}),
883 };688 };
884 result[@enumToInt(Feature.slow_two_mem_ops)] = .{689 result[@enumToInt(Feature.slow_two_mem_ops)] = .{
885 .index = @enumToInt(Feature.slow_two_mem_ops),
886 .name = @tagName(Feature.slow_two_mem_ops),
887 .llvm_name = "slow-two-mem-ops",690 .llvm_name = "slow-two-mem-ops",
888 .description = "Two memory operand instructions are slow",691 .description = "Two memory operand instructions are slow",
889 .dependencies = featureSet(&[_]Feature{}),692 .dependencies = sparseFeatureSet(&[_]Feature{}),
890 };693 };
891 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{694 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{
892 .index = @enumToInt(Feature.slow_unaligned_mem_16),
893 .name = @tagName(Feature.slow_unaligned_mem_16),
894 .llvm_name = "slow-unaligned-mem-16",695 .llvm_name = "slow-unaligned-mem-16",
895 .description = "Slow unaligned 16-byte memory access",696 .description = "Slow unaligned 16-byte memory access",
896 .dependencies = featureSet(&[_]Feature{}),697 .dependencies = sparseFeatureSet(&[_]Feature{}),
897 };698 };
898 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{699 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{
899 .index = @enumToInt(Feature.slow_unaligned_mem_32),
900 .name = @tagName(Feature.slow_unaligned_mem_32),
901 .llvm_name = "slow-unaligned-mem-32",700 .llvm_name = "slow-unaligned-mem-32",
902 .description = "Slow unaligned 32-byte memory access",701 .description = "Slow unaligned 32-byte memory access",
903 .dependencies = featureSet(&[_]Feature{}),702 .dependencies = sparseFeatureSet(&[_]Feature{}),
904 };703 };
905 result[@enumToInt(Feature.soft_float)] = .{704 result[@enumToInt(Feature.soft_float)] = .{
906 .index = @enumToInt(Feature.soft_float),
907 .name = @tagName(Feature.soft_float),
908 .llvm_name = "soft-float",705 .llvm_name = "soft-float",
909 .description = "Use software floating point features",706 .description = "Use software floating point features",
910 .dependencies = featureSet(&[_]Feature{}),707 .dependencies = sparseFeatureSet(&[_]Feature{}),
911 };708 };
912 result[@enumToInt(Feature.sse)] = .{709 result[@enumToInt(Feature.sse)] = .{
913 .index = @enumToInt(Feature.sse),
914 .name = @tagName(Feature.sse),
915 .llvm_name = "sse",710 .llvm_name = "sse",
916 .description = "Enable SSE instructions",711 .description = "Enable SSE instructions",
917 .dependencies = featureSet(&[_]Feature{}),712 .dependencies = sparseFeatureSet(&[_]Feature{}),
918 };713 };
919 result[@enumToInt(Feature.sse_unaligned_mem)] = .{714 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
920 .index = @enumToInt(Feature.sse_unaligned_mem),
921 .name = @tagName(Feature.sse_unaligned_mem),
922 .llvm_name = "sse-unaligned-mem",715 .llvm_name = "sse-unaligned-mem",
923 .description = "Allow unaligned memory operands with SSE instructions",716 .description = "Allow unaligned memory operands with SSE instructions",
924 .dependencies = featureSet(&[_]Feature{}),717 .dependencies = sparseFeatureSet(&[_]Feature{}),
925 };718 };
926 result[@enumToInt(Feature.sse2)] = .{719 result[@enumToInt(Feature.sse2)] = .{
927 .index = @enumToInt(Feature.sse2),
928 .name = @tagName(Feature.sse2),
929 .llvm_name = "sse2",720 .llvm_name = "sse2",
930 .description = "Enable SSE2 instructions",721 .description = "Enable SSE2 instructions",
931 .dependencies = featureSet(&[_]Feature{722 .dependencies = sparseFeatureSet(&[_]Feature{
932 .sse,723 .sse,
933 }),724 }),
934 };725 };
935 result[@enumToInt(Feature.sse3)] = .{726 result[@enumToInt(Feature.sse3)] = .{
936 .index = @enumToInt(Feature.sse3),
937 .name = @tagName(Feature.sse3),
938 .llvm_name = "sse3",727 .llvm_name = "sse3",
939 .description = "Enable SSE3 instructions",728 .description = "Enable SSE3 instructions",
940 .dependencies = featureSet(&[_]Feature{729 .dependencies = sparseFeatureSet(&[_]Feature{
941 .sse2,730 .sse2,
942 }),731 }),
943 };732 };
944 result[@enumToInt(Feature.sse4_1)] = .{733 result[@enumToInt(Feature.sse4_1)] = .{
945 .index = @enumToInt(Feature.sse4_1),
946 .name = @tagName(Feature.sse4_1),
947 .llvm_name = "sse4.1",734 .llvm_name = "sse4.1",
948 .description = "Enable SSE 4.1 instructions",735 .description = "Enable SSE 4.1 instructions",
949 .dependencies = featureSet(&[_]Feature{736 .dependencies = sparseFeatureSet(&[_]Feature{
950 .ssse3,737 .ssse3,
951 }),738 }),
952 };739 };
953 result[@enumToInt(Feature.sse4_2)] = .{740 result[@enumToInt(Feature.sse4_2)] = .{
954 .index = @enumToInt(Feature.sse4_2),
955 .name = @tagName(Feature.sse4_2),
956 .llvm_name = "sse4.2",741 .llvm_name = "sse4.2",
957 .description = "Enable SSE 4.2 instructions",742 .description = "Enable SSE 4.2 instructions",
958 .dependencies = featureSet(&[_]Feature{743 .dependencies = sparseFeatureSet(&[_]Feature{
959 .sse4_1,744 .sse4_1,
960 }),745 }),
961 };746 };
962 result[@enumToInt(Feature.sse4a)] = .{747 result[@enumToInt(Feature.sse4a)] = .{
963 .index = @enumToInt(Feature.sse4a),
964 .name = @tagName(Feature.sse4a),
965 .llvm_name = "sse4a",748 .llvm_name = "sse4a",
966 .description = "Support SSE 4a instructions",749 .description = "Support SSE 4a instructions",
967 .dependencies = featureSet(&[_]Feature{750 .dependencies = sparseFeatureSet(&[_]Feature{
968 .sse3,751 .sse3,
969 }),752 }),
970 };753 };
971 result[@enumToInt(Feature.ssse3)] = .{754 result[@enumToInt(Feature.ssse3)] = .{
972 .index = @enumToInt(Feature.ssse3),
973 .name = @tagName(Feature.ssse3),
974 .llvm_name = "ssse3",755 .llvm_name = "ssse3",
975 .description = "Enable SSSE3 instructions",756 .description = "Enable SSSE3 instructions",
976 .dependencies = featureSet(&[_]Feature{757 .dependencies = sparseFeatureSet(&[_]Feature{
977 .sse3,758 .sse3,
978 }),759 }),
979 };760 };
980 result[@enumToInt(Feature.tbm)] = .{761 result[@enumToInt(Feature.tbm)] = .{
981 .index = @enumToInt(Feature.tbm),
982 .name = @tagName(Feature.tbm),
983 .llvm_name = "tbm",762 .llvm_name = "tbm",
984 .description = "Enable TBM instructions",763 .description = "Enable TBM instructions",
985 .dependencies = featureSet(&[_]Feature{}),764 .dependencies = sparseFeatureSet(&[_]Feature{}),
986 };765 };
987 result[@enumToInt(Feature.vaes)] = .{766 result[@enumToInt(Feature.vaes)] = .{
988 .index = @enumToInt(Feature.vaes),
989 .name = @tagName(Feature.vaes),
990 .llvm_name = "vaes",767 .llvm_name = "vaes",
991 .description = "Promote selected AES instructions to AVX512/AVX registers",768 .description = "Promote selected AES instructions to AVX512/AVX registers",
992 .dependencies = featureSet(&[_]Feature{769 .dependencies = sparseFeatureSet(&[_]Feature{
993 .aes,770 .aes,
994 .avx,771 .avx,
995 }),772 }),
996 };773 };
997 result[@enumToInt(Feature.vpclmulqdq)] = .{774 result[@enumToInt(Feature.vpclmulqdq)] = .{
998 .index = @enumToInt(Feature.vpclmulqdq),
999 .name = @tagName(Feature.vpclmulqdq),
1000 .llvm_name = "vpclmulqdq",775 .llvm_name = "vpclmulqdq",
1001 .description = "Enable vpclmulqdq instructions",776 .description = "Enable vpclmulqdq instructions",
1002 .dependencies = featureSet(&[_]Feature{777 .dependencies = sparseFeatureSet(&[_]Feature{
1003 .avx,778 .avx,
1004 .pclmul,779 .pclmul,
1005 }),780 }),
1006 };781 };
1007 result[@enumToInt(Feature.waitpkg)] = .{782 result[@enumToInt(Feature.waitpkg)] = .{
1008 .index = @enumToInt(Feature.waitpkg),
1009 .name = @tagName(Feature.waitpkg),
1010 .llvm_name = "waitpkg",783 .llvm_name = "waitpkg",
1011 .description = "Wait and pause enhancements",784 .description = "Wait and pause enhancements",
1012 .dependencies = featureSet(&[_]Feature{}),785 .dependencies = sparseFeatureSet(&[_]Feature{}),
1013 };786 };
1014 result[@enumToInt(Feature.wbnoinvd)] = .{787 result[@enumToInt(Feature.wbnoinvd)] = .{
1015 .index = @enumToInt(Feature.wbnoinvd),
1016 .name = @tagName(Feature.wbnoinvd),
1017 .llvm_name = "wbnoinvd",788 .llvm_name = "wbnoinvd",
1018 .description = "Write Back No Invalidate",789 .description = "Write Back No Invalidate",
1019 .dependencies = featureSet(&[_]Feature{}),790 .dependencies = sparseFeatureSet(&[_]Feature{}),
1020 };791 };
1021 result[@enumToInt(Feature.x87)] = .{792 result[@enumToInt(Feature.x87)] = .{
1022 .index = @enumToInt(Feature.x87),
1023 .name = @tagName(Feature.x87),
1024 .llvm_name = "x87",793 .llvm_name = "x87",
1025 .description = "Enable X87 float instructions",794 .description = "Enable X87 float instructions",
1026 .dependencies = featureSet(&[_]Feature{}),795 .dependencies = sparseFeatureSet(&[_]Feature{}),
1027 };796 };
1028 result[@enumToInt(Feature.xop)] = .{797 result[@enumToInt(Feature.xop)] = .{
1029 .index = @enumToInt(Feature.xop),
1030 .name = @tagName(Feature.xop),
1031 .llvm_name = "xop",798 .llvm_name = "xop",
1032 .description = "Enable XOP instructions",799 .description = "Enable XOP instructions",
1033 .dependencies = featureSet(&[_]Feature{800 .dependencies = sparseFeatureSet(&[_]Feature{
1034 .fma4,801 .fma4,
1035 }),802 }),
1036 };803 };
1037 result[@enumToInt(Feature.xsave)] = .{804 result[@enumToInt(Feature.xsave)] = .{
1038 .index = @enumToInt(Feature.xsave),
1039 .name = @tagName(Feature.xsave),
1040 .llvm_name = "xsave",805 .llvm_name = "xsave",
1041 .description = "Support xsave instructions",806 .description = "Support xsave instructions",
1042 .dependencies = featureSet(&[_]Feature{}),807 .dependencies = sparseFeatureSet(&[_]Feature{}),
1043 };808 };
1044 result[@enumToInt(Feature.xsavec)] = .{809 result[@enumToInt(Feature.xsavec)] = .{
1045 .index = @enumToInt(Feature.xsavec),
1046 .name = @tagName(Feature.xsavec),
1047 .llvm_name = "xsavec",810 .llvm_name = "xsavec",
1048 .description = "Support xsavec instructions",811 .description = "Support xsavec instructions",
1049 .dependencies = featureSet(&[_]Feature{}),812 .dependencies = sparseFeatureSet(&[_]Feature{}),
1050 };813 };
1051 result[@enumToInt(Feature.xsaveopt)] = .{814 result[@enumToInt(Feature.xsaveopt)] = .{
1052 .index = @enumToInt(Feature.xsaveopt),
1053 .name = @tagName(Feature.xsaveopt),
1054 .llvm_name = "xsaveopt",815 .llvm_name = "xsaveopt",
1055 .description = "Support xsaveopt instructions",816 .description = "Support xsaveopt instructions",
1056 .dependencies = featureSet(&[_]Feature{}),817 .dependencies = sparseFeatureSet(&[_]Feature{}),
1057 };818 };
1058 result[@enumToInt(Feature.xsaves)] = .{819 result[@enumToInt(Feature.xsaves)] = .{
1059 .index = @enumToInt(Feature.xsaves),
1060 .name = @tagName(Feature.xsaves),
1061 .llvm_name = "xsaves",820 .llvm_name = "xsaves",
1062 .description = "Support xsaves instructions",821 .description = "Support xsaves instructions",
1063 .dependencies = featureSet(&[_]Feature{}),822 .dependencies = sparseFeatureSet(&[_]Feature{}),
1064 };823 };
824 const ti = @typeInfo(Feature);
825 for (result) |*elem, i| {
826 elem.index = i;
827 elem.name = ti.Enum.fields[i].name;
828 elem.dependencies.initAsDependencies(i, &result);
829 }
1065 break :blk result;830 break :blk result;
1066};831};
1067832
...@@ -1069,7 +834,7 @@ pub const cpu = struct {...@@ -1069,7 +834,7 @@ pub const cpu = struct {
1069 pub const amdfam10 = Cpu{834 pub const amdfam10 = Cpu{
1070 .name = "amdfam10",835 .name = "amdfam10",
1071 .llvm_name = "amdfam10",836 .llvm_name = "amdfam10",
1072 .features = featureSet(&[_]Feature{837 .features = featureSet(&all_features, &[_]Feature{
1073 .@"3dnowa",838 .@"3dnowa",
1074 .@"64bit",839 .@"64bit",
1075 .cmov,840 .cmov,
...@@ -1089,7 +854,7 @@ pub const cpu = struct {...@@ -1089,7 +854,7 @@ pub const cpu = struct {
1089 pub const athlon = Cpu{854 pub const athlon = Cpu{
1090 .name = "athlon",855 .name = "athlon",
1091 .llvm_name = "athlon",856 .llvm_name = "athlon",
1092 .features = featureSet(&[_]Feature{857 .features = featureSet(&all_features, &[_]Feature{
1093 .@"3dnowa",858 .@"3dnowa",
1094 .cmov,859 .cmov,
1095 .cx8,860 .cx8,
...@@ -1102,7 +867,7 @@ pub const cpu = struct {...@@ -1102,7 +867,7 @@ pub const cpu = struct {
1102 pub const athlon_4 = Cpu{867 pub const athlon_4 = Cpu{
1103 .name = "athlon_4",868 .name = "athlon_4",
1104 .llvm_name = "athlon-4",869 .llvm_name = "athlon-4",
1105 .features = featureSet(&[_]Feature{870 .features = featureSet(&all_features, &[_]Feature{
1106 .@"3dnowa",871 .@"3dnowa",
1107 .cmov,872 .cmov,
1108 .cx8,873 .cx8,
...@@ -1117,7 +882,7 @@ pub const cpu = struct {...@@ -1117,7 +882,7 @@ pub const cpu = struct {
1117 pub const athlon_fx = Cpu{882 pub const athlon_fx = Cpu{
1118 .name = "athlon_fx",883 .name = "athlon_fx",
1119 .llvm_name = "athlon-fx",884 .llvm_name = "athlon-fx",
1120 .features = featureSet(&[_]Feature{885 .features = featureSet(&all_features, &[_]Feature{
1121 .@"3dnowa",886 .@"3dnowa",
1122 .@"64bit",887 .@"64bit",
1123 .cmov,888 .cmov,
...@@ -1134,7 +899,7 @@ pub const cpu = struct {...@@ -1134,7 +899,7 @@ pub const cpu = struct {
1134 pub const athlon_mp = Cpu{899 pub const athlon_mp = Cpu{
1135 .name = "athlon_mp",900 .name = "athlon_mp",
1136 .llvm_name = "athlon-mp",901 .llvm_name = "athlon-mp",
1137 .features = featureSet(&[_]Feature{902 .features = featureSet(&all_features, &[_]Feature{
1138 .@"3dnowa",903 .@"3dnowa",
1139 .cmov,904 .cmov,
1140 .cx8,905 .cx8,
...@@ -1149,7 +914,7 @@ pub const cpu = struct {...@@ -1149,7 +914,7 @@ pub const cpu = struct {
1149 pub const athlon_tbird = Cpu{914 pub const athlon_tbird = Cpu{
1150 .name = "athlon_tbird",915 .name = "athlon_tbird",
1151 .llvm_name = "athlon-tbird",916 .llvm_name = "athlon-tbird",
1152 .features = featureSet(&[_]Feature{917 .features = featureSet(&all_features, &[_]Feature{
1153 .@"3dnowa",918 .@"3dnowa",
1154 .cmov,919 .cmov,
1155 .cx8,920 .cx8,
...@@ -1162,7 +927,7 @@ pub const cpu = struct {...@@ -1162,7 +927,7 @@ pub const cpu = struct {
1162 pub const athlon_xp = Cpu{927 pub const athlon_xp = Cpu{
1163 .name = "athlon_xp",928 .name = "athlon_xp",
1164 .llvm_name = "athlon-xp",929 .llvm_name = "athlon-xp",
1165 .features = featureSet(&[_]Feature{930 .features = featureSet(&all_features, &[_]Feature{
1166 .@"3dnowa",931 .@"3dnowa",
1167 .cmov,932 .cmov,
1168 .cx8,933 .cx8,
...@@ -1177,7 +942,7 @@ pub const cpu = struct {...@@ -1177,7 +942,7 @@ pub const cpu = struct {
1177 pub const athlon64 = Cpu{942 pub const athlon64 = Cpu{
1178 .name = "athlon64",943 .name = "athlon64",
1179 .llvm_name = "athlon64",944 .llvm_name = "athlon64",
1180 .features = featureSet(&[_]Feature{945 .features = featureSet(&all_features, &[_]Feature{
1181 .@"3dnowa",946 .@"3dnowa",
1182 .@"64bit",947 .@"64bit",
1183 .cmov,948 .cmov,
...@@ -1194,7 +959,7 @@ pub const cpu = struct {...@@ -1194,7 +959,7 @@ pub const cpu = struct {
1194 pub const athlon64_sse3 = Cpu{959 pub const athlon64_sse3 = Cpu{
1195 .name = "athlon64_sse3",960 .name = "athlon64_sse3",
1196 .llvm_name = "athlon64-sse3",961 .llvm_name = "athlon64-sse3",
1197 .features = featureSet(&[_]Feature{962 .features = featureSet(&all_features, &[_]Feature{
1198 .@"3dnowa",963 .@"3dnowa",
1199 .@"64bit",964 .@"64bit",
1200 .cmov,965 .cmov,
...@@ -1212,7 +977,7 @@ pub const cpu = struct {...@@ -1212,7 +977,7 @@ pub const cpu = struct {
1212 pub const atom = Cpu{977 pub const atom = Cpu{
1213 .name = "atom",978 .name = "atom",
1214 .llvm_name = "atom",979 .llvm_name = "atom",
1215 .features = featureSet(&[_]Feature{980 .features = featureSet(&all_features, &[_]Feature{
1216 .@"64bit",981 .@"64bit",
1217 .cmov,982 .cmov,
1218 .cx16,983 .cx16,
...@@ -1236,7 +1001,7 @@ pub const cpu = struct {...@@ -1236,7 +1001,7 @@ pub const cpu = struct {
1236 pub const barcelona = Cpu{1001 pub const barcelona = Cpu{
1237 .name = "barcelona",1002 .name = "barcelona",
1238 .llvm_name = "barcelona",1003 .llvm_name = "barcelona",
1239 .features = featureSet(&[_]Feature{1004 .features = featureSet(&all_features, &[_]Feature{
1240 .@"3dnowa",1005 .@"3dnowa",
1241 .@"64bit",1006 .@"64bit",
1242 .cmov,1007 .cmov,
...@@ -1256,7 +1021,7 @@ pub const cpu = struct {...@@ -1256,7 +1021,7 @@ pub const cpu = struct {
1256 pub const bdver1 = Cpu{1021 pub const bdver1 = Cpu{
1257 .name = "bdver1",1022 .name = "bdver1",
1258 .llvm_name = "bdver1",1023 .llvm_name = "bdver1",
1259 .features = featureSet(&[_]Feature{1024 .features = featureSet(&all_features, &[_]Feature{
1260 .@"64bit",1025 .@"64bit",
1261 .aes,1026 .aes,
1262 .branchfusion,1027 .branchfusion,
...@@ -1283,7 +1048,7 @@ pub const cpu = struct {...@@ -1283,7 +1048,7 @@ pub const cpu = struct {
1283 pub const bdver2 = Cpu{1048 pub const bdver2 = Cpu{
1284 .name = "bdver2",1049 .name = "bdver2",
1285 .llvm_name = "bdver2",1050 .llvm_name = "bdver2",
1286 .features = featureSet(&[_]Feature{1051 .features = featureSet(&all_features, &[_]Feature{
1287 .@"64bit",1052 .@"64bit",
1288 .aes,1053 .aes,
1289 .bmi,1054 .bmi,
...@@ -1315,7 +1080,7 @@ pub const cpu = struct {...@@ -1315,7 +1080,7 @@ pub const cpu = struct {
1315 pub const bdver3 = Cpu{1080 pub const bdver3 = Cpu{
1316 .name = "bdver3",1081 .name = "bdver3",
1317 .llvm_name = "bdver3",1082 .llvm_name = "bdver3",
1318 .features = featureSet(&[_]Feature{1083 .features = featureSet(&all_features, &[_]Feature{
1319 .@"64bit",1084 .@"64bit",
1320 .aes,1085 .aes,
1321 .bmi,1086 .bmi,
...@@ -1349,7 +1114,7 @@ pub const cpu = struct {...@@ -1349,7 +1114,7 @@ pub const cpu = struct {
1349 pub const bdver4 = Cpu{1114 pub const bdver4 = Cpu{
1350 .name = "bdver4",1115 .name = "bdver4",
1351 .llvm_name = "bdver4",1116 .llvm_name = "bdver4",
1352 .features = featureSet(&[_]Feature{1117 .features = featureSet(&all_features, &[_]Feature{
1353 .@"64bit",1118 .@"64bit",
1354 .aes,1119 .aes,
1355 .avx2,1120 .avx2,
...@@ -1386,7 +1151,7 @@ pub const cpu = struct {...@@ -1386,7 +1151,7 @@ pub const cpu = struct {
1386 pub const bonnell = Cpu{1151 pub const bonnell = Cpu{
1387 .name = "bonnell",1152 .name = "bonnell",
1388 .llvm_name = "bonnell",1153 .llvm_name = "bonnell",
1389 .features = featureSet(&[_]Feature{1154 .features = featureSet(&all_features, &[_]Feature{
1390 .@"64bit",1155 .@"64bit",
1391 .cmov,1156 .cmov,
1392 .cx16,1157 .cx16,
...@@ -1410,7 +1175,7 @@ pub const cpu = struct {...@@ -1410,7 +1175,7 @@ pub const cpu = struct {
1410 pub const broadwell = Cpu{1175 pub const broadwell = Cpu{
1411 .name = "broadwell",1176 .name = "broadwell",
1412 .llvm_name = "broadwell",1177 .llvm_name = "broadwell",
1413 .features = featureSet(&[_]Feature{1178 .features = featureSet(&all_features, &[_]Feature{
1414 .@"64bit",1179 .@"64bit",
1415 .adx,1180 .adx,
1416 .avx,1181 .avx,
...@@ -1454,7 +1219,7 @@ pub const cpu = struct {...@@ -1454,7 +1219,7 @@ pub const cpu = struct {
1454 pub const btver1 = Cpu{1219 pub const btver1 = Cpu{
1455 .name = "btver1",1220 .name = "btver1",
1456 .llvm_name = "btver1",1221 .llvm_name = "btver1",
1457 .features = featureSet(&[_]Feature{1222 .features = featureSet(&all_features, &[_]Feature{
1458 .@"64bit",1223 .@"64bit",
1459 .cmov,1224 .cmov,
1460 .cx16,1225 .cx16,
...@@ -1478,7 +1243,7 @@ pub const cpu = struct {...@@ -1478,7 +1243,7 @@ pub const cpu = struct {
1478 pub const btver2 = Cpu{1243 pub const btver2 = Cpu{
1479 .name = "btver2",1244 .name = "btver2",
1480 .llvm_name = "btver2",1245 .llvm_name = "btver2",
1481 .features = featureSet(&[_]Feature{1246 .features = featureSet(&all_features, &[_]Feature{
1482 .@"64bit",1247 .@"64bit",
1483 .aes,1248 .aes,
1484 .avx,1249 .avx,
...@@ -1514,7 +1279,7 @@ pub const cpu = struct {...@@ -1514,7 +1279,7 @@ pub const cpu = struct {
1514 pub const c3 = Cpu{1279 pub const c3 = Cpu{
1515 .name = "c3",1280 .name = "c3",
1516 .llvm_name = "c3",1281 .llvm_name = "c3",
1517 .features = featureSet(&[_]Feature{1282 .features = featureSet(&all_features, &[_]Feature{
1518 .@"3dnow",1283 .@"3dnow",
1519 .slow_unaligned_mem_16,1284 .slow_unaligned_mem_16,
1520 .x87,1285 .x87,
...@@ -1523,7 +1288,7 @@ pub const cpu = struct {...@@ -1523,7 +1288,7 @@ pub const cpu = struct {
1523 pub const c3_2 = Cpu{1288 pub const c3_2 = Cpu{
1524 .name = "c3_2",1289 .name = "c3_2",
1525 .llvm_name = "c3-2",1290 .llvm_name = "c3-2",
1526 .features = featureSet(&[_]Feature{1291 .features = featureSet(&all_features, &[_]Feature{
1527 .cmov,1292 .cmov,
1528 .cx8,1293 .cx8,
1529 .fxsr,1294 .fxsr,
...@@ -1536,7 +1301,7 @@ pub const cpu = struct {...@@ -1536,7 +1301,7 @@ pub const cpu = struct {
1536 pub const cannonlake = Cpu{1301 pub const cannonlake = Cpu{
1537 .name = "cannonlake",1302 .name = "cannonlake",
1538 .llvm_name = "cannonlake",1303 .llvm_name = "cannonlake",
1539 .features = featureSet(&[_]Feature{1304 .features = featureSet(&all_features, &[_]Feature{
1540 .@"64bit",1305 .@"64bit",
1541 .adx,1306 .adx,
1542 .aes,1307 .aes,
...@@ -1595,7 +1360,7 @@ pub const cpu = struct {...@@ -1595,7 +1360,7 @@ pub const cpu = struct {
1595 pub const cascadelake = Cpu{1360 pub const cascadelake = Cpu{
1596 .name = "cascadelake",1361 .name = "cascadelake",
1597 .llvm_name = "cascadelake",1362 .llvm_name = "cascadelake",
1598 .features = featureSet(&[_]Feature{1363 .features = featureSet(&all_features, &[_]Feature{
1599 .@"64bit",1364 .@"64bit",
1600 .adx,1365 .adx,
1601 .aes,1366 .aes,
...@@ -1653,7 +1418,7 @@ pub const cpu = struct {...@@ -1653,7 +1418,7 @@ pub const cpu = struct {
1653 pub const cooperlake = Cpu{1418 pub const cooperlake = Cpu{
1654 .name = "cooperlake",1419 .name = "cooperlake",
1655 .llvm_name = "cooperlake",1420 .llvm_name = "cooperlake",
1656 .features = featureSet(&[_]Feature{1421 .features = featureSet(&all_features, &[_]Feature{
1657 .@"64bit",1422 .@"64bit",
1658 .adx,1423 .adx,
1659 .aes,1424 .aes,
...@@ -1712,7 +1477,7 @@ pub const cpu = struct {...@@ -1712,7 +1477,7 @@ pub const cpu = struct {
1712 pub const core_avx_i = Cpu{1477 pub const core_avx_i = Cpu{
1713 .name = "core_avx_i",1478 .name = "core_avx_i",
1714 .llvm_name = "core-avx-i",1479 .llvm_name = "core-avx-i",
1715 .features = featureSet(&[_]Feature{1480 .features = featureSet(&all_features, &[_]Feature{
1716 .@"64bit",1481 .@"64bit",
1717 .avx,1482 .avx,
1718 .cmov,1483 .cmov,
...@@ -1744,7 +1509,7 @@ pub const cpu = struct {...@@ -1744,7 +1509,7 @@ pub const cpu = struct {
1744 pub const core_avx2 = Cpu{1509 pub const core_avx2 = Cpu{
1745 .name = "core_avx2",1510 .name = "core_avx2",
1746 .llvm_name = "core-avx2",1511 .llvm_name = "core-avx2",
1747 .features = featureSet(&[_]Feature{1512 .features = featureSet(&all_features, &[_]Feature{
1748 .@"64bit",1513 .@"64bit",
1749 .avx,1514 .avx,
1750 .avx2,1515 .avx2,
...@@ -1785,7 +1550,7 @@ pub const cpu = struct {...@@ -1785,7 +1550,7 @@ pub const cpu = struct {
1785 pub const core2 = Cpu{1550 pub const core2 = Cpu{
1786 .name = "core2",1551 .name = "core2",
1787 .llvm_name = "core2",1552 .llvm_name = "core2",
1788 .features = featureSet(&[_]Feature{1553 .features = featureSet(&all_features, &[_]Feature{
1789 .@"64bit",1554 .@"64bit",
1790 .cmov,1555 .cmov,
1791 .cx16,1556 .cx16,
...@@ -1803,7 +1568,7 @@ pub const cpu = struct {...@@ -1803,7 +1568,7 @@ pub const cpu = struct {
1803 pub const corei7 = Cpu{1568 pub const corei7 = Cpu{
1804 .name = "corei7",1569 .name = "corei7",
1805 .llvm_name = "corei7",1570 .llvm_name = "corei7",
1806 .features = featureSet(&[_]Feature{1571 .features = featureSet(&all_features, &[_]Feature{
1807 .@"64bit",1572 .@"64bit",
1808 .cmov,1573 .cmov,
1809 .cx16,1574 .cx16,
...@@ -1821,7 +1586,7 @@ pub const cpu = struct {...@@ -1821,7 +1586,7 @@ pub const cpu = struct {
1821 pub const corei7_avx = Cpu{1586 pub const corei7_avx = Cpu{
1822 .name = "corei7_avx",1587 .name = "corei7_avx",
1823 .llvm_name = "corei7-avx",1588 .llvm_name = "corei7-avx",
1824 .features = featureSet(&[_]Feature{1589 .features = featureSet(&all_features, &[_]Feature{
1825 .@"64bit",1590 .@"64bit",
1826 .avx,1591 .avx,
1827 .cmov,1592 .cmov,
...@@ -1850,7 +1615,7 @@ pub const cpu = struct {...@@ -1850,7 +1615,7 @@ pub const cpu = struct {
1850 pub const generic = Cpu{1615 pub const generic = Cpu{
1851 .name = "generic",1616 .name = "generic",
1852 .llvm_name = "generic",1617 .llvm_name = "generic",
1853 .features = featureSet(&[_]Feature{1618 .features = featureSet(&all_features, &[_]Feature{
1854 .cx8,1619 .cx8,
1855 .slow_unaligned_mem_16,1620 .slow_unaligned_mem_16,
1856 .x87,1621 .x87,
...@@ -1859,7 +1624,7 @@ pub const cpu = struct {...@@ -1859,7 +1624,7 @@ pub const cpu = struct {
1859 pub const geode = Cpu{1624 pub const geode = Cpu{
1860 .name = "geode",1625 .name = "geode",
1861 .llvm_name = "geode",1626 .llvm_name = "geode",
1862 .features = featureSet(&[_]Feature{1627 .features = featureSet(&all_features, &[_]Feature{
1863 .@"3dnowa",1628 .@"3dnowa",
1864 .cx8,1629 .cx8,
1865 .slow_unaligned_mem_16,1630 .slow_unaligned_mem_16,
...@@ -1869,7 +1634,7 @@ pub const cpu = struct {...@@ -1869,7 +1634,7 @@ pub const cpu = struct {
1869 pub const goldmont = Cpu{1634 pub const goldmont = Cpu{
1870 .name = "goldmont",1635 .name = "goldmont",
1871 .llvm_name = "goldmont",1636 .llvm_name = "goldmont",
1872 .features = featureSet(&[_]Feature{1637 .features = featureSet(&all_features, &[_]Feature{
1873 .@"64bit",1638 .@"64bit",
1874 .aes,1639 .aes,
1875 .clflushopt,1640 .clflushopt,
...@@ -1905,7 +1670,7 @@ pub const cpu = struct {...@@ -1905,7 +1670,7 @@ pub const cpu = struct {
1905 pub const goldmont_plus = Cpu{1670 pub const goldmont_plus = Cpu{
1906 .name = "goldmont_plus",1671 .name = "goldmont_plus",
1907 .llvm_name = "goldmont-plus",1672 .llvm_name = "goldmont-plus",
1908 .features = featureSet(&[_]Feature{1673 .features = featureSet(&all_features, &[_]Feature{
1909 .@"64bit",1674 .@"64bit",
1910 .aes,1675 .aes,
1911 .clflushopt,1676 .clflushopt,
...@@ -1943,7 +1708,7 @@ pub const cpu = struct {...@@ -1943,7 +1708,7 @@ pub const cpu = struct {
1943 pub const haswell = Cpu{1708 pub const haswell = Cpu{
1944 .name = "haswell",1709 .name = "haswell",
1945 .llvm_name = "haswell",1710 .llvm_name = "haswell",
1946 .features = featureSet(&[_]Feature{1711 .features = featureSet(&all_features, &[_]Feature{
1947 .@"64bit",1712 .@"64bit",
1948 .avx,1713 .avx,
1949 .avx2,1714 .avx2,
...@@ -1984,7 +1749,7 @@ pub const cpu = struct {...@@ -1984,7 +1749,7 @@ pub const cpu = struct {
1984 pub const _i386 = Cpu{1749 pub const _i386 = Cpu{
1985 .name = "_i386",1750 .name = "_i386",
1986 .llvm_name = "i386",1751 .llvm_name = "i386",
1987 .features = featureSet(&[_]Feature{1752 .features = featureSet(&all_features, &[_]Feature{
1988 .slow_unaligned_mem_16,1753 .slow_unaligned_mem_16,
1989 .x87,1754 .x87,
1990 }),1755 }),
...@@ -1992,7 +1757,7 @@ pub const cpu = struct {...@@ -1992,7 +1757,7 @@ pub const cpu = struct {
1992 pub const _i486 = Cpu{1757 pub const _i486 = Cpu{
1993 .name = "_i486",1758 .name = "_i486",
1994 .llvm_name = "i486",1759 .llvm_name = "i486",
1995 .features = featureSet(&[_]Feature{1760 .features = featureSet(&all_features, &[_]Feature{
1996 .slow_unaligned_mem_16,1761 .slow_unaligned_mem_16,
1997 .x87,1762 .x87,
1998 }),1763 }),
...@@ -2000,7 +1765,7 @@ pub const cpu = struct {...@@ -2000,7 +1765,7 @@ pub const cpu = struct {
2000 pub const _i586 = Cpu{1765 pub const _i586 = Cpu{
2001 .name = "_i586",1766 .name = "_i586",
2002 .llvm_name = "i586",1767 .llvm_name = "i586",
2003 .features = featureSet(&[_]Feature{1768 .features = featureSet(&all_features, &[_]Feature{
2004 .cx8,1769 .cx8,
2005 .slow_unaligned_mem_16,1770 .slow_unaligned_mem_16,
2006 .x87,1771 .x87,
...@@ -2009,7 +1774,7 @@ pub const cpu = struct {...@@ -2009,7 +1774,7 @@ pub const cpu = struct {
2009 pub const _i686 = Cpu{1774 pub const _i686 = Cpu{
2010 .name = "_i686",1775 .name = "_i686",
2011 .llvm_name = "i686",1776 .llvm_name = "i686",
2012 .features = featureSet(&[_]Feature{1777 .features = featureSet(&all_features, &[_]Feature{
2013 .cmov,1778 .cmov,
2014 .cx8,1779 .cx8,
2015 .slow_unaligned_mem_16,1780 .slow_unaligned_mem_16,
...@@ -2019,7 +1784,7 @@ pub const cpu = struct {...@@ -2019,7 +1784,7 @@ pub const cpu = struct {
2019 pub const icelake_client = Cpu{1784 pub const icelake_client = Cpu{
2020 .name = "icelake_client",1785 .name = "icelake_client",
2021 .llvm_name = "icelake-client",1786 .llvm_name = "icelake-client",
2022 .features = featureSet(&[_]Feature{1787 .features = featureSet(&all_features, &[_]Feature{
2023 .@"64bit",1788 .@"64bit",
2024 .adx,1789 .adx,
2025 .aes,1790 .aes,
...@@ -2087,7 +1852,7 @@ pub const cpu = struct {...@@ -2087,7 +1852,7 @@ pub const cpu = struct {
2087 pub const icelake_server = Cpu{1852 pub const icelake_server = Cpu{
2088 .name = "icelake_server",1853 .name = "icelake_server",
2089 .llvm_name = "icelake-server",1854 .llvm_name = "icelake-server",
2090 .features = featureSet(&[_]Feature{1855 .features = featureSet(&all_features, &[_]Feature{
2091 .@"64bit",1856 .@"64bit",
2092 .adx,1857 .adx,
2093 .aes,1858 .aes,
...@@ -2157,7 +1922,7 @@ pub const cpu = struct {...@@ -2157,7 +1922,7 @@ pub const cpu = struct {
2157 pub const ivybridge = Cpu{1922 pub const ivybridge = Cpu{
2158 .name = "ivybridge",1923 .name = "ivybridge",
2159 .llvm_name = "ivybridge",1924 .llvm_name = "ivybridge",
2160 .features = featureSet(&[_]Feature{1925 .features = featureSet(&all_features, &[_]Feature{
2161 .@"64bit",1926 .@"64bit",
2162 .avx,1927 .avx,
2163 .cmov,1928 .cmov,
...@@ -2189,7 +1954,7 @@ pub const cpu = struct {...@@ -2189,7 +1954,7 @@ pub const cpu = struct {
2189 pub const k6 = Cpu{1954 pub const k6 = Cpu{
2190 .name = "k6",1955 .name = "k6",
2191 .llvm_name = "k6",1956 .llvm_name = "k6",
2192 .features = featureSet(&[_]Feature{1957 .features = featureSet(&all_features, &[_]Feature{
2193 .cx8,1958 .cx8,
2194 .mmx,1959 .mmx,
2195 .slow_unaligned_mem_16,1960 .slow_unaligned_mem_16,
...@@ -2199,7 +1964,7 @@ pub const cpu = struct {...@@ -2199,7 +1964,7 @@ pub const cpu = struct {
2199 pub const k6_2 = Cpu{1964 pub const k6_2 = Cpu{
2200 .name = "k6_2",1965 .name = "k6_2",
2201 .llvm_name = "k6-2",1966 .llvm_name = "k6-2",
2202 .features = featureSet(&[_]Feature{1967 .features = featureSet(&all_features, &[_]Feature{
2203 .@"3dnow",1968 .@"3dnow",
2204 .cx8,1969 .cx8,
2205 .slow_unaligned_mem_16,1970 .slow_unaligned_mem_16,
...@@ -2209,7 +1974,7 @@ pub const cpu = struct {...@@ -2209,7 +1974,7 @@ pub const cpu = struct {
2209 pub const k6_3 = Cpu{1974 pub const k6_3 = Cpu{
2210 .name = "k6_3",1975 .name = "k6_3",
2211 .llvm_name = "k6-3",1976 .llvm_name = "k6-3",
2212 .features = featureSet(&[_]Feature{1977 .features = featureSet(&all_features, &[_]Feature{
2213 .@"3dnow",1978 .@"3dnow",
2214 .cx8,1979 .cx8,
2215 .slow_unaligned_mem_16,1980 .slow_unaligned_mem_16,
...@@ -2219,7 +1984,7 @@ pub const cpu = struct {...@@ -2219,7 +1984,7 @@ pub const cpu = struct {
2219 pub const k8 = Cpu{1984 pub const k8 = Cpu{
2220 .name = "k8",1985 .name = "k8",
2221 .llvm_name = "k8",1986 .llvm_name = "k8",
2222 .features = featureSet(&[_]Feature{1987 .features = featureSet(&all_features, &[_]Feature{
2223 .@"3dnowa",1988 .@"3dnowa",
2224 .@"64bit",1989 .@"64bit",
2225 .cmov,1990 .cmov,
...@@ -2236,7 +2001,7 @@ pub const cpu = struct {...@@ -2236,7 +2001,7 @@ pub const cpu = struct {
2236 pub const k8_sse3 = Cpu{2001 pub const k8_sse3 = Cpu{
2237 .name = "k8_sse3",2002 .name = "k8_sse3",
2238 .llvm_name = "k8-sse3",2003 .llvm_name = "k8-sse3",
2239 .features = featureSet(&[_]Feature{2004 .features = featureSet(&all_features, &[_]Feature{
2240 .@"3dnowa",2005 .@"3dnowa",
2241 .@"64bit",2006 .@"64bit",
2242 .cmov,2007 .cmov,
...@@ -2254,7 +2019,7 @@ pub const cpu = struct {...@@ -2254,7 +2019,7 @@ pub const cpu = struct {
2254 pub const knl = Cpu{2019 pub const knl = Cpu{
2255 .name = "knl",2020 .name = "knl",
2256 .llvm_name = "knl",2021 .llvm_name = "knl",
2257 .features = featureSet(&[_]Feature{2022 .features = featureSet(&all_features, &[_]Feature{
2258 .@"64bit",2023 .@"64bit",
2259 .adx,2024 .adx,
2260 .aes,2025 .aes,
...@@ -2297,7 +2062,7 @@ pub const cpu = struct {...@@ -2297,7 +2062,7 @@ pub const cpu = struct {
2297 pub const knm = Cpu{2062 pub const knm = Cpu{
2298 .name = "knm",2063 .name = "knm",
2299 .llvm_name = "knm",2064 .llvm_name = "knm",
2300 .features = featureSet(&[_]Feature{2065 .features = featureSet(&all_features, &[_]Feature{
2301 .@"64bit",2066 .@"64bit",
2302 .adx,2067 .adx,
2303 .aes,2068 .aes,
...@@ -2341,12 +2106,12 @@ pub const cpu = struct {...@@ -2341,12 +2106,12 @@ pub const cpu = struct {
2341 pub const lakemont = Cpu{2106 pub const lakemont = Cpu{
2342 .name = "lakemont",2107 .name = "lakemont",
2343 .llvm_name = "lakemont",2108 .llvm_name = "lakemont",
2344 .features = featureSet(&[_]Feature{}),2109 .features = featureSet(&all_features, &[_]Feature{}),
2345 };2110 };
2346 pub const nehalem = Cpu{2111 pub const nehalem = Cpu{
2347 .name = "nehalem",2112 .name = "nehalem",
2348 .llvm_name = "nehalem",2113 .llvm_name = "nehalem",
2349 .features = featureSet(&[_]Feature{2114 .features = featureSet(&all_features, &[_]Feature{
2350 .@"64bit",2115 .@"64bit",
2351 .cmov,2116 .cmov,
2352 .cx16,2117 .cx16,
...@@ -2364,7 +2129,7 @@ pub const cpu = struct {...@@ -2364,7 +2129,7 @@ pub const cpu = struct {
2364 pub const nocona = Cpu{2129 pub const nocona = Cpu{
2365 .name = "nocona",2130 .name = "nocona",
2366 .llvm_name = "nocona",2131 .llvm_name = "nocona",
2367 .features = featureSet(&[_]Feature{2132 .features = featureSet(&all_features, &[_]Feature{
2368 .@"64bit",2133 .@"64bit",
2369 .cmov,2134 .cmov,
2370 .cx16,2135 .cx16,
...@@ -2380,7 +2145,7 @@ pub const cpu = struct {...@@ -2380,7 +2145,7 @@ pub const cpu = struct {
2380 pub const opteron = Cpu{2145 pub const opteron = Cpu{
2381 .name = "opteron",2146 .name = "opteron",
2382 .llvm_name = "opteron",2147 .llvm_name = "opteron",
2383 .features = featureSet(&[_]Feature{2148 .features = featureSet(&all_features, &[_]Feature{
2384 .@"3dnowa",2149 .@"3dnowa",
2385 .@"64bit",2150 .@"64bit",
2386 .cmov,2151 .cmov,
...@@ -2397,7 +2162,7 @@ pub const cpu = struct {...@@ -2397,7 +2162,7 @@ pub const cpu = struct {
2397 pub const opteron_sse3 = Cpu{2162 pub const opteron_sse3 = Cpu{
2398 .name = "opteron_sse3",2163 .name = "opteron_sse3",
2399 .llvm_name = "opteron-sse3",2164 .llvm_name = "opteron-sse3",
2400 .features = featureSet(&[_]Feature{2165 .features = featureSet(&all_features, &[_]Feature{
2401 .@"3dnowa",2166 .@"3dnowa",
2402 .@"64bit",2167 .@"64bit",
2403 .cmov,2168 .cmov,
...@@ -2415,7 +2180,7 @@ pub const cpu = struct {...@@ -2415,7 +2180,7 @@ pub const cpu = struct {
2415 pub const penryn = Cpu{2180 pub const penryn = Cpu{
2416 .name = "penryn",2181 .name = "penryn",
2417 .llvm_name = "penryn",2182 .llvm_name = "penryn",
2418 .features = featureSet(&[_]Feature{2183 .features = featureSet(&all_features, &[_]Feature{
2419 .@"64bit",2184 .@"64bit",
2420 .cmov,2185 .cmov,
2421 .cx16,2186 .cx16,
...@@ -2433,7 +2198,7 @@ pub const cpu = struct {...@@ -2433,7 +2198,7 @@ pub const cpu = struct {
2433 pub const pentium = Cpu{2198 pub const pentium = Cpu{
2434 .name = "pentium",2199 .name = "pentium",
2435 .llvm_name = "pentium",2200 .llvm_name = "pentium",
2436 .features = featureSet(&[_]Feature{2201 .features = featureSet(&all_features, &[_]Feature{
2437 .cx8,2202 .cx8,
2438 .slow_unaligned_mem_16,2203 .slow_unaligned_mem_16,
2439 .x87,2204 .x87,
...@@ -2442,7 +2207,7 @@ pub const cpu = struct {...@@ -2442,7 +2207,7 @@ pub const cpu = struct {
2442 pub const pentium_m = Cpu{2207 pub const pentium_m = Cpu{
2443 .name = "pentium_m",2208 .name = "pentium_m",
2444 .llvm_name = "pentium-m",2209 .llvm_name = "pentium-m",
2445 .features = featureSet(&[_]Feature{2210 .features = featureSet(&all_features, &[_]Feature{
2446 .cmov,2211 .cmov,
2447 .cx8,2212 .cx8,
2448 .fxsr,2213 .fxsr,
...@@ -2456,7 +2221,7 @@ pub const cpu = struct {...@@ -2456,7 +2221,7 @@ pub const cpu = struct {
2456 pub const pentium_mmx = Cpu{2221 pub const pentium_mmx = Cpu{
2457 .name = "pentium_mmx",2222 .name = "pentium_mmx",
2458 .llvm_name = "pentium-mmx",2223 .llvm_name = "pentium-mmx",
2459 .features = featureSet(&[_]Feature{2224 .features = featureSet(&all_features, &[_]Feature{
2460 .cx8,2225 .cx8,
2461 .mmx,2226 .mmx,
2462 .slow_unaligned_mem_16,2227 .slow_unaligned_mem_16,
...@@ -2466,7 +2231,7 @@ pub const cpu = struct {...@@ -2466,7 +2231,7 @@ pub const cpu = struct {
2466 pub const pentium2 = Cpu{2231 pub const pentium2 = Cpu{
2467 .name = "pentium2",2232 .name = "pentium2",
2468 .llvm_name = "pentium2",2233 .llvm_name = "pentium2",
2469 .features = featureSet(&[_]Feature{2234 .features = featureSet(&all_features, &[_]Feature{
2470 .cmov,2235 .cmov,
2471 .cx8,2236 .cx8,
2472 .fxsr,2237 .fxsr,
...@@ -2479,7 +2244,7 @@ pub const cpu = struct {...@@ -2479,7 +2244,7 @@ pub const cpu = struct {
2479 pub const pentium3 = Cpu{2244 pub const pentium3 = Cpu{
2480 .name = "pentium3",2245 .name = "pentium3",
2481 .llvm_name = "pentium3",2246 .llvm_name = "pentium3",
2482 .features = featureSet(&[_]Feature{2247 .features = featureSet(&all_features, &[_]Feature{
2483 .cmov,2248 .cmov,
2484 .cx8,2249 .cx8,
2485 .fxsr,2250 .fxsr,
...@@ -2493,7 +2258,7 @@ pub const cpu = struct {...@@ -2493,7 +2258,7 @@ pub const cpu = struct {
2493 pub const pentium3m = Cpu{2258 pub const pentium3m = Cpu{
2494 .name = "pentium3m",2259 .name = "pentium3m",
2495 .llvm_name = "pentium3m",2260 .llvm_name = "pentium3m",
2496 .features = featureSet(&[_]Feature{2261 .features = featureSet(&all_features, &[_]Feature{
2497 .cmov,2262 .cmov,
2498 .cx8,2263 .cx8,
2499 .fxsr,2264 .fxsr,
...@@ -2507,7 +2272,7 @@ pub const cpu = struct {...@@ -2507,7 +2272,7 @@ pub const cpu = struct {
2507 pub const pentium4 = Cpu{2272 pub const pentium4 = Cpu{
2508 .name = "pentium4",2273 .name = "pentium4",
2509 .llvm_name = "pentium4",2274 .llvm_name = "pentium4",
2510 .features = featureSet(&[_]Feature{2275 .features = featureSet(&all_features, &[_]Feature{
2511 .cmov,2276 .cmov,
2512 .cx8,2277 .cx8,
2513 .fxsr,2278 .fxsr,
...@@ -2521,7 +2286,7 @@ pub const cpu = struct {...@@ -2521,7 +2286,7 @@ pub const cpu = struct {
2521 pub const pentium4m = Cpu{2286 pub const pentium4m = Cpu{
2522 .name = "pentium4m",2287 .name = "pentium4m",
2523 .llvm_name = "pentium4m",2288 .llvm_name = "pentium4m",
2524 .features = featureSet(&[_]Feature{2289 .features = featureSet(&all_features, &[_]Feature{
2525 .cmov,2290 .cmov,
2526 .cx8,2291 .cx8,
2527 .fxsr,2292 .fxsr,
...@@ -2535,7 +2300,7 @@ pub const cpu = struct {...@@ -2535,7 +2300,7 @@ pub const cpu = struct {
2535 pub const pentiumpro = Cpu{2300 pub const pentiumpro = Cpu{
2536 .name = "pentiumpro",2301 .name = "pentiumpro",
2537 .llvm_name = "pentiumpro",2302 .llvm_name = "pentiumpro",
2538 .features = featureSet(&[_]Feature{2303 .features = featureSet(&all_features, &[_]Feature{
2539 .cmov,2304 .cmov,
2540 .cx8,2305 .cx8,
2541 .nopl,2306 .nopl,
...@@ -2546,7 +2311,7 @@ pub const cpu = struct {...@@ -2546,7 +2311,7 @@ pub const cpu = struct {
2546 pub const prescott = Cpu{2311 pub const prescott = Cpu{
2547 .name = "prescott",2312 .name = "prescott",
2548 .llvm_name = "prescott",2313 .llvm_name = "prescott",
2549 .features = featureSet(&[_]Feature{2314 .features = featureSet(&all_features, &[_]Feature{
2550 .cmov,2315 .cmov,
2551 .cx8,2316 .cx8,
2552 .fxsr,2317 .fxsr,
...@@ -2560,7 +2325,7 @@ pub const cpu = struct {...@@ -2560,7 +2325,7 @@ pub const cpu = struct {
2560 pub const sandybridge = Cpu{2325 pub const sandybridge = Cpu{
2561 .name = "sandybridge",2326 .name = "sandybridge",
2562 .llvm_name = "sandybridge",2327 .llvm_name = "sandybridge",
2563 .features = featureSet(&[_]Feature{2328 .features = featureSet(&all_features, &[_]Feature{
2564 .@"64bit",2329 .@"64bit",
2565 .avx,2330 .avx,
2566 .cmov,2331 .cmov,
...@@ -2589,7 +2354,7 @@ pub const cpu = struct {...@@ -2589,7 +2354,7 @@ pub const cpu = struct {
2589 pub const silvermont = Cpu{2354 pub const silvermont = Cpu{
2590 .name = "silvermont",2355 .name = "silvermont",
2591 .llvm_name = "silvermont",2356 .llvm_name = "silvermont",
2592 .features = featureSet(&[_]Feature{2357 .features = featureSet(&all_features, &[_]Feature{
2593 .@"64bit",2358 .@"64bit",
2594 .cmov,2359 .cmov,
2595 .cx16,2360 .cx16,
...@@ -2617,7 +2382,7 @@ pub const cpu = struct {...@@ -2617,7 +2382,7 @@ pub const cpu = struct {
2617 pub const skx = Cpu{2382 pub const skx = Cpu{
2618 .name = "skx",2383 .name = "skx",
2619 .llvm_name = "skx",2384 .llvm_name = "skx",
2620 .features = featureSet(&[_]Feature{2385 .features = featureSet(&all_features, &[_]Feature{
2621 .@"64bit",2386 .@"64bit",
2622 .adx,2387 .adx,
2623 .aes,2388 .aes,
...@@ -2674,7 +2439,7 @@ pub const cpu = struct {...@@ -2674,7 +2439,7 @@ pub const cpu = struct {
2674 pub const skylake = Cpu{2439 pub const skylake = Cpu{
2675 .name = "skylake",2440 .name = "skylake",
2676 .llvm_name = "skylake",2441 .llvm_name = "skylake",
2677 .features = featureSet(&[_]Feature{2442 .features = featureSet(&all_features, &[_]Feature{
2678 .@"64bit",2443 .@"64bit",
2679 .adx,2444 .adx,
2680 .aes,2445 .aes,
...@@ -2725,7 +2490,7 @@ pub const cpu = struct {...@@ -2725,7 +2490,7 @@ pub const cpu = struct {
2725 pub const skylake_avx512 = Cpu{2490 pub const skylake_avx512 = Cpu{
2726 .name = "skylake_avx512",2491 .name = "skylake_avx512",
2727 .llvm_name = "skylake-avx512",2492 .llvm_name = "skylake-avx512",
2728 .features = featureSet(&[_]Feature{2493 .features = featureSet(&all_features, &[_]Feature{
2729 .@"64bit",2494 .@"64bit",
2730 .adx,2495 .adx,
2731 .aes,2496 .aes,
...@@ -2782,7 +2547,7 @@ pub const cpu = struct {...@@ -2782,7 +2547,7 @@ pub const cpu = struct {
2782 pub const slm = Cpu{2547 pub const slm = Cpu{
2783 .name = "slm",2548 .name = "slm",
2784 .llvm_name = "slm",2549 .llvm_name = "slm",
2785 .features = featureSet(&[_]Feature{2550 .features = featureSet(&all_features, &[_]Feature{
2786 .@"64bit",2551 .@"64bit",
2787 .cmov,2552 .cmov,
2788 .cx16,2553 .cx16,
...@@ -2810,7 +2575,7 @@ pub const cpu = struct {...@@ -2810,7 +2575,7 @@ pub const cpu = struct {
2810 pub const tremont = Cpu{2575 pub const tremont = Cpu{
2811 .name = "tremont",2576 .name = "tremont",
2812 .llvm_name = "tremont",2577 .llvm_name = "tremont",
2813 .features = featureSet(&[_]Feature{2578 .features = featureSet(&all_features, &[_]Feature{
2814 .@"64bit",2579 .@"64bit",
2815 .aes,2580 .aes,
2816 .cldemote,2581 .cldemote,
...@@ -2853,7 +2618,7 @@ pub const cpu = struct {...@@ -2853,7 +2618,7 @@ pub const cpu = struct {
2853 pub const westmere = Cpu{2618 pub const westmere = Cpu{
2854 .name = "westmere",2619 .name = "westmere",
2855 .llvm_name = "westmere",2620 .llvm_name = "westmere",
2856 .features = featureSet(&[_]Feature{2621 .features = featureSet(&all_features, &[_]Feature{
2857 .@"64bit",2622 .@"64bit",
2858 .cmov,2623 .cmov,
2859 .cx16,2624 .cx16,
...@@ -2872,7 +2637,7 @@ pub const cpu = struct {...@@ -2872,7 +2637,7 @@ pub const cpu = struct {
2872 pub const winchip_c6 = Cpu{2637 pub const winchip_c6 = Cpu{
2873 .name = "winchip_c6",2638 .name = "winchip_c6",
2874 .llvm_name = "winchip-c6",2639 .llvm_name = "winchip-c6",
2875 .features = featureSet(&[_]Feature{2640 .features = featureSet(&all_features, &[_]Feature{
2876 .mmx,2641 .mmx,
2877 .slow_unaligned_mem_16,2642 .slow_unaligned_mem_16,
2878 .x87,2643 .x87,
...@@ -2881,7 +2646,7 @@ pub const cpu = struct {...@@ -2881,7 +2646,7 @@ pub const cpu = struct {
2881 pub const winchip2 = Cpu{2646 pub const winchip2 = Cpu{
2882 .name = "winchip2",2647 .name = "winchip2",
2883 .llvm_name = "winchip2",2648 .llvm_name = "winchip2",
2884 .features = featureSet(&[_]Feature{2649 .features = featureSet(&all_features, &[_]Feature{
2885 .@"3dnow",2650 .@"3dnow",
2886 .slow_unaligned_mem_16,2651 .slow_unaligned_mem_16,
2887 .x87,2652 .x87,
...@@ -2890,7 +2655,7 @@ pub const cpu = struct {...@@ -2890,7 +2655,7 @@ pub const cpu = struct {
2890 pub const x86_64 = Cpu{2655 pub const x86_64 = Cpu{
2891 .name = "x86_64",2656 .name = "x86_64",
2892 .llvm_name = "x86-64",2657 .llvm_name = "x86-64",
2893 .features = featureSet(&[_]Feature{2658 .features = featureSet(&all_features, &[_]Feature{
2894 .@"64bit",2659 .@"64bit",
2895 .cmov,2660 .cmov,
2896 .cx8,2661 .cx8,
...@@ -2907,7 +2672,7 @@ pub const cpu = struct {...@@ -2907,7 +2672,7 @@ pub const cpu = struct {
2907 pub const yonah = Cpu{2672 pub const yonah = Cpu{
2908 .name = "yonah",2673 .name = "yonah",
2909 .llvm_name = "yonah",2674 .llvm_name = "yonah",
2910 .features = featureSet(&[_]Feature{2675 .features = featureSet(&all_features, &[_]Feature{
2911 .cmov,2676 .cmov,
2912 .cx8,2677 .cx8,
2913 .fxsr,2678 .fxsr,
...@@ -2921,7 +2686,7 @@ pub const cpu = struct {...@@ -2921,7 +2686,7 @@ pub const cpu = struct {
2921 pub const znver1 = Cpu{2686 pub const znver1 = Cpu{
2922 .name = "znver1",2687 .name = "znver1",
2923 .llvm_name = "znver1",2688 .llvm_name = "znver1",
2924 .features = featureSet(&[_]Feature{2689 .features = featureSet(&all_features, &[_]Feature{
2925 .@"64bit",2690 .@"64bit",
2926 .adx,2691 .adx,
2927 .aes,2692 .aes,
...@@ -2965,7 +2730,7 @@ pub const cpu = struct {...@@ -2965,7 +2730,7 @@ pub const cpu = struct {
2965 pub const znver2 = Cpu{2730 pub const znver2 = Cpu{
2966 .name = "znver2",2731 .name = "znver2",
2967 .llvm_name = "znver2",2732 .llvm_name = "znver2",
2968 .features = featureSet(&[_]Feature{2733 .features = featureSet(&all_features, &[_]Feature{
2969 .@"64bit",2734 .@"64bit",
2970 .adx,2735 .adx,
2971 .aes,2736 .aes,
src-self-hosted/stage1.zig+9-6
...@@ -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.addFeature(@intCast(u8, index)),584 .add => set.addSparseFeature(@intCast(u8, index)),
585 .sub => set.removeFeature(@intCast(u8, index)),585 .sub => set.removeSparseFeature(@intCast(u8, index)),
586 }586 }
587 break;587 break;
588 }588 }
...@@ -676,7 +676,7 @@ const Stage2CpuFeatures = struct {...@@ -676,7 +676,7 @@ const Stage2CpuFeatures = struct {
676 });676 });
677 errdefer allocator.free(builtin_str);677 errdefer allocator.free(builtin_str);
678678
679 const cache_hash = try std.fmt.allocPrint0(allocator, "{}\n{x}", .{ cpu.name, cpu.features.bytes });679 const cache_hash = try std.fmt.allocPrint0(allocator, "{}\n{}", .{ cpu.name, cpu.features.asBytes() });
680 errdefer allocator.free(cache_hash);680 errdefer allocator.free(cache_hash);
681681
682 self.* = Self{682 self.* = Self{
...@@ -699,10 +699,13 @@ const Stage2CpuFeatures = struct {...@@ -699,10 +699,13 @@ const Stage2CpuFeatures = struct {
699 defer llvm_features_buffer.deinit();699 defer llvm_features_buffer.deinit();
700700
701 const all_features = arch.allFeaturesList();701 const all_features = arch.allFeaturesList();
702 var populated_feature_set = feature_set;
703 if (arch.subArchFeature()) |sub_arch_index| {
704 populated_feature_set.addFeature(sub_arch_index, all_features);
705 }
702 for (all_features) |feature, index| {706 for (all_features) |feature, index| {
703 const llvm_name = feature.llvm_name orelse continue;707 const llvm_name = feature.llvm_name orelse continue;
704708 const plus_or_minus = "-+"[@boolToInt(populated_feature_set.isEnabled(@intCast(u8, index)))];
705 const plus_or_minus = "-+"[@boolToInt(feature_set.isEnabled(@intCast(u8, index)))];
706 try llvm_features_buffer.appendByte(plus_or_minus);709 try llvm_features_buffer.appendByte(plus_or_minus);
707 try llvm_features_buffer.append(llvm_name);710 try llvm_features_buffer.append(llvm_name);
708 try llvm_features_buffer.append(",");711 try llvm_features_buffer.append(",");
...@@ -721,7 +724,7 @@ const Stage2CpuFeatures = struct {...@@ -721,7 +724,7 @@ const Stage2CpuFeatures = struct {
721 const self = try allocator.create(Self);724 const self = try allocator.create(Self);
722 errdefer allocator.destroy(self);725 errdefer allocator.destroy(self);
723726
724 const cache_hash = try std.fmt.allocPrint0(allocator, "\n{}", .{feature_set.bytes});727 const cache_hash = try std.fmt.allocPrint0(allocator, "\n{}", .{feature_set.asBytes()});
725 errdefer allocator.free(cache_hash);728 errdefer allocator.free(cache_hash);
726729
727 const generic_arch_name = arch.genericName();730 const generic_arch_name = arch.genericName();
src/all_types.hpp+1
...@@ -2144,6 +2144,7 @@ struct CodeGen {...@@ -2144,6 +2144,7 @@ struct CodeGen {
2144 bool verbose_llvm_ir;2144 bool verbose_llvm_ir;
2145 bool verbose_cimport;2145 bool verbose_cimport;
2146 bool verbose_cc;2146 bool verbose_cc;
2147 bool verbose_llvm_cpu_features;
2147 bool error_during_imports;2148 bool error_during_imports;
2148 bool generate_error_name_table;2149 bool generate_error_name_table;
2149 bool enable_cache; // mutually exclusive with output_dir2150 bool enable_cache; // mutually exclusive with output_dir
src/codegen.cpp+4-2
...@@ -8802,8 +8802,10 @@ static void init(CodeGen *g) {...@@ -8802,8 +8802,10 @@ static void init(CodeGen *g) {
8802 target_specific_cpu_args = stage2_cpu_features_get_llvm_cpu(g->zig_target->cpu_features);8802 target_specific_cpu_args = stage2_cpu_features_get_llvm_cpu(g->zig_target->cpu_features);
8803 target_specific_features = stage2_cpu_features_get_llvm_features(g->zig_target->cpu_features);8803 target_specific_features = stage2_cpu_features_get_llvm_features(g->zig_target->cpu_features);
8804 }8804 }
8805 //fprintf(stderr, "name=%s target_specific_cpu_args=%s\n", buf_ptr(g->root_out_name), target_specific_cpu_args);8805 if (g->verbose_llvm_cpu_features) {
8806 //fprintf(stderr, "name=%s target_specific_features=%s\n", buf_ptr(g->root_out_name), target_specific_features);8806 fprintf(stderr, "name=%s target_specific_cpu_args=%s\n", buf_ptr(g->root_out_name), target_specific_cpu_args);
8807 fprintf(stderr, "name=%s target_specific_features=%s\n", buf_ptr(g->root_out_name), target_specific_features);
8808 }
8807 8809
8808 g->target_machine = ZigLLVMCreateTargetMachine(target_ref, buf_ptr(&g->llvm_triple_str),8810 g->target_machine = ZigLLVMCreateTargetMachine(target_ref, buf_ptr(&g->llvm_triple_str),
8809 target_specific_cpu_args, target_specific_features, opt_level, reloc_mode,8811 target_specific_cpu_args, target_specific_features, opt_level, reloc_mode,
src/main.cpp+5
...@@ -93,6 +93,7 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) {...@@ -93,6 +93,7 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) {
93 " --verbose-llvm-ir enable compiler debug output for LLVM IR\n"93 " --verbose-llvm-ir enable compiler debug output for LLVM IR\n"
94 " --verbose-cimport enable compiler debug output for C imports\n"94 " --verbose-cimport enable compiler debug output for C imports\n"
95 " --verbose-cc enable compiler debug output for C compilation\n"95 " --verbose-cc enable compiler debug output for C compilation\n"
96 " --verbose-llvm-cpu-features enable compiler debug output for LLVM CPU features\n"
96 " -dirafter [dir] add directory to AFTER include search path\n"97 " -dirafter [dir] add directory to AFTER include search path\n"
97 " -isystem [dir] add directory to SYSTEM include search path\n"98 " -isystem [dir] add directory to SYSTEM include search path\n"
98 " -I[dir] add directory to include search path\n"99 " -I[dir] add directory to include search path\n"
...@@ -398,6 +399,7 @@ int main(int argc, char **argv) {...@@ -398,6 +399,7 @@ int main(int argc, char **argv) {
398 bool verbose_llvm_ir = false;399 bool verbose_llvm_ir = false;
399 bool verbose_cimport = false;400 bool verbose_cimport = false;
400 bool verbose_cc = false;401 bool verbose_cc = false;
402 bool verbose_llvm_cpu_features = false;
401 bool link_eh_frame_hdr = false;403 bool link_eh_frame_hdr = false;
402 ErrColor color = ErrColorAuto;404 ErrColor color = ErrColorAuto;
403 CacheOpt enable_cache = CacheOptAuto;405 CacheOpt enable_cache = CacheOptAuto;
...@@ -614,6 +616,8 @@ int main(int argc, char **argv) {...@@ -614,6 +616,8 @@ int main(int argc, char **argv) {
614 verbose_cimport = true;616 verbose_cimport = true;
615 } else if (strcmp(arg, "--verbose-cc") == 0) {617 } else if (strcmp(arg, "--verbose-cc") == 0) {
616 verbose_cc = true;618 verbose_cc = true;
619 } else if (strcmp(arg, "--verbose-llvm-cpu-features") == 0) {
620 verbose_llvm_cpu_features = true;
617 } else if (strcmp(arg, "-rdynamic") == 0) {621 } else if (strcmp(arg, "-rdynamic") == 0) {
618 rdynamic = true;622 rdynamic = true;
619 } else if (strcmp(arg, "--each-lib-rpath") == 0) {623 } else if (strcmp(arg, "--each-lib-rpath") == 0) {
...@@ -1184,6 +1188,7 @@ int main(int argc, char **argv) {...@@ -1184,6 +1188,7 @@ int main(int argc, char **argv) {
1184 g->verbose_llvm_ir = verbose_llvm_ir;1188 g->verbose_llvm_ir = verbose_llvm_ir;
1185 g->verbose_cimport = verbose_cimport;1189 g->verbose_cimport = verbose_cimport;
1186 g->verbose_cc = verbose_cc;1190 g->verbose_cc = verbose_cc;
1191 g->verbose_llvm_cpu_features = verbose_llvm_cpu_features;
1187 g->output_dir = output_dir;1192 g->output_dir = output_dir;
1188 g->disable_gen_h = disable_gen_h;1193 g->disable_gen_h = disable_gen_h;
1189 g->bundle_compiler_rt = bundle_compiler_rt;1194 g->bundle_compiler_rt = bundle_compiler_rt;