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 bool,
9 clamps,
10 coprocessor,
11 dcache,
12 debug,
13 density,
14 dfpaccel,
15 div32,
16 exception,
17 extendedl32r,
18 forced_atomics,
19 fp,
20 highpriinterrupts,
21 highpriinterrupts_level3,
22 highpriinterrupts_level4,
23 highpriinterrupts_level5,
24 highpriinterrupts_level6,
25 highpriinterrupts_level7,
26 interrupt,
27 loop,
28 mac16,
29 minmax,
30 miscsr,
31 mul16,
32 mul32,
33 mul32high,
34 nsa,
35 prid,
36 regprotect,
37 rvector,
38 s32c1i,
39 sext,
40 threadptr,
41 timers1,
42 timers2,
43 timers3,
44 windowed,
45};
46
47pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
48pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
49pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
50pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
51
52pub const all_features = blk: {
53 const len = @typeInfo(Feature).@"enum".field_names.len;
54 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
55 var result: [len]CpuFeature = undefined;
56 result[@backingInt(Feature.bool)] = .{
57 .llvm_name = "bool",
58 .description = "Enable Xtensa Boolean extension",
59 .dependencies = featureSet(&[_]Feature{}),
60 };
61 result[@backingInt(Feature.clamps)] = .{
62 .llvm_name = "clamps",
63 .description = "Enable Xtensa CLAMPS option",
64 .dependencies = featureSet(&[_]Feature{}),
65 };
66 result[@backingInt(Feature.coprocessor)] = .{
67 .llvm_name = "coprocessor",
68 .description = "Enable Xtensa Coprocessor option",
69 .dependencies = featureSet(&[_]Feature{}),
70 };
71 result[@backingInt(Feature.dcache)] = .{
72 .llvm_name = "dcache",
73 .description = "Enable Xtensa Data Cache option",
74 .dependencies = featureSet(&[_]Feature{}),
75 };
76 result[@backingInt(Feature.debug)] = .{
77 .llvm_name = "debug",
78 .description = "Enable Xtensa Debug option",
79 .dependencies = featureSet(&[_]Feature{}),
80 };
81 result[@backingInt(Feature.density)] = .{
82 .llvm_name = "density",
83 .description = "Enable Density instructions",
84 .dependencies = featureSet(&[_]Feature{}),
85 };
86 result[@backingInt(Feature.dfpaccel)] = .{
87 .llvm_name = "dfpaccel",
88 .description = "Enable Xtensa Double Precision FP acceleration",
89 .dependencies = featureSet(&[_]Feature{}),
90 };
91 result[@backingInt(Feature.div32)] = .{
92 .llvm_name = "div32",
93 .description = "Enable Xtensa Div32 option",
94 .dependencies = featureSet(&[_]Feature{}),
95 };
96 result[@backingInt(Feature.exception)] = .{
97 .llvm_name = "exception",
98 .description = "Enable Xtensa Exception option",
99 .dependencies = featureSet(&[_]Feature{}),
100 };
101 result[@backingInt(Feature.extendedl32r)] = .{
102 .llvm_name = "extendedl32r",
103 .description = "Enable Xtensa Extended L32R option",
104 .dependencies = featureSet(&[_]Feature{}),
105 };
106 result[@backingInt(Feature.forced_atomics)] = .{
107 .llvm_name = "forced-atomics",
108 .description = "Assume that lock-free native-width atomics are available",
109 .dependencies = featureSet(&[_]Feature{}),
110 };
111 result[@backingInt(Feature.fp)] = .{
112 .llvm_name = "fp",
113 .description = "Enable Xtensa Single FP instructions",
114 .dependencies = featureSet(&[_]Feature{}),
115 };
116 result[@backingInt(Feature.highpriinterrupts)] = .{
117 .llvm_name = "highpriinterrupts",
118 .description = "Enable Xtensa HighPriInterrupts option",
119 .dependencies = featureSet(&[_]Feature{}),
120 };
121 result[@backingInt(Feature.highpriinterrupts_level3)] = .{
122 .llvm_name = "highpriinterrupts-level3",
123 .description = "Enable Xtensa HighPriInterrupts Level3",
124 .dependencies = featureSet(&[_]Feature{
125 .highpriinterrupts,
126 }),
127 };
128 result[@backingInt(Feature.highpriinterrupts_level4)] = .{
129 .llvm_name = "highpriinterrupts-level4",
130 .description = "Enable Xtensa HighPriInterrupts Level4",
131 .dependencies = featureSet(&[_]Feature{
132 .highpriinterrupts,
133 }),
134 };
135 result[@backingInt(Feature.highpriinterrupts_level5)] = .{
136 .llvm_name = "highpriinterrupts-level5",
137 .description = "Enable Xtensa HighPriInterrupts Level5",
138 .dependencies = featureSet(&[_]Feature{
139 .highpriinterrupts,
140 }),
141 };
142 result[@backingInt(Feature.highpriinterrupts_level6)] = .{
143 .llvm_name = "highpriinterrupts-level6",
144 .description = "Enable Xtensa HighPriInterrupts Level6",
145 .dependencies = featureSet(&[_]Feature{
146 .highpriinterrupts,
147 }),
148 };
149 result[@backingInt(Feature.highpriinterrupts_level7)] = .{
150 .llvm_name = "highpriinterrupts-level7",
151 .description = "Enable Xtensa HighPriInterrupts Level7",
152 .dependencies = featureSet(&[_]Feature{
153 .highpriinterrupts,
154 }),
155 };
156 result[@backingInt(Feature.interrupt)] = .{
157 .llvm_name = "interrupt",
158 .description = "Enable Xtensa Interrupt option",
159 .dependencies = featureSet(&[_]Feature{}),
160 };
161 result[@backingInt(Feature.loop)] = .{
162 .llvm_name = "loop",
163 .description = "Enable Xtensa Loop extension",
164 .dependencies = featureSet(&[_]Feature{}),
165 };
166 result[@backingInt(Feature.mac16)] = .{
167 .llvm_name = "mac16",
168 .description = "Enable Xtensa MAC16 instructions",
169 .dependencies = featureSet(&[_]Feature{}),
170 };
171 result[@backingInt(Feature.minmax)] = .{
172 .llvm_name = "minmax",
173 .description = "Enable Xtensa MINMAX option",
174 .dependencies = featureSet(&[_]Feature{}),
175 };
176 result[@backingInt(Feature.miscsr)] = .{
177 .llvm_name = "miscsr",
178 .description = "Enable Xtensa Miscellaneous SR option",
179 .dependencies = featureSet(&[_]Feature{}),
180 };
181 result[@backingInt(Feature.mul16)] = .{
182 .llvm_name = "mul16",
183 .description = "Enable Xtensa Mul16 option",
184 .dependencies = featureSet(&[_]Feature{}),
185 };
186 result[@backingInt(Feature.mul32)] = .{
187 .llvm_name = "mul32",
188 .description = "Enable Xtensa Mul32 option",
189 .dependencies = featureSet(&[_]Feature{}),
190 };
191 result[@backingInt(Feature.mul32high)] = .{
192 .llvm_name = "mul32high",
193 .description = "Enable Xtensa Mul32High option",
194 .dependencies = featureSet(&[_]Feature{}),
195 };
196 result[@backingInt(Feature.nsa)] = .{
197 .llvm_name = "nsa",
198 .description = "Enable Xtensa NSA option",
199 .dependencies = featureSet(&[_]Feature{}),
200 };
201 result[@backingInt(Feature.prid)] = .{
202 .llvm_name = "prid",
203 .description = "Enable Xtensa Processor ID option",
204 .dependencies = featureSet(&[_]Feature{}),
205 };
206 result[@backingInt(Feature.regprotect)] = .{
207 .llvm_name = "regprotect",
208 .description = "Enable Xtensa Region Protection option",
209 .dependencies = featureSet(&[_]Feature{}),
210 };
211 result[@backingInt(Feature.rvector)] = .{
212 .llvm_name = "rvector",
213 .description = "Enable Xtensa Relocatable Vector option",
214 .dependencies = featureSet(&[_]Feature{}),
215 };
216 result[@backingInt(Feature.s32c1i)] = .{
217 .llvm_name = "s32c1i",
218 .description = "Enable Xtensa S32C1I option",
219 .dependencies = featureSet(&[_]Feature{}),
220 };
221 result[@backingInt(Feature.sext)] = .{
222 .llvm_name = "sext",
223 .description = "Enable Xtensa Sign Extend option",
224 .dependencies = featureSet(&[_]Feature{}),
225 };
226 result[@backingInt(Feature.threadptr)] = .{
227 .llvm_name = "threadptr",
228 .description = "Enable Xtensa THREADPTR option",
229 .dependencies = featureSet(&[_]Feature{}),
230 };
231 result[@backingInt(Feature.timers1)] = .{
232 .llvm_name = "timers1",
233 .description = "Enable Xtensa Timers 1",
234 .dependencies = featureSet(&[_]Feature{}),
235 };
236 result[@backingInt(Feature.timers2)] = .{
237 .llvm_name = "timers2",
238 .description = "Enable Xtensa Timers 2",
239 .dependencies = featureSet(&[_]Feature{}),
240 };
241 result[@backingInt(Feature.timers3)] = .{
242 .llvm_name = "timers3",
243 .description = "Enable Xtensa Timers 3",
244 .dependencies = featureSet(&[_]Feature{}),
245 };
246 result[@backingInt(Feature.windowed)] = .{
247 .llvm_name = "windowed",
248 .description = "Enable Xtensa Windowed Register option",
249 .dependencies = featureSet(&[_]Feature{}),
250 };
251 const ti = @typeInfo(Feature);
252 for (&result, 0..) |*elem, i| {
253 elem.index = i;
254 elem.name = ti.@"enum".field_names[i];
255 }
256 break :blk result;
257};
258
259pub const cpu = struct {
260 pub const esp32: CpuModel = .{
261 .name = "esp32",
262 .llvm_name = "esp32",
263 .features = featureSet(&[_]Feature{
264 .bool,
265 .clamps,
266 .coprocessor,
267 .dcache,
268 .debug,
269 .density,
270 .dfpaccel,
271 .div32,
272 .exception,
273 .fp,
274 .highpriinterrupts_level7,
275 .interrupt,
276 .loop,
277 .mac16,
278 .minmax,
279 .miscsr,
280 .mul16,
281 .mul32,
282 .mul32high,
283 .nsa,
284 .prid,
285 .regprotect,
286 .rvector,
287 .s32c1i,
288 .sext,
289 .threadptr,
290 .timers3,
291 .windowed,
292 }),
293 };
294 pub const esp8266: CpuModel = .{
295 .name = "esp8266",
296 .llvm_name = "esp8266",
297 .features = featureSet(&[_]Feature{
298 .debug,
299 .density,
300 .exception,
301 .extendedl32r,
302 .highpriinterrupts_level3,
303 .interrupt,
304 .mul16,
305 .mul32,
306 .nsa,
307 .prid,
308 .regprotect,
309 .rvector,
310 .timers1,
311 }),
312 };
313 pub const generic: CpuModel = .{
314 .name = "generic",
315 .llvm_name = "generic",
316 .features = featureSet(&[_]Feature{}),
317 };
318};