authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-21 00:34:54-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-21 00:34:54-05:00
loge640d015351c3d3bf7c41020ff2a87f38f853140
tree8ff75fc739c83d45573753b9d80b8f39a95cae71
parent6118b11afa1bbceab6ab4681f1f79e68aa131b65
signature Commit is signed but in an unrecognized format.

fixups to arch data, support any number of cpu features


22 files changed, 777 insertions(+), 702 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 (Target.Cpu.Feature.isEnabled(features, @intCast(u7, i))) {1986 if (features.isEnabled(@intCast(u8, 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+60-31
...@@ -219,7 +219,8 @@ pub const Target = union(enum) {...@@ -219,7 +219,8 @@ pub const Target = union(enum) {
219 pub fn parseCpuFeatureSet(arch: Arch, features_text: []const u8) !Cpu.Feature.Set {219 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, based220 // Here we compute both and choose the correct result at the end, based
221 // on whether or not we saw + and - signs.221 // on whether or not we saw + and - signs.
222 var set: @Vector(2, Cpu.Feature.Set) = [2]Cpu.Feature.Set{ 0, arch.baselineFeatures() };222 var whitelist_set = Cpu.Feature.Set.empty();
223 var baseline_set = arch.baselineFeatures();
223 var mode: enum {224 var mode: enum {
224 unknown,225 unknown,
225 baseline,226 baseline,
...@@ -257,10 +258,15 @@ pub const Target = union(enum) {...@@ -257,10 +258,15 @@ pub const Target = union(enum) {
257 }258 }
258 for (arch.allFeaturesList()) |feature, index| {259 for (arch.allFeaturesList()) |feature, index| {
259 if (mem.eql(u8, feature_name, feature.name)) {260 if (mem.eql(u8, feature_name, feature.name)) {
260 const one_bit = @as(Cpu.Feature.Set, 1) << @intCast(u7, index);
261 switch (op) {261 switch (op) {
262 .add => set |= @splat(2, one_bit),262 .add => {
263 .sub => set &= @splat(2, ~one_bit),263 baseline_set.addFeature(@intCast(u8, index));
264 whitelist_set.addFeature(@intCast(u8, index));
265 },
266 .sub => {
267 baseline_set.removeFeature(@intCast(u8, index));
268 whitelist_set.removeFeature(@intCast(u8, index));
269 },
264 }270 }
265 break;271 break;
266 }272 }
...@@ -270,8 +276,8 @@ pub const Target = union(enum) {...@@ -270,8 +276,8 @@ pub const Target = union(enum) {
270 }276 }
271277
272 return switch (mode) {278 return switch (mode) {
273 .unknown, .whitelist => set[0],279 .unknown, .whitelist => whitelist_set,
274 .baseline => set[1],280 .baseline => baseline_set,
275 };281 };
276 }282 }
277283
...@@ -413,21 +419,21 @@ pub const Target = union(enum) {...@@ -413,21 +419,21 @@ pub const Target = union(enum) {
413 /// All CPU features Zig is aware of, sorted lexicographically by name.419 /// All CPU features Zig is aware of, sorted lexicographically by name.
414 pub fn allFeaturesList(arch: Arch) []const Cpu.Feature {420 pub fn allFeaturesList(arch: Arch) []const Cpu.Feature {
415 return switch (arch) {421 return switch (arch) {
416 .arm, .armeb, .thumb, .thumbeb => arm.all_features,422 .arm, .armeb, .thumb, .thumbeb => &arm.all_features,
417 .aarch64, .aarch64_be, .aarch64_32 => &aarch64.all_features,423 .aarch64, .aarch64_be, .aarch64_32 => &aarch64.all_features,
418 .avr => avr.all_features,424 .avr => &avr.all_features,
419 .bpfel, .bpfeb => bpf.all_features,425 .bpfel, .bpfeb => &bpf.all_features,
420 .hexagon => hexagon.all_features,426 .hexagon => &hexagon.all_features,
421 .mips, .mipsel, .mips64, .mips64el => mips.all_features,427 .mips, .mipsel, .mips64, .mips64el => &mips.all_features,
422 .msp430 => msp430.all_features,428 .msp430 => &msp430.all_features,
423 .powerpc, .powerpc64, .powerpc64le => powerpc.all_features,429 .powerpc, .powerpc64, .powerpc64le => &powerpc.all_features,
424 .amdgcn => amdgpu.all_features,430 .amdgcn => &amdgpu.all_features,
425 .riscv32, .riscv64 => riscv.all_features,431 .riscv32, .riscv64 => &riscv.all_features,
426 .sparc, .sparcv9, .sparcel => sparc.all_features,432 .sparc, .sparcv9, .sparcel => &sparc.all_features,
427 .s390x => systemz.all_features,433 .s390x => &systemz.all_features,
428 .i386, .x86_64 => &x86.all_features,434 .i386, .x86_64 => &x86.all_features,
429 .nvptx, .nvptx64 => nvptx.all_features,435 .nvptx, .nvptx64 => &nvptx.all_features,
430 .wasm32, .wasm64 => wasm.all_features,436 .wasm32, .wasm64 => &wasm.all_features,
431437
432 else => &[0]Cpu.Feature{},438 else => &[0]Cpu.Feature{},
433 };439 };
...@@ -439,10 +445,11 @@ pub const Target = union(enum) {...@@ -439,10 +445,11 @@ pub const Target = union(enum) {
439 return switch (arch) {445 return switch (arch) {
440 .arm, .armeb, .thumb, .thumbeb => arm.cpu.generic.features,446 .arm, .armeb, .thumb, .thumbeb => arm.cpu.generic.features,
441 .aarch64, .aarch64_be, .aarch64_32 => aarch64.cpu.generic.features,447 .aarch64, .aarch64_be, .aarch64_32 => aarch64.cpu.generic.features,
442 .avr => avr.cpu.generic.features,448 .avr => avr.baseline_features,
443 .bpfel, .bpfeb => bpf.cpu.generic.features,449 .bpfel, .bpfeb => bpf.cpu.generic.features,
444 .hexagon => hexagon.cpu.generic.features,450 .hexagon => hexagon.cpu.generic.features,
445 .mips, .mipsel, .mips64, .mips64el => mips.cpu.generic.features,451 .mips, .mipsel => mips.cpu.mips32.features,
452 .mips64, .mips64el => mips.cpu.mips64.features,
446 .msp430 => msp430.cpu.generic.features,453 .msp430 => msp430.cpu.generic.features,
447 .powerpc, .powerpc64, .powerpc64le => powerpc.cpu.generic.features,454 .powerpc, .powerpc64, .powerpc64le => powerpc.cpu.generic.features,
448 .amdgcn => amdgpu.cpu.generic.features,455 .amdgcn => amdgpu.cpu.generic.features,
...@@ -452,10 +459,10 @@ pub const Target = union(enum) {...@@ -452,10 +459,10 @@ pub const Target = union(enum) {
452 .s390x => systemz.cpu.generic.features,459 .s390x => systemz.cpu.generic.features,
453 .i386 => x86.cpu.pentium4.features,460 .i386 => x86.cpu.pentium4.features,
454 .x86_64 => x86.cpu.x86_64.features,461 .x86_64 => x86.cpu.x86_64.features,
455 .nvptx, .nvptx64 => nvptx.cpu.generic.features,462 .nvptx, .nvptx64 => nvptx.cpu.sm_20.features,
456 .wasm32, .wasm64 => wasm.cpu.generic.features,463 .wasm32, .wasm64 => wasm.cpu.generic.features,
457464
458 else => 0,465 else => Cpu.Feature.Set.empty(),
459 };466 };
460 }467 }
461468
...@@ -522,24 +529,46 @@ pub const Target = union(enum) {...@@ -522,24 +529,46 @@ pub const Target = union(enum) {
522 dependencies: Set,529 dependencies: Set,
523530
524 /// A bit set of all the features.531 /// A bit set of all the features.
525 pub const Set = u128;532 pub const Set = struct {
533 bytes: [bit_count / 8]u8,
526534
527 pub fn isEnabled(set: Set, arch_feature_index: u7) bool {535 pub const bit_count = 22 * 8;
528 return (set & (@as(Set, 1) << arch_feature_index)) != 0;536
529 }537 pub fn empty() Set {
538 return .{ .bytes = [1]u8{0} ** 22 };
539 }
540
541 pub fn isEnabled(set: Set, arch_feature_index: u8) bool {
542 const byte_index = arch_feature_index / 8;
543 const bit_index = @intCast(u3, arch_feature_index % 8);
544 return (set.bytes[byte_index] & (@as(u8, 1) << bit_index)) != 0;
545 }
546
547 pub fn addFeature(set: *Set, arch_feature_index: u8) void {
548 const byte_index = arch_feature_index / 8;
549 const bit_index = @intCast(u3, arch_feature_index % 8);
550 set.bytes[byte_index] |= @as(u8, 1) << bit_index;
551 }
552
553 pub fn removeFeature(set: *Set, arch_feature_index: u8) void {
554 const byte_index = arch_feature_index / 8;
555 const bit_index = @intCast(u3, arch_feature_index % 8);
556 set.bytes[byte_index] &= ~(@as(u8, 1) << bit_index);
557 }
558 };
530559
531 pub fn feature_set_fns(comptime F: type) type {560 pub fn feature_set_fns(comptime F: type) type {
532 return struct {561 return struct {
533 pub fn featureSet(features: []const F) Set {562 pub fn featureSet(features: []const F) Set {
534 var x: Set = 0;563 var x = Set.empty();
535 for (features) |feature| {564 for (features) |feature| {
536 x |= @as(Set, 1) << @enumToInt(feature);565 x.addFeature(@enumToInt(feature));
537 }566 }
538 return x;567 return x;
539 }568 }
540569
541 pub fn featureSetHas(set: Set, feature: F) bool {570 pub fn featureSetHas(set: Set, feature: F) bool {
542 return (set & (@as(Set, 1) << @enumToInt(feature))) != 0;571 return set.isEnabled(@enumToInt(feature));
543 }572 }
544 };573 };
545 }574 }
...@@ -748,7 +777,7 @@ pub const Target = union(enum) {...@@ -748,7 +777,7 @@ pub const Target = union(enum) {
748 pub fn parseArchSub(text: []const u8) ParseArchSubError!Arch {777 pub fn parseArchSub(text: []const u8) ParseArchSubError!Arch {
749 const info = @typeInfo(Arch);778 const info = @typeInfo(Arch);
750 inline for (info.Union.fields) |field| {779 inline for (info.Union.fields) |field| {
751 if (mem.eql(u8, text, field.name)) {780 if (mem.startsWith(u8, text, field.name)) {
752 if (field.field_type == void) {781 if (field.field_type == void) {
753 return @as(Arch, @field(Arch, field.name));782 return @as(Arch, @field(Arch, field.name));
754 } else {783 } else {
lib/std/target/aarch64.zig+100-100
...@@ -154,7 +154,7 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -154,7 +154,7 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
154154
155pub const all_features = blk: {155pub const all_features = blk: {
156 const len = @typeInfo(Feature).Enum.fields.len;156 const len = @typeInfo(Feature).Enum.fields.len;
157 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);157 std.debug.assert(len <= Cpu.Feature.Set.bit_count);
158 var result: [len]Cpu.Feature = undefined;158 var result: [len]Cpu.Feature = undefined;
159 result[@enumToInt(Feature.a35)] = .{159 result[@enumToInt(Feature.a35)] = .{
160 .index = @enumToInt(Feature.a35),160 .index = @enumToInt(Feature.a35),
...@@ -298,140 +298,140 @@ pub const all_features = blk: {...@@ -298,140 +298,140 @@ pub const all_features = blk: {
298 .name = @tagName(Feature.aggressive_fma),298 .name = @tagName(Feature.aggressive_fma),
299 .llvm_name = "aggressive-fma",299 .llvm_name = "aggressive-fma",
300 .description = "Enable Aggressive FMA for floating-point.",300 .description = "Enable Aggressive FMA for floating-point.",
301 .dependencies = 0,301 .dependencies = featureSet(&[_]Feature{}),
302 };302 };
303 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{303 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
304 .index = @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),305 .name = @tagName(Feature.alternate_sextload_cvt_f32_pattern),
306 .llvm_name = "alternate-sextload-cvt-f32-pattern",306 .llvm_name = "alternate-sextload-cvt-f32-pattern",
307 .description = "Use alternative pattern for sextload convert to f32",307 .description = "Use alternative pattern for sextload convert to f32",
308 .dependencies = 0,308 .dependencies = featureSet(&[_]Feature{}),
309 };309 };
310 result[@enumToInt(Feature.altnzcv)] = .{310 result[@enumToInt(Feature.altnzcv)] = .{
311 .index = @enumToInt(Feature.altnzcv),311 .index = @enumToInt(Feature.altnzcv),
312 .name = @tagName(Feature.altnzcv),312 .name = @tagName(Feature.altnzcv),
313 .llvm_name = "altnzcv",313 .llvm_name = "altnzcv",
314 .description = "Enable alternative NZCV format for floating point comparisons",314 .description = "Enable alternative NZCV format for floating point comparisons",
315 .dependencies = 0,315 .dependencies = featureSet(&[_]Feature{}),
316 };316 };
317 result[@enumToInt(Feature.am)] = .{317 result[@enumToInt(Feature.am)] = .{
318 .index = @enumToInt(Feature.am),318 .index = @enumToInt(Feature.am),
319 .name = @tagName(Feature.am),319 .name = @tagName(Feature.am),
320 .llvm_name = "am",320 .llvm_name = "am",
321 .description = "Enable v8.4-A Activity Monitors extension",321 .description = "Enable v8.4-A Activity Monitors extension",
322 .dependencies = 0,322 .dependencies = featureSet(&[_]Feature{}),
323 };323 };
324 result[@enumToInt(Feature.arith_bcc_fusion)] = .{324 result[@enumToInt(Feature.arith_bcc_fusion)] = .{
325 .index = @enumToInt(Feature.arith_bcc_fusion),325 .index = @enumToInt(Feature.arith_bcc_fusion),
326 .name = @tagName(Feature.arith_bcc_fusion),326 .name = @tagName(Feature.arith_bcc_fusion),
327 .llvm_name = "arith-bcc-fusion",327 .llvm_name = "arith-bcc-fusion",
328 .description = "CPU fuses arithmetic+bcc operations",328 .description = "CPU fuses arithmetic+bcc operations",
329 .dependencies = 0,329 .dependencies = featureSet(&[_]Feature{}),
330 };330 };
331 result[@enumToInt(Feature.arith_cbz_fusion)] = .{331 result[@enumToInt(Feature.arith_cbz_fusion)] = .{
332 .index = @enumToInt(Feature.arith_cbz_fusion),332 .index = @enumToInt(Feature.arith_cbz_fusion),
333 .name = @tagName(Feature.arith_cbz_fusion),333 .name = @tagName(Feature.arith_cbz_fusion),
334 .llvm_name = "arith-cbz-fusion",334 .llvm_name = "arith-cbz-fusion",
335 .description = "CPU fuses arithmetic + cbz/cbnz operations",335 .description = "CPU fuses arithmetic + cbz/cbnz operations",
336 .dependencies = 0,336 .dependencies = featureSet(&[_]Feature{}),
337 };337 };
338 result[@enumToInt(Feature.balance_fp_ops)] = .{338 result[@enumToInt(Feature.balance_fp_ops)] = .{
339 .index = @enumToInt(Feature.balance_fp_ops),339 .index = @enumToInt(Feature.balance_fp_ops),
340 .name = @tagName(Feature.balance_fp_ops),340 .name = @tagName(Feature.balance_fp_ops),
341 .llvm_name = "balance-fp-ops",341 .llvm_name = "balance-fp-ops",
342 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",342 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",
343 .dependencies = 0,343 .dependencies = featureSet(&[_]Feature{}),
344 };344 };
345 result[@enumToInt(Feature.bti)] = .{345 result[@enumToInt(Feature.bti)] = .{
346 .index = @enumToInt(Feature.bti),346 .index = @enumToInt(Feature.bti),
347 .name = @tagName(Feature.bti),347 .name = @tagName(Feature.bti),
348 .llvm_name = "bti",348 .llvm_name = "bti",
349 .description = "Enable Branch Target Identification",349 .description = "Enable Branch Target Identification",
350 .dependencies = 0,350 .dependencies = featureSet(&[_]Feature{}),
351 };351 };
352 result[@enumToInt(Feature.call_saved_x10)] = .{352 result[@enumToInt(Feature.call_saved_x10)] = .{
353 .index = @enumToInt(Feature.call_saved_x10),353 .index = @enumToInt(Feature.call_saved_x10),
354 .name = @tagName(Feature.call_saved_x10),354 .name = @tagName(Feature.call_saved_x10),
355 .llvm_name = "call-saved-x10",355 .llvm_name = "call-saved-x10",
356 .description = "Make X10 callee saved.",356 .description = "Make X10 callee saved.",
357 .dependencies = 0,357 .dependencies = featureSet(&[_]Feature{}),
358 };358 };
359 result[@enumToInt(Feature.call_saved_x11)] = .{359 result[@enumToInt(Feature.call_saved_x11)] = .{
360 .index = @enumToInt(Feature.call_saved_x11),360 .index = @enumToInt(Feature.call_saved_x11),
361 .name = @tagName(Feature.call_saved_x11),361 .name = @tagName(Feature.call_saved_x11),
362 .llvm_name = "call-saved-x11",362 .llvm_name = "call-saved-x11",
363 .description = "Make X11 callee saved.",363 .description = "Make X11 callee saved.",
364 .dependencies = 0,364 .dependencies = featureSet(&[_]Feature{}),
365 };365 };
366 result[@enumToInt(Feature.call_saved_x12)] = .{366 result[@enumToInt(Feature.call_saved_x12)] = .{
367 .index = @enumToInt(Feature.call_saved_x12),367 .index = @enumToInt(Feature.call_saved_x12),
368 .name = @tagName(Feature.call_saved_x12),368 .name = @tagName(Feature.call_saved_x12),
369 .llvm_name = "call-saved-x12",369 .llvm_name = "call-saved-x12",
370 .description = "Make X12 callee saved.",370 .description = "Make X12 callee saved.",
371 .dependencies = 0,371 .dependencies = featureSet(&[_]Feature{}),
372 };372 };
373 result[@enumToInt(Feature.call_saved_x13)] = .{373 result[@enumToInt(Feature.call_saved_x13)] = .{
374 .index = @enumToInt(Feature.call_saved_x13),374 .index = @enumToInt(Feature.call_saved_x13),
375 .name = @tagName(Feature.call_saved_x13),375 .name = @tagName(Feature.call_saved_x13),
376 .llvm_name = "call-saved-x13",376 .llvm_name = "call-saved-x13",
377 .description = "Make X13 callee saved.",377 .description = "Make X13 callee saved.",
378 .dependencies = 0,378 .dependencies = featureSet(&[_]Feature{}),
379 };379 };
380 result[@enumToInt(Feature.call_saved_x14)] = .{380 result[@enumToInt(Feature.call_saved_x14)] = .{
381 .index = @enumToInt(Feature.call_saved_x14),381 .index = @enumToInt(Feature.call_saved_x14),
382 .name = @tagName(Feature.call_saved_x14),382 .name = @tagName(Feature.call_saved_x14),
383 .llvm_name = "call-saved-x14",383 .llvm_name = "call-saved-x14",
384 .description = "Make X14 callee saved.",384 .description = "Make X14 callee saved.",
385 .dependencies = 0,385 .dependencies = featureSet(&[_]Feature{}),
386 };386 };
387 result[@enumToInt(Feature.call_saved_x15)] = .{387 result[@enumToInt(Feature.call_saved_x15)] = .{
388 .index = @enumToInt(Feature.call_saved_x15),388 .index = @enumToInt(Feature.call_saved_x15),
389 .name = @tagName(Feature.call_saved_x15),389 .name = @tagName(Feature.call_saved_x15),
390 .llvm_name = "call-saved-x15",390 .llvm_name = "call-saved-x15",
391 .description = "Make X15 callee saved.",391 .description = "Make X15 callee saved.",
392 .dependencies = 0,392 .dependencies = featureSet(&[_]Feature{}),
393 };393 };
394 result[@enumToInt(Feature.call_saved_x18)] = .{394 result[@enumToInt(Feature.call_saved_x18)] = .{
395 .index = @enumToInt(Feature.call_saved_x18),395 .index = @enumToInt(Feature.call_saved_x18),
396 .name = @tagName(Feature.call_saved_x18),396 .name = @tagName(Feature.call_saved_x18),
397 .llvm_name = "call-saved-x18",397 .llvm_name = "call-saved-x18",
398 .description = "Make X18 callee saved.",398 .description = "Make X18 callee saved.",
399 .dependencies = 0,399 .dependencies = featureSet(&[_]Feature{}),
400 };400 };
401 result[@enumToInt(Feature.call_saved_x8)] = .{401 result[@enumToInt(Feature.call_saved_x8)] = .{
402 .index = @enumToInt(Feature.call_saved_x8),402 .index = @enumToInt(Feature.call_saved_x8),
403 .name = @tagName(Feature.call_saved_x8),403 .name = @tagName(Feature.call_saved_x8),
404 .llvm_name = "call-saved-x8",404 .llvm_name = "call-saved-x8",
405 .description = "Make X8 callee saved.",405 .description = "Make X8 callee saved.",
406 .dependencies = 0,406 .dependencies = featureSet(&[_]Feature{}),
407 };407 };
408 result[@enumToInt(Feature.call_saved_x9)] = .{408 result[@enumToInt(Feature.call_saved_x9)] = .{
409 .index = @enumToInt(Feature.call_saved_x9),409 .index = @enumToInt(Feature.call_saved_x9),
410 .name = @tagName(Feature.call_saved_x9),410 .name = @tagName(Feature.call_saved_x9),
411 .llvm_name = "call-saved-x9",411 .llvm_name = "call-saved-x9",
412 .description = "Make X9 callee saved.",412 .description = "Make X9 callee saved.",
413 .dependencies = 0,413 .dependencies = featureSet(&[_]Feature{}),
414 };414 };
415 result[@enumToInt(Feature.ccdp)] = .{415 result[@enumToInt(Feature.ccdp)] = .{
416 .index = @enumToInt(Feature.ccdp),416 .index = @enumToInt(Feature.ccdp),
417 .name = @tagName(Feature.ccdp),417 .name = @tagName(Feature.ccdp),
418 .llvm_name = "ccdp",418 .llvm_name = "ccdp",
419 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",419 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
420 .dependencies = 0,420 .dependencies = featureSet(&[_]Feature{}),
421 };421 };
422 result[@enumToInt(Feature.ccidx)] = .{422 result[@enumToInt(Feature.ccidx)] = .{
423 .index = @enumToInt(Feature.ccidx),423 .index = @enumToInt(Feature.ccidx),
424 .name = @tagName(Feature.ccidx),424 .name = @tagName(Feature.ccidx),
425 .llvm_name = "ccidx",425 .llvm_name = "ccidx",
426 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",426 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
427 .dependencies = 0,427 .dependencies = featureSet(&[_]Feature{}),
428 };428 };
429 result[@enumToInt(Feature.ccpp)] = .{429 result[@enumToInt(Feature.ccpp)] = .{
430 .index = @enumToInt(Feature.ccpp),430 .index = @enumToInt(Feature.ccpp),
431 .name = @tagName(Feature.ccpp),431 .name = @tagName(Feature.ccpp),
432 .llvm_name = "ccpp",432 .llvm_name = "ccpp",
433 .description = "Enable v8.2 data Cache Clean to Point of Persistence",433 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
434 .dependencies = 0,434 .dependencies = featureSet(&[_]Feature{}),
435 };435 };
436 result[@enumToInt(Feature.complxnum)] = .{436 result[@enumToInt(Feature.complxnum)] = .{
437 .index = @enumToInt(Feature.complxnum),437 .index = @enumToInt(Feature.complxnum),
...@@ -447,7 +447,7 @@ pub const all_features = blk: {...@@ -447,7 +447,7 @@ pub const all_features = blk: {
447 .name = @tagName(Feature.crc),447 .name = @tagName(Feature.crc),
448 .llvm_name = "crc",448 .llvm_name = "crc",
449 .description = "Enable ARMv8 CRC-32 checksum instructions",449 .description = "Enable ARMv8 CRC-32 checksum instructions",
450 .dependencies = 0,450 .dependencies = featureSet(&[_]Feature{}),
451 };451 };
452 result[@enumToInt(Feature.crypto)] = .{452 result[@enumToInt(Feature.crypto)] = .{
453 .index = @enumToInt(Feature.crypto),453 .index = @enumToInt(Feature.crypto),
...@@ -465,7 +465,7 @@ pub const all_features = blk: {...@@ -465,7 +465,7 @@ pub const all_features = blk: {
465 .name = @tagName(Feature.custom_cheap_as_move),465 .name = @tagName(Feature.custom_cheap_as_move),
466 .llvm_name = "custom-cheap-as-move",466 .llvm_name = "custom-cheap-as-move",
467 .description = "Use custom handling of cheap instructions",467 .description = "Use custom handling of cheap instructions",
468 .dependencies = 0,468 .dependencies = featureSet(&[_]Feature{}),
469 };469 };
470 result[@enumToInt(Feature.cyclone)] = .{470 result[@enumToInt(Feature.cyclone)] = .{
471 .index = @enumToInt(Feature.cyclone),471 .index = @enumToInt(Feature.cyclone),
...@@ -493,21 +493,21 @@ pub const all_features = blk: {...@@ -493,21 +493,21 @@ pub const all_features = blk: {
493 .name = @tagName(Feature.disable_latency_sched_heuristic),493 .name = @tagName(Feature.disable_latency_sched_heuristic),
494 .llvm_name = "disable-latency-sched-heuristic",494 .llvm_name = "disable-latency-sched-heuristic",
495 .description = "Disable latency scheduling heuristic",495 .description = "Disable latency scheduling heuristic",
496 .dependencies = 0,496 .dependencies = featureSet(&[_]Feature{}),
497 };497 };
498 result[@enumToInt(Feature.dit)] = .{498 result[@enumToInt(Feature.dit)] = .{
499 .index = @enumToInt(Feature.dit),499 .index = @enumToInt(Feature.dit),
500 .name = @tagName(Feature.dit),500 .name = @tagName(Feature.dit),
501 .llvm_name = "dit",501 .llvm_name = "dit",
502 .description = "Enable v8.4-A Data Independent Timing instructions",502 .description = "Enable v8.4-A Data Independent Timing instructions",
503 .dependencies = 0,503 .dependencies = featureSet(&[_]Feature{}),
504 };504 };
505 result[@enumToInt(Feature.dotprod)] = .{505 result[@enumToInt(Feature.dotprod)] = .{
506 .index = @enumToInt(Feature.dotprod),506 .index = @enumToInt(Feature.dotprod),
507 .name = @tagName(Feature.dotprod),507 .name = @tagName(Feature.dotprod),
508 .llvm_name = "dotprod",508 .llvm_name = "dotprod",
509 .description = "Enable dot product support",509 .description = "Enable dot product support",
510 .dependencies = 0,510 .dependencies = featureSet(&[_]Feature{}),
511 };511 };
512 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{512 result[@enumToInt(Feature.exynos_cheap_as_move)] = .{
513 .index = @enumToInt(Feature.exynos_cheap_as_move),513 .index = @enumToInt(Feature.exynos_cheap_as_move),
...@@ -626,21 +626,21 @@ pub const all_features = blk: {...@@ -626,21 +626,21 @@ pub const all_features = blk: {
626 .name = @tagName(Feature.fmi),626 .name = @tagName(Feature.fmi),
627 .llvm_name = "fmi",627 .llvm_name = "fmi",
628 .description = "Enable v8.4-A Flag Manipulation Instructions",628 .description = "Enable v8.4-A Flag Manipulation Instructions",
629 .dependencies = 0,629 .dependencies = featureSet(&[_]Feature{}),
630 };630 };
631 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{631 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
632 .index = @enumToInt(Feature.force_32bit_jump_tables),632 .index = @enumToInt(Feature.force_32bit_jump_tables),
633 .name = @tagName(Feature.force_32bit_jump_tables),633 .name = @tagName(Feature.force_32bit_jump_tables),
634 .llvm_name = "force-32bit-jump-tables",634 .llvm_name = "force-32bit-jump-tables",
635 .description = "Force jump table entries to be 32-bits wide except at MinSize",635 .description = "Force jump table entries to be 32-bits wide except at MinSize",
636 .dependencies = 0,636 .dependencies = featureSet(&[_]Feature{}),
637 };637 };
638 result[@enumToInt(Feature.fp_armv8)] = .{638 result[@enumToInt(Feature.fp_armv8)] = .{
639 .index = @enumToInt(Feature.fp_armv8),639 .index = @enumToInt(Feature.fp_armv8),
640 .name = @tagName(Feature.fp_armv8),640 .name = @tagName(Feature.fp_armv8),
641 .llvm_name = "fp-armv8",641 .llvm_name = "fp-armv8",
642 .description = "Enable ARMv8 FP",642 .description = "Enable ARMv8 FP",
643 .dependencies = 0,643 .dependencies = featureSet(&[_]Feature{}),
644 };644 };
645 result[@enumToInt(Feature.fp16fml)] = .{645 result[@enumToInt(Feature.fp16fml)] = .{
646 .index = @enumToInt(Feature.fp16fml),646 .index = @enumToInt(Feature.fp16fml),
...@@ -656,7 +656,7 @@ pub const all_features = blk: {...@@ -656,7 +656,7 @@ pub const all_features = blk: {
656 .name = @tagName(Feature.fptoint),656 .name = @tagName(Feature.fptoint),
657 .llvm_name = "fptoint",657 .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",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",
659 .dependencies = 0,659 .dependencies = featureSet(&[_]Feature{}),
660 };660 };
661 result[@enumToInt(Feature.fullfp16)] = .{661 result[@enumToInt(Feature.fullfp16)] = .{
662 .index = @enumToInt(Feature.fullfp16),662 .index = @enumToInt(Feature.fullfp16),
...@@ -672,42 +672,42 @@ pub const all_features = blk: {...@@ -672,42 +672,42 @@ pub const all_features = blk: {
672 .name = @tagName(Feature.fuse_address),672 .name = @tagName(Feature.fuse_address),
673 .llvm_name = "fuse-address",673 .llvm_name = "fuse-address",
674 .description = "CPU fuses address generation and memory operations",674 .description = "CPU fuses address generation and memory operations",
675 .dependencies = 0,675 .dependencies = featureSet(&[_]Feature{}),
676 };676 };
677 result[@enumToInt(Feature.fuse_aes)] = .{677 result[@enumToInt(Feature.fuse_aes)] = .{
678 .index = @enumToInt(Feature.fuse_aes),678 .index = @enumToInt(Feature.fuse_aes),
679 .name = @tagName(Feature.fuse_aes),679 .name = @tagName(Feature.fuse_aes),
680 .llvm_name = "fuse-aes",680 .llvm_name = "fuse-aes",
681 .description = "CPU fuses AES crypto operations",681 .description = "CPU fuses AES crypto operations",
682 .dependencies = 0,682 .dependencies = featureSet(&[_]Feature{}),
683 };683 };
684 result[@enumToInt(Feature.fuse_arith_logic)] = .{684 result[@enumToInt(Feature.fuse_arith_logic)] = .{
685 .index = @enumToInt(Feature.fuse_arith_logic),685 .index = @enumToInt(Feature.fuse_arith_logic),
686 .name = @tagName(Feature.fuse_arith_logic),686 .name = @tagName(Feature.fuse_arith_logic),
687 .llvm_name = "fuse-arith-logic",687 .llvm_name = "fuse-arith-logic",
688 .description = "CPU fuses arithmetic and logic operations",688 .description = "CPU fuses arithmetic and logic operations",
689 .dependencies = 0,689 .dependencies = featureSet(&[_]Feature{}),
690 };690 };
691 result[@enumToInt(Feature.fuse_crypto_eor)] = .{691 result[@enumToInt(Feature.fuse_crypto_eor)] = .{
692 .index = @enumToInt(Feature.fuse_crypto_eor),692 .index = @enumToInt(Feature.fuse_crypto_eor),
693 .name = @tagName(Feature.fuse_crypto_eor),693 .name = @tagName(Feature.fuse_crypto_eor),
694 .llvm_name = "fuse-crypto-eor",694 .llvm_name = "fuse-crypto-eor",
695 .description = "CPU fuses AES/PMULL and EOR operations",695 .description = "CPU fuses AES/PMULL and EOR operations",
696 .dependencies = 0,696 .dependencies = featureSet(&[_]Feature{}),
697 };697 };
698 result[@enumToInt(Feature.fuse_csel)] = .{698 result[@enumToInt(Feature.fuse_csel)] = .{
699 .index = @enumToInt(Feature.fuse_csel),699 .index = @enumToInt(Feature.fuse_csel),
700 .name = @tagName(Feature.fuse_csel),700 .name = @tagName(Feature.fuse_csel),
701 .llvm_name = "fuse-csel",701 .llvm_name = "fuse-csel",
702 .description = "CPU fuses conditional select operations",702 .description = "CPU fuses conditional select operations",
703 .dependencies = 0,703 .dependencies = featureSet(&[_]Feature{}),
704 };704 };
705 result[@enumToInt(Feature.fuse_literals)] = .{705 result[@enumToInt(Feature.fuse_literals)] = .{
706 .index = @enumToInt(Feature.fuse_literals),706 .index = @enumToInt(Feature.fuse_literals),
707 .name = @tagName(Feature.fuse_literals),707 .name = @tagName(Feature.fuse_literals),
708 .llvm_name = "fuse-literals",708 .llvm_name = "fuse-literals",
709 .description = "CPU fuses literal generation operations",709 .description = "CPU fuses literal generation operations",
710 .dependencies = 0,710 .dependencies = featureSet(&[_]Feature{}),
711 };711 };
712 result[@enumToInt(Feature.jsconv)] = .{712 result[@enumToInt(Feature.jsconv)] = .{
713 .index = @enumToInt(Feature.jsconv),713 .index = @enumToInt(Feature.jsconv),
...@@ -741,35 +741,35 @@ pub const all_features = blk: {...@@ -741,35 +741,35 @@ pub const all_features = blk: {
741 .name = @tagName(Feature.lor),741 .name = @tagName(Feature.lor),
742 .llvm_name = "lor",742 .llvm_name = "lor",
743 .description = "Enables ARM v8.1 Limited Ordering Regions extension",743 .description = "Enables ARM v8.1 Limited Ordering Regions extension",
744 .dependencies = 0,744 .dependencies = featureSet(&[_]Feature{}),
745 };745 };
746 result[@enumToInt(Feature.lse)] = .{746 result[@enumToInt(Feature.lse)] = .{
747 .index = @enumToInt(Feature.lse),747 .index = @enumToInt(Feature.lse),
748 .name = @tagName(Feature.lse),748 .name = @tagName(Feature.lse),
749 .llvm_name = "lse",749 .llvm_name = "lse",
750 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",750 .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions",
751 .dependencies = 0,751 .dependencies = featureSet(&[_]Feature{}),
752 };752 };
753 result[@enumToInt(Feature.lsl_fast)] = .{753 result[@enumToInt(Feature.lsl_fast)] = .{
754 .index = @enumToInt(Feature.lsl_fast),754 .index = @enumToInt(Feature.lsl_fast),
755 .name = @tagName(Feature.lsl_fast),755 .name = @tagName(Feature.lsl_fast),
756 .llvm_name = "lsl-fast",756 .llvm_name = "lsl-fast",
757 .description = "CPU has a fastpath logical shift of up to 3 places",757 .description = "CPU has a fastpath logical shift of up to 3 places",
758 .dependencies = 0,758 .dependencies = featureSet(&[_]Feature{}),
759 };759 };
760 result[@enumToInt(Feature.mpam)] = .{760 result[@enumToInt(Feature.mpam)] = .{
761 .index = @enumToInt(Feature.mpam),761 .index = @enumToInt(Feature.mpam),
762 .name = @tagName(Feature.mpam),762 .name = @tagName(Feature.mpam),
763 .llvm_name = "mpam",763 .llvm_name = "mpam",
764 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",764 .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension",
765 .dependencies = 0,765 .dependencies = featureSet(&[_]Feature{}),
766 };766 };
767 result[@enumToInt(Feature.mte)] = .{767 result[@enumToInt(Feature.mte)] = .{
768 .index = @enumToInt(Feature.mte),768 .index = @enumToInt(Feature.mte),
769 .name = @tagName(Feature.mte),769 .name = @tagName(Feature.mte),
770 .llvm_name = "mte",770 .llvm_name = "mte",
771 .description = "Enable Memory Tagging Extension",771 .description = "Enable Memory Tagging Extension",
772 .dependencies = 0,772 .dependencies = featureSet(&[_]Feature{}),
773 };773 };
774 result[@enumToInt(Feature.neon)] = .{774 result[@enumToInt(Feature.neon)] = .{
775 .index = @enumToInt(Feature.neon),775 .index = @enumToInt(Feature.neon),
...@@ -785,28 +785,28 @@ pub const all_features = blk: {...@@ -785,28 +785,28 @@ pub const all_features = blk: {
785 .name = @tagName(Feature.no_neg_immediates),785 .name = @tagName(Feature.no_neg_immediates),
786 .llvm_name = "no-neg-immediates",786 .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.",787 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
788 .dependencies = 0,788 .dependencies = featureSet(&[_]Feature{}),
789 };789 };
790 result[@enumToInt(Feature.nv)] = .{790 result[@enumToInt(Feature.nv)] = .{
791 .index = @enumToInt(Feature.nv),791 .index = @enumToInt(Feature.nv),
792 .name = @tagName(Feature.nv),792 .name = @tagName(Feature.nv),
793 .llvm_name = "nv",793 .llvm_name = "nv",
794 .description = "Enable v8.4-A Nested Virtualization Enchancement",794 .description = "Enable v8.4-A Nested Virtualization Enchancement",
795 .dependencies = 0,795 .dependencies = featureSet(&[_]Feature{}),
796 };796 };
797 result[@enumToInt(Feature.pa)] = .{797 result[@enumToInt(Feature.pa)] = .{
798 .index = @enumToInt(Feature.pa),798 .index = @enumToInt(Feature.pa),
799 .name = @tagName(Feature.pa),799 .name = @tagName(Feature.pa),
800 .llvm_name = "pa",800 .llvm_name = "pa",
801 .description = "Enable v8.3-A Pointer Authentication enchancement",801 .description = "Enable v8.3-A Pointer Authentication enchancement",
802 .dependencies = 0,802 .dependencies = featureSet(&[_]Feature{}),
803 };803 };
804 result[@enumToInt(Feature.pan)] = .{804 result[@enumToInt(Feature.pan)] = .{
805 .index = @enumToInt(Feature.pan),805 .index = @enumToInt(Feature.pan),
806 .name = @tagName(Feature.pan),806 .name = @tagName(Feature.pan),
807 .llvm_name = "pan",807 .llvm_name = "pan",
808 .description = "Enables ARM v8.1 Privileged Access-Never extension",808 .description = "Enables ARM v8.1 Privileged Access-Never extension",
809 .dependencies = 0,809 .dependencies = featureSet(&[_]Feature{}),
810 };810 };
811 result[@enumToInt(Feature.pan_rwv)] = .{811 result[@enumToInt(Feature.pan_rwv)] = .{
812 .index = @enumToInt(Feature.pan_rwv),812 .index = @enumToInt(Feature.pan_rwv),
...@@ -822,35 +822,35 @@ pub const all_features = blk: {...@@ -822,35 +822,35 @@ pub const all_features = blk: {
822 .name = @tagName(Feature.perfmon),822 .name = @tagName(Feature.perfmon),
823 .llvm_name = "perfmon",823 .llvm_name = "perfmon",
824 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",824 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",
825 .dependencies = 0,825 .dependencies = featureSet(&[_]Feature{}),
826 };826 };
827 result[@enumToInt(Feature.predictable_select_expensive)] = .{827 result[@enumToInt(Feature.predictable_select_expensive)] = .{
828 .index = @enumToInt(Feature.predictable_select_expensive),828 .index = @enumToInt(Feature.predictable_select_expensive),
829 .name = @tagName(Feature.predictable_select_expensive),829 .name = @tagName(Feature.predictable_select_expensive),
830 .llvm_name = "predictable-select-expensive",830 .llvm_name = "predictable-select-expensive",
831 .description = "Prefer likely predicted branches over selects",831 .description = "Prefer likely predicted branches over selects",
832 .dependencies = 0,832 .dependencies = featureSet(&[_]Feature{}),
833 };833 };
834 result[@enumToInt(Feature.predres)] = .{834 result[@enumToInt(Feature.predres)] = .{
835 .index = @enumToInt(Feature.predres),835 .index = @enumToInt(Feature.predres),
836 .name = @tagName(Feature.predres),836 .name = @tagName(Feature.predres),
837 .llvm_name = "predres",837 .llvm_name = "predres",
838 .description = "Enable v8.5a execution and data prediction invalidation instructions",838 .description = "Enable v8.5a execution and data prediction invalidation instructions",
839 .dependencies = 0,839 .dependencies = featureSet(&[_]Feature{}),
840 };840 };
841 result[@enumToInt(Feature.rand)] = .{841 result[@enumToInt(Feature.rand)] = .{
842 .index = @enumToInt(Feature.rand),842 .index = @enumToInt(Feature.rand),
843 .name = @tagName(Feature.rand),843 .name = @tagName(Feature.rand),
844 .llvm_name = "rand",844 .llvm_name = "rand",
845 .description = "Enable Random Number generation instructions",845 .description = "Enable Random Number generation instructions",
846 .dependencies = 0,846 .dependencies = featureSet(&[_]Feature{}),
847 };847 };
848 result[@enumToInt(Feature.ras)] = .{848 result[@enumToInt(Feature.ras)] = .{
849 .index = @enumToInt(Feature.ras),849 .index = @enumToInt(Feature.ras),
850 .name = @tagName(Feature.ras),850 .name = @tagName(Feature.ras),
851 .llvm_name = "ras",851 .llvm_name = "ras",
852 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",852 .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions",
853 .dependencies = 0,853 .dependencies = featureSet(&[_]Feature{}),
854 };854 };
855 result[@enumToInt(Feature.rasv8_4)] = .{855 result[@enumToInt(Feature.rasv8_4)] = .{
856 .index = @enumToInt(Feature.rasv8_4),856 .index = @enumToInt(Feature.rasv8_4),
...@@ -866,7 +866,7 @@ pub const all_features = blk: {...@@ -866,7 +866,7 @@ pub const all_features = blk: {
866 .name = @tagName(Feature.rcpc),866 .name = @tagName(Feature.rcpc),
867 .llvm_name = "rcpc",867 .llvm_name = "rcpc",
868 .description = "Enable support for RCPC extension",868 .description = "Enable support for RCPC extension",
869 .dependencies = 0,869 .dependencies = featureSet(&[_]Feature{}),
870 };870 };
871 result[@enumToInt(Feature.rcpc_immo)] = .{871 result[@enumToInt(Feature.rcpc_immo)] = .{
872 .index = @enumToInt(Feature.rcpc_immo),872 .index = @enumToInt(Feature.rcpc_immo),
...@@ -882,175 +882,175 @@ pub const all_features = blk: {...@@ -882,175 +882,175 @@ pub const all_features = blk: {
882 .name = @tagName(Feature.rdm),882 .name = @tagName(Feature.rdm),
883 .llvm_name = "rdm",883 .llvm_name = "rdm",
884 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",884 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",
885 .dependencies = 0,885 .dependencies = featureSet(&[_]Feature{}),
886 };886 };
887 result[@enumToInt(Feature.reserve_x1)] = .{887 result[@enumToInt(Feature.reserve_x1)] = .{
888 .index = @enumToInt(Feature.reserve_x1),888 .index = @enumToInt(Feature.reserve_x1),
889 .name = @tagName(Feature.reserve_x1),889 .name = @tagName(Feature.reserve_x1),
890 .llvm_name = "reserve-x1",890 .llvm_name = "reserve-x1",
891 .description = "Reserve X1, making it unavailable as a GPR",891 .description = "Reserve X1, making it unavailable as a GPR",
892 .dependencies = 0,892 .dependencies = featureSet(&[_]Feature{}),
893 };893 };
894 result[@enumToInt(Feature.reserve_x10)] = .{894 result[@enumToInt(Feature.reserve_x10)] = .{
895 .index = @enumToInt(Feature.reserve_x10),895 .index = @enumToInt(Feature.reserve_x10),
896 .name = @tagName(Feature.reserve_x10),896 .name = @tagName(Feature.reserve_x10),
897 .llvm_name = "reserve-x10",897 .llvm_name = "reserve-x10",
898 .description = "Reserve X10, making it unavailable as a GPR",898 .description = "Reserve X10, making it unavailable as a GPR",
899 .dependencies = 0,899 .dependencies = featureSet(&[_]Feature{}),
900 };900 };
901 result[@enumToInt(Feature.reserve_x11)] = .{901 result[@enumToInt(Feature.reserve_x11)] = .{
902 .index = @enumToInt(Feature.reserve_x11),902 .index = @enumToInt(Feature.reserve_x11),
903 .name = @tagName(Feature.reserve_x11),903 .name = @tagName(Feature.reserve_x11),
904 .llvm_name = "reserve-x11",904 .llvm_name = "reserve-x11",
905 .description = "Reserve X11, making it unavailable as a GPR",905 .description = "Reserve X11, making it unavailable as a GPR",
906 .dependencies = 0,906 .dependencies = featureSet(&[_]Feature{}),
907 };907 };
908 result[@enumToInt(Feature.reserve_x12)] = .{908 result[@enumToInt(Feature.reserve_x12)] = .{
909 .index = @enumToInt(Feature.reserve_x12),909 .index = @enumToInt(Feature.reserve_x12),
910 .name = @tagName(Feature.reserve_x12),910 .name = @tagName(Feature.reserve_x12),
911 .llvm_name = "reserve-x12",911 .llvm_name = "reserve-x12",
912 .description = "Reserve X12, making it unavailable as a GPR",912 .description = "Reserve X12, making it unavailable as a GPR",
913 .dependencies = 0,913 .dependencies = featureSet(&[_]Feature{}),
914 };914 };
915 result[@enumToInt(Feature.reserve_x13)] = .{915 result[@enumToInt(Feature.reserve_x13)] = .{
916 .index = @enumToInt(Feature.reserve_x13),916 .index = @enumToInt(Feature.reserve_x13),
917 .name = @tagName(Feature.reserve_x13),917 .name = @tagName(Feature.reserve_x13),
918 .llvm_name = "reserve-x13",918 .llvm_name = "reserve-x13",
919 .description = "Reserve X13, making it unavailable as a GPR",919 .description = "Reserve X13, making it unavailable as a GPR",
920 .dependencies = 0,920 .dependencies = featureSet(&[_]Feature{}),
921 };921 };
922 result[@enumToInt(Feature.reserve_x14)] = .{922 result[@enumToInt(Feature.reserve_x14)] = .{
923 .index = @enumToInt(Feature.reserve_x14),923 .index = @enumToInt(Feature.reserve_x14),
924 .name = @tagName(Feature.reserve_x14),924 .name = @tagName(Feature.reserve_x14),
925 .llvm_name = "reserve-x14",925 .llvm_name = "reserve-x14",
926 .description = "Reserve X14, making it unavailable as a GPR",926 .description = "Reserve X14, making it unavailable as a GPR",
927 .dependencies = 0,927 .dependencies = featureSet(&[_]Feature{}),
928 };928 };
929 result[@enumToInt(Feature.reserve_x15)] = .{929 result[@enumToInt(Feature.reserve_x15)] = .{
930 .index = @enumToInt(Feature.reserve_x15),930 .index = @enumToInt(Feature.reserve_x15),
931 .name = @tagName(Feature.reserve_x15),931 .name = @tagName(Feature.reserve_x15),
932 .llvm_name = "reserve-x15",932 .llvm_name = "reserve-x15",
933 .description = "Reserve X15, making it unavailable as a GPR",933 .description = "Reserve X15, making it unavailable as a GPR",
934 .dependencies = 0,934 .dependencies = featureSet(&[_]Feature{}),
935 };935 };
936 result[@enumToInt(Feature.reserve_x18)] = .{936 result[@enumToInt(Feature.reserve_x18)] = .{
937 .index = @enumToInt(Feature.reserve_x18),937 .index = @enumToInt(Feature.reserve_x18),
938 .name = @tagName(Feature.reserve_x18),938 .name = @tagName(Feature.reserve_x18),
939 .llvm_name = "reserve-x18",939 .llvm_name = "reserve-x18",
940 .description = "Reserve X18, making it unavailable as a GPR",940 .description = "Reserve X18, making it unavailable as a GPR",
941 .dependencies = 0,941 .dependencies = featureSet(&[_]Feature{}),
942 };942 };
943 result[@enumToInt(Feature.reserve_x2)] = .{943 result[@enumToInt(Feature.reserve_x2)] = .{
944 .index = @enumToInt(Feature.reserve_x2),944 .index = @enumToInt(Feature.reserve_x2),
945 .name = @tagName(Feature.reserve_x2),945 .name = @tagName(Feature.reserve_x2),
946 .llvm_name = "reserve-x2",946 .llvm_name = "reserve-x2",
947 .description = "Reserve X2, making it unavailable as a GPR",947 .description = "Reserve X2, making it unavailable as a GPR",
948 .dependencies = 0,948 .dependencies = featureSet(&[_]Feature{}),
949 };949 };
950 result[@enumToInt(Feature.reserve_x20)] = .{950 result[@enumToInt(Feature.reserve_x20)] = .{
951 .index = @enumToInt(Feature.reserve_x20),951 .index = @enumToInt(Feature.reserve_x20),
952 .name = @tagName(Feature.reserve_x20),952 .name = @tagName(Feature.reserve_x20),
953 .llvm_name = "reserve-x20",953 .llvm_name = "reserve-x20",
954 .description = "Reserve X20, making it unavailable as a GPR",954 .description = "Reserve X20, making it unavailable as a GPR",
955 .dependencies = 0,955 .dependencies = featureSet(&[_]Feature{}),
956 };956 };
957 result[@enumToInt(Feature.reserve_x21)] = .{957 result[@enumToInt(Feature.reserve_x21)] = .{
958 .index = @enumToInt(Feature.reserve_x21),958 .index = @enumToInt(Feature.reserve_x21),
959 .name = @tagName(Feature.reserve_x21),959 .name = @tagName(Feature.reserve_x21),
960 .llvm_name = "reserve-x21",960 .llvm_name = "reserve-x21",
961 .description = "Reserve X21, making it unavailable as a GPR",961 .description = "Reserve X21, making it unavailable as a GPR",
962 .dependencies = 0,962 .dependencies = featureSet(&[_]Feature{}),
963 };963 };
964 result[@enumToInt(Feature.reserve_x22)] = .{964 result[@enumToInt(Feature.reserve_x22)] = .{
965 .index = @enumToInt(Feature.reserve_x22),965 .index = @enumToInt(Feature.reserve_x22),
966 .name = @tagName(Feature.reserve_x22),966 .name = @tagName(Feature.reserve_x22),
967 .llvm_name = "reserve-x22",967 .llvm_name = "reserve-x22",
968 .description = "Reserve X22, making it unavailable as a GPR",968 .description = "Reserve X22, making it unavailable as a GPR",
969 .dependencies = 0,969 .dependencies = featureSet(&[_]Feature{}),
970 };970 };
971 result[@enumToInt(Feature.reserve_x23)] = .{971 result[@enumToInt(Feature.reserve_x23)] = .{
972 .index = @enumToInt(Feature.reserve_x23),972 .index = @enumToInt(Feature.reserve_x23),
973 .name = @tagName(Feature.reserve_x23),973 .name = @tagName(Feature.reserve_x23),
974 .llvm_name = "reserve-x23",974 .llvm_name = "reserve-x23",
975 .description = "Reserve X23, making it unavailable as a GPR",975 .description = "Reserve X23, making it unavailable as a GPR",
976 .dependencies = 0,976 .dependencies = featureSet(&[_]Feature{}),
977 };977 };
978 result[@enumToInt(Feature.reserve_x24)] = .{978 result[@enumToInt(Feature.reserve_x24)] = .{
979 .index = @enumToInt(Feature.reserve_x24),979 .index = @enumToInt(Feature.reserve_x24),
980 .name = @tagName(Feature.reserve_x24),980 .name = @tagName(Feature.reserve_x24),
981 .llvm_name = "reserve-x24",981 .llvm_name = "reserve-x24",
982 .description = "Reserve X24, making it unavailable as a GPR",982 .description = "Reserve X24, making it unavailable as a GPR",
983 .dependencies = 0,983 .dependencies = featureSet(&[_]Feature{}),
984 };984 };
985 result[@enumToInt(Feature.reserve_x25)] = .{985 result[@enumToInt(Feature.reserve_x25)] = .{
986 .index = @enumToInt(Feature.reserve_x25),986 .index = @enumToInt(Feature.reserve_x25),
987 .name = @tagName(Feature.reserve_x25),987 .name = @tagName(Feature.reserve_x25),
988 .llvm_name = "reserve-x25",988 .llvm_name = "reserve-x25",
989 .description = "Reserve X25, making it unavailable as a GPR",989 .description = "Reserve X25, making it unavailable as a GPR",
990 .dependencies = 0,990 .dependencies = featureSet(&[_]Feature{}),
991 };991 };
992 result[@enumToInt(Feature.reserve_x26)] = .{992 result[@enumToInt(Feature.reserve_x26)] = .{
993 .index = @enumToInt(Feature.reserve_x26),993 .index = @enumToInt(Feature.reserve_x26),
994 .name = @tagName(Feature.reserve_x26),994 .name = @tagName(Feature.reserve_x26),
995 .llvm_name = "reserve-x26",995 .llvm_name = "reserve-x26",
996 .description = "Reserve X26, making it unavailable as a GPR",996 .description = "Reserve X26, making it unavailable as a GPR",
997 .dependencies = 0,997 .dependencies = featureSet(&[_]Feature{}),
998 };998 };
999 result[@enumToInt(Feature.reserve_x27)] = .{999 result[@enumToInt(Feature.reserve_x27)] = .{
1000 .index = @enumToInt(Feature.reserve_x27),1000 .index = @enumToInt(Feature.reserve_x27),
1001 .name = @tagName(Feature.reserve_x27),1001 .name = @tagName(Feature.reserve_x27),
1002 .llvm_name = "reserve-x27",1002 .llvm_name = "reserve-x27",
1003 .description = "Reserve X27, making it unavailable as a GPR",1003 .description = "Reserve X27, making it unavailable as a GPR",
1004 .dependencies = 0,1004 .dependencies = featureSet(&[_]Feature{}),
1005 };1005 };
1006 result[@enumToInt(Feature.reserve_x28)] = .{1006 result[@enumToInt(Feature.reserve_x28)] = .{
1007 .index = @enumToInt(Feature.reserve_x28),1007 .index = @enumToInt(Feature.reserve_x28),
1008 .name = @tagName(Feature.reserve_x28),1008 .name = @tagName(Feature.reserve_x28),
1009 .llvm_name = "reserve-x28",1009 .llvm_name = "reserve-x28",
1010 .description = "Reserve X28, making it unavailable as a GPR",1010 .description = "Reserve X28, making it unavailable as a GPR",
1011 .dependencies = 0,1011 .dependencies = featureSet(&[_]Feature{}),
1012 };1012 };
1013 result[@enumToInt(Feature.reserve_x3)] = .{1013 result[@enumToInt(Feature.reserve_x3)] = .{
1014 .index = @enumToInt(Feature.reserve_x3),1014 .index = @enumToInt(Feature.reserve_x3),
1015 .name = @tagName(Feature.reserve_x3),1015 .name = @tagName(Feature.reserve_x3),
1016 .llvm_name = "reserve-x3",1016 .llvm_name = "reserve-x3",
1017 .description = "Reserve X3, making it unavailable as a GPR",1017 .description = "Reserve X3, making it unavailable as a GPR",
1018 .dependencies = 0,1018 .dependencies = featureSet(&[_]Feature{}),
1019 };1019 };
1020 result[@enumToInt(Feature.reserve_x4)] = .{1020 result[@enumToInt(Feature.reserve_x4)] = .{
1021 .index = @enumToInt(Feature.reserve_x4),1021 .index = @enumToInt(Feature.reserve_x4),
1022 .name = @tagName(Feature.reserve_x4),1022 .name = @tagName(Feature.reserve_x4),
1023 .llvm_name = "reserve-x4",1023 .llvm_name = "reserve-x4",
1024 .description = "Reserve X4, making it unavailable as a GPR",1024 .description = "Reserve X4, making it unavailable as a GPR",
1025 .dependencies = 0,1025 .dependencies = featureSet(&[_]Feature{}),
1026 };1026 };
1027 result[@enumToInt(Feature.reserve_x5)] = .{1027 result[@enumToInt(Feature.reserve_x5)] = .{
1028 .index = @enumToInt(Feature.reserve_x5),1028 .index = @enumToInt(Feature.reserve_x5),
1029 .name = @tagName(Feature.reserve_x5),1029 .name = @tagName(Feature.reserve_x5),
1030 .llvm_name = "reserve-x5",1030 .llvm_name = "reserve-x5",
1031 .description = "Reserve X5, making it unavailable as a GPR",1031 .description = "Reserve X5, making it unavailable as a GPR",
1032 .dependencies = 0,1032 .dependencies = featureSet(&[_]Feature{}),
1033 };1033 };
1034 result[@enumToInt(Feature.reserve_x6)] = .{1034 result[@enumToInt(Feature.reserve_x6)] = .{
1035 .index = @enumToInt(Feature.reserve_x6),1035 .index = @enumToInt(Feature.reserve_x6),
1036 .name = @tagName(Feature.reserve_x6),1036 .name = @tagName(Feature.reserve_x6),
1037 .llvm_name = "reserve-x6",1037 .llvm_name = "reserve-x6",
1038 .description = "Reserve X6, making it unavailable as a GPR",1038 .description = "Reserve X6, making it unavailable as a GPR",
1039 .dependencies = 0,1039 .dependencies = featureSet(&[_]Feature{}),
1040 };1040 };
1041 result[@enumToInt(Feature.reserve_x7)] = .{1041 result[@enumToInt(Feature.reserve_x7)] = .{
1042 .index = @enumToInt(Feature.reserve_x7),1042 .index = @enumToInt(Feature.reserve_x7),
1043 .name = @tagName(Feature.reserve_x7),1043 .name = @tagName(Feature.reserve_x7),
1044 .llvm_name = "reserve-x7",1044 .llvm_name = "reserve-x7",
1045 .description = "Reserve X7, making it unavailable as a GPR",1045 .description = "Reserve X7, making it unavailable as a GPR",
1046 .dependencies = 0,1046 .dependencies = featureSet(&[_]Feature{}),
1047 };1047 };
1048 result[@enumToInt(Feature.reserve_x9)] = .{1048 result[@enumToInt(Feature.reserve_x9)] = .{
1049 .index = @enumToInt(Feature.reserve_x9),1049 .index = @enumToInt(Feature.reserve_x9),
1050 .name = @tagName(Feature.reserve_x9),1050 .name = @tagName(Feature.reserve_x9),
1051 .llvm_name = "reserve-x9",1051 .llvm_name = "reserve-x9",
1052 .description = "Reserve X9, making it unavailable as a GPR",1052 .description = "Reserve X9, making it unavailable as a GPR",
1053 .dependencies = 0,1053 .dependencies = featureSet(&[_]Feature{}),
1054 };1054 };
1055 result[@enumToInt(Feature.saphira)] = .{1055 result[@enumToInt(Feature.saphira)] = .{
1056 .index = @enumToInt(Feature.saphira),1056 .index = @enumToInt(Feature.saphira),
...@@ -1076,14 +1076,14 @@ pub const all_features = blk: {...@@ -1076,14 +1076,14 @@ pub const all_features = blk: {
1076 .name = @tagName(Feature.sb),1076 .name = @tagName(Feature.sb),
1077 .llvm_name = "sb",1077 .llvm_name = "sb",
1078 .description = "Enable v8.5 Speculation Barrier",1078 .description = "Enable v8.5 Speculation Barrier",
1079 .dependencies = 0,1079 .dependencies = featureSet(&[_]Feature{}),
1080 };1080 };
1081 result[@enumToInt(Feature.sel2)] = .{1081 result[@enumToInt(Feature.sel2)] = .{
1082 .index = @enumToInt(Feature.sel2),1082 .index = @enumToInt(Feature.sel2),
1083 .name = @tagName(Feature.sel2),1083 .name = @tagName(Feature.sel2),
1084 .llvm_name = "sel2",1084 .llvm_name = "sel2",
1085 .description = "Enable v8.4-A Secure Exception Level 2 extension",1085 .description = "Enable v8.4-A Secure Exception Level 2 extension",
1086 .dependencies = 0,1086 .dependencies = featureSet(&[_]Feature{}),
1087 };1087 };
1088 result[@enumToInt(Feature.sha2)] = .{1088 result[@enumToInt(Feature.sha2)] = .{
1089 .index = @enumToInt(Feature.sha2),1089 .index = @enumToInt(Feature.sha2),
...@@ -1109,21 +1109,21 @@ pub const all_features = blk: {...@@ -1109,21 +1109,21 @@ pub const all_features = blk: {
1109 .name = @tagName(Feature.slow_misaligned_128store),1109 .name = @tagName(Feature.slow_misaligned_128store),
1110 .llvm_name = "slow-misaligned-128store",1110 .llvm_name = "slow-misaligned-128store",
1111 .description = "Misaligned 128 bit stores are slow",1111 .description = "Misaligned 128 bit stores are slow",
1112 .dependencies = 0,1112 .dependencies = featureSet(&[_]Feature{}),
1113 };1113 };
1114 result[@enumToInt(Feature.slow_paired_128)] = .{1114 result[@enumToInt(Feature.slow_paired_128)] = .{
1115 .index = @enumToInt(Feature.slow_paired_128),1115 .index = @enumToInt(Feature.slow_paired_128),
1116 .name = @tagName(Feature.slow_paired_128),1116 .name = @tagName(Feature.slow_paired_128),
1117 .llvm_name = "slow-paired-128",1117 .llvm_name = "slow-paired-128",
1118 .description = "Paired 128 bit loads and stores are slow",1118 .description = "Paired 128 bit loads and stores are slow",
1119 .dependencies = 0,1119 .dependencies = featureSet(&[_]Feature{}),
1120 };1120 };
1121 result[@enumToInt(Feature.slow_strqro_store)] = .{1121 result[@enumToInt(Feature.slow_strqro_store)] = .{
1122 .index = @enumToInt(Feature.slow_strqro_store),1122 .index = @enumToInt(Feature.slow_strqro_store),
1123 .name = @tagName(Feature.slow_strqro_store),1123 .name = @tagName(Feature.slow_strqro_store),
1124 .llvm_name = "slow-strqro-store",1124 .llvm_name = "slow-strqro-store",
1125 .description = "STR of Q register with register offset is slow",1125 .description = "STR of Q register with register offset is slow",
1126 .dependencies = 0,1126 .dependencies = featureSet(&[_]Feature{}),
1127 };1127 };
1128 result[@enumToInt(Feature.sm4)] = .{1128 result[@enumToInt(Feature.sm4)] = .{
1129 .index = @enumToInt(Feature.sm4),1129 .index = @enumToInt(Feature.sm4),
...@@ -1139,35 +1139,35 @@ pub const all_features = blk: {...@@ -1139,35 +1139,35 @@ pub const all_features = blk: {
1139 .name = @tagName(Feature.spe),1139 .name = @tagName(Feature.spe),
1140 .llvm_name = "spe",1140 .llvm_name = "spe",
1141 .description = "Enable Statistical Profiling extension",1141 .description = "Enable Statistical Profiling extension",
1142 .dependencies = 0,1142 .dependencies = featureSet(&[_]Feature{}),
1143 };1143 };
1144 result[@enumToInt(Feature.specrestrict)] = .{1144 result[@enumToInt(Feature.specrestrict)] = .{
1145 .index = @enumToInt(Feature.specrestrict),1145 .index = @enumToInt(Feature.specrestrict),
1146 .name = @tagName(Feature.specrestrict),1146 .name = @tagName(Feature.specrestrict),
1147 .llvm_name = "specrestrict",1147 .llvm_name = "specrestrict",
1148 .description = "Enable architectural speculation restriction",1148 .description = "Enable architectural speculation restriction",
1149 .dependencies = 0,1149 .dependencies = featureSet(&[_]Feature{}),
1150 };1150 };
1151 result[@enumToInt(Feature.ssbs)] = .{1151 result[@enumToInt(Feature.ssbs)] = .{
1152 .index = @enumToInt(Feature.ssbs),1152 .index = @enumToInt(Feature.ssbs),
1153 .name = @tagName(Feature.ssbs),1153 .name = @tagName(Feature.ssbs),
1154 .llvm_name = "ssbs",1154 .llvm_name = "ssbs",
1155 .description = "Enable Speculative Store Bypass Safe bit",1155 .description = "Enable Speculative Store Bypass Safe bit",
1156 .dependencies = 0,1156 .dependencies = featureSet(&[_]Feature{}),
1157 };1157 };
1158 result[@enumToInt(Feature.strict_align)] = .{1158 result[@enumToInt(Feature.strict_align)] = .{
1159 .index = @enumToInt(Feature.strict_align),1159 .index = @enumToInt(Feature.strict_align),
1160 .name = @tagName(Feature.strict_align),1160 .name = @tagName(Feature.strict_align),
1161 .llvm_name = "strict-align",1161 .llvm_name = "strict-align",
1162 .description = "Disallow all unaligned memory access",1162 .description = "Disallow all unaligned memory access",
1163 .dependencies = 0,1163 .dependencies = featureSet(&[_]Feature{}),
1164 };1164 };
1165 result[@enumToInt(Feature.sve)] = .{1165 result[@enumToInt(Feature.sve)] = .{
1166 .index = @enumToInt(Feature.sve),1166 .index = @enumToInt(Feature.sve),
1167 .name = @tagName(Feature.sve),1167 .name = @tagName(Feature.sve),
1168 .llvm_name = "sve",1168 .llvm_name = "sve",
1169 .description = "Enable Scalable Vector Extension (SVE) instructions",1169 .description = "Enable Scalable Vector Extension (SVE) instructions",
1170 .dependencies = 0,1170 .dependencies = featureSet(&[_]Feature{}),
1171 };1171 };
1172 result[@enumToInt(Feature.sve2)] = .{1172 result[@enumToInt(Feature.sve2)] = .{
1173 .index = @enumToInt(Feature.sve2),1173 .index = @enumToInt(Feature.sve2),
...@@ -1300,35 +1300,35 @@ pub const all_features = blk: {...@@ -1300,35 +1300,35 @@ pub const all_features = blk: {
1300 .name = @tagName(Feature.tlb_rmi),1300 .name = @tagName(Feature.tlb_rmi),
1301 .llvm_name = "tlb-rmi",1301 .llvm_name = "tlb-rmi",
1302 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",1302 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1303 .dependencies = 0,1303 .dependencies = featureSet(&[_]Feature{}),
1304 };1304 };
1305 result[@enumToInt(Feature.tpidr_el1)] = .{1305 result[@enumToInt(Feature.tpidr_el1)] = .{
1306 .index = @enumToInt(Feature.tpidr_el1),1306 .index = @enumToInt(Feature.tpidr_el1),
1307 .name = @tagName(Feature.tpidr_el1),1307 .name = @tagName(Feature.tpidr_el1),
1308 .llvm_name = "tpidr-el1",1308 .llvm_name = "tpidr-el1",
1309 .description = "Permit use of TPIDR_EL1 for the TLS base",1309 .description = "Permit use of TPIDR_EL1 for the TLS base",
1310 .dependencies = 0,1310 .dependencies = featureSet(&[_]Feature{}),
1311 };1311 };
1312 result[@enumToInt(Feature.tpidr_el2)] = .{1312 result[@enumToInt(Feature.tpidr_el2)] = .{
1313 .index = @enumToInt(Feature.tpidr_el2),1313 .index = @enumToInt(Feature.tpidr_el2),
1314 .name = @tagName(Feature.tpidr_el2),1314 .name = @tagName(Feature.tpidr_el2),
1315 .llvm_name = "tpidr-el2",1315 .llvm_name = "tpidr-el2",
1316 .description = "Permit use of TPIDR_EL2 for the TLS base",1316 .description = "Permit use of TPIDR_EL2 for the TLS base",
1317 .dependencies = 0,1317 .dependencies = featureSet(&[_]Feature{}),
1318 };1318 };
1319 result[@enumToInt(Feature.tpidr_el3)] = .{1319 result[@enumToInt(Feature.tpidr_el3)] = .{
1320 .index = @enumToInt(Feature.tpidr_el3),1320 .index = @enumToInt(Feature.tpidr_el3),
1321 .name = @tagName(Feature.tpidr_el3),1321 .name = @tagName(Feature.tpidr_el3),
1322 .llvm_name = "tpidr-el3",1322 .llvm_name = "tpidr-el3",
1323 .description = "Permit use of TPIDR_EL3 for the TLS base",1323 .description = "Permit use of TPIDR_EL3 for the TLS base",
1324 .dependencies = 0,1324 .dependencies = featureSet(&[_]Feature{}),
1325 };1325 };
1326 result[@enumToInt(Feature.tracev8_4)] = .{1326 result[@enumToInt(Feature.tracev8_4)] = .{
1327 .index = @enumToInt(Feature.tracev8_4),1327 .index = @enumToInt(Feature.tracev8_4),
1328 .name = @tagName(Feature.tracev8_4),1328 .name = @tagName(Feature.tracev8_4),
1329 .llvm_name = "tracev8.4",1329 .llvm_name = "tracev8.4",
1330 .description = "Enable v8.4-A Trace extension",1330 .description = "Enable v8.4-A Trace extension",
1331 .dependencies = 0,1331 .dependencies = featureSet(&[_]Feature{}),
1332 };1332 };
1333 result[@enumToInt(Feature.tsv110)] = .{1333 result[@enumToInt(Feature.tsv110)] = .{
1334 .index = @enumToInt(Feature.tsv110),1334 .index = @enumToInt(Feature.tsv110),
...@@ -1355,28 +1355,28 @@ pub const all_features = blk: {...@@ -1355,28 +1355,28 @@ pub const all_features = blk: {
1355 .name = @tagName(Feature.uaops),1355 .name = @tagName(Feature.uaops),
1356 .llvm_name = "uaops",1356 .llvm_name = "uaops",
1357 .description = "Enable v8.2 UAO PState",1357 .description = "Enable v8.2 UAO PState",
1358 .dependencies = 0,1358 .dependencies = featureSet(&[_]Feature{}),
1359 };1359 };
1360 result[@enumToInt(Feature.use_aa)] = .{1360 result[@enumToInt(Feature.use_aa)] = .{
1361 .index = @enumToInt(Feature.use_aa),1361 .index = @enumToInt(Feature.use_aa),
1362 .name = @tagName(Feature.use_aa),1362 .name = @tagName(Feature.use_aa),
1363 .llvm_name = "use-aa",1363 .llvm_name = "use-aa",
1364 .description = "Use alias analysis during codegen",1364 .description = "Use alias analysis during codegen",
1365 .dependencies = 0,1365 .dependencies = featureSet(&[_]Feature{}),
1366 };1366 };
1367 result[@enumToInt(Feature.use_postra_scheduler)] = .{1367 result[@enumToInt(Feature.use_postra_scheduler)] = .{
1368 .index = @enumToInt(Feature.use_postra_scheduler),1368 .index = @enumToInt(Feature.use_postra_scheduler),
1369 .name = @tagName(Feature.use_postra_scheduler),1369 .name = @tagName(Feature.use_postra_scheduler),
1370 .llvm_name = "use-postra-scheduler",1370 .llvm_name = "use-postra-scheduler",
1371 .description = "Schedule again after register allocation",1371 .description = "Schedule again after register allocation",
1372 .dependencies = 0,1372 .dependencies = featureSet(&[_]Feature{}),
1373 };1373 };
1374 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{1374 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{
1375 .index = @enumToInt(Feature.use_reciprocal_square_root),1375 .index = @enumToInt(Feature.use_reciprocal_square_root),
1376 .name = @tagName(Feature.use_reciprocal_square_root),1376 .name = @tagName(Feature.use_reciprocal_square_root),
1377 .llvm_name = "use-reciprocal-square-root",1377 .llvm_name = "use-reciprocal-square-root",
1378 .description = "Use the reciprocal square root approximation",1378 .description = "Use the reciprocal square root approximation",
1379 .dependencies = 0,1379 .dependencies = featureSet(&[_]Feature{}),
1380 };1380 };
1381 result[@enumToInt(Feature.v8_1a)] = .{1381 result[@enumToInt(Feature.v8_1a)] = .{
1382 .index = @enumToInt(Feature.v8_1a),1382 .index = @enumToInt(Feature.v8_1a),
...@@ -1461,14 +1461,14 @@ pub const all_features = blk: {...@@ -1461,14 +1461,14 @@ pub const all_features = blk: {
1461 .name = @tagName(Feature.vh),1461 .name = @tagName(Feature.vh),
1462 .llvm_name = "vh",1462 .llvm_name = "vh",
1463 .description = "Enables ARM v8.1 Virtual Host extension",1463 .description = "Enables ARM v8.1 Virtual Host extension",
1464 .dependencies = 0,1464 .dependencies = featureSet(&[_]Feature{}),
1465 };1465 };
1466 result[@enumToInt(Feature.zcm)] = .{1466 result[@enumToInt(Feature.zcm)] = .{
1467 .index = @enumToInt(Feature.zcm),1467 .index = @enumToInt(Feature.zcm),
1468 .name = @tagName(Feature.zcm),1468 .name = @tagName(Feature.zcm),
1469 .llvm_name = "zcm",1469 .llvm_name = "zcm",
1470 .description = "Has zero-cycle register moves",1470 .description = "Has zero-cycle register moves",
1471 .dependencies = 0,1471 .dependencies = featureSet(&[_]Feature{}),
1472 };1472 };
1473 result[@enumToInt(Feature.zcz)] = .{1473 result[@enumToInt(Feature.zcz)] = .{
1474 .index = @enumToInt(Feature.zcz),1474 .index = @enumToInt(Feature.zcz),
...@@ -1485,21 +1485,21 @@ pub const all_features = blk: {...@@ -1485,21 +1485,21 @@ pub const all_features = blk: {
1485 .name = @tagName(Feature.zcz_fp),1485 .name = @tagName(Feature.zcz_fp),
1486 .llvm_name = "zcz-fp",1486 .llvm_name = "zcz-fp",
1487 .description = "Has zero-cycle zeroing instructions for FP registers",1487 .description = "Has zero-cycle zeroing instructions for FP registers",
1488 .dependencies = 0,1488 .dependencies = featureSet(&[_]Feature{}),
1489 };1489 };
1490 result[@enumToInt(Feature.zcz_fp_workaround)] = .{1490 result[@enumToInt(Feature.zcz_fp_workaround)] = .{
1491 .index = @enumToInt(Feature.zcz_fp_workaround),1491 .index = @enumToInt(Feature.zcz_fp_workaround),
1492 .name = @tagName(Feature.zcz_fp_workaround),1492 .name = @tagName(Feature.zcz_fp_workaround),
1493 .llvm_name = "zcz-fp-workaround",1493 .llvm_name = "zcz-fp-workaround",
1494 .description = "The zero-cycle floating-point zeroing instruction has a bug",1494 .description = "The zero-cycle floating-point zeroing instruction has a bug",
1495 .dependencies = 0,1495 .dependencies = featureSet(&[_]Feature{}),
1496 };1496 };
1497 result[@enumToInt(Feature.zcz_gp)] = .{1497 result[@enumToInt(Feature.zcz_gp)] = .{
1498 .index = @enumToInt(Feature.zcz_gp),1498 .index = @enumToInt(Feature.zcz_gp),
1499 .name = @tagName(Feature.zcz_gp),1499 .name = @tagName(Feature.zcz_gp),
1500 .llvm_name = "zcz-gp",1500 .llvm_name = "zcz-gp",
1501 .description = "Has zero-cycle zeroing instructions for generic registers",1501 .description = "Has zero-cycle zeroing instructions for generic registers",
1502 .dependencies = 0,1502 .dependencies = featureSet(&[_]Feature{}),
1503 };1503 };
1504 break :blk result;1504 break :blk result;
1505};1505};
lib/std/target/amdgpu.zig+100-100
...@@ -115,224 +115,224 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -115,224 +115,224 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
115115
116pub const all_features = blk: {116pub const all_features = blk: {
117 const len = @typeInfo(Feature).Enum.fields.len;117 const len = @typeInfo(Feature).Enum.fields.len;
118 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);118 std.debug.assert(len <= Cpu.Feature.Set.bit_count);
119 var result: [len]Cpu.Feature = undefined;119 var result: [len]Cpu.Feature = undefined;
120 result[@enumToInt(Feature.@"16_bit_insts")] = .{120 result[@enumToInt(Feature.@"16_bit_insts")] = .{
121 .index = @enumToInt(Feature.@"16_bit_insts"),121 .index = @enumToInt(Feature.@"16_bit_insts"),
122 .name = @tagName(Feature.@"16_bit_insts"),122 .name = @tagName(Feature.@"16_bit_insts"),
123 .llvm_name = "16-bit-insts",123 .llvm_name = "16-bit-insts",
124 .description = "Has i16/f16 instructions",124 .description = "Has i16/f16 instructions",
125 .dependencies = 0,125 .dependencies = featureSet(&[_]Feature{}),
126 };126 };
127 result[@enumToInt(Feature.DumpCode)] = .{127 result[@enumToInt(Feature.DumpCode)] = .{
128 .index = @enumToInt(Feature.DumpCode),128 .index = @enumToInt(Feature.DumpCode),
129 .name = @tagName(Feature.DumpCode),129 .name = @tagName(Feature.DumpCode),
130 .llvm_name = "DumpCode",130 .llvm_name = "DumpCode",
131 .description = "Dump MachineInstrs in the CodeEmitter",131 .description = "Dump MachineInstrs in the CodeEmitter",
132 .dependencies = 0,132 .dependencies = featureSet(&[_]Feature{}),
133 };133 };
134 result[@enumToInt(Feature.add_no_carry_insts)] = .{134 result[@enumToInt(Feature.add_no_carry_insts)] = .{
135 .index = @enumToInt(Feature.add_no_carry_insts),135 .index = @enumToInt(Feature.add_no_carry_insts),
136 .name = @tagName(Feature.add_no_carry_insts),136 .name = @tagName(Feature.add_no_carry_insts),
137 .llvm_name = "add-no-carry-insts",137 .llvm_name = "add-no-carry-insts",
138 .description = "Have VALU add/sub instructions without carry out",138 .description = "Have VALU add/sub instructions without carry out",
139 .dependencies = 0,139 .dependencies = featureSet(&[_]Feature{}),
140 };140 };
141 result[@enumToInt(Feature.aperture_regs)] = .{141 result[@enumToInt(Feature.aperture_regs)] = .{
142 .index = @enumToInt(Feature.aperture_regs),142 .index = @enumToInt(Feature.aperture_regs),
143 .name = @tagName(Feature.aperture_regs),143 .name = @tagName(Feature.aperture_regs),
144 .llvm_name = "aperture-regs",144 .llvm_name = "aperture-regs",
145 .description = "Has Memory Aperture Base and Size Registers",145 .description = "Has Memory Aperture Base and Size Registers",
146 .dependencies = 0,146 .dependencies = featureSet(&[_]Feature{}),
147 };147 };
148 result[@enumToInt(Feature.atomic_fadd_insts)] = .{148 result[@enumToInt(Feature.atomic_fadd_insts)] = .{
149 .index = @enumToInt(Feature.atomic_fadd_insts),149 .index = @enumToInt(Feature.atomic_fadd_insts),
150 .name = @tagName(Feature.atomic_fadd_insts),150 .name = @tagName(Feature.atomic_fadd_insts),
151 .llvm_name = "atomic-fadd-insts",151 .llvm_name = "atomic-fadd-insts",
152 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",152 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
153 .dependencies = 0,153 .dependencies = featureSet(&[_]Feature{}),
154 };154 };
155 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{155 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
156 .index = @enumToInt(Feature.auto_waitcnt_before_barrier),156 .index = @enumToInt(Feature.auto_waitcnt_before_barrier),
157 .name = @tagName(Feature.auto_waitcnt_before_barrier),157 .name = @tagName(Feature.auto_waitcnt_before_barrier),
158 .llvm_name = "auto-waitcnt-before-barrier",158 .llvm_name = "auto-waitcnt-before-barrier",
159 .description = "Hardware automatically inserts waitcnt before barrier",159 .description = "Hardware automatically inserts waitcnt before barrier",
160 .dependencies = 0,160 .dependencies = featureSet(&[_]Feature{}),
161 };161 };
162 result[@enumToInt(Feature.ci_insts)] = .{162 result[@enumToInt(Feature.ci_insts)] = .{
163 .index = @enumToInt(Feature.ci_insts),163 .index = @enumToInt(Feature.ci_insts),
164 .name = @tagName(Feature.ci_insts),164 .name = @tagName(Feature.ci_insts),
165 .llvm_name = "ci-insts",165 .llvm_name = "ci-insts",
166 .description = "Additional instructions for CI+",166 .description = "Additional instructions for CI+",
167 .dependencies = 0,167 .dependencies = featureSet(&[_]Feature{}),
168 };168 };
169 result[@enumToInt(Feature.code_object_v3)] = .{169 result[@enumToInt(Feature.code_object_v3)] = .{
170 .index = @enumToInt(Feature.code_object_v3),170 .index = @enumToInt(Feature.code_object_v3),
171 .name = @tagName(Feature.code_object_v3),171 .name = @tagName(Feature.code_object_v3),
172 .llvm_name = "code-object-v3",172 .llvm_name = "code-object-v3",
173 .description = "Generate code object version 3",173 .description = "Generate code object version 3",
174 .dependencies = 0,174 .dependencies = featureSet(&[_]Feature{}),
175 };175 };
176 result[@enumToInt(Feature.cumode)] = .{176 result[@enumToInt(Feature.cumode)] = .{
177 .index = @enumToInt(Feature.cumode),177 .index = @enumToInt(Feature.cumode),
178 .name = @tagName(Feature.cumode),178 .name = @tagName(Feature.cumode),
179 .llvm_name = "cumode",179 .llvm_name = "cumode",
180 .description = "Enable CU wavefront execution mode",180 .description = "Enable CU wavefront execution mode",
181 .dependencies = 0,181 .dependencies = featureSet(&[_]Feature{}),
182 };182 };
183 result[@enumToInt(Feature.dl_insts)] = .{183 result[@enumToInt(Feature.dl_insts)] = .{
184 .index = @enumToInt(Feature.dl_insts),184 .index = @enumToInt(Feature.dl_insts),
185 .name = @tagName(Feature.dl_insts),185 .name = @tagName(Feature.dl_insts),
186 .llvm_name = "dl-insts",186 .llvm_name = "dl-insts",
187 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",187 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
188 .dependencies = 0,188 .dependencies = featureSet(&[_]Feature{}),
189 };189 };
190 result[@enumToInt(Feature.dot1_insts)] = .{190 result[@enumToInt(Feature.dot1_insts)] = .{
191 .index = @enumToInt(Feature.dot1_insts),191 .index = @enumToInt(Feature.dot1_insts),
192 .name = @tagName(Feature.dot1_insts),192 .name = @tagName(Feature.dot1_insts),
193 .llvm_name = "dot1-insts",193 .llvm_name = "dot1-insts",
194 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",194 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
195 .dependencies = 0,195 .dependencies = featureSet(&[_]Feature{}),
196 };196 };
197 result[@enumToInt(Feature.dot2_insts)] = .{197 result[@enumToInt(Feature.dot2_insts)] = .{
198 .index = @enumToInt(Feature.dot2_insts),198 .index = @enumToInt(Feature.dot2_insts),
199 .name = @tagName(Feature.dot2_insts),199 .name = @tagName(Feature.dot2_insts),
200 .llvm_name = "dot2-insts",200 .llvm_name = "dot2-insts",
201 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",201 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",
202 .dependencies = 0,202 .dependencies = featureSet(&[_]Feature{}),
203 };203 };
204 result[@enumToInt(Feature.dot3_insts)] = .{204 result[@enumToInt(Feature.dot3_insts)] = .{
205 .index = @enumToInt(Feature.dot3_insts),205 .index = @enumToInt(Feature.dot3_insts),
206 .name = @tagName(Feature.dot3_insts),206 .name = @tagName(Feature.dot3_insts),
207 .llvm_name = "dot3-insts",207 .llvm_name = "dot3-insts",
208 .description = "Has v_dot8c_i32_i4 instruction",208 .description = "Has v_dot8c_i32_i4 instruction",
209 .dependencies = 0,209 .dependencies = featureSet(&[_]Feature{}),
210 };210 };
211 result[@enumToInt(Feature.dot4_insts)] = .{211 result[@enumToInt(Feature.dot4_insts)] = .{
212 .index = @enumToInt(Feature.dot4_insts),212 .index = @enumToInt(Feature.dot4_insts),
213 .name = @tagName(Feature.dot4_insts),213 .name = @tagName(Feature.dot4_insts),
214 .llvm_name = "dot4-insts",214 .llvm_name = "dot4-insts",
215 .description = "Has v_dot2c_i32_i16 instruction",215 .description = "Has v_dot2c_i32_i16 instruction",
216 .dependencies = 0,216 .dependencies = featureSet(&[_]Feature{}),
217 };217 };
218 result[@enumToInt(Feature.dot5_insts)] = .{218 result[@enumToInt(Feature.dot5_insts)] = .{
219 .index = @enumToInt(Feature.dot5_insts),219 .index = @enumToInt(Feature.dot5_insts),
220 .name = @tagName(Feature.dot5_insts),220 .name = @tagName(Feature.dot5_insts),
221 .llvm_name = "dot5-insts",221 .llvm_name = "dot5-insts",
222 .description = "Has v_dot2c_f32_f16 instruction",222 .description = "Has v_dot2c_f32_f16 instruction",
223 .dependencies = 0,223 .dependencies = featureSet(&[_]Feature{}),
224 };224 };
225 result[@enumToInt(Feature.dot6_insts)] = .{225 result[@enumToInt(Feature.dot6_insts)] = .{
226 .index = @enumToInt(Feature.dot6_insts),226 .index = @enumToInt(Feature.dot6_insts),
227 .name = @tagName(Feature.dot6_insts),227 .name = @tagName(Feature.dot6_insts),
228 .llvm_name = "dot6-insts",228 .llvm_name = "dot6-insts",
229 .description = "Has v_dot4c_i32_i8 instruction",229 .description = "Has v_dot4c_i32_i8 instruction",
230 .dependencies = 0,230 .dependencies = featureSet(&[_]Feature{}),
231 };231 };
232 result[@enumToInt(Feature.dpp)] = .{232 result[@enumToInt(Feature.dpp)] = .{
233 .index = @enumToInt(Feature.dpp),233 .index = @enumToInt(Feature.dpp),
234 .name = @tagName(Feature.dpp),234 .name = @tagName(Feature.dpp),
235 .llvm_name = "dpp",235 .llvm_name = "dpp",
236 .description = "Support DPP (Data Parallel Primitives) extension",236 .description = "Support DPP (Data Parallel Primitives) extension",
237 .dependencies = 0,237 .dependencies = featureSet(&[_]Feature{}),
238 };238 };
239 result[@enumToInt(Feature.dpp8)] = .{239 result[@enumToInt(Feature.dpp8)] = .{
240 .index = @enumToInt(Feature.dpp8),240 .index = @enumToInt(Feature.dpp8),
241 .name = @tagName(Feature.dpp8),241 .name = @tagName(Feature.dpp8),
242 .llvm_name = "dpp8",242 .llvm_name = "dpp8",
243 .description = "Support DPP8 (Data Parallel Primitives) extension",243 .description = "Support DPP8 (Data Parallel Primitives) extension",
244 .dependencies = 0,244 .dependencies = featureSet(&[_]Feature{}),
245 };245 };
246 result[@enumToInt(Feature.dumpcode)] = .{246 result[@enumToInt(Feature.dumpcode)] = .{
247 .index = @enumToInt(Feature.dumpcode),247 .index = @enumToInt(Feature.dumpcode),
248 .name = @tagName(Feature.dumpcode),248 .name = @tagName(Feature.dumpcode),
249 .llvm_name = "dumpcode",249 .llvm_name = "dumpcode",
250 .description = "Dump MachineInstrs in the CodeEmitter",250 .description = "Dump MachineInstrs in the CodeEmitter",
251 .dependencies = 0,251 .dependencies = featureSet(&[_]Feature{}),
252 };252 };
253 result[@enumToInt(Feature.enable_ds128)] = .{253 result[@enumToInt(Feature.enable_ds128)] = .{
254 .index = @enumToInt(Feature.enable_ds128),254 .index = @enumToInt(Feature.enable_ds128),
255 .name = @tagName(Feature.enable_ds128),255 .name = @tagName(Feature.enable_ds128),
256 .llvm_name = "enable-ds128",256 .llvm_name = "enable-ds128",
257 .description = "Use ds_read|write_b128",257 .description = "Use ds_read|write_b128",
258 .dependencies = 0,258 .dependencies = featureSet(&[_]Feature{}),
259 };259 };
260 result[@enumToInt(Feature.enable_prt_strict_null)] = .{260 result[@enumToInt(Feature.enable_prt_strict_null)] = .{
261 .index = @enumToInt(Feature.enable_prt_strict_null),261 .index = @enumToInt(Feature.enable_prt_strict_null),
262 .name = @tagName(Feature.enable_prt_strict_null),262 .name = @tagName(Feature.enable_prt_strict_null),
263 .llvm_name = "enable-prt-strict-null",263 .llvm_name = "enable-prt-strict-null",
264 .description = "Enable zeroing of result registers for sparse texture fetches",264 .description = "Enable zeroing of result registers for sparse texture fetches",
265 .dependencies = 0,265 .dependencies = featureSet(&[_]Feature{}),
266 };266 };
267 result[@enumToInt(Feature.fast_fmaf)] = .{267 result[@enumToInt(Feature.fast_fmaf)] = .{
268 .index = @enumToInt(Feature.fast_fmaf),268 .index = @enumToInt(Feature.fast_fmaf),
269 .name = @tagName(Feature.fast_fmaf),269 .name = @tagName(Feature.fast_fmaf),
270 .llvm_name = "fast-fmaf",270 .llvm_name = "fast-fmaf",
271 .description = "Assuming f32 fma is at least as fast as mul + add",271 .description = "Assuming f32 fma is at least as fast as mul + add",
272 .dependencies = 0,272 .dependencies = featureSet(&[_]Feature{}),
273 };273 };
274 result[@enumToInt(Feature.flat_address_space)] = .{274 result[@enumToInt(Feature.flat_address_space)] = .{
275 .index = @enumToInt(Feature.flat_address_space),275 .index = @enumToInt(Feature.flat_address_space),
276 .name = @tagName(Feature.flat_address_space),276 .name = @tagName(Feature.flat_address_space),
277 .llvm_name = "flat-address-space",277 .llvm_name = "flat-address-space",
278 .description = "Support flat address space",278 .description = "Support flat address space",
279 .dependencies = 0,279 .dependencies = featureSet(&[_]Feature{}),
280 };280 };
281 result[@enumToInt(Feature.flat_for_global)] = .{281 result[@enumToInt(Feature.flat_for_global)] = .{
282 .index = @enumToInt(Feature.flat_for_global),282 .index = @enumToInt(Feature.flat_for_global),
283 .name = @tagName(Feature.flat_for_global),283 .name = @tagName(Feature.flat_for_global),
284 .llvm_name = "flat-for-global",284 .llvm_name = "flat-for-global",
285 .description = "Force to generate flat instruction for global",285 .description = "Force to generate flat instruction for global",
286 .dependencies = 0,286 .dependencies = featureSet(&[_]Feature{}),
287 };287 };
288 result[@enumToInt(Feature.flat_global_insts)] = .{288 result[@enumToInt(Feature.flat_global_insts)] = .{
289 .index = @enumToInt(Feature.flat_global_insts),289 .index = @enumToInt(Feature.flat_global_insts),
290 .name = @tagName(Feature.flat_global_insts),290 .name = @tagName(Feature.flat_global_insts),
291 .llvm_name = "flat-global-insts",291 .llvm_name = "flat-global-insts",
292 .description = "Have global_* flat memory instructions",292 .description = "Have global_* flat memory instructions",
293 .dependencies = 0,293 .dependencies = featureSet(&[_]Feature{}),
294 };294 };
295 result[@enumToInt(Feature.flat_inst_offsets)] = .{295 result[@enumToInt(Feature.flat_inst_offsets)] = .{
296 .index = @enumToInt(Feature.flat_inst_offsets),296 .index = @enumToInt(Feature.flat_inst_offsets),
297 .name = @tagName(Feature.flat_inst_offsets),297 .name = @tagName(Feature.flat_inst_offsets),
298 .llvm_name = "flat-inst-offsets",298 .llvm_name = "flat-inst-offsets",
299 .description = "Flat instructions have immediate offset addressing mode",299 .description = "Flat instructions have immediate offset addressing mode",
300 .dependencies = 0,300 .dependencies = featureSet(&[_]Feature{}),
301 };301 };
302 result[@enumToInt(Feature.flat_scratch_insts)] = .{302 result[@enumToInt(Feature.flat_scratch_insts)] = .{
303 .index = @enumToInt(Feature.flat_scratch_insts),303 .index = @enumToInt(Feature.flat_scratch_insts),
304 .name = @tagName(Feature.flat_scratch_insts),304 .name = @tagName(Feature.flat_scratch_insts),
305 .llvm_name = "flat-scratch-insts",305 .llvm_name = "flat-scratch-insts",
306 .description = "Have scratch_* flat memory instructions",306 .description = "Have scratch_* flat memory instructions",
307 .dependencies = 0,307 .dependencies = featureSet(&[_]Feature{}),
308 };308 };
309 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{309 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
310 .index = @enumToInt(Feature.flat_segment_offset_bug),310 .index = @enumToInt(Feature.flat_segment_offset_bug),
311 .name = @tagName(Feature.flat_segment_offset_bug),311 .name = @tagName(Feature.flat_segment_offset_bug),
312 .llvm_name = "flat-segment-offset-bug",312 .llvm_name = "flat-segment-offset-bug",
313 .description = "GFX10 bug, inst_offset ignored in flat segment",313 .description = "GFX10 bug, inst_offset ignored in flat segment",
314 .dependencies = 0,314 .dependencies = featureSet(&[_]Feature{}),
315 };315 };
316 result[@enumToInt(Feature.fma_mix_insts)] = .{316 result[@enumToInt(Feature.fma_mix_insts)] = .{
317 .index = @enumToInt(Feature.fma_mix_insts),317 .index = @enumToInt(Feature.fma_mix_insts),
318 .name = @tagName(Feature.fma_mix_insts),318 .name = @tagName(Feature.fma_mix_insts),
319 .llvm_name = "fma-mix-insts",319 .llvm_name = "fma-mix-insts",
320 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",320 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
321 .dependencies = 0,321 .dependencies = featureSet(&[_]Feature{}),
322 };322 };
323 result[@enumToInt(Feature.fmaf)] = .{323 result[@enumToInt(Feature.fmaf)] = .{
324 .index = @enumToInt(Feature.fmaf),324 .index = @enumToInt(Feature.fmaf),
325 .name = @tagName(Feature.fmaf),325 .name = @tagName(Feature.fmaf),
326 .llvm_name = "fmaf",326 .llvm_name = "fmaf",
327 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",327 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
328 .dependencies = 0,328 .dependencies = featureSet(&[_]Feature{}),
329 };329 };
330 result[@enumToInt(Feature.fp_exceptions)] = .{330 result[@enumToInt(Feature.fp_exceptions)] = .{
331 .index = @enumToInt(Feature.fp_exceptions),331 .index = @enumToInt(Feature.fp_exceptions),
332 .name = @tagName(Feature.fp_exceptions),332 .name = @tagName(Feature.fp_exceptions),
333 .llvm_name = "fp-exceptions",333 .llvm_name = "fp-exceptions",
334 .description = "Enable floating point exceptions",334 .description = "Enable floating point exceptions",
335 .dependencies = 0,335 .dependencies = featureSet(&[_]Feature{}),
336 };336 };
337 result[@enumToInt(Feature.fp16_denormals)] = .{337 result[@enumToInt(Feature.fp16_denormals)] = .{
338 .index = @enumToInt(Feature.fp16_denormals),338 .index = @enumToInt(Feature.fp16_denormals),
...@@ -348,14 +348,14 @@ pub const all_features = blk: {...@@ -348,14 +348,14 @@ pub const all_features = blk: {
348 .name = @tagName(Feature.fp32_denormals),348 .name = @tagName(Feature.fp32_denormals),
349 .llvm_name = "fp32-denormals",349 .llvm_name = "fp32-denormals",
350 .description = "Enable single precision denormal handling",350 .description = "Enable single precision denormal handling",
351 .dependencies = 0,351 .dependencies = featureSet(&[_]Feature{}),
352 };352 };
353 result[@enumToInt(Feature.fp64)] = .{353 result[@enumToInt(Feature.fp64)] = .{
354 .index = @enumToInt(Feature.fp64),354 .index = @enumToInt(Feature.fp64),
355 .name = @tagName(Feature.fp64),355 .name = @tagName(Feature.fp64),
356 .llvm_name = "fp64",356 .llvm_name = "fp64",
357 .description = "Enable double precision operations",357 .description = "Enable double precision operations",
358 .dependencies = 0,358 .dependencies = featureSet(&[_]Feature{}),
359 };359 };
360 result[@enumToInt(Feature.fp64_denormals)] = .{360 result[@enumToInt(Feature.fp64_denormals)] = .{
361 .index = @enumToInt(Feature.fp64_denormals),361 .index = @enumToInt(Feature.fp64_denormals),
...@@ -381,7 +381,7 @@ pub const all_features = blk: {...@@ -381,7 +381,7 @@ pub const all_features = blk: {
381 .name = @tagName(Feature.gcn3_encoding),381 .name = @tagName(Feature.gcn3_encoding),
382 .llvm_name = "gcn3-encoding",382 .llvm_name = "gcn3-encoding",
383 .description = "Encoding format for VI",383 .description = "Encoding format for VI",
384 .dependencies = 0,384 .dependencies = featureSet(&[_]Feature{}),
385 };385 };
386 result[@enumToInt(Feature.gfx10)] = .{386 result[@enumToInt(Feature.gfx10)] = .{
387 .index = @enumToInt(Feature.gfx10),387 .index = @enumToInt(Feature.gfx10),
...@@ -430,21 +430,21 @@ pub const all_features = blk: {...@@ -430,21 +430,21 @@ pub const all_features = blk: {
430 .name = @tagName(Feature.gfx10_insts),430 .name = @tagName(Feature.gfx10_insts),
431 .llvm_name = "gfx10-insts",431 .llvm_name = "gfx10-insts",
432 .description = "Additional instructions for GFX10+",432 .description = "Additional instructions for GFX10+",
433 .dependencies = 0,433 .dependencies = featureSet(&[_]Feature{}),
434 };434 };
435 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{435 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
436 .index = @enumToInt(Feature.gfx7_gfx8_gfx9_insts),436 .index = @enumToInt(Feature.gfx7_gfx8_gfx9_insts),
437 .name = @tagName(Feature.gfx7_gfx8_gfx9_insts),437 .name = @tagName(Feature.gfx7_gfx8_gfx9_insts),
438 .llvm_name = "gfx7-gfx8-gfx9-insts",438 .llvm_name = "gfx7-gfx8-gfx9-insts",
439 .description = "Instructions shared in GFX7, GFX8, GFX9",439 .description = "Instructions shared in GFX7, GFX8, GFX9",
440 .dependencies = 0,440 .dependencies = featureSet(&[_]Feature{}),
441 };441 };
442 result[@enumToInt(Feature.gfx8_insts)] = .{442 result[@enumToInt(Feature.gfx8_insts)] = .{
443 .index = @enumToInt(Feature.gfx8_insts),443 .index = @enumToInt(Feature.gfx8_insts),
444 .name = @tagName(Feature.gfx8_insts),444 .name = @tagName(Feature.gfx8_insts),
445 .llvm_name = "gfx8-insts",445 .llvm_name = "gfx8-insts",
446 .description = "Additional instructions for GFX8+",446 .description = "Additional instructions for GFX8+",
447 .dependencies = 0,447 .dependencies = featureSet(&[_]Feature{}),
448 };448 };
449 result[@enumToInt(Feature.gfx9)] = .{449 result[@enumToInt(Feature.gfx9)] = .{
450 .index = @enumToInt(Feature.gfx9),450 .index = @enumToInt(Feature.gfx9),
...@@ -489,287 +489,287 @@ pub const all_features = blk: {...@@ -489,287 +489,287 @@ pub const all_features = blk: {
489 .name = @tagName(Feature.gfx9_insts),489 .name = @tagName(Feature.gfx9_insts),
490 .llvm_name = "gfx9-insts",490 .llvm_name = "gfx9-insts",
491 .description = "Additional instructions for GFX9+",491 .description = "Additional instructions for GFX9+",
492 .dependencies = 0,492 .dependencies = featureSet(&[_]Feature{}),
493 };493 };
494 result[@enumToInt(Feature.half_rate_64_ops)] = .{494 result[@enumToInt(Feature.half_rate_64_ops)] = .{
495 .index = @enumToInt(Feature.half_rate_64_ops),495 .index = @enumToInt(Feature.half_rate_64_ops),
496 .name = @tagName(Feature.half_rate_64_ops),496 .name = @tagName(Feature.half_rate_64_ops),
497 .llvm_name = "half-rate-64-ops",497 .llvm_name = "half-rate-64-ops",
498 .description = "Most fp64 instructions are half rate instead of quarter",498 .description = "Most fp64 instructions are half rate instead of quarter",
499 .dependencies = 0,499 .dependencies = featureSet(&[_]Feature{}),
500 };500 };
501 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{501 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{
502 .index = @enumToInt(Feature.inst_fwd_prefetch_bug),502 .index = @enumToInt(Feature.inst_fwd_prefetch_bug),
503 .name = @tagName(Feature.inst_fwd_prefetch_bug),503 .name = @tagName(Feature.inst_fwd_prefetch_bug),
504 .llvm_name = "inst-fwd-prefetch-bug",504 .llvm_name = "inst-fwd-prefetch-bug",
505 .description = "S_INST_PREFETCH instruction causes shader to hang",505 .description = "S_INST_PREFETCH instruction causes shader to hang",
506 .dependencies = 0,506 .dependencies = featureSet(&[_]Feature{}),
507 };507 };
508 result[@enumToInt(Feature.int_clamp_insts)] = .{508 result[@enumToInt(Feature.int_clamp_insts)] = .{
509 .index = @enumToInt(Feature.int_clamp_insts),509 .index = @enumToInt(Feature.int_clamp_insts),
510 .name = @tagName(Feature.int_clamp_insts),510 .name = @tagName(Feature.int_clamp_insts),
511 .llvm_name = "int-clamp-insts",511 .llvm_name = "int-clamp-insts",
512 .description = "Support clamp for integer destination",512 .description = "Support clamp for integer destination",
513 .dependencies = 0,513 .dependencies = featureSet(&[_]Feature{}),
514 };514 };
515 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{515 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{
516 .index = @enumToInt(Feature.inv_2pi_inline_imm),516 .index = @enumToInt(Feature.inv_2pi_inline_imm),
517 .name = @tagName(Feature.inv_2pi_inline_imm),517 .name = @tagName(Feature.inv_2pi_inline_imm),
518 .llvm_name = "inv-2pi-inline-imm",518 .llvm_name = "inv-2pi-inline-imm",
519 .description = "Has 1 / (2 * pi) as inline immediate",519 .description = "Has 1 / (2 * pi) as inline immediate",
520 .dependencies = 0,520 .dependencies = featureSet(&[_]Feature{}),
521 };521 };
522 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{522 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{
523 .index = @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),524 .name = @tagName(Feature.lds_branch_vmem_war_hazard),
525 .llvm_name = "lds-branch-vmem-war-hazard",525 .llvm_name = "lds-branch-vmem-war-hazard",
526 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",526 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
527 .dependencies = 0,527 .dependencies = featureSet(&[_]Feature{}),
528 };528 };
529 result[@enumToInt(Feature.lds_misaligned_bug)] = .{529 result[@enumToInt(Feature.lds_misaligned_bug)] = .{
530 .index = @enumToInt(Feature.lds_misaligned_bug),530 .index = @enumToInt(Feature.lds_misaligned_bug),
531 .name = @tagName(Feature.lds_misaligned_bug),531 .name = @tagName(Feature.lds_misaligned_bug),
532 .llvm_name = "lds-misaligned-bug",532 .llvm_name = "lds-misaligned-bug",
533 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",533 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
534 .dependencies = 0,534 .dependencies = featureSet(&[_]Feature{}),
535 };535 };
536 result[@enumToInt(Feature.ldsbankcount16)] = .{536 result[@enumToInt(Feature.ldsbankcount16)] = .{
537 .index = @enumToInt(Feature.ldsbankcount16),537 .index = @enumToInt(Feature.ldsbankcount16),
538 .name = @tagName(Feature.ldsbankcount16),538 .name = @tagName(Feature.ldsbankcount16),
539 .llvm_name = "ldsbankcount16",539 .llvm_name = "ldsbankcount16",
540 .description = "The number of LDS banks per compute unit.",540 .description = "The number of LDS banks per compute unit.",
541 .dependencies = 0,541 .dependencies = featureSet(&[_]Feature{}),
542 };542 };
543 result[@enumToInt(Feature.ldsbankcount32)] = .{543 result[@enumToInt(Feature.ldsbankcount32)] = .{
544 .index = @enumToInt(Feature.ldsbankcount32),544 .index = @enumToInt(Feature.ldsbankcount32),
545 .name = @tagName(Feature.ldsbankcount32),545 .name = @tagName(Feature.ldsbankcount32),
546 .llvm_name = "ldsbankcount32",546 .llvm_name = "ldsbankcount32",
547 .description = "The number of LDS banks per compute unit.",547 .description = "The number of LDS banks per compute unit.",
548 .dependencies = 0,548 .dependencies = featureSet(&[_]Feature{}),
549 };549 };
550 result[@enumToInt(Feature.load_store_opt)] = .{550 result[@enumToInt(Feature.load_store_opt)] = .{
551 .index = @enumToInt(Feature.load_store_opt),551 .index = @enumToInt(Feature.load_store_opt),
552 .name = @tagName(Feature.load_store_opt),552 .name = @tagName(Feature.load_store_opt),
553 .llvm_name = "load-store-opt",553 .llvm_name = "load-store-opt",
554 .description = "Enable SI load/store optimizer pass",554 .description = "Enable SI load/store optimizer pass",
555 .dependencies = 0,555 .dependencies = featureSet(&[_]Feature{}),
556 };556 };
557 result[@enumToInt(Feature.localmemorysize0)] = .{557 result[@enumToInt(Feature.localmemorysize0)] = .{
558 .index = @enumToInt(Feature.localmemorysize0),558 .index = @enumToInt(Feature.localmemorysize0),
559 .name = @tagName(Feature.localmemorysize0),559 .name = @tagName(Feature.localmemorysize0),
560 .llvm_name = "localmemorysize0",560 .llvm_name = "localmemorysize0",
561 .description = "The size of local memory in bytes",561 .description = "The size of local memory in bytes",
562 .dependencies = 0,562 .dependencies = featureSet(&[_]Feature{}),
563 };563 };
564 result[@enumToInt(Feature.localmemorysize32768)] = .{564 result[@enumToInt(Feature.localmemorysize32768)] = .{
565 .index = @enumToInt(Feature.localmemorysize32768),565 .index = @enumToInt(Feature.localmemorysize32768),
566 .name = @tagName(Feature.localmemorysize32768),566 .name = @tagName(Feature.localmemorysize32768),
567 .llvm_name = "localmemorysize32768",567 .llvm_name = "localmemorysize32768",
568 .description = "The size of local memory in bytes",568 .description = "The size of local memory in bytes",
569 .dependencies = 0,569 .dependencies = featureSet(&[_]Feature{}),
570 };570 };
571 result[@enumToInt(Feature.localmemorysize65536)] = .{571 result[@enumToInt(Feature.localmemorysize65536)] = .{
572 .index = @enumToInt(Feature.localmemorysize65536),572 .index = @enumToInt(Feature.localmemorysize65536),
573 .name = @tagName(Feature.localmemorysize65536),573 .name = @tagName(Feature.localmemorysize65536),
574 .llvm_name = "localmemorysize65536",574 .llvm_name = "localmemorysize65536",
575 .description = "The size of local memory in bytes",575 .description = "The size of local memory in bytes",
576 .dependencies = 0,576 .dependencies = featureSet(&[_]Feature{}),
577 };577 };
578 result[@enumToInt(Feature.mad_mix_insts)] = .{578 result[@enumToInt(Feature.mad_mix_insts)] = .{
579 .index = @enumToInt(Feature.mad_mix_insts),579 .index = @enumToInt(Feature.mad_mix_insts),
580 .name = @tagName(Feature.mad_mix_insts),580 .name = @tagName(Feature.mad_mix_insts),
581 .llvm_name = "mad-mix-insts",581 .llvm_name = "mad-mix-insts",
582 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",582 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
583 .dependencies = 0,583 .dependencies = featureSet(&[_]Feature{}),
584 };584 };
585 result[@enumToInt(Feature.mai_insts)] = .{585 result[@enumToInt(Feature.mai_insts)] = .{
586 .index = @enumToInt(Feature.mai_insts),586 .index = @enumToInt(Feature.mai_insts),
587 .name = @tagName(Feature.mai_insts),587 .name = @tagName(Feature.mai_insts),
588 .llvm_name = "mai-insts",588 .llvm_name = "mai-insts",
589 .description = "Has mAI instructions",589 .description = "Has mAI instructions",
590 .dependencies = 0,590 .dependencies = featureSet(&[_]Feature{}),
591 };591 };
592 result[@enumToInt(Feature.max_private_element_size_16)] = .{592 result[@enumToInt(Feature.max_private_element_size_16)] = .{
593 .index = @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),594 .name = @tagName(Feature.max_private_element_size_16),
595 .llvm_name = "max-private-element-size-16",595 .llvm_name = "max-private-element-size-16",
596 .description = "Maximum private access size may be 16",596 .description = "Maximum private access size may be 16",
597 .dependencies = 0,597 .dependencies = featureSet(&[_]Feature{}),
598 };598 };
599 result[@enumToInt(Feature.max_private_element_size_4)] = .{599 result[@enumToInt(Feature.max_private_element_size_4)] = .{
600 .index = @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),601 .name = @tagName(Feature.max_private_element_size_4),
602 .llvm_name = "max-private-element-size-4",602 .llvm_name = "max-private-element-size-4",
603 .description = "Maximum private access size may be 4",603 .description = "Maximum private access size may be 4",
604 .dependencies = 0,604 .dependencies = featureSet(&[_]Feature{}),
605 };605 };
606 result[@enumToInt(Feature.max_private_element_size_8)] = .{606 result[@enumToInt(Feature.max_private_element_size_8)] = .{
607 .index = @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),608 .name = @tagName(Feature.max_private_element_size_8),
609 .llvm_name = "max-private-element-size-8",609 .llvm_name = "max-private-element-size-8",
610 .description = "Maximum private access size may be 8",610 .description = "Maximum private access size may be 8",
611 .dependencies = 0,611 .dependencies = featureSet(&[_]Feature{}),
612 };612 };
613 result[@enumToInt(Feature.mimg_r128)] = .{613 result[@enumToInt(Feature.mimg_r128)] = .{
614 .index = @enumToInt(Feature.mimg_r128),614 .index = @enumToInt(Feature.mimg_r128),
615 .name = @tagName(Feature.mimg_r128),615 .name = @tagName(Feature.mimg_r128),
616 .llvm_name = "mimg-r128",616 .llvm_name = "mimg-r128",
617 .description = "Support 128-bit texture resources",617 .description = "Support 128-bit texture resources",
618 .dependencies = 0,618 .dependencies = featureSet(&[_]Feature{}),
619 };619 };
620 result[@enumToInt(Feature.movrel)] = .{620 result[@enumToInt(Feature.movrel)] = .{
621 .index = @enumToInt(Feature.movrel),621 .index = @enumToInt(Feature.movrel),
622 .name = @tagName(Feature.movrel),622 .name = @tagName(Feature.movrel),
623 .llvm_name = "movrel",623 .llvm_name = "movrel",
624 .description = "Has v_movrel*_b32 instructions",624 .description = "Has v_movrel*_b32 instructions",
625 .dependencies = 0,625 .dependencies = featureSet(&[_]Feature{}),
626 };626 };
627 result[@enumToInt(Feature.no_data_dep_hazard)] = .{627 result[@enumToInt(Feature.no_data_dep_hazard)] = .{
628 .index = @enumToInt(Feature.no_data_dep_hazard),628 .index = @enumToInt(Feature.no_data_dep_hazard),
629 .name = @tagName(Feature.no_data_dep_hazard),629 .name = @tagName(Feature.no_data_dep_hazard),
630 .llvm_name = "no-data-dep-hazard",630 .llvm_name = "no-data-dep-hazard",
631 .description = "Does not need SW waitstates",631 .description = "Does not need SW waitstates",
632 .dependencies = 0,632 .dependencies = featureSet(&[_]Feature{}),
633 };633 };
634 result[@enumToInt(Feature.no_sdst_cmpx)] = .{634 result[@enumToInt(Feature.no_sdst_cmpx)] = .{
635 .index = @enumToInt(Feature.no_sdst_cmpx),635 .index = @enumToInt(Feature.no_sdst_cmpx),
636 .name = @tagName(Feature.no_sdst_cmpx),636 .name = @tagName(Feature.no_sdst_cmpx),
637 .llvm_name = "no-sdst-cmpx",637 .llvm_name = "no-sdst-cmpx",
638 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",638 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
639 .dependencies = 0,639 .dependencies = featureSet(&[_]Feature{}),
640 };640 };
641 result[@enumToInt(Feature.no_sram_ecc_support)] = .{641 result[@enumToInt(Feature.no_sram_ecc_support)] = .{
642 .index = @enumToInt(Feature.no_sram_ecc_support),642 .index = @enumToInt(Feature.no_sram_ecc_support),
643 .name = @tagName(Feature.no_sram_ecc_support),643 .name = @tagName(Feature.no_sram_ecc_support),
644 .llvm_name = "no-sram-ecc-support",644 .llvm_name = "no-sram-ecc-support",
645 .description = "Hardware does not support SRAM ECC",645 .description = "Hardware does not support SRAM ECC",
646 .dependencies = 0,646 .dependencies = featureSet(&[_]Feature{}),
647 };647 };
648 result[@enumToInt(Feature.no_xnack_support)] = .{648 result[@enumToInt(Feature.no_xnack_support)] = .{
649 .index = @enumToInt(Feature.no_xnack_support),649 .index = @enumToInt(Feature.no_xnack_support),
650 .name = @tagName(Feature.no_xnack_support),650 .name = @tagName(Feature.no_xnack_support),
651 .llvm_name = "no-xnack-support",651 .llvm_name = "no-xnack-support",
652 .description = "Hardware does not support XNACK",652 .description = "Hardware does not support XNACK",
653 .dependencies = 0,653 .dependencies = featureSet(&[_]Feature{}),
654 };654 };
655 result[@enumToInt(Feature.nsa_encoding)] = .{655 result[@enumToInt(Feature.nsa_encoding)] = .{
656 .index = @enumToInt(Feature.nsa_encoding),656 .index = @enumToInt(Feature.nsa_encoding),
657 .name = @tagName(Feature.nsa_encoding),657 .name = @tagName(Feature.nsa_encoding),
658 .llvm_name = "nsa-encoding",658 .llvm_name = "nsa-encoding",
659 .description = "Support NSA encoding for image instructions",659 .description = "Support NSA encoding for image instructions",
660 .dependencies = 0,660 .dependencies = featureSet(&[_]Feature{}),
661 };661 };
662 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{662 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
663 .index = @enumToInt(Feature.nsa_to_vmem_bug),663 .index = @enumToInt(Feature.nsa_to_vmem_bug),
664 .name = @tagName(Feature.nsa_to_vmem_bug),664 .name = @tagName(Feature.nsa_to_vmem_bug),
665 .llvm_name = "nsa-to-vmem-bug",665 .llvm_name = "nsa-to-vmem-bug",
666 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",666 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
667 .dependencies = 0,667 .dependencies = featureSet(&[_]Feature{}),
668 };668 };
669 result[@enumToInt(Feature.offset_3f_bug)] = .{669 result[@enumToInt(Feature.offset_3f_bug)] = .{
670 .index = @enumToInt(Feature.offset_3f_bug),670 .index = @enumToInt(Feature.offset_3f_bug),
671 .name = @tagName(Feature.offset_3f_bug),671 .name = @tagName(Feature.offset_3f_bug),
672 .llvm_name = "offset-3f-bug",672 .llvm_name = "offset-3f-bug",
673 .description = "Branch offset of 3f hardware bug",673 .description = "Branch offset of 3f hardware bug",
674 .dependencies = 0,674 .dependencies = featureSet(&[_]Feature{}),
675 };675 };
676 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{676 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
677 .index = @enumToInt(Feature.pk_fmac_f16_inst),677 .index = @enumToInt(Feature.pk_fmac_f16_inst),
678 .name = @tagName(Feature.pk_fmac_f16_inst),678 .name = @tagName(Feature.pk_fmac_f16_inst),
679 .llvm_name = "pk-fmac-f16-inst",679 .llvm_name = "pk-fmac-f16-inst",
680 .description = "Has v_pk_fmac_f16 instruction",680 .description = "Has v_pk_fmac_f16 instruction",
681 .dependencies = 0,681 .dependencies = featureSet(&[_]Feature{}),
682 };682 };
683 result[@enumToInt(Feature.promote_alloca)] = .{683 result[@enumToInt(Feature.promote_alloca)] = .{
684 .index = @enumToInt(Feature.promote_alloca),684 .index = @enumToInt(Feature.promote_alloca),
685 .name = @tagName(Feature.promote_alloca),685 .name = @tagName(Feature.promote_alloca),
686 .llvm_name = "promote-alloca",686 .llvm_name = "promote-alloca",
687 .description = "Enable promote alloca pass",687 .description = "Enable promote alloca pass",
688 .dependencies = 0,688 .dependencies = featureSet(&[_]Feature{}),
689 };689 };
690 result[@enumToInt(Feature.r128_a16)] = .{690 result[@enumToInt(Feature.r128_a16)] = .{
691 .index = @enumToInt(Feature.r128_a16),691 .index = @enumToInt(Feature.r128_a16),
692 .name = @tagName(Feature.r128_a16),692 .name = @tagName(Feature.r128_a16),
693 .llvm_name = "r128-a16",693 .llvm_name = "r128-a16",
694 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",694 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
695 .dependencies = 0,695 .dependencies = featureSet(&[_]Feature{}),
696 };696 };
697 result[@enumToInt(Feature.register_banking)] = .{697 result[@enumToInt(Feature.register_banking)] = .{
698 .index = @enumToInt(Feature.register_banking),698 .index = @enumToInt(Feature.register_banking),
699 .name = @tagName(Feature.register_banking),699 .name = @tagName(Feature.register_banking),
700 .llvm_name = "register-banking",700 .llvm_name = "register-banking",
701 .description = "Has register banking",701 .description = "Has register banking",
702 .dependencies = 0,702 .dependencies = featureSet(&[_]Feature{}),
703 };703 };
704 result[@enumToInt(Feature.s_memrealtime)] = .{704 result[@enumToInt(Feature.s_memrealtime)] = .{
705 .index = @enumToInt(Feature.s_memrealtime),705 .index = @enumToInt(Feature.s_memrealtime),
706 .name = @tagName(Feature.s_memrealtime),706 .name = @tagName(Feature.s_memrealtime),
707 .llvm_name = "s-memrealtime",707 .llvm_name = "s-memrealtime",
708 .description = "Has s_memrealtime instruction",708 .description = "Has s_memrealtime instruction",
709 .dependencies = 0,709 .dependencies = featureSet(&[_]Feature{}),
710 };710 };
711 result[@enumToInt(Feature.scalar_atomics)] = .{711 result[@enumToInt(Feature.scalar_atomics)] = .{
712 .index = @enumToInt(Feature.scalar_atomics),712 .index = @enumToInt(Feature.scalar_atomics),
713 .name = @tagName(Feature.scalar_atomics),713 .name = @tagName(Feature.scalar_atomics),
714 .llvm_name = "scalar-atomics",714 .llvm_name = "scalar-atomics",
715 .description = "Has atomic scalar memory instructions",715 .description = "Has atomic scalar memory instructions",
716 .dependencies = 0,716 .dependencies = featureSet(&[_]Feature{}),
717 };717 };
718 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{718 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{
719 .index = @enumToInt(Feature.scalar_flat_scratch_insts),719 .index = @enumToInt(Feature.scalar_flat_scratch_insts),
720 .name = @tagName(Feature.scalar_flat_scratch_insts),720 .name = @tagName(Feature.scalar_flat_scratch_insts),
721 .llvm_name = "scalar-flat-scratch-insts",721 .llvm_name = "scalar-flat-scratch-insts",
722 .description = "Have s_scratch_* flat memory instructions",722 .description = "Have s_scratch_* flat memory instructions",
723 .dependencies = 0,723 .dependencies = featureSet(&[_]Feature{}),
724 };724 };
725 result[@enumToInt(Feature.scalar_stores)] = .{725 result[@enumToInt(Feature.scalar_stores)] = .{
726 .index = @enumToInt(Feature.scalar_stores),726 .index = @enumToInt(Feature.scalar_stores),
727 .name = @tagName(Feature.scalar_stores),727 .name = @tagName(Feature.scalar_stores),
728 .llvm_name = "scalar-stores",728 .llvm_name = "scalar-stores",
729 .description = "Has store scalar memory instructions",729 .description = "Has store scalar memory instructions",
730 .dependencies = 0,730 .dependencies = featureSet(&[_]Feature{}),
731 };731 };
732 result[@enumToInt(Feature.sdwa)] = .{732 result[@enumToInt(Feature.sdwa)] = .{
733 .index = @enumToInt(Feature.sdwa),733 .index = @enumToInt(Feature.sdwa),
734 .name = @tagName(Feature.sdwa),734 .name = @tagName(Feature.sdwa),
735 .llvm_name = "sdwa",735 .llvm_name = "sdwa",
736 .description = "Support SDWA (Sub-DWORD Addressing) extension",736 .description = "Support SDWA (Sub-DWORD Addressing) extension",
737 .dependencies = 0,737 .dependencies = featureSet(&[_]Feature{}),
738 };738 };
739 result[@enumToInt(Feature.sdwa_mav)] = .{739 result[@enumToInt(Feature.sdwa_mav)] = .{
740 .index = @enumToInt(Feature.sdwa_mav),740 .index = @enumToInt(Feature.sdwa_mav),
741 .name = @tagName(Feature.sdwa_mav),741 .name = @tagName(Feature.sdwa_mav),
742 .llvm_name = "sdwa-mav",742 .llvm_name = "sdwa-mav",
743 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",743 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
744 .dependencies = 0,744 .dependencies = featureSet(&[_]Feature{}),
745 };745 };
746 result[@enumToInt(Feature.sdwa_omod)] = .{746 result[@enumToInt(Feature.sdwa_omod)] = .{
747 .index = @enumToInt(Feature.sdwa_omod),747 .index = @enumToInt(Feature.sdwa_omod),
748 .name = @tagName(Feature.sdwa_omod),748 .name = @tagName(Feature.sdwa_omod),
749 .llvm_name = "sdwa-omod",749 .llvm_name = "sdwa-omod",
750 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",750 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
751 .dependencies = 0,751 .dependencies = featureSet(&[_]Feature{}),
752 };752 };
753 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{753 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{
754 .index = @enumToInt(Feature.sdwa_out_mods_vopc),754 .index = @enumToInt(Feature.sdwa_out_mods_vopc),
755 .name = @tagName(Feature.sdwa_out_mods_vopc),755 .name = @tagName(Feature.sdwa_out_mods_vopc),
756 .llvm_name = "sdwa-out-mods-vopc",756 .llvm_name = "sdwa-out-mods-vopc",
757 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",757 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
758 .dependencies = 0,758 .dependencies = featureSet(&[_]Feature{}),
759 };759 };
760 result[@enumToInt(Feature.sdwa_scalar)] = .{760 result[@enumToInt(Feature.sdwa_scalar)] = .{
761 .index = @enumToInt(Feature.sdwa_scalar),761 .index = @enumToInt(Feature.sdwa_scalar),
762 .name = @tagName(Feature.sdwa_scalar),762 .name = @tagName(Feature.sdwa_scalar),
763 .llvm_name = "sdwa-scalar",763 .llvm_name = "sdwa-scalar",
764 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",764 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
765 .dependencies = 0,765 .dependencies = featureSet(&[_]Feature{}),
766 };766 };
767 result[@enumToInt(Feature.sdwa_sdst)] = .{767 result[@enumToInt(Feature.sdwa_sdst)] = .{
768 .index = @enumToInt(Feature.sdwa_sdst),768 .index = @enumToInt(Feature.sdwa_sdst),
769 .name = @tagName(Feature.sdwa_sdst),769 .name = @tagName(Feature.sdwa_sdst),
770 .llvm_name = "sdwa-sdst",770 .llvm_name = "sdwa-sdst",
771 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",771 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
772 .dependencies = 0,772 .dependencies = featureSet(&[_]Feature{}),
773 };773 };
774 result[@enumToInt(Feature.sea_islands)] = .{774 result[@enumToInt(Feature.sea_islands)] = .{
775 .index = @enumToInt(Feature.sea_islands),775 .index = @enumToInt(Feature.sea_islands),
...@@ -794,21 +794,21 @@ pub const all_features = blk: {...@@ -794,21 +794,21 @@ pub const all_features = blk: {
794 .name = @tagName(Feature.sgpr_init_bug),794 .name = @tagName(Feature.sgpr_init_bug),
795 .llvm_name = "sgpr-init-bug",795 .llvm_name = "sgpr-init-bug",
796 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",796 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
797 .dependencies = 0,797 .dependencies = featureSet(&[_]Feature{}),
798 };798 };
799 result[@enumToInt(Feature.si_scheduler)] = .{799 result[@enumToInt(Feature.si_scheduler)] = .{
800 .index = @enumToInt(Feature.si_scheduler),800 .index = @enumToInt(Feature.si_scheduler),
801 .name = @tagName(Feature.si_scheduler),801 .name = @tagName(Feature.si_scheduler),
802 .llvm_name = "si-scheduler",802 .llvm_name = "si-scheduler",
803 .description = "Enable SI Machine Scheduler",803 .description = "Enable SI Machine Scheduler",
804 .dependencies = 0,804 .dependencies = featureSet(&[_]Feature{}),
805 };805 };
806 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{806 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{
807 .index = @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),808 .name = @tagName(Feature.smem_to_vector_write_hazard),
809 .llvm_name = "smem-to-vector-write-hazard",809 .llvm_name = "smem-to-vector-write-hazard",
810 .description = "s_load_dword followed by v_cmp page faults",810 .description = "s_load_dword followed by v_cmp page faults",
811 .dependencies = 0,811 .dependencies = featureSet(&[_]Feature{}),
812 };812 };
813 result[@enumToInt(Feature.southern_islands)] = .{813 result[@enumToInt(Feature.southern_islands)] = .{
814 .index = @enumToInt(Feature.southern_islands),814 .index = @enumToInt(Feature.southern_islands),
...@@ -832,77 +832,77 @@ pub const all_features = blk: {...@@ -832,77 +832,77 @@ pub const all_features = blk: {
832 .name = @tagName(Feature.sram_ecc),832 .name = @tagName(Feature.sram_ecc),
833 .llvm_name = "sram-ecc",833 .llvm_name = "sram-ecc",
834 .description = "Enable SRAM ECC",834 .description = "Enable SRAM ECC",
835 .dependencies = 0,835 .dependencies = featureSet(&[_]Feature{}),
836 };836 };
837 result[@enumToInt(Feature.trap_handler)] = .{837 result[@enumToInt(Feature.trap_handler)] = .{
838 .index = @enumToInt(Feature.trap_handler),838 .index = @enumToInt(Feature.trap_handler),
839 .name = @tagName(Feature.trap_handler),839 .name = @tagName(Feature.trap_handler),
840 .llvm_name = "trap-handler",840 .llvm_name = "trap-handler",
841 .description = "Trap handler support",841 .description = "Trap handler support",
842 .dependencies = 0,842 .dependencies = featureSet(&[_]Feature{}),
843 };843 };
844 result[@enumToInt(Feature.trig_reduced_range)] = .{844 result[@enumToInt(Feature.trig_reduced_range)] = .{
845 .index = @enumToInt(Feature.trig_reduced_range),845 .index = @enumToInt(Feature.trig_reduced_range),
846 .name = @tagName(Feature.trig_reduced_range),846 .name = @tagName(Feature.trig_reduced_range),
847 .llvm_name = "trig-reduced-range",847 .llvm_name = "trig-reduced-range",
848 .description = "Requires use of fract on arguments to trig instructions",848 .description = "Requires use of fract on arguments to trig instructions",
849 .dependencies = 0,849 .dependencies = featureSet(&[_]Feature{}),
850 };850 };
851 result[@enumToInt(Feature.unaligned_buffer_access)] = .{851 result[@enumToInt(Feature.unaligned_buffer_access)] = .{
852 .index = @enumToInt(Feature.unaligned_buffer_access),852 .index = @enumToInt(Feature.unaligned_buffer_access),
853 .name = @tagName(Feature.unaligned_buffer_access),853 .name = @tagName(Feature.unaligned_buffer_access),
854 .llvm_name = "unaligned-buffer-access",854 .llvm_name = "unaligned-buffer-access",
855 .description = "Support unaligned global loads and stores",855 .description = "Support unaligned global loads and stores",
856 .dependencies = 0,856 .dependencies = featureSet(&[_]Feature{}),
857 };857 };
858 result[@enumToInt(Feature.unaligned_scratch_access)] = .{858 result[@enumToInt(Feature.unaligned_scratch_access)] = .{
859 .index = @enumToInt(Feature.unaligned_scratch_access),859 .index = @enumToInt(Feature.unaligned_scratch_access),
860 .name = @tagName(Feature.unaligned_scratch_access),860 .name = @tagName(Feature.unaligned_scratch_access),
861 .llvm_name = "unaligned-scratch-access",861 .llvm_name = "unaligned-scratch-access",
862 .description = "Support unaligned scratch loads and stores",862 .description = "Support unaligned scratch loads and stores",
863 .dependencies = 0,863 .dependencies = featureSet(&[_]Feature{}),
864 };864 };
865 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{865 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{
866 .index = @enumToInt(Feature.unpacked_d16_vmem),866 .index = @enumToInt(Feature.unpacked_d16_vmem),
867 .name = @tagName(Feature.unpacked_d16_vmem),867 .name = @tagName(Feature.unpacked_d16_vmem),
868 .llvm_name = "unpacked-d16-vmem",868 .llvm_name = "unpacked-d16-vmem",
869 .description = "Has unpacked d16 vmem instructions",869 .description = "Has unpacked d16 vmem instructions",
870 .dependencies = 0,870 .dependencies = featureSet(&[_]Feature{}),
871 };871 };
872 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{872 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{
873 .index = @enumToInt(Feature.unsafe_ds_offset_folding),873 .index = @enumToInt(Feature.unsafe_ds_offset_folding),
874 .name = @tagName(Feature.unsafe_ds_offset_folding),874 .name = @tagName(Feature.unsafe_ds_offset_folding),
875 .llvm_name = "unsafe-ds-offset-folding",875 .llvm_name = "unsafe-ds-offset-folding",
876 .description = "Force using DS instruction immediate offsets on SI",876 .description = "Force using DS instruction immediate offsets on SI",
877 .dependencies = 0,877 .dependencies = featureSet(&[_]Feature{}),
878 };878 };
879 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{879 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{
880 .index = @enumToInt(Feature.vcmpx_exec_war_hazard),880 .index = @enumToInt(Feature.vcmpx_exec_war_hazard),
881 .name = @tagName(Feature.vcmpx_exec_war_hazard),881 .name = @tagName(Feature.vcmpx_exec_war_hazard),
882 .llvm_name = "vcmpx-exec-war-hazard",882 .llvm_name = "vcmpx-exec-war-hazard",
883 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",883 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
884 .dependencies = 0,884 .dependencies = featureSet(&[_]Feature{}),
885 };885 };
886 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{886 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{
887 .index = @enumToInt(Feature.vcmpx_permlane_hazard),887 .index = @enumToInt(Feature.vcmpx_permlane_hazard),
888 .name = @tagName(Feature.vcmpx_permlane_hazard),888 .name = @tagName(Feature.vcmpx_permlane_hazard),
889 .llvm_name = "vcmpx-permlane-hazard",889 .llvm_name = "vcmpx-permlane-hazard",
890 .description = "TODO: describe me",890 .description = "TODO: describe me",
891 .dependencies = 0,891 .dependencies = featureSet(&[_]Feature{}),
892 };892 };
893 result[@enumToInt(Feature.vgpr_index_mode)] = .{893 result[@enumToInt(Feature.vgpr_index_mode)] = .{
894 .index = @enumToInt(Feature.vgpr_index_mode),894 .index = @enumToInt(Feature.vgpr_index_mode),
895 .name = @tagName(Feature.vgpr_index_mode),895 .name = @tagName(Feature.vgpr_index_mode),
896 .llvm_name = "vgpr-index-mode",896 .llvm_name = "vgpr-index-mode",
897 .description = "Has VGPR mode register indexing",897 .description = "Has VGPR mode register indexing",
898 .dependencies = 0,898 .dependencies = featureSet(&[_]Feature{}),
899 };899 };
900 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{900 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{
901 .index = @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),902 .name = @tagName(Feature.vmem_to_scalar_write_hazard),
903 .llvm_name = "vmem-to-scalar-write-hazard",903 .llvm_name = "vmem-to-scalar-write-hazard",
904 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",904 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
905 .dependencies = 0,905 .dependencies = featureSet(&[_]Feature{}),
906 };906 };
907 result[@enumToInt(Feature.volcanic_islands)] = .{907 result[@enumToInt(Feature.volcanic_islands)] = .{
908 .index = @enumToInt(Feature.volcanic_islands),908 .index = @enumToInt(Feature.volcanic_islands),
...@@ -939,49 +939,49 @@ pub const all_features = blk: {...@@ -939,49 +939,49 @@ pub const all_features = blk: {
939 .name = @tagName(Feature.vop3_literal),939 .name = @tagName(Feature.vop3_literal),
940 .llvm_name = "vop3-literal",940 .llvm_name = "vop3-literal",
941 .description = "Can use one literal in VOP3",941 .description = "Can use one literal in VOP3",
942 .dependencies = 0,942 .dependencies = featureSet(&[_]Feature{}),
943 };943 };
944 result[@enumToInt(Feature.vop3p)] = .{944 result[@enumToInt(Feature.vop3p)] = .{
945 .index = @enumToInt(Feature.vop3p),945 .index = @enumToInt(Feature.vop3p),
946 .name = @tagName(Feature.vop3p),946 .name = @tagName(Feature.vop3p),
947 .llvm_name = "vop3p",947 .llvm_name = "vop3p",
948 .description = "Has VOP3P packed instructions",948 .description = "Has VOP3P packed instructions",
949 .dependencies = 0,949 .dependencies = featureSet(&[_]Feature{}),
950 };950 };
951 result[@enumToInt(Feature.vscnt)] = .{951 result[@enumToInt(Feature.vscnt)] = .{
952 .index = @enumToInt(Feature.vscnt),952 .index = @enumToInt(Feature.vscnt),
953 .name = @tagName(Feature.vscnt),953 .name = @tagName(Feature.vscnt),
954 .llvm_name = "vscnt",954 .llvm_name = "vscnt",
955 .description = "Has separate store vscnt counter",955 .description = "Has separate store vscnt counter",
956 .dependencies = 0,956 .dependencies = featureSet(&[_]Feature{}),
957 };957 };
958 result[@enumToInt(Feature.wavefrontsize16)] = .{958 result[@enumToInt(Feature.wavefrontsize16)] = .{
959 .index = @enumToInt(Feature.wavefrontsize16),959 .index = @enumToInt(Feature.wavefrontsize16),
960 .name = @tagName(Feature.wavefrontsize16),960 .name = @tagName(Feature.wavefrontsize16),
961 .llvm_name = "wavefrontsize16",961 .llvm_name = "wavefrontsize16",
962 .description = "The number of threads per wavefront",962 .description = "The number of threads per wavefront",
963 .dependencies = 0,963 .dependencies = featureSet(&[_]Feature{}),
964 };964 };
965 result[@enumToInt(Feature.wavefrontsize32)] = .{965 result[@enumToInt(Feature.wavefrontsize32)] = .{
966 .index = @enumToInt(Feature.wavefrontsize32),966 .index = @enumToInt(Feature.wavefrontsize32),
967 .name = @tagName(Feature.wavefrontsize32),967 .name = @tagName(Feature.wavefrontsize32),
968 .llvm_name = "wavefrontsize32",968 .llvm_name = "wavefrontsize32",
969 .description = "The number of threads per wavefront",969 .description = "The number of threads per wavefront",
970 .dependencies = 0,970 .dependencies = featureSet(&[_]Feature{}),
971 };971 };
972 result[@enumToInt(Feature.wavefrontsize64)] = .{972 result[@enumToInt(Feature.wavefrontsize64)] = .{
973 .index = @enumToInt(Feature.wavefrontsize64),973 .index = @enumToInt(Feature.wavefrontsize64),
974 .name = @tagName(Feature.wavefrontsize64),974 .name = @tagName(Feature.wavefrontsize64),
975 .llvm_name = "wavefrontsize64",975 .llvm_name = "wavefrontsize64",
976 .description = "The number of threads per wavefront",976 .description = "The number of threads per wavefront",
977 .dependencies = 0,977 .dependencies = featureSet(&[_]Feature{}),
978 };978 };
979 result[@enumToInt(Feature.xnack)] = .{979 result[@enumToInt(Feature.xnack)] = .{
980 .index = @enumToInt(Feature.xnack),980 .index = @enumToInt(Feature.xnack),
981 .name = @tagName(Feature.xnack),981 .name = @tagName(Feature.xnack),
982 .llvm_name = "xnack",982 .llvm_name = "xnack",
983 .description = "Enable XNACK support",983 .description = "Enable XNACK support",
984 .dependencies = 0,984 .dependencies = featureSet(&[_]Feature{}),
985 };985 };
986 break :blk result;986 break :blk result;
987};987};
lib/std/target/arm.zig+98-98
...@@ -182,147 +182,147 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -182,147 +182,147 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
182182
183pub const all_features = blk: {183pub const all_features = blk: {
184 const len = @typeInfo(Feature).Enum.fields.len;184 const len = @typeInfo(Feature).Enum.fields.len;
185 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);185 std.debug.assert(len <= Cpu.Feature.Set.bit_count);
186 var result: [len]Cpu.Feature = undefined;186 var result: [len]Cpu.Feature = undefined;
187 result[@enumToInt(Feature.@"32bit")] = .{187 result[@enumToInt(Feature.@"32bit")] = .{
188 .index = @enumToInt(Feature.@"32bit"),188 .index = @enumToInt(Feature.@"32bit"),
189 .name = @tagName(Feature.@"32bit"),189 .name = @tagName(Feature.@"32bit"),
190 .llvm_name = "32bit",190 .llvm_name = "32bit",
191 .description = "Prefer 32-bit Thumb instrs",191 .description = "Prefer 32-bit Thumb instrs",
192 .dependencies = 0,192 .dependencies = featureSet(&[_]Feature{}),
193 };193 };
194 result[@enumToInt(Feature.@"8msecext")] = .{194 result[@enumToInt(Feature.@"8msecext")] = .{
195 .index = @enumToInt(Feature.@"8msecext"),195 .index = @enumToInt(Feature.@"8msecext"),
196 .name = @tagName(Feature.@"8msecext"),196 .name = @tagName(Feature.@"8msecext"),
197 .llvm_name = "8msecext",197 .llvm_name = "8msecext",
198 .description = "Enable support for ARMv8-M Security Extensions",198 .description = "Enable support for ARMv8-M Security Extensions",
199 .dependencies = 0,199 .dependencies = featureSet(&[_]Feature{}),
200 };200 };
201 result[@enumToInt(Feature.a12)] = .{201 result[@enumToInt(Feature.a12)] = .{
202 .index = @enumToInt(Feature.a12),202 .index = @enumToInt(Feature.a12),
203 .name = @tagName(Feature.a12),203 .name = @tagName(Feature.a12),
204 .llvm_name = "a12",204 .llvm_name = "a12",
205 .description = "Cortex-A12 ARM processors",205 .description = "Cortex-A12 ARM processors",
206 .dependencies = 0,206 .dependencies = featureSet(&[_]Feature{}),
207 };207 };
208 result[@enumToInt(Feature.a15)] = .{208 result[@enumToInt(Feature.a15)] = .{
209 .index = @enumToInt(Feature.a15),209 .index = @enumToInt(Feature.a15),
210 .name = @tagName(Feature.a15),210 .name = @tagName(Feature.a15),
211 .llvm_name = "a15",211 .llvm_name = "a15",
212 .description = "Cortex-A15 ARM processors",212 .description = "Cortex-A15 ARM processors",
213 .dependencies = 0,213 .dependencies = featureSet(&[_]Feature{}),
214 };214 };
215 result[@enumToInt(Feature.a17)] = .{215 result[@enumToInt(Feature.a17)] = .{
216 .index = @enumToInt(Feature.a17),216 .index = @enumToInt(Feature.a17),
217 .name = @tagName(Feature.a17),217 .name = @tagName(Feature.a17),
218 .llvm_name = "a17",218 .llvm_name = "a17",
219 .description = "Cortex-A17 ARM processors",219 .description = "Cortex-A17 ARM processors",
220 .dependencies = 0,220 .dependencies = featureSet(&[_]Feature{}),
221 };221 };
222 result[@enumToInt(Feature.a32)] = .{222 result[@enumToInt(Feature.a32)] = .{
223 .index = @enumToInt(Feature.a32),223 .index = @enumToInt(Feature.a32),
224 .name = @tagName(Feature.a32),224 .name = @tagName(Feature.a32),
225 .llvm_name = "a32",225 .llvm_name = "a32",
226 .description = "Cortex-A32 ARM processors",226 .description = "Cortex-A32 ARM processors",
227 .dependencies = 0,227 .dependencies = featureSet(&[_]Feature{}),
228 };228 };
229 result[@enumToInt(Feature.a35)] = .{229 result[@enumToInt(Feature.a35)] = .{
230 .index = @enumToInt(Feature.a35),230 .index = @enumToInt(Feature.a35),
231 .name = @tagName(Feature.a35),231 .name = @tagName(Feature.a35),
232 .llvm_name = "a35",232 .llvm_name = "a35",
233 .description = "Cortex-A35 ARM processors",233 .description = "Cortex-A35 ARM processors",
234 .dependencies = 0,234 .dependencies = featureSet(&[_]Feature{}),
235 };235 };
236 result[@enumToInt(Feature.a5)] = .{236 result[@enumToInt(Feature.a5)] = .{
237 .index = @enumToInt(Feature.a5),237 .index = @enumToInt(Feature.a5),
238 .name = @tagName(Feature.a5),238 .name = @tagName(Feature.a5),
239 .llvm_name = "a5",239 .llvm_name = "a5",
240 .description = "Cortex-A5 ARM processors",240 .description = "Cortex-A5 ARM processors",
241 .dependencies = 0,241 .dependencies = featureSet(&[_]Feature{}),
242 };242 };
243 result[@enumToInt(Feature.a53)] = .{243 result[@enumToInt(Feature.a53)] = .{
244 .index = @enumToInt(Feature.a53),244 .index = @enumToInt(Feature.a53),
245 .name = @tagName(Feature.a53),245 .name = @tagName(Feature.a53),
246 .llvm_name = "a53",246 .llvm_name = "a53",
247 .description = "Cortex-A53 ARM processors",247 .description = "Cortex-A53 ARM processors",
248 .dependencies = 0,248 .dependencies = featureSet(&[_]Feature{}),
249 };249 };
250 result[@enumToInt(Feature.a55)] = .{250 result[@enumToInt(Feature.a55)] = .{
251 .index = @enumToInt(Feature.a55),251 .index = @enumToInt(Feature.a55),
252 .name = @tagName(Feature.a55),252 .name = @tagName(Feature.a55),
253 .llvm_name = "a55",253 .llvm_name = "a55",
254 .description = "Cortex-A55 ARM processors",254 .description = "Cortex-A55 ARM processors",
255 .dependencies = 0,255 .dependencies = featureSet(&[_]Feature{}),
256 };256 };
257 result[@enumToInt(Feature.a57)] = .{257 result[@enumToInt(Feature.a57)] = .{
258 .index = @enumToInt(Feature.a57),258 .index = @enumToInt(Feature.a57),
259 .name = @tagName(Feature.a57),259 .name = @tagName(Feature.a57),
260 .llvm_name = "a57",260 .llvm_name = "a57",
261 .description = "Cortex-A57 ARM processors",261 .description = "Cortex-A57 ARM processors",
262 .dependencies = 0,262 .dependencies = featureSet(&[_]Feature{}),
263 };263 };
264 result[@enumToInt(Feature.a7)] = .{264 result[@enumToInt(Feature.a7)] = .{
265 .index = @enumToInt(Feature.a7),265 .index = @enumToInt(Feature.a7),
266 .name = @tagName(Feature.a7),266 .name = @tagName(Feature.a7),
267 .llvm_name = "a7",267 .llvm_name = "a7",
268 .description = "Cortex-A7 ARM processors",268 .description = "Cortex-A7 ARM processors",
269 .dependencies = 0,269 .dependencies = featureSet(&[_]Feature{}),
270 };270 };
271 result[@enumToInt(Feature.a72)] = .{271 result[@enumToInt(Feature.a72)] = .{
272 .index = @enumToInt(Feature.a72),272 .index = @enumToInt(Feature.a72),
273 .name = @tagName(Feature.a72),273 .name = @tagName(Feature.a72),
274 .llvm_name = "a72",274 .llvm_name = "a72",
275 .description = "Cortex-A72 ARM processors",275 .description = "Cortex-A72 ARM processors",
276 .dependencies = 0,276 .dependencies = featureSet(&[_]Feature{}),
277 };277 };
278 result[@enumToInt(Feature.a73)] = .{278 result[@enumToInt(Feature.a73)] = .{
279 .index = @enumToInt(Feature.a73),279 .index = @enumToInt(Feature.a73),
280 .name = @tagName(Feature.a73),280 .name = @tagName(Feature.a73),
281 .llvm_name = "a73",281 .llvm_name = "a73",
282 .description = "Cortex-A73 ARM processors",282 .description = "Cortex-A73 ARM processors",
283 .dependencies = 0,283 .dependencies = featureSet(&[_]Feature{}),
284 };284 };
285 result[@enumToInt(Feature.a75)] = .{285 result[@enumToInt(Feature.a75)] = .{
286 .index = @enumToInt(Feature.a75),286 .index = @enumToInt(Feature.a75),
287 .name = @tagName(Feature.a75),287 .name = @tagName(Feature.a75),
288 .llvm_name = "a75",288 .llvm_name = "a75",
289 .description = "Cortex-A75 ARM processors",289 .description = "Cortex-A75 ARM processors",
290 .dependencies = 0,290 .dependencies = featureSet(&[_]Feature{}),
291 };291 };
292 result[@enumToInt(Feature.a76)] = .{292 result[@enumToInt(Feature.a76)] = .{
293 .index = @enumToInt(Feature.a76),293 .index = @enumToInt(Feature.a76),
294 .name = @tagName(Feature.a76),294 .name = @tagName(Feature.a76),
295 .llvm_name = "a76",295 .llvm_name = "a76",
296 .description = "Cortex-A76 ARM processors",296 .description = "Cortex-A76 ARM processors",
297 .dependencies = 0,297 .dependencies = featureSet(&[_]Feature{}),
298 };298 };
299 result[@enumToInt(Feature.a8)] = .{299 result[@enumToInt(Feature.a8)] = .{
300 .index = @enumToInt(Feature.a8),300 .index = @enumToInt(Feature.a8),
301 .name = @tagName(Feature.a8),301 .name = @tagName(Feature.a8),
302 .llvm_name = "a8",302 .llvm_name = "a8",
303 .description = "Cortex-A8 ARM processors",303 .description = "Cortex-A8 ARM processors",
304 .dependencies = 0,304 .dependencies = featureSet(&[_]Feature{}),
305 };305 };
306 result[@enumToInt(Feature.a9)] = .{306 result[@enumToInt(Feature.a9)] = .{
307 .index = @enumToInt(Feature.a9),307 .index = @enumToInt(Feature.a9),
308 .name = @tagName(Feature.a9),308 .name = @tagName(Feature.a9),
309 .llvm_name = "a9",309 .llvm_name = "a9",
310 .description = "Cortex-A9 ARM processors",310 .description = "Cortex-A9 ARM processors",
311 .dependencies = 0,311 .dependencies = featureSet(&[_]Feature{}),
312 };312 };
313 result[@enumToInt(Feature.aclass)] = .{313 result[@enumToInt(Feature.aclass)] = .{
314 .index = @enumToInt(Feature.aclass),314 .index = @enumToInt(Feature.aclass),
315 .name = @tagName(Feature.aclass),315 .name = @tagName(Feature.aclass),
316 .llvm_name = "aclass",316 .llvm_name = "aclass",
317 .description = "Is application profile ('A' series)",317 .description = "Is application profile ('A' series)",
318 .dependencies = 0,318 .dependencies = featureSet(&[_]Feature{}),
319 };319 };
320 result[@enumToInt(Feature.acquire_release)] = .{320 result[@enumToInt(Feature.acquire_release)] = .{
321 .index = @enumToInt(Feature.acquire_release),321 .index = @enumToInt(Feature.acquire_release),
322 .name = @tagName(Feature.acquire_release),322 .name = @tagName(Feature.acquire_release),
323 .llvm_name = "acquire-release",323 .llvm_name = "acquire-release",
324 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",324 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
325 .dependencies = 0,325 .dependencies = featureSet(&[_]Feature{}),
326 };326 };
327 result[@enumToInt(Feature.aes)] = .{327 result[@enumToInt(Feature.aes)] = .{
328 .index = @enumToInt(Feature.aes),328 .index = @enumToInt(Feature.aes),
...@@ -338,35 +338,35 @@ pub const all_features = blk: {...@@ -338,35 +338,35 @@ pub const all_features = blk: {
338 .name = @tagName(Feature.armv2),338 .name = @tagName(Feature.armv2),
339 .llvm_name = "armv2",339 .llvm_name = "armv2",
340 .description = "ARMv2 architecture",340 .description = "ARMv2 architecture",
341 .dependencies = 0,341 .dependencies = featureSet(&[_]Feature{}),
342 };342 };
343 result[@enumToInt(Feature.armv2a)] = .{343 result[@enumToInt(Feature.armv2a)] = .{
344 .index = @enumToInt(Feature.armv2a),344 .index = @enumToInt(Feature.armv2a),
345 .name = @tagName(Feature.armv2a),345 .name = @tagName(Feature.armv2a),
346 .llvm_name = "armv2a",346 .llvm_name = "armv2a",
347 .description = "ARMv2a architecture",347 .description = "ARMv2a architecture",
348 .dependencies = 0,348 .dependencies = featureSet(&[_]Feature{}),
349 };349 };
350 result[@enumToInt(Feature.armv3)] = .{350 result[@enumToInt(Feature.armv3)] = .{
351 .index = @enumToInt(Feature.armv3),351 .index = @enumToInt(Feature.armv3),
352 .name = @tagName(Feature.armv3),352 .name = @tagName(Feature.armv3),
353 .llvm_name = "armv3",353 .llvm_name = "armv3",
354 .description = "ARMv3 architecture",354 .description = "ARMv3 architecture",
355 .dependencies = 0,355 .dependencies = featureSet(&[_]Feature{}),
356 };356 };
357 result[@enumToInt(Feature.armv3m)] = .{357 result[@enumToInt(Feature.armv3m)] = .{
358 .index = @enumToInt(Feature.armv3m),358 .index = @enumToInt(Feature.armv3m),
359 .name = @tagName(Feature.armv3m),359 .name = @tagName(Feature.armv3m),
360 .llvm_name = "armv3m",360 .llvm_name = "armv3m",
361 .description = "ARMv3m architecture",361 .description = "ARMv3m architecture",
362 .dependencies = 0,362 .dependencies = featureSet(&[_]Feature{}),
363 };363 };
364 result[@enumToInt(Feature.armv4)] = .{364 result[@enumToInt(Feature.armv4)] = .{
365 .index = @enumToInt(Feature.armv4),365 .index = @enumToInt(Feature.armv4),
366 .name = @tagName(Feature.armv4),366 .name = @tagName(Feature.armv4),
367 .llvm_name = "armv4",367 .llvm_name = "armv4",
368 .description = "ARMv4 architecture",368 .description = "ARMv4 architecture",
369 .dependencies = 0,369 .dependencies = featureSet(&[_]Feature{}),
370 };370 };
371 result[@enumToInt(Feature.armv4t)] = .{371 result[@enumToInt(Feature.armv4t)] = .{
372 .index = @enumToInt(Feature.armv4t),372 .index = @enumToInt(Feature.armv4t),
...@@ -766,28 +766,28 @@ pub const all_features = blk: {...@@ -766,28 +766,28 @@ pub const all_features = blk: {
766 .name = @tagName(Feature.avoid_movs_shop),766 .name = @tagName(Feature.avoid_movs_shop),
767 .llvm_name = "avoid-movs-shop",767 .llvm_name = "avoid-movs-shop",
768 .description = "Avoid movs instructions with shifter operand",768 .description = "Avoid movs instructions with shifter operand",
769 .dependencies = 0,769 .dependencies = featureSet(&[_]Feature{}),
770 };770 };
771 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{771 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{
772 .index = @enumToInt(Feature.avoid_partial_cpsr),772 .index = @enumToInt(Feature.avoid_partial_cpsr),
773 .name = @tagName(Feature.avoid_partial_cpsr),773 .name = @tagName(Feature.avoid_partial_cpsr),
774 .llvm_name = "avoid-partial-cpsr",774 .llvm_name = "avoid-partial-cpsr",
775 .description = "Avoid CPSR partial update for OOO execution",775 .description = "Avoid CPSR partial update for OOO execution",
776 .dependencies = 0,776 .dependencies = featureSet(&[_]Feature{}),
777 };777 };
778 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{778 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
779 .index = @enumToInt(Feature.cheap_predicable_cpsr),779 .index = @enumToInt(Feature.cheap_predicable_cpsr),
780 .name = @tagName(Feature.cheap_predicable_cpsr),780 .name = @tagName(Feature.cheap_predicable_cpsr),
781 .llvm_name = "cheap-predicable-cpsr",781 .llvm_name = "cheap-predicable-cpsr",
782 .description = "Disable +1 predication cost for instructions updating CPSR",782 .description = "Disable +1 predication cost for instructions updating CPSR",
783 .dependencies = 0,783 .dependencies = featureSet(&[_]Feature{}),
784 };784 };
785 result[@enumToInt(Feature.crc)] = .{785 result[@enumToInt(Feature.crc)] = .{
786 .index = @enumToInt(Feature.crc),786 .index = @enumToInt(Feature.crc),
787 .name = @tagName(Feature.crc),787 .name = @tagName(Feature.crc),
788 .llvm_name = "crc",788 .llvm_name = "crc",
789 .description = "Enable support for CRC instructions",789 .description = "Enable support for CRC instructions",
790 .dependencies = 0,790 .dependencies = featureSet(&[_]Feature{}),
791 };791 };
792 result[@enumToInt(Feature.crypto)] = .{792 result[@enumToInt(Feature.crypto)] = .{
793 .index = @enumToInt(Feature.crypto),793 .index = @enumToInt(Feature.crypto),
...@@ -805,35 +805,35 @@ pub const all_features = blk: {...@@ -805,35 +805,35 @@ pub const all_features = blk: {
805 .name = @tagName(Feature.d32),805 .name = @tagName(Feature.d32),
806 .llvm_name = "d32",806 .llvm_name = "d32",
807 .description = "Extend FP to 32 double registers",807 .description = "Extend FP to 32 double registers",
808 .dependencies = 0,808 .dependencies = featureSet(&[_]Feature{}),
809 };809 };
810 result[@enumToInt(Feature.db)] = .{810 result[@enumToInt(Feature.db)] = .{
811 .index = @enumToInt(Feature.db),811 .index = @enumToInt(Feature.db),
812 .name = @tagName(Feature.db),812 .name = @tagName(Feature.db),
813 .llvm_name = "db",813 .llvm_name = "db",
814 .description = "Has data barrier (dmb/dsb) instructions",814 .description = "Has data barrier (dmb/dsb) instructions",
815 .dependencies = 0,815 .dependencies = featureSet(&[_]Feature{}),
816 };816 };
817 result[@enumToInt(Feature.dfb)] = .{817 result[@enumToInt(Feature.dfb)] = .{
818 .index = @enumToInt(Feature.dfb),818 .index = @enumToInt(Feature.dfb),
819 .name = @tagName(Feature.dfb),819 .name = @tagName(Feature.dfb),
820 .llvm_name = "dfb",820 .llvm_name = "dfb",
821 .description = "Has full data barrier (dfb) instruction",821 .description = "Has full data barrier (dfb) instruction",
822 .dependencies = 0,822 .dependencies = featureSet(&[_]Feature{}),
823 };823 };
824 result[@enumToInt(Feature.disable_postra_scheduler)] = .{824 result[@enumToInt(Feature.disable_postra_scheduler)] = .{
825 .index = @enumToInt(Feature.disable_postra_scheduler),825 .index = @enumToInt(Feature.disable_postra_scheduler),
826 .name = @tagName(Feature.disable_postra_scheduler),826 .name = @tagName(Feature.disable_postra_scheduler),
827 .llvm_name = "disable-postra-scheduler",827 .llvm_name = "disable-postra-scheduler",
828 .description = "Don't schedule again after register allocation",828 .description = "Don't schedule again after register allocation",
829 .dependencies = 0,829 .dependencies = featureSet(&[_]Feature{}),
830 };830 };
831 result[@enumToInt(Feature.dont_widen_vmovs)] = .{831 result[@enumToInt(Feature.dont_widen_vmovs)] = .{
832 .index = @enumToInt(Feature.dont_widen_vmovs),832 .index = @enumToInt(Feature.dont_widen_vmovs),
833 .name = @tagName(Feature.dont_widen_vmovs),833 .name = @tagName(Feature.dont_widen_vmovs),
834 .llvm_name = "dont-widen-vmovs",834 .llvm_name = "dont-widen-vmovs",
835 .description = "Don't widen VMOVS to VMOVD",835 .description = "Don't widen VMOVS to VMOVD",
836 .dependencies = 0,836 .dependencies = featureSet(&[_]Feature{}),
837 };837 };
838 result[@enumToInt(Feature.dotprod)] = .{838 result[@enumToInt(Feature.dotprod)] = .{
839 .index = @enumToInt(Feature.dotprod),839 .index = @enumToInt(Feature.dotprod),
...@@ -849,21 +849,21 @@ pub const all_features = blk: {...@@ -849,21 +849,21 @@ pub const all_features = blk: {
849 .name = @tagName(Feature.dsp),849 .name = @tagName(Feature.dsp),
850 .llvm_name = "dsp",850 .llvm_name = "dsp",
851 .description = "Supports DSP instructions in ARM and/or Thumb2",851 .description = "Supports DSP instructions in ARM and/or Thumb2",
852 .dependencies = 0,852 .dependencies = featureSet(&[_]Feature{}),
853 };853 };
854 result[@enumToInt(Feature.execute_only)] = .{854 result[@enumToInt(Feature.execute_only)] = .{
855 .index = @enumToInt(Feature.execute_only),855 .index = @enumToInt(Feature.execute_only),
856 .name = @tagName(Feature.execute_only),856 .name = @tagName(Feature.execute_only),
857 .llvm_name = "execute-only",857 .llvm_name = "execute-only",
858 .description = "Enable the generation of execute only code.",858 .description = "Enable the generation of execute only code.",
859 .dependencies = 0,859 .dependencies = featureSet(&[_]Feature{}),
860 };860 };
861 result[@enumToInt(Feature.expand_fp_mlx)] = .{861 result[@enumToInt(Feature.expand_fp_mlx)] = .{
862 .index = @enumToInt(Feature.expand_fp_mlx),862 .index = @enumToInt(Feature.expand_fp_mlx),
863 .name = @tagName(Feature.expand_fp_mlx),863 .name = @tagName(Feature.expand_fp_mlx),
864 .llvm_name = "expand-fp-mlx",864 .llvm_name = "expand-fp-mlx",
865 .description = "Expand VFP/NEON MLA/MLS instructions",865 .description = "Expand VFP/NEON MLA/MLS instructions",
866 .dependencies = 0,866 .dependencies = featureSet(&[_]Feature{}),
867 };867 };
868 result[@enumToInt(Feature.exynos)] = .{868 result[@enumToInt(Feature.exynos)] = .{
869 .index = @enumToInt(Feature.exynos),869 .index = @enumToInt(Feature.exynos),
...@@ -937,7 +937,7 @@ pub const all_features = blk: {...@@ -937,7 +937,7 @@ pub const all_features = blk: {
937 .name = @tagName(Feature.fp16),937 .name = @tagName(Feature.fp16),
938 .llvm_name = "fp16",938 .llvm_name = "fp16",
939 .description = "Enable half-precision floating point",939 .description = "Enable half-precision floating point",
940 .dependencies = 0,940 .dependencies = featureSet(&[_]Feature{}),
941 };941 };
942 result[@enumToInt(Feature.fp16fml)] = .{942 result[@enumToInt(Feature.fp16fml)] = .{
943 .index = @enumToInt(Feature.fp16fml),943 .index = @enumToInt(Feature.fp16fml),
...@@ -962,14 +962,14 @@ pub const all_features = blk: {...@@ -962,14 +962,14 @@ pub const all_features = blk: {
962 .name = @tagName(Feature.fpao),962 .name = @tagName(Feature.fpao),
963 .llvm_name = "fpao",963 .llvm_name = "fpao",
964 .description = "Enable fast computation of positive address offsets",964 .description = "Enable fast computation of positive address offsets",
965 .dependencies = 0,965 .dependencies = featureSet(&[_]Feature{}),
966 };966 };
967 result[@enumToInt(Feature.fpregs)] = .{967 result[@enumToInt(Feature.fpregs)] = .{
968 .index = @enumToInt(Feature.fpregs),968 .index = @enumToInt(Feature.fpregs),
969 .name = @tagName(Feature.fpregs),969 .name = @tagName(Feature.fpregs),
970 .llvm_name = "fpregs",970 .llvm_name = "fpregs",
971 .description = "Enable FP registers",971 .description = "Enable FP registers",
972 .dependencies = 0,972 .dependencies = featureSet(&[_]Feature{}),
973 };973 };
974 result[@enumToInt(Feature.fpregs16)] = .{974 result[@enumToInt(Feature.fpregs16)] = .{
975 .index = @enumToInt(Feature.fpregs16),975 .index = @enumToInt(Feature.fpregs16),
...@@ -1004,28 +1004,28 @@ pub const all_features = blk: {...@@ -1004,28 +1004,28 @@ pub const all_features = blk: {
1004 .name = @tagName(Feature.fuse_aes),1004 .name = @tagName(Feature.fuse_aes),
1005 .llvm_name = "fuse-aes",1005 .llvm_name = "fuse-aes",
1006 .description = "CPU fuses AES crypto operations",1006 .description = "CPU fuses AES crypto operations",
1007 .dependencies = 0,1007 .dependencies = featureSet(&[_]Feature{}),
1008 };1008 };
1009 result[@enumToInt(Feature.fuse_literals)] = .{1009 result[@enumToInt(Feature.fuse_literals)] = .{
1010 .index = @enumToInt(Feature.fuse_literals),1010 .index = @enumToInt(Feature.fuse_literals),
1011 .name = @tagName(Feature.fuse_literals),1011 .name = @tagName(Feature.fuse_literals),
1012 .llvm_name = "fuse-literals",1012 .llvm_name = "fuse-literals",
1013 .description = "CPU fuses literal generation operations",1013 .description = "CPU fuses literal generation operations",
1014 .dependencies = 0,1014 .dependencies = featureSet(&[_]Feature{}),
1015 };1015 };
1016 result[@enumToInt(Feature.hwdiv)] = .{1016 result[@enumToInt(Feature.hwdiv)] = .{
1017 .index = @enumToInt(Feature.hwdiv),1017 .index = @enumToInt(Feature.hwdiv),
1018 .name = @tagName(Feature.hwdiv),1018 .name = @tagName(Feature.hwdiv),
1019 .llvm_name = "hwdiv",1019 .llvm_name = "hwdiv",
1020 .description = "Enable divide instructions in Thumb",1020 .description = "Enable divide instructions in Thumb",
1021 .dependencies = 0,1021 .dependencies = featureSet(&[_]Feature{}),
1022 };1022 };
1023 result[@enumToInt(Feature.hwdiv_arm)] = .{1023 result[@enumToInt(Feature.hwdiv_arm)] = .{
1024 .index = @enumToInt(Feature.hwdiv_arm),1024 .index = @enumToInt(Feature.hwdiv_arm),
1025 .name = @tagName(Feature.hwdiv_arm),1025 .name = @tagName(Feature.hwdiv_arm),
1026 .llvm_name = "hwdiv-arm",1026 .llvm_name = "hwdiv-arm",
1027 .description = "Enable divide instructions in ARM mode",1027 .description = "Enable divide instructions in ARM mode",
1028 .dependencies = 0,1028 .dependencies = featureSet(&[_]Feature{}),
1029 };1029 };
1030 result[@enumToInt(Feature.iwmmxt)] = .{1030 result[@enumToInt(Feature.iwmmxt)] = .{
1031 .index = @enumToInt(Feature.iwmmxt),1031 .index = @enumToInt(Feature.iwmmxt),
...@@ -1050,63 +1050,63 @@ pub const all_features = blk: {...@@ -1050,63 +1050,63 @@ pub const all_features = blk: {
1050 .name = @tagName(Feature.krait),1050 .name = @tagName(Feature.krait),
1051 .llvm_name = "krait",1051 .llvm_name = "krait",
1052 .description = "Qualcomm Krait processors",1052 .description = "Qualcomm Krait processors",
1053 .dependencies = 0,1053 .dependencies = featureSet(&[_]Feature{}),
1054 };1054 };
1055 result[@enumToInt(Feature.kryo)] = .{1055 result[@enumToInt(Feature.kryo)] = .{
1056 .index = @enumToInt(Feature.kryo),1056 .index = @enumToInt(Feature.kryo),
1057 .name = @tagName(Feature.kryo),1057 .name = @tagName(Feature.kryo),
1058 .llvm_name = "kryo",1058 .llvm_name = "kryo",
1059 .description = "Qualcomm Kryo processors",1059 .description = "Qualcomm Kryo processors",
1060 .dependencies = 0,1060 .dependencies = featureSet(&[_]Feature{}),
1061 };1061 };
1062 result[@enumToInt(Feature.lob)] = .{1062 result[@enumToInt(Feature.lob)] = .{
1063 .index = @enumToInt(Feature.lob),1063 .index = @enumToInt(Feature.lob),
1064 .name = @tagName(Feature.lob),1064 .name = @tagName(Feature.lob),
1065 .llvm_name = "lob",1065 .llvm_name = "lob",
1066 .description = "Enable Low Overhead Branch extensions",1066 .description = "Enable Low Overhead Branch extensions",
1067 .dependencies = 0,1067 .dependencies = featureSet(&[_]Feature{}),
1068 };1068 };
1069 result[@enumToInt(Feature.long_calls)] = .{1069 result[@enumToInt(Feature.long_calls)] = .{
1070 .index = @enumToInt(Feature.long_calls),1070 .index = @enumToInt(Feature.long_calls),
1071 .name = @tagName(Feature.long_calls),1071 .name = @tagName(Feature.long_calls),
1072 .llvm_name = "long-calls",1072 .llvm_name = "long-calls",
1073 .description = "Generate calls via indirect call instructions",1073 .description = "Generate calls via indirect call instructions",
1074 .dependencies = 0,1074 .dependencies = featureSet(&[_]Feature{}),
1075 };1075 };
1076 result[@enumToInt(Feature.loop_align)] = .{1076 result[@enumToInt(Feature.loop_align)] = .{
1077 .index = @enumToInt(Feature.loop_align),1077 .index = @enumToInt(Feature.loop_align),
1078 .name = @tagName(Feature.loop_align),1078 .name = @tagName(Feature.loop_align),
1079 .llvm_name = "loop-align",1079 .llvm_name = "loop-align",
1080 .description = "Prefer 32-bit alignment for loops",1080 .description = "Prefer 32-bit alignment for loops",
1081 .dependencies = 0,1081 .dependencies = featureSet(&[_]Feature{}),
1082 };1082 };
1083 result[@enumToInt(Feature.m3)] = .{1083 result[@enumToInt(Feature.m3)] = .{
1084 .index = @enumToInt(Feature.m3),1084 .index = @enumToInt(Feature.m3),
1085 .name = @tagName(Feature.m3),1085 .name = @tagName(Feature.m3),
1086 .llvm_name = "m3",1086 .llvm_name = "m3",
1087 .description = "Cortex-M3 ARM processors",1087 .description = "Cortex-M3 ARM processors",
1088 .dependencies = 0,1088 .dependencies = featureSet(&[_]Feature{}),
1089 };1089 };
1090 result[@enumToInt(Feature.mclass)] = .{1090 result[@enumToInt(Feature.mclass)] = .{
1091 .index = @enumToInt(Feature.mclass),1091 .index = @enumToInt(Feature.mclass),
1092 .name = @tagName(Feature.mclass),1092 .name = @tagName(Feature.mclass),
1093 .llvm_name = "mclass",1093 .llvm_name = "mclass",
1094 .description = "Is microcontroller profile ('M' series)",1094 .description = "Is microcontroller profile ('M' series)",
1095 .dependencies = 0,1095 .dependencies = featureSet(&[_]Feature{}),
1096 };1096 };
1097 result[@enumToInt(Feature.mp)] = .{1097 result[@enumToInt(Feature.mp)] = .{
1098 .index = @enumToInt(Feature.mp),1098 .index = @enumToInt(Feature.mp),
1099 .name = @tagName(Feature.mp),1099 .name = @tagName(Feature.mp),
1100 .llvm_name = "mp",1100 .llvm_name = "mp",
1101 .description = "Supports Multiprocessing extension",1101 .description = "Supports Multiprocessing extension",
1102 .dependencies = 0,1102 .dependencies = featureSet(&[_]Feature{}),
1103 };1103 };
1104 result[@enumToInt(Feature.muxed_units)] = .{1104 result[@enumToInt(Feature.muxed_units)] = .{
1105 .index = @enumToInt(Feature.muxed_units),1105 .index = @enumToInt(Feature.muxed_units),
1106 .name = @tagName(Feature.muxed_units),1106 .name = @tagName(Feature.muxed_units),
1107 .llvm_name = "muxed-units",1107 .llvm_name = "muxed-units",
1108 .description = "Has muxed AGU and NEON/FPU",1108 .description = "Has muxed AGU and NEON/FPU",
1109 .dependencies = 0,1109 .dependencies = featureSet(&[_]Feature{}),
1110 };1110 };
1111 result[@enumToInt(Feature.mve)] = .{1111 result[@enumToInt(Feature.mve)] = .{
1112 .index = @enumToInt(Feature.mve),1112 .index = @enumToInt(Feature.mve),
...@@ -1136,7 +1136,7 @@ pub const all_features = blk: {...@@ -1136,7 +1136,7 @@ pub const all_features = blk: {
1136 .name = @tagName(Feature.nacl_trap),1136 .name = @tagName(Feature.nacl_trap),
1137 .llvm_name = "nacl-trap",1137 .llvm_name = "nacl-trap",
1138 .description = "NaCl trap",1138 .description = "NaCl trap",
1139 .dependencies = 0,1139 .dependencies = featureSet(&[_]Feature{}),
1140 };1140 };
1141 result[@enumToInt(Feature.neon)] = .{1141 result[@enumToInt(Feature.neon)] = .{
1142 .index = @enumToInt(Feature.neon),1142 .index = @enumToInt(Feature.neon),
...@@ -1152,147 +1152,147 @@ pub const all_features = blk: {...@@ -1152,147 +1152,147 @@ pub const all_features = blk: {
1152 .name = @tagName(Feature.neon_fpmovs),1152 .name = @tagName(Feature.neon_fpmovs),
1153 .llvm_name = "neon-fpmovs",1153 .llvm_name = "neon-fpmovs",
1154 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",1154 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
1155 .dependencies = 0,1155 .dependencies = featureSet(&[_]Feature{}),
1156 };1156 };
1157 result[@enumToInt(Feature.neonfp)] = .{1157 result[@enumToInt(Feature.neonfp)] = .{
1158 .index = @enumToInt(Feature.neonfp),1158 .index = @enumToInt(Feature.neonfp),
1159 .name = @tagName(Feature.neonfp),1159 .name = @tagName(Feature.neonfp),
1160 .llvm_name = "neonfp",1160 .llvm_name = "neonfp",
1161 .description = "Use NEON for single precision FP",1161 .description = "Use NEON for single precision FP",
1162 .dependencies = 0,1162 .dependencies = featureSet(&[_]Feature{}),
1163 };1163 };
1164 result[@enumToInt(Feature.no_branch_predictor)] = .{1164 result[@enumToInt(Feature.no_branch_predictor)] = .{
1165 .index = @enumToInt(Feature.no_branch_predictor),1165 .index = @enumToInt(Feature.no_branch_predictor),
1166 .name = @tagName(Feature.no_branch_predictor),1166 .name = @tagName(Feature.no_branch_predictor),
1167 .llvm_name = "no-branch-predictor",1167 .llvm_name = "no-branch-predictor",
1168 .description = "Has no branch predictor",1168 .description = "Has no branch predictor",
1169 .dependencies = 0,1169 .dependencies = featureSet(&[_]Feature{}),
1170 };1170 };
1171 result[@enumToInt(Feature.no_movt)] = .{1171 result[@enumToInt(Feature.no_movt)] = .{
1172 .index = @enumToInt(Feature.no_movt),1172 .index = @enumToInt(Feature.no_movt),
1173 .name = @tagName(Feature.no_movt),1173 .name = @tagName(Feature.no_movt),
1174 .llvm_name = "no-movt",1174 .llvm_name = "no-movt",
1175 .description = "Don't use movt/movw pairs for 32-bit imms",1175 .description = "Don't use movt/movw pairs for 32-bit imms",
1176 .dependencies = 0,1176 .dependencies = featureSet(&[_]Feature{}),
1177 };1177 };
1178 result[@enumToInt(Feature.no_neg_immediates)] = .{1178 result[@enumToInt(Feature.no_neg_immediates)] = .{
1179 .index = @enumToInt(Feature.no_neg_immediates),1179 .index = @enumToInt(Feature.no_neg_immediates),
1180 .name = @tagName(Feature.no_neg_immediates),1180 .name = @tagName(Feature.no_neg_immediates),
1181 .llvm_name = "no-neg-immediates",1181 .llvm_name = "no-neg-immediates",
1182 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",1182 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
1183 .dependencies = 0,1183 .dependencies = featureSet(&[_]Feature{}),
1184 };1184 };
1185 result[@enumToInt(Feature.noarm)] = .{1185 result[@enumToInt(Feature.noarm)] = .{
1186 .index = @enumToInt(Feature.noarm),1186 .index = @enumToInt(Feature.noarm),
1187 .name = @tagName(Feature.noarm),1187 .name = @tagName(Feature.noarm),
1188 .llvm_name = "noarm",1188 .llvm_name = "noarm",
1189 .description = "Does not support ARM mode execution",1189 .description = "Does not support ARM mode execution",
1190 .dependencies = 0,1190 .dependencies = featureSet(&[_]Feature{}),
1191 };1191 };
1192 result[@enumToInt(Feature.nonpipelined_vfp)] = .{1192 result[@enumToInt(Feature.nonpipelined_vfp)] = .{
1193 .index = @enumToInt(Feature.nonpipelined_vfp),1193 .index = @enumToInt(Feature.nonpipelined_vfp),
1194 .name = @tagName(Feature.nonpipelined_vfp),1194 .name = @tagName(Feature.nonpipelined_vfp),
1195 .llvm_name = "nonpipelined-vfp",1195 .llvm_name = "nonpipelined-vfp",
1196 .description = "VFP instructions are not pipelined",1196 .description = "VFP instructions are not pipelined",
1197 .dependencies = 0,1197 .dependencies = featureSet(&[_]Feature{}),
1198 };1198 };
1199 result[@enumToInt(Feature.perfmon)] = .{1199 result[@enumToInt(Feature.perfmon)] = .{
1200 .index = @enumToInt(Feature.perfmon),1200 .index = @enumToInt(Feature.perfmon),
1201 .name = @tagName(Feature.perfmon),1201 .name = @tagName(Feature.perfmon),
1202 .llvm_name = "perfmon",1202 .llvm_name = "perfmon",
1203 .description = "Enable support for Performance Monitor extensions",1203 .description = "Enable support for Performance Monitor extensions",
1204 .dependencies = 0,1204 .dependencies = featureSet(&[_]Feature{}),
1205 };1205 };
1206 result[@enumToInt(Feature.prefer_ishst)] = .{1206 result[@enumToInt(Feature.prefer_ishst)] = .{
1207 .index = @enumToInt(Feature.prefer_ishst),1207 .index = @enumToInt(Feature.prefer_ishst),
1208 .name = @tagName(Feature.prefer_ishst),1208 .name = @tagName(Feature.prefer_ishst),
1209 .llvm_name = "prefer-ishst",1209 .llvm_name = "prefer-ishst",
1210 .description = "Prefer ISHST barriers",1210 .description = "Prefer ISHST barriers",
1211 .dependencies = 0,1211 .dependencies = featureSet(&[_]Feature{}),
1212 };1212 };
1213 result[@enumToInt(Feature.prefer_vmovsr)] = .{1213 result[@enumToInt(Feature.prefer_vmovsr)] = .{
1214 .index = @enumToInt(Feature.prefer_vmovsr),1214 .index = @enumToInt(Feature.prefer_vmovsr),
1215 .name = @tagName(Feature.prefer_vmovsr),1215 .name = @tagName(Feature.prefer_vmovsr),
1216 .llvm_name = "prefer-vmovsr",1216 .llvm_name = "prefer-vmovsr",
1217 .description = "Prefer VMOVSR",1217 .description = "Prefer VMOVSR",
1218 .dependencies = 0,1218 .dependencies = featureSet(&[_]Feature{}),
1219 };1219 };
1220 result[@enumToInt(Feature.prof_unpr)] = .{1220 result[@enumToInt(Feature.prof_unpr)] = .{
1221 .index = @enumToInt(Feature.prof_unpr),1221 .index = @enumToInt(Feature.prof_unpr),
1222 .name = @tagName(Feature.prof_unpr),1222 .name = @tagName(Feature.prof_unpr),
1223 .llvm_name = "prof-unpr",1223 .llvm_name = "prof-unpr",
1224 .description = "Is profitable to unpredicate",1224 .description = "Is profitable to unpredicate",
1225 .dependencies = 0,1225 .dependencies = featureSet(&[_]Feature{}),
1226 };1226 };
1227 result[@enumToInt(Feature.r4)] = .{1227 result[@enumToInt(Feature.r4)] = .{
1228 .index = @enumToInt(Feature.r4),1228 .index = @enumToInt(Feature.r4),
1229 .name = @tagName(Feature.r4),1229 .name = @tagName(Feature.r4),
1230 .llvm_name = "r4",1230 .llvm_name = "r4",
1231 .description = "Cortex-R4 ARM processors",1231 .description = "Cortex-R4 ARM processors",
1232 .dependencies = 0,1232 .dependencies = featureSet(&[_]Feature{}),
1233 };1233 };
1234 result[@enumToInt(Feature.r5)] = .{1234 result[@enumToInt(Feature.r5)] = .{
1235 .index = @enumToInt(Feature.r5),1235 .index = @enumToInt(Feature.r5),
1236 .name = @tagName(Feature.r5),1236 .name = @tagName(Feature.r5),
1237 .llvm_name = "r5",1237 .llvm_name = "r5",
1238 .description = "Cortex-R5 ARM processors",1238 .description = "Cortex-R5 ARM processors",
1239 .dependencies = 0,1239 .dependencies = featureSet(&[_]Feature{}),
1240 };1240 };
1241 result[@enumToInt(Feature.r52)] = .{1241 result[@enumToInt(Feature.r52)] = .{
1242 .index = @enumToInt(Feature.r52),1242 .index = @enumToInt(Feature.r52),
1243 .name = @tagName(Feature.r52),1243 .name = @tagName(Feature.r52),
1244 .llvm_name = "r52",1244 .llvm_name = "r52",
1245 .description = "Cortex-R52 ARM processors",1245 .description = "Cortex-R52 ARM processors",
1246 .dependencies = 0,1246 .dependencies = featureSet(&[_]Feature{}),
1247 };1247 };
1248 result[@enumToInt(Feature.r7)] = .{1248 result[@enumToInt(Feature.r7)] = .{
1249 .index = @enumToInt(Feature.r7),1249 .index = @enumToInt(Feature.r7),
1250 .name = @tagName(Feature.r7),1250 .name = @tagName(Feature.r7),
1251 .llvm_name = "r7",1251 .llvm_name = "r7",
1252 .description = "Cortex-R7 ARM processors",1252 .description = "Cortex-R7 ARM processors",
1253 .dependencies = 0,1253 .dependencies = featureSet(&[_]Feature{}),
1254 };1254 };
1255 result[@enumToInt(Feature.ras)] = .{1255 result[@enumToInt(Feature.ras)] = .{
1256 .index = @enumToInt(Feature.ras),1256 .index = @enumToInt(Feature.ras),
1257 .name = @tagName(Feature.ras),1257 .name = @tagName(Feature.ras),
1258 .llvm_name = "ras",1258 .llvm_name = "ras",
1259 .description = "Enable Reliability, Availability and Serviceability extensions",1259 .description = "Enable Reliability, Availability and Serviceability extensions",
1260 .dependencies = 0,1260 .dependencies = featureSet(&[_]Feature{}),
1261 };1261 };
1262 result[@enumToInt(Feature.rclass)] = .{1262 result[@enumToInt(Feature.rclass)] = .{
1263 .index = @enumToInt(Feature.rclass),1263 .index = @enumToInt(Feature.rclass),
1264 .name = @tagName(Feature.rclass),1264 .name = @tagName(Feature.rclass),
1265 .llvm_name = "rclass",1265 .llvm_name = "rclass",
1266 .description = "Is realtime profile ('R' series)",1266 .description = "Is realtime profile ('R' series)",
1267 .dependencies = 0,1267 .dependencies = featureSet(&[_]Feature{}),
1268 };1268 };
1269 result[@enumToInt(Feature.read_tp_hard)] = .{1269 result[@enumToInt(Feature.read_tp_hard)] = .{
1270 .index = @enumToInt(Feature.read_tp_hard),1270 .index = @enumToInt(Feature.read_tp_hard),
1271 .name = @tagName(Feature.read_tp_hard),1271 .name = @tagName(Feature.read_tp_hard),
1272 .llvm_name = "read-tp-hard",1272 .llvm_name = "read-tp-hard",
1273 .description = "Reading thread pointer from register",1273 .description = "Reading thread pointer from register",
1274 .dependencies = 0,1274 .dependencies = featureSet(&[_]Feature{}),
1275 };1275 };
1276 result[@enumToInt(Feature.reserve_r9)] = .{1276 result[@enumToInt(Feature.reserve_r9)] = .{
1277 .index = @enumToInt(Feature.reserve_r9),1277 .index = @enumToInt(Feature.reserve_r9),
1278 .name = @tagName(Feature.reserve_r9),1278 .name = @tagName(Feature.reserve_r9),
1279 .llvm_name = "reserve-r9",1279 .llvm_name = "reserve-r9",
1280 .description = "Reserve R9, making it unavailable as GPR",1280 .description = "Reserve R9, making it unavailable as GPR",
1281 .dependencies = 0,1281 .dependencies = featureSet(&[_]Feature{}),
1282 };1282 };
1283 result[@enumToInt(Feature.ret_addr_stack)] = .{1283 result[@enumToInt(Feature.ret_addr_stack)] = .{
1284 .index = @enumToInt(Feature.ret_addr_stack),1284 .index = @enumToInt(Feature.ret_addr_stack),
1285 .name = @tagName(Feature.ret_addr_stack),1285 .name = @tagName(Feature.ret_addr_stack),
1286 .llvm_name = "ret-addr-stack",1286 .llvm_name = "ret-addr-stack",
1287 .description = "Has return address stack",1287 .description = "Has return address stack",
1288 .dependencies = 0,1288 .dependencies = featureSet(&[_]Feature{}),
1289 };1289 };
1290 result[@enumToInt(Feature.sb)] = .{1290 result[@enumToInt(Feature.sb)] = .{
1291 .index = @enumToInt(Feature.sb),1291 .index = @enumToInt(Feature.sb),
1292 .name = @tagName(Feature.sb),1292 .name = @tagName(Feature.sb),
1293 .llvm_name = "sb",1293 .llvm_name = "sb",
1294 .description = "Enable v8.5a Speculation Barrier",1294 .description = "Enable v8.5a Speculation Barrier",
1295 .dependencies = 0,1295 .dependencies = featureSet(&[_]Feature{}),
1296 };1296 };
1297 result[@enumToInt(Feature.sha2)] = .{1297 result[@enumToInt(Feature.sha2)] = .{
1298 .index = @enumToInt(Feature.sha2),1298 .index = @enumToInt(Feature.sha2),
...@@ -1308,49 +1308,49 @@ pub const all_features = blk: {...@@ -1308,49 +1308,49 @@ pub const all_features = blk: {
1308 .name = @tagName(Feature.slow_fp_brcc),1308 .name = @tagName(Feature.slow_fp_brcc),
1309 .llvm_name = "slow-fp-brcc",1309 .llvm_name = "slow-fp-brcc",
1310 .description = "FP compare + branch is slow",1310 .description = "FP compare + branch is slow",
1311 .dependencies = 0,1311 .dependencies = featureSet(&[_]Feature{}),
1312 };1312 };
1313 result[@enumToInt(Feature.slow_load_D_subreg)] = .{1313 result[@enumToInt(Feature.slow_load_D_subreg)] = .{
1314 .index = @enumToInt(Feature.slow_load_D_subreg),1314 .index = @enumToInt(Feature.slow_load_D_subreg),
1315 .name = @tagName(Feature.slow_load_D_subreg),1315 .name = @tagName(Feature.slow_load_D_subreg),
1316 .llvm_name = "slow-load-D-subreg",1316 .llvm_name = "slow-load-D-subreg",
1317 .description = "Loading into D subregs is slow",1317 .description = "Loading into D subregs is slow",
1318 .dependencies = 0,1318 .dependencies = featureSet(&[_]Feature{}),
1319 };1319 };
1320 result[@enumToInt(Feature.slow_odd_reg)] = .{1320 result[@enumToInt(Feature.slow_odd_reg)] = .{
1321 .index = @enumToInt(Feature.slow_odd_reg),1321 .index = @enumToInt(Feature.slow_odd_reg),
1322 .name = @tagName(Feature.slow_odd_reg),1322 .name = @tagName(Feature.slow_odd_reg),
1323 .llvm_name = "slow-odd-reg",1323 .llvm_name = "slow-odd-reg",
1324 .description = "VLDM/VSTM starting with an odd register is slow",1324 .description = "VLDM/VSTM starting with an odd register is slow",
1325 .dependencies = 0,1325 .dependencies = featureSet(&[_]Feature{}),
1326 };1326 };
1327 result[@enumToInt(Feature.slow_vdup32)] = .{1327 result[@enumToInt(Feature.slow_vdup32)] = .{
1328 .index = @enumToInt(Feature.slow_vdup32),1328 .index = @enumToInt(Feature.slow_vdup32),
1329 .name = @tagName(Feature.slow_vdup32),1329 .name = @tagName(Feature.slow_vdup32),
1330 .llvm_name = "slow-vdup32",1330 .llvm_name = "slow-vdup32",
1331 .description = "Has slow VDUP32 - prefer VMOV",1331 .description = "Has slow VDUP32 - prefer VMOV",
1332 .dependencies = 0,1332 .dependencies = featureSet(&[_]Feature{}),
1333 };1333 };
1334 result[@enumToInt(Feature.slow_vgetlni32)] = .{1334 result[@enumToInt(Feature.slow_vgetlni32)] = .{
1335 .index = @enumToInt(Feature.slow_vgetlni32),1335 .index = @enumToInt(Feature.slow_vgetlni32),
1336 .name = @tagName(Feature.slow_vgetlni32),1336 .name = @tagName(Feature.slow_vgetlni32),
1337 .llvm_name = "slow-vgetlni32",1337 .llvm_name = "slow-vgetlni32",
1338 .description = "Has slow VGETLNi32 - prefer VMOV",1338 .description = "Has slow VGETLNi32 - prefer VMOV",
1339 .dependencies = 0,1339 .dependencies = featureSet(&[_]Feature{}),
1340 };1340 };
1341 result[@enumToInt(Feature.slowfpvmlx)] = .{1341 result[@enumToInt(Feature.slowfpvmlx)] = .{
1342 .index = @enumToInt(Feature.slowfpvmlx),1342 .index = @enumToInt(Feature.slowfpvmlx),
1343 .name = @tagName(Feature.slowfpvmlx),1343 .name = @tagName(Feature.slowfpvmlx),
1344 .llvm_name = "slowfpvmlx",1344 .llvm_name = "slowfpvmlx",
1345 .description = "Disable VFP / NEON MAC instructions",1345 .description = "Disable VFP / NEON MAC instructions",
1346 .dependencies = 0,1346 .dependencies = featureSet(&[_]Feature{}),
1347 };1347 };
1348 result[@enumToInt(Feature.soft_float)] = .{1348 result[@enumToInt(Feature.soft_float)] = .{
1349 .index = @enumToInt(Feature.soft_float),1349 .index = @enumToInt(Feature.soft_float),
1350 .name = @tagName(Feature.soft_float),1350 .name = @tagName(Feature.soft_float),
1351 .llvm_name = "soft-float",1351 .llvm_name = "soft-float",
1352 .description = "Use software floating point features.",1352 .description = "Use software floating point features.",
1353 .dependencies = 0,1353 .dependencies = featureSet(&[_]Feature{}),
1354 };1354 };
1355 result[@enumToInt(Feature.splat_vfp_neon)] = .{1355 result[@enumToInt(Feature.splat_vfp_neon)] = .{
1356 .index = @enumToInt(Feature.splat_vfp_neon),1356 .index = @enumToInt(Feature.splat_vfp_neon),
...@@ -1366,56 +1366,56 @@ pub const all_features = blk: {...@@ -1366,56 +1366,56 @@ pub const all_features = blk: {
1366 .name = @tagName(Feature.strict_align),1366 .name = @tagName(Feature.strict_align),
1367 .llvm_name = "strict-align",1367 .llvm_name = "strict-align",
1368 .description = "Disallow all unaligned memory access",1368 .description = "Disallow all unaligned memory access",
1369 .dependencies = 0,1369 .dependencies = featureSet(&[_]Feature{}),
1370 };1370 };
1371 result[@enumToInt(Feature.swift)] = .{1371 result[@enumToInt(Feature.swift)] = .{
1372 .index = @enumToInt(Feature.swift),1372 .index = @enumToInt(Feature.swift),
1373 .name = @tagName(Feature.swift),1373 .name = @tagName(Feature.swift),
1374 .llvm_name = "swift",1374 .llvm_name = "swift",
1375 .description = "Swift ARM processors",1375 .description = "Swift ARM processors",
1376 .dependencies = 0,1376 .dependencies = featureSet(&[_]Feature{}),
1377 };1377 };
1378 result[@enumToInt(Feature.thumb_mode)] = .{1378 result[@enumToInt(Feature.thumb_mode)] = .{
1379 .index = @enumToInt(Feature.thumb_mode),1379 .index = @enumToInt(Feature.thumb_mode),
1380 .name = @tagName(Feature.thumb_mode),1380 .name = @tagName(Feature.thumb_mode),
1381 .llvm_name = "thumb-mode",1381 .llvm_name = "thumb-mode",
1382 .description = "Thumb mode",1382 .description = "Thumb mode",
1383 .dependencies = 0,1383 .dependencies = featureSet(&[_]Feature{}),
1384 };1384 };
1385 result[@enumToInt(Feature.thumb2)] = .{1385 result[@enumToInt(Feature.thumb2)] = .{
1386 .index = @enumToInt(Feature.thumb2),1386 .index = @enumToInt(Feature.thumb2),
1387 .name = @tagName(Feature.thumb2),1387 .name = @tagName(Feature.thumb2),
1388 .llvm_name = "thumb2",1388 .llvm_name = "thumb2",
1389 .description = "Enable Thumb2 instructions",1389 .description = "Enable Thumb2 instructions",
1390 .dependencies = 0,1390 .dependencies = featureSet(&[_]Feature{}),
1391 };1391 };
1392 result[@enumToInt(Feature.trustzone)] = .{1392 result[@enumToInt(Feature.trustzone)] = .{
1393 .index = @enumToInt(Feature.trustzone),1393 .index = @enumToInt(Feature.trustzone),
1394 .name = @tagName(Feature.trustzone),1394 .name = @tagName(Feature.trustzone),
1395 .llvm_name = "trustzone",1395 .llvm_name = "trustzone",
1396 .description = "Enable support for TrustZone security extensions",1396 .description = "Enable support for TrustZone security extensions",
1397 .dependencies = 0,1397 .dependencies = featureSet(&[_]Feature{}),
1398 };1398 };
1399 result[@enumToInt(Feature.use_aa)] = .{1399 result[@enumToInt(Feature.use_aa)] = .{
1400 .index = @enumToInt(Feature.use_aa),1400 .index = @enumToInt(Feature.use_aa),
1401 .name = @tagName(Feature.use_aa),1401 .name = @tagName(Feature.use_aa),
1402 .llvm_name = "use-aa",1402 .llvm_name = "use-aa",
1403 .description = "Use alias analysis during codegen",1403 .description = "Use alias analysis during codegen",
1404 .dependencies = 0,1404 .dependencies = featureSet(&[_]Feature{}),
1405 };1405 };
1406 result[@enumToInt(Feature.use_misched)] = .{1406 result[@enumToInt(Feature.use_misched)] = .{
1407 .index = @enumToInt(Feature.use_misched),1407 .index = @enumToInt(Feature.use_misched),
1408 .name = @tagName(Feature.use_misched),1408 .name = @tagName(Feature.use_misched),
1409 .llvm_name = "use-misched",1409 .llvm_name = "use-misched",
1410 .description = "Use the MachineScheduler",1410 .description = "Use the MachineScheduler",
1411 .dependencies = 0,1411 .dependencies = featureSet(&[_]Feature{}),
1412 };1412 };
1413 result[@enumToInt(Feature.v4t)] = .{1413 result[@enumToInt(Feature.v4t)] = .{
1414 .index = @enumToInt(Feature.v4t),1414 .index = @enumToInt(Feature.v4t),
1415 .name = @tagName(Feature.v4t),1415 .name = @tagName(Feature.v4t),
1416 .llvm_name = "v4t",1416 .llvm_name = "v4t",
1417 .description = "Support ARM v4T instructions",1417 .description = "Support ARM v4T instructions",
1418 .dependencies = 0,1418 .dependencies = featureSet(&[_]Feature{}),
1419 };1419 };
1420 result[@enumToInt(Feature.v5t)] = .{1420 result[@enumToInt(Feature.v5t)] = .{
1421 .index = @enumToInt(Feature.v5t),1421 .index = @enumToInt(Feature.v5t),
...@@ -1489,7 +1489,7 @@ pub const all_features = blk: {...@@ -1489,7 +1489,7 @@ pub const all_features = blk: {
1489 .name = @tagName(Feature.v7clrex),1489 .name = @tagName(Feature.v7clrex),
1490 .llvm_name = "v7clrex",1490 .llvm_name = "v7clrex",
1491 .description = "Has v7 clrex instruction",1491 .description = "Has v7 clrex instruction",
1492 .dependencies = 0,1492 .dependencies = featureSet(&[_]Feature{}),
1493 };1493 };
1494 result[@enumToInt(Feature.v8)] = .{1494 result[@enumToInt(Feature.v8)] = .{
1495 .index = @enumToInt(Feature.v8),1495 .index = @enumToInt(Feature.v8),
...@@ -1714,28 +1714,28 @@ pub const all_features = blk: {...@@ -1714,28 +1714,28 @@ pub const all_features = blk: {
1714 .name = @tagName(Feature.vldn_align),1714 .name = @tagName(Feature.vldn_align),
1715 .llvm_name = "vldn-align",1715 .llvm_name = "vldn-align",
1716 .description = "Check for VLDn unaligned access",1716 .description = "Check for VLDn unaligned access",
1717 .dependencies = 0,1717 .dependencies = featureSet(&[_]Feature{}),
1718 };1718 };
1719 result[@enumToInt(Feature.vmlx_forwarding)] = .{1719 result[@enumToInt(Feature.vmlx_forwarding)] = .{
1720 .index = @enumToInt(Feature.vmlx_forwarding),1720 .index = @enumToInt(Feature.vmlx_forwarding),
1721 .name = @tagName(Feature.vmlx_forwarding),1721 .name = @tagName(Feature.vmlx_forwarding),
1722 .llvm_name = "vmlx-forwarding",1722 .llvm_name = "vmlx-forwarding",
1723 .description = "Has multiplier accumulator forwarding",1723 .description = "Has multiplier accumulator forwarding",
1724 .dependencies = 0,1724 .dependencies = featureSet(&[_]Feature{}),
1725 };1725 };
1726 result[@enumToInt(Feature.vmlx_hazards)] = .{1726 result[@enumToInt(Feature.vmlx_hazards)] = .{
1727 .index = @enumToInt(Feature.vmlx_hazards),1727 .index = @enumToInt(Feature.vmlx_hazards),
1728 .name = @tagName(Feature.vmlx_hazards),1728 .name = @tagName(Feature.vmlx_hazards),
1729 .llvm_name = "vmlx-hazards",1729 .llvm_name = "vmlx-hazards",
1730 .description = "Has VMLx hazards",1730 .description = "Has VMLx hazards",
1731 .dependencies = 0,1731 .dependencies = featureSet(&[_]Feature{}),
1732 };1732 };
1733 result[@enumToInt(Feature.wide_stride_vfp)] = .{1733 result[@enumToInt(Feature.wide_stride_vfp)] = .{
1734 .index = @enumToInt(Feature.wide_stride_vfp),1734 .index = @enumToInt(Feature.wide_stride_vfp),
1735 .name = @tagName(Feature.wide_stride_vfp),1735 .name = @tagName(Feature.wide_stride_vfp),
1736 .llvm_name = "wide-stride-vfp",1736 .llvm_name = "wide-stride-vfp",
1737 .description = "Use a wide stride when allocating VFP registers",1737 .description = "Use a wide stride when allocating VFP registers",
1738 .dependencies = 0,1738 .dependencies = featureSet(&[_]Feature{}),
1739 };1739 };
1740 result[@enumToInt(Feature.xscale)] = .{1740 result[@enumToInt(Feature.xscale)] = .{
1741 .index = @enumToInt(Feature.xscale),1741 .index = @enumToInt(Feature.xscale),
...@@ -1751,7 +1751,7 @@ pub const all_features = blk: {...@@ -1751,7 +1751,7 @@ pub const all_features = blk: {
1751 .name = @tagName(Feature.zcz),1751 .name = @tagName(Feature.zcz),
1752 .llvm_name = "zcz",1752 .llvm_name = "zcz",
1753 .description = "Has zero-cycle zeroing instructions",1753 .description = "Has zero-cycle zeroing instructions",
1754 .dependencies = 0,1754 .dependencies = featureSet(&[_]Feature{}),
1755 };1755 };
1756 break :blk result;1756 break :blk result;
1757};1757};
...@@ -2450,7 +2450,7 @@ pub const cpu = struct {...@@ -2450,7 +2450,7 @@ pub const cpu = struct {
2450 pub const generic = Cpu{2450 pub const generic = Cpu{
2451 .name = "generic",2451 .name = "generic",
2452 .llvm_name = "generic",2452 .llvm_name = "generic",
2453 .features = 0,2453 .features = featureSet(&[_]Feature{}),
2454 };2454 };
2455 pub const iwmmxt = Cpu{2455 pub const iwmmxt = Cpu{
2456 .name = "iwmmxt",2456 .name = "iwmmxt",
lib/std/target/avr.zig+34-30
...@@ -15,7 +15,7 @@ pub const Feature = enum {...@@ -15,7 +15,7 @@ pub const Feature = enum {
15 avr51,15 avr51,
16 avr6,16 avr6,
17 avrtiny,17 avrtiny,
18 break,18 @"break",
19 des,19 des,
20 eijmpcall,20 eijmpcall,
21 elpm,21 elpm,
...@@ -41,21 +41,21 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -41,21 +41,21 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);44 std.debug.assert(len <= Cpu.Feature.Set.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),47 .index = @enumToInt(Feature.addsubiw),
48 .name = @tagName(Feature.addsubiw),48 .name = @tagName(Feature.addsubiw),
49 .llvm_name = "addsubiw",49 .llvm_name = "addsubiw",
50 .description = "Enable 16-bit register-immediate addition and subtraction instructions",50 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
51 .dependencies = 0,51 .dependencies = featureSet(&[_]Feature{}),
52 };52 };
53 result[@enumToInt(Feature.avr0)] = .{53 result[@enumToInt(Feature.avr0)] = .{
54 .index = @enumToInt(Feature.avr0),54 .index = @enumToInt(Feature.avr0),
55 .name = @tagName(Feature.avr0),55 .name = @tagName(Feature.avr0),
56 .llvm_name = "avr0",56 .llvm_name = "avr0",
57 .description = "The device is a part of the avr0 family",57 .description = "The device is a part of the avr0 family",
58 .dependencies = 0,58 .dependencies = featureSet(&[_]Feature{}),
59 };59 };
60 result[@enumToInt(Feature.avr1)] = .{60 result[@enumToInt(Feature.avr1)] = .{
61 .index = @enumToInt(Feature.avr1),61 .index = @enumToInt(Feature.avr1),
...@@ -86,7 +86,7 @@ pub const all_features = blk: {...@@ -86,7 +86,7 @@ pub const all_features = blk: {
86 .description = "The device is a part of the avr25 family",86 .description = "The device is a part of the avr25 family",
87 .dependencies = featureSet(&[_]Feature{87 .dependencies = featureSet(&[_]Feature{
88 .avr2,88 .avr2,
89 .break,89 .@"break",
90 .lpmx,90 .lpmx,
91 .movw,91 .movw,
92 .spm,92 .spm,
...@@ -119,7 +119,7 @@ pub const all_features = blk: {...@@ -119,7 +119,7 @@ pub const all_features = blk: {
119 .description = "The device is a part of the avr35 family",119 .description = "The device is a part of the avr35 family",
120 .dependencies = featureSet(&[_]Feature{120 .dependencies = featureSet(&[_]Feature{
121 .avr3,121 .avr3,
122 .break,122 .@"break",
123 .lpmx,123 .lpmx,
124 .movw,124 .movw,
125 .spm,125 .spm,
...@@ -132,7 +132,7 @@ pub const all_features = blk: {...@@ -132,7 +132,7 @@ pub const all_features = blk: {
132 .description = "The device is a part of the avr4 family",132 .description = "The device is a part of the avr4 family",
133 .dependencies = featureSet(&[_]Feature{133 .dependencies = featureSet(&[_]Feature{
134 .avr2,134 .avr2,
135 .break,135 .@"break",
136 .lpmx,136 .lpmx,
137 .movw,137 .movw,
138 .mul,138 .mul,
...@@ -146,7 +146,7 @@ pub const all_features = blk: {...@@ -146,7 +146,7 @@ pub const all_features = blk: {
146 .description = "The device is a part of the avr5 family",146 .description = "The device is a part of the avr5 family",
147 .dependencies = featureSet(&[_]Feature{147 .dependencies = featureSet(&[_]Feature{
148 .avr3,148 .avr3,
149 .break,149 .@"break",
150 .lpmx,150 .lpmx,
151 .movw,151 .movw,
152 .mul,152 .mul,
...@@ -180,101 +180,101 @@ pub const all_features = blk: {...@@ -180,101 +180,101 @@ pub const all_features = blk: {
180 .description = "The device is a part of the avrtiny family",180 .description = "The device is a part of the avrtiny family",
181 .dependencies = featureSet(&[_]Feature{181 .dependencies = featureSet(&[_]Feature{
182 .avr0,182 .avr0,
183 .break,183 .@"break",
184 .sram,184 .sram,
185 .tinyencoding,185 .tinyencoding,
186 }),186 }),
187 };187 };
188 result[@enumToInt(Feature.break)] = .{188 result[@enumToInt(Feature.@"break")] = .{
189 .index = @enumToInt(Feature.break),189 .index = @enumToInt(Feature.@"break"),
190 .name = @tagName(Feature.break),190 .name = @tagName(Feature.@"break"),
191 .llvm_name = "break",191 .llvm_name = "break",
192 .description = "The device supports the `BREAK` debugging instruction",192 .description = "The device supports the `BREAK` debugging instruction",
193 .dependencies = 0,193 .dependencies = featureSet(&[_]Feature{}),
194 };194 };
195 result[@enumToInt(Feature.des)] = .{195 result[@enumToInt(Feature.des)] = .{
196 .index = @enumToInt(Feature.des),196 .index = @enumToInt(Feature.des),
197 .name = @tagName(Feature.des),197 .name = @tagName(Feature.des),
198 .llvm_name = "des",198 .llvm_name = "des",
199 .description = "The device supports the `DES k` encryption instruction",199 .description = "The device supports the `DES k` encryption instruction",
200 .dependencies = 0,200 .dependencies = featureSet(&[_]Feature{}),
201 };201 };
202 result[@enumToInt(Feature.eijmpcall)] = .{202 result[@enumToInt(Feature.eijmpcall)] = .{
203 .index = @enumToInt(Feature.eijmpcall),203 .index = @enumToInt(Feature.eijmpcall),
204 .name = @tagName(Feature.eijmpcall),204 .name = @tagName(Feature.eijmpcall),
205 .llvm_name = "eijmpcall",205 .llvm_name = "eijmpcall",
206 .description = "The device supports the `EIJMP`/`EICALL` instructions",206 .description = "The device supports the `EIJMP`/`EICALL` instructions",
207 .dependencies = 0,207 .dependencies = featureSet(&[_]Feature{}),
208 };208 };
209 result[@enumToInt(Feature.elpm)] = .{209 result[@enumToInt(Feature.elpm)] = .{
210 .index = @enumToInt(Feature.elpm),210 .index = @enumToInt(Feature.elpm),
211 .name = @tagName(Feature.elpm),211 .name = @tagName(Feature.elpm),
212 .llvm_name = "elpm",212 .llvm_name = "elpm",
213 .description = "The device supports the ELPM instruction",213 .description = "The device supports the ELPM instruction",
214 .dependencies = 0,214 .dependencies = featureSet(&[_]Feature{}),
215 };215 };
216 result[@enumToInt(Feature.elpmx)] = .{216 result[@enumToInt(Feature.elpmx)] = .{
217 .index = @enumToInt(Feature.elpmx),217 .index = @enumToInt(Feature.elpmx),
218 .name = @tagName(Feature.elpmx),218 .name = @tagName(Feature.elpmx),
219 .llvm_name = "elpmx",219 .llvm_name = "elpmx",
220 .description = "The device supports the `ELPM Rd, Z[+]` instructions",220 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
221 .dependencies = 0,221 .dependencies = featureSet(&[_]Feature{}),
222 };222 };
223 result[@enumToInt(Feature.ijmpcall)] = .{223 result[@enumToInt(Feature.ijmpcall)] = .{
224 .index = @enumToInt(Feature.ijmpcall),224 .index = @enumToInt(Feature.ijmpcall),
225 .name = @tagName(Feature.ijmpcall),225 .name = @tagName(Feature.ijmpcall),
226 .llvm_name = "ijmpcall",226 .llvm_name = "ijmpcall",
227 .description = "The device supports `IJMP`/`ICALL`instructions",227 .description = "The device supports `IJMP`/`ICALL`instructions",
228 .dependencies = 0,228 .dependencies = featureSet(&[_]Feature{}),
229 };229 };
230 result[@enumToInt(Feature.jmpcall)] = .{230 result[@enumToInt(Feature.jmpcall)] = .{
231 .index = @enumToInt(Feature.jmpcall),231 .index = @enumToInt(Feature.jmpcall),
232 .name = @tagName(Feature.jmpcall),232 .name = @tagName(Feature.jmpcall),
233 .llvm_name = "jmpcall",233 .llvm_name = "jmpcall",
234 .description = "The device supports the `JMP` and `CALL` instructions",234 .description = "The device supports the `JMP` and `CALL` instructions",
235 .dependencies = 0,235 .dependencies = featureSet(&[_]Feature{}),
236 };236 };
237 result[@enumToInt(Feature.lpm)] = .{237 result[@enumToInt(Feature.lpm)] = .{
238 .index = @enumToInt(Feature.lpm),238 .index = @enumToInt(Feature.lpm),
239 .name = @tagName(Feature.lpm),239 .name = @tagName(Feature.lpm),
240 .llvm_name = "lpm",240 .llvm_name = "lpm",
241 .description = "The device supports the `LPM` instruction",241 .description = "The device supports the `LPM` instruction",
242 .dependencies = 0,242 .dependencies = featureSet(&[_]Feature{}),
243 };243 };
244 result[@enumToInt(Feature.lpmx)] = .{244 result[@enumToInt(Feature.lpmx)] = .{
245 .index = @enumToInt(Feature.lpmx),245 .index = @enumToInt(Feature.lpmx),
246 .name = @tagName(Feature.lpmx),246 .name = @tagName(Feature.lpmx),
247 .llvm_name = "lpmx",247 .llvm_name = "lpmx",
248 .description = "The device supports the `LPM Rd, Z[+]` instruction",248 .description = "The device supports the `LPM Rd, Z[+]` instruction",
249 .dependencies = 0,249 .dependencies = featureSet(&[_]Feature{}),
250 };250 };
251 result[@enumToInt(Feature.movw)] = .{251 result[@enumToInt(Feature.movw)] = .{
252 .index = @enumToInt(Feature.movw),252 .index = @enumToInt(Feature.movw),
253 .name = @tagName(Feature.movw),253 .name = @tagName(Feature.movw),
254 .llvm_name = "movw",254 .llvm_name = "movw",
255 .description = "The device supports the 16-bit MOVW instruction",255 .description = "The device supports the 16-bit MOVW instruction",
256 .dependencies = 0,256 .dependencies = featureSet(&[_]Feature{}),
257 };257 };
258 result[@enumToInt(Feature.mul)] = .{258 result[@enumToInt(Feature.mul)] = .{
259 .index = @enumToInt(Feature.mul),259 .index = @enumToInt(Feature.mul),
260 .name = @tagName(Feature.mul),260 .name = @tagName(Feature.mul),
261 .llvm_name = "mul",261 .llvm_name = "mul",
262 .description = "The device supports the multiplication instructions",262 .description = "The device supports the multiplication instructions",
263 .dependencies = 0,263 .dependencies = featureSet(&[_]Feature{}),
264 };264 };
265 result[@enumToInt(Feature.rmw)] = .{265 result[@enumToInt(Feature.rmw)] = .{
266 .index = @enumToInt(Feature.rmw),266 .index = @enumToInt(Feature.rmw),
267 .name = @tagName(Feature.rmw),267 .name = @tagName(Feature.rmw),
268 .llvm_name = "rmw",268 .llvm_name = "rmw",
269 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",269 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
270 .dependencies = 0,270 .dependencies = featureSet(&[_]Feature{}),
271 };271 };
272 result[@enumToInt(Feature.smallstack)] = .{272 result[@enumToInt(Feature.smallstack)] = .{
273 .index = @enumToInt(Feature.smallstack),273 .index = @enumToInt(Feature.smallstack),
274 .name = @tagName(Feature.smallstack),274 .name = @tagName(Feature.smallstack),
275 .llvm_name = "smallstack",275 .llvm_name = "smallstack",
276 .description = "The device has an 8-bit stack pointer",276 .description = "The device has an 8-bit stack pointer",
277 .dependencies = 0,277 .dependencies = featureSet(&[_]Feature{}),
278 };278 };
279 result[@enumToInt(Feature.special)] = .{279 result[@enumToInt(Feature.special)] = .{
280 .index = @enumToInt(Feature.special),280 .index = @enumToInt(Feature.special),
...@@ -283,7 +283,7 @@ pub const all_features = blk: {...@@ -283,7 +283,7 @@ pub const all_features = blk: {
283 .description = "Enable use of the entire instruction set - used for debugging",283 .description = "Enable use of the entire instruction set - used for debugging",
284 .dependencies = featureSet(&[_]Feature{284 .dependencies = featureSet(&[_]Feature{
285 .addsubiw,285 .addsubiw,
286 .break,286 .@"break",
287 .des,287 .des,
288 .eijmpcall,288 .eijmpcall,
289 .elpm,289 .elpm,
...@@ -305,28 +305,28 @@ pub const all_features = blk: {...@@ -305,28 +305,28 @@ pub const all_features = blk: {
305 .name = @tagName(Feature.spm),305 .name = @tagName(Feature.spm),
306 .llvm_name = "spm",306 .llvm_name = "spm",
307 .description = "The device supports the `SPM` instruction",307 .description = "The device supports the `SPM` instruction",
308 .dependencies = 0,308 .dependencies = featureSet(&[_]Feature{}),
309 };309 };
310 result[@enumToInt(Feature.spmx)] = .{310 result[@enumToInt(Feature.spmx)] = .{
311 .index = @enumToInt(Feature.spmx),311 .index = @enumToInt(Feature.spmx),
312 .name = @tagName(Feature.spmx),312 .name = @tagName(Feature.spmx),
313 .llvm_name = "spmx",313 .llvm_name = "spmx",
314 .description = "The device supports the `SPM Z+` instruction",314 .description = "The device supports the `SPM Z+` instruction",
315 .dependencies = 0,315 .dependencies = featureSet(&[_]Feature{}),
316 };316 };
317 result[@enumToInt(Feature.sram)] = .{317 result[@enumToInt(Feature.sram)] = .{
318 .index = @enumToInt(Feature.sram),318 .index = @enumToInt(Feature.sram),
319 .name = @tagName(Feature.sram),319 .name = @tagName(Feature.sram),
320 .llvm_name = "sram",320 .llvm_name = "sram",
321 .description = "The device has random access memory",321 .description = "The device has random access memory",
322 .dependencies = 0,322 .dependencies = featureSet(&[_]Feature{}),
323 };323 };
324 result[@enumToInt(Feature.tinyencoding)] = .{324 result[@enumToInt(Feature.tinyencoding)] = .{
325 .index = @enumToInt(Feature.tinyencoding),325 .index = @enumToInt(Feature.tinyencoding),
326 .name = @tagName(Feature.tinyencoding),326 .name = @tagName(Feature.tinyencoding),
327 .llvm_name = "tinyencoding",327 .llvm_name = "tinyencoding",
328 .description = "The device has Tiny core specific instruction encodings",328 .description = "The device has Tiny core specific instruction encodings",
329 .dependencies = 0,329 .dependencies = featureSet(&[_]Feature{}),
330 };330 };
331 result[@enumToInt(Feature.xmega)] = .{331 result[@enumToInt(Feature.xmega)] = .{
332 .index = @enumToInt(Feature.xmega),332 .index = @enumToInt(Feature.xmega),
...@@ -2439,3 +2439,7 @@ pub const all_cpus = &[_]*const Cpu{...@@ -2439,3 +2439,7 @@ pub const all_cpus = &[_]*const Cpu{
2439 &cpu.avrxmega7,2439 &cpu.avrxmega7,
2440 &cpu.m3000,2440 &cpu.m3000,
2441};2441};
2442
2443pub const baseline_features = featureSet(&[_]Feature{
2444 .avr0,
2445});
lib/std/target/bpf.zig+9-9
...@@ -11,28 +11,28 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -11,28 +11,28 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);14 std.debug.assert(len <= Cpu.Feature.Set.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),17 .index = @enumToInt(Feature.alu32),
18 .name = @tagName(Feature.alu32),18 .name = @tagName(Feature.alu32),
19 .llvm_name = "alu32",19 .llvm_name = "alu32",
20 .description = "Enable ALU32 instructions",20 .description = "Enable ALU32 instructions",
21 .dependencies = 0,21 .dependencies = featureSet(&[_]Feature{}),
22 };22 };
23 result[@enumToInt(Feature.dummy)] = .{23 result[@enumToInt(Feature.dummy)] = .{
24 .index = @enumToInt(Feature.dummy),24 .index = @enumToInt(Feature.dummy),
25 .name = @tagName(Feature.dummy),25 .name = @tagName(Feature.dummy),
26 .llvm_name = "dummy",26 .llvm_name = "dummy",
27 .description = "unused feature",27 .description = "unused feature",
28 .dependencies = 0,28 .dependencies = featureSet(&[_]Feature{}),
29 };29 };
30 result[@enumToInt(Feature.dwarfris)] = .{30 result[@enumToInt(Feature.dwarfris)] = .{
31 .index = @enumToInt(Feature.dwarfris),31 .index = @enumToInt(Feature.dwarfris),
32 .name = @tagName(Feature.dwarfris),32 .name = @tagName(Feature.dwarfris),
33 .llvm_name = "dwarfris",33 .llvm_name = "dwarfris",
34 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",34 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
35 .dependencies = 0,35 .dependencies = featureSet(&[_]Feature{}),
36 };36 };
37 break :blk result;37 break :blk result;
38};38};
...@@ -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 = 0,44 .features = featureSet(&[_]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 = 0,49 .features = featureSet(&[_]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 = 0,54 .features = featureSet(&[_]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 = 0,59 .features = featureSet(&[_]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 = 0,64 .features = featureSet(&[_]Feature{}),
65 };65 };
66};66};
6767
lib/std/target/hexagon.zig+17-17
...@@ -32,21 +32,21 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -32,21 +32,21 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);35 std.debug.assert(len <= Cpu.Feature.Set.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),38 .index = @enumToInt(Feature.duplex),
39 .name = @tagName(Feature.duplex),39 .name = @tagName(Feature.duplex),
40 .llvm_name = "duplex",40 .llvm_name = "duplex",
41 .description = "Enable generation of duplex instruction",41 .description = "Enable generation of duplex instruction",
42 .dependencies = 0,42 .dependencies = featureSet(&[_]Feature{}),
43 };43 };
44 result[@enumToInt(Feature.hvx)] = .{44 result[@enumToInt(Feature.hvx)] = .{
45 .index = @enumToInt(Feature.hvx),45 .index = @enumToInt(Feature.hvx),
46 .name = @tagName(Feature.hvx),46 .name = @tagName(Feature.hvx),
47 .llvm_name = "hvx",47 .llvm_name = "hvx",
48 .description = "Hexagon HVX instructions",48 .description = "Hexagon HVX instructions",
49 .dependencies = 0,49 .dependencies = featureSet(&[_]Feature{}),
50 };50 };
51 result[@enumToInt(Feature.hvx_length128b)] = .{51 result[@enumToInt(Feature.hvx_length128b)] = .{
52 .index = @enumToInt(Feature.hvx_length128b),52 .index = @enumToInt(Feature.hvx_length128b),
...@@ -114,28 +114,28 @@ pub const all_features = blk: {...@@ -114,28 +114,28 @@ pub const all_features = blk: {
114 .name = @tagName(Feature.long_calls),114 .name = @tagName(Feature.long_calls),
115 .llvm_name = "long-calls",115 .llvm_name = "long-calls",
116 .description = "Use constant-extended calls",116 .description = "Use constant-extended calls",
117 .dependencies = 0,117 .dependencies = featureSet(&[_]Feature{}),
118 };118 };
119 result[@enumToInt(Feature.mem_noshuf)] = .{119 result[@enumToInt(Feature.mem_noshuf)] = .{
120 .index = @enumToInt(Feature.mem_noshuf),120 .index = @enumToInt(Feature.mem_noshuf),
121 .name = @tagName(Feature.mem_noshuf),121 .name = @tagName(Feature.mem_noshuf),
122 .llvm_name = "mem_noshuf",122 .llvm_name = "mem_noshuf",
123 .description = "Supports mem_noshuf feature",123 .description = "Supports mem_noshuf feature",
124 .dependencies = 0,124 .dependencies = featureSet(&[_]Feature{}),
125 };125 };
126 result[@enumToInt(Feature.memops)] = .{126 result[@enumToInt(Feature.memops)] = .{
127 .index = @enumToInt(Feature.memops),127 .index = @enumToInt(Feature.memops),
128 .name = @tagName(Feature.memops),128 .name = @tagName(Feature.memops),
129 .llvm_name = "memops",129 .llvm_name = "memops",
130 .description = "Use memop instructions",130 .description = "Use memop instructions",
131 .dependencies = 0,131 .dependencies = featureSet(&[_]Feature{}),
132 };132 };
133 result[@enumToInt(Feature.noreturn_stack_elim)] = .{133 result[@enumToInt(Feature.noreturn_stack_elim)] = .{
134 .index = @enumToInt(Feature.noreturn_stack_elim),134 .index = @enumToInt(Feature.noreturn_stack_elim),
135 .name = @tagName(Feature.noreturn_stack_elim),135 .name = @tagName(Feature.noreturn_stack_elim),
136 .llvm_name = "noreturn-stack-elim",136 .llvm_name = "noreturn-stack-elim",
137 .description = "Eliminate stack allocation in a noreturn function when possible",137 .description = "Eliminate stack allocation in a noreturn function when possible",
138 .dependencies = 0,138 .dependencies = featureSet(&[_]Feature{}),
139 };139 };
140 result[@enumToInt(Feature.nvj)] = .{140 result[@enumToInt(Feature.nvj)] = .{
141 .index = @enumToInt(Feature.nvj),141 .index = @enumToInt(Feature.nvj),
...@@ -160,70 +160,70 @@ pub const all_features = blk: {...@@ -160,70 +160,70 @@ pub const all_features = blk: {
160 .name = @tagName(Feature.packets),160 .name = @tagName(Feature.packets),
161 .llvm_name = "packets",161 .llvm_name = "packets",
162 .description = "Support for instruction packets",162 .description = "Support for instruction packets",
163 .dependencies = 0,163 .dependencies = featureSet(&[_]Feature{}),
164 };164 };
165 result[@enumToInt(Feature.reserved_r19)] = .{165 result[@enumToInt(Feature.reserved_r19)] = .{
166 .index = @enumToInt(Feature.reserved_r19),166 .index = @enumToInt(Feature.reserved_r19),
167 .name = @tagName(Feature.reserved_r19),167 .name = @tagName(Feature.reserved_r19),
168 .llvm_name = "reserved-r19",168 .llvm_name = "reserved-r19",
169 .description = "Reserve register R19",169 .description = "Reserve register R19",
170 .dependencies = 0,170 .dependencies = featureSet(&[_]Feature{}),
171 };171 };
172 result[@enumToInt(Feature.small_data)] = .{172 result[@enumToInt(Feature.small_data)] = .{
173 .index = @enumToInt(Feature.small_data),173 .index = @enumToInt(Feature.small_data),
174 .name = @tagName(Feature.small_data),174 .name = @tagName(Feature.small_data),
175 .llvm_name = "small-data",175 .llvm_name = "small-data",
176 .description = "Allow GP-relative addressing of global variables",176 .description = "Allow GP-relative addressing of global variables",
177 .dependencies = 0,177 .dependencies = featureSet(&[_]Feature{}),
178 };178 };
179 result[@enumToInt(Feature.v5)] = .{179 result[@enumToInt(Feature.v5)] = .{
180 .index = @enumToInt(Feature.v5),180 .index = @enumToInt(Feature.v5),
181 .name = @tagName(Feature.v5),181 .name = @tagName(Feature.v5),
182 .llvm_name = "v5",182 .llvm_name = "v5",
183 .description = "Enable Hexagon V5 architecture",183 .description = "Enable Hexagon V5 architecture",
184 .dependencies = 0,184 .dependencies = featureSet(&[_]Feature{}),
185 };185 };
186 result[@enumToInt(Feature.v55)] = .{186 result[@enumToInt(Feature.v55)] = .{
187 .index = @enumToInt(Feature.v55),187 .index = @enumToInt(Feature.v55),
188 .name = @tagName(Feature.v55),188 .name = @tagName(Feature.v55),
189 .llvm_name = "v55",189 .llvm_name = "v55",
190 .description = "Enable Hexagon V55 architecture",190 .description = "Enable Hexagon V55 architecture",
191 .dependencies = 0,191 .dependencies = featureSet(&[_]Feature{}),
192 };192 };
193 result[@enumToInt(Feature.v60)] = .{193 result[@enumToInt(Feature.v60)] = .{
194 .index = @enumToInt(Feature.v60),194 .index = @enumToInt(Feature.v60),
195 .name = @tagName(Feature.v60),195 .name = @tagName(Feature.v60),
196 .llvm_name = "v60",196 .llvm_name = "v60",
197 .description = "Enable Hexagon V60 architecture",197 .description = "Enable Hexagon V60 architecture",
198 .dependencies = 0,198 .dependencies = featureSet(&[_]Feature{}),
199 };199 };
200 result[@enumToInt(Feature.v62)] = .{200 result[@enumToInt(Feature.v62)] = .{
201 .index = @enumToInt(Feature.v62),201 .index = @enumToInt(Feature.v62),
202 .name = @tagName(Feature.v62),202 .name = @tagName(Feature.v62),
203 .llvm_name = "v62",203 .llvm_name = "v62",
204 .description = "Enable Hexagon V62 architecture",204 .description = "Enable Hexagon V62 architecture",
205 .dependencies = 0,205 .dependencies = featureSet(&[_]Feature{}),
206 };206 };
207 result[@enumToInt(Feature.v65)] = .{207 result[@enumToInt(Feature.v65)] = .{
208 .index = @enumToInt(Feature.v65),208 .index = @enumToInt(Feature.v65),
209 .name = @tagName(Feature.v65),209 .name = @tagName(Feature.v65),
210 .llvm_name = "v65",210 .llvm_name = "v65",
211 .description = "Enable Hexagon V65 architecture",211 .description = "Enable Hexagon V65 architecture",
212 .dependencies = 0,212 .dependencies = featureSet(&[_]Feature{}),
213 };213 };
214 result[@enumToInt(Feature.v66)] = .{214 result[@enumToInt(Feature.v66)] = .{
215 .index = @enumToInt(Feature.v66),215 .index = @enumToInt(Feature.v66),
216 .name = @tagName(Feature.v66),216 .name = @tagName(Feature.v66),
217 .llvm_name = "v66",217 .llvm_name = "v66",
218 .description = "Enable Hexagon V66 architecture",218 .description = "Enable Hexagon V66 architecture",
219 .dependencies = 0,219 .dependencies = featureSet(&[_]Feature{}),
220 };220 };
221 result[@enumToInt(Feature.zreg)] = .{221 result[@enumToInt(Feature.zreg)] = .{
222 .index = @enumToInt(Feature.zreg),222 .index = @enumToInt(Feature.zreg),
223 .name = @tagName(Feature.zreg),223 .name = @tagName(Feature.zreg),
224 .llvm_name = "zreg",224 .llvm_name = "zreg",
225 .description = "Hexagon ZReg extension instructions",225 .description = "Hexagon ZReg extension instructions",
226 .dependencies = 0,226 .dependencies = featureSet(&[_]Feature{}),
227 };227 };
228 break :blk result;228 break :blk result;
229};229};
lib/std/target/mips.zig+32-32
...@@ -57,14 +57,14 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -57,14 +57,14 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);60 std.debug.assert(len <= Cpu.Feature.Set.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),63 .index = @enumToInt(Feature.abs2008),
64 .name = @tagName(Feature.abs2008),64 .name = @tagName(Feature.abs2008),
65 .llvm_name = "abs2008",65 .llvm_name = "abs2008",
66 .description = "Disable IEEE 754-2008 abs.fmt mode",66 .description = "Disable IEEE 754-2008 abs.fmt mode",
67 .dependencies = 0,67 .dependencies = featureSet(&[_]Feature{}),
68 };68 };
69 result[@enumToInt(Feature.cnmips)] = .{69 result[@enumToInt(Feature.cnmips)] = .{
70 .index = @enumToInt(Feature.cnmips),70 .index = @enumToInt(Feature.cnmips),
...@@ -80,14 +80,14 @@ pub const all_features = blk: {...@@ -80,14 +80,14 @@ pub const all_features = blk: {
80 .name = @tagName(Feature.crc),80 .name = @tagName(Feature.crc),
81 .llvm_name = "crc",81 .llvm_name = "crc",
82 .description = "Mips R6 CRC ASE",82 .description = "Mips R6 CRC ASE",
83 .dependencies = 0,83 .dependencies = featureSet(&[_]Feature{}),
84 };84 };
85 result[@enumToInt(Feature.dsp)] = .{85 result[@enumToInt(Feature.dsp)] = .{
86 .index = @enumToInt(Feature.dsp),86 .index = @enumToInt(Feature.dsp),
87 .name = @tagName(Feature.dsp),87 .name = @tagName(Feature.dsp),
88 .llvm_name = "dsp",88 .llvm_name = "dsp",
89 .description = "Mips DSP ASE",89 .description = "Mips DSP ASE",
90 .dependencies = 0,90 .dependencies = featureSet(&[_]Feature{}),
91 };91 };
92 result[@enumToInt(Feature.dspr2)] = .{92 result[@enumToInt(Feature.dspr2)] = .{
93 .index = @enumToInt(Feature.dspr2),93 .index = @enumToInt(Feature.dspr2),
...@@ -113,63 +113,63 @@ pub const all_features = blk: {...@@ -113,63 +113,63 @@ pub const all_features = blk: {
113 .name = @tagName(Feature.eva),113 .name = @tagName(Feature.eva),
114 .llvm_name = "eva",114 .llvm_name = "eva",
115 .description = "Mips EVA ASE",115 .description = "Mips EVA ASE",
116 .dependencies = 0,116 .dependencies = featureSet(&[_]Feature{}),
117 };117 };
118 result[@enumToInt(Feature.fp64)] = .{118 result[@enumToInt(Feature.fp64)] = .{
119 .index = @enumToInt(Feature.fp64),119 .index = @enumToInt(Feature.fp64),
120 .name = @tagName(Feature.fp64),120 .name = @tagName(Feature.fp64),
121 .llvm_name = "fp64",121 .llvm_name = "fp64",
122 .description = "Support 64-bit FP registers",122 .description = "Support 64-bit FP registers",
123 .dependencies = 0,123 .dependencies = featureSet(&[_]Feature{}),
124 };124 };
125 result[@enumToInt(Feature.fpxx)] = .{125 result[@enumToInt(Feature.fpxx)] = .{
126 .index = @enumToInt(Feature.fpxx),126 .index = @enumToInt(Feature.fpxx),
127 .name = @tagName(Feature.fpxx),127 .name = @tagName(Feature.fpxx),
128 .llvm_name = "fpxx",128 .llvm_name = "fpxx",
129 .description = "Support for FPXX",129 .description = "Support for FPXX",
130 .dependencies = 0,130 .dependencies = featureSet(&[_]Feature{}),
131 };131 };
132 result[@enumToInt(Feature.ginv)] = .{132 result[@enumToInt(Feature.ginv)] = .{
133 .index = @enumToInt(Feature.ginv),133 .index = @enumToInt(Feature.ginv),
134 .name = @tagName(Feature.ginv),134 .name = @tagName(Feature.ginv),
135 .llvm_name = "ginv",135 .llvm_name = "ginv",
136 .description = "Mips Global Invalidate ASE",136 .description = "Mips Global Invalidate ASE",
137 .dependencies = 0,137 .dependencies = featureSet(&[_]Feature{}),
138 };138 };
139 result[@enumToInt(Feature.gp64)] = .{139 result[@enumToInt(Feature.gp64)] = .{
140 .index = @enumToInt(Feature.gp64),140 .index = @enumToInt(Feature.gp64),
141 .name = @tagName(Feature.gp64),141 .name = @tagName(Feature.gp64),
142 .llvm_name = "gp64",142 .llvm_name = "gp64",
143 .description = "General Purpose Registers are 64-bit wide",143 .description = "General Purpose Registers are 64-bit wide",
144 .dependencies = 0,144 .dependencies = featureSet(&[_]Feature{}),
145 };145 };
146 result[@enumToInt(Feature.long_calls)] = .{146 result[@enumToInt(Feature.long_calls)] = .{
147 .index = @enumToInt(Feature.long_calls),147 .index = @enumToInt(Feature.long_calls),
148 .name = @tagName(Feature.long_calls),148 .name = @tagName(Feature.long_calls),
149 .llvm_name = "long-calls",149 .llvm_name = "long-calls",
150 .description = "Disable use of the jal instruction",150 .description = "Disable use of the jal instruction",
151 .dependencies = 0,151 .dependencies = featureSet(&[_]Feature{}),
152 };152 };
153 result[@enumToInt(Feature.micromips)] = .{153 result[@enumToInt(Feature.micromips)] = .{
154 .index = @enumToInt(Feature.micromips),154 .index = @enumToInt(Feature.micromips),
155 .name = @tagName(Feature.micromips),155 .name = @tagName(Feature.micromips),
156 .llvm_name = "micromips",156 .llvm_name = "micromips",
157 .description = "microMips mode",157 .description = "microMips mode",
158 .dependencies = 0,158 .dependencies = featureSet(&[_]Feature{}),
159 };159 };
160 result[@enumToInt(Feature.mips1)] = .{160 result[@enumToInt(Feature.mips1)] = .{
161 .index = @enumToInt(Feature.mips1),161 .index = @enumToInt(Feature.mips1),
162 .name = @tagName(Feature.mips1),162 .name = @tagName(Feature.mips1),
163 .llvm_name = "mips1",163 .llvm_name = "mips1",
164 .description = "Mips I ISA Support [highly experimental]",164 .description = "Mips I ISA Support [highly experimental]",
165 .dependencies = 0,165 .dependencies = featureSet(&[_]Feature{}),
166 };166 };
167 result[@enumToInt(Feature.mips16)] = .{167 result[@enumToInt(Feature.mips16)] = .{
168 .index = @enumToInt(Feature.mips16),168 .index = @enumToInt(Feature.mips16),
169 .name = @tagName(Feature.mips16),169 .name = @tagName(Feature.mips16),
170 .llvm_name = "mips16",170 .llvm_name = "mips16",
171 .description = "Mips16 mode",171 .description = "Mips16 mode",
172 .dependencies = 0,172 .dependencies = featureSet(&[_]Feature{}),
173 };173 };
174 result[@enumToInt(Feature.mips2)] = .{174 result[@enumToInt(Feature.mips2)] = .{
175 .index = @enumToInt(Feature.mips2),175 .index = @enumToInt(Feature.mips2),
...@@ -251,14 +251,14 @@ pub const all_features = blk: {...@@ -251,14 +251,14 @@ pub const all_features = blk: {
251 .name = @tagName(Feature.mips3_32),251 .name = @tagName(Feature.mips3_32),
252 .llvm_name = "mips3_32",252 .llvm_name = "mips3_32",
253 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",253 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
254 .dependencies = 0,254 .dependencies = featureSet(&[_]Feature{}),
255 };255 };
256 result[@enumToInt(Feature.mips3_32r2)] = .{256 result[@enumToInt(Feature.mips3_32r2)] = .{
257 .index = @enumToInt(Feature.mips3_32r2),257 .index = @enumToInt(Feature.mips3_32r2),
258 .name = @tagName(Feature.mips3_32r2),258 .name = @tagName(Feature.mips3_32r2),
259 .llvm_name = "mips3_32r2",259 .llvm_name = "mips3_32r2",
260 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",260 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
261 .dependencies = 0,261 .dependencies = featureSet(&[_]Feature{}),
262 };262 };
263 result[@enumToInt(Feature.mips4)] = .{263 result[@enumToInt(Feature.mips4)] = .{
264 .index = @enumToInt(Feature.mips4),264 .index = @enumToInt(Feature.mips4),
...@@ -276,14 +276,14 @@ pub const all_features = blk: {...@@ -276,14 +276,14 @@ pub const all_features = blk: {
276 .name = @tagName(Feature.mips4_32),276 .name = @tagName(Feature.mips4_32),
277 .llvm_name = "mips4_32",277 .llvm_name = "mips4_32",
278 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",278 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
279 .dependencies = 0,279 .dependencies = featureSet(&[_]Feature{}),
280 };280 };
281 result[@enumToInt(Feature.mips4_32r2)] = .{281 result[@enumToInt(Feature.mips4_32r2)] = .{
282 .index = @enumToInt(Feature.mips4_32r2),282 .index = @enumToInt(Feature.mips4_32r2),
283 .name = @tagName(Feature.mips4_32r2),283 .name = @tagName(Feature.mips4_32r2),
284 .llvm_name = "mips4_32r2",284 .llvm_name = "mips4_32r2",
285 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",285 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
286 .dependencies = 0,286 .dependencies = featureSet(&[_]Feature{}),
287 };287 };
288 result[@enumToInt(Feature.mips5)] = .{288 result[@enumToInt(Feature.mips5)] = .{
289 .index = @enumToInt(Feature.mips5),289 .index = @enumToInt(Feature.mips5),
...@@ -300,7 +300,7 @@ pub const all_features = blk: {...@@ -300,7 +300,7 @@ pub const all_features = blk: {
300 .name = @tagName(Feature.mips5_32r2),300 .name = @tagName(Feature.mips5_32r2),
301 .llvm_name = "mips5_32r2",301 .llvm_name = "mips5_32r2",
302 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",302 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
303 .dependencies = 0,303 .dependencies = featureSet(&[_]Feature{}),
304 };304 };
305 result[@enumToInt(Feature.mips64)] = .{305 result[@enumToInt(Feature.mips64)] = .{
306 .index = @enumToInt(Feature.mips64),306 .index = @enumToInt(Feature.mips64),
...@@ -359,42 +359,42 @@ pub const all_features = blk: {...@@ -359,42 +359,42 @@ pub const all_features = blk: {
359 .name = @tagName(Feature.msa),359 .name = @tagName(Feature.msa),
360 .llvm_name = "msa",360 .llvm_name = "msa",
361 .description = "Mips MSA ASE",361 .description = "Mips MSA ASE",
362 .dependencies = 0,362 .dependencies = featureSet(&[_]Feature{}),
363 };363 };
364 result[@enumToInt(Feature.mt)] = .{364 result[@enumToInt(Feature.mt)] = .{
365 .index = @enumToInt(Feature.mt),365 .index = @enumToInt(Feature.mt),
366 .name = @tagName(Feature.mt),366 .name = @tagName(Feature.mt),
367 .llvm_name = "mt",367 .llvm_name = "mt",
368 .description = "Mips MT ASE",368 .description = "Mips MT ASE",
369 .dependencies = 0,369 .dependencies = featureSet(&[_]Feature{}),
370 };370 };
371 result[@enumToInt(Feature.nan2008)] = .{371 result[@enumToInt(Feature.nan2008)] = .{
372 .index = @enumToInt(Feature.nan2008),372 .index = @enumToInt(Feature.nan2008),
373 .name = @tagName(Feature.nan2008),373 .name = @tagName(Feature.nan2008),
374 .llvm_name = "nan2008",374 .llvm_name = "nan2008",
375 .description = "IEEE 754-2008 NaN encoding",375 .description = "IEEE 754-2008 NaN encoding",
376 .dependencies = 0,376 .dependencies = featureSet(&[_]Feature{}),
377 };377 };
378 result[@enumToInt(Feature.noabicalls)] = .{378 result[@enumToInt(Feature.noabicalls)] = .{
379 .index = @enumToInt(Feature.noabicalls),379 .index = @enumToInt(Feature.noabicalls),
380 .name = @tagName(Feature.noabicalls),380 .name = @tagName(Feature.noabicalls),
381 .llvm_name = "noabicalls",381 .llvm_name = "noabicalls",
382 .description = "Disable SVR4-style position-independent code",382 .description = "Disable SVR4-style position-independent code",
383 .dependencies = 0,383 .dependencies = featureSet(&[_]Feature{}),
384 };384 };
385 result[@enumToInt(Feature.nomadd4)] = .{385 result[@enumToInt(Feature.nomadd4)] = .{
386 .index = @enumToInt(Feature.nomadd4),386 .index = @enumToInt(Feature.nomadd4),
387 .name = @tagName(Feature.nomadd4),387 .name = @tagName(Feature.nomadd4),
388 .llvm_name = "nomadd4",388 .llvm_name = "nomadd4",
389 .description = "Disable 4-operand madd.fmt and related instructions",389 .description = "Disable 4-operand madd.fmt and related instructions",
390 .dependencies = 0,390 .dependencies = featureSet(&[_]Feature{}),
391 };391 };
392 result[@enumToInt(Feature.nooddspreg)] = .{392 result[@enumToInt(Feature.nooddspreg)] = .{
393 .index = @enumToInt(Feature.nooddspreg),393 .index = @enumToInt(Feature.nooddspreg),
394 .name = @tagName(Feature.nooddspreg),394 .name = @tagName(Feature.nooddspreg),
395 .llvm_name = "nooddspreg",395 .llvm_name = "nooddspreg",
396 .description = "Disable odd numbered single-precision registers",396 .description = "Disable odd numbered single-precision registers",
397 .dependencies = 0,397 .dependencies = featureSet(&[_]Feature{}),
398 };398 };
399 result[@enumToInt(Feature.p5600)] = .{399 result[@enumToInt(Feature.p5600)] = .{
400 .index = @enumToInt(Feature.p5600),400 .index = @enumToInt(Feature.p5600),
...@@ -410,56 +410,56 @@ pub const all_features = blk: {...@@ -410,56 +410,56 @@ pub const all_features = blk: {
410 .name = @tagName(Feature.ptr64),410 .name = @tagName(Feature.ptr64),
411 .llvm_name = "ptr64",411 .llvm_name = "ptr64",
412 .description = "Pointers are 64-bit wide",412 .description = "Pointers are 64-bit wide",
413 .dependencies = 0,413 .dependencies = featureSet(&[_]Feature{}),
414 };414 };
415 result[@enumToInt(Feature.single_float)] = .{415 result[@enumToInt(Feature.single_float)] = .{
416 .index = @enumToInt(Feature.single_float),416 .index = @enumToInt(Feature.single_float),
417 .name = @tagName(Feature.single_float),417 .name = @tagName(Feature.single_float),
418 .llvm_name = "single-float",418 .llvm_name = "single-float",
419 .description = "Only supports single precision float",419 .description = "Only supports single precision float",
420 .dependencies = 0,420 .dependencies = featureSet(&[_]Feature{}),
421 };421 };
422 result[@enumToInt(Feature.soft_float)] = .{422 result[@enumToInt(Feature.soft_float)] = .{
423 .index = @enumToInt(Feature.soft_float),423 .index = @enumToInt(Feature.soft_float),
424 .name = @tagName(Feature.soft_float),424 .name = @tagName(Feature.soft_float),
425 .llvm_name = "soft-float",425 .llvm_name = "soft-float",
426 .description = "Does not support floating point instructions",426 .description = "Does not support floating point instructions",
427 .dependencies = 0,427 .dependencies = featureSet(&[_]Feature{}),
428 };428 };
429 result[@enumToInt(Feature.sym32)] = .{429 result[@enumToInt(Feature.sym32)] = .{
430 .index = @enumToInt(Feature.sym32),430 .index = @enumToInt(Feature.sym32),
431 .name = @tagName(Feature.sym32),431 .name = @tagName(Feature.sym32),
432 .llvm_name = "sym32",432 .llvm_name = "sym32",
433 .description = "Symbols are 32 bit on Mips64",433 .description = "Symbols are 32 bit on Mips64",
434 .dependencies = 0,434 .dependencies = featureSet(&[_]Feature{}),
435 };435 };
436 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{436 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{
437 .index = @enumToInt(Feature.use_indirect_jump_hazard),437 .index = @enumToInt(Feature.use_indirect_jump_hazard),
438 .name = @tagName(Feature.use_indirect_jump_hazard),438 .name = @tagName(Feature.use_indirect_jump_hazard),
439 .llvm_name = "use-indirect-jump-hazard",439 .llvm_name = "use-indirect-jump-hazard",
440 .description = "Use indirect jump guards to prevent certain speculation based attacks",440 .description = "Use indirect jump guards to prevent certain speculation based attacks",
441 .dependencies = 0,441 .dependencies = featureSet(&[_]Feature{}),
442 };442 };
443 result[@enumToInt(Feature.use_tcc_in_div)] = .{443 result[@enumToInt(Feature.use_tcc_in_div)] = .{
444 .index = @enumToInt(Feature.use_tcc_in_div),444 .index = @enumToInt(Feature.use_tcc_in_div),
445 .name = @tagName(Feature.use_tcc_in_div),445 .name = @tagName(Feature.use_tcc_in_div),
446 .llvm_name = "use-tcc-in-div",446 .llvm_name = "use-tcc-in-div",
447 .description = "Force the assembler to use trapping",447 .description = "Force the assembler to use trapping",
448 .dependencies = 0,448 .dependencies = featureSet(&[_]Feature{}),
449 };449 };
450 result[@enumToInt(Feature.vfpu)] = .{450 result[@enumToInt(Feature.vfpu)] = .{
451 .index = @enumToInt(Feature.vfpu),451 .index = @enumToInt(Feature.vfpu),
452 .name = @tagName(Feature.vfpu),452 .name = @tagName(Feature.vfpu),
453 .llvm_name = "vfpu",453 .llvm_name = "vfpu",
454 .description = "Enable vector FPU instructions",454 .description = "Enable vector FPU instructions",
455 .dependencies = 0,455 .dependencies = featureSet(&[_]Feature{}),
456 };456 };
457 result[@enumToInt(Feature.virt)] = .{457 result[@enumToInt(Feature.virt)] = .{
458 .index = @enumToInt(Feature.virt),458 .index = @enumToInt(Feature.virt),
459 .name = @tagName(Feature.virt),459 .name = @tagName(Feature.virt),
460 .llvm_name = "virt",460 .llvm_name = "virt",
461 .description = "Mips Virtualization ASE",461 .description = "Mips Virtualization ASE",
462 .dependencies = 0,462 .dependencies = featureSet(&[_]Feature{}),
463 };463 };
464 break :blk result;464 break :blk result;
465};465};
lib/std/target/msp430.zig+7-7
...@@ -12,35 +12,35 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -12,35 +12,35 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);15 std.debug.assert(len <= Cpu.Feature.Set.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),18 .index = @enumToInt(Feature.ext),
19 .name = @tagName(Feature.ext),19 .name = @tagName(Feature.ext),
20 .llvm_name = "ext",20 .llvm_name = "ext",
21 .description = "Enable MSP430-X extensions",21 .description = "Enable MSP430-X extensions",
22 .dependencies = 0,22 .dependencies = featureSet(&[_]Feature{}),
23 };23 };
24 result[@enumToInt(Feature.hwmult16)] = .{24 result[@enumToInt(Feature.hwmult16)] = .{
25 .index = @enumToInt(Feature.hwmult16),25 .index = @enumToInt(Feature.hwmult16),
26 .name = @tagName(Feature.hwmult16),26 .name = @tagName(Feature.hwmult16),
27 .llvm_name = "hwmult16",27 .llvm_name = "hwmult16",
28 .description = "Enable 16-bit hardware multiplier",28 .description = "Enable 16-bit hardware multiplier",
29 .dependencies = 0,29 .dependencies = featureSet(&[_]Feature{}),
30 };30 };
31 result[@enumToInt(Feature.hwmult32)] = .{31 result[@enumToInt(Feature.hwmult32)] = .{
32 .index = @enumToInt(Feature.hwmult32),32 .index = @enumToInt(Feature.hwmult32),
33 .name = @tagName(Feature.hwmult32),33 .name = @tagName(Feature.hwmult32),
34 .llvm_name = "hwmult32",34 .llvm_name = "hwmult32",
35 .description = "Enable 32-bit hardware multiplier",35 .description = "Enable 32-bit hardware multiplier",
36 .dependencies = 0,36 .dependencies = featureSet(&[_]Feature{}),
37 };37 };
38 result[@enumToInt(Feature.hwmultf5)] = .{38 result[@enumToInt(Feature.hwmultf5)] = .{
39 .index = @enumToInt(Feature.hwmultf5),39 .index = @enumToInt(Feature.hwmultf5),
40 .name = @tagName(Feature.hwmultf5),40 .name = @tagName(Feature.hwmultf5),
41 .llvm_name = "hwmultf5",41 .llvm_name = "hwmultf5",
42 .description = "Enable F5 series hardware multiplier",42 .description = "Enable F5 series hardware multiplier",
43 .dependencies = 0,43 .dependencies = featureSet(&[_]Feature{}),
44 };44 };
45 break :blk result;45 break :blk result;
46};46};
...@@ -49,12 +49,12 @@ pub const cpu = struct {...@@ -49,12 +49,12 @@ pub const cpu = struct {
49 pub const generic = Cpu{49 pub const generic = Cpu{
50 .name = "generic",50 .name = "generic",
51 .llvm_name = "generic",51 .llvm_name = "generic",
52 .features = 0,52 .features = featureSet(&[_]Feature{}),
53 };53 };
54 pub const msp430 = Cpu{54 pub const msp430 = Cpu{
55 .name = "msp430",55 .name = "msp430",
56 .llvm_name = "msp430",56 .llvm_name = "msp430",
57 .features = 0,57 .features = featureSet(&[_]Feature{}),
58 };58 };
59 pub const msp430x = Cpu{59 pub const msp430x = Cpu{
60 .name = "msp430x",60 .name = "msp430x",
lib/std/target/nvptx.zig+26-26
...@@ -33,182 +33,182 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -33,182 +33,182 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);36 std.debug.assert(len <= Cpu.Feature.Set.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),39 .index = @enumToInt(Feature.ptx32),
40 .name = @tagName(Feature.ptx32),40 .name = @tagName(Feature.ptx32),
41 .llvm_name = "ptx32",41 .llvm_name = "ptx32",
42 .description = "Use PTX version 3.2",42 .description = "Use PTX version 3.2",
43 .dependencies = 0,43 .dependencies = featureSet(&[_]Feature{}),
44 };44 };
45 result[@enumToInt(Feature.ptx40)] = .{45 result[@enumToInt(Feature.ptx40)] = .{
46 .index = @enumToInt(Feature.ptx40),46 .index = @enumToInt(Feature.ptx40),
47 .name = @tagName(Feature.ptx40),47 .name = @tagName(Feature.ptx40),
48 .llvm_name = "ptx40",48 .llvm_name = "ptx40",
49 .description = "Use PTX version 4.0",49 .description = "Use PTX version 4.0",
50 .dependencies = 0,50 .dependencies = featureSet(&[_]Feature{}),
51 };51 };
52 result[@enumToInt(Feature.ptx41)] = .{52 result[@enumToInt(Feature.ptx41)] = .{
53 .index = @enumToInt(Feature.ptx41),53 .index = @enumToInt(Feature.ptx41),
54 .name = @tagName(Feature.ptx41),54 .name = @tagName(Feature.ptx41),
55 .llvm_name = "ptx41",55 .llvm_name = "ptx41",
56 .description = "Use PTX version 4.1",56 .description = "Use PTX version 4.1",
57 .dependencies = 0,57 .dependencies = featureSet(&[_]Feature{}),
58 };58 };
59 result[@enumToInt(Feature.ptx42)] = .{59 result[@enumToInt(Feature.ptx42)] = .{
60 .index = @enumToInt(Feature.ptx42),60 .index = @enumToInt(Feature.ptx42),
61 .name = @tagName(Feature.ptx42),61 .name = @tagName(Feature.ptx42),
62 .llvm_name = "ptx42",62 .llvm_name = "ptx42",
63 .description = "Use PTX version 4.2",63 .description = "Use PTX version 4.2",
64 .dependencies = 0,64 .dependencies = featureSet(&[_]Feature{}),
65 };65 };
66 result[@enumToInt(Feature.ptx43)] = .{66 result[@enumToInt(Feature.ptx43)] = .{
67 .index = @enumToInt(Feature.ptx43),67 .index = @enumToInt(Feature.ptx43),
68 .name = @tagName(Feature.ptx43),68 .name = @tagName(Feature.ptx43),
69 .llvm_name = "ptx43",69 .llvm_name = "ptx43",
70 .description = "Use PTX version 4.3",70 .description = "Use PTX version 4.3",
71 .dependencies = 0,71 .dependencies = featureSet(&[_]Feature{}),
72 };72 };
73 result[@enumToInt(Feature.ptx50)] = .{73 result[@enumToInt(Feature.ptx50)] = .{
74 .index = @enumToInt(Feature.ptx50),74 .index = @enumToInt(Feature.ptx50),
75 .name = @tagName(Feature.ptx50),75 .name = @tagName(Feature.ptx50),
76 .llvm_name = "ptx50",76 .llvm_name = "ptx50",
77 .description = "Use PTX version 5.0",77 .description = "Use PTX version 5.0",
78 .dependencies = 0,78 .dependencies = featureSet(&[_]Feature{}),
79 };79 };
80 result[@enumToInt(Feature.ptx60)] = .{80 result[@enumToInt(Feature.ptx60)] = .{
81 .index = @enumToInt(Feature.ptx60),81 .index = @enumToInt(Feature.ptx60),
82 .name = @tagName(Feature.ptx60),82 .name = @tagName(Feature.ptx60),
83 .llvm_name = "ptx60",83 .llvm_name = "ptx60",
84 .description = "Use PTX version 6.0",84 .description = "Use PTX version 6.0",
85 .dependencies = 0,85 .dependencies = featureSet(&[_]Feature{}),
86 };86 };
87 result[@enumToInt(Feature.ptx61)] = .{87 result[@enumToInt(Feature.ptx61)] = .{
88 .index = @enumToInt(Feature.ptx61),88 .index = @enumToInt(Feature.ptx61),
89 .name = @tagName(Feature.ptx61),89 .name = @tagName(Feature.ptx61),
90 .llvm_name = "ptx61",90 .llvm_name = "ptx61",
91 .description = "Use PTX version 6.1",91 .description = "Use PTX version 6.1",
92 .dependencies = 0,92 .dependencies = featureSet(&[_]Feature{}),
93 };93 };
94 result[@enumToInt(Feature.ptx63)] = .{94 result[@enumToInt(Feature.ptx63)] = .{
95 .index = @enumToInt(Feature.ptx63),95 .index = @enumToInt(Feature.ptx63),
96 .name = @tagName(Feature.ptx63),96 .name = @tagName(Feature.ptx63),
97 .llvm_name = "ptx63",97 .llvm_name = "ptx63",
98 .description = "Use PTX version 6.3",98 .description = "Use PTX version 6.3",
99 .dependencies = 0,99 .dependencies = featureSet(&[_]Feature{}),
100 };100 };
101 result[@enumToInt(Feature.ptx64)] = .{101 result[@enumToInt(Feature.ptx64)] = .{
102 .index = @enumToInt(Feature.ptx64),102 .index = @enumToInt(Feature.ptx64),
103 .name = @tagName(Feature.ptx64),103 .name = @tagName(Feature.ptx64),
104 .llvm_name = "ptx64",104 .llvm_name = "ptx64",
105 .description = "Use PTX version 6.4",105 .description = "Use PTX version 6.4",
106 .dependencies = 0,106 .dependencies = featureSet(&[_]Feature{}),
107 };107 };
108 result[@enumToInt(Feature.sm_20)] = .{108 result[@enumToInt(Feature.sm_20)] = .{
109 .index = @enumToInt(Feature.sm_20),109 .index = @enumToInt(Feature.sm_20),
110 .name = @tagName(Feature.sm_20),110 .name = @tagName(Feature.sm_20),
111 .llvm_name = "sm_20",111 .llvm_name = "sm_20",
112 .description = "Target SM 2.0",112 .description = "Target SM 2.0",
113 .dependencies = 0,113 .dependencies = featureSet(&[_]Feature{}),
114 };114 };
115 result[@enumToInt(Feature.sm_21)] = .{115 result[@enumToInt(Feature.sm_21)] = .{
116 .index = @enumToInt(Feature.sm_21),116 .index = @enumToInt(Feature.sm_21),
117 .name = @tagName(Feature.sm_21),117 .name = @tagName(Feature.sm_21),
118 .llvm_name = "sm_21",118 .llvm_name = "sm_21",
119 .description = "Target SM 2.1",119 .description = "Target SM 2.1",
120 .dependencies = 0,120 .dependencies = featureSet(&[_]Feature{}),
121 };121 };
122 result[@enumToInt(Feature.sm_30)] = .{122 result[@enumToInt(Feature.sm_30)] = .{
123 .index = @enumToInt(Feature.sm_30),123 .index = @enumToInt(Feature.sm_30),
124 .name = @tagName(Feature.sm_30),124 .name = @tagName(Feature.sm_30),
125 .llvm_name = "sm_30",125 .llvm_name = "sm_30",
126 .description = "Target SM 3.0",126 .description = "Target SM 3.0",
127 .dependencies = 0,127 .dependencies = featureSet(&[_]Feature{}),
128 };128 };
129 result[@enumToInt(Feature.sm_32)] = .{129 result[@enumToInt(Feature.sm_32)] = .{
130 .index = @enumToInt(Feature.sm_32),130 .index = @enumToInt(Feature.sm_32),
131 .name = @tagName(Feature.sm_32),131 .name = @tagName(Feature.sm_32),
132 .llvm_name = "sm_32",132 .llvm_name = "sm_32",
133 .description = "Target SM 3.2",133 .description = "Target SM 3.2",
134 .dependencies = 0,134 .dependencies = featureSet(&[_]Feature{}),
135 };135 };
136 result[@enumToInt(Feature.sm_35)] = .{136 result[@enumToInt(Feature.sm_35)] = .{
137 .index = @enumToInt(Feature.sm_35),137 .index = @enumToInt(Feature.sm_35),
138 .name = @tagName(Feature.sm_35),138 .name = @tagName(Feature.sm_35),
139 .llvm_name = "sm_35",139 .llvm_name = "sm_35",
140 .description = "Target SM 3.5",140 .description = "Target SM 3.5",
141 .dependencies = 0,141 .dependencies = featureSet(&[_]Feature{}),
142 };142 };
143 result[@enumToInt(Feature.sm_37)] = .{143 result[@enumToInt(Feature.sm_37)] = .{
144 .index = @enumToInt(Feature.sm_37),144 .index = @enumToInt(Feature.sm_37),
145 .name = @tagName(Feature.sm_37),145 .name = @tagName(Feature.sm_37),
146 .llvm_name = "sm_37",146 .llvm_name = "sm_37",
147 .description = "Target SM 3.7",147 .description = "Target SM 3.7",
148 .dependencies = 0,148 .dependencies = featureSet(&[_]Feature{}),
149 };149 };
150 result[@enumToInt(Feature.sm_50)] = .{150 result[@enumToInt(Feature.sm_50)] = .{
151 .index = @enumToInt(Feature.sm_50),151 .index = @enumToInt(Feature.sm_50),
152 .name = @tagName(Feature.sm_50),152 .name = @tagName(Feature.sm_50),
153 .llvm_name = "sm_50",153 .llvm_name = "sm_50",
154 .description = "Target SM 5.0",154 .description = "Target SM 5.0",
155 .dependencies = 0,155 .dependencies = featureSet(&[_]Feature{}),
156 };156 };
157 result[@enumToInt(Feature.sm_52)] = .{157 result[@enumToInt(Feature.sm_52)] = .{
158 .index = @enumToInt(Feature.sm_52),158 .index = @enumToInt(Feature.sm_52),
159 .name = @tagName(Feature.sm_52),159 .name = @tagName(Feature.sm_52),
160 .llvm_name = "sm_52",160 .llvm_name = "sm_52",
161 .description = "Target SM 5.2",161 .description = "Target SM 5.2",
162 .dependencies = 0,162 .dependencies = featureSet(&[_]Feature{}),
163 };163 };
164 result[@enumToInt(Feature.sm_53)] = .{164 result[@enumToInt(Feature.sm_53)] = .{
165 .index = @enumToInt(Feature.sm_53),165 .index = @enumToInt(Feature.sm_53),
166 .name = @tagName(Feature.sm_53),166 .name = @tagName(Feature.sm_53),
167 .llvm_name = "sm_53",167 .llvm_name = "sm_53",
168 .description = "Target SM 5.3",168 .description = "Target SM 5.3",
169 .dependencies = 0,169 .dependencies = featureSet(&[_]Feature{}),
170 };170 };
171 result[@enumToInt(Feature.sm_60)] = .{171 result[@enumToInt(Feature.sm_60)] = .{
172 .index = @enumToInt(Feature.sm_60),172 .index = @enumToInt(Feature.sm_60),
173 .name = @tagName(Feature.sm_60),173 .name = @tagName(Feature.sm_60),
174 .llvm_name = "sm_60",174 .llvm_name = "sm_60",
175 .description = "Target SM 6.0",175 .description = "Target SM 6.0",
176 .dependencies = 0,176 .dependencies = featureSet(&[_]Feature{}),
177 };177 };
178 result[@enumToInt(Feature.sm_61)] = .{178 result[@enumToInt(Feature.sm_61)] = .{
179 .index = @enumToInt(Feature.sm_61),179 .index = @enumToInt(Feature.sm_61),
180 .name = @tagName(Feature.sm_61),180 .name = @tagName(Feature.sm_61),
181 .llvm_name = "sm_61",181 .llvm_name = "sm_61",
182 .description = "Target SM 6.1",182 .description = "Target SM 6.1",
183 .dependencies = 0,183 .dependencies = featureSet(&[_]Feature{}),
184 };184 };
185 result[@enumToInt(Feature.sm_62)] = .{185 result[@enumToInt(Feature.sm_62)] = .{
186 .index = @enumToInt(Feature.sm_62),186 .index = @enumToInt(Feature.sm_62),
187 .name = @tagName(Feature.sm_62),187 .name = @tagName(Feature.sm_62),
188 .llvm_name = "sm_62",188 .llvm_name = "sm_62",
189 .description = "Target SM 6.2",189 .description = "Target SM 6.2",
190 .dependencies = 0,190 .dependencies = featureSet(&[_]Feature{}),
191 };191 };
192 result[@enumToInt(Feature.sm_70)] = .{192 result[@enumToInt(Feature.sm_70)] = .{
193 .index = @enumToInt(Feature.sm_70),193 .index = @enumToInt(Feature.sm_70),
194 .name = @tagName(Feature.sm_70),194 .name = @tagName(Feature.sm_70),
195 .llvm_name = "sm_70",195 .llvm_name = "sm_70",
196 .description = "Target SM 7.0",196 .description = "Target SM 7.0",
197 .dependencies = 0,197 .dependencies = featureSet(&[_]Feature{}),
198 };198 };
199 result[@enumToInt(Feature.sm_72)] = .{199 result[@enumToInt(Feature.sm_72)] = .{
200 .index = @enumToInt(Feature.sm_72),200 .index = @enumToInt(Feature.sm_72),
201 .name = @tagName(Feature.sm_72),201 .name = @tagName(Feature.sm_72),
202 .llvm_name = "sm_72",202 .llvm_name = "sm_72",
203 .description = "Target SM 7.2",203 .description = "Target SM 7.2",
204 .dependencies = 0,204 .dependencies = featureSet(&[_]Feature{}),
205 };205 };
206 result[@enumToInt(Feature.sm_75)] = .{206 result[@enumToInt(Feature.sm_75)] = .{
207 .index = @enumToInt(Feature.sm_75),207 .index = @enumToInt(Feature.sm_75),
208 .name = @tagName(Feature.sm_75),208 .name = @tagName(Feature.sm_75),
209 .llvm_name = "sm_75",209 .llvm_name = "sm_75",
210 .description = "Target SM 7.5",210 .description = "Target SM 7.5",
211 .dependencies = 0,211 .dependencies = featureSet(&[_]Feature{}),
212 };212 };
213 break :blk result;213 break :blk result;
214};214};
lib/std/target/powerpc.zig+44-44
...@@ -59,21 +59,21 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -59,21 +59,21 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);62 std.debug.assert(len <= Cpu.Feature.Set.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"),65 .index = @enumToInt(Feature.@"64bit"),
66 .name = @tagName(Feature.@"64bit"),66 .name = @tagName(Feature.@"64bit"),
67 .llvm_name = "64bit",67 .llvm_name = "64bit",
68 .description = "Enable 64-bit instructions",68 .description = "Enable 64-bit instructions",
69 .dependencies = 0,69 .dependencies = featureSet(&[_]Feature{}),
70 };70 };
71 result[@enumToInt(Feature.@"64bitregs")] = .{71 result[@enumToInt(Feature.@"64bitregs")] = .{
72 .index = @enumToInt(Feature.@"64bitregs"),72 .index = @enumToInt(Feature.@"64bitregs"),
73 .name = @tagName(Feature.@"64bitregs"),73 .name = @tagName(Feature.@"64bitregs"),
74 .llvm_name = "64bitregs",74 .llvm_name = "64bitregs",
75 .description = "Enable 64-bit registers usage for ppc32 [beta]",75 .description = "Enable 64-bit registers usage for ppc32 [beta]",
76 .dependencies = 0,76 .dependencies = featureSet(&[_]Feature{}),
77 };77 };
78 result[@enumToInt(Feature.altivec)] = .{78 result[@enumToInt(Feature.altivec)] = .{
79 .index = @enumToInt(Feature.altivec),79 .index = @enumToInt(Feature.altivec),
...@@ -98,21 +98,21 @@ pub const all_features = blk: {...@@ -98,21 +98,21 @@ pub const all_features = blk: {
98 .name = @tagName(Feature.bpermd),98 .name = @tagName(Feature.bpermd),
99 .llvm_name = "bpermd",99 .llvm_name = "bpermd",
100 .description = "Enable the bpermd instruction",100 .description = "Enable the bpermd instruction",
101 .dependencies = 0,101 .dependencies = featureSet(&[_]Feature{}),
102 };102 };
103 result[@enumToInt(Feature.cmpb)] = .{103 result[@enumToInt(Feature.cmpb)] = .{
104 .index = @enumToInt(Feature.cmpb),104 .index = @enumToInt(Feature.cmpb),
105 .name = @tagName(Feature.cmpb),105 .name = @tagName(Feature.cmpb),
106 .llvm_name = "cmpb",106 .llvm_name = "cmpb",
107 .description = "Enable the cmpb instruction",107 .description = "Enable the cmpb instruction",
108 .dependencies = 0,108 .dependencies = featureSet(&[_]Feature{}),
109 };109 };
110 result[@enumToInt(Feature.crbits)] = .{110 result[@enumToInt(Feature.crbits)] = .{
111 .index = @enumToInt(Feature.crbits),111 .index = @enumToInt(Feature.crbits),
112 .name = @tagName(Feature.crbits),112 .name = @tagName(Feature.crbits),
113 .llvm_name = "crbits",113 .llvm_name = "crbits",
114 .description = "Use condition-register bits individually",114 .description = "Use condition-register bits individually",
115 .dependencies = 0,115 .dependencies = featureSet(&[_]Feature{}),
116 };116 };
117 result[@enumToInt(Feature.crypto)] = .{117 result[@enumToInt(Feature.crypto)] = .{
118 .index = @enumToInt(Feature.crypto),118 .index = @enumToInt(Feature.crypto),
...@@ -137,14 +137,14 @@ pub const all_features = blk: {...@@ -137,14 +137,14 @@ pub const all_features = blk: {
137 .name = @tagName(Feature.e500),137 .name = @tagName(Feature.e500),
138 .llvm_name = "e500",138 .llvm_name = "e500",
139 .description = "Enable E500/E500mc instructions",139 .description = "Enable E500/E500mc instructions",
140 .dependencies = 0,140 .dependencies = featureSet(&[_]Feature{}),
141 };141 };
142 result[@enumToInt(Feature.extdiv)] = .{142 result[@enumToInt(Feature.extdiv)] = .{
143 .index = @enumToInt(Feature.extdiv),143 .index = @enumToInt(Feature.extdiv),
144 .name = @tagName(Feature.extdiv),144 .name = @tagName(Feature.extdiv),
145 .llvm_name = "extdiv",145 .llvm_name = "extdiv",
146 .description = "Enable extended divide instructions",146 .description = "Enable extended divide instructions",
147 .dependencies = 0,147 .dependencies = featureSet(&[_]Feature{}),
148 };148 };
149 result[@enumToInt(Feature.fcpsgn)] = .{149 result[@enumToInt(Feature.fcpsgn)] = .{
150 .index = @enumToInt(Feature.fcpsgn),150 .index = @enumToInt(Feature.fcpsgn),
...@@ -241,49 +241,49 @@ pub const all_features = blk: {...@@ -241,49 +241,49 @@ pub const all_features = blk: {
241 .name = @tagName(Feature.hard_float),241 .name = @tagName(Feature.hard_float),
242 .llvm_name = "hard-float",242 .llvm_name = "hard-float",
243 .description = "Enable floating-point instructions",243 .description = "Enable floating-point instructions",
244 .dependencies = 0,244 .dependencies = featureSet(&[_]Feature{}),
245 };245 };
246 result[@enumToInt(Feature.htm)] = .{246 result[@enumToInt(Feature.htm)] = .{
247 .index = @enumToInt(Feature.htm),247 .index = @enumToInt(Feature.htm),
248 .name = @tagName(Feature.htm),248 .name = @tagName(Feature.htm),
249 .llvm_name = "htm",249 .llvm_name = "htm",
250 .description = "Enable Hardware Transactional Memory instructions",250 .description = "Enable Hardware Transactional Memory instructions",
251 .dependencies = 0,251 .dependencies = featureSet(&[_]Feature{}),
252 };252 };
253 result[@enumToInt(Feature.icbt)] = .{253 result[@enumToInt(Feature.icbt)] = .{
254 .index = @enumToInt(Feature.icbt),254 .index = @enumToInt(Feature.icbt),
255 .name = @tagName(Feature.icbt),255 .name = @tagName(Feature.icbt),
256 .llvm_name = "icbt",256 .llvm_name = "icbt",
257 .description = "Enable icbt instruction",257 .description = "Enable icbt instruction",
258 .dependencies = 0,258 .dependencies = featureSet(&[_]Feature{}),
259 };259 };
260 result[@enumToInt(Feature.invariant_function_descriptors)] = .{260 result[@enumToInt(Feature.invariant_function_descriptors)] = .{
261 .index = @enumToInt(Feature.invariant_function_descriptors),261 .index = @enumToInt(Feature.invariant_function_descriptors),
262 .name = @tagName(Feature.invariant_function_descriptors),262 .name = @tagName(Feature.invariant_function_descriptors),
263 .llvm_name = "invariant-function-descriptors",263 .llvm_name = "invariant-function-descriptors",
264 .description = "Assume function descriptors are invariant",264 .description = "Assume function descriptors are invariant",
265 .dependencies = 0,265 .dependencies = featureSet(&[_]Feature{}),
266 };266 };
267 result[@enumToInt(Feature.isa_v30_instructions)] = .{267 result[@enumToInt(Feature.isa_v30_instructions)] = .{
268 .index = @enumToInt(Feature.isa_v30_instructions),268 .index = @enumToInt(Feature.isa_v30_instructions),
269 .name = @tagName(Feature.isa_v30_instructions),269 .name = @tagName(Feature.isa_v30_instructions),
270 .llvm_name = "isa-v30-instructions",270 .llvm_name = "isa-v30-instructions",
271 .description = "Enable instructions added in ISA 3.0.",271 .description = "Enable instructions added in ISA 3.0.",
272 .dependencies = 0,272 .dependencies = featureSet(&[_]Feature{}),
273 };273 };
274 result[@enumToInt(Feature.isel)] = .{274 result[@enumToInt(Feature.isel)] = .{
275 .index = @enumToInt(Feature.isel),275 .index = @enumToInt(Feature.isel),
276 .name = @tagName(Feature.isel),276 .name = @tagName(Feature.isel),
277 .llvm_name = "isel",277 .llvm_name = "isel",
278 .description = "Enable the isel instruction",278 .description = "Enable the isel instruction",
279 .dependencies = 0,279 .dependencies = featureSet(&[_]Feature{}),
280 };280 };
281 result[@enumToInt(Feature.ldbrx)] = .{281 result[@enumToInt(Feature.ldbrx)] = .{
282 .index = @enumToInt(Feature.ldbrx),282 .index = @enumToInt(Feature.ldbrx),
283 .name = @tagName(Feature.ldbrx),283 .name = @tagName(Feature.ldbrx),
284 .llvm_name = "ldbrx",284 .llvm_name = "ldbrx",
285 .description = "Enable the ldbrx instruction",285 .description = "Enable the ldbrx instruction",
286 .dependencies = 0,286 .dependencies = featureSet(&[_]Feature{}),
287 };287 };
288 result[@enumToInt(Feature.lfiwax)] = .{288 result[@enumToInt(Feature.lfiwax)] = .{
289 .index = @enumToInt(Feature.lfiwax),289 .index = @enumToInt(Feature.lfiwax),
...@@ -299,14 +299,14 @@ pub const all_features = blk: {...@@ -299,14 +299,14 @@ pub const all_features = blk: {
299 .name = @tagName(Feature.longcall),299 .name = @tagName(Feature.longcall),
300 .llvm_name = "longcall",300 .llvm_name = "longcall",
301 .description = "Always use indirect calls",301 .description = "Always use indirect calls",
302 .dependencies = 0,302 .dependencies = featureSet(&[_]Feature{}),
303 };303 };
304 result[@enumToInt(Feature.mfocrf)] = .{304 result[@enumToInt(Feature.mfocrf)] = .{
305 .index = @enumToInt(Feature.mfocrf),305 .index = @enumToInt(Feature.mfocrf),
306 .name = @tagName(Feature.mfocrf),306 .name = @tagName(Feature.mfocrf),
307 .llvm_name = "mfocrf",307 .llvm_name = "mfocrf",
308 .description = "Enable the MFOCRF instruction",308 .description = "Enable the MFOCRF instruction",
309 .dependencies = 0,309 .dependencies = featureSet(&[_]Feature{}),
310 };310 };
311 result[@enumToInt(Feature.msync)] = .{311 result[@enumToInt(Feature.msync)] = .{
312 .index = @enumToInt(Feature.msync),312 .index = @enumToInt(Feature.msync),
...@@ -322,14 +322,14 @@ pub const all_features = blk: {...@@ -322,14 +322,14 @@ pub const all_features = blk: {
322 .name = @tagName(Feature.partword_atomics),322 .name = @tagName(Feature.partword_atomics),
323 .llvm_name = "partword-atomics",323 .llvm_name = "partword-atomics",
324 .description = "Enable l[bh]arx and st[bh]cx.",324 .description = "Enable l[bh]arx and st[bh]cx.",
325 .dependencies = 0,325 .dependencies = featureSet(&[_]Feature{}),
326 };326 };
327 result[@enumToInt(Feature.popcntd)] = .{327 result[@enumToInt(Feature.popcntd)] = .{
328 .index = @enumToInt(Feature.popcntd),328 .index = @enumToInt(Feature.popcntd),
329 .name = @tagName(Feature.popcntd),329 .name = @tagName(Feature.popcntd),
330 .llvm_name = "popcntd",330 .llvm_name = "popcntd",
331 .description = "Enable the popcnt[dw] instructions",331 .description = "Enable the popcnt[dw] instructions",
332 .dependencies = 0,332 .dependencies = featureSet(&[_]Feature{}),
333 };333 };
334 result[@enumToInt(Feature.power8_altivec)] = .{334 result[@enumToInt(Feature.power8_altivec)] = .{
335 .index = @enumToInt(Feature.power8_altivec),335 .index = @enumToInt(Feature.power8_altivec),
...@@ -376,28 +376,28 @@ pub const all_features = blk: {...@@ -376,28 +376,28 @@ pub const all_features = blk: {
376 .name = @tagName(Feature.ppc_postra_sched),376 .name = @tagName(Feature.ppc_postra_sched),
377 .llvm_name = "ppc-postra-sched",377 .llvm_name = "ppc-postra-sched",
378 .description = "Use PowerPC post-RA scheduling strategy",378 .description = "Use PowerPC post-RA scheduling strategy",
379 .dependencies = 0,379 .dependencies = featureSet(&[_]Feature{}),
380 };380 };
381 result[@enumToInt(Feature.ppc_prera_sched)] = .{381 result[@enumToInt(Feature.ppc_prera_sched)] = .{
382 .index = @enumToInt(Feature.ppc_prera_sched),382 .index = @enumToInt(Feature.ppc_prera_sched),
383 .name = @tagName(Feature.ppc_prera_sched),383 .name = @tagName(Feature.ppc_prera_sched),
384 .llvm_name = "ppc-prera-sched",384 .llvm_name = "ppc-prera-sched",
385 .description = "Use PowerPC pre-RA scheduling strategy",385 .description = "Use PowerPC pre-RA scheduling strategy",
386 .dependencies = 0,386 .dependencies = featureSet(&[_]Feature{}),
387 };387 };
388 result[@enumToInt(Feature.ppc4xx)] = .{388 result[@enumToInt(Feature.ppc4xx)] = .{
389 .index = @enumToInt(Feature.ppc4xx),389 .index = @enumToInt(Feature.ppc4xx),
390 .name = @tagName(Feature.ppc4xx),390 .name = @tagName(Feature.ppc4xx),
391 .llvm_name = "ppc4xx",391 .llvm_name = "ppc4xx",
392 .description = "Enable PPC 4xx instructions",392 .description = "Enable PPC 4xx instructions",
393 .dependencies = 0,393 .dependencies = featureSet(&[_]Feature{}),
394 };394 };
395 result[@enumToInt(Feature.ppc6xx)] = .{395 result[@enumToInt(Feature.ppc6xx)] = .{
396 .index = @enumToInt(Feature.ppc6xx),396 .index = @enumToInt(Feature.ppc6xx),
397 .name = @tagName(Feature.ppc6xx),397 .name = @tagName(Feature.ppc6xx),
398 .llvm_name = "ppc6xx",398 .llvm_name = "ppc6xx",
399 .description = "Enable PPC 6xx instructions",399 .description = "Enable PPC 6xx instructions",
400 .dependencies = 0,400 .dependencies = featureSet(&[_]Feature{}),
401 };401 };
402 result[@enumToInt(Feature.qpx)] = .{402 result[@enumToInt(Feature.qpx)] = .{
403 .index = @enumToInt(Feature.qpx),403 .index = @enumToInt(Feature.qpx),
...@@ -413,21 +413,21 @@ pub const all_features = blk: {...@@ -413,21 +413,21 @@ pub const all_features = blk: {
413 .name = @tagName(Feature.recipprec),413 .name = @tagName(Feature.recipprec),
414 .llvm_name = "recipprec",414 .llvm_name = "recipprec",
415 .description = "Assume higher precision reciprocal estimates",415 .description = "Assume higher precision reciprocal estimates",
416 .dependencies = 0,416 .dependencies = featureSet(&[_]Feature{}),
417 };417 };
418 result[@enumToInt(Feature.secure_plt)] = .{418 result[@enumToInt(Feature.secure_plt)] = .{
419 .index = @enumToInt(Feature.secure_plt),419 .index = @enumToInt(Feature.secure_plt),
420 .name = @tagName(Feature.secure_plt),420 .name = @tagName(Feature.secure_plt),
421 .llvm_name = "secure-plt",421 .llvm_name = "secure-plt",
422 .description = "Enable secure plt mode",422 .description = "Enable secure plt mode",
423 .dependencies = 0,423 .dependencies = featureSet(&[_]Feature{}),
424 };424 };
425 result[@enumToInt(Feature.slow_popcntd)] = .{425 result[@enumToInt(Feature.slow_popcntd)] = .{
426 .index = @enumToInt(Feature.slow_popcntd),426 .index = @enumToInt(Feature.slow_popcntd),
427 .name = @tagName(Feature.slow_popcntd),427 .name = @tagName(Feature.slow_popcntd),
428 .llvm_name = "slow-popcntd",428 .llvm_name = "slow-popcntd",
429 .description = "Has slow popcnt[dw] instructions",429 .description = "Has slow popcnt[dw] instructions",
430 .dependencies = 0,430 .dependencies = featureSet(&[_]Feature{}),
431 };431 };
432 result[@enumToInt(Feature.spe)] = .{432 result[@enumToInt(Feature.spe)] = .{
433 .index = @enumToInt(Feature.spe),433 .index = @enumToInt(Feature.spe),
...@@ -452,14 +452,14 @@ pub const all_features = blk: {...@@ -452,14 +452,14 @@ pub const all_features = blk: {
452 .name = @tagName(Feature.two_const_nr),452 .name = @tagName(Feature.two_const_nr),
453 .llvm_name = "two-const-nr",453 .llvm_name = "two-const-nr",
454 .description = "Requires two constant Newton-Raphson computation",454 .description = "Requires two constant Newton-Raphson computation",
455 .dependencies = 0,455 .dependencies = featureSet(&[_]Feature{}),
456 };456 };
457 result[@enumToInt(Feature.vectors_use_two_units)] = .{457 result[@enumToInt(Feature.vectors_use_two_units)] = .{
458 .index = @enumToInt(Feature.vectors_use_two_units),458 .index = @enumToInt(Feature.vectors_use_two_units),
459 .name = @tagName(Feature.vectors_use_two_units),459 .name = @tagName(Feature.vectors_use_two_units),
460 .llvm_name = "vectors-use-two-units",460 .llvm_name = "vectors-use-two-units",
461 .description = "Vectors use two units",461 .description = "Vectors use two units",
462 .dependencies = 0,462 .dependencies = featureSet(&[_]Feature{}),
463 };463 };
464 result[@enumToInt(Feature.vsx)] = .{464 result[@enumToInt(Feature.vsx)] = .{
465 .index = @enumToInt(Feature.vsx),465 .index = @enumToInt(Feature.vsx),
...@@ -475,7 +475,7 @@ pub const all_features = blk: {...@@ -475,7 +475,7 @@ pub const all_features = blk: {
475475
476pub const cpu = struct {476pub const cpu = struct {
477 pub const @"440" = Cpu{477 pub const @"440" = Cpu{
478 .name = "@"440"",478 .name = "440",
479 .llvm_name = "440",479 .llvm_name = "440",
480 .features = featureSet(&[_]Feature{480 .features = featureSet(&[_]Feature{
481 .booke,481 .booke,
...@@ -487,7 +487,7 @@ pub const cpu = struct {...@@ -487,7 +487,7 @@ pub const cpu = struct {
487 }),487 }),
488 };488 };
489 pub const @"450" = Cpu{489 pub const @"450" = Cpu{
490 .name = "@"450"",490 .name = "450",
491 .llvm_name = "450",491 .llvm_name = "450",
492 .features = featureSet(&[_]Feature{492 .features = featureSet(&[_]Feature{
493 .booke,493 .booke,
...@@ -499,21 +499,21 @@ pub const cpu = struct {...@@ -499,21 +499,21 @@ pub const cpu = struct {
499 }),499 }),
500 };500 };
501 pub const @"601" = Cpu{501 pub const @"601" = Cpu{
502 .name = "@"601"",502 .name = "601",
503 .llvm_name = "601",503 .llvm_name = "601",
504 .features = featureSet(&[_]Feature{504 .features = featureSet(&[_]Feature{
505 .fpu,505 .fpu,
506 }),506 }),
507 };507 };
508 pub const @"602" = Cpu{508 pub const @"602" = Cpu{
509 .name = "@"602"",509 .name = "602",
510 .llvm_name = "602",510 .llvm_name = "602",
511 .features = featureSet(&[_]Feature{511 .features = featureSet(&[_]Feature{
512 .fpu,512 .fpu,
513 }),513 }),
514 };514 };
515 pub const @"603" = Cpu{515 pub const @"603" = Cpu{
516 .name = "@"603"",516 .name = "603",
517 .llvm_name = "603",517 .llvm_name = "603",
518 .features = featureSet(&[_]Feature{518 .features = featureSet(&[_]Feature{
519 .fres,519 .fres,
...@@ -521,7 +521,7 @@ pub const cpu = struct {...@@ -521,7 +521,7 @@ pub const cpu = struct {
521 }),521 }),
522 };522 };
523 pub const @"603e" = Cpu{523 pub const @"603e" = Cpu{
524 .name = "@"603e"",524 .name = "603e",
525 .llvm_name = "603e",525 .llvm_name = "603e",
526 .features = featureSet(&[_]Feature{526 .features = featureSet(&[_]Feature{
527 .fres,527 .fres,
...@@ -529,7 +529,7 @@ pub const cpu = struct {...@@ -529,7 +529,7 @@ pub const cpu = struct {
529 }),529 }),
530 };530 };
531 pub const @"603ev" = Cpu{531 pub const @"603ev" = Cpu{
532 .name = "@"603ev"",532 .name = "603ev",
533 .llvm_name = "603ev",533 .llvm_name = "603ev",
534 .features = featureSet(&[_]Feature{534 .features = featureSet(&[_]Feature{
535 .fres,535 .fres,
...@@ -537,7 +537,7 @@ pub const cpu = struct {...@@ -537,7 +537,7 @@ pub const cpu = struct {
537 }),537 }),
538 };538 };
539 pub const @"604" = Cpu{539 pub const @"604" = Cpu{
540 .name = "@"604"",540 .name = "604",
541 .llvm_name = "604",541 .llvm_name = "604",
542 .features = featureSet(&[_]Feature{542 .features = featureSet(&[_]Feature{
543 .fres,543 .fres,
...@@ -545,7 +545,7 @@ pub const cpu = struct {...@@ -545,7 +545,7 @@ pub const cpu = struct {
545 }),545 }),
546 };546 };
547 pub const @"604e" = Cpu{547 pub const @"604e" = Cpu{
548 .name = "@"604e"",548 .name = "604e",
549 .llvm_name = "604e",549 .llvm_name = "604e",
550 .features = featureSet(&[_]Feature{550 .features = featureSet(&[_]Feature{
551 .fres,551 .fres,
...@@ -553,7 +553,7 @@ pub const cpu = struct {...@@ -553,7 +553,7 @@ pub const cpu = struct {
553 }),553 }),
554 };554 };
555 pub const @"620" = Cpu{555 pub const @"620" = Cpu{
556 .name = "@"620"",556 .name = "620",
557 .llvm_name = "620",557 .llvm_name = "620",
558 .features = featureSet(&[_]Feature{558 .features = featureSet(&[_]Feature{
559 .fres,559 .fres,
...@@ -561,7 +561,7 @@ pub const cpu = struct {...@@ -561,7 +561,7 @@ pub const cpu = struct {
561 }),561 }),
562 };562 };
563 pub const @"7400" = Cpu{563 pub const @"7400" = Cpu{
564 .name = "@"7400"",564 .name = "7400",
565 .llvm_name = "7400",565 .llvm_name = "7400",
566 .features = featureSet(&[_]Feature{566 .features = featureSet(&[_]Feature{
567 .altivec,567 .altivec,
...@@ -570,7 +570,7 @@ pub const cpu = struct {...@@ -570,7 +570,7 @@ pub const cpu = struct {
570 }),570 }),
571 };571 };
572 pub const @"7450" = Cpu{572 pub const @"7450" = Cpu{
573 .name = "@"7450"",573 .name = "7450",
574 .llvm_name = "7450",574 .llvm_name = "7450",
575 .features = featureSet(&[_]Feature{575 .features = featureSet(&[_]Feature{
576 .altivec,576 .altivec,
...@@ -579,7 +579,7 @@ pub const cpu = struct {...@@ -579,7 +579,7 @@ pub const cpu = struct {
579 }),579 }),
580 };580 };
581 pub const @"750" = Cpu{581 pub const @"750" = Cpu{
582 .name = "@"750"",582 .name = "750",
583 .llvm_name = "750",583 .llvm_name = "750",
584 .features = featureSet(&[_]Feature{584 .features = featureSet(&[_]Feature{
585 .fres,585 .fres,
...@@ -587,7 +587,7 @@ pub const cpu = struct {...@@ -587,7 +587,7 @@ pub const cpu = struct {
587 }),587 }),
588 };588 };
589 pub const @"970" = Cpu{589 pub const @"970" = Cpu{
590 .name = "@"970"",590 .name = "970",
591 .llvm_name = "970",591 .llvm_name = "970",
592 .features = featureSet(&[_]Feature{592 .features = featureSet(&[_]Feature{
593 .@"64bit",593 .@"64bit",
...@@ -698,7 +698,7 @@ pub const cpu = struct {...@@ -698,7 +698,7 @@ pub const cpu = struct {
698 .frsqrte,698 .frsqrte,
699 }),699 }),
700 };700 };
701 pub const g4+ = Cpu{701 pub const @"g4+" = Cpu{
702 .name = "g4+",702 .name = "g4+",
703 .llvm_name = "g4+",703 .llvm_name = "g4+",
704 .features = featureSet(&[_]Feature{704 .features = featureSet(&[_]Feature{
...@@ -1016,7 +1016,7 @@ pub const all_cpus = &[_]*const Cpu{...@@ -1016,7 +1016,7 @@ pub const all_cpus = &[_]*const Cpu{
1016 &cpu.e5500,1016 &cpu.e5500,
1017 &cpu.g3,1017 &cpu.g3,
1018 &cpu.g4,1018 &cpu.g4,
1019 &cpu.g4+,1019 &cpu.@"g4+",
1020 &cpu.g5,1020 &cpu.g5,
1021 &cpu.generic,1021 &cpu.generic,
1022 &cpu.ppc,1022 &cpu.ppc,
lib/std/target/riscv.zig+9-9
...@@ -16,28 +16,28 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -16,28 +16,28 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);19 std.debug.assert(len <= Cpu.Feature.Set.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"),22 .index = @enumToInt(Feature.@"64bit"),
23 .name = @tagName(Feature.@"64bit"),23 .name = @tagName(Feature.@"64bit"),
24 .llvm_name = "64bit",24 .llvm_name = "64bit",
25 .description = "Implements RV64",25 .description = "Implements RV64",
26 .dependencies = 0,26 .dependencies = featureSet(&[_]Feature{}),
27 };27 };
28 result[@enumToInt(Feature.a)] = .{28 result[@enumToInt(Feature.a)] = .{
29 .index = @enumToInt(Feature.a),29 .index = @enumToInt(Feature.a),
30 .name = @tagName(Feature.a),30 .name = @tagName(Feature.a),
31 .llvm_name = "a",31 .llvm_name = "a",
32 .description = "'A' (Atomic Instructions)",32 .description = "'A' (Atomic Instructions)",
33 .dependencies = 0,33 .dependencies = featureSet(&[_]Feature{}),
34 };34 };
35 result[@enumToInt(Feature.c)] = .{35 result[@enumToInt(Feature.c)] = .{
36 .index = @enumToInt(Feature.c),36 .index = @enumToInt(Feature.c),
37 .name = @tagName(Feature.c),37 .name = @tagName(Feature.c),
38 .llvm_name = "c",38 .llvm_name = "c",
39 .description = "'C' (Compressed Instructions)",39 .description = "'C' (Compressed Instructions)",
40 .dependencies = 0,40 .dependencies = featureSet(&[_]Feature{}),
41 };41 };
42 result[@enumToInt(Feature.d)] = .{42 result[@enumToInt(Feature.d)] = .{
43 .index = @enumToInt(Feature.d),43 .index = @enumToInt(Feature.d),
...@@ -53,28 +53,28 @@ pub const all_features = blk: {...@@ -53,28 +53,28 @@ pub const all_features = blk: {
53 .name = @tagName(Feature.e),53 .name = @tagName(Feature.e),
54 .llvm_name = "e",54 .llvm_name = "e",
55 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",55 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
56 .dependencies = 0,56 .dependencies = featureSet(&[_]Feature{}),
57 };57 };
58 result[@enumToInt(Feature.f)] = .{58 result[@enumToInt(Feature.f)] = .{
59 .index = @enumToInt(Feature.f),59 .index = @enumToInt(Feature.f),
60 .name = @tagName(Feature.f),60 .name = @tagName(Feature.f),
61 .llvm_name = "f",61 .llvm_name = "f",
62 .description = "'F' (Single-Precision Floating-Point)",62 .description = "'F' (Single-Precision Floating-Point)",
63 .dependencies = 0,63 .dependencies = featureSet(&[_]Feature{}),
64 };64 };
65 result[@enumToInt(Feature.m)] = .{65 result[@enumToInt(Feature.m)] = .{
66 .index = @enumToInt(Feature.m),66 .index = @enumToInt(Feature.m),
67 .name = @tagName(Feature.m),67 .name = @tagName(Feature.m),
68 .llvm_name = "m",68 .llvm_name = "m",
69 .description = "'M' (Integer Multiplication and Division)",69 .description = "'M' (Integer Multiplication and Division)",
70 .dependencies = 0,70 .dependencies = featureSet(&[_]Feature{}),
71 };71 };
72 result[@enumToInt(Feature.relax)] = .{72 result[@enumToInt(Feature.relax)] = .{
73 .index = @enumToInt(Feature.relax),73 .index = @enumToInt(Feature.relax),
74 .name = @tagName(Feature.relax),74 .name = @tagName(Feature.relax),
75 .llvm_name = "relax",75 .llvm_name = "relax",
76 .description = "Enable Linker relaxation.",76 .description = "Enable Linker relaxation.",
77 .dependencies = 0,77 .dependencies = featureSet(&[_]Feature{}),
78 };78 };
79 break :blk result;79 break :blk result;
80};80};
...@@ -83,7 +83,7 @@ pub const cpu = struct {...@@ -83,7 +83,7 @@ pub const cpu = struct {
83 pub const generic_rv32 = Cpu{83 pub const generic_rv32 = Cpu{
84 .name = "generic_rv32",84 .name = "generic_rv32",
85 .llvm_name = "generic-rv32",85 .llvm_name = "generic-rv32",
86 .features = 0,86 .features = featureSet(&[_]Feature{}),
87 };87 };
88 pub const generic_rv64 = Cpu{88 pub const generic_rv64 = Cpu{
89 .name = "generic_rv64",89 .name = "generic_rv64",
lib/std/target/sparc.zig+29-29
...@@ -27,140 +27,140 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -27,140 +27,140 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);30 std.debug.assert(len <= Cpu.Feature.Set.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),33 .index = @enumToInt(Feature.deprecated_v8),
34 .name = @tagName(Feature.deprecated_v8),34 .name = @tagName(Feature.deprecated_v8),
35 .llvm_name = "deprecated-v8",35 .llvm_name = "deprecated-v8",
36 .description = "Enable deprecated V8 instructions in V9 mode",36 .description = "Enable deprecated V8 instructions in V9 mode",
37 .dependencies = 0,37 .dependencies = featureSet(&[_]Feature{}),
38 };38 };
39 result[@enumToInt(Feature.detectroundchange)] = .{39 result[@enumToInt(Feature.detectroundchange)] = .{
40 .index = @enumToInt(Feature.detectroundchange),40 .index = @enumToInt(Feature.detectroundchange),
41 .name = @tagName(Feature.detectroundchange),41 .name = @tagName(Feature.detectroundchange),
42 .llvm_name = "detectroundchange",42 .llvm_name = "detectroundchange",
43 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",43 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",
44 .dependencies = 0,44 .dependencies = featureSet(&[_]Feature{}),
45 };45 };
46 result[@enumToInt(Feature.fixallfdivsqrt)] = .{46 result[@enumToInt(Feature.fixallfdivsqrt)] = .{
47 .index = @enumToInt(Feature.fixallfdivsqrt),47 .index = @enumToInt(Feature.fixallfdivsqrt),
48 .name = @tagName(Feature.fixallfdivsqrt),48 .name = @tagName(Feature.fixallfdivsqrt),
49 .llvm_name = "fixallfdivsqrt",49 .llvm_name = "fixallfdivsqrt",
50 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",50 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
51 .dependencies = 0,51 .dependencies = featureSet(&[_]Feature{}),
52 };52 };
53 result[@enumToInt(Feature.hard_quad_float)] = .{53 result[@enumToInt(Feature.hard_quad_float)] = .{
54 .index = @enumToInt(Feature.hard_quad_float),54 .index = @enumToInt(Feature.hard_quad_float),
55 .name = @tagName(Feature.hard_quad_float),55 .name = @tagName(Feature.hard_quad_float),
56 .llvm_name = "hard-quad-float",56 .llvm_name = "hard-quad-float",
57 .description = "Enable quad-word floating point instructions",57 .description = "Enable quad-word floating point instructions",
58 .dependencies = 0,58 .dependencies = featureSet(&[_]Feature{}),
59 };59 };
60 result[@enumToInt(Feature.hasleoncasa)] = .{60 result[@enumToInt(Feature.hasleoncasa)] = .{
61 .index = @enumToInt(Feature.hasleoncasa),61 .index = @enumToInt(Feature.hasleoncasa),
62 .name = @tagName(Feature.hasleoncasa),62 .name = @tagName(Feature.hasleoncasa),
63 .llvm_name = "hasleoncasa",63 .llvm_name = "hasleoncasa",
64 .description = "Enable CASA instruction for LEON3 and LEON4 processors",64 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
65 .dependencies = 0,65 .dependencies = featureSet(&[_]Feature{}),
66 };66 };
67 result[@enumToInt(Feature.hasumacsmac)] = .{67 result[@enumToInt(Feature.hasumacsmac)] = .{
68 .index = @enumToInt(Feature.hasumacsmac),68 .index = @enumToInt(Feature.hasumacsmac),
69 .name = @tagName(Feature.hasumacsmac),69 .name = @tagName(Feature.hasumacsmac),
70 .llvm_name = "hasumacsmac",70 .llvm_name = "hasumacsmac",
71 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",71 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
72 .dependencies = 0,72 .dependencies = featureSet(&[_]Feature{}),
73 };73 };
74 result[@enumToInt(Feature.insertnopload)] = .{74 result[@enumToInt(Feature.insertnopload)] = .{
75 .index = @enumToInt(Feature.insertnopload),75 .index = @enumToInt(Feature.insertnopload),
76 .name = @tagName(Feature.insertnopload),76 .name = @tagName(Feature.insertnopload),
77 .llvm_name = "insertnopload",77 .llvm_name = "insertnopload",
78 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",78 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",
79 .dependencies = 0,79 .dependencies = featureSet(&[_]Feature{}),
80 };80 };
81 result[@enumToInt(Feature.leon)] = .{81 result[@enumToInt(Feature.leon)] = .{
82 .index = @enumToInt(Feature.leon),82 .index = @enumToInt(Feature.leon),
83 .name = @tagName(Feature.leon),83 .name = @tagName(Feature.leon),
84 .llvm_name = "leon",84 .llvm_name = "leon",
85 .description = "Enable LEON extensions",85 .description = "Enable LEON extensions",
86 .dependencies = 0,86 .dependencies = featureSet(&[_]Feature{}),
87 };87 };
88 result[@enumToInt(Feature.leoncyclecounter)] = .{88 result[@enumToInt(Feature.leoncyclecounter)] = .{
89 .index = @enumToInt(Feature.leoncyclecounter),89 .index = @enumToInt(Feature.leoncyclecounter),
90 .name = @tagName(Feature.leoncyclecounter),90 .name = @tagName(Feature.leoncyclecounter),
91 .llvm_name = "leoncyclecounter",91 .llvm_name = "leoncyclecounter",
92 .description = "Use the Leon cycle counter register",92 .description = "Use the Leon cycle counter register",
93 .dependencies = 0,93 .dependencies = featureSet(&[_]Feature{}),
94 };94 };
95 result[@enumToInt(Feature.leonpwrpsr)] = .{95 result[@enumToInt(Feature.leonpwrpsr)] = .{
96 .index = @enumToInt(Feature.leonpwrpsr),96 .index = @enumToInt(Feature.leonpwrpsr),
97 .name = @tagName(Feature.leonpwrpsr),97 .name = @tagName(Feature.leonpwrpsr),
98 .llvm_name = "leonpwrpsr",98 .llvm_name = "leonpwrpsr",
99 .description = "Enable the PWRPSR instruction",99 .description = "Enable the PWRPSR instruction",
100 .dependencies = 0,100 .dependencies = featureSet(&[_]Feature{}),
101 };101 };
102 result[@enumToInt(Feature.no_fmuls)] = .{102 result[@enumToInt(Feature.no_fmuls)] = .{
103 .index = @enumToInt(Feature.no_fmuls),103 .index = @enumToInt(Feature.no_fmuls),
104 .name = @tagName(Feature.no_fmuls),104 .name = @tagName(Feature.no_fmuls),
105 .llvm_name = "no-fmuls",105 .llvm_name = "no-fmuls",
106 .description = "Disable the fmuls instruction.",106 .description = "Disable the fmuls instruction.",
107 .dependencies = 0,107 .dependencies = featureSet(&[_]Feature{}),
108 };108 };
109 result[@enumToInt(Feature.no_fsmuld)] = .{109 result[@enumToInt(Feature.no_fsmuld)] = .{
110 .index = @enumToInt(Feature.no_fsmuld),110 .index = @enumToInt(Feature.no_fsmuld),
111 .name = @tagName(Feature.no_fsmuld),111 .name = @tagName(Feature.no_fsmuld),
112 .llvm_name = "no-fsmuld",112 .llvm_name = "no-fsmuld",
113 .description = "Disable the fsmuld instruction.",113 .description = "Disable the fsmuld instruction.",
114 .dependencies = 0,114 .dependencies = featureSet(&[_]Feature{}),
115 };115 };
116 result[@enumToInt(Feature.popc)] = .{116 result[@enumToInt(Feature.popc)] = .{
117 .index = @enumToInt(Feature.popc),117 .index = @enumToInt(Feature.popc),
118 .name = @tagName(Feature.popc),118 .name = @tagName(Feature.popc),
119 .llvm_name = "popc",119 .llvm_name = "popc",
120 .description = "Use the popc (population count) instruction",120 .description = "Use the popc (population count) instruction",
121 .dependencies = 0,121 .dependencies = featureSet(&[_]Feature{}),
122 };122 };
123 result[@enumToInt(Feature.soft_float)] = .{123 result[@enumToInt(Feature.soft_float)] = .{
124 .index = @enumToInt(Feature.soft_float),124 .index = @enumToInt(Feature.soft_float),
125 .name = @tagName(Feature.soft_float),125 .name = @tagName(Feature.soft_float),
126 .llvm_name = "soft-float",126 .llvm_name = "soft-float",
127 .description = "Use software emulation for floating point",127 .description = "Use software emulation for floating point",
128 .dependencies = 0,128 .dependencies = featureSet(&[_]Feature{}),
129 };129 };
130 result[@enumToInt(Feature.soft_mul_div)] = .{130 result[@enumToInt(Feature.soft_mul_div)] = .{
131 .index = @enumToInt(Feature.soft_mul_div),131 .index = @enumToInt(Feature.soft_mul_div),
132 .name = @tagName(Feature.soft_mul_div),132 .name = @tagName(Feature.soft_mul_div),
133 .llvm_name = "soft-mul-div",133 .llvm_name = "soft-mul-div",
134 .description = "Use software emulation for integer multiply and divide",134 .description = "Use software emulation for integer multiply and divide",
135 .dependencies = 0,135 .dependencies = featureSet(&[_]Feature{}),
136 };136 };
137 result[@enumToInt(Feature.v9)] = .{137 result[@enumToInt(Feature.v9)] = .{
138 .index = @enumToInt(Feature.v9),138 .index = @enumToInt(Feature.v9),
139 .name = @tagName(Feature.v9),139 .name = @tagName(Feature.v9),
140 .llvm_name = "v9",140 .llvm_name = "v9",
141 .description = "Enable SPARC-V9 instructions",141 .description = "Enable SPARC-V9 instructions",
142 .dependencies = 0,142 .dependencies = featureSet(&[_]Feature{}),
143 };143 };
144 result[@enumToInt(Feature.vis)] = .{144 result[@enumToInt(Feature.vis)] = .{
145 .index = @enumToInt(Feature.vis),145 .index = @enumToInt(Feature.vis),
146 .name = @tagName(Feature.vis),146 .name = @tagName(Feature.vis),
147 .llvm_name = "vis",147 .llvm_name = "vis",
148 .description = "Enable UltraSPARC Visual Instruction Set extensions",148 .description = "Enable UltraSPARC Visual Instruction Set extensions",
149 .dependencies = 0,149 .dependencies = featureSet(&[_]Feature{}),
150 };150 };
151 result[@enumToInt(Feature.vis2)] = .{151 result[@enumToInt(Feature.vis2)] = .{
152 .index = @enumToInt(Feature.vis2),152 .index = @enumToInt(Feature.vis2),
153 .name = @tagName(Feature.vis2),153 .name = @tagName(Feature.vis2),
154 .llvm_name = "vis2",154 .llvm_name = "vis2",
155 .description = "Enable Visual Instruction Set extensions II",155 .description = "Enable Visual Instruction Set extensions II",
156 .dependencies = 0,156 .dependencies = featureSet(&[_]Feature{}),
157 };157 };
158 result[@enumToInt(Feature.vis3)] = .{158 result[@enumToInt(Feature.vis3)] = .{
159 .index = @enumToInt(Feature.vis3),159 .index = @enumToInt(Feature.vis3),
160 .name = @tagName(Feature.vis3),160 .name = @tagName(Feature.vis3),
161 .llvm_name = "vis3",161 .llvm_name = "vis3",
162 .description = "Enable Visual Instruction Set extensions III",162 .description = "Enable Visual Instruction Set extensions III",
163 .dependencies = 0,163 .dependencies = featureSet(&[_]Feature{}),
164 };164 };
165 break :blk result;165 break :blk result;
166};166};
...@@ -185,12 +185,12 @@ pub const cpu = struct {...@@ -185,12 +185,12 @@ pub const cpu = struct {
185 pub const f934 = Cpu{185 pub const f934 = Cpu{
186 .name = "f934",186 .name = "f934",
187 .llvm_name = "f934",187 .llvm_name = "f934",
188 .features = 0,188 .features = featureSet(&[_]Feature{}),
189 };189 };
190 pub const generic = Cpu{190 pub const generic = Cpu{
191 .name = "generic",191 .name = "generic",
192 .llvm_name = "generic",192 .llvm_name = "generic",
193 .features = 0,193 .features = featureSet(&[_]Feature{}),
194 };194 };
195 pub const gr712rc = Cpu{195 pub const gr712rc = Cpu{
196 .name = "gr712rc",196 .name = "gr712rc",
...@@ -214,7 +214,7 @@ pub const cpu = struct {...@@ -214,7 +214,7 @@ pub const cpu = struct {
214 pub const hypersparc = Cpu{214 pub const hypersparc = Cpu{
215 .name = "hypersparc",215 .name = "hypersparc",
216 .llvm_name = "hypersparc",216 .llvm_name = "hypersparc",
217 .features = 0,217 .features = featureSet(&[_]Feature{}),
218 };218 };
219 pub const leon2 = Cpu{219 pub const leon2 = Cpu{
220 .name = "leon2",220 .name = "leon2",
...@@ -407,27 +407,27 @@ pub const cpu = struct {...@@ -407,27 +407,27 @@ pub const cpu = struct {
407 pub const sparclet = Cpu{407 pub const sparclet = Cpu{
408 .name = "sparclet",408 .name = "sparclet",
409 .llvm_name = "sparclet",409 .llvm_name = "sparclet",
410 .features = 0,410 .features = featureSet(&[_]Feature{}),
411 };411 };
412 pub const sparclite = Cpu{412 pub const sparclite = Cpu{
413 .name = "sparclite",413 .name = "sparclite",
414 .llvm_name = "sparclite",414 .llvm_name = "sparclite",
415 .features = 0,415 .features = featureSet(&[_]Feature{}),
416 };416 };
417 pub const sparclite86x = Cpu{417 pub const sparclite86x = Cpu{
418 .name = "sparclite86x",418 .name = "sparclite86x",
419 .llvm_name = "sparclite86x",419 .llvm_name = "sparclite86x",
420 .features = 0,420 .features = featureSet(&[_]Feature{}),
421 };421 };
422 pub const supersparc = Cpu{422 pub const supersparc = Cpu{
423 .name = "supersparc",423 .name = "supersparc",
424 .llvm_name = "supersparc",424 .llvm_name = "supersparc",
425 .features = 0,425 .features = featureSet(&[_]Feature{}),
426 };426 };
427 pub const tsc701 = Cpu{427 pub const tsc701 = Cpu{
428 .name = "tsc701",428 .name = "tsc701",
429 .llvm_name = "tsc701",429 .llvm_name = "tsc701",
430 .features = 0,430 .features = featureSet(&[_]Feature{}),
431 };431 };
432 pub const ultrasparc = Cpu{432 pub const ultrasparc = Cpu{
433 .name = "ultrasparc",433 .name = "ultrasparc",
...@@ -470,7 +470,7 @@ pub const cpu = struct {...@@ -470,7 +470,7 @@ pub const cpu = struct {
470 pub const v8 = Cpu{470 pub const v8 = Cpu{
471 .name = "v8",471 .name = "v8",
472 .llvm_name = "v8",472 .llvm_name = "v8",
473 .features = 0,473 .features = featureSet(&[_]Feature{}),
474 };474 };
475 pub const v9 = Cpu{475 pub const v9 = Cpu{
476 .name = "v9",476 .name = "v9",
lib/std/target/systemz.zig+39-39
...@@ -43,252 +43,252 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -43,252 +43,252 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);46 std.debug.assert(len <= Cpu.Feature.Set.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),49 .index = @enumToInt(Feature.deflate_conversion),
50 .name = @tagName(Feature.deflate_conversion),50 .name = @tagName(Feature.deflate_conversion),
51 .llvm_name = "deflate-conversion",51 .llvm_name = "deflate-conversion",
52 .description = "Assume that the deflate-conversion facility is installed",52 .description = "Assume that the deflate-conversion facility is installed",
53 .dependencies = 0,53 .dependencies = featureSet(&[_]Feature{}),
54 };54 };
55 result[@enumToInt(Feature.dfp_packed_conversion)] = .{55 result[@enumToInt(Feature.dfp_packed_conversion)] = .{
56 .index = @enumToInt(Feature.dfp_packed_conversion),56 .index = @enumToInt(Feature.dfp_packed_conversion),
57 .name = @tagName(Feature.dfp_packed_conversion),57 .name = @tagName(Feature.dfp_packed_conversion),
58 .llvm_name = "dfp-packed-conversion",58 .llvm_name = "dfp-packed-conversion",
59 .description = "Assume that the DFP packed-conversion facility is installed",59 .description = "Assume that the DFP packed-conversion facility is installed",
60 .dependencies = 0,60 .dependencies = featureSet(&[_]Feature{}),
61 };61 };
62 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{62 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{
63 .index = @enumToInt(Feature.dfp_zoned_conversion),63 .index = @enumToInt(Feature.dfp_zoned_conversion),
64 .name = @tagName(Feature.dfp_zoned_conversion),64 .name = @tagName(Feature.dfp_zoned_conversion),
65 .llvm_name = "dfp-zoned-conversion",65 .llvm_name = "dfp-zoned-conversion",
66 .description = "Assume that the DFP zoned-conversion facility is installed",66 .description = "Assume that the DFP zoned-conversion facility is installed",
67 .dependencies = 0,67 .dependencies = featureSet(&[_]Feature{}),
68 };68 };
69 result[@enumToInt(Feature.distinct_ops)] = .{69 result[@enumToInt(Feature.distinct_ops)] = .{
70 .index = @enumToInt(Feature.distinct_ops),70 .index = @enumToInt(Feature.distinct_ops),
71 .name = @tagName(Feature.distinct_ops),71 .name = @tagName(Feature.distinct_ops),
72 .llvm_name = "distinct-ops",72 .llvm_name = "distinct-ops",
73 .description = "Assume that the distinct-operands facility is installed",73 .description = "Assume that the distinct-operands facility is installed",
74 .dependencies = 0,74 .dependencies = featureSet(&[_]Feature{}),
75 };75 };
76 result[@enumToInt(Feature.enhanced_dat_2)] = .{76 result[@enumToInt(Feature.enhanced_dat_2)] = .{
77 .index = @enumToInt(Feature.enhanced_dat_2),77 .index = @enumToInt(Feature.enhanced_dat_2),
78 .name = @tagName(Feature.enhanced_dat_2),78 .name = @tagName(Feature.enhanced_dat_2),
79 .llvm_name = "enhanced-dat-2",79 .llvm_name = "enhanced-dat-2",
80 .description = "Assume that the enhanced-DAT facility 2 is installed",80 .description = "Assume that the enhanced-DAT facility 2 is installed",
81 .dependencies = 0,81 .dependencies = featureSet(&[_]Feature{}),
82 };82 };
83 result[@enumToInt(Feature.enhanced_sort)] = .{83 result[@enumToInt(Feature.enhanced_sort)] = .{
84 .index = @enumToInt(Feature.enhanced_sort),84 .index = @enumToInt(Feature.enhanced_sort),
85 .name = @tagName(Feature.enhanced_sort),85 .name = @tagName(Feature.enhanced_sort),
86 .llvm_name = "enhanced-sort",86 .llvm_name = "enhanced-sort",
87 .description = "Assume that the enhanced-sort facility is installed",87 .description = "Assume that the enhanced-sort facility is installed",
88 .dependencies = 0,88 .dependencies = featureSet(&[_]Feature{}),
89 };89 };
90 result[@enumToInt(Feature.execution_hint)] = .{90 result[@enumToInt(Feature.execution_hint)] = .{
91 .index = @enumToInt(Feature.execution_hint),91 .index = @enumToInt(Feature.execution_hint),
92 .name = @tagName(Feature.execution_hint),92 .name = @tagName(Feature.execution_hint),
93 .llvm_name = "execution-hint",93 .llvm_name = "execution-hint",
94 .description = "Assume that the execution-hint facility is installed",94 .description = "Assume that the execution-hint facility is installed",
95 .dependencies = 0,95 .dependencies = featureSet(&[_]Feature{}),
96 };96 };
97 result[@enumToInt(Feature.fast_serialization)] = .{97 result[@enumToInt(Feature.fast_serialization)] = .{
98 .index = @enumToInt(Feature.fast_serialization),98 .index = @enumToInt(Feature.fast_serialization),
99 .name = @tagName(Feature.fast_serialization),99 .name = @tagName(Feature.fast_serialization),
100 .llvm_name = "fast-serialization",100 .llvm_name = "fast-serialization",
101 .description = "Assume that the fast-serialization facility is installed",101 .description = "Assume that the fast-serialization facility is installed",
102 .dependencies = 0,102 .dependencies = featureSet(&[_]Feature{}),
103 };103 };
104 result[@enumToInt(Feature.fp_extension)] = .{104 result[@enumToInt(Feature.fp_extension)] = .{
105 .index = @enumToInt(Feature.fp_extension),105 .index = @enumToInt(Feature.fp_extension),
106 .name = @tagName(Feature.fp_extension),106 .name = @tagName(Feature.fp_extension),
107 .llvm_name = "fp-extension",107 .llvm_name = "fp-extension",
108 .description = "Assume that the floating-point extension facility is installed",108 .description = "Assume that the floating-point extension facility is installed",
109 .dependencies = 0,109 .dependencies = featureSet(&[_]Feature{}),
110 };110 };
111 result[@enumToInt(Feature.guarded_storage)] = .{111 result[@enumToInt(Feature.guarded_storage)] = .{
112 .index = @enumToInt(Feature.guarded_storage),112 .index = @enumToInt(Feature.guarded_storage),
113 .name = @tagName(Feature.guarded_storage),113 .name = @tagName(Feature.guarded_storage),
114 .llvm_name = "guarded-storage",114 .llvm_name = "guarded-storage",
115 .description = "Assume that the guarded-storage facility is installed",115 .description = "Assume that the guarded-storage facility is installed",
116 .dependencies = 0,116 .dependencies = featureSet(&[_]Feature{}),
117 };117 };
118 result[@enumToInt(Feature.high_word)] = .{118 result[@enumToInt(Feature.high_word)] = .{
119 .index = @enumToInt(Feature.high_word),119 .index = @enumToInt(Feature.high_word),
120 .name = @tagName(Feature.high_word),120 .name = @tagName(Feature.high_word),
121 .llvm_name = "high-word",121 .llvm_name = "high-word",
122 .description = "Assume that the high-word facility is installed",122 .description = "Assume that the high-word facility is installed",
123 .dependencies = 0,123 .dependencies = featureSet(&[_]Feature{}),
124 };124 };
125 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{125 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{
126 .index = @enumToInt(Feature.insert_reference_bits_multiple),126 .index = @enumToInt(Feature.insert_reference_bits_multiple),
127 .name = @tagName(Feature.insert_reference_bits_multiple),127 .name = @tagName(Feature.insert_reference_bits_multiple),
128 .llvm_name = "insert-reference-bits-multiple",128 .llvm_name = "insert-reference-bits-multiple",
129 .description = "Assume that the insert-reference-bits-multiple facility is installed",129 .description = "Assume that the insert-reference-bits-multiple facility is installed",
130 .dependencies = 0,130 .dependencies = featureSet(&[_]Feature{}),
131 };131 };
132 result[@enumToInt(Feature.interlocked_access1)] = .{132 result[@enumToInt(Feature.interlocked_access1)] = .{
133 .index = @enumToInt(Feature.interlocked_access1),133 .index = @enumToInt(Feature.interlocked_access1),
134 .name = @tagName(Feature.interlocked_access1),134 .name = @tagName(Feature.interlocked_access1),
135 .llvm_name = "interlocked-access1",135 .llvm_name = "interlocked-access1",
136 .description = "Assume that interlocked-access facility 1 is installed",136 .description = "Assume that interlocked-access facility 1 is installed",
137 .dependencies = 0,137 .dependencies = featureSet(&[_]Feature{}),
138 };138 };
139 result[@enumToInt(Feature.load_and_trap)] = .{139 result[@enumToInt(Feature.load_and_trap)] = .{
140 .index = @enumToInt(Feature.load_and_trap),140 .index = @enumToInt(Feature.load_and_trap),
141 .name = @tagName(Feature.load_and_trap),141 .name = @tagName(Feature.load_and_trap),
142 .llvm_name = "load-and-trap",142 .llvm_name = "load-and-trap",
143 .description = "Assume that the load-and-trap facility is installed",143 .description = "Assume that the load-and-trap facility is installed",
144 .dependencies = 0,144 .dependencies = featureSet(&[_]Feature{}),
145 };145 };
146 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{146 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{
147 .index = @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),148 .name = @tagName(Feature.load_and_zero_rightmost_byte),
149 .llvm_name = "load-and-zero-rightmost-byte",149 .llvm_name = "load-and-zero-rightmost-byte",
150 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",150 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
151 .dependencies = 0,151 .dependencies = featureSet(&[_]Feature{}),
152 };152 };
153 result[@enumToInt(Feature.load_store_on_cond)] = .{153 result[@enumToInt(Feature.load_store_on_cond)] = .{
154 .index = @enumToInt(Feature.load_store_on_cond),154 .index = @enumToInt(Feature.load_store_on_cond),
155 .name = @tagName(Feature.load_store_on_cond),155 .name = @tagName(Feature.load_store_on_cond),
156 .llvm_name = "load-store-on-cond",156 .llvm_name = "load-store-on-cond",
157 .description = "Assume that the load/store-on-condition facility is installed",157 .description = "Assume that the load/store-on-condition facility is installed",
158 .dependencies = 0,158 .dependencies = featureSet(&[_]Feature{}),
159 };159 };
160 result[@enumToInt(Feature.load_store_on_cond_2)] = .{160 result[@enumToInt(Feature.load_store_on_cond_2)] = .{
161 .index = @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),162 .name = @tagName(Feature.load_store_on_cond_2),
163 .llvm_name = "load-store-on-cond-2",163 .llvm_name = "load-store-on-cond-2",
164 .description = "Assume that the load/store-on-condition facility 2 is installed",164 .description = "Assume that the load/store-on-condition facility 2 is installed",
165 .dependencies = 0,165 .dependencies = featureSet(&[_]Feature{}),
166 };166 };
167 result[@enumToInt(Feature.message_security_assist_extension3)] = .{167 result[@enumToInt(Feature.message_security_assist_extension3)] = .{
168 .index = @enumToInt(Feature.message_security_assist_extension3),168 .index = @enumToInt(Feature.message_security_assist_extension3),
169 .name = @tagName(Feature.message_security_assist_extension3),169 .name = @tagName(Feature.message_security_assist_extension3),
170 .llvm_name = "message-security-assist-extension3",170 .llvm_name = "message-security-assist-extension3",
171 .description = "Assume that the message-security-assist extension facility 3 is installed",171 .description = "Assume that the message-security-assist extension facility 3 is installed",
172 .dependencies = 0,172 .dependencies = featureSet(&[_]Feature{}),
173 };173 };
174 result[@enumToInt(Feature.message_security_assist_extension4)] = .{174 result[@enumToInt(Feature.message_security_assist_extension4)] = .{
175 .index = @enumToInt(Feature.message_security_assist_extension4),175 .index = @enumToInt(Feature.message_security_assist_extension4),
176 .name = @tagName(Feature.message_security_assist_extension4),176 .name = @tagName(Feature.message_security_assist_extension4),
177 .llvm_name = "message-security-assist-extension4",177 .llvm_name = "message-security-assist-extension4",
178 .description = "Assume that the message-security-assist extension facility 4 is installed",178 .description = "Assume that the message-security-assist extension facility 4 is installed",
179 .dependencies = 0,179 .dependencies = featureSet(&[_]Feature{}),
180 };180 };
181 result[@enumToInt(Feature.message_security_assist_extension5)] = .{181 result[@enumToInt(Feature.message_security_assist_extension5)] = .{
182 .index = @enumToInt(Feature.message_security_assist_extension5),182 .index = @enumToInt(Feature.message_security_assist_extension5),
183 .name = @tagName(Feature.message_security_assist_extension5),183 .name = @tagName(Feature.message_security_assist_extension5),
184 .llvm_name = "message-security-assist-extension5",184 .llvm_name = "message-security-assist-extension5",
185 .description = "Assume that the message-security-assist extension facility 5 is installed",185 .description = "Assume that the message-security-assist extension facility 5 is installed",
186 .dependencies = 0,186 .dependencies = featureSet(&[_]Feature{}),
187 };187 };
188 result[@enumToInt(Feature.message_security_assist_extension7)] = .{188 result[@enumToInt(Feature.message_security_assist_extension7)] = .{
189 .index = @enumToInt(Feature.message_security_assist_extension7),189 .index = @enumToInt(Feature.message_security_assist_extension7),
190 .name = @tagName(Feature.message_security_assist_extension7),190 .name = @tagName(Feature.message_security_assist_extension7),
191 .llvm_name = "message-security-assist-extension7",191 .llvm_name = "message-security-assist-extension7",
192 .description = "Assume that the message-security-assist extension facility 7 is installed",192 .description = "Assume that the message-security-assist extension facility 7 is installed",
193 .dependencies = 0,193 .dependencies = featureSet(&[_]Feature{}),
194 };194 };
195 result[@enumToInt(Feature.message_security_assist_extension8)] = .{195 result[@enumToInt(Feature.message_security_assist_extension8)] = .{
196 .index = @enumToInt(Feature.message_security_assist_extension8),196 .index = @enumToInt(Feature.message_security_assist_extension8),
197 .name = @tagName(Feature.message_security_assist_extension8),197 .name = @tagName(Feature.message_security_assist_extension8),
198 .llvm_name = "message-security-assist-extension8",198 .llvm_name = "message-security-assist-extension8",
199 .description = "Assume that the message-security-assist extension facility 8 is installed",199 .description = "Assume that the message-security-assist extension facility 8 is installed",
200 .dependencies = 0,200 .dependencies = featureSet(&[_]Feature{}),
201 };201 };
202 result[@enumToInt(Feature.message_security_assist_extension9)] = .{202 result[@enumToInt(Feature.message_security_assist_extension9)] = .{
203 .index = @enumToInt(Feature.message_security_assist_extension9),203 .index = @enumToInt(Feature.message_security_assist_extension9),
204 .name = @tagName(Feature.message_security_assist_extension9),204 .name = @tagName(Feature.message_security_assist_extension9),
205 .llvm_name = "message-security-assist-extension9",205 .llvm_name = "message-security-assist-extension9",
206 .description = "Assume that the message-security-assist extension facility 9 is installed",206 .description = "Assume that the message-security-assist extension facility 9 is installed",
207 .dependencies = 0,207 .dependencies = featureSet(&[_]Feature{}),
208 };208 };
209 result[@enumToInt(Feature.miscellaneous_extensions)] = .{209 result[@enumToInt(Feature.miscellaneous_extensions)] = .{
210 .index = @enumToInt(Feature.miscellaneous_extensions),210 .index = @enumToInt(Feature.miscellaneous_extensions),
211 .name = @tagName(Feature.miscellaneous_extensions),211 .name = @tagName(Feature.miscellaneous_extensions),
212 .llvm_name = "miscellaneous-extensions",212 .llvm_name = "miscellaneous-extensions",
213 .description = "Assume that the miscellaneous-extensions facility is installed",213 .description = "Assume that the miscellaneous-extensions facility is installed",
214 .dependencies = 0,214 .dependencies = featureSet(&[_]Feature{}),
215 };215 };
216 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{216 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{
217 .index = @enumToInt(Feature.miscellaneous_extensions_2),217 .index = @enumToInt(Feature.miscellaneous_extensions_2),
218 .name = @tagName(Feature.miscellaneous_extensions_2),218 .name = @tagName(Feature.miscellaneous_extensions_2),
219 .llvm_name = "miscellaneous-extensions-2",219 .llvm_name = "miscellaneous-extensions-2",
220 .description = "Assume that the miscellaneous-extensions facility 2 is installed",220 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
221 .dependencies = 0,221 .dependencies = featureSet(&[_]Feature{}),
222 };222 };
223 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{223 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{
224 .index = @enumToInt(Feature.miscellaneous_extensions_3),224 .index = @enumToInt(Feature.miscellaneous_extensions_3),
225 .name = @tagName(Feature.miscellaneous_extensions_3),225 .name = @tagName(Feature.miscellaneous_extensions_3),
226 .llvm_name = "miscellaneous-extensions-3",226 .llvm_name = "miscellaneous-extensions-3",
227 .description = "Assume that the miscellaneous-extensions facility 3 is installed",227 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
228 .dependencies = 0,228 .dependencies = featureSet(&[_]Feature{}),
229 };229 };
230 result[@enumToInt(Feature.population_count)] = .{230 result[@enumToInt(Feature.population_count)] = .{
231 .index = @enumToInt(Feature.population_count),231 .index = @enumToInt(Feature.population_count),
232 .name = @tagName(Feature.population_count),232 .name = @tagName(Feature.population_count),
233 .llvm_name = "population-count",233 .llvm_name = "population-count",
234 .description = "Assume that the population-count facility is installed",234 .description = "Assume that the population-count facility is installed",
235 .dependencies = 0,235 .dependencies = featureSet(&[_]Feature{}),
236 };236 };
237 result[@enumToInt(Feature.processor_assist)] = .{237 result[@enumToInt(Feature.processor_assist)] = .{
238 .index = @enumToInt(Feature.processor_assist),238 .index = @enumToInt(Feature.processor_assist),
239 .name = @tagName(Feature.processor_assist),239 .name = @tagName(Feature.processor_assist),
240 .llvm_name = "processor-assist",240 .llvm_name = "processor-assist",
241 .description = "Assume that the processor-assist facility is installed",241 .description = "Assume that the processor-assist facility is installed",
242 .dependencies = 0,242 .dependencies = featureSet(&[_]Feature{}),
243 };243 };
244 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{244 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
245 .index = @enumToInt(Feature.reset_reference_bits_multiple),245 .index = @enumToInt(Feature.reset_reference_bits_multiple),
246 .name = @tagName(Feature.reset_reference_bits_multiple),246 .name = @tagName(Feature.reset_reference_bits_multiple),
247 .llvm_name = "reset-reference-bits-multiple",247 .llvm_name = "reset-reference-bits-multiple",
248 .description = "Assume that the reset-reference-bits-multiple facility is installed",248 .description = "Assume that the reset-reference-bits-multiple facility is installed",
249 .dependencies = 0,249 .dependencies = featureSet(&[_]Feature{}),
250 };250 };
251 result[@enumToInt(Feature.transactional_execution)] = .{251 result[@enumToInt(Feature.transactional_execution)] = .{
252 .index = @enumToInt(Feature.transactional_execution),252 .index = @enumToInt(Feature.transactional_execution),
253 .name = @tagName(Feature.transactional_execution),253 .name = @tagName(Feature.transactional_execution),
254 .llvm_name = "transactional-execution",254 .llvm_name = "transactional-execution",
255 .description = "Assume that the transactional-execution facility is installed",255 .description = "Assume that the transactional-execution facility is installed",
256 .dependencies = 0,256 .dependencies = featureSet(&[_]Feature{}),
257 };257 };
258 result[@enumToInt(Feature.vector)] = .{258 result[@enumToInt(Feature.vector)] = .{
259 .index = @enumToInt(Feature.vector),259 .index = @enumToInt(Feature.vector),
260 .name = @tagName(Feature.vector),260 .name = @tagName(Feature.vector),
261 .llvm_name = "vector",261 .llvm_name = "vector",
262 .description = "Assume that the vectory facility is installed",262 .description = "Assume that the vectory facility is installed",
263 .dependencies = 0,263 .dependencies = featureSet(&[_]Feature{}),
264 };264 };
265 result[@enumToInt(Feature.vector_enhancements_1)] = .{265 result[@enumToInt(Feature.vector_enhancements_1)] = .{
266 .index = @enumToInt(Feature.vector_enhancements_1),266 .index = @enumToInt(Feature.vector_enhancements_1),
267 .name = @tagName(Feature.vector_enhancements_1),267 .name = @tagName(Feature.vector_enhancements_1),
268 .llvm_name = "vector-enhancements-1",268 .llvm_name = "vector-enhancements-1",
269 .description = "Assume that the vector enhancements facility 1 is installed",269 .description = "Assume that the vector enhancements facility 1 is installed",
270 .dependencies = 0,270 .dependencies = featureSet(&[_]Feature{}),
271 };271 };
272 result[@enumToInt(Feature.vector_enhancements_2)] = .{272 result[@enumToInt(Feature.vector_enhancements_2)] = .{
273 .index = @enumToInt(Feature.vector_enhancements_2),273 .index = @enumToInt(Feature.vector_enhancements_2),
274 .name = @tagName(Feature.vector_enhancements_2),274 .name = @tagName(Feature.vector_enhancements_2),
275 .llvm_name = "vector-enhancements-2",275 .llvm_name = "vector-enhancements-2",
276 .description = "Assume that the vector enhancements facility 2 is installed",276 .description = "Assume that the vector enhancements facility 2 is installed",
277 .dependencies = 0,277 .dependencies = featureSet(&[_]Feature{}),
278 };278 };
279 result[@enumToInt(Feature.vector_packed_decimal)] = .{279 result[@enumToInt(Feature.vector_packed_decimal)] = .{
280 .index = @enumToInt(Feature.vector_packed_decimal),280 .index = @enumToInt(Feature.vector_packed_decimal),
281 .name = @tagName(Feature.vector_packed_decimal),281 .name = @tagName(Feature.vector_packed_decimal),
282 .llvm_name = "vector-packed-decimal",282 .llvm_name = "vector-packed-decimal",
283 .description = "Assume that the vector packed decimal facility is installed",283 .description = "Assume that the vector packed decimal facility is installed",
284 .dependencies = 0,284 .dependencies = featureSet(&[_]Feature{}),
285 };285 };
286 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{286 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{
287 .index = @enumToInt(Feature.vector_packed_decimal_enhancement),287 .index = @enumToInt(Feature.vector_packed_decimal_enhancement),
288 .name = @tagName(Feature.vector_packed_decimal_enhancement),288 .name = @tagName(Feature.vector_packed_decimal_enhancement),
289 .llvm_name = "vector-packed-decimal-enhancement",289 .llvm_name = "vector-packed-decimal-enhancement",
290 .description = "Assume that the vector packed decimal enhancement facility is installed",290 .description = "Assume that the vector packed decimal enhancement facility is installed",
291 .dependencies = 0,291 .dependencies = featureSet(&[_]Feature{}),
292 };292 };
293 break :blk result;293 break :blk result;
294};294};
...@@ -424,7 +424,7 @@ pub const cpu = struct {...@@ -424,7 +424,7 @@ pub const cpu = struct {
424 pub const arch8 = Cpu{424 pub const arch8 = Cpu{
425 .name = "arch8",425 .name = "arch8",
426 .llvm_name = "arch8",426 .llvm_name = "arch8",
427 .features = 0,427 .features = featureSet(&[_]Feature{}),
428 };428 };
429 pub const arch9 = Cpu{429 pub const arch9 = Cpu{
430 .name = "arch9",430 .name = "arch9",
...@@ -445,12 +445,12 @@ pub const cpu = struct {...@@ -445,12 +445,12 @@ pub const cpu = struct {
445 pub const generic = Cpu{445 pub const generic = Cpu{
446 .name = "generic",446 .name = "generic",
447 .llvm_name = "generic",447 .llvm_name = "generic",
448 .features = 0,448 .features = featureSet(&[_]Feature{}),
449 };449 };
450 pub const z10 = Cpu{450 pub const z10 = Cpu{
451 .name = "z10",451 .name = "z10",
452 .llvm_name = "z10",452 .llvm_name = "z10",
453 .features = 0,453 .features = featureSet(&[_]Feature{}),
454 };454 };
455 pub const z13 = Cpu{455 pub const z13 = Cpu{
456 .name = "z13",456 .name = "z13",
lib/std/target/wasm.zig+12-12
...@@ -18,70 +18,70 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -18,70 +18,70 @@ 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);21 std.debug.assert(len <= Cpu.Feature.Set.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),24 .index = @enumToInt(Feature.atomics),
25 .name = @tagName(Feature.atomics),25 .name = @tagName(Feature.atomics),
26 .llvm_name = "atomics",26 .llvm_name = "atomics",
27 .description = "Enable Atomics",27 .description = "Enable Atomics",
28 .dependencies = 0,28 .dependencies = featureSet(&[_]Feature{}),
29 };29 };
30 result[@enumToInt(Feature.bulk_memory)] = .{30 result[@enumToInt(Feature.bulk_memory)] = .{
31 .index = @enumToInt(Feature.bulk_memory),31 .index = @enumToInt(Feature.bulk_memory),
32 .name = @tagName(Feature.bulk_memory),32 .name = @tagName(Feature.bulk_memory),
33 .llvm_name = "bulk-memory",33 .llvm_name = "bulk-memory",
34 .description = "Enable bulk memory operations",34 .description = "Enable bulk memory operations",
35 .dependencies = 0,35 .dependencies = featureSet(&[_]Feature{}),
36 };36 };
37 result[@enumToInt(Feature.exception_handling)] = .{37 result[@enumToInt(Feature.exception_handling)] = .{
38 .index = @enumToInt(Feature.exception_handling),38 .index = @enumToInt(Feature.exception_handling),
39 .name = @tagName(Feature.exception_handling),39 .name = @tagName(Feature.exception_handling),
40 .llvm_name = "exception-handling",40 .llvm_name = "exception-handling",
41 .description = "Enable Wasm exception handling",41 .description = "Enable Wasm exception handling",
42 .dependencies = 0,42 .dependencies = featureSet(&[_]Feature{}),
43 };43 };
44 result[@enumToInt(Feature.multivalue)] = .{44 result[@enumToInt(Feature.multivalue)] = .{
45 .index = @enumToInt(Feature.multivalue),45 .index = @enumToInt(Feature.multivalue),
46 .name = @tagName(Feature.multivalue),46 .name = @tagName(Feature.multivalue),
47 .llvm_name = "multivalue",47 .llvm_name = "multivalue",
48 .description = "Enable multivalue blocks, instructions, and functions",48 .description = "Enable multivalue blocks, instructions, and functions",
49 .dependencies = 0,49 .dependencies = featureSet(&[_]Feature{}),
50 };50 };
51 result[@enumToInt(Feature.mutable_globals)] = .{51 result[@enumToInt(Feature.mutable_globals)] = .{
52 .index = @enumToInt(Feature.mutable_globals),52 .index = @enumToInt(Feature.mutable_globals),
53 .name = @tagName(Feature.mutable_globals),53 .name = @tagName(Feature.mutable_globals),
54 .llvm_name = "mutable-globals",54 .llvm_name = "mutable-globals",
55 .description = "Enable mutable globals",55 .description = "Enable mutable globals",
56 .dependencies = 0,56 .dependencies = featureSet(&[_]Feature{}),
57 };57 };
58 result[@enumToInt(Feature.nontrapping_fptoint)] = .{58 result[@enumToInt(Feature.nontrapping_fptoint)] = .{
59 .index = @enumToInt(Feature.nontrapping_fptoint),59 .index = @enumToInt(Feature.nontrapping_fptoint),
60 .name = @tagName(Feature.nontrapping_fptoint),60 .name = @tagName(Feature.nontrapping_fptoint),
61 .llvm_name = "nontrapping-fptoint",61 .llvm_name = "nontrapping-fptoint",
62 .description = "Enable non-trapping float-to-int conversion operators",62 .description = "Enable non-trapping float-to-int conversion operators",
63 .dependencies = 0,63 .dependencies = featureSet(&[_]Feature{}),
64 };64 };
65 result[@enumToInt(Feature.sign_ext)] = .{65 result[@enumToInt(Feature.sign_ext)] = .{
66 .index = @enumToInt(Feature.sign_ext),66 .index = @enumToInt(Feature.sign_ext),
67 .name = @tagName(Feature.sign_ext),67 .name = @tagName(Feature.sign_ext),
68 .llvm_name = "sign-ext",68 .llvm_name = "sign-ext",
69 .description = "Enable sign extension operators",69 .description = "Enable sign extension operators",
70 .dependencies = 0,70 .dependencies = featureSet(&[_]Feature{}),
71 };71 };
72 result[@enumToInt(Feature.simd128)] = .{72 result[@enumToInt(Feature.simd128)] = .{
73 .index = @enumToInt(Feature.simd128),73 .index = @enumToInt(Feature.simd128),
74 .name = @tagName(Feature.simd128),74 .name = @tagName(Feature.simd128),
75 .llvm_name = "simd128",75 .llvm_name = "simd128",
76 .description = "Enable 128-bit SIMD",76 .description = "Enable 128-bit SIMD",
77 .dependencies = 0,77 .dependencies = featureSet(&[_]Feature{}),
78 };78 };
79 result[@enumToInt(Feature.tail_call)] = .{79 result[@enumToInt(Feature.tail_call)] = .{
80 .index = @enumToInt(Feature.tail_call),80 .index = @enumToInt(Feature.tail_call),
81 .name = @tagName(Feature.tail_call),81 .name = @tagName(Feature.tail_call),
82 .llvm_name = "tail-call",82 .llvm_name = "tail-call",
83 .description = "Enable tail call instructions",83 .description = "Enable tail call instructions",
84 .dependencies = 0,84 .dependencies = featureSet(&[_]Feature{}),
85 };85 };
86 result[@enumToInt(Feature.unimplemented_simd128)] = .{86 result[@enumToInt(Feature.unimplemented_simd128)] = .{
87 .index = @enumToInt(Feature.unimplemented_simd128),87 .index = @enumToInt(Feature.unimplemented_simd128),
...@@ -110,12 +110,12 @@ pub const cpu = struct {...@@ -110,12 +110,12 @@ pub const cpu = struct {
110 pub const generic = Cpu{110 pub const generic = Cpu{
111 .name = "generic",111 .name = "generic",
112 .llvm_name = "generic",112 .llvm_name = "generic",
113 .features = 0,113 .features = featureSet(&[_]Feature{}),
114 };114 };
115 pub const mvp = Cpu{115 pub const mvp = Cpu{
116 .name = "mvp",116 .name = "mvp",
117 .llvm_name = "mvp",117 .llvm_name = "mvp",
118 .features = 0,118 .features = featureSet(&[_]Feature{}),
119 };119 };
120};120};
121121
lib/std/target/x86.zig+87-87
...@@ -132,21 +132,21 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);...@@ -132,21 +132,21 @@ pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
132132
133pub const all_features = blk: {133pub const all_features = blk: {
134 const len = @typeInfo(Feature).Enum.fields.len;134 const len = @typeInfo(Feature).Enum.fields.len;
135 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);135 std.debug.assert(len <= Cpu.Feature.Set.bit_count);
136 var result: [len]Cpu.Feature = undefined;136 var result: [len]Cpu.Feature = undefined;
137 result[@enumToInt(Feature.@"16bit_mode")] = .{137 result[@enumToInt(Feature.@"16bit_mode")] = .{
138 .index = @enumToInt(Feature.@"16bit_mode"),138 .index = @enumToInt(Feature.@"16bit_mode"),
139 .name = @tagName(Feature.@"16bit_mode"),139 .name = @tagName(Feature.@"16bit_mode"),
140 .llvm_name = "16bit-mode",140 .llvm_name = "16bit-mode",
141 .description = "16-bit mode (i8086)",141 .description = "16-bit mode (i8086)",
142 .dependencies = 0,142 .dependencies = featureSet(&[_]Feature{}),
143 };143 };
144 result[@enumToInt(Feature.@"32bit_mode")] = .{144 result[@enumToInt(Feature.@"32bit_mode")] = .{
145 .index = @enumToInt(Feature.@"32bit_mode"),145 .index = @enumToInt(Feature.@"32bit_mode"),
146 .name = @tagName(Feature.@"32bit_mode"),146 .name = @tagName(Feature.@"32bit_mode"),
147 .llvm_name = "32bit-mode",147 .llvm_name = "32bit-mode",
148 .description = "32-bit mode (80386)",148 .description = "32-bit mode (80386)",
149 .dependencies = 0,149 .dependencies = featureSet(&[_]Feature{}),
150 };150 };
151 result[@enumToInt(Feature.@"3dnow")] = .{151 result[@enumToInt(Feature.@"3dnow")] = .{
152 .index = @enumToInt(Feature.@"3dnow"),152 .index = @enumToInt(Feature.@"3dnow"),
...@@ -171,21 +171,21 @@ pub const all_features = blk: {...@@ -171,21 +171,21 @@ pub const all_features = blk: {
171 .name = @tagName(Feature.@"64bit"),171 .name = @tagName(Feature.@"64bit"),
172 .llvm_name = "64bit",172 .llvm_name = "64bit",
173 .description = "Support 64-bit instructions",173 .description = "Support 64-bit instructions",
174 .dependencies = 0,174 .dependencies = featureSet(&[_]Feature{}),
175 };175 };
176 result[@enumToInt(Feature.@"64bit_mode")] = .{176 result[@enumToInt(Feature.@"64bit_mode")] = .{
177 .index = @enumToInt(Feature.@"64bit_mode"),177 .index = @enumToInt(Feature.@"64bit_mode"),
178 .name = @tagName(Feature.@"64bit_mode"),178 .name = @tagName(Feature.@"64bit_mode"),
179 .llvm_name = "64bit-mode",179 .llvm_name = "64bit-mode",
180 .description = "64-bit mode (x86_64)",180 .description = "64-bit mode (x86_64)",
181 .dependencies = 0,181 .dependencies = featureSet(&[_]Feature{}),
182 };182 };
183 result[@enumToInt(Feature.adx)] = .{183 result[@enumToInt(Feature.adx)] = .{
184 .index = @enumToInt(Feature.adx),184 .index = @enumToInt(Feature.adx),
185 .name = @tagName(Feature.adx),185 .name = @tagName(Feature.adx),
186 .llvm_name = "adx",186 .llvm_name = "adx",
187 .description = "Support ADX instructions",187 .description = "Support ADX instructions",
188 .dependencies = 0,188 .dependencies = featureSet(&[_]Feature{}),
189 };189 };
190 result[@enumToInt(Feature.aes)] = .{190 result[@enumToInt(Feature.aes)] = .{
191 .index = @enumToInt(Feature.aes),191 .index = @enumToInt(Feature.aes),
...@@ -356,56 +356,56 @@ pub const all_features = blk: {...@@ -356,56 +356,56 @@ pub const all_features = blk: {
356 .name = @tagName(Feature.bmi),356 .name = @tagName(Feature.bmi),
357 .llvm_name = "bmi",357 .llvm_name = "bmi",
358 .description = "Support BMI instructions",358 .description = "Support BMI instructions",
359 .dependencies = 0,359 .dependencies = featureSet(&[_]Feature{}),
360 };360 };
361 result[@enumToInt(Feature.bmi2)] = .{361 result[@enumToInt(Feature.bmi2)] = .{
362 .index = @enumToInt(Feature.bmi2),362 .index = @enumToInt(Feature.bmi2),
363 .name = @tagName(Feature.bmi2),363 .name = @tagName(Feature.bmi2),
364 .llvm_name = "bmi2",364 .llvm_name = "bmi2",
365 .description = "Support BMI2 instructions",365 .description = "Support BMI2 instructions",
366 .dependencies = 0,366 .dependencies = featureSet(&[_]Feature{}),
367 };367 };
368 result[@enumToInt(Feature.branchfusion)] = .{368 result[@enumToInt(Feature.branchfusion)] = .{
369 .index = @enumToInt(Feature.branchfusion),369 .index = @enumToInt(Feature.branchfusion),
370 .name = @tagName(Feature.branchfusion),370 .name = @tagName(Feature.branchfusion),
371 .llvm_name = "branchfusion",371 .llvm_name = "branchfusion",
372 .description = "CMP/TEST can be fused with conditional branches",372 .description = "CMP/TEST can be fused with conditional branches",
373 .dependencies = 0,373 .dependencies = featureSet(&[_]Feature{}),
374 };374 };
375 result[@enumToInt(Feature.cldemote)] = .{375 result[@enumToInt(Feature.cldemote)] = .{
376 .index = @enumToInt(Feature.cldemote),376 .index = @enumToInt(Feature.cldemote),
377 .name = @tagName(Feature.cldemote),377 .name = @tagName(Feature.cldemote),
378 .llvm_name = "cldemote",378 .llvm_name = "cldemote",
379 .description = "Enable Cache Demote",379 .description = "Enable Cache Demote",
380 .dependencies = 0,380 .dependencies = featureSet(&[_]Feature{}),
381 };381 };
382 result[@enumToInt(Feature.clflushopt)] = .{382 result[@enumToInt(Feature.clflushopt)] = .{
383 .index = @enumToInt(Feature.clflushopt),383 .index = @enumToInt(Feature.clflushopt),
384 .name = @tagName(Feature.clflushopt),384 .name = @tagName(Feature.clflushopt),
385 .llvm_name = "clflushopt",385 .llvm_name = "clflushopt",
386 .description = "Flush A Cache Line Optimized",386 .description = "Flush A Cache Line Optimized",
387 .dependencies = 0,387 .dependencies = featureSet(&[_]Feature{}),
388 };388 };
389 result[@enumToInt(Feature.clwb)] = .{389 result[@enumToInt(Feature.clwb)] = .{
390 .index = @enumToInt(Feature.clwb),390 .index = @enumToInt(Feature.clwb),
391 .name = @tagName(Feature.clwb),391 .name = @tagName(Feature.clwb),
392 .llvm_name = "clwb",392 .llvm_name = "clwb",
393 .description = "Cache Line Write Back",393 .description = "Cache Line Write Back",
394 .dependencies = 0,394 .dependencies = featureSet(&[_]Feature{}),
395 };395 };
396 result[@enumToInt(Feature.clzero)] = .{396 result[@enumToInt(Feature.clzero)] = .{
397 .index = @enumToInt(Feature.clzero),397 .index = @enumToInt(Feature.clzero),
398 .name = @tagName(Feature.clzero),398 .name = @tagName(Feature.clzero),
399 .llvm_name = "clzero",399 .llvm_name = "clzero",
400 .description = "Enable Cache Line Zero",400 .description = "Enable Cache Line Zero",
401 .dependencies = 0,401 .dependencies = featureSet(&[_]Feature{}),
402 };402 };
403 result[@enumToInt(Feature.cmov)] = .{403 result[@enumToInt(Feature.cmov)] = .{
404 .index = @enumToInt(Feature.cmov),404 .index = @enumToInt(Feature.cmov),
405 .name = @tagName(Feature.cmov),405 .name = @tagName(Feature.cmov),
406 .llvm_name = "cmov",406 .llvm_name = "cmov",
407 .description = "Enable conditional move instructions",407 .description = "Enable conditional move instructions",
408 .dependencies = 0,408 .dependencies = featureSet(&[_]Feature{}),
409 };409 };
410 result[@enumToInt(Feature.cx16)] = .{410 result[@enumToInt(Feature.cx16)] = .{
411 .index = @enumToInt(Feature.cx16),411 .index = @enumToInt(Feature.cx16),
...@@ -421,21 +421,21 @@ pub const all_features = blk: {...@@ -421,21 +421,21 @@ pub const all_features = blk: {
421 .name = @tagName(Feature.cx8),421 .name = @tagName(Feature.cx8),
422 .llvm_name = "cx8",422 .llvm_name = "cx8",
423 .description = "Support CMPXCHG8B instructions",423 .description = "Support CMPXCHG8B instructions",
424 .dependencies = 0,424 .dependencies = featureSet(&[_]Feature{}),
425 };425 };
426 result[@enumToInt(Feature.enqcmd)] = .{426 result[@enumToInt(Feature.enqcmd)] = .{
427 .index = @enumToInt(Feature.enqcmd),427 .index = @enumToInt(Feature.enqcmd),
428 .name = @tagName(Feature.enqcmd),428 .name = @tagName(Feature.enqcmd),
429 .llvm_name = "enqcmd",429 .llvm_name = "enqcmd",
430 .description = "Has ENQCMD instructions",430 .description = "Has ENQCMD instructions",
431 .dependencies = 0,431 .dependencies = featureSet(&[_]Feature{}),
432 };432 };
433 result[@enumToInt(Feature.ermsb)] = .{433 result[@enumToInt(Feature.ermsb)] = .{
434 .index = @enumToInt(Feature.ermsb),434 .index = @enumToInt(Feature.ermsb),
435 .name = @tagName(Feature.ermsb),435 .name = @tagName(Feature.ermsb),
436 .llvm_name = "ermsb",436 .llvm_name = "ermsb",
437 .description = "REP MOVS/STOS are fast",437 .description = "REP MOVS/STOS are fast",
438 .dependencies = 0,438 .dependencies = featureSet(&[_]Feature{}),
439 };439 };
440 result[@enumToInt(Feature.f16c)] = .{440 result[@enumToInt(Feature.f16c)] = .{
441 .index = @enumToInt(Feature.f16c),441 .index = @enumToInt(Feature.f16c),
...@@ -451,42 +451,42 @@ pub const all_features = blk: {...@@ -451,42 +451,42 @@ pub const all_features = blk: {
451 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),451 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),
452 .llvm_name = "false-deps-lzcnt-tzcnt",452 .llvm_name = "false-deps-lzcnt-tzcnt",
453 .description = "LZCNT/TZCNT have a false dependency on dest register",453 .description = "LZCNT/TZCNT have a false dependency on dest register",
454 .dependencies = 0,454 .dependencies = featureSet(&[_]Feature{}),
455 };455 };
456 result[@enumToInt(Feature.false_deps_popcnt)] = .{456 result[@enumToInt(Feature.false_deps_popcnt)] = .{
457 .index = @enumToInt(Feature.false_deps_popcnt),457 .index = @enumToInt(Feature.false_deps_popcnt),
458 .name = @tagName(Feature.false_deps_popcnt),458 .name = @tagName(Feature.false_deps_popcnt),
459 .llvm_name = "false-deps-popcnt",459 .llvm_name = "false-deps-popcnt",
460 .description = "POPCNT has a false dependency on dest register",460 .description = "POPCNT has a false dependency on dest register",
461 .dependencies = 0,461 .dependencies = featureSet(&[_]Feature{}),
462 };462 };
463 result[@enumToInt(Feature.fast_11bytenop)] = .{463 result[@enumToInt(Feature.fast_11bytenop)] = .{
464 .index = @enumToInt(Feature.fast_11bytenop),464 .index = @enumToInt(Feature.fast_11bytenop),
465 .name = @tagName(Feature.fast_11bytenop),465 .name = @tagName(Feature.fast_11bytenop),
466 .llvm_name = "fast-11bytenop",466 .llvm_name = "fast-11bytenop",
467 .description = "Target can quickly decode up to 11 byte NOPs",467 .description = "Target can quickly decode up to 11 byte NOPs",
468 .dependencies = 0,468 .dependencies = featureSet(&[_]Feature{}),
469 };469 };
470 result[@enumToInt(Feature.fast_15bytenop)] = .{470 result[@enumToInt(Feature.fast_15bytenop)] = .{
471 .index = @enumToInt(Feature.fast_15bytenop),471 .index = @enumToInt(Feature.fast_15bytenop),
472 .name = @tagName(Feature.fast_15bytenop),472 .name = @tagName(Feature.fast_15bytenop),
473 .llvm_name = "fast-15bytenop",473 .llvm_name = "fast-15bytenop",
474 .description = "Target can quickly decode up to 15 byte NOPs",474 .description = "Target can quickly decode up to 15 byte NOPs",
475 .dependencies = 0,475 .dependencies = featureSet(&[_]Feature{}),
476 };476 };
477 result[@enumToInt(Feature.fast_bextr)] = .{477 result[@enumToInt(Feature.fast_bextr)] = .{
478 .index = @enumToInt(Feature.fast_bextr),478 .index = @enumToInt(Feature.fast_bextr),
479 .name = @tagName(Feature.fast_bextr),479 .name = @tagName(Feature.fast_bextr),
480 .llvm_name = "fast-bextr",480 .llvm_name = "fast-bextr",
481 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",481 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
482 .dependencies = 0,482 .dependencies = featureSet(&[_]Feature{}),
483 };483 };
484 result[@enumToInt(Feature.fast_gather)] = .{484 result[@enumToInt(Feature.fast_gather)] = .{
485 .index = @enumToInt(Feature.fast_gather),485 .index = @enumToInt(Feature.fast_gather),
486 .name = @tagName(Feature.fast_gather),486 .name = @tagName(Feature.fast_gather),
487 .llvm_name = "fast-gather",487 .llvm_name = "fast-gather",
488 .description = "Indicates if gather is reasonably fast",488 .description = "Indicates if gather is reasonably fast",
489 .dependencies = 0,489 .dependencies = featureSet(&[_]Feature{}),
490 };490 };
491 result[@enumToInt(Feature.fast_hops)] = .{491 result[@enumToInt(Feature.fast_hops)] = .{
492 .index = @enumToInt(Feature.fast_hops),492 .index = @enumToInt(Feature.fast_hops),
...@@ -502,56 +502,56 @@ pub const all_features = blk: {...@@ -502,56 +502,56 @@ pub const all_features = blk: {
502 .name = @tagName(Feature.fast_lzcnt),502 .name = @tagName(Feature.fast_lzcnt),
503 .llvm_name = "fast-lzcnt",503 .llvm_name = "fast-lzcnt",
504 .description = "LZCNT instructions are as fast as most simple integer ops",504 .description = "LZCNT instructions are as fast as most simple integer ops",
505 .dependencies = 0,505 .dependencies = featureSet(&[_]Feature{}),
506 };506 };
507 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{507 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{
508 .index = @enumToInt(Feature.fast_partial_ymm_or_zmm_write),508 .index = @enumToInt(Feature.fast_partial_ymm_or_zmm_write),
509 .name = @tagName(Feature.fast_partial_ymm_or_zmm_write),509 .name = @tagName(Feature.fast_partial_ymm_or_zmm_write),
510 .llvm_name = "fast-partial-ymm-or-zmm-write",510 .llvm_name = "fast-partial-ymm-or-zmm-write",
511 .description = "Partial writes to YMM/ZMM registers are fast",511 .description = "Partial writes to YMM/ZMM registers are fast",
512 .dependencies = 0,512 .dependencies = featureSet(&[_]Feature{}),
513 };513 };
514 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{514 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
515 .index = @enumToInt(Feature.fast_scalar_fsqrt),515 .index = @enumToInt(Feature.fast_scalar_fsqrt),
516 .name = @tagName(Feature.fast_scalar_fsqrt),516 .name = @tagName(Feature.fast_scalar_fsqrt),
517 .llvm_name = "fast-scalar-fsqrt",517 .llvm_name = "fast-scalar-fsqrt",
518 .description = "Scalar SQRT is fast (disable Newton-Raphson)",518 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
519 .dependencies = 0,519 .dependencies = featureSet(&[_]Feature{}),
520 };520 };
521 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{521 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{
522 .index = @enumToInt(Feature.fast_scalar_shift_masks),522 .index = @enumToInt(Feature.fast_scalar_shift_masks),
523 .name = @tagName(Feature.fast_scalar_shift_masks),523 .name = @tagName(Feature.fast_scalar_shift_masks),
524 .llvm_name = "fast-scalar-shift-masks",524 .llvm_name = "fast-scalar-shift-masks",
525 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",525 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
526 .dependencies = 0,526 .dependencies = featureSet(&[_]Feature{}),
527 };527 };
528 result[@enumToInt(Feature.fast_shld_rotate)] = .{528 result[@enumToInt(Feature.fast_shld_rotate)] = .{
529 .index = @enumToInt(Feature.fast_shld_rotate),529 .index = @enumToInt(Feature.fast_shld_rotate),
530 .name = @tagName(Feature.fast_shld_rotate),530 .name = @tagName(Feature.fast_shld_rotate),
531 .llvm_name = "fast-shld-rotate",531 .llvm_name = "fast-shld-rotate",
532 .description = "SHLD can be used as a faster rotate",532 .description = "SHLD can be used as a faster rotate",
533 .dependencies = 0,533 .dependencies = featureSet(&[_]Feature{}),
534 };534 };
535 result[@enumToInt(Feature.fast_variable_shuffle)] = .{535 result[@enumToInt(Feature.fast_variable_shuffle)] = .{
536 .index = @enumToInt(Feature.fast_variable_shuffle),536 .index = @enumToInt(Feature.fast_variable_shuffle),
537 .name = @tagName(Feature.fast_variable_shuffle),537 .name = @tagName(Feature.fast_variable_shuffle),
538 .llvm_name = "fast-variable-shuffle",538 .llvm_name = "fast-variable-shuffle",
539 .description = "Shuffles with variable masks are fast",539 .description = "Shuffles with variable masks are fast",
540 .dependencies = 0,540 .dependencies = featureSet(&[_]Feature{}),
541 };541 };
542 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{542 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
543 .index = @enumToInt(Feature.fast_vector_fsqrt),543 .index = @enumToInt(Feature.fast_vector_fsqrt),
544 .name = @tagName(Feature.fast_vector_fsqrt),544 .name = @tagName(Feature.fast_vector_fsqrt),
545 .llvm_name = "fast-vector-fsqrt",545 .llvm_name = "fast-vector-fsqrt",
546 .description = "Vector SQRT is fast (disable Newton-Raphson)",546 .description = "Vector SQRT is fast (disable Newton-Raphson)",
547 .dependencies = 0,547 .dependencies = featureSet(&[_]Feature{}),
548 };548 };
549 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{549 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{
550 .index = @enumToInt(Feature.fast_vector_shift_masks),550 .index = @enumToInt(Feature.fast_vector_shift_masks),
551 .name = @tagName(Feature.fast_vector_shift_masks),551 .name = @tagName(Feature.fast_vector_shift_masks),
552 .llvm_name = "fast-vector-shift-masks",552 .llvm_name = "fast-vector-shift-masks",
553 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",553 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",
554 .dependencies = 0,554 .dependencies = featureSet(&[_]Feature{}),
555 };555 };
556 result[@enumToInt(Feature.fma)] = .{556 result[@enumToInt(Feature.fma)] = .{
557 .index = @enumToInt(Feature.fma),557 .index = @enumToInt(Feature.fma),
...@@ -577,14 +577,14 @@ pub const all_features = blk: {...@@ -577,14 +577,14 @@ pub const all_features = blk: {
577 .name = @tagName(Feature.fsgsbase),577 .name = @tagName(Feature.fsgsbase),
578 .llvm_name = "fsgsbase",578 .llvm_name = "fsgsbase",
579 .description = "Support FS/GS Base instructions",579 .description = "Support FS/GS Base instructions",
580 .dependencies = 0,580 .dependencies = featureSet(&[_]Feature{}),
581 };581 };
582 result[@enumToInt(Feature.fxsr)] = .{582 result[@enumToInt(Feature.fxsr)] = .{
583 .index = @enumToInt(Feature.fxsr),583 .index = @enumToInt(Feature.fxsr),
584 .name = @tagName(Feature.fxsr),584 .name = @tagName(Feature.fxsr),
585 .llvm_name = "fxsr",585 .llvm_name = "fxsr",
586 .description = "Support fxsave/fxrestore instructions",586 .description = "Support fxsave/fxrestore instructions",
587 .dependencies = 0,587 .dependencies = featureSet(&[_]Feature{}),
588 };588 };
589 result[@enumToInt(Feature.gfni)] = .{589 result[@enumToInt(Feature.gfni)] = .{
590 .index = @enumToInt(Feature.gfni),590 .index = @enumToInt(Feature.gfni),
...@@ -600,119 +600,119 @@ pub const all_features = blk: {...@@ -600,119 +600,119 @@ pub const all_features = blk: {
600 .name = @tagName(Feature.idivl_to_divb),600 .name = @tagName(Feature.idivl_to_divb),
601 .llvm_name = "idivl-to-divb",601 .llvm_name = "idivl-to-divb",
602 .description = "Use 8-bit divide for positive values less than 256",602 .description = "Use 8-bit divide for positive values less than 256",
603 .dependencies = 0,603 .dependencies = featureSet(&[_]Feature{}),
604 };604 };
605 result[@enumToInt(Feature.idivq_to_divl)] = .{605 result[@enumToInt(Feature.idivq_to_divl)] = .{
606 .index = @enumToInt(Feature.idivq_to_divl),606 .index = @enumToInt(Feature.idivq_to_divl),
607 .name = @tagName(Feature.idivq_to_divl),607 .name = @tagName(Feature.idivq_to_divl),
608 .llvm_name = "idivq-to-divl",608 .llvm_name = "idivq-to-divl",
609 .description = "Use 32-bit divide for positive values less than 2^32",609 .description = "Use 32-bit divide for positive values less than 2^32",
610 .dependencies = 0,610 .dependencies = featureSet(&[_]Feature{}),
611 };611 };
612 result[@enumToInt(Feature.invpcid)] = .{612 result[@enumToInt(Feature.invpcid)] = .{
613 .index = @enumToInt(Feature.invpcid),613 .index = @enumToInt(Feature.invpcid),
614 .name = @tagName(Feature.invpcid),614 .name = @tagName(Feature.invpcid),
615 .llvm_name = "invpcid",615 .llvm_name = "invpcid",
616 .description = "Invalidate Process-Context Identifier",616 .description = "Invalidate Process-Context Identifier",
617 .dependencies = 0,617 .dependencies = featureSet(&[_]Feature{}),
618 };618 };
619 result[@enumToInt(Feature.lea_sp)] = .{619 result[@enumToInt(Feature.lea_sp)] = .{
620 .index = @enumToInt(Feature.lea_sp),620 .index = @enumToInt(Feature.lea_sp),
621 .name = @tagName(Feature.lea_sp),621 .name = @tagName(Feature.lea_sp),
622 .llvm_name = "lea-sp",622 .llvm_name = "lea-sp",
623 .description = "Use LEA for adjusting the stack pointer",623 .description = "Use LEA for adjusting the stack pointer",
624 .dependencies = 0,624 .dependencies = featureSet(&[_]Feature{}),
625 };625 };
626 result[@enumToInt(Feature.lea_uses_ag)] = .{626 result[@enumToInt(Feature.lea_uses_ag)] = .{
627 .index = @enumToInt(Feature.lea_uses_ag),627 .index = @enumToInt(Feature.lea_uses_ag),
628 .name = @tagName(Feature.lea_uses_ag),628 .name = @tagName(Feature.lea_uses_ag),
629 .llvm_name = "lea-uses-ag",629 .llvm_name = "lea-uses-ag",
630 .description = "LEA instruction needs inputs at AG stage",630 .description = "LEA instruction needs inputs at AG stage",
631 .dependencies = 0,631 .dependencies = featureSet(&[_]Feature{}),
632 };632 };
633 result[@enumToInt(Feature.lwp)] = .{633 result[@enumToInt(Feature.lwp)] = .{
634 .index = @enumToInt(Feature.lwp),634 .index = @enumToInt(Feature.lwp),
635 .name = @tagName(Feature.lwp),635 .name = @tagName(Feature.lwp),
636 .llvm_name = "lwp",636 .llvm_name = "lwp",
637 .description = "Enable LWP instructions",637 .description = "Enable LWP instructions",
638 .dependencies = 0,638 .dependencies = featureSet(&[_]Feature{}),
639 };639 };
640 result[@enumToInt(Feature.lzcnt)] = .{640 result[@enumToInt(Feature.lzcnt)] = .{
641 .index = @enumToInt(Feature.lzcnt),641 .index = @enumToInt(Feature.lzcnt),
642 .name = @tagName(Feature.lzcnt),642 .name = @tagName(Feature.lzcnt),
643 .llvm_name = "lzcnt",643 .llvm_name = "lzcnt",
644 .description = "Support LZCNT instruction",644 .description = "Support LZCNT instruction",
645 .dependencies = 0,645 .dependencies = featureSet(&[_]Feature{}),
646 };646 };
647 result[@enumToInt(Feature.macrofusion)] = .{647 result[@enumToInt(Feature.macrofusion)] = .{
648 .index = @enumToInt(Feature.macrofusion),648 .index = @enumToInt(Feature.macrofusion),
649 .name = @tagName(Feature.macrofusion),649 .name = @tagName(Feature.macrofusion),
650 .llvm_name = "macrofusion",650 .llvm_name = "macrofusion",
651 .description = "Various instructions can be fused with conditional branches",651 .description = "Various instructions can be fused with conditional branches",
652 .dependencies = 0,652 .dependencies = featureSet(&[_]Feature{}),
653 };653 };
654 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{654 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
655 .index = @enumToInt(Feature.merge_to_threeway_branch),655 .index = @enumToInt(Feature.merge_to_threeway_branch),
656 .name = @tagName(Feature.merge_to_threeway_branch),656 .name = @tagName(Feature.merge_to_threeway_branch),
657 .llvm_name = "merge-to-threeway-branch",657 .llvm_name = "merge-to-threeway-branch",
658 .description = "Merge branches to a three-way conditional branch",658 .description = "Merge branches to a three-way conditional branch",
659 .dependencies = 0,659 .dependencies = featureSet(&[_]Feature{}),
660 };660 };
661 result[@enumToInt(Feature.mmx)] = .{661 result[@enumToInt(Feature.mmx)] = .{
662 .index = @enumToInt(Feature.mmx),662 .index = @enumToInt(Feature.mmx),
663 .name = @tagName(Feature.mmx),663 .name = @tagName(Feature.mmx),
664 .llvm_name = "mmx",664 .llvm_name = "mmx",
665 .description = "Enable MMX instructions",665 .description = "Enable MMX instructions",
666 .dependencies = 0,666 .dependencies = featureSet(&[_]Feature{}),
667 };667 };
668 result[@enumToInt(Feature.movbe)] = .{668 result[@enumToInt(Feature.movbe)] = .{
669 .index = @enumToInt(Feature.movbe),669 .index = @enumToInt(Feature.movbe),
670 .name = @tagName(Feature.movbe),670 .name = @tagName(Feature.movbe),
671 .llvm_name = "movbe",671 .llvm_name = "movbe",
672 .description = "Support MOVBE instruction",672 .description = "Support MOVBE instruction",
673 .dependencies = 0,673 .dependencies = featureSet(&[_]Feature{}),
674 };674 };
675 result[@enumToInt(Feature.movdir64b)] = .{675 result[@enumToInt(Feature.movdir64b)] = .{
676 .index = @enumToInt(Feature.movdir64b),676 .index = @enumToInt(Feature.movdir64b),
677 .name = @tagName(Feature.movdir64b),677 .name = @tagName(Feature.movdir64b),
678 .llvm_name = "movdir64b",678 .llvm_name = "movdir64b",
679 .description = "Support movdir64b instruction",679 .description = "Support movdir64b instruction",
680 .dependencies = 0,680 .dependencies = featureSet(&[_]Feature{}),
681 };681 };
682 result[@enumToInt(Feature.movdiri)] = .{682 result[@enumToInt(Feature.movdiri)] = .{
683 .index = @enumToInt(Feature.movdiri),683 .index = @enumToInt(Feature.movdiri),
684 .name = @tagName(Feature.movdiri),684 .name = @tagName(Feature.movdiri),
685 .llvm_name = "movdiri",685 .llvm_name = "movdiri",
686 .description = "Support movdiri instruction",686 .description = "Support movdiri instruction",
687 .dependencies = 0,687 .dependencies = featureSet(&[_]Feature{}),
688 };688 };
689 result[@enumToInt(Feature.mpx)] = .{689 result[@enumToInt(Feature.mpx)] = .{
690 .index = @enumToInt(Feature.mpx),690 .index = @enumToInt(Feature.mpx),
691 .name = @tagName(Feature.mpx),691 .name = @tagName(Feature.mpx),
692 .llvm_name = "mpx",692 .llvm_name = "mpx",
693 .description = "Support MPX instructions",693 .description = "Support MPX instructions",
694 .dependencies = 0,694 .dependencies = featureSet(&[_]Feature{}),
695 };695 };
696 result[@enumToInt(Feature.mwaitx)] = .{696 result[@enumToInt(Feature.mwaitx)] = .{
697 .index = @enumToInt(Feature.mwaitx),697 .index = @enumToInt(Feature.mwaitx),
698 .name = @tagName(Feature.mwaitx),698 .name = @tagName(Feature.mwaitx),
699 .llvm_name = "mwaitx",699 .llvm_name = "mwaitx",
700 .description = "Enable MONITORX/MWAITX timer functionality",700 .description = "Enable MONITORX/MWAITX timer functionality",
701 .dependencies = 0,701 .dependencies = featureSet(&[_]Feature{}),
702 };702 };
703 result[@enumToInt(Feature.nopl)] = .{703 result[@enumToInt(Feature.nopl)] = .{
704 .index = @enumToInt(Feature.nopl),704 .index = @enumToInt(Feature.nopl),
705 .name = @tagName(Feature.nopl),705 .name = @tagName(Feature.nopl),
706 .llvm_name = "nopl",706 .llvm_name = "nopl",
707 .description = "Enable NOPL instruction",707 .description = "Enable NOPL instruction",
708 .dependencies = 0,708 .dependencies = featureSet(&[_]Feature{}),
709 };709 };
710 result[@enumToInt(Feature.pad_short_functions)] = .{710 result[@enumToInt(Feature.pad_short_functions)] = .{
711 .index = @enumToInt(Feature.pad_short_functions),711 .index = @enumToInt(Feature.pad_short_functions),
712 .name = @tagName(Feature.pad_short_functions),712 .name = @tagName(Feature.pad_short_functions),
713 .llvm_name = "pad-short-functions",713 .llvm_name = "pad-short-functions",
714 .description = "Pad short functions",714 .description = "Pad short functions",
715 .dependencies = 0,715 .dependencies = featureSet(&[_]Feature{}),
716 };716 };
717 result[@enumToInt(Feature.pclmul)] = .{717 result[@enumToInt(Feature.pclmul)] = .{
718 .index = @enumToInt(Feature.pclmul),718 .index = @enumToInt(Feature.pclmul),
...@@ -728,70 +728,70 @@ pub const all_features = blk: {...@@ -728,70 +728,70 @@ pub const all_features = blk: {
728 .name = @tagName(Feature.pconfig),728 .name = @tagName(Feature.pconfig),
729 .llvm_name = "pconfig",729 .llvm_name = "pconfig",
730 .description = "platform configuration instruction",730 .description = "platform configuration instruction",
731 .dependencies = 0,731 .dependencies = featureSet(&[_]Feature{}),
732 };732 };
733 result[@enumToInt(Feature.pku)] = .{733 result[@enumToInt(Feature.pku)] = .{
734 .index = @enumToInt(Feature.pku),734 .index = @enumToInt(Feature.pku),
735 .name = @tagName(Feature.pku),735 .name = @tagName(Feature.pku),
736 .llvm_name = "pku",736 .llvm_name = "pku",
737 .description = "Enable protection keys",737 .description = "Enable protection keys",
738 .dependencies = 0,738 .dependencies = featureSet(&[_]Feature{}),
739 };739 };
740 result[@enumToInt(Feature.popcnt)] = .{740 result[@enumToInt(Feature.popcnt)] = .{
741 .index = @enumToInt(Feature.popcnt),741 .index = @enumToInt(Feature.popcnt),
742 .name = @tagName(Feature.popcnt),742 .name = @tagName(Feature.popcnt),
743 .llvm_name = "popcnt",743 .llvm_name = "popcnt",
744 .description = "Support POPCNT instruction",744 .description = "Support POPCNT instruction",
745 .dependencies = 0,745 .dependencies = featureSet(&[_]Feature{}),
746 };746 };
747 result[@enumToInt(Feature.prefer_256_bit)] = .{747 result[@enumToInt(Feature.prefer_256_bit)] = .{
748 .index = @enumToInt(Feature.prefer_256_bit),748 .index = @enumToInt(Feature.prefer_256_bit),
749 .name = @tagName(Feature.prefer_256_bit),749 .name = @tagName(Feature.prefer_256_bit),
750 .llvm_name = "prefer-256-bit",750 .llvm_name = "prefer-256-bit",
751 .description = "Prefer 256-bit AVX instructions",751 .description = "Prefer 256-bit AVX instructions",
752 .dependencies = 0,752 .dependencies = featureSet(&[_]Feature{}),
753 };753 };
754 result[@enumToInt(Feature.prefetchwt1)] = .{754 result[@enumToInt(Feature.prefetchwt1)] = .{
755 .index = @enumToInt(Feature.prefetchwt1),755 .index = @enumToInt(Feature.prefetchwt1),
756 .name = @tagName(Feature.prefetchwt1),756 .name = @tagName(Feature.prefetchwt1),
757 .llvm_name = "prefetchwt1",757 .llvm_name = "prefetchwt1",
758 .description = "Prefetch with Intent to Write and T1 Hint",758 .description = "Prefetch with Intent to Write and T1 Hint",
759 .dependencies = 0,759 .dependencies = featureSet(&[_]Feature{}),
760 };760 };
761 result[@enumToInt(Feature.prfchw)] = .{761 result[@enumToInt(Feature.prfchw)] = .{
762 .index = @enumToInt(Feature.prfchw),762 .index = @enumToInt(Feature.prfchw),
763 .name = @tagName(Feature.prfchw),763 .name = @tagName(Feature.prfchw),
764 .llvm_name = "prfchw",764 .llvm_name = "prfchw",
765 .description = "Support PRFCHW instructions",765 .description = "Support PRFCHW instructions",
766 .dependencies = 0,766 .dependencies = featureSet(&[_]Feature{}),
767 };767 };
768 result[@enumToInt(Feature.ptwrite)] = .{768 result[@enumToInt(Feature.ptwrite)] = .{
769 .index = @enumToInt(Feature.ptwrite),769 .index = @enumToInt(Feature.ptwrite),
770 .name = @tagName(Feature.ptwrite),770 .name = @tagName(Feature.ptwrite),
771 .llvm_name = "ptwrite",771 .llvm_name = "ptwrite",
772 .description = "Support ptwrite instruction",772 .description = "Support ptwrite instruction",
773 .dependencies = 0,773 .dependencies = featureSet(&[_]Feature{}),
774 };774 };
775 result[@enumToInt(Feature.rdpid)] = .{775 result[@enumToInt(Feature.rdpid)] = .{
776 .index = @enumToInt(Feature.rdpid),776 .index = @enumToInt(Feature.rdpid),
777 .name = @tagName(Feature.rdpid),777 .name = @tagName(Feature.rdpid),
778 .llvm_name = "rdpid",778 .llvm_name = "rdpid",
779 .description = "Support RDPID instructions",779 .description = "Support RDPID instructions",
780 .dependencies = 0,780 .dependencies = featureSet(&[_]Feature{}),
781 };781 };
782 result[@enumToInt(Feature.rdrnd)] = .{782 result[@enumToInt(Feature.rdrnd)] = .{
783 .index = @enumToInt(Feature.rdrnd),783 .index = @enumToInt(Feature.rdrnd),
784 .name = @tagName(Feature.rdrnd),784 .name = @tagName(Feature.rdrnd),
785 .llvm_name = "rdrnd",785 .llvm_name = "rdrnd",
786 .description = "Support RDRAND instruction",786 .description = "Support RDRAND instruction",
787 .dependencies = 0,787 .dependencies = featureSet(&[_]Feature{}),
788 };788 };
789 result[@enumToInt(Feature.rdseed)] = .{789 result[@enumToInt(Feature.rdseed)] = .{
790 .index = @enumToInt(Feature.rdseed),790 .index = @enumToInt(Feature.rdseed),
791 .name = @tagName(Feature.rdseed),791 .name = @tagName(Feature.rdseed),
792 .llvm_name = "rdseed",792 .llvm_name = "rdseed",
793 .description = "Support RDSEED instruction",793 .description = "Support RDSEED instruction",
794 .dependencies = 0,794 .dependencies = featureSet(&[_]Feature{}),
795 };795 };
796 result[@enumToInt(Feature.retpoline)] = .{796 result[@enumToInt(Feature.retpoline)] = .{
797 .index = @enumToInt(Feature.retpoline),797 .index = @enumToInt(Feature.retpoline),
...@@ -817,35 +817,35 @@ pub const all_features = blk: {...@@ -817,35 +817,35 @@ pub const all_features = blk: {
817 .name = @tagName(Feature.retpoline_indirect_branches),817 .name = @tagName(Feature.retpoline_indirect_branches),
818 .llvm_name = "retpoline-indirect-branches",818 .llvm_name = "retpoline-indirect-branches",
819 .description = "Remove speculation of indirect branches from the generated code",819 .description = "Remove speculation of indirect branches from the generated code",
820 .dependencies = 0,820 .dependencies = featureSet(&[_]Feature{}),
821 };821 };
822 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{822 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{
823 .index = @enumToInt(Feature.retpoline_indirect_calls),823 .index = @enumToInt(Feature.retpoline_indirect_calls),
824 .name = @tagName(Feature.retpoline_indirect_calls),824 .name = @tagName(Feature.retpoline_indirect_calls),
825 .llvm_name = "retpoline-indirect-calls",825 .llvm_name = "retpoline-indirect-calls",
826 .description = "Remove speculation of indirect calls from the generated code",826 .description = "Remove speculation of indirect calls from the generated code",
827 .dependencies = 0,827 .dependencies = featureSet(&[_]Feature{}),
828 };828 };
829 result[@enumToInt(Feature.rtm)] = .{829 result[@enumToInt(Feature.rtm)] = .{
830 .index = @enumToInt(Feature.rtm),830 .index = @enumToInt(Feature.rtm),
831 .name = @tagName(Feature.rtm),831 .name = @tagName(Feature.rtm),
832 .llvm_name = "rtm",832 .llvm_name = "rtm",
833 .description = "Support RTM instructions",833 .description = "Support RTM instructions",
834 .dependencies = 0,834 .dependencies = featureSet(&[_]Feature{}),
835 };835 };
836 result[@enumToInt(Feature.sahf)] = .{836 result[@enumToInt(Feature.sahf)] = .{
837 .index = @enumToInt(Feature.sahf),837 .index = @enumToInt(Feature.sahf),
838 .name = @tagName(Feature.sahf),838 .name = @tagName(Feature.sahf),
839 .llvm_name = "sahf",839 .llvm_name = "sahf",
840 .description = "Support LAHF and SAHF instructions",840 .description = "Support LAHF and SAHF instructions",
841 .dependencies = 0,841 .dependencies = featureSet(&[_]Feature{}),
842 };842 };
843 result[@enumToInt(Feature.sgx)] = .{843 result[@enumToInt(Feature.sgx)] = .{
844 .index = @enumToInt(Feature.sgx),844 .index = @enumToInt(Feature.sgx),
845 .name = @tagName(Feature.sgx),845 .name = @tagName(Feature.sgx),
846 .llvm_name = "sgx",846 .llvm_name = "sgx",
847 .description = "Enable Software Guard Extensions",847 .description = "Enable Software Guard Extensions",
848 .dependencies = 0,848 .dependencies = featureSet(&[_]Feature{}),
849 };849 };
850 result[@enumToInt(Feature.sha)] = .{850 result[@enumToInt(Feature.sha)] = .{
851 .index = @enumToInt(Feature.sha),851 .index = @enumToInt(Feature.sha),
...@@ -861,91 +861,91 @@ pub const all_features = blk: {...@@ -861,91 +861,91 @@ pub const all_features = blk: {
861 .name = @tagName(Feature.shstk),861 .name = @tagName(Feature.shstk),
862 .llvm_name = "shstk",862 .llvm_name = "shstk",
863 .description = "Support CET Shadow-Stack instructions",863 .description = "Support CET Shadow-Stack instructions",
864 .dependencies = 0,864 .dependencies = featureSet(&[_]Feature{}),
865 };865 };
866 result[@enumToInt(Feature.slow_3ops_lea)] = .{866 result[@enumToInt(Feature.slow_3ops_lea)] = .{
867 .index = @enumToInt(Feature.slow_3ops_lea),867 .index = @enumToInt(Feature.slow_3ops_lea),
868 .name = @tagName(Feature.slow_3ops_lea),868 .name = @tagName(Feature.slow_3ops_lea),
869 .llvm_name = "slow-3ops-lea",869 .llvm_name = "slow-3ops-lea",
870 .description = "LEA instruction with 3 ops or certain registers is slow",870 .description = "LEA instruction with 3 ops or certain registers is slow",
871 .dependencies = 0,871 .dependencies = featureSet(&[_]Feature{}),
872 };872 };
873 result[@enumToInt(Feature.slow_incdec)] = .{873 result[@enumToInt(Feature.slow_incdec)] = .{
874 .index = @enumToInt(Feature.slow_incdec),874 .index = @enumToInt(Feature.slow_incdec),
875 .name = @tagName(Feature.slow_incdec),875 .name = @tagName(Feature.slow_incdec),
876 .llvm_name = "slow-incdec",876 .llvm_name = "slow-incdec",
877 .description = "INC and DEC instructions are slower than ADD and SUB",877 .description = "INC and DEC instructions are slower than ADD and SUB",
878 .dependencies = 0,878 .dependencies = featureSet(&[_]Feature{}),
879 };879 };
880 result[@enumToInt(Feature.slow_lea)] = .{880 result[@enumToInt(Feature.slow_lea)] = .{
881 .index = @enumToInt(Feature.slow_lea),881 .index = @enumToInt(Feature.slow_lea),
882 .name = @tagName(Feature.slow_lea),882 .name = @tagName(Feature.slow_lea),
883 .llvm_name = "slow-lea",883 .llvm_name = "slow-lea",
884 .description = "LEA instruction with certain arguments is slow",884 .description = "LEA instruction with certain arguments is slow",
885 .dependencies = 0,885 .dependencies = featureSet(&[_]Feature{}),
886 };886 };
887 result[@enumToInt(Feature.slow_pmaddwd)] = .{887 result[@enumToInt(Feature.slow_pmaddwd)] = .{
888 .index = @enumToInt(Feature.slow_pmaddwd),888 .index = @enumToInt(Feature.slow_pmaddwd),
889 .name = @tagName(Feature.slow_pmaddwd),889 .name = @tagName(Feature.slow_pmaddwd),
890 .llvm_name = "slow-pmaddwd",890 .llvm_name = "slow-pmaddwd",
891 .description = "PMADDWD is slower than PMULLD",891 .description = "PMADDWD is slower than PMULLD",
892 .dependencies = 0,892 .dependencies = featureSet(&[_]Feature{}),
893 };893 };
894 result[@enumToInt(Feature.slow_pmulld)] = .{894 result[@enumToInt(Feature.slow_pmulld)] = .{
895 .index = @enumToInt(Feature.slow_pmulld),895 .index = @enumToInt(Feature.slow_pmulld),
896 .name = @tagName(Feature.slow_pmulld),896 .name = @tagName(Feature.slow_pmulld),
897 .llvm_name = "slow-pmulld",897 .llvm_name = "slow-pmulld",
898 .description = "PMULLD instruction is slow",898 .description = "PMULLD instruction is slow",
899 .dependencies = 0,899 .dependencies = featureSet(&[_]Feature{}),
900 };900 };
901 result[@enumToInt(Feature.slow_shld)] = .{901 result[@enumToInt(Feature.slow_shld)] = .{
902 .index = @enumToInt(Feature.slow_shld),902 .index = @enumToInt(Feature.slow_shld),
903 .name = @tagName(Feature.slow_shld),903 .name = @tagName(Feature.slow_shld),
904 .llvm_name = "slow-shld",904 .llvm_name = "slow-shld",
905 .description = "SHLD instruction is slow",905 .description = "SHLD instruction is slow",
906 .dependencies = 0,906 .dependencies = featureSet(&[_]Feature{}),
907 };907 };
908 result[@enumToInt(Feature.slow_two_mem_ops)] = .{908 result[@enumToInt(Feature.slow_two_mem_ops)] = .{
909 .index = @enumToInt(Feature.slow_two_mem_ops),909 .index = @enumToInt(Feature.slow_two_mem_ops),
910 .name = @tagName(Feature.slow_two_mem_ops),910 .name = @tagName(Feature.slow_two_mem_ops),
911 .llvm_name = "slow-two-mem-ops",911 .llvm_name = "slow-two-mem-ops",
912 .description = "Two memory operand instructions are slow",912 .description = "Two memory operand instructions are slow",
913 .dependencies = 0,913 .dependencies = featureSet(&[_]Feature{}),
914 };914 };
915 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{915 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{
916 .index = @enumToInt(Feature.slow_unaligned_mem_16),916 .index = @enumToInt(Feature.slow_unaligned_mem_16),
917 .name = @tagName(Feature.slow_unaligned_mem_16),917 .name = @tagName(Feature.slow_unaligned_mem_16),
918 .llvm_name = "slow-unaligned-mem-16",918 .llvm_name = "slow-unaligned-mem-16",
919 .description = "Slow unaligned 16-byte memory access",919 .description = "Slow unaligned 16-byte memory access",
920 .dependencies = 0,920 .dependencies = featureSet(&[_]Feature{}),
921 };921 };
922 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{922 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{
923 .index = @enumToInt(Feature.slow_unaligned_mem_32),923 .index = @enumToInt(Feature.slow_unaligned_mem_32),
924 .name = @tagName(Feature.slow_unaligned_mem_32),924 .name = @tagName(Feature.slow_unaligned_mem_32),
925 .llvm_name = "slow-unaligned-mem-32",925 .llvm_name = "slow-unaligned-mem-32",
926 .description = "Slow unaligned 32-byte memory access",926 .description = "Slow unaligned 32-byte memory access",
927 .dependencies = 0,927 .dependencies = featureSet(&[_]Feature{}),
928 };928 };
929 result[@enumToInt(Feature.soft_float)] = .{929 result[@enumToInt(Feature.soft_float)] = .{
930 .index = @enumToInt(Feature.soft_float),930 .index = @enumToInt(Feature.soft_float),
931 .name = @tagName(Feature.soft_float),931 .name = @tagName(Feature.soft_float),
932 .llvm_name = "soft-float",932 .llvm_name = "soft-float",
933 .description = "Use software floating point features",933 .description = "Use software floating point features",
934 .dependencies = 0,934 .dependencies = featureSet(&[_]Feature{}),
935 };935 };
936 result[@enumToInt(Feature.sse)] = .{936 result[@enumToInt(Feature.sse)] = .{
937 .index = @enumToInt(Feature.sse),937 .index = @enumToInt(Feature.sse),
938 .name = @tagName(Feature.sse),938 .name = @tagName(Feature.sse),
939 .llvm_name = "sse",939 .llvm_name = "sse",
940 .description = "Enable SSE instructions",940 .description = "Enable SSE instructions",
941 .dependencies = 0,941 .dependencies = featureSet(&[_]Feature{}),
942 };942 };
943 result[@enumToInt(Feature.sse_unaligned_mem)] = .{943 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
944 .index = @enumToInt(Feature.sse_unaligned_mem),944 .index = @enumToInt(Feature.sse_unaligned_mem),
945 .name = @tagName(Feature.sse_unaligned_mem),945 .name = @tagName(Feature.sse_unaligned_mem),
946 .llvm_name = "sse-unaligned-mem",946 .llvm_name = "sse-unaligned-mem",
947 .description = "Allow unaligned memory operands with SSE instructions",947 .description = "Allow unaligned memory operands with SSE instructions",
948 .dependencies = 0,948 .dependencies = featureSet(&[_]Feature{}),
949 };949 };
950 result[@enumToInt(Feature.sse2)] = .{950 result[@enumToInt(Feature.sse2)] = .{
951 .index = @enumToInt(Feature.sse2),951 .index = @enumToInt(Feature.sse2),
...@@ -1006,7 +1006,7 @@ pub const all_features = blk: {...@@ -1006,7 +1006,7 @@ pub const all_features = blk: {
1006 .name = @tagName(Feature.tbm),1006 .name = @tagName(Feature.tbm),
1007 .llvm_name = "tbm",1007 .llvm_name = "tbm",
1008 .description = "Enable TBM instructions",1008 .description = "Enable TBM instructions",
1009 .dependencies = 0,1009 .dependencies = featureSet(&[_]Feature{}),
1010 };1010 };
1011 result[@enumToInt(Feature.vaes)] = .{1011 result[@enumToInt(Feature.vaes)] = .{
1012 .index = @enumToInt(Feature.vaes),1012 .index = @enumToInt(Feature.vaes),
...@@ -1033,21 +1033,21 @@ pub const all_features = blk: {...@@ -1033,21 +1033,21 @@ pub const all_features = blk: {
1033 .name = @tagName(Feature.waitpkg),1033 .name = @tagName(Feature.waitpkg),
1034 .llvm_name = "waitpkg",1034 .llvm_name = "waitpkg",
1035 .description = "Wait and pause enhancements",1035 .description = "Wait and pause enhancements",
1036 .dependencies = 0,1036 .dependencies = featureSet(&[_]Feature{}),
1037 };1037 };
1038 result[@enumToInt(Feature.wbnoinvd)] = .{1038 result[@enumToInt(Feature.wbnoinvd)] = .{
1039 .index = @enumToInt(Feature.wbnoinvd),1039 .index = @enumToInt(Feature.wbnoinvd),
1040 .name = @tagName(Feature.wbnoinvd),1040 .name = @tagName(Feature.wbnoinvd),
1041 .llvm_name = "wbnoinvd",1041 .llvm_name = "wbnoinvd",
1042 .description = "Write Back No Invalidate",1042 .description = "Write Back No Invalidate",
1043 .dependencies = 0,1043 .dependencies = featureSet(&[_]Feature{}),
1044 };1044 };
1045 result[@enumToInt(Feature.x87)] = .{1045 result[@enumToInt(Feature.x87)] = .{
1046 .index = @enumToInt(Feature.x87),1046 .index = @enumToInt(Feature.x87),
1047 .name = @tagName(Feature.x87),1047 .name = @tagName(Feature.x87),
1048 .llvm_name = "x87",1048 .llvm_name = "x87",
1049 .description = "Enable X87 float instructions",1049 .description = "Enable X87 float instructions",
1050 .dependencies = 0,1050 .dependencies = featureSet(&[_]Feature{}),
1051 };1051 };
1052 result[@enumToInt(Feature.xop)] = .{1052 result[@enumToInt(Feature.xop)] = .{
1053 .index = @enumToInt(Feature.xop),1053 .index = @enumToInt(Feature.xop),
...@@ -1063,28 +1063,28 @@ pub const all_features = blk: {...@@ -1063,28 +1063,28 @@ pub const all_features = blk: {
1063 .name = @tagName(Feature.xsave),1063 .name = @tagName(Feature.xsave),
1064 .llvm_name = "xsave",1064 .llvm_name = "xsave",
1065 .description = "Support xsave instructions",1065 .description = "Support xsave instructions",
1066 .dependencies = 0,1066 .dependencies = featureSet(&[_]Feature{}),
1067 };1067 };
1068 result[@enumToInt(Feature.xsavec)] = .{1068 result[@enumToInt(Feature.xsavec)] = .{
1069 .index = @enumToInt(Feature.xsavec),1069 .index = @enumToInt(Feature.xsavec),
1070 .name = @tagName(Feature.xsavec),1070 .name = @tagName(Feature.xsavec),
1071 .llvm_name = "xsavec",1071 .llvm_name = "xsavec",
1072 .description = "Support xsavec instructions",1072 .description = "Support xsavec instructions",
1073 .dependencies = 0,1073 .dependencies = featureSet(&[_]Feature{}),
1074 };1074 };
1075 result[@enumToInt(Feature.xsaveopt)] = .{1075 result[@enumToInt(Feature.xsaveopt)] = .{
1076 .index = @enumToInt(Feature.xsaveopt),1076 .index = @enumToInt(Feature.xsaveopt),
1077 .name = @tagName(Feature.xsaveopt),1077 .name = @tagName(Feature.xsaveopt),
1078 .llvm_name = "xsaveopt",1078 .llvm_name = "xsaveopt",
1079 .description = "Support xsaveopt instructions",1079 .description = "Support xsaveopt instructions",
1080 .dependencies = 0,1080 .dependencies = featureSet(&[_]Feature{}),
1081 };1081 };
1082 result[@enumToInt(Feature.xsaves)] = .{1082 result[@enumToInt(Feature.xsaves)] = .{
1083 .index = @enumToInt(Feature.xsaves),1083 .index = @enumToInt(Feature.xsaves),
1084 .name = @tagName(Feature.xsaves),1084 .name = @tagName(Feature.xsaves),
1085 .llvm_name = "xsaves",1085 .llvm_name = "xsaves",
1086 .description = "Support xsaves instructions",1086 .description = "Support xsaves instructions",
1087 .dependencies = 0,1087 .dependencies = featureSet(&[_]Feature{}),
1088 };1088 };
1089 break :blk result;1089 break :blk result;
1090};1090};
...@@ -2365,7 +2365,7 @@ pub const cpu = struct {...@@ -2365,7 +2365,7 @@ pub const cpu = struct {
2365 pub const lakemont = Cpu{2365 pub const lakemont = Cpu{
2366 .name = "lakemont",2366 .name = "lakemont",
2367 .llvm_name = "lakemont",2367 .llvm_name = "lakemont",
2368 .features = 0,2368 .features = featureSet(&[_]Feature{}),
2369 };2369 };
2370 pub const nehalem = Cpu{2370 pub const nehalem = Cpu{
2371 .name = "nehalem",2371 .name = "nehalem",
src-self-hosted/stage1.zig+58-19
...@@ -64,6 +64,7 @@ const Error = extern enum {...@@ -64,6 +64,7 @@ const Error = extern enum {
64 CacheUnavailable,64 CacheUnavailable,
65 PathTooLong,65 PathTooLong,
66 CCompilerCannotFindFile,66 CCompilerCannotFindFile,
67 NoCCompilerInstalled,
67 ReadingDepFile,68 ReadingDepFile,
68 InvalidDepFile,69 InvalidDepFile,
69 MissingArchitecture,70 MissingArchitecture,
...@@ -89,6 +90,7 @@ const Error = extern enum {...@@ -89,6 +90,7 @@ const Error = extern enum {
89 UnknownCpuFeature,90 UnknownCpuFeature,
90 InvalidCpuFeatures,91 InvalidCpuFeatures,
91 InvalidLlvmCpuFeaturesFormat,92 InvalidLlvmCpuFeaturesFormat,
93 UnknownApplicationBinaryInterface,
92};94};
9395
94const FILE = std.c.FILE;96const FILE = std.c.FILE;
...@@ -585,11 +587,12 @@ const Stage2CpuFeatures = struct {...@@ -585,11 +587,12 @@ const Stage2CpuFeatures = struct {
585587
586 fn createFromLLVM(588 fn createFromLLVM(
587 allocator: *mem.Allocator,589 allocator: *mem.Allocator,
588 arch_name: [*:0]const u8,590 zig_triple: [*:0]const u8,
589 llvm_cpu_name_z: [*:0]const u8,591 llvm_cpu_name_z: [*:0]const u8,
590 llvm_cpu_features: [*:0]const u8,592 llvm_cpu_features: [*:0]const u8,
591 ) !*Self {593 ) !*Self {
592 const arch = try Target.parseArchSub(mem.toSliceConst(u8, arch_name));594 const target = try Target.parse(mem.toSliceConst(u8, zig_triple));
595 const arch = target.Cross.arch;
593 const llvm_cpu_name = mem.toSliceConst(u8, llvm_cpu_name_z);596 const llvm_cpu_name = mem.toSliceConst(u8, llvm_cpu_name_z);
594597
595 for (arch.allCpus()) |cpu| {598 for (arch.allCpus()) |cpu| {
...@@ -620,8 +623,8 @@ const Stage2CpuFeatures = struct {...@@ -620,8 +623,8 @@ const Stage2CpuFeatures = struct {
620 const this_llvm_name = feature.llvm_name orelse continue;623 const this_llvm_name = feature.llvm_name orelse continue;
621 if (mem.eql(u8, llvm_feat, this_llvm_name)) {624 if (mem.eql(u8, llvm_feat, this_llvm_name)) {
622 switch (op) {625 switch (op) {
623 .add => set |= @as(Target.Cpu.Feature.Set, 1) << @intCast(u7, index),626 .add => set.addFeature(@intCast(u8, index)),
624 .sub => set &= ~(@as(Target.Cpu.Feature.Set, 1) << @intCast(u7, index)),627 .sub => set.removeFeature(@intCast(u8, index)),
625 }628 }
626 break;629 break;
627 }630 }
...@@ -691,7 +694,7 @@ const Stage2CpuFeatures = struct {...@@ -691,7 +694,7 @@ const Stage2CpuFeatures = struct {
691 }694 }
692695
693 for (all_features) |feature, index| {696 for (all_features) |feature, index| {
694 if (!Target.Cpu.Feature.isEnabled(feature_set, @intCast(u7, index))) continue;697 if (!feature_set.isEnabled(@intCast(u8, index))) continue;
695698
696 if (feature.llvm_name) |llvm_name| {699 if (feature.llvm_name) |llvm_name| {
697 try llvm_features_buffer.append("+");700 try llvm_features_buffer.append("+");
...@@ -736,43 +739,75 @@ const Stage2CpuFeatures = struct {...@@ -736,43 +739,75 @@ const Stage2CpuFeatures = struct {
736// ABI warning739// ABI warning
737export fn stage2_cpu_features_parse_cpu(740export fn stage2_cpu_features_parse_cpu(
738 result: **Stage2CpuFeatures,741 result: **Stage2CpuFeatures,
739 arch_name: [*:0]const u8,742 zig_triple: [*:0]const u8,
740 cpu_name: [*:0]const u8,743 cpu_name: [*:0]const u8,
741) Error {744) Error {
742 result.* = parseCpu(arch_name, cpu_name) catch |err| switch (err) {745 result.* = parseCpu(zig_triple, cpu_name) catch |err| switch (err) {
743 error.OutOfMemory => return .OutOfMemory,746 error.OutOfMemory => return .OutOfMemory,
744 error.UnknownCpu => return .UnknownCpu,
745 error.UnknownArchitecture => return .UnknownArchitecture,747 error.UnknownArchitecture => return .UnknownArchitecture,
746 error.UnknownSubArchitecture => return .UnknownSubArchitecture,748 error.UnknownSubArchitecture => return .UnknownSubArchitecture,
749 error.UnknownOperatingSystem => return .UnknownOperatingSystem,
750 error.UnknownApplicationBinaryInterface => return .UnknownApplicationBinaryInterface,
751 error.MissingOperatingSystem => return .MissingOperatingSystem,
752 error.MissingArchitecture => return .MissingArchitecture,
747 };753 };
748 return .None;754 return .None;
749}755}
750756
751fn parseCpu(arch_name: [*:0]const u8, cpu_name: [*:0]const u8) !*Stage2CpuFeatures {757fn parseCpu(zig_triple: [*:0]const u8, cpu_name_z: [*:0]const u8) !*Stage2CpuFeatures {
752 const arch = try Target.parseArchSub(mem.toSliceConst(u8, arch_name));758 const cpu_name = mem.toSliceConst(u8, cpu_name_z);
753 const cpu = try arch.parseCpu(mem.toSliceConst(u8, cpu_name));759 const target = try Target.parse(mem.toSliceConst(u8, zig_triple));
760 const arch = target.Cross.arch;
761 const cpu = arch.parseCpu(cpu_name) catch |err| switch (err) {
762 error.UnknownCpu => {
763 std.debug.warn("Unknown CPU: '{}'\nAvailable CPUs for architecture '{}':\n", .{
764 cpu_name,
765 @tagName(arch),
766 });
767 for (arch.allCpus()) |cpu| {
768 std.debug.warn(" {}\n", .{cpu.name});
769 }
770 process.exit(1);
771 },
772 else => |e| return e,
773 };
754 return Stage2CpuFeatures.createFromCpu(std.heap.c_allocator, arch, cpu);774 return Stage2CpuFeatures.createFromCpu(std.heap.c_allocator, arch, cpu);
755}775}
756776
757// ABI warning777// ABI warning
758export fn stage2_cpu_features_parse_features(778export fn stage2_cpu_features_parse_features(
759 result: **Stage2CpuFeatures,779 result: **Stage2CpuFeatures,
760 arch_name: [*:0]const u8,780 zig_triple: [*:0]const u8,
761 features_text: [*:0]const u8,781 features_text: [*:0]const u8,
762) Error {782) Error {
763 result.* = parseFeatures(arch_name, features_text) catch |err| switch (err) {783 result.* = parseFeatures(zig_triple, features_text) catch |err| switch (err) {
764 error.OutOfMemory => return .OutOfMemory,784 error.OutOfMemory => return .OutOfMemory,
765 error.UnknownCpuFeature => return .UnknownCpuFeature,
766 error.InvalidCpuFeatures => return .InvalidCpuFeatures,785 error.InvalidCpuFeatures => return .InvalidCpuFeatures,
767 error.UnknownArchitecture => return .UnknownArchitecture,786 error.UnknownArchitecture => return .UnknownArchitecture,
768 error.UnknownSubArchitecture => return .UnknownSubArchitecture,787 error.UnknownSubArchitecture => return .UnknownSubArchitecture,
788 error.UnknownOperatingSystem => return .UnknownOperatingSystem,
789 error.UnknownApplicationBinaryInterface => return .UnknownApplicationBinaryInterface,
790 error.MissingOperatingSystem => return .MissingOperatingSystem,
791 error.MissingArchitecture => return .MissingArchitecture,
769 };792 };
770 return .None;793 return .None;
771}794}
772795
773fn parseFeatures(arch_name: [*:0]const u8, features_text: [*:0]const u8) !*Stage2CpuFeatures {796fn parseFeatures(zig_triple: [*:0]const u8, features_text: [*:0]const u8) !*Stage2CpuFeatures {
774 const arch = try Target.parseArchSub(mem.toSliceConst(u8, arch_name));797 const target = try Target.parse(mem.toSliceConst(u8, zig_triple));
775 const set = try arch.parseCpuFeatureSet(mem.toSliceConst(u8, features_text));798 const arch = target.Cross.arch;
799 const set = arch.parseCpuFeatureSet(mem.toSliceConst(u8, features_text)) catch |err| switch (err) {
800 error.UnknownCpuFeature => {
801 std.debug.warn("Unknown CPU features specified.\nAvailable CPU features for architecture '{}':\n", .{
802 @tagName(arch),
803 });
804 for (arch.allFeaturesList()) |feature| {
805 std.debug.warn(" {}\n", .{feature.name});
806 }
807 process.exit(1);
808 },
809 else => |e| return e,
810 };
776 return Stage2CpuFeatures.createFromCpuFeatures(std.heap.c_allocator, arch, set);811 return Stage2CpuFeatures.createFromCpuFeatures(std.heap.c_allocator, arch, set);
777}812}
778813
...@@ -787,13 +822,13 @@ export fn stage2_cpu_features_baseline(result: **Stage2CpuFeatures) Error {...@@ -787,13 +822,13 @@ export fn stage2_cpu_features_baseline(result: **Stage2CpuFeatures) Error {
787// ABI warning822// ABI warning
788export fn stage2_cpu_features_llvm(823export fn stage2_cpu_features_llvm(
789 result: **Stage2CpuFeatures,824 result: **Stage2CpuFeatures,
790 arch_name: [*:0]const u8,825 zig_triple: [*:0]const u8,
791 llvm_cpu_name: [*:0]const u8,826 llvm_cpu_name: [*:0]const u8,
792 llvm_cpu_features: [*:0]const u8,827 llvm_cpu_features: [*:0]const u8,
793) Error {828) Error {
794 result.* = Stage2CpuFeatures.createFromLLVM(829 result.* = Stage2CpuFeatures.createFromLLVM(
795 std.heap.c_allocator,830 std.heap.c_allocator,
796 arch_name,831 zig_triple,
797 llvm_cpu_name,832 llvm_cpu_name,
798 llvm_cpu_features,833 llvm_cpu_features,
799 ) catch |err| switch (err) {834 ) catch |err| switch (err) {
...@@ -801,6 +836,10 @@ export fn stage2_cpu_features_llvm(...@@ -801,6 +836,10 @@ export fn stage2_cpu_features_llvm(
801 error.UnknownArchitecture => return .UnknownArchitecture,836 error.UnknownArchitecture => return .UnknownArchitecture,
802 error.UnknownSubArchitecture => return .UnknownSubArchitecture,837 error.UnknownSubArchitecture => return .UnknownSubArchitecture,
803 error.InvalidLlvmCpuFeaturesFormat => return .InvalidLlvmCpuFeaturesFormat,838 error.InvalidLlvmCpuFeaturesFormat => return .InvalidLlvmCpuFeaturesFormat,
839 error.UnknownOperatingSystem => return .UnknownOperatingSystem,
840 error.UnknownApplicationBinaryInterface => return .UnknownApplicationBinaryInterface,
841 error.MissingOperatingSystem => return .MissingOperatingSystem,
842 error.MissingArchitecture => return .MissingArchitecture,
804 };843 };
805 return .None;844 return .None;
806}845}
src/error.cpp+1
...@@ -63,6 +63,7 @@ const char *err_str(Error err) {...@@ -63,6 +63,7 @@ const char *err_str(Error err) {
63 case ErrorUnknownCpuFeature: return "unknown CPU feature";63 case ErrorUnknownCpuFeature: return "unknown CPU feature";
64 case ErrorInvalidCpuFeatures: return "invalid CPU features";64 case ErrorInvalidCpuFeatures: return "invalid CPU features";
65 case ErrorInvalidLlvmCpuFeaturesFormat: return "invalid LLVM CPU features format";65 case ErrorInvalidLlvmCpuFeaturesFormat: return "invalid LLVM CPU features format";
66 case ErrorUnknownApplicationBinaryInterface: return "unknown application binary interface";
66 }67 }
67 return "(invalid error)";68 return "(invalid error)";
68}69}
src/main.cpp+7-6
...@@ -977,16 +977,19 @@ int main(int argc, char **argv) {...@@ -977,16 +977,19 @@ int main(int argc, char **argv) {
977 }977 }
978 }978 }
979979
980 Buf zig_triple_buf = BUF_INIT;
981 target_triple_zig(&zig_triple_buf, &target);
982
980 if (cpu && features) {983 if (cpu && features) {
981 fprintf(stderr, "-target-cpu and -target-feature options not allowed together\n");984 fprintf(stderr, "-target-cpu and -target-feature options not allowed together\n");
982 return main_exit(root_progress_node, EXIT_FAILURE);985 return main_exit(root_progress_node, EXIT_FAILURE);
983 } else if (cpu) {986 } else if (cpu) {
984 if ((err = stage2_cpu_features_parse_cpu(&target.cpu_features, target_arch_name(target.arch), cpu))) {987 if ((err = stage2_cpu_features_parse_cpu(&target.cpu_features, buf_ptr(&zig_triple_buf), cpu))) {
985 fprintf(stderr, "-target-cpu error: %s\n", err_str(err));988 fprintf(stderr, "-target-cpu error: %s\n", err_str(err));
986 return main_exit(root_progress_node, EXIT_FAILURE);989 return main_exit(root_progress_node, EXIT_FAILURE);
987 }990 }
988 } else if (features) {991 } else if (features) {
989 if ((err = stage2_cpu_features_parse_features(&target.cpu_features, target_arch_name(target.arch),992 if ((err = stage2_cpu_features_parse_features(&target.cpu_features, buf_ptr(&zig_triple_buf),
990 features)))993 features)))
991 {994 {
992 fprintf(stderr, "-target-feature error: %s\n", err_str(err));995 fprintf(stderr, "-target-feature error: %s\n", err_str(err));
...@@ -995,7 +998,7 @@ int main(int argc, char **argv) {...@@ -995,7 +998,7 @@ int main(int argc, char **argv) {
995 } else if (target.is_native) {998 } else if (target.is_native) {
996 const char *cpu_name = ZigLLVMGetHostCPUName();999 const char *cpu_name = ZigLLVMGetHostCPUName();
997 const char *cpu_features = ZigLLVMGetNativeFeatures();1000 const char *cpu_features = ZigLLVMGetNativeFeatures();
998 if ((err = stage2_cpu_features_llvm(&target.cpu_features, target_arch_name(target.arch),1001 if ((err = stage2_cpu_features_llvm(&target.cpu_features, buf_ptr(&zig_triple_buf),
999 cpu_name, cpu_features)))1002 cpu_name, cpu_features)))
1000 {1003 {
1001 fprintf(stderr, "unable to determine native CPU features: %s\n", err_str(err));1004 fprintf(stderr, "unable to determine native CPU features: %s\n", err_str(err));
...@@ -1014,9 +1017,7 @@ int main(int argc, char **argv) {...@@ -1014,9 +1017,7 @@ int main(int argc, char **argv) {
1014 }1017 }
10151018
1016 if (target_requires_pic(&target, have_libc) && want_pic == WantPICDisabled) {1019 if (target_requires_pic(&target, have_libc) && want_pic == WantPICDisabled) {
1017 Buf triple_buf = BUF_INIT;1020 fprintf(stderr, "`--disable-pic` is incompatible with target '%s'\n", buf_ptr(&zig_triple_buf));
1018 target_triple_zig(&triple_buf, &target);
1019 fprintf(stderr, "`--disable-pic` is incompatible with target '%s'\n", buf_ptr(&triple_buf));
1020 return print_error_usage(arg0);1021 return print_error_usage(arg0);
1021 }1022 }
10221023
src/userland.cpp+3-3
...@@ -96,11 +96,11 @@ struct Stage2CpuFeatures {...@@ -96,11 +96,11 @@ struct Stage2CpuFeatures {
96 const char *cache_hash;96 const char *cache_hash;
97};97};
9898
99Error stage2_cpu_features_parse_cpu(Stage2CpuFeatures **out, const char *arch, const char *str) {99Error stage2_cpu_features_parse_cpu(Stage2CpuFeatures **out, const char *zig_triple, const char *str) {
100 const char *msg = "stage0 called stage2_cpu_features_parse_cpu";100 const char *msg = "stage0 called stage2_cpu_features_parse_cpu";
101 stage2_panic(msg, strlen(msg));101 stage2_panic(msg, strlen(msg));
102}102}
103Error stage2_cpu_features_parse_features(Stage2CpuFeatures **out, const char *arch, const char *str) {103Error stage2_cpu_features_parse_features(Stage2CpuFeatures **out, const char *zig_triple, const char *str) {
104 const char *msg = "stage0 called stage2_cpu_features_parse_features";104 const char *msg = "stage0 called stage2_cpu_features_parse_features";
105 stage2_panic(msg, strlen(msg));105 stage2_panic(msg, strlen(msg));
106}106}
...@@ -111,7 +111,7 @@ Error stage2_cpu_features_baseline(Stage2CpuFeatures **out) {...@@ -111,7 +111,7 @@ Error stage2_cpu_features_baseline(Stage2CpuFeatures **out) {
111 *out = result;111 *out = result;
112 return ErrorNone;112 return ErrorNone;
113}113}
114Error stage2_cpu_features_llvm(Stage2CpuFeatures **out, const char *arch,114Error stage2_cpu_features_llvm(Stage2CpuFeatures **out, const char *zig_triple,
115 const char *llvm_cpu_name, const char *llvm_features)115 const char *llvm_cpu_name, const char *llvm_features)
116{116{
117 Stage2CpuFeatures *result = allocate<Stage2CpuFeatures>(1, "Stage2CpuFeatures");117 Stage2CpuFeatures *result = allocate<Stage2CpuFeatures>(1, "Stage2CpuFeatures");
src/userland.h+4-3
...@@ -83,6 +83,7 @@ enum Error {...@@ -83,6 +83,7 @@ enum Error {
83 ErrorUnknownCpuFeature,83 ErrorUnknownCpuFeature,
84 ErrorInvalidCpuFeatures,84 ErrorInvalidCpuFeatures,
85 ErrorInvalidLlvmCpuFeaturesFormat,85 ErrorInvalidLlvmCpuFeaturesFormat,
86 ErrorUnknownApplicationBinaryInterface,
86};87};
8788
88// ABI warning89// ABI warning
...@@ -184,18 +185,18 @@ struct Stage2CpuFeatures;...@@ -184,18 +185,18 @@ struct Stage2CpuFeatures;
184185
185// ABI warning186// ABI warning
186ZIG_EXTERN_C Error stage2_cpu_features_parse_cpu(struct Stage2CpuFeatures **result,187ZIG_EXTERN_C Error stage2_cpu_features_parse_cpu(struct Stage2CpuFeatures **result,
187 const char *arch, const char *cpu_name);188 const char *zig_triple, const char *cpu_name);
188189
189// ABI warning190// ABI warning
190ZIG_EXTERN_C Error stage2_cpu_features_parse_features(struct Stage2CpuFeatures **result,191ZIG_EXTERN_C Error stage2_cpu_features_parse_features(struct Stage2CpuFeatures **result,
191 const char *arch, const char *features);192 const char *zig_triple, const char *features);
192193
193// ABI warning194// ABI warning
194ZIG_EXTERN_C Error stage2_cpu_features_baseline(struct Stage2CpuFeatures **result);195ZIG_EXTERN_C Error stage2_cpu_features_baseline(struct Stage2CpuFeatures **result);
195196
196// ABI warning197// ABI warning
197ZIG_EXTERN_C Error stage2_cpu_features_llvm(struct Stage2CpuFeatures **result,198ZIG_EXTERN_C Error stage2_cpu_features_llvm(struct Stage2CpuFeatures **result,
198 const char *arch, const char *llvm_cpu_name, const char *llvm_features);199 const char *zig_triple, const char *llvm_cpu_name, const char *llvm_features);
199200
200// ABI warning201// ABI warning
201ZIG_EXTERN_C const char *stage2_cpu_features_get_llvm_cpu(const struct Stage2CpuFeatures *cpu_features);202ZIG_EXTERN_C const char *stage2_cpu_features_get_llvm_cpu(const struct Stage2CpuFeatures *cpu_features);