master
1//! This file is auto-generated by tools/update_cpu_features.zig.
2
3const std = @import("../std.zig");
4const CpuFeature = std.Target.Cpu.Feature;
5const CpuModel = std.Target.Cpu.Model;
6
7pub const Feature = enum {
8 arbitrary_precision_integers,
9 float16,
10 float64,
11 generic_pointer,
12 int64,
13 storage_push_constant16,
14 v1_0,
15 v1_1,
16 v1_2,
17 v1_3,
18 v1_4,
19 v1_5,
20 v1_6,
21 variable_pointers,
22 vector16,
23};
24
25pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
26pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
27pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
28pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
29
30pub const all_features = blk: {
31 @setEvalBranchQuota(2000);
32 const len = @typeInfo(Feature).@"enum".fields.len;
33 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
34 var result: [len]CpuFeature = undefined;
35 result[@intFromEnum(Feature.arbitrary_precision_integers)] = .{
36 .llvm_name = null,
37 .description = "Enable SPV_INTEL_arbitrary_precision_integers extension and the ArbitraryPrecisionIntegersINTEL capability",
38 .dependencies = featureSet(&[_]Feature{
39 .v1_5,
40 }),
41 };
42 result[@intFromEnum(Feature.float16)] = .{
43 .llvm_name = null,
44 .description = "Enable Float16 capability",
45 .dependencies = featureSet(&[_]Feature{
46 .v1_0,
47 }),
48 };
49 result[@intFromEnum(Feature.float64)] = .{
50 .llvm_name = null,
51 .description = "Enable Float64 capability",
52 .dependencies = featureSet(&[_]Feature{
53 .v1_0,
54 }),
55 };
56 result[@intFromEnum(Feature.generic_pointer)] = .{
57 .llvm_name = null,
58 .description = "Enable GenericPointer capability",
59 .dependencies = featureSet(&[_]Feature{
60 .v1_0,
61 }),
62 };
63 result[@intFromEnum(Feature.int64)] = .{
64 .llvm_name = null,
65 .description = "Enable Int64 capability",
66 .dependencies = featureSet(&[_]Feature{
67 .v1_0,
68 }),
69 };
70 result[@intFromEnum(Feature.storage_push_constant16)] = .{
71 .llvm_name = null,
72 .description = "Enable SPV_KHR_16bit_storage extension and the StoragePushConstant16 capability",
73 .dependencies = featureSet(&[_]Feature{
74 .v1_3,
75 }),
76 };
77 result[@intFromEnum(Feature.v1_0)] = .{
78 .llvm_name = null,
79 .description = "Enable version 1.0",
80 .dependencies = featureSet(&[_]Feature{}),
81 };
82 result[@intFromEnum(Feature.v1_1)] = .{
83 .llvm_name = null,
84 .description = "Enable version 1.1",
85 .dependencies = featureSet(&[_]Feature{
86 .v1_0,
87 }),
88 };
89 result[@intFromEnum(Feature.v1_2)] = .{
90 .llvm_name = null,
91 .description = "Enable version 1.2",
92 .dependencies = featureSet(&[_]Feature{
93 .v1_1,
94 }),
95 };
96 result[@intFromEnum(Feature.v1_3)] = .{
97 .llvm_name = null,
98 .description = "Enable version 1.3",
99 .dependencies = featureSet(&[_]Feature{
100 .v1_2,
101 }),
102 };
103 result[@intFromEnum(Feature.v1_4)] = .{
104 .llvm_name = null,
105 .description = "Enable version 1.4",
106 .dependencies = featureSet(&[_]Feature{
107 .v1_3,
108 }),
109 };
110 result[@intFromEnum(Feature.v1_5)] = .{
111 .llvm_name = null,
112 .description = "Enable version 1.5",
113 .dependencies = featureSet(&[_]Feature{
114 .v1_4,
115 }),
116 };
117 result[@intFromEnum(Feature.v1_6)] = .{
118 .llvm_name = null,
119 .description = "Enable version 1.6",
120 .dependencies = featureSet(&[_]Feature{
121 .v1_5,
122 }),
123 };
124 result[@intFromEnum(Feature.variable_pointers)] = .{
125 .llvm_name = null,
126 .description = "Enable SPV_KHR_physical_storage_buffer extension and the PhysicalStorageBufferAddresses capability",
127 .dependencies = featureSet(&[_]Feature{
128 .v1_0,
129 }),
130 };
131 result[@intFromEnum(Feature.vector16)] = .{
132 .llvm_name = null,
133 .description = "Enable Vector16 capability",
134 .dependencies = featureSet(&[_]Feature{
135 .v1_0,
136 }),
137 };
138 const ti = @typeInfo(Feature);
139 for (&result, 0..) |*elem, i| {
140 elem.index = i;
141 elem.name = ti.@"enum".fields[i].name;
142 }
143 break :blk result;
144};
145
146pub const cpu = struct {
147 pub const generic: CpuModel = .{
148 .name = "generic",
149 .llvm_name = "generic",
150 .features = featureSet(&[_]Feature{}),
151 };
152 pub const opencl_v2: CpuModel = .{
153 .name = "opencl_v2",
154 .llvm_name = null,
155 .features = featureSet(&[_]Feature{
156 .v1_2,
157 }),
158 };
159 pub const vulkan_v1_2: CpuModel = .{
160 .name = "vulkan_v1_2",
161 .llvm_name = null,
162 .features = featureSet(&[_]Feature{
163 .v1_5,
164 }),
165 };
166};