authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 22:21:45-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 22:21:45-05:00
log6e88883edf8400b835f5d792b8aba54c8d4490f2
tree92260e9312bf86992782ee8cc5d8c7e24d9589d3
parentf3dd9bbdaca5ba3735feb405a890a4646905533a
signaturelock-open Commit is signed but in an unrecognized format.

import data from llvm 9


15 files changed, 11925 insertions(+), 14704 deletions(-)

lib/std/target/aarch64.zig+800-592
...@@ -2,21 +2,23 @@ const std = @import("../std.zig");...@@ -2,21 +2,23 @@ const std = @import("../std.zig");
2const Cpu = std.Target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const Feature = enum {4pub const Feature = enum {
5 a35,
6 a53,
7 a55,
8 a57,
9 a72,
10 a73,
11 a75,
12 a76,
5 aes,13 aes,
6 am,
7 aggressive_fma,14 aggressive_fma,
8 altnzcv,
9 alternate_sextload_cvt_f32_pattern,15 alternate_sextload_cvt_f32_pattern,
16 altnzcv,
17 am,
10 arith_bcc_fusion,18 arith_bcc_fusion,
11 arith_cbz_fusion,19 arith_cbz_fusion,
12 balance_fp_ops,20 balance_fp_ops,
13 bti,21 bti,
14 ccidx,
15 ccpp,
16 crc,
17 ccdp,
18 call_saved_x8,
19 call_saved_x9,
20 call_saved_x10,22 call_saved_x10,
21 call_saved_x11,23 call_saved_x11,
22 call_saved_x12,24 call_saved_x12,
...@@ -24,56 +26,60 @@ pub const Feature = enum {...@@ -24,56 +26,60 @@ pub const Feature = enum {
24 call_saved_x14,26 call_saved_x14,
25 call_saved_x15,27 call_saved_x15,
26 call_saved_x18,28 call_saved_x18,
29 call_saved_x8,
30 call_saved_x9,
31 ccdp,
32 ccidx,
33 ccpp,
27 complxnum,34 complxnum,
35 crc,
28 crypto,36 crypto,
29 custom_cheap_as_move,37 custom_cheap_as_move,
30 dit,38 cyclone,
31 disable_latency_sched_heuristic,39 disable_latency_sched_heuristic,
40 dit,
32 dotprod,41 dotprod,
33 exynos_cheap_as_move,42 exynos_cheap_as_move,
43 exynosm1,
44 exynosm2,
45 exynosm3,
46 exynosm4,
47 falkor,
34 fmi,48 fmi,
35 fp16fml,49 force_32bit_jump_tables,
36 fp_armv8,50 fp_armv8,
51 fp16fml,
37 fptoint,52 fptoint,
38 force_32bit_jump_tables,
39 fullfp16,53 fullfp16,
40 fuse_aes,
41 fuse_address,54 fuse_address,
55 fuse_aes,
42 fuse_arith_logic,56 fuse_arith_logic,
43 fuse_csel,
44 fuse_crypto_eor,57 fuse_crypto_eor,
58 fuse_csel,
45 fuse_literals,59 fuse_literals,
46 jsconv,60 jsconv,
61 kryo,
47 lor,62 lor,
48 lse,63 lse,
49 lsl_fast,64 lsl_fast,
50 mpam,65 mpam,
51 mte,66 mte,
52 neon,67 neon,
53 nv,
54 no_neg_immediates,68 no_neg_immediates,
69 nv,
55 pa,70 pa,
56 pan,71 pan,
57 pan_rwv,72 pan_rwv,
58 perfmon,73 perfmon,
59 use_postra_scheduler,
60 predres,
61 predictable_select_expensive,74 predictable_select_expensive,
62 uaops,75 predres,
76 rand,
63 ras,77 ras,
64 rasv8_4,78 rasv8_4,
65 rcpc,79 rcpc,
66 rcpc_immo,80 rcpc_immo,
67 rdm,81 rdm,
68 rand,
69 reserve_x1,82 reserve_x1,
70 reserve_x2,
71 reserve_x3,
72 reserve_x4,
73 reserve_x5,
74 reserve_x6,
75 reserve_x7,
76 reserve_x9,
77 reserve_x10,83 reserve_x10,
78 reserve_x11,84 reserve_x11,
79 reserve_x12,85 reserve_x12,
...@@ -81,6 +87,7 @@ pub const Feature = enum {...@@ -81,6 +87,7 @@ pub const Feature = enum {
81 reserve_x14,87 reserve_x14,
82 reserve_x15,88 reserve_x15,
83 reserve_x18,89 reserve_x18,
90 reserve_x2,
84 reserve_x20,91 reserve_x20,
85 reserve_x21,92 reserve_x21,
86 reserve_x22,93 reserve_x22,
...@@ -90,31 +97,51 @@ pub const Feature = enum {...@@ -90,31 +97,51 @@ pub const Feature = enum {
90 reserve_x26,97 reserve_x26,
91 reserve_x27,98 reserve_x27,
92 reserve_x28,99 reserve_x28,
100 reserve_x3,
101 reserve_x4,
102 reserve_x5,
103 reserve_x6,
104 reserve_x7,
105 reserve_x9,
106 saphira,
93 sb,107 sb,
94 sel2,108 sel2,
95 sha2,109 sha2,
96 sha3,110 sha3,
111 slow_misaligned_128store,
112 slow_paired_128,
113 slow_strqro_store,
97 sm4,114 sm4,
98 spe,115 spe,
116 specrestrict,
99 ssbs,117 ssbs,
118 strict_align,
100 sve,119 sve,
101 sve2,120 sve2,
102 sve2_aes,121 sve2_aes,
103 sve2_bitperm,122 sve2_bitperm,
104 sve2_sha3,123 sve2_sha3,
105 sve2_sm4,124 sve2_sm4,
106 slow_misaligned_128store,125 thunderx,
107 slow_paired_128,126 thunderx2t99,
108 slow_strqro_store,127 thunderxt81,
109 specrestrict,128 thunderxt83,
110 strict_align,129 thunderxt88,
111 tlb_rmi,130 tlb_rmi,
112 tracev84,
113 use_aa,
114 tpidr_el1,131 tpidr_el1,
115 tpidr_el2,132 tpidr_el2,
116 tpidr_el3,133 tpidr_el3,
134 tracev8_4,
135 tsv110,
136 uaops,
137 use_aa,
138 use_postra_scheduler,
117 use_reciprocal_square_root,139 use_reciprocal_square_root,
140 v8_1a,
141 v8_2a,
142 v8_3a,
143 v8_4a,
144 v8_5a,
118 vh,145 vh,
119 zcm,146 zcm,
120 zcz,147 zcz,
...@@ -129,22 +156,143 @@ pub const all_features = blk: {...@@ -129,22 +156,143 @@ pub const all_features = blk: {
129 const len = @typeInfo(Feature).Enum.fields.len;156 const len = @typeInfo(Feature).Enum.fields.len;
130 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);157 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
131 var result: [len]Cpu.Feature = undefined;158 var result: [len]Cpu.Feature = undefined;
159 result[@enumToInt(Feature.a35)] = .{
160 .index = @enumToInt(Feature.a35),
161 .name = @tagName(Feature.a35),
162 .llvm_name = "a35",
163 .description = "Cortex-A35 ARM processors",
164 .dependencies = featureSet(&[_]Feature{
165 .crc,
166 .crypto,
167 .fp_armv8,
168 .neon,
169 .perfmon,
170 }),
171 };
172 result[@enumToInt(Feature.a53)] = .{
173 .index = @enumToInt(Feature.a53),
174 .name = @tagName(Feature.a53),
175 .llvm_name = "a53",
176 .description = "Cortex-A53 ARM processors",
177 .dependencies = featureSet(&[_]Feature{
178 .balance_fp_ops,
179 .crc,
180 .crypto,
181 .custom_cheap_as_move,
182 .fp_armv8,
183 .fuse_aes,
184 .neon,
185 .perfmon,
186 .use_aa,
187 .use_postra_scheduler,
188 }),
189 };
190 result[@enumToInt(Feature.a55)] = .{
191 .index = @enumToInt(Feature.a55),
192 .name = @tagName(Feature.a55),
193 .llvm_name = "a55",
194 .description = "Cortex-A55 ARM processors",
195 .dependencies = featureSet(&[_]Feature{
196 .crypto,
197 .dotprod,
198 .fp_armv8,
199 .fullfp16,
200 .fuse_aes,
201 .neon,
202 .perfmon,
203 .rcpc,
204 .v8_2a,
205 }),
206 };
207 result[@enumToInt(Feature.a57)] = .{
208 .index = @enumToInt(Feature.a57),
209 .name = @tagName(Feature.a57),
210 .llvm_name = "a57",
211 .description = "Cortex-A57 ARM processors",
212 .dependencies = featureSet(&[_]Feature{
213 .balance_fp_ops,
214 .crc,
215 .crypto,
216 .custom_cheap_as_move,
217 .fp_armv8,
218 .fuse_aes,
219 .fuse_literals,
220 .neon,
221 .perfmon,
222 .predictable_select_expensive,
223 .use_postra_scheduler,
224 }),
225 };
226 result[@enumToInt(Feature.a72)] = .{
227 .index = @enumToInt(Feature.a72),
228 .name = @tagName(Feature.a72),
229 .llvm_name = "a72",
230 .description = "Cortex-A72 ARM processors",
231 .dependencies = featureSet(&[_]Feature{
232 .crc,
233 .crypto,
234 .fp_armv8,
235 .fuse_aes,
236 .neon,
237 .perfmon,
238 }),
239 };
240 result[@enumToInt(Feature.a73)] = .{
241 .index = @enumToInt(Feature.a73),
242 .name = @tagName(Feature.a73),
243 .llvm_name = "a73",
244 .description = "Cortex-A73 ARM processors",
245 .dependencies = featureSet(&[_]Feature{
246 .crc,
247 .crypto,
248 .fp_armv8,
249 .fuse_aes,
250 .neon,
251 .perfmon,
252 }),
253 };
254 result[@enumToInt(Feature.a75)] = .{
255 .index = @enumToInt(Feature.a75),
256 .name = @tagName(Feature.a75),
257 .llvm_name = "a75",
258 .description = "Cortex-A75 ARM processors",
259 .dependencies = featureSet(&[_]Feature{
260 .crypto,
261 .dotprod,
262 .fp_armv8,
263 .fullfp16,
264 .fuse_aes,
265 .neon,
266 .perfmon,
267 .rcpc,
268 .v8_2a,
269 }),
270 };
271 result[@enumToInt(Feature.a76)] = .{
272 .index = @enumToInt(Feature.a76),
273 .name = @tagName(Feature.a76),
274 .llvm_name = "a76",
275 .description = "Cortex-A76 ARM processors",
276 .dependencies = featureSet(&[_]Feature{
277 .crypto,
278 .dotprod,
279 .fp_armv8,
280 .fullfp16,
281 .neon,
282 .rcpc,
283 .ssbs,
284 .v8_2a,
285 }),
286 };
132 result[@enumToInt(Feature.aes)] = .{287 result[@enumToInt(Feature.aes)] = .{
133 .index = @enumToInt(Feature.aes),288 .index = @enumToInt(Feature.aes),
134 .name = @tagName(Feature.aes),289 .name = @tagName(Feature.aes),
135 .llvm_name = "aes",290 .llvm_name = "aes",
136 .description = "Enable AES support",291 .description = "Enable AES support",
137 .dependencies = featureSet(&[_]Feature{292 .dependencies = featureSet(&[_]Feature{
138 .fp_armv8,293 .neon,
139 }),294 }),
140 };295 };
141 result[@enumToInt(Feature.am)] = .{
142 .index = @enumToInt(Feature.am),
143 .name = @tagName(Feature.am),
144 .llvm_name = "am",
145 .description = "Enable v8.4-A Activity Monitors extension",
146 .dependencies = 0,
147 };
148 result[@enumToInt(Feature.aggressive_fma)] = .{296 result[@enumToInt(Feature.aggressive_fma)] = .{
149 .index = @enumToInt(Feature.aggressive_fma),297 .index = @enumToInt(Feature.aggressive_fma),
150 .name = @tagName(Feature.aggressive_fma),298 .name = @tagName(Feature.aggressive_fma),
...@@ -152,6 +300,13 @@ pub const all_features = blk: {...@@ -152,6 +300,13 @@ pub const all_features = blk: {
152 .description = "Enable Aggressive FMA for floating-point.",300 .description = "Enable Aggressive FMA for floating-point.",
153 .dependencies = 0,301 .dependencies = 0,
154 };302 };
303 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
304 .index = @enumToInt(Feature.alternate_sextload_cvt_f32_pattern),
305 .name = @tagName(Feature.alternate_sextload_cvt_f32_pattern),
306 .llvm_name = "alternate-sextload-cvt-f32-pattern",
307 .description = "Use alternative pattern for sextload convert to f32",
308 .dependencies = 0,
309 };
155 result[@enumToInt(Feature.altnzcv)] = .{310 result[@enumToInt(Feature.altnzcv)] = .{
156 .index = @enumToInt(Feature.altnzcv),311 .index = @enumToInt(Feature.altnzcv),
157 .name = @tagName(Feature.altnzcv),312 .name = @tagName(Feature.altnzcv),
...@@ -159,11 +314,11 @@ pub const all_features = blk: {...@@ -159,11 +314,11 @@ pub const all_features = blk: {
159 .description = "Enable alternative NZCV format for floating point comparisons",314 .description = "Enable alternative NZCV format for floating point comparisons",
160 .dependencies = 0,315 .dependencies = 0,
161 };316 };
162 result[@enumToInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{317 result[@enumToInt(Feature.am)] = .{
163 .index = @enumToInt(Feature.alternate_sextload_cvt_f32_pattern),318 .index = @enumToInt(Feature.am),
164 .name = @tagName(Feature.alternate_sextload_cvt_f32_pattern),319 .name = @tagName(Feature.am),
165 .llvm_name = "alternate-sextload-cvt-f32-pattern",320 .llvm_name = "am",
166 .description = "Use alternative pattern for sextload convert to f32",321 .description = "Enable v8.4-A Activity Monitors extension",
167 .dependencies = 0,322 .dependencies = 0,
168 };323 };
169 result[@enumToInt(Feature.arith_bcc_fusion)] = .{324 result[@enumToInt(Feature.arith_bcc_fusion)] = .{
...@@ -194,48 +349,6 @@ pub const all_features = blk: {...@@ -194,48 +349,6 @@ pub const all_features = blk: {
194 .description = "Enable Branch Target Identification",349 .description = "Enable Branch Target Identification",
195 .dependencies = 0,350 .dependencies = 0,
196 };351 };
197 result[@enumToInt(Feature.ccidx)] = .{
198 .index = @enumToInt(Feature.ccidx),
199 .name = @tagName(Feature.ccidx),
200 .llvm_name = "ccidx",
201 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
202 .dependencies = 0,
203 };
204 result[@enumToInt(Feature.ccpp)] = .{
205 .index = @enumToInt(Feature.ccpp),
206 .name = @tagName(Feature.ccpp),
207 .llvm_name = "ccpp",
208 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
209 .dependencies = 0,
210 };
211 result[@enumToInt(Feature.crc)] = .{
212 .index = @enumToInt(Feature.crc),
213 .name = @tagName(Feature.crc),
214 .llvm_name = "crc",
215 .description = "Enable ARMv8 CRC-32 checksum instructions",
216 .dependencies = 0,
217 };
218 result[@enumToInt(Feature.ccdp)] = .{
219 .index = @enumToInt(Feature.ccdp),
220 .name = @tagName(Feature.ccdp),
221 .llvm_name = "ccdp",
222 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
223 .dependencies = 0,
224 };
225 result[@enumToInt(Feature.call_saved_x8)] = .{
226 .index = @enumToInt(Feature.call_saved_x8),
227 .name = @tagName(Feature.call_saved_x8),
228 .llvm_name = "call-saved-x8",
229 .description = "Make X8 callee saved.",
230 .dependencies = 0,
231 };
232 result[@enumToInt(Feature.call_saved_x9)] = .{
233 .index = @enumToInt(Feature.call_saved_x9),
234 .name = @tagName(Feature.call_saved_x9),
235 .llvm_name = "call-saved-x9",
236 .description = "Make X9 callee saved.",
237 .dependencies = 0,
238 };
239 result[@enumToInt(Feature.call_saved_x10)] = .{352 result[@enumToInt(Feature.call_saved_x10)] = .{
240 .index = @enumToInt(Feature.call_saved_x10),353 .index = @enumToInt(Feature.call_saved_x10),
241 .name = @tagName(Feature.call_saved_x10),354 .name = @tagName(Feature.call_saved_x10),
...@@ -285,22 +398,66 @@ pub const all_features = blk: {...@@ -285,22 +398,66 @@ pub const all_features = blk: {
285 .description = "Make X18 callee saved.",398 .description = "Make X18 callee saved.",
286 .dependencies = 0,399 .dependencies = 0,
287 };400 };
401 result[@enumToInt(Feature.call_saved_x8)] = .{
402 .index = @enumToInt(Feature.call_saved_x8),
403 .name = @tagName(Feature.call_saved_x8),
404 .llvm_name = "call-saved-x8",
405 .description = "Make X8 callee saved.",
406 .dependencies = 0,
407 };
408 result[@enumToInt(Feature.call_saved_x9)] = .{
409 .index = @enumToInt(Feature.call_saved_x9),
410 .name = @tagName(Feature.call_saved_x9),
411 .llvm_name = "call-saved-x9",
412 .description = "Make X9 callee saved.",
413 .dependencies = 0,
414 };
415 result[@enumToInt(Feature.ccdp)] = .{
416 .index = @enumToInt(Feature.ccdp),
417 .name = @tagName(Feature.ccdp),
418 .llvm_name = "ccdp",
419 .description = "Enable v8.5 Cache Clean to Point of Deep Persistence",
420 .dependencies = 0,
421 };
422 result[@enumToInt(Feature.ccidx)] = .{
423 .index = @enumToInt(Feature.ccidx),
424 .name = @tagName(Feature.ccidx),
425 .llvm_name = "ccidx",
426 .description = "Enable v8.3-A Extend of the CCSIDR number of sets",
427 .dependencies = 0,
428 };
429 result[@enumToInt(Feature.ccpp)] = .{
430 .index = @enumToInt(Feature.ccpp),
431 .name = @tagName(Feature.ccpp),
432 .llvm_name = "ccpp",
433 .description = "Enable v8.2 data Cache Clean to Point of Persistence",
434 .dependencies = 0,
435 };
288 result[@enumToInt(Feature.complxnum)] = .{436 result[@enumToInt(Feature.complxnum)] = .{
289 .index = @enumToInt(Feature.complxnum),437 .index = @enumToInt(Feature.complxnum),
290 .name = @tagName(Feature.complxnum),438 .name = @tagName(Feature.complxnum),
291 .llvm_name = "complxnum",439 .llvm_name = "complxnum",
292 .description = "Enable v8.3-A Floating-point complex number support",440 .description = "Enable v8.3-A Floating-point complex number support",
293 .dependencies = featureSet(&[_]Feature{441 .dependencies = featureSet(&[_]Feature{
294 .fp_armv8,442 .neon,
295 }),443 }),
296 };444 };
445 result[@enumToInt(Feature.crc)] = .{
446 .index = @enumToInt(Feature.crc),
447 .name = @tagName(Feature.crc),
448 .llvm_name = "crc",
449 .description = "Enable ARMv8 CRC-32 checksum instructions",
450 .dependencies = 0,
451 };
297 result[@enumToInt(Feature.crypto)] = .{452 result[@enumToInt(Feature.crypto)] = .{
298 .index = @enumToInt(Feature.crypto),453 .index = @enumToInt(Feature.crypto),
299 .name = @tagName(Feature.crypto),454 .name = @tagName(Feature.crypto),
300 .llvm_name = "crypto",455 .llvm_name = "crypto",
301 .description = "Enable cryptographic instructions",456 .description = "Enable cryptographic instructions",
302 .dependencies = featureSet(&[_]Feature{457 .dependencies = featureSet(&[_]Feature{
303 .fp_armv8,458 .aes,
459 .neon,
460 .sha2,
304 }),461 }),
305 };462 };
306 result[@enumToInt(Feature.custom_cheap_as_move)] = .{463 result[@enumToInt(Feature.custom_cheap_as_move)] = .{
...@@ -310,12 +467,26 @@ pub const all_features = blk: {...@@ -310,12 +467,26 @@ pub const all_features = blk: {
310 .description = "Use custom handling of cheap instructions",467 .description = "Use custom handling of cheap instructions",
311 .dependencies = 0,468 .dependencies = 0,
312 };469 };
313 result[@enumToInt(Feature.dit)] = .{470 result[@enumToInt(Feature.cyclone)] = .{
314 .index = @enumToInt(Feature.dit),471 .index = @enumToInt(Feature.cyclone),
315 .name = @tagName(Feature.dit),472 .name = @tagName(Feature.cyclone),
316 .llvm_name = "dit",473 .llvm_name = "cyclone",
317 .description = "Enable v8.4-A Data Independent Timing instructions",474 .description = "Cyclone",
318 .dependencies = 0,475 .dependencies = featureSet(&[_]Feature{
476 .alternate_sextload_cvt_f32_pattern,
477 .arith_bcc_fusion,
478 .arith_cbz_fusion,
479 .crypto,
480 .disable_latency_sched_heuristic,
481 .fp_armv8,
482 .fuse_aes,
483 .fuse_crypto_eor,
484 .neon,
485 .perfmon,
486 .zcm,
487 .zcz,
488 .zcz_fp_workaround,
489 }),
319 };490 };
320 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{491 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
321 .index = @enumToInt(Feature.disable_latency_sched_heuristic),492 .index = @enumToInt(Feature.disable_latency_sched_heuristic),
...@@ -324,6 +495,13 @@ pub const all_features = blk: {...@@ -324,6 +495,13 @@ pub const all_features = blk: {
324 .description = "Disable latency scheduling heuristic",495 .description = "Disable latency scheduling heuristic",
325 .dependencies = 0,496 .dependencies = 0,
326 };497 };
498 result[@enumToInt(Feature.dit)] = .{
499 .index = @enumToInt(Feature.dit),
500 .name = @tagName(Feature.dit),
501 .llvm_name = "dit",
502 .description = "Enable v8.4-A Data Independent Timing instructions",
503 .dependencies = 0,
504 };
327 result[@enumToInt(Feature.dotprod)] = .{505 result[@enumToInt(Feature.dotprod)] = .{
328 .index = @enumToInt(Feature.dotprod),506 .index = @enumToInt(Feature.dotprod),
329 .name = @tagName(Feature.dotprod),507 .name = @tagName(Feature.dotprod),
...@@ -340,6 +518,109 @@ pub const all_features = blk: {...@@ -340,6 +518,109 @@ pub const all_features = blk: {
340 .custom_cheap_as_move,518 .custom_cheap_as_move,
341 }),519 }),
342 };520 };
521 result[@enumToInt(Feature.exynosm1)] = .{
522 .index = @enumToInt(Feature.exynosm1),
523 .name = @tagName(Feature.exynosm1),
524 .llvm_name = "exynosm1",
525 .description = "Samsung Exynos-M1 processors",
526 .dependencies = featureSet(&[_]Feature{
527 .crc,
528 .crypto,
529 .exynos_cheap_as_move,
530 .force_32bit_jump_tables,
531 .fuse_aes,
532 .perfmon,
533 .slow_misaligned_128store,
534 .slow_paired_128,
535 .use_postra_scheduler,
536 .use_reciprocal_square_root,
537 .zcz_fp,
538 }),
539 };
540 result[@enumToInt(Feature.exynosm2)] = .{
541 .index = @enumToInt(Feature.exynosm2),
542 .name = @tagName(Feature.exynosm2),
543 .llvm_name = "exynosm2",
544 .description = "Samsung Exynos-M2 processors",
545 .dependencies = featureSet(&[_]Feature{
546 .crc,
547 .crypto,
548 .exynos_cheap_as_move,
549 .force_32bit_jump_tables,
550 .fuse_aes,
551 .perfmon,
552 .slow_misaligned_128store,
553 .slow_paired_128,
554 .use_postra_scheduler,
555 .zcz_fp,
556 }),
557 };
558 result[@enumToInt(Feature.exynosm3)] = .{
559 .index = @enumToInt(Feature.exynosm3),
560 .name = @tagName(Feature.exynosm3),
561 .llvm_name = "exynosm3",
562 .description = "Samsung Exynos-M3 processors",
563 .dependencies = featureSet(&[_]Feature{
564 .crc,
565 .crypto,
566 .exynos_cheap_as_move,
567 .force_32bit_jump_tables,
568 .fuse_address,
569 .fuse_aes,
570 .fuse_csel,
571 .fuse_literals,
572 .lsl_fast,
573 .perfmon,
574 .predictable_select_expensive,
575 .use_postra_scheduler,
576 .zcz_fp,
577 }),
578 };
579 result[@enumToInt(Feature.exynosm4)] = .{
580 .index = @enumToInt(Feature.exynosm4),
581 .name = @tagName(Feature.exynosm4),
582 .llvm_name = "exynosm4",
583 .description = "Samsung Exynos-M4 processors",
584 .dependencies = featureSet(&[_]Feature{
585 .arith_bcc_fusion,
586 .arith_cbz_fusion,
587 .crypto,
588 .dotprod,
589 .exynos_cheap_as_move,
590 .force_32bit_jump_tables,
591 .fullfp16,
592 .fuse_address,
593 .fuse_aes,
594 .fuse_arith_logic,
595 .fuse_csel,
596 .fuse_literals,
597 .lsl_fast,
598 .perfmon,
599 .use_postra_scheduler,
600 .v8_2a,
601 .zcz,
602 }),
603 };
604 result[@enumToInt(Feature.falkor)] = .{
605 .index = @enumToInt(Feature.falkor),
606 .name = @tagName(Feature.falkor),
607 .llvm_name = "falkor",
608 .description = "Qualcomm Falkor processors",
609 .dependencies = featureSet(&[_]Feature{
610 .crc,
611 .crypto,
612 .custom_cheap_as_move,
613 .fp_armv8,
614 .lsl_fast,
615 .neon,
616 .perfmon,
617 .predictable_select_expensive,
618 .rdm,
619 .slow_strqro_store,
620 .use_postra_scheduler,
621 .zcz,
622 }),
623 };
343 result[@enumToInt(Feature.fmi)] = .{624 result[@enumToInt(Feature.fmi)] = .{
344 .index = @enumToInt(Feature.fmi),625 .index = @enumToInt(Feature.fmi),
345 .name = @tagName(Feature.fmi),626 .name = @tagName(Feature.fmi),
...@@ -347,14 +628,12 @@ pub const all_features = blk: {...@@ -347,14 +628,12 @@ pub const all_features = blk: {
347 .description = "Enable v8.4-A Flag Manipulation Instructions",628 .description = "Enable v8.4-A Flag Manipulation Instructions",
348 .dependencies = 0,629 .dependencies = 0,
349 };630 };
350 result[@enumToInt(Feature.fp16fml)] = .{631 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
351 .index = @enumToInt(Feature.fp16fml),632 .index = @enumToInt(Feature.force_32bit_jump_tables),
352 .name = @tagName(Feature.fp16fml),633 .name = @tagName(Feature.force_32bit_jump_tables),
353 .llvm_name = "fp16fml",634 .llvm_name = "force-32bit-jump-tables",
354 .description = "Enable FP16 FML instructions",635 .description = "Force jump table entries to be 32-bits wide except at MinSize",
355 .dependencies = featureSet(&[_]Feature{636 .dependencies = 0,
356 .fp_armv8,
357 }),
358 };637 };
359 result[@enumToInt(Feature.fp_armv8)] = .{638 result[@enumToInt(Feature.fp_armv8)] = .{
360 .index = @enumToInt(Feature.fp_armv8),639 .index = @enumToInt(Feature.fp_armv8),
...@@ -363,6 +642,15 @@ pub const all_features = blk: {...@@ -363,6 +642,15 @@ pub const all_features = blk: {
363 .description = "Enable ARMv8 FP",642 .description = "Enable ARMv8 FP",
364 .dependencies = 0,643 .dependencies = 0,
365 };644 };
645 result[@enumToInt(Feature.fp16fml)] = .{
646 .index = @enumToInt(Feature.fp16fml),
647 .name = @tagName(Feature.fp16fml),
648 .llvm_name = "fp16fml",
649 .description = "Enable FP16 FML instructions",
650 .dependencies = featureSet(&[_]Feature{
651 .fullfp16,
652 }),
653 };
366 result[@enumToInt(Feature.fptoint)] = .{654 result[@enumToInt(Feature.fptoint)] = .{
367 .index = @enumToInt(Feature.fptoint),655 .index = @enumToInt(Feature.fptoint),
368 .name = @tagName(Feature.fptoint),656 .name = @tagName(Feature.fptoint),
...@@ -370,13 +658,6 @@ pub const all_features = blk: {...@@ -370,13 +658,6 @@ pub const all_features = blk: {
370 .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",
371 .dependencies = 0,659 .dependencies = 0,
372 };660 };
373 result[@enumToInt(Feature.force_32bit_jump_tables)] = .{
374 .index = @enumToInt(Feature.force_32bit_jump_tables),
375 .name = @tagName(Feature.force_32bit_jump_tables),
376 .llvm_name = "force-32bit-jump-tables",
377 .description = "Force jump table entries to be 32-bits wide except at MinSize",
378 .dependencies = 0,
379 };
380 result[@enumToInt(Feature.fullfp16)] = .{661 result[@enumToInt(Feature.fullfp16)] = .{
381 .index = @enumToInt(Feature.fullfp16),662 .index = @enumToInt(Feature.fullfp16),
382 .name = @tagName(Feature.fullfp16),663 .name = @tagName(Feature.fullfp16),
...@@ -386,13 +667,6 @@ pub const all_features = blk: {...@@ -386,13 +667,6 @@ pub const all_features = blk: {
386 .fp_armv8,667 .fp_armv8,
387 }),668 }),
388 };669 };
389 result[@enumToInt(Feature.fuse_aes)] = .{
390 .index = @enumToInt(Feature.fuse_aes),
391 .name = @tagName(Feature.fuse_aes),
392 .llvm_name = "fuse-aes",
393 .description = "CPU fuses AES crypto operations",
394 .dependencies = 0,
395 };
396 result[@enumToInt(Feature.fuse_address)] = .{670 result[@enumToInt(Feature.fuse_address)] = .{
397 .index = @enumToInt(Feature.fuse_address),671 .index = @enumToInt(Feature.fuse_address),
398 .name = @tagName(Feature.fuse_address),672 .name = @tagName(Feature.fuse_address),
...@@ -400,6 +674,13 @@ pub const all_features = blk: {...@@ -400,6 +674,13 @@ pub const all_features = blk: {
400 .description = "CPU fuses address generation and memory operations",674 .description = "CPU fuses address generation and memory operations",
401 .dependencies = 0,675 .dependencies = 0,
402 };676 };
677 result[@enumToInt(Feature.fuse_aes)] = .{
678 .index = @enumToInt(Feature.fuse_aes),
679 .name = @tagName(Feature.fuse_aes),
680 .llvm_name = "fuse-aes",
681 .description = "CPU fuses AES crypto operations",
682 .dependencies = 0,
683 };
403 result[@enumToInt(Feature.fuse_arith_logic)] = .{684 result[@enumToInt(Feature.fuse_arith_logic)] = .{
404 .index = @enumToInt(Feature.fuse_arith_logic),685 .index = @enumToInt(Feature.fuse_arith_logic),
405 .name = @tagName(Feature.fuse_arith_logic),686 .name = @tagName(Feature.fuse_arith_logic),
...@@ -407,13 +688,6 @@ pub const all_features = blk: {...@@ -407,13 +688,6 @@ pub const all_features = blk: {
407 .description = "CPU fuses arithmetic and logic operations",688 .description = "CPU fuses arithmetic and logic operations",
408 .dependencies = 0,689 .dependencies = 0,
409 };690 };
410 result[@enumToInt(Feature.fuse_csel)] = .{
411 .index = @enumToInt(Feature.fuse_csel),
412 .name = @tagName(Feature.fuse_csel),
413 .llvm_name = "fuse-csel",
414 .description = "CPU fuses conditional select operations",
415 .dependencies = 0,
416 };
417 result[@enumToInt(Feature.fuse_crypto_eor)] = .{691 result[@enumToInt(Feature.fuse_crypto_eor)] = .{
418 .index = @enumToInt(Feature.fuse_crypto_eor),692 .index = @enumToInt(Feature.fuse_crypto_eor),
419 .name = @tagName(Feature.fuse_crypto_eor),693 .name = @tagName(Feature.fuse_crypto_eor),
...@@ -421,6 +695,13 @@ pub const all_features = blk: {...@@ -421,6 +695,13 @@ pub const all_features = blk: {
421 .description = "CPU fuses AES/PMULL and EOR operations",695 .description = "CPU fuses AES/PMULL and EOR operations",
422 .dependencies = 0,696 .dependencies = 0,
423 };697 };
698 result[@enumToInt(Feature.fuse_csel)] = .{
699 .index = @enumToInt(Feature.fuse_csel),
700 .name = @tagName(Feature.fuse_csel),
701 .llvm_name = "fuse-csel",
702 .description = "CPU fuses conditional select operations",
703 .dependencies = 0,
704 };
424 result[@enumToInt(Feature.fuse_literals)] = .{705 result[@enumToInt(Feature.fuse_literals)] = .{
425 .index = @enumToInt(Feature.fuse_literals),706 .index = @enumToInt(Feature.fuse_literals),
426 .name = @tagName(Feature.fuse_literals),707 .name = @tagName(Feature.fuse_literals),
...@@ -437,6 +718,24 @@ pub const all_features = blk: {...@@ -437,6 +718,24 @@ pub const all_features = blk: {
437 .fp_armv8,718 .fp_armv8,
438 }),719 }),
439 };720 };
721 result[@enumToInt(Feature.kryo)] = .{
722 .index = @enumToInt(Feature.kryo),
723 .name = @tagName(Feature.kryo),
724 .llvm_name = "kryo",
725 .description = "Qualcomm Kryo processors",
726 .dependencies = featureSet(&[_]Feature{
727 .crc,
728 .crypto,
729 .custom_cheap_as_move,
730 .fp_armv8,
731 .lsl_fast,
732 .neon,
733 .perfmon,
734 .predictable_select_expensive,
735 .use_postra_scheduler,
736 .zcz,
737 }),
738 };
440 result[@enumToInt(Feature.lor)] = .{739 result[@enumToInt(Feature.lor)] = .{
441 .index = @enumToInt(Feature.lor),740 .index = @enumToInt(Feature.lor),
442 .name = @tagName(Feature.lor),741 .name = @tagName(Feature.lor),
...@@ -481,13 +780,6 @@ pub const all_features = blk: {...@@ -481,13 +780,6 @@ pub const all_features = blk: {
481 .fp_armv8,780 .fp_armv8,
482 }),781 }),
483 };782 };
484 result[@enumToInt(Feature.nv)] = .{
485 .index = @enumToInt(Feature.nv),
486 .name = @tagName(Feature.nv),
487 .llvm_name = "nv",
488 .description = "Enable v8.4-A Nested Virtualization Enchancement",
489 .dependencies = 0,
490 };
491 result[@enumToInt(Feature.no_neg_immediates)] = .{783 result[@enumToInt(Feature.no_neg_immediates)] = .{
492 .index = @enumToInt(Feature.no_neg_immediates),784 .index = @enumToInt(Feature.no_neg_immediates),
493 .name = @tagName(Feature.no_neg_immediates),785 .name = @tagName(Feature.no_neg_immediates),
...@@ -495,6 +787,13 @@ pub const all_features = blk: {...@@ -495,6 +787,13 @@ pub const all_features = blk: {
495 .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.",
496 .dependencies = 0,788 .dependencies = 0,
497 };789 };
790 result[@enumToInt(Feature.nv)] = .{
791 .index = @enumToInt(Feature.nv),
792 .name = @tagName(Feature.nv),
793 .llvm_name = "nv",
794 .description = "Enable v8.4-A Nested Virtualization Enchancement",
795 .dependencies = 0,
796 };
498 result[@enumToInt(Feature.pa)] = .{797 result[@enumToInt(Feature.pa)] = .{
499 .index = @enumToInt(Feature.pa),798 .index = @enumToInt(Feature.pa),
500 .name = @tagName(Feature.pa),799 .name = @tagName(Feature.pa),
...@@ -525,11 +824,11 @@ pub const all_features = blk: {...@@ -525,11 +824,11 @@ pub const all_features = blk: {
525 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",824 .description = "Enable ARMv8 PMUv3 Performance Monitors extension",
526 .dependencies = 0,825 .dependencies = 0,
527 };826 };
528 result[@enumToInt(Feature.use_postra_scheduler)] = .{827 result[@enumToInt(Feature.predictable_select_expensive)] = .{
529 .index = @enumToInt(Feature.use_postra_scheduler),828 .index = @enumToInt(Feature.predictable_select_expensive),
530 .name = @tagName(Feature.use_postra_scheduler),829 .name = @tagName(Feature.predictable_select_expensive),
531 .llvm_name = "use-postra-scheduler",830 .llvm_name = "predictable-select-expensive",
532 .description = "Schedule again after register allocation",831 .description = "Prefer likely predicted branches over selects",
533 .dependencies = 0,832 .dependencies = 0,
534 };833 };
535 result[@enumToInt(Feature.predres)] = .{834 result[@enumToInt(Feature.predres)] = .{
...@@ -539,18 +838,11 @@ pub const all_features = blk: {...@@ -539,18 +838,11 @@ pub const all_features = blk: {
539 .description = "Enable v8.5a execution and data prediction invalidation instructions",838 .description = "Enable v8.5a execution and data prediction invalidation instructions",
540 .dependencies = 0,839 .dependencies = 0,
541 };840 };
542 result[@enumToInt(Feature.predictable_select_expensive)] = .{841 result[@enumToInt(Feature.rand)] = .{
543 .index = @enumToInt(Feature.predictable_select_expensive),842 .index = @enumToInt(Feature.rand),
544 .name = @tagName(Feature.predictable_select_expensive),843 .name = @tagName(Feature.rand),
545 .llvm_name = "predictable-select-expensive",844 .llvm_name = "rand",
546 .description = "Prefer likely predicted branches over selects",845 .description = "Enable Random Number generation instructions",
547 .dependencies = 0,
548 };
549 result[@enumToInt(Feature.uaops)] = .{
550 .index = @enumToInt(Feature.uaops),
551 .name = @tagName(Feature.uaops),
552 .llvm_name = "uaops",
553 .description = "Enable v8.2 UAO PState",
554 .dependencies = 0,846 .dependencies = 0,
555 };847 };
556 result[@enumToInt(Feature.ras)] = .{848 result[@enumToInt(Feature.ras)] = .{
...@@ -592,13 +884,6 @@ pub const all_features = blk: {...@@ -592,13 +884,6 @@ pub const all_features = blk: {
592 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",884 .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions",
593 .dependencies = 0,885 .dependencies = 0,
594 };886 };
595 result[@enumToInt(Feature.rand)] = .{
596 .index = @enumToInt(Feature.rand),
597 .name = @tagName(Feature.rand),
598 .llvm_name = "rand",
599 .description = "Enable Random Number generation instructions",
600 .dependencies = 0,
601 };
602 result[@enumToInt(Feature.reserve_x1)] = .{887 result[@enumToInt(Feature.reserve_x1)] = .{
603 .index = @enumToInt(Feature.reserve_x1),888 .index = @enumToInt(Feature.reserve_x1),
604 .name = @tagName(Feature.reserve_x1),889 .name = @tagName(Feature.reserve_x1),
...@@ -606,55 +891,6 @@ pub const all_features = blk: {...@@ -606,55 +891,6 @@ pub const all_features = blk: {
606 .description = "Reserve X1, making it unavailable as a GPR",891 .description = "Reserve X1, making it unavailable as a GPR",
607 .dependencies = 0,892 .dependencies = 0,
608 };893 };
609 result[@enumToInt(Feature.reserve_x2)] = .{
610 .index = @enumToInt(Feature.reserve_x2),
611 .name = @tagName(Feature.reserve_x2),
612 .llvm_name = "reserve-x2",
613 .description = "Reserve X2, making it unavailable as a GPR",
614 .dependencies = 0,
615 };
616 result[@enumToInt(Feature.reserve_x3)] = .{
617 .index = @enumToInt(Feature.reserve_x3),
618 .name = @tagName(Feature.reserve_x3),
619 .llvm_name = "reserve-x3",
620 .description = "Reserve X3, making it unavailable as a GPR",
621 .dependencies = 0,
622 };
623 result[@enumToInt(Feature.reserve_x4)] = .{
624 .index = @enumToInt(Feature.reserve_x4),
625 .name = @tagName(Feature.reserve_x4),
626 .llvm_name = "reserve-x4",
627 .description = "Reserve X4, making it unavailable as a GPR",
628 .dependencies = 0,
629 };
630 result[@enumToInt(Feature.reserve_x5)] = .{
631 .index = @enumToInt(Feature.reserve_x5),
632 .name = @tagName(Feature.reserve_x5),
633 .llvm_name = "reserve-x5",
634 .description = "Reserve X5, making it unavailable as a GPR",
635 .dependencies = 0,
636 };
637 result[@enumToInt(Feature.reserve_x6)] = .{
638 .index = @enumToInt(Feature.reserve_x6),
639 .name = @tagName(Feature.reserve_x6),
640 .llvm_name = "reserve-x6",
641 .description = "Reserve X6, making it unavailable as a GPR",
642 .dependencies = 0,
643 };
644 result[@enumToInt(Feature.reserve_x7)] = .{
645 .index = @enumToInt(Feature.reserve_x7),
646 .name = @tagName(Feature.reserve_x7),
647 .llvm_name = "reserve-x7",
648 .description = "Reserve X7, making it unavailable as a GPR",
649 .dependencies = 0,
650 };
651 result[@enumToInt(Feature.reserve_x9)] = .{
652 .index = @enumToInt(Feature.reserve_x9),
653 .name = @tagName(Feature.reserve_x9),
654 .llvm_name = "reserve-x9",
655 .description = "Reserve X9, making it unavailable as a GPR",
656 .dependencies = 0,
657 };
658 result[@enumToInt(Feature.reserve_x10)] = .{894 result[@enumToInt(Feature.reserve_x10)] = .{
659 .index = @enumToInt(Feature.reserve_x10),895 .index = @enumToInt(Feature.reserve_x10),
660 .name = @tagName(Feature.reserve_x10),896 .name = @tagName(Feature.reserve_x10),
...@@ -704,9 +940,16 @@ pub const all_features = blk: {...@@ -704,9 +940,16 @@ pub const all_features = blk: {
704 .description = "Reserve X18, making it unavailable as a GPR",940 .description = "Reserve X18, making it unavailable as a GPR",
705 .dependencies = 0,941 .dependencies = 0,
706 };942 };
707 result[@enumToInt(Feature.reserve_x20)] = .{943 result[@enumToInt(Feature.reserve_x2)] = .{
708 .index = @enumToInt(Feature.reserve_x20),944 .index = @enumToInt(Feature.reserve_x2),
709 .name = @tagName(Feature.reserve_x20),945 .name = @tagName(Feature.reserve_x2),
946 .llvm_name = "reserve-x2",
947 .description = "Reserve X2, making it unavailable as a GPR",
948 .dependencies = 0,
949 };
950 result[@enumToInt(Feature.reserve_x20)] = .{
951 .index = @enumToInt(Feature.reserve_x20),
952 .name = @tagName(Feature.reserve_x20),
710 .llvm_name = "reserve-x20",953 .llvm_name = "reserve-x20",
711 .description = "Reserve X20, making it unavailable as a GPR",954 .description = "Reserve X20, making it unavailable as a GPR",
712 .dependencies = 0,955 .dependencies = 0,
...@@ -767,6 +1010,67 @@ pub const all_features = blk: {...@@ -767,6 +1010,67 @@ pub const all_features = blk: {
767 .description = "Reserve X28, making it unavailable as a GPR",1010 .description = "Reserve X28, making it unavailable as a GPR",
768 .dependencies = 0,1011 .dependencies = 0,
769 };1012 };
1013 result[@enumToInt(Feature.reserve_x3)] = .{
1014 .index = @enumToInt(Feature.reserve_x3),
1015 .name = @tagName(Feature.reserve_x3),
1016 .llvm_name = "reserve-x3",
1017 .description = "Reserve X3, making it unavailable as a GPR",
1018 .dependencies = 0,
1019 };
1020 result[@enumToInt(Feature.reserve_x4)] = .{
1021 .index = @enumToInt(Feature.reserve_x4),
1022 .name = @tagName(Feature.reserve_x4),
1023 .llvm_name = "reserve-x4",
1024 .description = "Reserve X4, making it unavailable as a GPR",
1025 .dependencies = 0,
1026 };
1027 result[@enumToInt(Feature.reserve_x5)] = .{
1028 .index = @enumToInt(Feature.reserve_x5),
1029 .name = @tagName(Feature.reserve_x5),
1030 .llvm_name = "reserve-x5",
1031 .description = "Reserve X5, making it unavailable as a GPR",
1032 .dependencies = 0,
1033 };
1034 result[@enumToInt(Feature.reserve_x6)] = .{
1035 .index = @enumToInt(Feature.reserve_x6),
1036 .name = @tagName(Feature.reserve_x6),
1037 .llvm_name = "reserve-x6",
1038 .description = "Reserve X6, making it unavailable as a GPR",
1039 .dependencies = 0,
1040 };
1041 result[@enumToInt(Feature.reserve_x7)] = .{
1042 .index = @enumToInt(Feature.reserve_x7),
1043 .name = @tagName(Feature.reserve_x7),
1044 .llvm_name = "reserve-x7",
1045 .description = "Reserve X7, making it unavailable as a GPR",
1046 .dependencies = 0,
1047 };
1048 result[@enumToInt(Feature.reserve_x9)] = .{
1049 .index = @enumToInt(Feature.reserve_x9),
1050 .name = @tagName(Feature.reserve_x9),
1051 .llvm_name = "reserve-x9",
1052 .description = "Reserve X9, making it unavailable as a GPR",
1053 .dependencies = 0,
1054 };
1055 result[@enumToInt(Feature.saphira)] = .{
1056 .index = @enumToInt(Feature.saphira),
1057 .name = @tagName(Feature.saphira),
1058 .llvm_name = "saphira",
1059 .description = "Qualcomm Saphira processors",
1060 .dependencies = featureSet(&[_]Feature{
1061 .crypto,
1062 .custom_cheap_as_move,
1063 .fp_armv8,
1064 .lsl_fast,
1065 .neon,
1066 .perfmon,
1067 .predictable_select_expensive,
1068 .spe,
1069 .use_postra_scheduler,
1070 .v8_4a,
1071 .zcz,
1072 }),
1073 };
770 result[@enumToInt(Feature.sb)] = .{1074 result[@enumToInt(Feature.sb)] = .{
771 .index = @enumToInt(Feature.sb),1075 .index = @enumToInt(Feature.sb),
772 .name = @tagName(Feature.sb),1076 .name = @tagName(Feature.sb),
...@@ -787,7 +1091,7 @@ pub const all_features = blk: {...@@ -787,7 +1091,7 @@ pub const all_features = blk: {
787 .llvm_name = "sha2",1091 .llvm_name = "sha2",
788 .description = "Enable SHA1 and SHA256 support",1092 .description = "Enable SHA1 and SHA256 support",
789 .dependencies = featureSet(&[_]Feature{1093 .dependencies = featureSet(&[_]Feature{
790 .fp_armv8,1094 .neon,
791 }),1095 }),
792 };1096 };
793 result[@enumToInt(Feature.sha3)] = .{1097 result[@enumToInt(Feature.sha3)] = .{
...@@ -796,16 +1100,38 @@ pub const all_features = blk: {...@@ -796,16 +1100,38 @@ pub const all_features = blk: {
796 .llvm_name = "sha3",1100 .llvm_name = "sha3",
797 .description = "Enable SHA512 and SHA3 support",1101 .description = "Enable SHA512 and SHA3 support",
798 .dependencies = featureSet(&[_]Feature{1102 .dependencies = featureSet(&[_]Feature{
799 .fp_armv8,1103 .neon,
1104 .sha2,
800 }),1105 }),
801 };1106 };
1107 result[@enumToInt(Feature.slow_misaligned_128store)] = .{
1108 .index = @enumToInt(Feature.slow_misaligned_128store),
1109 .name = @tagName(Feature.slow_misaligned_128store),
1110 .llvm_name = "slow-misaligned-128store",
1111 .description = "Misaligned 128 bit stores are slow",
1112 .dependencies = 0,
1113 };
1114 result[@enumToInt(Feature.slow_paired_128)] = .{
1115 .index = @enumToInt(Feature.slow_paired_128),
1116 .name = @tagName(Feature.slow_paired_128),
1117 .llvm_name = "slow-paired-128",
1118 .description = "Paired 128 bit loads and stores are slow",
1119 .dependencies = 0,
1120 };
1121 result[@enumToInt(Feature.slow_strqro_store)] = .{
1122 .index = @enumToInt(Feature.slow_strqro_store),
1123 .name = @tagName(Feature.slow_strqro_store),
1124 .llvm_name = "slow-strqro-store",
1125 .description = "STR of Q register with register offset is slow",
1126 .dependencies = 0,
1127 };
802 result[@enumToInt(Feature.sm4)] = .{1128 result[@enumToInt(Feature.sm4)] = .{
803 .index = @enumToInt(Feature.sm4),1129 .index = @enumToInt(Feature.sm4),
804 .name = @tagName(Feature.sm4),1130 .name = @tagName(Feature.sm4),
805 .llvm_name = "sm4",1131 .llvm_name = "sm4",
806 .description = "Enable SM3 and SM4 support",1132 .description = "Enable SM3 and SM4 support",
807 .dependencies = featureSet(&[_]Feature{1133 .dependencies = featureSet(&[_]Feature{
808 .fp_armv8,1134 .neon,
809 }),1135 }),
810 };1136 };
811 result[@enumToInt(Feature.spe)] = .{1137 result[@enumToInt(Feature.spe)] = .{
...@@ -815,6 +1141,13 @@ pub const all_features = blk: {...@@ -815,6 +1141,13 @@ pub const all_features = blk: {
815 .description = "Enable Statistical Profiling extension",1141 .description = "Enable Statistical Profiling extension",
816 .dependencies = 0,1142 .dependencies = 0,
817 };1143 };
1144 result[@enumToInt(Feature.specrestrict)] = .{
1145 .index = @enumToInt(Feature.specrestrict),
1146 .name = @tagName(Feature.specrestrict),
1147 .llvm_name = "specrestrict",
1148 .description = "Enable architectural speculation restriction",
1149 .dependencies = 0,
1150 };
818 result[@enumToInt(Feature.ssbs)] = .{1151 result[@enumToInt(Feature.ssbs)] = .{
819 .index = @enumToInt(Feature.ssbs),1152 .index = @enumToInt(Feature.ssbs),
820 .name = @tagName(Feature.ssbs),1153 .name = @tagName(Feature.ssbs),
...@@ -822,6 +1155,13 @@ pub const all_features = blk: {...@@ -822,6 +1155,13 @@ pub const all_features = blk: {
822 .description = "Enable Speculative Store Bypass Safe bit",1155 .description = "Enable Speculative Store Bypass Safe bit",
823 .dependencies = 0,1156 .dependencies = 0,
824 };1157 };
1158 result[@enumToInt(Feature.strict_align)] = .{
1159 .index = @enumToInt(Feature.strict_align),
1160 .name = @tagName(Feature.strict_align),
1161 .llvm_name = "strict-align",
1162 .description = "Disallow all unaligned memory access",
1163 .dependencies = 0,
1164 };
825 result[@enumToInt(Feature.sve)] = .{1165 result[@enumToInt(Feature.sve)] = .{
826 .index = @enumToInt(Feature.sve),1166 .index = @enumToInt(Feature.sve),
827 .name = @tagName(Feature.sve),1167 .name = @tagName(Feature.sve),
...@@ -844,8 +1184,8 @@ pub const all_features = blk: {...@@ -844,8 +1184,8 @@ pub const all_features = blk: {
844 .llvm_name = "sve2-aes",1184 .llvm_name = "sve2-aes",
845 .description = "Enable AES SVE2 instructions",1185 .description = "Enable AES SVE2 instructions",
846 .dependencies = featureSet(&[_]Feature{1186 .dependencies = featureSet(&[_]Feature{
847 .sve,1187 .aes,
848 .fp_armv8,1188 .sve2,
849 }),1189 }),
850 };1190 };
851 result[@enumToInt(Feature.sve2_bitperm)] = .{1191 result[@enumToInt(Feature.sve2_bitperm)] = .{
...@@ -854,7 +1194,7 @@ pub const all_features = blk: {...@@ -854,7 +1194,7 @@ pub const all_features = blk: {
854 .llvm_name = "sve2-bitperm",1194 .llvm_name = "sve2-bitperm",
855 .description = "Enable bit permutation SVE2 instructions",1195 .description = "Enable bit permutation SVE2 instructions",
856 .dependencies = featureSet(&[_]Feature{1196 .dependencies = featureSet(&[_]Feature{
857 .sve,1197 .sve2,
858 }),1198 }),
859 };1199 };
860 result[@enumToInt(Feature.sve2_sha3)] = .{1200 result[@enumToInt(Feature.sve2_sha3)] = .{
...@@ -863,8 +1203,8 @@ pub const all_features = blk: {...@@ -863,8 +1203,8 @@ pub const all_features = blk: {
863 .llvm_name = "sve2-sha3",1203 .llvm_name = "sve2-sha3",
864 .description = "Enable SHA3 SVE2 instructions",1204 .description = "Enable SHA3 SVE2 instructions",
865 .dependencies = featureSet(&[_]Feature{1205 .dependencies = featureSet(&[_]Feature{
866 .sve,1206 .sha3,
867 .fp_armv8,1207 .sve2,
868 }),1208 }),
869 };1209 };
870 result[@enumToInt(Feature.sve2_sm4)] = .{1210 result[@enumToInt(Feature.sve2_sm4)] = .{
...@@ -873,44 +1213,87 @@ pub const all_features = blk: {...@@ -873,44 +1213,87 @@ pub const all_features = blk: {
873 .llvm_name = "sve2-sm4",1213 .llvm_name = "sve2-sm4",
874 .description = "Enable SM4 SVE2 instructions",1214 .description = "Enable SM4 SVE2 instructions",
875 .dependencies = featureSet(&[_]Feature{1215 .dependencies = featureSet(&[_]Feature{
876 .sve,1216 .sm4,
877 .fp_armv8,1217 .sve2,
878 }),1218 }),
879 };1219 };
880 result[@enumToInt(Feature.slow_misaligned_128store)] = .{1220 result[@enumToInt(Feature.thunderx)] = .{
881 .index = @enumToInt(Feature.slow_misaligned_128store),1221 .index = @enumToInt(Feature.thunderx),
882 .name = @tagName(Feature.slow_misaligned_128store),1222 .name = @tagName(Feature.thunderx),
883 .llvm_name = "slow-misaligned-128store",1223 .llvm_name = "thunderx",
884 .description = "Misaligned 128 bit stores are slow",1224 .description = "Cavium ThunderX processors",
885 .dependencies = 0,1225 .dependencies = featureSet(&[_]Feature{
1226 .crc,
1227 .crypto,
1228 .fp_armv8,
1229 .neon,
1230 .perfmon,
1231 .predictable_select_expensive,
1232 .use_postra_scheduler,
1233 }),
886 };1234 };
887 result[@enumToInt(Feature.slow_paired_128)] = .{1235 result[@enumToInt(Feature.thunderx2t99)] = .{
888 .index = @enumToInt(Feature.slow_paired_128),1236 .index = @enumToInt(Feature.thunderx2t99),
889 .name = @tagName(Feature.slow_paired_128),1237 .name = @tagName(Feature.thunderx2t99),
890 .llvm_name = "slow-paired-128",1238 .llvm_name = "thunderx2t99",
891 .description = "Paired 128 bit loads and stores are slow",1239 .description = "Cavium ThunderX2 processors",
892 .dependencies = 0,1240 .dependencies = featureSet(&[_]Feature{
1241 .aggressive_fma,
1242 .arith_bcc_fusion,
1243 .crc,
1244 .crypto,
1245 .fp_armv8,
1246 .lse,
1247 .neon,
1248 .predictable_select_expensive,
1249 .use_postra_scheduler,
1250 .v8_1a,
1251 }),
893 };1252 };
894 result[@enumToInt(Feature.slow_strqro_store)] = .{1253 result[@enumToInt(Feature.thunderxt81)] = .{
895 .index = @enumToInt(Feature.slow_strqro_store),1254 .index = @enumToInt(Feature.thunderxt81),
896 .name = @tagName(Feature.slow_strqro_store),1255 .name = @tagName(Feature.thunderxt81),
897 .llvm_name = "slow-strqro-store",1256 .llvm_name = "thunderxt81",
898 .description = "STR of Q register with register offset is slow",1257 .description = "Cavium ThunderX processors",
899 .dependencies = 0,1258 .dependencies = featureSet(&[_]Feature{
1259 .crc,
1260 .crypto,
1261 .fp_armv8,
1262 .neon,
1263 .perfmon,
1264 .predictable_select_expensive,
1265 .use_postra_scheduler,
1266 }),
900 };1267 };
901 result[@enumToInt(Feature.specrestrict)] = .{1268 result[@enumToInt(Feature.thunderxt83)] = .{
902 .index = @enumToInt(Feature.specrestrict),1269 .index = @enumToInt(Feature.thunderxt83),
903 .name = @tagName(Feature.specrestrict),1270 .name = @tagName(Feature.thunderxt83),
904 .llvm_name = "specrestrict",1271 .llvm_name = "thunderxt83",
905 .description = "Enable architectural speculation restriction",1272 .description = "Cavium ThunderX processors",
906 .dependencies = 0,1273 .dependencies = featureSet(&[_]Feature{
1274 .crc,
1275 .crypto,
1276 .fp_armv8,
1277 .neon,
1278 .perfmon,
1279 .predictable_select_expensive,
1280 .use_postra_scheduler,
1281 }),
907 };1282 };
908 result[@enumToInt(Feature.strict_align)] = .{1283 result[@enumToInt(Feature.thunderxt88)] = .{
909 .index = @enumToInt(Feature.strict_align),1284 .index = @enumToInt(Feature.thunderxt88),
910 .name = @tagName(Feature.strict_align),1285 .name = @tagName(Feature.thunderxt88),
911 .llvm_name = "strict-align",1286 .llvm_name = "thunderxt88",
912 .description = "Disallow all unaligned memory access",1287 .description = "Cavium ThunderX processors",
913 .dependencies = 0,1288 .dependencies = featureSet(&[_]Feature{
1289 .crc,
1290 .crypto,
1291 .fp_armv8,
1292 .neon,
1293 .perfmon,
1294 .predictable_select_expensive,
1295 .use_postra_scheduler,
1296 }),
914 };1297 };
915 result[@enumToInt(Feature.tlb_rmi)] = .{1298 result[@enumToInt(Feature.tlb_rmi)] = .{
916 .index = @enumToInt(Feature.tlb_rmi),1299 .index = @enumToInt(Feature.tlb_rmi),
...@@ -919,20 +1302,6 @@ pub const all_features = blk: {...@@ -919,20 +1302,6 @@ pub const all_features = blk: {
919 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",1302 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
920 .dependencies = 0,1303 .dependencies = 0,
921 };1304 };
922 result[@enumToInt(Feature.tracev84)] = .{
923 .index = @enumToInt(Feature.tracev84),
924 .name = @tagName(Feature.tracev84),
925 .llvm_name = "tracev8.4",
926 .description = "Enable v8.4-A Trace extension",
927 .dependencies = 0,
928 };
929 result[@enumToInt(Feature.use_aa)] = .{
930 .index = @enumToInt(Feature.use_aa),
931 .name = @tagName(Feature.use_aa),
932 .llvm_name = "use-aa",
933 .description = "Use alias analysis during codegen",
934 .dependencies = 0,
935 };
936 result[@enumToInt(Feature.tpidr_el1)] = .{1305 result[@enumToInt(Feature.tpidr_el1)] = .{
937 .index = @enumToInt(Feature.tpidr_el1),1306 .index = @enumToInt(Feature.tpidr_el1),
938 .name = @tagName(Feature.tpidr_el1),1307 .name = @tagName(Feature.tpidr_el1),
...@@ -954,6 +1323,54 @@ pub const all_features = blk: {...@@ -954,6 +1323,54 @@ pub const all_features = blk: {
954 .description = "Permit use of TPIDR_EL3 for the TLS base",1323 .description = "Permit use of TPIDR_EL3 for the TLS base",
955 .dependencies = 0,1324 .dependencies = 0,
956 };1325 };
1326 result[@enumToInt(Feature.tracev8_4)] = .{
1327 .index = @enumToInt(Feature.tracev8_4),
1328 .name = @tagName(Feature.tracev8_4),
1329 .llvm_name = "tracev8.4",
1330 .description = "Enable v8.4-A Trace extension",
1331 .dependencies = 0,
1332 };
1333 result[@enumToInt(Feature.tsv110)] = .{
1334 .index = @enumToInt(Feature.tsv110),
1335 .name = @tagName(Feature.tsv110),
1336 .llvm_name = "tsv110",
1337 .description = "HiSilicon TS-V110 processors",
1338 .dependencies = featureSet(&[_]Feature{
1339 .crypto,
1340 .custom_cheap_as_move,
1341 .dotprod,
1342 .fp_armv8,
1343 .fp16fml,
1344 .fullfp16,
1345 .fuse_aes,
1346 .neon,
1347 .perfmon,
1348 .spe,
1349 .use_postra_scheduler,
1350 .v8_2a,
1351 }),
1352 };
1353 result[@enumToInt(Feature.uaops)] = .{
1354 .index = @enumToInt(Feature.uaops),
1355 .name = @tagName(Feature.uaops),
1356 .llvm_name = "uaops",
1357 .description = "Enable v8.2 UAO PState",
1358 .dependencies = 0,
1359 };
1360 result[@enumToInt(Feature.use_aa)] = .{
1361 .index = @enumToInt(Feature.use_aa),
1362 .name = @tagName(Feature.use_aa),
1363 .llvm_name = "use-aa",
1364 .description = "Use alias analysis during codegen",
1365 .dependencies = 0,
1366 };
1367 result[@enumToInt(Feature.use_postra_scheduler)] = .{
1368 .index = @enumToInt(Feature.use_postra_scheduler),
1369 .name = @tagName(Feature.use_postra_scheduler),
1370 .llvm_name = "use-postra-scheduler",
1371 .description = "Schedule again after register allocation",
1372 .dependencies = 0,
1373 };
957 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{1374 result[@enumToInt(Feature.use_reciprocal_square_root)] = .{
958 .index = @enumToInt(Feature.use_reciprocal_square_root),1375 .index = @enumToInt(Feature.use_reciprocal_square_root),
959 .name = @tagName(Feature.use_reciprocal_square_root),1376 .name = @tagName(Feature.use_reciprocal_square_root),
...@@ -961,25 +1378,103 @@ pub const all_features = blk: {...@@ -961,25 +1378,103 @@ pub const all_features = blk: {
961 .description = "Use the reciprocal square root approximation",1378 .description = "Use the reciprocal square root approximation",
962 .dependencies = 0,1379 .dependencies = 0,
963 };1380 };
964 result[@enumToInt(Feature.vh)] = .{1381 result[@enumToInt(Feature.v8_1a)] = .{
965 .index = @enumToInt(Feature.vh),1382 .index = @enumToInt(Feature.v8_1a),
966 .name = @tagName(Feature.vh),1383 .name = @tagName(Feature.v8_1a),
967 .llvm_name = "vh",1384 .llvm_name = "v8.1a",
968 .description = "Enables ARM v8.1 Virtual Host extension",1385 .description = "Support ARM v8.1a instructions",
969 .dependencies = 0,1386 .dependencies = featureSet(&[_]Feature{
970 };1387 .crc,
971 result[@enumToInt(Feature.zcm)] = .{1388 .lor,
972 .index = @enumToInt(Feature.zcm),1389 .lse,
973 .name = @tagName(Feature.zcm),1390 .pan,
974 .llvm_name = "zcm",1391 .rdm,
975 .description = "Has zero-cycle register moves",1392 .vh,
976 .dependencies = 0,1393 }),
977 };1394 };
978 result[@enumToInt(Feature.zcz)] = .{1395 result[@enumToInt(Feature.v8_2a)] = .{
979 .index = @enumToInt(Feature.zcz),1396 .index = @enumToInt(Feature.v8_2a),
980 .name = @tagName(Feature.zcz),1397 .name = @tagName(Feature.v8_2a),
981 .llvm_name = "zcz",1398 .llvm_name = "v8.2a",
982 .description = "Has zero-cycle zeroing instructions",1399 .description = "Support ARM v8.2a instructions",
1400 .dependencies = featureSet(&[_]Feature{
1401 .ccpp,
1402 .pan_rwv,
1403 .ras,
1404 .uaops,
1405 .v8_1a,
1406 }),
1407 };
1408 result[@enumToInt(Feature.v8_3a)] = .{
1409 .index = @enumToInt(Feature.v8_3a),
1410 .name = @tagName(Feature.v8_3a),
1411 .llvm_name = "v8.3a",
1412 .description = "Support ARM v8.3a instructions",
1413 .dependencies = featureSet(&[_]Feature{
1414 .ccidx,
1415 .complxnum,
1416 .jsconv,
1417 .pa,
1418 .rcpc,
1419 .v8_2a,
1420 }),
1421 };
1422 result[@enumToInt(Feature.v8_4a)] = .{
1423 .index = @enumToInt(Feature.v8_4a),
1424 .name = @tagName(Feature.v8_4a),
1425 .llvm_name = "v8.4a",
1426 .description = "Support ARM v8.4a instructions",
1427 .dependencies = featureSet(&[_]Feature{
1428 .am,
1429 .dit,
1430 .dotprod,
1431 .fmi,
1432 .mpam,
1433 .nv,
1434 .rasv8_4,
1435 .rcpc_immo,
1436 .sel2,
1437 .tlb_rmi,
1438 .tracev8_4,
1439 .v8_3a,
1440 }),
1441 };
1442 result[@enumToInt(Feature.v8_5a)] = .{
1443 .index = @enumToInt(Feature.v8_5a),
1444 .name = @tagName(Feature.v8_5a),
1445 .llvm_name = "v8.5a",
1446 .description = "Support ARM v8.5a instructions",
1447 .dependencies = featureSet(&[_]Feature{
1448 .altnzcv,
1449 .bti,
1450 .ccdp,
1451 .fptoint,
1452 .predres,
1453 .sb,
1454 .specrestrict,
1455 .ssbs,
1456 .v8_4a,
1457 }),
1458 };
1459 result[@enumToInt(Feature.vh)] = .{
1460 .index = @enumToInt(Feature.vh),
1461 .name = @tagName(Feature.vh),
1462 .llvm_name = "vh",
1463 .description = "Enables ARM v8.1 Virtual Host extension",
1464 .dependencies = 0,
1465 };
1466 result[@enumToInt(Feature.zcm)] = .{
1467 .index = @enumToInt(Feature.zcm),
1468 .name = @tagName(Feature.zcm),
1469 .llvm_name = "zcm",
1470 .description = "Has zero-cycle register moves",
1471 .dependencies = 0,
1472 };
1473 result[@enumToInt(Feature.zcz)] = .{
1474 .index = @enumToInt(Feature.zcz),
1475 .name = @tagName(Feature.zcz),
1476 .llvm_name = "zcz",
1477 .description = "Has zero-cycle zeroing instructions",
983 .dependencies = featureSet(&[_]Feature{1478 .dependencies = featureSet(&[_]Feature{
984 .zcz_fp,1479 .zcz_fp,
985 .zcz_gp,1480 .zcz_gp,
...@@ -1014,322 +1509,121 @@ pub const cpu = struct {...@@ -1014,322 +1509,121 @@ pub const cpu = struct {
1014 .name = "apple_latest",1509 .name = "apple_latest",
1015 .llvm_name = "apple-latest",1510 .llvm_name = "apple-latest",
1016 .features = featureSet(&[_]Feature{1511 .features = featureSet(&[_]Feature{
1017 .arith_cbz_fusion,1512 .cyclone,
1018 .zcz_fp_workaround,
1019 .alternate_sextload_cvt_f32_pattern,
1020 .fuse_crypto_eor,
1021 .zcm,
1022 .zcz_gp,
1023 .perfmon,
1024 .disable_latency_sched_heuristic,
1025 .fp_armv8,
1026 .zcz_fp,
1027 .arith_bcc_fusion,
1028 .fuse_aes,
1029 }),1513 }),
1030 };1514 };
1031
1032 pub const cortex_a35 = Cpu{1515 pub const cortex_a35 = Cpu{
1033 .name = "cortex_a35",1516 .name = "cortex_a35",
1034 .llvm_name = "cortex-a35",1517 .llvm_name = "cortex-a35",
1035 .features = featureSet(&[_]Feature{1518 .features = featureSet(&[_]Feature{
1036 .perfmon,1519 .a35,
1037 .fp_armv8,
1038 .crc,
1039 }),1520 }),
1040 };1521 };
1041
1042 pub const cortex_a53 = Cpu{1522 pub const cortex_a53 = Cpu{
1043 .name = "cortex_a53",1523 .name = "cortex_a53",
1044 .llvm_name = "cortex-a53",1524 .llvm_name = "cortex-a53",
1045 .features = featureSet(&[_]Feature{1525 .features = featureSet(&[_]Feature{
1046 .custom_cheap_as_move,1526 .a53,
1047 .crc,
1048 .perfmon,
1049 .use_aa,
1050 .fp_armv8,
1051 .fuse_aes,
1052 .balance_fp_ops,
1053 .use_postra_scheduler,
1054 }),1527 }),
1055 };1528 };
1056
1057 pub const cortex_a55 = Cpu{1529 pub const cortex_a55 = Cpu{
1058 .name = "cortex_a55",1530 .name = "cortex_a55",
1059 .llvm_name = "cortex-a55",1531 .llvm_name = "cortex-a55",
1060 .features = featureSet(&[_]Feature{1532 .features = featureSet(&[_]Feature{
1061 .ccpp,1533 .a55,
1062 .rcpc,
1063 .uaops,
1064 .rdm,
1065 .ras,
1066 .lse,
1067 .crc,
1068 .perfmon,
1069 .fp_armv8,
1070 .vh,
1071 .fuse_aes,
1072 .lor,
1073 .dotprod,
1074 .pan,
1075 }),1534 }),
1076 };1535 };
1077
1078 pub const cortex_a57 = Cpu{1536 pub const cortex_a57 = Cpu{
1079 .name = "cortex_a57",1537 .name = "cortex_a57",
1080 .llvm_name = "cortex-a57",1538 .llvm_name = "cortex-a57",
1081 .features = featureSet(&[_]Feature{1539 .features = featureSet(&[_]Feature{
1082 .fuse_literals,1540 .a57,
1083 .predictable_select_expensive,
1084 .custom_cheap_as_move,
1085 .crc,
1086 .perfmon,
1087 .fp_armv8,
1088 .fuse_aes,
1089 .balance_fp_ops,
1090 .use_postra_scheduler,
1091 }),1541 }),
1092 };1542 };
1093
1094 pub const cortex_a72 = Cpu{1543 pub const cortex_a72 = Cpu{
1095 .name = "cortex_a72",1544 .name = "cortex_a72",
1096 .llvm_name = "cortex-a72",1545 .llvm_name = "cortex-a72",
1097 .features = featureSet(&[_]Feature{1546 .features = featureSet(&[_]Feature{
1098 .fuse_aes,1547 .a72,
1099 .fp_armv8,
1100 .perfmon,
1101 .crc,
1102 }),1548 }),
1103 };1549 };
1104
1105 pub const cortex_a73 = Cpu{1550 pub const cortex_a73 = Cpu{
1106 .name = "cortex_a73",1551 .name = "cortex_a73",
1107 .llvm_name = "cortex-a73",1552 .llvm_name = "cortex-a73",
1108 .features = featureSet(&[_]Feature{1553 .features = featureSet(&[_]Feature{
1109 .fuse_aes,1554 .a73,
1110 .fp_armv8,
1111 .perfmon,
1112 .crc,
1113 }),1555 }),
1114 };1556 };
1115
1116 pub const cortex_a75 = Cpu{1557 pub const cortex_a75 = Cpu{
1117 .name = "cortex_a75",1558 .name = "cortex_a75",
1118 .llvm_name = "cortex-a75",1559 .llvm_name = "cortex-a75",
1119 .features = featureSet(&[_]Feature{1560 .features = featureSet(&[_]Feature{
1120 .ccpp,1561 .a75,
1121 .rcpc,
1122 .uaops,
1123 .rdm,
1124 .ras,
1125 .lse,
1126 .crc,
1127 .perfmon,
1128 .fp_armv8,
1129 .vh,
1130 .fuse_aes,
1131 .lor,
1132 .dotprod,
1133 .pan,
1134 }),1562 }),
1135 };1563 };
1136
1137 pub const cortex_a76 = Cpu{1564 pub const cortex_a76 = Cpu{
1138 .name = "cortex_a76",1565 .name = "cortex_a76",
1139 .llvm_name = "cortex-a76",1566 .llvm_name = "cortex-a76",
1140 .features = featureSet(&[_]Feature{1567 .features = featureSet(&[_]Feature{
1141 .ccpp,1568 .a76,
1142 .rcpc,
1143 .uaops,
1144 .rdm,
1145 .ras,
1146 .lse,
1147 .crc,
1148 .fp_armv8,
1149 .vh,
1150 .lor,
1151 .ssbs,
1152 .dotprod,
1153 .pan,
1154 }),1569 }),
1155 };1570 };
1156
1157 pub const cortex_a76ae = Cpu{1571 pub const cortex_a76ae = Cpu{
1158 .name = "cortex_a76ae",1572 .name = "cortex_a76ae",
1159 .llvm_name = "cortex-a76ae",1573 .llvm_name = "cortex-a76ae",
1160 .features = featureSet(&[_]Feature{1574 .features = featureSet(&[_]Feature{
1161 .ccpp,1575 .a76,
1162 .rcpc,
1163 .uaops,
1164 .rdm,
1165 .ras,
1166 .lse,
1167 .crc,
1168 .fp_armv8,
1169 .vh,
1170 .lor,
1171 .ssbs,
1172 .dotprod,
1173 .pan,
1174 }),1576 }),
1175 };1577 };
1176
1177 pub const cyclone = Cpu{1578 pub const cyclone = Cpu{
1178 .name = "cyclone",1579 .name = "cyclone",
1179 .llvm_name = "cyclone",1580 .llvm_name = "cyclone",
1180 .features = featureSet(&[_]Feature{1581 .features = featureSet(&[_]Feature{
1181 .arith_cbz_fusion,1582 .cyclone,
1182 .zcz_fp_workaround,
1183 .alternate_sextload_cvt_f32_pattern,
1184 .fuse_crypto_eor,
1185 .zcm,
1186 .zcz_gp,
1187 .perfmon,
1188 .disable_latency_sched_heuristic,
1189 .fp_armv8,
1190 .zcz_fp,
1191 .arith_bcc_fusion,
1192 .fuse_aes,
1193 }),1583 }),
1194 };1584 };
1195
1196 pub const exynos_m1 = Cpu{1585 pub const exynos_m1 = Cpu{
1197 .name = "exynos_m1",1586 .name = "exynos_m1",
1198 .llvm_name = "exynos-m1",1587 .llvm_name = "exynos-m1",
1199 .features = featureSet(&[_]Feature{1588 .features = featureSet(&[_]Feature{
1200 .custom_cheap_as_move,1589 .exynosm1,
1201 .crc,
1202 .force_32bit_jump_tables,
1203 .perfmon,
1204 .slow_misaligned_128store,
1205 .use_reciprocal_square_root,
1206 .fp_armv8,
1207 .zcz_fp,
1208 .fuse_aes,
1209 .slow_paired_128,
1210 .use_postra_scheduler,
1211 }),1590 }),
1212 };1591 };
1213
1214 pub const exynos_m2 = Cpu{1592 pub const exynos_m2 = Cpu{
1215 .name = "exynos_m2",1593 .name = "exynos_m2",
1216 .llvm_name = "exynos-m2",1594 .llvm_name = "exynos-m2",
1217 .features = featureSet(&[_]Feature{1595 .features = featureSet(&[_]Feature{
1218 .custom_cheap_as_move,1596 .exynosm2,
1219 .crc,
1220 .force_32bit_jump_tables,
1221 .perfmon,
1222 .slow_misaligned_128store,
1223 .fp_armv8,
1224 .zcz_fp,
1225 .fuse_aes,
1226 .slow_paired_128,
1227 .use_postra_scheduler,
1228 }),1597 }),
1229 };1598 };
1230
1231 pub const exynos_m3 = Cpu{1599 pub const exynos_m3 = Cpu{
1232 .name = "exynos_m3",1600 .name = "exynos_m3",
1233 .llvm_name = "exynos-m3",1601 .llvm_name = "exynos-m3",
1234 .features = featureSet(&[_]Feature{1602 .features = featureSet(&[_]Feature{
1235 .fuse_literals,1603 .exynosm3,
1236 .predictable_select_expensive,
1237 .custom_cheap_as_move,
1238 .crc,
1239 .force_32bit_jump_tables,
1240 .fuse_address,
1241 .fuse_csel,
1242 .perfmon,
1243 .fp_armv8,
1244 .zcz_fp,
1245 .fuse_aes,
1246 .lsl_fast,
1247 .use_postra_scheduler,
1248 }),1604 }),
1249 };1605 };
1250
1251 pub const exynos_m4 = Cpu{1606 pub const exynos_m4 = Cpu{
1252 .name = "exynos_m4",1607 .name = "exynos_m4",
1253 .llvm_name = "exynos-m4",1608 .llvm_name = "exynos-m4",
1254 .features = featureSet(&[_]Feature{1609 .features = featureSet(&[_]Feature{
1255 .arith_cbz_fusion,1610 .exynosm4,
1256 .custom_cheap_as_move,
1257 .lse,
1258 .zcz_fp,
1259 .lsl_fast,
1260 .lor,
1261 .fuse_literals,
1262 .ccpp,
1263 .ras,
1264 .fp_armv8,
1265 .fuse_aes,
1266 .pan,
1267 .fuse_arith_logic,
1268 .crc,
1269 .force_32bit_jump_tables,
1270 .fuse_address,
1271 .fuse_csel,
1272 .arith_bcc_fusion,
1273 .uaops,
1274 .rdm,
1275 .zcz_gp,
1276 .perfmon,
1277 .vh,
1278 .use_postra_scheduler,
1279 .dotprod,
1280 }),1611 }),
1281 };1612 };
1282
1283 pub const exynos_m5 = Cpu{1613 pub const exynos_m5 = Cpu{
1284 .name = "exynos_m5",1614 .name = "exynos_m5",
1285 .llvm_name = "exynos-m5",1615 .llvm_name = "exynos-m5",
1286 .features = featureSet(&[_]Feature{1616 .features = featureSet(&[_]Feature{
1287 .arith_cbz_fusion,1617 .exynosm4,
1288 .custom_cheap_as_move,
1289 .lse,
1290 .zcz_fp,
1291 .lsl_fast,
1292 .lor,
1293 .fuse_literals,
1294 .ccpp,
1295 .ras,
1296 .fp_armv8,
1297 .fuse_aes,
1298 .pan,
1299 .fuse_arith_logic,
1300 .crc,
1301 .force_32bit_jump_tables,
1302 .fuse_address,
1303 .fuse_csel,
1304 .arith_bcc_fusion,
1305 .uaops,
1306 .rdm,
1307 .zcz_gp,
1308 .perfmon,
1309 .vh,
1310 .use_postra_scheduler,
1311 .dotprod,
1312 }),1618 }),
1313 };1619 };
1314
1315 pub const falkor = Cpu{1620 pub const falkor = Cpu{
1316 .name = "falkor",1621 .name = "falkor",
1317 .llvm_name = "falkor",1622 .llvm_name = "falkor",
1318 .features = featureSet(&[_]Feature{1623 .features = featureSet(&[_]Feature{
1319 .predictable_select_expensive,1624 .falkor,
1320 .custom_cheap_as_move,
1321 .rdm,
1322 .slow_strqro_store,
1323 .zcz_gp,
1324 .crc,
1325 .perfmon,
1326 .fp_armv8,
1327 .zcz_fp,
1328 .lsl_fast,
1329 .use_postra_scheduler,
1330 }),1625 }),
1331 };1626 };
1332
1333 pub const generic = Cpu{1627 pub const generic = Cpu{
1334 .name = "generic",1628 .name = "generic",
1335 .llvm_name = "generic",1629 .llvm_name = "generic",
...@@ -1341,146 +1635,60 @@ pub const cpu = struct {...@@ -1341,146 +1635,60 @@ pub const cpu = struct {
1341 .use_postra_scheduler,1635 .use_postra_scheduler,
1342 }),1636 }),
1343 };1637 };
1344
1345 pub const kryo = Cpu{1638 pub const kryo = Cpu{
1346 .name = "kryo",1639 .name = "kryo",
1347 .llvm_name = "kryo",1640 .llvm_name = "kryo",
1348 .features = featureSet(&[_]Feature{1641 .features = featureSet(&[_]Feature{
1349 .predictable_select_expensive,1642 .kryo,
1350 .custom_cheap_as_move,
1351 .zcz_gp,
1352 .crc,
1353 .perfmon,
1354 .fp_armv8,
1355 .zcz_fp,
1356 .lsl_fast,
1357 .use_postra_scheduler,
1358 }),1643 }),
1359 };1644 };
1360
1361 pub const saphira = Cpu{1645 pub const saphira = Cpu{
1362 .name = "saphira",1646 .name = "saphira",
1363 .llvm_name = "saphira",1647 .llvm_name = "saphira",
1364 .features = featureSet(&[_]Feature{1648 .features = featureSet(&[_]Feature{
1365 .predictable_select_expensive,1649 .saphira,
1366 .custom_cheap_as_move,
1367 .fmi,
1368 .lse,
1369 .zcz_fp,
1370 .lsl_fast,
1371 .lor,
1372 .dit,
1373 .pa,
1374 .ccpp,
1375 .sel2,
1376 .ras,
1377 .fp_armv8,
1378 .ccidx,
1379 .pan,
1380 .rcpc,
1381 .crc,
1382 .tracev84,
1383 .mpam,
1384 .am,
1385 .nv,
1386 .tlb_rmi,
1387 .uaops,
1388 .rdm,
1389 .zcz_gp,
1390 .perfmon,
1391 .vh,
1392 .use_postra_scheduler,
1393 .dotprod,
1394 .spe,
1395 }),1650 }),
1396 };1651 };
1397
1398 pub const thunderx = Cpu{1652 pub const thunderx = Cpu{
1399 .name = "thunderx",1653 .name = "thunderx",
1400 .llvm_name = "thunderx",1654 .llvm_name = "thunderx",
1401 .features = featureSet(&[_]Feature{1655 .features = featureSet(&[_]Feature{
1402 .predictable_select_expensive,1656 .thunderx,
1403 .crc,
1404 .perfmon,
1405 .fp_armv8,
1406 .use_postra_scheduler,
1407 }),1657 }),
1408 };1658 };
1409
1410 pub const thunderx2t99 = Cpu{1659 pub const thunderx2t99 = Cpu{
1411 .name = "thunderx2t99",1660 .name = "thunderx2t99",
1412 .llvm_name = "thunderx2t99",1661 .llvm_name = "thunderx2t99",
1413 .features = featureSet(&[_]Feature{1662 .features = featureSet(&[_]Feature{
1414 .predictable_select_expensive,1663 .thunderx2t99,
1415 .aggressive_fma,
1416 .rdm,
1417 .lse,
1418 .crc,
1419 .fp_armv8,
1420 .vh,
1421 .arith_bcc_fusion,
1422 .lor,
1423 .use_postra_scheduler,
1424 .pan,
1425 }),1664 }),
1426 };1665 };
1427
1428 pub const thunderxt81 = Cpu{1666 pub const thunderxt81 = Cpu{
1429 .name = "thunderxt81",1667 .name = "thunderxt81",
1430 .llvm_name = "thunderxt81",1668 .llvm_name = "thunderxt81",
1431 .features = featureSet(&[_]Feature{1669 .features = featureSet(&[_]Feature{
1432 .predictable_select_expensive,1670 .thunderxt81,
1433 .crc,
1434 .perfmon,
1435 .fp_armv8,
1436 .use_postra_scheduler,
1437 }),1671 }),
1438 };1672 };
1439
1440 pub const thunderxt83 = Cpu{1673 pub const thunderxt83 = Cpu{
1441 .name = "thunderxt83",1674 .name = "thunderxt83",
1442 .llvm_name = "thunderxt83",1675 .llvm_name = "thunderxt83",
1443 .features = featureSet(&[_]Feature{1676 .features = featureSet(&[_]Feature{
1444 .predictable_select_expensive,1677 .thunderxt83,
1445 .crc,
1446 .perfmon,
1447 .fp_armv8,
1448 .use_postra_scheduler,
1449 }),1678 }),
1450 };1679 };
1451
1452 pub const thunderxt88 = Cpu{1680 pub const thunderxt88 = Cpu{
1453 .name = "thunderxt88",1681 .name = "thunderxt88",
1454 .llvm_name = "thunderxt88",1682 .llvm_name = "thunderxt88",
1455 .features = featureSet(&[_]Feature{1683 .features = featureSet(&[_]Feature{
1456 .predictable_select_expensive,1684 .thunderxt88,
1457 .crc,
1458 .perfmon,
1459 .fp_armv8,
1460 .use_postra_scheduler,
1461 }),1685 }),
1462 };1686 };
1463
1464 pub const tsv110 = Cpu{1687 pub const tsv110 = Cpu{
1465 .name = "tsv110",1688 .name = "tsv110",
1466 .llvm_name = "tsv110",1689 .llvm_name = "tsv110",
1467 .features = featureSet(&[_]Feature{1690 .features = featureSet(&[_]Feature{
1468 .ccpp,1691 .tsv110,
1469 .custom_cheap_as_move,
1470 .uaops,
1471 .rdm,
1472 .ras,
1473 .lse,
1474 .crc,
1475 .perfmon,
1476 .fp_armv8,
1477 .vh,
1478 .fuse_aes,
1479 .lor,
1480 .use_postra_scheduler,
1481 .dotprod,
1482 .pan,
1483 .spe,
1484 }),1692 }),
1485 };1693 };
1486};1694};
lib/std/target/amdgpu.zig+1523-2131
...@@ -1,2132 +1,1524 @@...@@ -1,2132 +1,1524 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_BitInsts16 = Feature{4pub const Feature = enum {
5 .name = "BitInsts16",5 @"16_bit_insts",
6 .llvm_name = "16-bit-insts",6 DumpCode,
7 .description = "Has i16/f16 instructions",7 add_no_carry_insts,
8 .dependencies = &[_]*const Feature {8 aperture_regs,
9 },9 atomic_fadd_insts,
10};10 auto_waitcnt_before_barrier,
1111 ci_insts,
12pub const feature_addNoCarryInsts = Feature{12 code_object_v3,
13 .name = "addNoCarryInsts",13 cumode,
14 .llvm_name = "add-no-carry-insts",14 dl_insts,
15 .description = "Have VALU add/sub instructions without carry out",15 dot1_insts,
16 .dependencies = &[_]*const Feature {16 dot2_insts,
17 },17 dot3_insts,
18};18 dot4_insts,
1919 dot5_insts,
20pub const feature_apertureRegs = Feature{20 dot6_insts,
21 .name = "apertureRegs",21 dpp,
22 .llvm_name = "aperture-regs",22 dpp8,
23 .description = "Has Memory Aperture Base and Size Registers",23 dumpcode,
24 .dependencies = &[_]*const Feature {24 enable_ds128,
25 },25 enable_prt_strict_null,
26};26 fast_fmaf,
2727 flat_address_space,
28pub const feature_atomicFaddInsts = Feature{28 flat_for_global,
29 .name = "atomicFaddInsts",29 flat_global_insts,
30 .llvm_name = "atomic-fadd-insts",30 flat_inst_offsets,
31 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",31 flat_scratch_insts,
32 .dependencies = &[_]*const Feature {32 flat_segment_offset_bug,
33 },33 fma_mix_insts,
34};34 fmaf,
3535 fp_exceptions,
36pub const feature_autoWaitcntBeforeBarrier = Feature{36 fp16_denormals,
37 .name = "autoWaitcntBeforeBarrier",37 fp32_denormals,
38 .llvm_name = "auto-waitcnt-before-barrier",38 fp64,
39 .description = "Hardware automatically inserts waitcnt before barrier",39 fp64_denormals,
40 .dependencies = &[_]*const Feature {40 fp64_fp16_denormals,
41 },41 gcn3_encoding,
42};42 gfx10,
4343 gfx10_insts,
44pub const feature_ciInsts = Feature{44 gfx7_gfx8_gfx9_insts,
45 .name = "ciInsts",45 gfx8_insts,
46 .llvm_name = "ci-insts",46 gfx9,
47 .description = "Additional instructions for CI+",47 gfx9_insts,
48 .dependencies = &[_]*const Feature {48 half_rate_64_ops,
49 },49 inst_fwd_prefetch_bug,
50};50 int_clamp_insts,
5151 inv_2pi_inline_imm,
52pub const feature_codeObjectV3 = Feature{52 lds_branch_vmem_war_hazard,
53 .name = "codeObjectV3",53 lds_misaligned_bug,
54 .llvm_name = "code-object-v3",54 ldsbankcount16,
55 .description = "Generate code object version 3",55 ldsbankcount32,
56 .dependencies = &[_]*const Feature {56 load_store_opt,
57 },57 localmemorysize0,
58};58 localmemorysize32768,
5959 localmemorysize65536,
60pub const feature_cumode = Feature{60 mad_mix_insts,
61 .name = "cumode",61 mai_insts,
62 .llvm_name = "cumode",62 max_private_element_size_16,
63 .description = "Enable CU wavefront execution mode",63 max_private_element_size_4,
64 .dependencies = &[_]*const Feature {64 max_private_element_size_8,
65 },65 mimg_r128,
66};66 movrel,
6767 no_data_dep_hazard,
68pub const feature_dlInsts = Feature{68 no_sdst_cmpx,
69 .name = "dlInsts",69 no_sram_ecc_support,
70 .llvm_name = "dl-insts",70 no_xnack_support,
71 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",71 nsa_encoding,
72 .dependencies = &[_]*const Feature {72 nsa_to_vmem_bug,
73 },73 offset_3f_bug,
74};74 pk_fmac_f16_inst,
7575 promote_alloca,
76pub const feature_dpp = Feature{76 r128_a16,
77 .name = "dpp",77 register_banking,
78 .llvm_name = "dpp",78 s_memrealtime,
79 .description = "Support DPP (Data Parallel Primitives) extension",79 scalar_atomics,
80 .dependencies = &[_]*const Feature {80 scalar_flat_scratch_insts,
81 },81 scalar_stores,
82};82 sdwa,
8383 sdwa_mav,
84pub const feature_dpp8 = Feature{84 sdwa_omod,
85 .name = "dpp8",85 sdwa_out_mods_vopc,
86 .llvm_name = "dpp8",86 sdwa_scalar,
87 .description = "Support DPP8 (Data Parallel Primitives) extension",87 sdwa_sdst,
88 .dependencies = &[_]*const Feature {88 sea_islands,
89 },89 sgpr_init_bug,
90};90 si_scheduler,
9191 smem_to_vector_write_hazard,
92pub const feature_noSramEccSupport = Feature{92 southern_islands,
93 .name = "noSramEccSupport",93 sram_ecc,
94 .llvm_name = "no-sram-ecc-support",94 trap_handler,
95 .description = "Hardware does not support SRAM ECC",95 trig_reduced_range,
96 .dependencies = &[_]*const Feature {96 unaligned_buffer_access,
97 },97 unaligned_scratch_access,
98};98 unpacked_d16_vmem,
9999 unsafe_ds_offset_folding,
100pub const feature_noXnackSupport = Feature{100 vcmpx_exec_war_hazard,
101 .name = "noXnackSupport",101 vcmpx_permlane_hazard,
102 .llvm_name = "no-xnack-support",102 vgpr_index_mode,
103 .description = "Hardware does not support XNACK",103 vmem_to_scalar_write_hazard,
104 .dependencies = &[_]*const Feature {104 volcanic_islands,
105 },105 vop3_literal,
106};106 vop3p,
107107 vscnt,
108pub const feature_dot1Insts = Feature{108 wavefrontsize16,
109 .name = "dot1Insts",109 wavefrontsize32,
110 .llvm_name = "dot1-insts",110 wavefrontsize64,
111 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",111 xnack,
112 .dependencies = &[_]*const Feature {112};
113 },113
114};114pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
115115
116pub const feature_dot2Insts = Feature{116pub const all_features = blk: {
117 .name = "dot2Insts",117 const len = @typeInfo(Feature).Enum.fields.len;
118 .llvm_name = "dot2-insts",118 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
119 .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions",119 var result: [len]Cpu.Feature = undefined;
120 .dependencies = &[_]*const Feature {120 result[@enumToInt(Feature.@"16_bit_insts")] = .{
121 },121 .index = @enumToInt(Feature.@"16_bit_insts"),
122};122 .name = @tagName(Feature.@"16_bit_insts"),
123123 .llvm_name = "16-bit-insts",
124pub const feature_dot3Insts = Feature{124 .description = "Has i16/f16 instructions",
125 .name = "dot3Insts",125 .dependencies = 0,
126 .llvm_name = "dot3-insts",126 };
127 .description = "Has v_dot8c_i32_i4 instruction",127 result[@enumToInt(Feature.DumpCode)] = .{
128 .dependencies = &[_]*const Feature {128 .index = @enumToInt(Feature.DumpCode),
129 },129 .name = @tagName(Feature.DumpCode),
130};130 .llvm_name = "DumpCode",
131131 .description = "Dump MachineInstrs in the CodeEmitter",
132pub const feature_dot4Insts = Feature{132 .dependencies = 0,
133 .name = "dot4Insts",133 };
134 .llvm_name = "dot4-insts",134 result[@enumToInt(Feature.add_no_carry_insts)] = .{
135 .description = "Has v_dot2c_i32_i16 instruction",135 .index = @enumToInt(Feature.add_no_carry_insts),
136 .dependencies = &[_]*const Feature {136 .name = @tagName(Feature.add_no_carry_insts),
137 },137 .llvm_name = "add-no-carry-insts",
138};138 .description = "Have VALU add/sub instructions without carry out",
139139 .dependencies = 0,
140pub const feature_dot5Insts = Feature{140 };
141 .name = "dot5Insts",141 result[@enumToInt(Feature.aperture_regs)] = .{
142 .llvm_name = "dot5-insts",142 .index = @enumToInt(Feature.aperture_regs),
143 .description = "Has v_dot2c_f32_f16 instruction",143 .name = @tagName(Feature.aperture_regs),
144 .dependencies = &[_]*const Feature {144 .llvm_name = "aperture-regs",
145 },145 .description = "Has Memory Aperture Base and Size Registers",
146};146 .dependencies = 0,
147147 };
148pub const feature_dot6Insts = Feature{148 result[@enumToInt(Feature.atomic_fadd_insts)] = .{
149 .name = "dot6Insts",149 .index = @enumToInt(Feature.atomic_fadd_insts),
150 .llvm_name = "dot6-insts",150 .name = @tagName(Feature.atomic_fadd_insts),
151 .description = "Has v_dot4c_i32_i8 instruction",151 .llvm_name = "atomic-fadd-insts",
152 .dependencies = &[_]*const Feature {152 .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions",
153 },153 .dependencies = 0,
154};154 };
155155 result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{
156pub const feature_DumpCode = Feature{156 .index = @enumToInt(Feature.auto_waitcnt_before_barrier),
157 .name = "DumpCode",157 .name = @tagName(Feature.auto_waitcnt_before_barrier),
158 .llvm_name = "DumpCode",158 .llvm_name = "auto-waitcnt-before-barrier",
159 .description = "Dump MachineInstrs in the CodeEmitter",159 .description = "Hardware automatically inserts waitcnt before barrier",
160 .dependencies = &[_]*const Feature {160 .dependencies = 0,
161 },161 };
162};162 result[@enumToInt(Feature.ci_insts)] = .{
163163 .index = @enumToInt(Feature.ci_insts),
164pub const feature_dumpcode = Feature{164 .name = @tagName(Feature.ci_insts),
165 .name = "dumpcode",165 .llvm_name = "ci-insts",
166 .llvm_name = "dumpcode",166 .description = "Additional instructions for CI+",
167 .description = "Dump MachineInstrs in the CodeEmitter",167 .dependencies = 0,
168 .dependencies = &[_]*const Feature {168 };
169 },169 result[@enumToInt(Feature.code_object_v3)] = .{
170};170 .index = @enumToInt(Feature.code_object_v3),
171171 .name = @tagName(Feature.code_object_v3),
172pub const feature_enableDs128 = Feature{172 .llvm_name = "code-object-v3",
173 .name = "enableDs128",173 .description = "Generate code object version 3",
174 .llvm_name = "enable-ds128",174 .dependencies = 0,
175 .description = "Use ds_{read|write}_b128",175 };
176 .dependencies = &[_]*const Feature {176 result[@enumToInt(Feature.cumode)] = .{
177 },177 .index = @enumToInt(Feature.cumode),
178};178 .name = @tagName(Feature.cumode),
179179 .llvm_name = "cumode",
180pub const feature_loadStoreOpt = Feature{180 .description = "Enable CU wavefront execution mode",
181 .name = "loadStoreOpt",181 .dependencies = 0,
182 .llvm_name = "load-store-opt",182 };
183 .description = "Enable SI load/store optimizer pass",183 result[@enumToInt(Feature.dl_insts)] = .{
184 .dependencies = &[_]*const Feature {184 .index = @enumToInt(Feature.dl_insts),
185 },185 .name = @tagName(Feature.dl_insts),
186};186 .llvm_name = "dl-insts",
187187 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
188pub const feature_enablePrtStrictNull = Feature{188 .dependencies = 0,
189 .name = "enablePrtStrictNull",189 };
190 .llvm_name = "enable-prt-strict-null",190 result[@enumToInt(Feature.dot1_insts)] = .{
191 .description = "Enable zeroing of result registers for sparse texture fetches",191 .index = @enumToInt(Feature.dot1_insts),
192 .dependencies = &[_]*const Feature {192 .name = @tagName(Feature.dot1_insts),
193 },193 .llvm_name = "dot1-insts",
194};194 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
195195 .dependencies = 0,
196pub const feature_siScheduler = Feature{196 };
197 .name = "siScheduler",197 result[@enumToInt(Feature.dot2_insts)] = .{
198 .llvm_name = "si-scheduler",198 .index = @enumToInt(Feature.dot2_insts),
199 .description = "Enable SI Machine Scheduler",199 .name = @tagName(Feature.dot2_insts),
200 .dependencies = &[_]*const Feature {200 .llvm_name = "dot2-insts",
201 },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};202 .dependencies = 0,
203203 };
204pub const feature_unsafeDsOffsetFolding = Feature{204 result[@enumToInt(Feature.dot3_insts)] = .{
205 .name = "unsafeDsOffsetFolding",205 .index = @enumToInt(Feature.dot3_insts),
206 .llvm_name = "unsafe-ds-offset-folding",206 .name = @tagName(Feature.dot3_insts),
207 .description = "Force using DS instruction immediate offsets on SI",207 .llvm_name = "dot3-insts",
208 .dependencies = &[_]*const Feature {208 .description = "Has v_dot8c_i32_i4 instruction",
209 },209 .dependencies = 0,
210};210 };
211211 result[@enumToInt(Feature.dot4_insts)] = .{
212pub const feature_fmaf = Feature{212 .index = @enumToInt(Feature.dot4_insts),
213 .name = "fmaf",213 .name = @tagName(Feature.dot4_insts),
214 .llvm_name = "fmaf",214 .llvm_name = "dot4-insts",
215 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",215 .description = "Has v_dot2c_i32_i16 instruction",
216 .dependencies = &[_]*const Feature {216 .dependencies = 0,
217 },217 };
218};218 result[@enumToInt(Feature.dot5_insts)] = .{
219219 .index = @enumToInt(Feature.dot5_insts),
220pub const feature_fp16Denormals = Feature{220 .name = @tagName(Feature.dot5_insts),
221 .name = "fp16Denormals",221 .llvm_name = "dot5-insts",
222 .llvm_name = "fp16-denormals",222 .description = "Has v_dot2c_f32_f16 instruction",
223 .description = "Enable half precision denormal handling",223 .dependencies = 0,
224 .dependencies = &[_]*const Feature {224 };
225 &feature_fp64,225 result[@enumToInt(Feature.dot6_insts)] = .{
226 },226 .index = @enumToInt(Feature.dot6_insts),
227};227 .name = @tagName(Feature.dot6_insts),
228228 .llvm_name = "dot6-insts",
229pub const feature_fp32Denormals = Feature{229 .description = "Has v_dot4c_i32_i8 instruction",
230 .name = "fp32Denormals",230 .dependencies = 0,
231 .llvm_name = "fp32-denormals",231 };
232 .description = "Enable single precision denormal handling",232 result[@enumToInt(Feature.dpp)] = .{
233 .dependencies = &[_]*const Feature {233 .index = @enumToInt(Feature.dpp),
234 },234 .name = @tagName(Feature.dpp),
235};235 .llvm_name = "dpp",
236236 .description = "Support DPP (Data Parallel Primitives) extension",
237pub const feature_fp64 = Feature{237 .dependencies = 0,
238 .name = "fp64",238 };
239 .llvm_name = "fp64",239 result[@enumToInt(Feature.dpp8)] = .{
240 .description = "Enable double precision operations",240 .index = @enumToInt(Feature.dpp8),
241 .dependencies = &[_]*const Feature {241 .name = @tagName(Feature.dpp8),
242 },242 .llvm_name = "dpp8",
243};243 .description = "Support DPP8 (Data Parallel Primitives) extension",
244244 .dependencies = 0,
245pub const feature_fp64Denormals = Feature{245 };
246 .name = "fp64Denormals",246 result[@enumToInt(Feature.dumpcode)] = .{
247 .llvm_name = "fp64-denormals",247 .index = @enumToInt(Feature.dumpcode),
248 .description = "Enable double and half precision denormal handling",248 .name = @tagName(Feature.dumpcode),
249 .dependencies = &[_]*const Feature {249 .llvm_name = "dumpcode",
250 &feature_fp64,250 .description = "Dump MachineInstrs in the CodeEmitter",
251 },251 .dependencies = 0,
252};252 };
253253 result[@enumToInt(Feature.enable_ds128)] = .{
254pub const feature_fp64Fp16Denormals = Feature{254 .index = @enumToInt(Feature.enable_ds128),
255 .name = "fp64Fp16Denormals",255 .name = @tagName(Feature.enable_ds128),
256 .llvm_name = "fp64-fp16-denormals",256 .llvm_name = "enable-ds128",
257 .description = "Enable double and half precision denormal handling",257 .description = "Use ds_read|write_b128",
258 .dependencies = &[_]*const Feature {258 .dependencies = 0,
259 &feature_fp64,259 };
260 },260 result[@enumToInt(Feature.enable_prt_strict_null)] = .{
261};261 .index = @enumToInt(Feature.enable_prt_strict_null),
262262 .name = @tagName(Feature.enable_prt_strict_null),
263pub const feature_fpExceptions = Feature{263 .llvm_name = "enable-prt-strict-null",
264 .name = "fpExceptions",264 .description = "Enable zeroing of result registers for sparse texture fetches",
265 .llvm_name = "fp-exceptions",265 .dependencies = 0,
266 .description = "Enable floating point exceptions",266 };
267 .dependencies = &[_]*const Feature {267 result[@enumToInt(Feature.fast_fmaf)] = .{
268 },268 .index = @enumToInt(Feature.fast_fmaf),
269};269 .name = @tagName(Feature.fast_fmaf),
270270 .llvm_name = "fast-fmaf",
271pub const feature_fastFmaf = Feature{271 .description = "Assuming f32 fma is at least as fast as mul + add",
272 .name = "fastFmaf",272 .dependencies = 0,
273 .llvm_name = "fast-fmaf",273 };
274 .description = "Assuming f32 fma is at least as fast as mul + add",274 result[@enumToInt(Feature.flat_address_space)] = .{
275 .dependencies = &[_]*const Feature {275 .index = @enumToInt(Feature.flat_address_space),
276 },276 .name = @tagName(Feature.flat_address_space),
277};277 .llvm_name = "flat-address-space",
278278 .description = "Support flat address space",
279pub const feature_flatAddressSpace = Feature{279 .dependencies = 0,
280 .name = "flatAddressSpace",280 };
281 .llvm_name = "flat-address-space",281 result[@enumToInt(Feature.flat_for_global)] = .{
282 .description = "Support flat address space",282 .index = @enumToInt(Feature.flat_for_global),
283 .dependencies = &[_]*const Feature {283 .name = @tagName(Feature.flat_for_global),
284 },284 .llvm_name = "flat-for-global",
285};285 .description = "Force to generate flat instruction for global",
286286 .dependencies = 0,
287pub const feature_flatForGlobal = Feature{287 };
288 .name = "flatForGlobal",288 result[@enumToInt(Feature.flat_global_insts)] = .{
289 .llvm_name = "flat-for-global",289 .index = @enumToInt(Feature.flat_global_insts),
290 .description = "Force to generate flat instruction for global",290 .name = @tagName(Feature.flat_global_insts),
291 .dependencies = &[_]*const Feature {291 .llvm_name = "flat-global-insts",
292 },292 .description = "Have global_* flat memory instructions",
293};293 .dependencies = 0,
294294 };
295pub const feature_flatGlobalInsts = Feature{295 result[@enumToInt(Feature.flat_inst_offsets)] = .{
296 .name = "flatGlobalInsts",296 .index = @enumToInt(Feature.flat_inst_offsets),
297 .llvm_name = "flat-global-insts",297 .name = @tagName(Feature.flat_inst_offsets),
298 .description = "Have global_* flat memory instructions",298 .llvm_name = "flat-inst-offsets",
299 .dependencies = &[_]*const Feature {299 .description = "Flat instructions have immediate offset addressing mode",
300 },300 .dependencies = 0,
301};301 };
302302 result[@enumToInt(Feature.flat_scratch_insts)] = .{
303pub const feature_flatInstOffsets = Feature{303 .index = @enumToInt(Feature.flat_scratch_insts),
304 .name = "flatInstOffsets",304 .name = @tagName(Feature.flat_scratch_insts),
305 .llvm_name = "flat-inst-offsets",305 .llvm_name = "flat-scratch-insts",
306 .description = "Flat instructions have immediate offset addressing mode",306 .description = "Have scratch_* flat memory instructions",
307 .dependencies = &[_]*const Feature {307 .dependencies = 0,
308 },308 };
309};309 result[@enumToInt(Feature.flat_segment_offset_bug)] = .{
310310 .index = @enumToInt(Feature.flat_segment_offset_bug),
311pub const feature_flatScratchInsts = Feature{311 .name = @tagName(Feature.flat_segment_offset_bug),
312 .name = "flatScratchInsts",312 .llvm_name = "flat-segment-offset-bug",
313 .llvm_name = "flat-scratch-insts",313 .description = "GFX10 bug, inst_offset ignored in flat segment",
314 .description = "Have scratch_* flat memory instructions",314 .dependencies = 0,
315 .dependencies = &[_]*const Feature {315 };
316 },316 result[@enumToInt(Feature.fma_mix_insts)] = .{
317};317 .index = @enumToInt(Feature.fma_mix_insts),
318318 .name = @tagName(Feature.fma_mix_insts),
319pub const feature_flatSegmentOffsetBug = Feature{319 .llvm_name = "fma-mix-insts",
320 .name = "flatSegmentOffsetBug",320 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
321 .llvm_name = "flat-segment-offset-bug",321 .dependencies = 0,
322 .description = "GFX10 bug, inst_offset ignored in flat segment",322 };
323 .dependencies = &[_]*const Feature {323 result[@enumToInt(Feature.fmaf)] = .{
324 },324 .index = @enumToInt(Feature.fmaf),
325};325 .name = @tagName(Feature.fmaf),
326326 .llvm_name = "fmaf",
327pub const feature_fmaMixInsts = Feature{327 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
328 .name = "fmaMixInsts",328 .dependencies = 0,
329 .llvm_name = "fma-mix-insts",329 };
330 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",330 result[@enumToInt(Feature.fp_exceptions)] = .{
331 .dependencies = &[_]*const Feature {331 .index = @enumToInt(Feature.fp_exceptions),
332 },332 .name = @tagName(Feature.fp_exceptions),
333};333 .llvm_name = "fp-exceptions",
334334 .description = "Enable floating point exceptions",
335pub const feature_gcn3Encoding = Feature{335 .dependencies = 0,
336 .name = "gcn3Encoding",336 };
337 .llvm_name = "gcn3-encoding",337 result[@enumToInt(Feature.fp16_denormals)] = .{
338 .description = "Encoding format for VI",338 .index = @enumToInt(Feature.fp16_denormals),
339 .dependencies = &[_]*const Feature {339 .name = @tagName(Feature.fp16_denormals),
340 },340 .llvm_name = "fp16-denormals",
341};341 .description = "Enable half precision denormal handling",
342342 .dependencies = featureSet(&[_]Feature{
343pub const feature_gfx7Gfx8Gfx9Insts = Feature{343 .fp64_fp16_denormals,
344 .name = "gfx7Gfx8Gfx9Insts",344 }),
345 .llvm_name = "gfx7-gfx8-gfx9-insts",345 };
346 .description = "Instructions shared in GFX7, GFX8, GFX9",346 result[@enumToInt(Feature.fp32_denormals)] = .{
347 .dependencies = &[_]*const Feature {347 .index = @enumToInt(Feature.fp32_denormals),
348 },348 .name = @tagName(Feature.fp32_denormals),
349};349 .llvm_name = "fp32-denormals",
350350 .description = "Enable single precision denormal handling",
351pub const feature_gfx8Insts = Feature{351 .dependencies = 0,
352 .name = "gfx8Insts",352 };
353 .llvm_name = "gfx8-insts",353 result[@enumToInt(Feature.fp64)] = .{
354 .description = "Additional instructions for GFX8+",354 .index = @enumToInt(Feature.fp64),
355 .dependencies = &[_]*const Feature {355 .name = @tagName(Feature.fp64),
356 },356 .llvm_name = "fp64",
357};357 .description = "Enable double precision operations",
358358 .dependencies = 0,
359pub const feature_gfx9Insts = Feature{359 };
360 .name = "gfx9Insts",360 result[@enumToInt(Feature.fp64_denormals)] = .{
361 .llvm_name = "gfx9-insts",361 .index = @enumToInt(Feature.fp64_denormals),
362 .description = "Additional instructions for GFX9+",362 .name = @tagName(Feature.fp64_denormals),
363 .dependencies = &[_]*const Feature {363 .llvm_name = "fp64-denormals",
364 },364 .description = "Enable double and half precision denormal handling",
365};365 .dependencies = featureSet(&[_]Feature{
366366 .fp64,
367pub const feature_gfx10Insts = Feature{367 .fp64_fp16_denormals,
368 .name = "gfx10Insts",368 }),
369 .llvm_name = "gfx10-insts",369 };
370 .description = "Additional instructions for GFX10+",370 result[@enumToInt(Feature.fp64_fp16_denormals)] = .{
371 .dependencies = &[_]*const Feature {371 .index = @enumToInt(Feature.fp64_fp16_denormals),
372 },372 .name = @tagName(Feature.fp64_fp16_denormals),
373};373 .llvm_name = "fp64-fp16-denormals",
374374 .description = "Enable double and half precision denormal handling",
375pub const feature_instFwdPrefetchBug = Feature{375 .dependencies = featureSet(&[_]Feature{
376 .name = "instFwdPrefetchBug",376 .fp64,
377 .llvm_name = "inst-fwd-prefetch-bug",377 }),
378 .description = "S_INST_PREFETCH instruction causes shader to hang",378 };
379 .dependencies = &[_]*const Feature {379 result[@enumToInt(Feature.gcn3_encoding)] = .{
380 },380 .index = @enumToInt(Feature.gcn3_encoding),
381};381 .name = @tagName(Feature.gcn3_encoding),
382382 .llvm_name = "gcn3-encoding",
383pub const feature_intClampInsts = Feature{383 .description = "Encoding format for VI",
384 .name = "intClampInsts",384 .dependencies = 0,
385 .llvm_name = "int-clamp-insts",385 };
386 .description = "Support clamp for integer destination",386 result[@enumToInt(Feature.gfx10)] = .{
387 .dependencies = &[_]*const Feature {387 .index = @enumToInt(Feature.gfx10),
388 },388 .name = @tagName(Feature.gfx10),
389};389 .llvm_name = "gfx10",
390390 .description = "GFX10 GPU generation",
391pub const feature_inv2piInlineImm = Feature{391 .dependencies = featureSet(&[_]Feature{
392 .name = "inv2piInlineImm",392 .@"16_bit_insts",
393 .llvm_name = "inv-2pi-inline-imm",393 .add_no_carry_insts,
394 .description = "Has 1 / (2 * pi) as inline immediate",394 .aperture_regs,
395 .dependencies = &[_]*const Feature {395 .ci_insts,
396 },396 .dpp,
397};397 .dpp8,
398398 .fast_fmaf,
399pub const feature_ldsbankcount16 = Feature{399 .flat_address_space,
400 .name = "ldsbankcount16",400 .flat_global_insts,
401 .llvm_name = "ldsbankcount16",401 .flat_inst_offsets,
402 .description = "The number of LDS banks per compute unit.",402 .flat_scratch_insts,
403 .dependencies = &[_]*const Feature {403 .fma_mix_insts,
404 },404 .fp64,
405};405 .gfx10_insts,
406406 .gfx8_insts,
407pub const feature_ldsbankcount32 = Feature{407 .gfx9_insts,
408 .name = "ldsbankcount32",408 .int_clamp_insts,
409 .llvm_name = "ldsbankcount32",409 .inv_2pi_inline_imm,
410 .description = "The number of LDS banks per compute unit.",410 .localmemorysize65536,
411 .dependencies = &[_]*const Feature {411 .mimg_r128,
412 },412 .movrel,
413};413 .no_data_dep_hazard,
414414 .no_sdst_cmpx,
415pub const feature_ldsBranchVmemWarHazard = Feature{415 .no_sram_ecc_support,
416 .name = "ldsBranchVmemWarHazard",416 .pk_fmac_f16_inst,
417 .llvm_name = "lds-branch-vmem-war-hazard",417 .register_banking,
418 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",418 .s_memrealtime,
419 .dependencies = &[_]*const Feature {419 .sdwa,
420 },420 .sdwa_omod,
421};421 .sdwa_scalar,
422422 .sdwa_sdst,
423pub const feature_ldsMisalignedBug = Feature{423 .vop3_literal,
424 .name = "ldsMisalignedBug",424 .vop3p,
425 .llvm_name = "lds-misaligned-bug",425 .vscnt,
426 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",426 }),
427 .dependencies = &[_]*const Feature {427 };
428 },428 result[@enumToInt(Feature.gfx10_insts)] = .{
429};429 .index = @enumToInt(Feature.gfx10_insts),
430430 .name = @tagName(Feature.gfx10_insts),
431pub const feature_localmemorysize0 = Feature{431 .llvm_name = "gfx10-insts",
432 .name = "localmemorysize0",432 .description = "Additional instructions for GFX10+",
433 .llvm_name = "localmemorysize0",433 .dependencies = 0,
434 .description = "The size of local memory in bytes",434 };
435 .dependencies = &[_]*const Feature {435 result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
436 },436 .index = @enumToInt(Feature.gfx7_gfx8_gfx9_insts),
437};437 .name = @tagName(Feature.gfx7_gfx8_gfx9_insts),
438438 .llvm_name = "gfx7-gfx8-gfx9-insts",
439pub const feature_localmemorysize32768 = Feature{439 .description = "Instructions shared in GFX7, GFX8, GFX9",
440 .name = "localmemorysize32768",440 .dependencies = 0,
441 .llvm_name = "localmemorysize32768",441 };
442 .description = "The size of local memory in bytes",442 result[@enumToInt(Feature.gfx8_insts)] = .{
443 .dependencies = &[_]*const Feature {443 .index = @enumToInt(Feature.gfx8_insts),
444 },444 .name = @tagName(Feature.gfx8_insts),
445};445 .llvm_name = "gfx8-insts",
446446 .description = "Additional instructions for GFX8+",
447pub const feature_localmemorysize65536 = Feature{447 .dependencies = 0,
448 .name = "localmemorysize65536",448 };
449 .llvm_name = "localmemorysize65536",449 result[@enumToInt(Feature.gfx9)] = .{
450 .description = "The size of local memory in bytes",450 .index = @enumToInt(Feature.gfx9),
451 .dependencies = &[_]*const Feature {451 .name = @tagName(Feature.gfx9),
452 },452 .llvm_name = "gfx9",
453};453 .description = "GFX9 GPU generation",
454454 .dependencies = featureSet(&[_]Feature{
455pub const feature_maiInsts = Feature{455 .@"16_bit_insts",
456 .name = "maiInsts",456 .add_no_carry_insts,
457 .llvm_name = "mai-insts",457 .aperture_regs,
458 .description = "Has mAI instructions",458 .ci_insts,
459 .dependencies = &[_]*const Feature {459 .dpp,
460 },460 .fast_fmaf,
461};461 .flat_address_space,
462462 .flat_global_insts,
463pub const feature_mimgR128 = Feature{463 .flat_inst_offsets,
464 .name = "mimgR128",464 .flat_scratch_insts,
465 .llvm_name = "mimg-r128",465 .fp64,
466 .description = "Support 128-bit texture resources",466 .gcn3_encoding,
467 .dependencies = &[_]*const Feature {467 .gfx7_gfx8_gfx9_insts,
468 },468 .gfx8_insts,
469};469 .gfx9_insts,
470470 .int_clamp_insts,
471pub const feature_madMixInsts = Feature{471 .inv_2pi_inline_imm,
472 .name = "madMixInsts",472 .localmemorysize65536,
473 .llvm_name = "mad-mix-insts",473 .r128_a16,
474 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",474 .s_memrealtime,
475 .dependencies = &[_]*const Feature {475 .scalar_atomics,
476 },476 .scalar_flat_scratch_insts,
477};477 .scalar_stores,
478478 .sdwa,
479pub const feature_maxPrivateElementSize4 = Feature{479 .sdwa_omod,
480 .name = "maxPrivateElementSize4",480 .sdwa_scalar,
481 .llvm_name = "max-private-element-size-4",481 .sdwa_sdst,
482 .description = "Maximum private access size may be 4",482 .vgpr_index_mode,
483 .dependencies = &[_]*const Feature {483 .vop3p,
484 },484 .wavefrontsize64,
485};485 }),
486486 };
487pub const feature_maxPrivateElementSize8 = Feature{487 result[@enumToInt(Feature.gfx9_insts)] = .{
488 .name = "maxPrivateElementSize8",488 .index = @enumToInt(Feature.gfx9_insts),
489 .llvm_name = "max-private-element-size-8",489 .name = @tagName(Feature.gfx9_insts),
490 .description = "Maximum private access size may be 8",490 .llvm_name = "gfx9-insts",
491 .dependencies = &[_]*const Feature {491 .description = "Additional instructions for GFX9+",
492 },492 .dependencies = 0,
493};493 };
494494 result[@enumToInt(Feature.half_rate_64_ops)] = .{
495pub const feature_maxPrivateElementSize16 = Feature{495 .index = @enumToInt(Feature.half_rate_64_ops),
496 .name = "maxPrivateElementSize16",496 .name = @tagName(Feature.half_rate_64_ops),
497 .llvm_name = "max-private-element-size-16",497 .llvm_name = "half-rate-64-ops",
498 .description = "Maximum private access size may be 16",498 .description = "Most fp64 instructions are half rate instead of quarter",
499 .dependencies = &[_]*const Feature {499 .dependencies = 0,
500 },500 };
501};501 result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{
502502 .index = @enumToInt(Feature.inst_fwd_prefetch_bug),
503pub const feature_movrel = Feature{503 .name = @tagName(Feature.inst_fwd_prefetch_bug),
504 .name = "movrel",504 .llvm_name = "inst-fwd-prefetch-bug",
505 .llvm_name = "movrel",505 .description = "S_INST_PREFETCH instruction causes shader to hang",
506 .description = "Has v_movrel*_b32 instructions",506 .dependencies = 0,
507 .dependencies = &[_]*const Feature {507 };
508 },508 result[@enumToInt(Feature.int_clamp_insts)] = .{
509};509 .index = @enumToInt(Feature.int_clamp_insts),
510510 .name = @tagName(Feature.int_clamp_insts),
511pub const feature_nsaEncoding = Feature{511 .llvm_name = "int-clamp-insts",
512 .name = "nsaEncoding",512 .description = "Support clamp for integer destination",
513 .llvm_name = "nsa-encoding",513 .dependencies = 0,
514 .description = "Support NSA encoding for image instructions",514 };
515 .dependencies = &[_]*const Feature {515 result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{
516 },516 .index = @enumToInt(Feature.inv_2pi_inline_imm),
517};517 .name = @tagName(Feature.inv_2pi_inline_imm),
518518 .llvm_name = "inv-2pi-inline-imm",
519pub const feature_nsaToVmemBug = Feature{519 .description = "Has 1 / (2 * pi) as inline immediate",
520 .name = "nsaToVmemBug",520 .dependencies = 0,
521 .llvm_name = "nsa-to-vmem-bug",521 };
522 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",522 result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{
523 .dependencies = &[_]*const Feature {523 .index = @enumToInt(Feature.lds_branch_vmem_war_hazard),
524 },524 .name = @tagName(Feature.lds_branch_vmem_war_hazard),
525};525 .llvm_name = "lds-branch-vmem-war-hazard",
526526 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
527pub const feature_noDataDepHazard = Feature{527 .dependencies = 0,
528 .name = "noDataDepHazard",528 };
529 .llvm_name = "no-data-dep-hazard",529 result[@enumToInt(Feature.lds_misaligned_bug)] = .{
530 .description = "Does not need SW waitstates",530 .index = @enumToInt(Feature.lds_misaligned_bug),
531 .dependencies = &[_]*const Feature {531 .name = @tagName(Feature.lds_misaligned_bug),
532 },532 .llvm_name = "lds-misaligned-bug",
533};533 .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode",
534534 .dependencies = 0,
535pub const feature_noSdstCmpx = Feature{535 };
536 .name = "noSdstCmpx",536 result[@enumToInt(Feature.ldsbankcount16)] = .{
537 .llvm_name = "no-sdst-cmpx",537 .index = @enumToInt(Feature.ldsbankcount16),
538 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",538 .name = @tagName(Feature.ldsbankcount16),
539 .dependencies = &[_]*const Feature {539 .llvm_name = "ldsbankcount16",
540 },540 .description = "The number of LDS banks per compute unit.",
541};541 .dependencies = 0,
542542 };
543pub const feature_offset3fBug = Feature{543 result[@enumToInt(Feature.ldsbankcount32)] = .{
544 .name = "offset3fBug",544 .index = @enumToInt(Feature.ldsbankcount32),
545 .llvm_name = "offset-3f-bug",545 .name = @tagName(Feature.ldsbankcount32),
546 .description = "Branch offset of 3f hardware bug",546 .llvm_name = "ldsbankcount32",
547 .dependencies = &[_]*const Feature {547 .description = "The number of LDS banks per compute unit.",
548 },548 .dependencies = 0,
549};549 };
550550 result[@enumToInt(Feature.load_store_opt)] = .{
551pub const feature_pkFmacF16Inst = Feature{551 .index = @enumToInt(Feature.load_store_opt),
552 .name = "pkFmacF16Inst",552 .name = @tagName(Feature.load_store_opt),
553 .llvm_name = "pk-fmac-f16-inst",553 .llvm_name = "load-store-opt",
554 .description = "Has v_pk_fmac_f16 instruction",554 .description = "Enable SI load/store optimizer pass",
555 .dependencies = &[_]*const Feature {555 .dependencies = 0,
556 },556 };
557};557 result[@enumToInt(Feature.localmemorysize0)] = .{
558558 .index = @enumToInt(Feature.localmemorysize0),
559pub const feature_promoteAlloca = Feature{559 .name = @tagName(Feature.localmemorysize0),
560 .name = "promoteAlloca",560 .llvm_name = "localmemorysize0",
561 .llvm_name = "promote-alloca",561 .description = "The size of local memory in bytes",
562 .description = "Enable promote alloca pass",562 .dependencies = 0,
563 .dependencies = &[_]*const Feature {563 };
564 },564 result[@enumToInt(Feature.localmemorysize32768)] = .{
565};565 .index = @enumToInt(Feature.localmemorysize32768),
566566 .name = @tagName(Feature.localmemorysize32768),
567pub const feature_r128A16 = Feature{567 .llvm_name = "localmemorysize32768",
568 .name = "r128A16",568 .description = "The size of local memory in bytes",
569 .llvm_name = "r128-a16",569 .dependencies = 0,
570 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",570 };
571 .dependencies = &[_]*const Feature {571 result[@enumToInt(Feature.localmemorysize65536)] = .{
572 },572 .index = @enumToInt(Feature.localmemorysize65536),
573};573 .name = @tagName(Feature.localmemorysize65536),
574574 .llvm_name = "localmemorysize65536",
575pub const feature_registerBanking = Feature{575 .description = "The size of local memory in bytes",
576 .name = "registerBanking",576 .dependencies = 0,
577 .llvm_name = "register-banking",577 };
578 .description = "Has register banking",578 result[@enumToInt(Feature.mad_mix_insts)] = .{
579 .dependencies = &[_]*const Feature {579 .index = @enumToInt(Feature.mad_mix_insts),
580 },580 .name = @tagName(Feature.mad_mix_insts),
581};581 .llvm_name = "mad-mix-insts",
582582 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
583pub const feature_sdwa = Feature{583 .dependencies = 0,
584 .name = "sdwa",584 };
585 .llvm_name = "sdwa",585 result[@enumToInt(Feature.mai_insts)] = .{
586 .description = "Support SDWA (Sub-DWORD Addressing) extension",586 .index = @enumToInt(Feature.mai_insts),
587 .dependencies = &[_]*const Feature {587 .name = @tagName(Feature.mai_insts),
588 },588 .llvm_name = "mai-insts",
589};589 .description = "Has mAI instructions",
590590 .dependencies = 0,
591pub const feature_sdwaMav = Feature{591 };
592 .name = "sdwaMav",592 result[@enumToInt(Feature.max_private_element_size_16)] = .{
593 .llvm_name = "sdwa-mav",593 .index = @enumToInt(Feature.max_private_element_size_16),
594 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",594 .name = @tagName(Feature.max_private_element_size_16),
595 .dependencies = &[_]*const Feature {595 .llvm_name = "max-private-element-size-16",
596 },596 .description = "Maximum private access size may be 16",
597};597 .dependencies = 0,
598598 };
599pub const feature_sdwaOmod = Feature{599 result[@enumToInt(Feature.max_private_element_size_4)] = .{
600 .name = "sdwaOmod",600 .index = @enumToInt(Feature.max_private_element_size_4),
601 .llvm_name = "sdwa-omod",601 .name = @tagName(Feature.max_private_element_size_4),
602 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",602 .llvm_name = "max-private-element-size-4",
603 .dependencies = &[_]*const Feature {603 .description = "Maximum private access size may be 4",
604 },604 .dependencies = 0,
605};605 };
606606 result[@enumToInt(Feature.max_private_element_size_8)] = .{
607pub const feature_sdwaOutModsVopc = Feature{607 .index = @enumToInt(Feature.max_private_element_size_8),
608 .name = "sdwaOutModsVopc",608 .name = @tagName(Feature.max_private_element_size_8),
609 .llvm_name = "sdwa-out-mods-vopc",609 .llvm_name = "max-private-element-size-8",
610 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",610 .description = "Maximum private access size may be 8",
611 .dependencies = &[_]*const Feature {611 .dependencies = 0,
612 },612 };
613};613 result[@enumToInt(Feature.mimg_r128)] = .{
614614 .index = @enumToInt(Feature.mimg_r128),
615pub const feature_sdwaScalar = Feature{615 .name = @tagName(Feature.mimg_r128),
616 .name = "sdwaScalar",616 .llvm_name = "mimg-r128",
617 .llvm_name = "sdwa-scalar",617 .description = "Support 128-bit texture resources",
618 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",618 .dependencies = 0,
619 .dependencies = &[_]*const Feature {619 };
620 },620 result[@enumToInt(Feature.movrel)] = .{
621};621 .index = @enumToInt(Feature.movrel),
622622 .name = @tagName(Feature.movrel),
623pub const feature_sdwaSdst = Feature{623 .llvm_name = "movrel",
624 .name = "sdwaSdst",624 .description = "Has v_movrel*_b32 instructions",
625 .llvm_name = "sdwa-sdst",625 .dependencies = 0,
626 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",626 };
627 .dependencies = &[_]*const Feature {627 result[@enumToInt(Feature.no_data_dep_hazard)] = .{
628 },628 .index = @enumToInt(Feature.no_data_dep_hazard),
629};629 .name = @tagName(Feature.no_data_dep_hazard),
630630 .llvm_name = "no-data-dep-hazard",
631pub const feature_sgprInitBug = Feature{631 .description = "Does not need SW waitstates",
632 .name = "sgprInitBug",632 .dependencies = 0,
633 .llvm_name = "sgpr-init-bug",633 };
634 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",634 result[@enumToInt(Feature.no_sdst_cmpx)] = .{
635 .dependencies = &[_]*const Feature {635 .index = @enumToInt(Feature.no_sdst_cmpx),
636 },636 .name = @tagName(Feature.no_sdst_cmpx),
637};637 .llvm_name = "no-sdst-cmpx",
638638 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
639pub const feature_smemToVectorWriteHazard = Feature{639 .dependencies = 0,
640 .name = "smemToVectorWriteHazard",640 };
641 .llvm_name = "smem-to-vector-write-hazard",641 result[@enumToInt(Feature.no_sram_ecc_support)] = .{
642 .description = "s_load_dword followed by v_cmp page faults",642 .index = @enumToInt(Feature.no_sram_ecc_support),
643 .dependencies = &[_]*const Feature {643 .name = @tagName(Feature.no_sram_ecc_support),
644 },644 .llvm_name = "no-sram-ecc-support",
645};645 .description = "Hardware does not support SRAM ECC",
646646 .dependencies = 0,
647pub const feature_sMemrealtime = Feature{647 };
648 .name = "sMemrealtime",648 result[@enumToInt(Feature.no_xnack_support)] = .{
649 .llvm_name = "s-memrealtime",649 .index = @enumToInt(Feature.no_xnack_support),
650 .description = "Has s_memrealtime instruction",650 .name = @tagName(Feature.no_xnack_support),
651 .dependencies = &[_]*const Feature {651 .llvm_name = "no-xnack-support",
652 },652 .description = "Hardware does not support XNACK",
653};653 .dependencies = 0,
654654 };
655pub const feature_sramEcc = Feature{655 result[@enumToInt(Feature.nsa_encoding)] = .{
656 .name = "sramEcc",656 .index = @enumToInt(Feature.nsa_encoding),
657 .llvm_name = "sram-ecc",657 .name = @tagName(Feature.nsa_encoding),
658 .description = "Enable SRAM ECC",658 .llvm_name = "nsa-encoding",
659 .dependencies = &[_]*const Feature {659 .description = "Support NSA encoding for image instructions",
660 },660 .dependencies = 0,
661};661 };
662662 result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{
663pub const feature_scalarAtomics = Feature{663 .index = @enumToInt(Feature.nsa_to_vmem_bug),
664 .name = "scalarAtomics",664 .name = @tagName(Feature.nsa_to_vmem_bug),
665 .llvm_name = "scalar-atomics",665 .llvm_name = "nsa-to-vmem-bug",
666 .description = "Has atomic scalar memory instructions",666 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
667 .dependencies = &[_]*const Feature {667 .dependencies = 0,
668 },668 };
669};669 result[@enumToInt(Feature.offset_3f_bug)] = .{
670670 .index = @enumToInt(Feature.offset_3f_bug),
671pub const feature_scalarFlatScratchInsts = Feature{671 .name = @tagName(Feature.offset_3f_bug),
672 .name = "scalarFlatScratchInsts",672 .llvm_name = "offset-3f-bug",
673 .llvm_name = "scalar-flat-scratch-insts",673 .description = "Branch offset of 3f hardware bug",
674 .description = "Have s_scratch_* flat memory instructions",674 .dependencies = 0,
675 .dependencies = &[_]*const Feature {675 };
676 },676 result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{
677};677 .index = @enumToInt(Feature.pk_fmac_f16_inst),
678678 .name = @tagName(Feature.pk_fmac_f16_inst),
679pub const feature_scalarStores = Feature{679 .llvm_name = "pk-fmac-f16-inst",
680 .name = "scalarStores",680 .description = "Has v_pk_fmac_f16 instruction",
681 .llvm_name = "scalar-stores",681 .dependencies = 0,
682 .description = "Has store scalar memory instructions",682 };
683 .dependencies = &[_]*const Feature {683 result[@enumToInt(Feature.promote_alloca)] = .{
684 },684 .index = @enumToInt(Feature.promote_alloca),
685};685 .name = @tagName(Feature.promote_alloca),
686686 .llvm_name = "promote-alloca",
687pub const feature_trapHandler = Feature{687 .description = "Enable promote alloca pass",
688 .name = "trapHandler",688 .dependencies = 0,
689 .llvm_name = "trap-handler",689 };
690 .description = "Trap handler support",690 result[@enumToInt(Feature.r128_a16)] = .{
691 .dependencies = &[_]*const Feature {691 .index = @enumToInt(Feature.r128_a16),
692 },692 .name = @tagName(Feature.r128_a16),
693};693 .llvm_name = "r128-a16",
694694 .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9",
695pub const feature_trigReducedRange = Feature{695 .dependencies = 0,
696 .name = "trigReducedRange",696 };
697 .llvm_name = "trig-reduced-range",697 result[@enumToInt(Feature.register_banking)] = .{
698 .description = "Requires use of fract on arguments to trig instructions",698 .index = @enumToInt(Feature.register_banking),
699 .dependencies = &[_]*const Feature {699 .name = @tagName(Feature.register_banking),
700 },700 .llvm_name = "register-banking",
701};701 .description = "Has register banking",
702702 .dependencies = 0,
703pub const feature_unalignedBufferAccess = Feature{703 };
704 .name = "unalignedBufferAccess",704 result[@enumToInt(Feature.s_memrealtime)] = .{
705 .llvm_name = "unaligned-buffer-access",705 .index = @enumToInt(Feature.s_memrealtime),
706 .description = "Support unaligned global loads and stores",706 .name = @tagName(Feature.s_memrealtime),
707 .dependencies = &[_]*const Feature {707 .llvm_name = "s-memrealtime",
708 },708 .description = "Has s_memrealtime instruction",
709};709 .dependencies = 0,
710710 };
711pub const feature_unalignedScratchAccess = Feature{711 result[@enumToInt(Feature.scalar_atomics)] = .{
712 .name = "unalignedScratchAccess",712 .index = @enumToInt(Feature.scalar_atomics),
713 .llvm_name = "unaligned-scratch-access",713 .name = @tagName(Feature.scalar_atomics),
714 .description = "Support unaligned scratch loads and stores",714 .llvm_name = "scalar-atomics",
715 .dependencies = &[_]*const Feature {715 .description = "Has atomic scalar memory instructions",
716 },716 .dependencies = 0,
717};717 };
718718 result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{
719pub const feature_unpackedD16Vmem = Feature{719 .index = @enumToInt(Feature.scalar_flat_scratch_insts),
720 .name = "unpackedD16Vmem",720 .name = @tagName(Feature.scalar_flat_scratch_insts),
721 .llvm_name = "unpacked-d16-vmem",721 .llvm_name = "scalar-flat-scratch-insts",
722 .description = "Has unpacked d16 vmem instructions",722 .description = "Have s_scratch_* flat memory instructions",
723 .dependencies = &[_]*const Feature {723 .dependencies = 0,
724 },724 };
725};725 result[@enumToInt(Feature.scalar_stores)] = .{
726726 .index = @enumToInt(Feature.scalar_stores),
727pub const feature_vgprIndexMode = Feature{727 .name = @tagName(Feature.scalar_stores),
728 .name = "vgprIndexMode",728 .llvm_name = "scalar-stores",
729 .llvm_name = "vgpr-index-mode",729 .description = "Has store scalar memory instructions",
730 .description = "Has VGPR mode register indexing",730 .dependencies = 0,
731 .dependencies = &[_]*const Feature {731 };
732 },732 result[@enumToInt(Feature.sdwa)] = .{
733};733 .index = @enumToInt(Feature.sdwa),
734734 .name = @tagName(Feature.sdwa),
735pub const feature_vmemToScalarWriteHazard = Feature{735 .llvm_name = "sdwa",
736 .name = "vmemToScalarWriteHazard",736 .description = "Support SDWA (Sub-DWORD Addressing) extension",
737 .llvm_name = "vmem-to-scalar-write-hazard",737 .dependencies = 0,
738 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",738 };
739 .dependencies = &[_]*const Feature {739 result[@enumToInt(Feature.sdwa_mav)] = .{
740 },740 .index = @enumToInt(Feature.sdwa_mav),
741};741 .name = @tagName(Feature.sdwa_mav),
742742 .llvm_name = "sdwa-mav",
743pub const feature_vop3Literal = Feature{743 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
744 .name = "vop3Literal",744 .dependencies = 0,
745 .llvm_name = "vop3-literal",745 };
746 .description = "Can use one literal in VOP3",746 result[@enumToInt(Feature.sdwa_omod)] = .{
747 .dependencies = &[_]*const Feature {747 .index = @enumToInt(Feature.sdwa_omod),
748 },748 .name = @tagName(Feature.sdwa_omod),
749};749 .llvm_name = "sdwa-omod",
750750 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
751pub const feature_vop3p = Feature{751 .dependencies = 0,
752 .name = "vop3p",752 };
753 .llvm_name = "vop3p",753 result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{
754 .description = "Has VOP3P packed instructions",754 .index = @enumToInt(Feature.sdwa_out_mods_vopc),
755 .dependencies = &[_]*const Feature {755 .name = @tagName(Feature.sdwa_out_mods_vopc),
756 },756 .llvm_name = "sdwa-out-mods-vopc",
757};757 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
758758 .dependencies = 0,
759pub const feature_vcmpxExecWarHazard = Feature{759 };
760 .name = "vcmpxExecWarHazard",760 result[@enumToInt(Feature.sdwa_scalar)] = .{
761 .llvm_name = "vcmpx-exec-war-hazard",761 .index = @enumToInt(Feature.sdwa_scalar),
762 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",762 .name = @tagName(Feature.sdwa_scalar),
763 .dependencies = &[_]*const Feature {763 .llvm_name = "sdwa-scalar",
764 },764 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
765};765 .dependencies = 0,
766766 };
767pub const feature_vcmpxPermlaneHazard = Feature{767 result[@enumToInt(Feature.sdwa_sdst)] = .{
768 .name = "vcmpxPermlaneHazard",768 .index = @enumToInt(Feature.sdwa_sdst),
769 .llvm_name = "vcmpx-permlane-hazard",769 .name = @tagName(Feature.sdwa_sdst),
770 .description = "TODO: describe me",770 .llvm_name = "sdwa-sdst",
771 .dependencies = &[_]*const Feature {771 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
772 },772 .dependencies = 0,
773};773 };
774774 result[@enumToInt(Feature.sea_islands)] = .{
775pub const feature_vscnt = Feature{775 .index = @enumToInt(Feature.sea_islands),
776 .name = "vscnt",776 .name = @tagName(Feature.sea_islands),
777 .llvm_name = "vscnt",777 .llvm_name = "sea-islands",
778 .description = "Has separate store vscnt counter",778 .description = "SEA_ISLANDS GPU generation",
779 .dependencies = &[_]*const Feature {779 .dependencies = featureSet(&[_]Feature{
780 },780 .ci_insts,
781};781 .flat_address_space,
782782 .fp64,
783pub const feature_wavefrontsize16 = Feature{783 .gfx7_gfx8_gfx9_insts,
784 .name = "wavefrontsize16",784 .localmemorysize65536,
785 .llvm_name = "wavefrontsize16",785 .mimg_r128,
786 .description = "The number of threads per wavefront",786 .movrel,
787 .dependencies = &[_]*const Feature {787 .no_sram_ecc_support,
788 },788 .trig_reduced_range,
789};789 .wavefrontsize64,
790790 }),
791pub const feature_wavefrontsize32 = Feature{791 };
792 .name = "wavefrontsize32",792 result[@enumToInt(Feature.sgpr_init_bug)] = .{
793 .llvm_name = "wavefrontsize32",793 .index = @enumToInt(Feature.sgpr_init_bug),
794 .description = "The number of threads per wavefront",794 .name = @tagName(Feature.sgpr_init_bug),
795 .dependencies = &[_]*const Feature {795 .llvm_name = "sgpr-init-bug",
796 },796 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
797};797 .dependencies = 0,
798798 };
799pub const feature_wavefrontsize64 = Feature{799 result[@enumToInt(Feature.si_scheduler)] = .{
800 .name = "wavefrontsize64",800 .index = @enumToInt(Feature.si_scheduler),
801 .llvm_name = "wavefrontsize64",801 .name = @tagName(Feature.si_scheduler),
802 .description = "The number of threads per wavefront",802 .llvm_name = "si-scheduler",
803 .dependencies = &[_]*const Feature {803 .description = "Enable SI Machine Scheduler",
804 },804 .dependencies = 0,
805};805 };
806806 result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{
807pub const feature_xnack = Feature{807 .index = @enumToInt(Feature.smem_to_vector_write_hazard),
808 .name = "xnack",808 .name = @tagName(Feature.smem_to_vector_write_hazard),
809 .llvm_name = "xnack",809 .llvm_name = "smem-to-vector-write-hazard",
810 .description = "Enable XNACK support",810 .description = "s_load_dword followed by v_cmp page faults",
811 .dependencies = &[_]*const Feature {811 .dependencies = 0,
812 },812 };
813};813 result[@enumToInt(Feature.southern_islands)] = .{
814814 .index = @enumToInt(Feature.southern_islands),
815pub const feature_halfRate64Ops = Feature{815 .name = @tagName(Feature.southern_islands),
816 .name = "halfRate64Ops",816 .llvm_name = "southern-islands",
817 .llvm_name = "half-rate-64-ops",817 .description = "SOUTHERN_ISLANDS GPU generation",
818 .description = "Most fp64 instructions are half rate instead of quarter",818 .dependencies = featureSet(&[_]Feature{
819 .dependencies = &[_]*const Feature {819 .fp64,
820 },820 .ldsbankcount32,
821};821 .localmemorysize32768,
822822 .mimg_r128,
823pub const features = &[_]*const Feature {823 .movrel,
824 &feature_BitInsts16,824 .no_sram_ecc_support,
825 &feature_addNoCarryInsts,825 .no_xnack_support,
826 &feature_apertureRegs,826 .trig_reduced_range,
827 &feature_atomicFaddInsts,827 .wavefrontsize64,
828 &feature_autoWaitcntBeforeBarrier,828 }),
829 &feature_ciInsts,829 };
830 &feature_codeObjectV3,830 result[@enumToInt(Feature.sram_ecc)] = .{
831 &feature_cumode,831 .index = @enumToInt(Feature.sram_ecc),
832 &feature_dlInsts,832 .name = @tagName(Feature.sram_ecc),
833 &feature_dpp,833 .llvm_name = "sram-ecc",
834 &feature_dpp8,834 .description = "Enable SRAM ECC",
835 &feature_noSramEccSupport,835 .dependencies = 0,
836 &feature_noXnackSupport,836 };
837 &feature_dot1Insts,837 result[@enumToInt(Feature.trap_handler)] = .{
838 &feature_dot2Insts,838 .index = @enumToInt(Feature.trap_handler),
839 &feature_dot3Insts,839 .name = @tagName(Feature.trap_handler),
840 &feature_dot4Insts,840 .llvm_name = "trap-handler",
841 &feature_dot5Insts,841 .description = "Trap handler support",
842 &feature_dot6Insts,842 .dependencies = 0,
843 &feature_DumpCode,843 };
844 &feature_dumpcode,844 result[@enumToInt(Feature.trig_reduced_range)] = .{
845 &feature_enableDs128,845 .index = @enumToInt(Feature.trig_reduced_range),
846 &feature_loadStoreOpt,846 .name = @tagName(Feature.trig_reduced_range),
847 &feature_enablePrtStrictNull,847 .llvm_name = "trig-reduced-range",
848 &feature_siScheduler,848 .description = "Requires use of fract on arguments to trig instructions",
849 &feature_unsafeDsOffsetFolding,849 .dependencies = 0,
850 &feature_fmaf,850 };
851 &feature_fp16Denormals,851 result[@enumToInt(Feature.unaligned_buffer_access)] = .{
852 &feature_fp32Denormals,852 .index = @enumToInt(Feature.unaligned_buffer_access),
853 &feature_fp64,853 .name = @tagName(Feature.unaligned_buffer_access),
854 &feature_fp64Denormals,854 .llvm_name = "unaligned-buffer-access",
855 &feature_fp64Fp16Denormals,855 .description = "Support unaligned global loads and stores",
856 &feature_fpExceptions,856 .dependencies = 0,
857 &feature_fastFmaf,857 };
858 &feature_flatAddressSpace,858 result[@enumToInt(Feature.unaligned_scratch_access)] = .{
859 &feature_flatForGlobal,859 .index = @enumToInt(Feature.unaligned_scratch_access),
860 &feature_flatGlobalInsts,860 .name = @tagName(Feature.unaligned_scratch_access),
861 &feature_flatInstOffsets,861 .llvm_name = "unaligned-scratch-access",
862 &feature_flatScratchInsts,862 .description = "Support unaligned scratch loads and stores",
863 &feature_flatSegmentOffsetBug,863 .dependencies = 0,
864 &feature_fmaMixInsts,864 };
865 &feature_gcn3Encoding,865 result[@enumToInt(Feature.unpacked_d16_vmem)] = .{
866 &feature_gfx7Gfx8Gfx9Insts,866 .index = @enumToInt(Feature.unpacked_d16_vmem),
867 &feature_gfx8Insts,867 .name = @tagName(Feature.unpacked_d16_vmem),
868 &feature_gfx9Insts,868 .llvm_name = "unpacked-d16-vmem",
869 &feature_gfx10Insts,869 .description = "Has unpacked d16 vmem instructions",
870 &feature_instFwdPrefetchBug,870 .dependencies = 0,
871 &feature_intClampInsts,871 };
872 &feature_inv2piInlineImm,872 result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{
873 &feature_ldsbankcount16,873 .index = @enumToInt(Feature.unsafe_ds_offset_folding),
874 &feature_ldsbankcount32,874 .name = @tagName(Feature.unsafe_ds_offset_folding),
875 &feature_ldsBranchVmemWarHazard,875 .llvm_name = "unsafe-ds-offset-folding",
876 &feature_ldsMisalignedBug,876 .description = "Force using DS instruction immediate offsets on SI",
877 &feature_localmemorysize0,877 .dependencies = 0,
878 &feature_localmemorysize32768,878 };
879 &feature_localmemorysize65536,879 result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{
880 &feature_maiInsts,880 .index = @enumToInt(Feature.vcmpx_exec_war_hazard),
881 &feature_mimgR128,881 .name = @tagName(Feature.vcmpx_exec_war_hazard),
882 &feature_madMixInsts,882 .llvm_name = "vcmpx-exec-war-hazard",
883 &feature_maxPrivateElementSize4,883 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
884 &feature_maxPrivateElementSize8,884 .dependencies = 0,
885 &feature_maxPrivateElementSize16,885 };
886 &feature_movrel,886 result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{
887 &feature_nsaEncoding,887 .index = @enumToInt(Feature.vcmpx_permlane_hazard),
888 &feature_nsaToVmemBug,888 .name = @tagName(Feature.vcmpx_permlane_hazard),
889 &feature_noDataDepHazard,889 .llvm_name = "vcmpx-permlane-hazard",
890 &feature_noSdstCmpx,890 .description = "TODO: describe me",
891 &feature_offset3fBug,891 .dependencies = 0,
892 &feature_pkFmacF16Inst,892 };
893 &feature_promoteAlloca,893 result[@enumToInt(Feature.vgpr_index_mode)] = .{
894 &feature_r128A16,894 .index = @enumToInt(Feature.vgpr_index_mode),
895 &feature_registerBanking,895 .name = @tagName(Feature.vgpr_index_mode),
896 &feature_sdwa,896 .llvm_name = "vgpr-index-mode",
897 &feature_sdwaMav,897 .description = "Has VGPR mode register indexing",
898 &feature_sdwaOmod,898 .dependencies = 0,
899 &feature_sdwaOutModsVopc,899 };
900 &feature_sdwaScalar,900 result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{
901 &feature_sdwaSdst,901 .index = @enumToInt(Feature.vmem_to_scalar_write_hazard),
902 &feature_sgprInitBug,902 .name = @tagName(Feature.vmem_to_scalar_write_hazard),
903 &feature_smemToVectorWriteHazard,903 .llvm_name = "vmem-to-scalar-write-hazard",
904 &feature_sMemrealtime,904 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
905 &feature_sramEcc,905 .dependencies = 0,
906 &feature_scalarAtomics,906 };
907 &feature_scalarFlatScratchInsts,907 result[@enumToInt(Feature.volcanic_islands)] = .{
908 &feature_scalarStores,908 .index = @enumToInt(Feature.volcanic_islands),
909 &feature_trapHandler,909 .name = @tagName(Feature.volcanic_islands),
910 &feature_trigReducedRange,910 .llvm_name = "volcanic-islands",
911 &feature_unalignedBufferAccess,911 .description = "VOLCANIC_ISLANDS GPU generation",
912 &feature_unalignedScratchAccess,912 .dependencies = featureSet(&[_]Feature{
913 &feature_unpackedD16Vmem,913 .@"16_bit_insts",
914 &feature_vgprIndexMode,914 .ci_insts,
915 &feature_vmemToScalarWriteHazard,915 .dpp,
916 &feature_vop3Literal,916 .flat_address_space,
917 &feature_vop3p,917 .fp64,
918 &feature_vcmpxExecWarHazard,918 .gcn3_encoding,
919 &feature_vcmpxPermlaneHazard,919 .gfx7_gfx8_gfx9_insts,
920 &feature_vscnt,920 .gfx8_insts,
921 &feature_wavefrontsize16,921 .int_clamp_insts,
922 &feature_wavefrontsize32,922 .inv_2pi_inline_imm,
923 &feature_wavefrontsize64,923 .localmemorysize65536,
924 &feature_xnack,924 .mimg_r128,
925 &feature_halfRate64Ops,925 .movrel,
926};926 .no_sram_ecc_support,
927927 .s_memrealtime,
928pub const cpu_bonaire = Cpu{928 .scalar_stores,
929 .name = "bonaire",929 .sdwa,
930 .llvm_name = "bonaire",930 .sdwa_mav,
931 .dependencies = &[_]*const Feature {931 .sdwa_out_mods_vopc,
932 &feature_codeObjectV3,932 .trig_reduced_range,
933 &feature_noXnackSupport,933 .vgpr_index_mode,
934 &feature_ldsbankcount32,934 .wavefrontsize64,
935 &feature_trigReducedRange,935 }),
936 &feature_gfx7Gfx8Gfx9Insts,936 };
937 &feature_movrel,937 result[@enumToInt(Feature.vop3_literal)] = .{
938 &feature_flatAddressSpace,938 .index = @enumToInt(Feature.vop3_literal),
939 &feature_wavefrontsize64,939 .name = @tagName(Feature.vop3_literal),
940 &feature_fp64,940 .llvm_name = "vop3-literal",
941 &feature_mimgR128,941 .description = "Can use one literal in VOP3",
942 &feature_noSramEccSupport,942 .dependencies = 0,
943 &feature_ciInsts,943 };
944 &feature_localmemorysize65536,944 result[@enumToInt(Feature.vop3p)] = .{
945 },945 .index = @enumToInt(Feature.vop3p),
946};946 .name = @tagName(Feature.vop3p),
947947 .llvm_name = "vop3p",
948pub const cpu_carrizo = Cpu{948 .description = "Has VOP3P packed instructions",
949 .name = "carrizo",949 .dependencies = 0,
950 .llvm_name = "carrizo",950 };
951 .dependencies = &[_]*const Feature {951 result[@enumToInt(Feature.vscnt)] = .{
952 &feature_codeObjectV3,952 .index = @enumToInt(Feature.vscnt),
953 &feature_fastFmaf,953 .name = @tagName(Feature.vscnt),
954 &feature_ldsbankcount32,954 .llvm_name = "vscnt",
955 &feature_unpackedD16Vmem,955 .description = "Has separate store vscnt counter",
956 &feature_trigReducedRange,956 .dependencies = 0,
957 &feature_vgprIndexMode,957 };
958 &feature_movrel,958 result[@enumToInt(Feature.wavefrontsize16)] = .{
959 &feature_fp64,959 .index = @enumToInt(Feature.wavefrontsize16),
960 &feature_gcn3Encoding,960 .name = @tagName(Feature.wavefrontsize16),
961 &feature_mimgR128,961 .llvm_name = "wavefrontsize16",
962 &feature_sdwa,962 .description = "The number of threads per wavefront",
963 &feature_gfx7Gfx8Gfx9Insts,963 .dependencies = 0,
964 &feature_intClampInsts,964 };
965 &feature_ciInsts,965 result[@enumToInt(Feature.wavefrontsize32)] = .{
966 &feature_sdwaOutModsVopc,966 .index = @enumToInt(Feature.wavefrontsize32),
967 &feature_sMemrealtime,967 .name = @tagName(Feature.wavefrontsize32),
968 &feature_flatAddressSpace,968 .llvm_name = "wavefrontsize32",
969 &feature_inv2piInlineImm,969 .description = "The number of threads per wavefront",
970 &feature_wavefrontsize64,970 .dependencies = 0,
971 &feature_noSramEccSupport,971 };
972 &feature_sdwaMav,972 result[@enumToInt(Feature.wavefrontsize64)] = .{
973 &feature_localmemorysize65536,973 .index = @enumToInt(Feature.wavefrontsize64),
974 &feature_scalarStores,974 .name = @tagName(Feature.wavefrontsize64),
975 &feature_gfx8Insts,975 .llvm_name = "wavefrontsize64",
976 &feature_dpp,976 .description = "The number of threads per wavefront",
977 &feature_BitInsts16,977 .dependencies = 0,
978 &feature_xnack,978 };
979 &feature_halfRate64Ops,979 result[@enumToInt(Feature.xnack)] = .{
980 },980 .index = @enumToInt(Feature.xnack),
981};981 .name = @tagName(Feature.xnack),
982982 .llvm_name = "xnack",
983pub const cpu_fiji = Cpu{983 .description = "Enable XNACK support",
984 .name = "fiji",984 .dependencies = 0,
985 .llvm_name = "fiji",985 };
986 .dependencies = &[_]*const Feature {986 break :blk result;
987 &feature_codeObjectV3,987};
988 &feature_noXnackSupport,988
989 &feature_ldsbankcount32,989pub const cpu = struct {
990 &feature_unpackedD16Vmem,990 pub const bonaire = Cpu{
991 &feature_trigReducedRange,991 .name = "bonaire",
992 &feature_vgprIndexMode,992 .llvm_name = "bonaire",
993 &feature_movrel,993 .features = featureSet(&[_]Feature{
994 &feature_fp64,994 .code_object_v3,
995 &feature_gcn3Encoding,995 .ldsbankcount32,
996 &feature_mimgR128,996 .no_xnack_support,
997 &feature_sdwa,997 .sea_islands,
998 &feature_gfx7Gfx8Gfx9Insts,998 }),
999 &feature_intClampInsts,999 };
1000 &feature_ciInsts,1000 pub const carrizo = Cpu{
1001 &feature_sdwaOutModsVopc,1001 .name = "carrizo",
1002 &feature_sMemrealtime,1002 .llvm_name = "carrizo",
1003 &feature_flatAddressSpace,1003 .features = featureSet(&[_]Feature{
1004 &feature_inv2piInlineImm,1004 .code_object_v3,
1005 &feature_wavefrontsize64,1005 .fast_fmaf,
1006 &feature_noSramEccSupport,1006 .half_rate_64_ops,
1007 &feature_sdwaMav,1007 .ldsbankcount32,
1008 &feature_localmemorysize65536,1008 .unpacked_d16_vmem,
1009 &feature_scalarStores,1009 .volcanic_islands,
1010 &feature_gfx8Insts,1010 .xnack,
1011 &feature_dpp,1011 }),
1012 &feature_BitInsts16,1012 };
1013 },1013 pub const fiji = Cpu{
1014};1014 .name = "fiji",
10151015 .llvm_name = "fiji",
1016pub const cpu_generic = Cpu{1016 .features = featureSet(&[_]Feature{
1017 .name = "generic",1017 .code_object_v3,
1018 .llvm_name = "generic",1018 .ldsbankcount32,
1019 .dependencies = &[_]*const Feature {1019 .no_xnack_support,
1020 &feature_wavefrontsize64,1020 .unpacked_d16_vmem,
1021 },1021 .volcanic_islands,
1022};1022 }),
10231023 };
1024pub const cpu_genericHsa = Cpu{1024 pub const generic = Cpu{
1025 .name = "genericHsa",1025 .name = "generic",
1026 .llvm_name = "generic-hsa",1026 .llvm_name = "generic",
1027 .dependencies = &[_]*const Feature {1027 .features = featureSet(&[_]Feature{
1028 &feature_flatAddressSpace,1028 .wavefrontsize64,
1029 &feature_wavefrontsize64,1029 }),
1030 },1030 };
1031};1031 pub const generic_hsa = Cpu{
10321032 .name = "generic_hsa",
1033pub const cpu_gfx1010 = Cpu{1033 .llvm_name = "generic-hsa",
1034 .name = "gfx1010",1034 .features = featureSet(&[_]Feature{
1035 .llvm_name = "gfx1010",1035 .flat_address_space,
1036 .dependencies = &[_]*const Feature {1036 .wavefrontsize64,
1037 &feature_codeObjectV3,1037 }),
1038 &feature_dlInsts,1038 };
1039 &feature_noXnackSupport,1039 pub const gfx1010 = Cpu{
1040 &feature_flatSegmentOffsetBug,1040 .name = "gfx1010",
1041 &feature_fmaMixInsts,1041 .llvm_name = "gfx1010",
1042 &feature_movrel,1042 .features = featureSet(&[_]Feature{
1043 &feature_registerBanking,1043 .code_object_v3,
1044 &feature_addNoCarryInsts,1044 .dl_insts,
1045 &feature_fp64,1045 .flat_segment_offset_bug,
1046 &feature_sdwaScalar,1046 .gfx10,
1047 &feature_flatGlobalInsts,1047 .inst_fwd_prefetch_bug,
1048 &feature_mimgR128,1048 .lds_branch_vmem_war_hazard,
1049 &feature_flatInstOffsets,1049 .lds_misaligned_bug,
1050 &feature_apertureRegs,1050 .ldsbankcount32,
1051 &feature_noSdstCmpx,1051 .no_xnack_support,
1052 &feature_vop3p,1052 .nsa_encoding,
1053 &feature_sdwa,1053 .nsa_to_vmem_bug,
1054 &feature_intClampInsts,1054 .offset_3f_bug,
1055 &feature_sdwaSdst,1055 .scalar_atomics,
1056 &feature_noDataDepHazard,1056 .scalar_flat_scratch_insts,
1057 &feature_flatScratchInsts,1057 .scalar_stores,
1058 &feature_ciInsts,1058 .smem_to_vector_write_hazard,
1059 &feature_sMemrealtime,1059 .vcmpx_exec_war_hazard,
1060 &feature_pkFmacF16Inst,1060 .vcmpx_permlane_hazard,
1061 &feature_dpp8,1061 .vmem_to_scalar_write_hazard,
1062 &feature_flatAddressSpace,1062 .wavefrontsize32,
1063 &feature_inv2piInlineImm,1063 }),
1064 &feature_fastFmaf,1064 };
1065 &feature_noSramEccSupport,1065 pub const gfx1011 = Cpu{
1066 &feature_gfx10Insts,1066 .name = "gfx1011",
1067 &feature_localmemorysize65536,1067 .llvm_name = "gfx1011",
1068 &feature_gfx9Insts,1068 .features = featureSet(&[_]Feature{
1069 &feature_gfx8Insts,1069 .code_object_v3,
1070 &feature_dpp,1070 .dl_insts,
1071 &feature_BitInsts16,1071 .dot1_insts,
1072 &feature_vop3Literal,1072 .dot2_insts,
1073 &feature_sdwaOmod,1073 .dot5_insts,
1074 &feature_vscnt,1074 .dot6_insts,
1075 &feature_instFwdPrefetchBug,1075 .flat_segment_offset_bug,
1076 &feature_ldsbankcount32,1076 .gfx10,
1077 &feature_ldsBranchVmemWarHazard,1077 .inst_fwd_prefetch_bug,
1078 &feature_ldsMisalignedBug,1078 .lds_branch_vmem_war_hazard,
1079 &feature_nsaEncoding,1079 .ldsbankcount32,
1080 &feature_nsaToVmemBug,1080 .no_xnack_support,
1081 &feature_offset3fBug,1081 .nsa_encoding,
1082 &feature_smemToVectorWriteHazard,1082 .nsa_to_vmem_bug,
1083 &feature_scalarAtomics,1083 .offset_3f_bug,
1084 &feature_scalarFlatScratchInsts,1084 .scalar_atomics,
1085 &feature_scalarStores,1085 .scalar_flat_scratch_insts,
1086 &feature_vmemToScalarWriteHazard,1086 .scalar_stores,
1087 &feature_vcmpxExecWarHazard,1087 .smem_to_vector_write_hazard,
1088 &feature_vcmpxPermlaneHazard,1088 .vcmpx_exec_war_hazard,
1089 &feature_wavefrontsize32,1089 .vcmpx_permlane_hazard,
1090 },1090 .vmem_to_scalar_write_hazard,
1091};1091 .wavefrontsize32,
10921092 }),
1093pub const cpu_gfx1011 = Cpu{1093 };
1094 .name = "gfx1011",1094 pub const gfx1012 = Cpu{
1095 .llvm_name = "gfx1011",1095 .name = "gfx1012",
1096 .dependencies = &[_]*const Feature {1096 .llvm_name = "gfx1012",
1097 &feature_codeObjectV3,1097 .features = featureSet(&[_]Feature{
1098 &feature_dlInsts,1098 .code_object_v3,
1099 &feature_noXnackSupport,1099 .dl_insts,
1100 &feature_dot1Insts,1100 .dot1_insts,
1101 &feature_dot2Insts,1101 .dot2_insts,
1102 &feature_dot5Insts,1102 .dot5_insts,
1103 &feature_dot6Insts,1103 .dot6_insts,
1104 &feature_flatSegmentOffsetBug,1104 .flat_segment_offset_bug,
1105 &feature_fmaMixInsts,1105 .gfx10,
1106 &feature_movrel,1106 .inst_fwd_prefetch_bug,
1107 &feature_registerBanking,1107 .lds_branch_vmem_war_hazard,
1108 &feature_addNoCarryInsts,1108 .lds_misaligned_bug,
1109 &feature_fp64,1109 .ldsbankcount32,
1110 &feature_sdwaScalar,1110 .no_xnack_support,
1111 &feature_flatGlobalInsts,1111 .nsa_encoding,
1112 &feature_mimgR128,1112 .nsa_to_vmem_bug,
1113 &feature_flatInstOffsets,1113 .offset_3f_bug,
1114 &feature_apertureRegs,1114 .scalar_atomics,
1115 &feature_noSdstCmpx,1115 .scalar_flat_scratch_insts,
1116 &feature_vop3p,1116 .scalar_stores,
1117 &feature_sdwa,1117 .smem_to_vector_write_hazard,
1118 &feature_intClampInsts,1118 .vcmpx_exec_war_hazard,
1119 &feature_sdwaSdst,1119 .vcmpx_permlane_hazard,
1120 &feature_noDataDepHazard,1120 .vmem_to_scalar_write_hazard,
1121 &feature_flatScratchInsts,1121 .wavefrontsize32,
1122 &feature_ciInsts,1122 }),
1123 &feature_sMemrealtime,1123 };
1124 &feature_pkFmacF16Inst,1124 pub const gfx600 = Cpu{
1125 &feature_dpp8,1125 .name = "gfx600",
1126 &feature_flatAddressSpace,1126 .llvm_name = "gfx600",
1127 &feature_inv2piInlineImm,1127 .features = featureSet(&[_]Feature{
1128 &feature_fastFmaf,1128 .code_object_v3,
1129 &feature_noSramEccSupport,1129 .fast_fmaf,
1130 &feature_gfx10Insts,1130 .half_rate_64_ops,
1131 &feature_localmemorysize65536,1131 .ldsbankcount32,
1132 &feature_gfx9Insts,1132 .no_xnack_support,
1133 &feature_gfx8Insts,1133 .southern_islands,
1134 &feature_dpp,1134 }),
1135 &feature_BitInsts16,1135 };
1136 &feature_vop3Literal,1136 pub const gfx601 = Cpu{
1137 &feature_sdwaOmod,1137 .name = "gfx601",
1138 &feature_vscnt,1138 .llvm_name = "gfx601",
1139 &feature_instFwdPrefetchBug,1139 .features = featureSet(&[_]Feature{
1140 &feature_ldsbankcount32,1140 .code_object_v3,
1141 &feature_ldsBranchVmemWarHazard,1141 .ldsbankcount32,
1142 &feature_nsaEncoding,1142 .no_xnack_support,
1143 &feature_nsaToVmemBug,1143 .southern_islands,
1144 &feature_offset3fBug,1144 }),
1145 &feature_smemToVectorWriteHazard,1145 };
1146 &feature_scalarAtomics,1146 pub const gfx700 = Cpu{
1147 &feature_scalarFlatScratchInsts,1147 .name = "gfx700",
1148 &feature_scalarStores,1148 .llvm_name = "gfx700",
1149 &feature_vmemToScalarWriteHazard,1149 .features = featureSet(&[_]Feature{
1150 &feature_vcmpxExecWarHazard,1150 .code_object_v3,
1151 &feature_vcmpxPermlaneHazard,1151 .ldsbankcount32,
1152 &feature_wavefrontsize32,1152 .no_xnack_support,
1153 },1153 .sea_islands,
1154};1154 }),
11551155 };
1156pub const cpu_gfx1012 = Cpu{1156 pub const gfx701 = Cpu{
1157 .name = "gfx1012",1157 .name = "gfx701",
1158 .llvm_name = "gfx1012",1158 .llvm_name = "gfx701",
1159 .dependencies = &[_]*const Feature {1159 .features = featureSet(&[_]Feature{
1160 &feature_codeObjectV3,1160 .code_object_v3,
1161 &feature_dlInsts,1161 .fast_fmaf,
1162 &feature_noXnackSupport,1162 .half_rate_64_ops,
1163 &feature_dot1Insts,1163 .ldsbankcount32,
1164 &feature_dot2Insts,1164 .no_xnack_support,
1165 &feature_dot5Insts,1165 .sea_islands,
1166 &feature_dot6Insts,1166 }),
1167 &feature_flatSegmentOffsetBug,1167 };
1168 &feature_fmaMixInsts,1168 pub const gfx702 = Cpu{
1169 &feature_movrel,1169 .name = "gfx702",
1170 &feature_registerBanking,1170 .llvm_name = "gfx702",
1171 &feature_addNoCarryInsts,1171 .features = featureSet(&[_]Feature{
1172 &feature_fp64,1172 .code_object_v3,
1173 &feature_sdwaScalar,1173 .fast_fmaf,
1174 &feature_flatGlobalInsts,1174 .ldsbankcount16,
1175 &feature_mimgR128,1175 .no_xnack_support,
1176 &feature_flatInstOffsets,1176 .sea_islands,
1177 &feature_apertureRegs,1177 }),
1178 &feature_noSdstCmpx,1178 };
1179 &feature_vop3p,1179 pub const gfx703 = Cpu{
1180 &feature_sdwa,1180 .name = "gfx703",
1181 &feature_intClampInsts,1181 .llvm_name = "gfx703",
1182 &feature_sdwaSdst,1182 .features = featureSet(&[_]Feature{
1183 &feature_noDataDepHazard,1183 .code_object_v3,
1184 &feature_flatScratchInsts,1184 .ldsbankcount16,
1185 &feature_ciInsts,1185 .no_xnack_support,
1186 &feature_sMemrealtime,1186 .sea_islands,
1187 &feature_pkFmacF16Inst,1187 }),
1188 &feature_dpp8,1188 };
1189 &feature_flatAddressSpace,1189 pub const gfx704 = Cpu{
1190 &feature_inv2piInlineImm,1190 .name = "gfx704",
1191 &feature_fastFmaf,1191 .llvm_name = "gfx704",
1192 &feature_noSramEccSupport,1192 .features = featureSet(&[_]Feature{
1193 &feature_gfx10Insts,1193 .code_object_v3,
1194 &feature_localmemorysize65536,1194 .ldsbankcount32,
1195 &feature_gfx9Insts,1195 .no_xnack_support,
1196 &feature_gfx8Insts,1196 .sea_islands,
1197 &feature_dpp,1197 }),
1198 &feature_BitInsts16,1198 };
1199 &feature_vop3Literal,1199 pub const gfx801 = Cpu{
1200 &feature_sdwaOmod,1200 .name = "gfx801",
1201 &feature_vscnt,1201 .llvm_name = "gfx801",
1202 &feature_instFwdPrefetchBug,1202 .features = featureSet(&[_]Feature{
1203 &feature_ldsbankcount32,1203 .code_object_v3,
1204 &feature_ldsBranchVmemWarHazard,1204 .fast_fmaf,
1205 &feature_ldsMisalignedBug,1205 .half_rate_64_ops,
1206 &feature_nsaEncoding,1206 .ldsbankcount32,
1207 &feature_nsaToVmemBug,1207 .unpacked_d16_vmem,
1208 &feature_offset3fBug,1208 .volcanic_islands,
1209 &feature_smemToVectorWriteHazard,1209 .xnack,
1210 &feature_scalarAtomics,1210 }),
1211 &feature_scalarFlatScratchInsts,1211 };
1212 &feature_scalarStores,1212 pub const gfx802 = Cpu{
1213 &feature_vmemToScalarWriteHazard,1213 .name = "gfx802",
1214 &feature_vcmpxExecWarHazard,1214 .llvm_name = "gfx802",
1215 &feature_vcmpxPermlaneHazard,1215 .features = featureSet(&[_]Feature{
1216 &feature_wavefrontsize32,1216 .code_object_v3,
1217 },1217 .ldsbankcount32,
1218};1218 .no_xnack_support,
12191219 .sgpr_init_bug,
1220pub const cpu_gfx600 = Cpu{1220 .unpacked_d16_vmem,
1221 .name = "gfx600",1221 .volcanic_islands,
1222 .llvm_name = "gfx600",1222 }),
1223 .dependencies = &[_]*const Feature {1223 };
1224 &feature_codeObjectV3,1224 pub const gfx803 = Cpu{
1225 &feature_noXnackSupport,1225 .name = "gfx803",
1226 &feature_fastFmaf,1226 .llvm_name = "gfx803",
1227 &feature_ldsbankcount32,1227 .features = featureSet(&[_]Feature{
1228 &feature_trigReducedRange,1228 .code_object_v3,
1229 &feature_movrel,1229 .ldsbankcount32,
1230 &feature_wavefrontsize64,1230 .no_xnack_support,
1231 &feature_fp64,1231 .unpacked_d16_vmem,
1232 &feature_mimgR128,1232 .volcanic_islands,
1233 &feature_noSramEccSupport,1233 }),
1234 &feature_localmemorysize32768,1234 };
1235 &feature_halfRate64Ops,1235 pub const gfx810 = Cpu{
1236 },1236 .name = "gfx810",
1237};1237 .llvm_name = "gfx810",
12381238 .features = featureSet(&[_]Feature{
1239pub const cpu_gfx601 = Cpu{1239 .code_object_v3,
1240 .name = "gfx601",1240 .ldsbankcount16,
1241 .llvm_name = "gfx601",1241 .volcanic_islands,
1242 .dependencies = &[_]*const Feature {1242 .xnack,
1243 &feature_codeObjectV3,1243 }),
1244 &feature_noXnackSupport,1244 };
1245 &feature_ldsbankcount32,1245 pub const gfx900 = Cpu{
1246 &feature_trigReducedRange,1246 .name = "gfx900",
1247 &feature_movrel,1247 .llvm_name = "gfx900",
1248 &feature_wavefrontsize64,1248 .features = featureSet(&[_]Feature{
1249 &feature_fp64,1249 .code_object_v3,
1250 &feature_mimgR128,1250 .gfx9,
1251 &feature_noSramEccSupport,1251 .ldsbankcount32,
1252 &feature_localmemorysize32768,1252 .mad_mix_insts,
1253 },1253 .no_sram_ecc_support,
1254};1254 .no_xnack_support,
12551255 }),
1256pub const cpu_gfx700 = Cpu{1256 };
1257 .name = "gfx700",1257 pub const gfx902 = Cpu{
1258 .llvm_name = "gfx700",1258 .name = "gfx902",
1259 .dependencies = &[_]*const Feature {1259 .llvm_name = "gfx902",
1260 &feature_codeObjectV3,1260 .features = featureSet(&[_]Feature{
1261 &feature_noXnackSupport,1261 .code_object_v3,
1262 &feature_ldsbankcount32,1262 .gfx9,
1263 &feature_trigReducedRange,1263 .ldsbankcount32,
1264 &feature_gfx7Gfx8Gfx9Insts,1264 .mad_mix_insts,
1265 &feature_movrel,1265 .no_sram_ecc_support,
1266 &feature_flatAddressSpace,1266 .xnack,
1267 &feature_wavefrontsize64,1267 }),
1268 &feature_fp64,1268 };
1269 &feature_mimgR128,1269 pub const gfx904 = Cpu{
1270 &feature_noSramEccSupport,1270 .name = "gfx904",
1271 &feature_ciInsts,1271 .llvm_name = "gfx904",
1272 &feature_localmemorysize65536,1272 .features = featureSet(&[_]Feature{
1273 },1273 .code_object_v3,
1274};1274 .fma_mix_insts,
12751275 .gfx9,
1276pub const cpu_gfx701 = Cpu{1276 .ldsbankcount32,
1277 .name = "gfx701",1277 .no_sram_ecc_support,
1278 .llvm_name = "gfx701",1278 .no_xnack_support,
1279 .dependencies = &[_]*const Feature {1279 }),
1280 &feature_codeObjectV3,1280 };
1281 &feature_noXnackSupport,1281 pub const gfx906 = Cpu{
1282 &feature_fastFmaf,1282 .name = "gfx906",
1283 &feature_ldsbankcount32,1283 .llvm_name = "gfx906",
1284 &feature_trigReducedRange,1284 .features = featureSet(&[_]Feature{
1285 &feature_gfx7Gfx8Gfx9Insts,1285 .code_object_v3,
1286 &feature_movrel,1286 .dl_insts,
1287 &feature_flatAddressSpace,1287 .dot1_insts,
1288 &feature_wavefrontsize64,1288 .dot2_insts,
1289 &feature_fp64,1289 .fma_mix_insts,
1290 &feature_mimgR128,1290 .gfx9,
1291 &feature_noSramEccSupport,1291 .half_rate_64_ops,
1292 &feature_ciInsts,1292 .ldsbankcount32,
1293 &feature_localmemorysize65536,1293 .no_xnack_support,
1294 &feature_halfRate64Ops,1294 }),
1295 },1295 };
1296};1296 pub const gfx908 = Cpu{
12971297 .name = "gfx908",
1298pub const cpu_gfx702 = Cpu{1298 .llvm_name = "gfx908",
1299 .name = "gfx702",1299 .features = featureSet(&[_]Feature{
1300 .llvm_name = "gfx702",1300 .atomic_fadd_insts,
1301 .dependencies = &[_]*const Feature {1301 .code_object_v3,
1302 &feature_codeObjectV3,1302 .dl_insts,
1303 &feature_noXnackSupport,1303 .dot1_insts,
1304 &feature_fastFmaf,1304 .dot2_insts,
1305 &feature_ldsbankcount16,1305 .dot3_insts,
1306 &feature_trigReducedRange,1306 .dot4_insts,
1307 &feature_gfx7Gfx8Gfx9Insts,1307 .dot5_insts,
1308 &feature_movrel,1308 .dot6_insts,
1309 &feature_flatAddressSpace,1309 .fma_mix_insts,
1310 &feature_wavefrontsize64,1310 .gfx9,
1311 &feature_fp64,1311 .half_rate_64_ops,
1312 &feature_mimgR128,1312 .ldsbankcount32,
1313 &feature_noSramEccSupport,1313 .mai_insts,
1314 &feature_ciInsts,1314 .pk_fmac_f16_inst,
1315 &feature_localmemorysize65536,1315 .sram_ecc,
1316 },1316 }),
1317};1317 };
13181318 pub const gfx909 = Cpu{
1319pub const cpu_gfx703 = Cpu{1319 .name = "gfx909",
1320 .name = "gfx703",1320 .llvm_name = "gfx909",
1321 .llvm_name = "gfx703",1321 .features = featureSet(&[_]Feature{
1322 .dependencies = &[_]*const Feature {1322 .code_object_v3,
1323 &feature_codeObjectV3,1323 .gfx9,
1324 &feature_noXnackSupport,1324 .ldsbankcount32,
1325 &feature_ldsbankcount16,1325 .mad_mix_insts,
1326 &feature_trigReducedRange,1326 .xnack,
1327 &feature_gfx7Gfx8Gfx9Insts,1327 }),
1328 &feature_movrel,1328 };
1329 &feature_flatAddressSpace,1329 pub const hainan = Cpu{
1330 &feature_wavefrontsize64,1330 .name = "hainan",
1331 &feature_fp64,1331 .llvm_name = "hainan",
1332 &feature_mimgR128,1332 .features = featureSet(&[_]Feature{
1333 &feature_noSramEccSupport,1333 .code_object_v3,
1334 &feature_ciInsts,1334 .ldsbankcount32,
1335 &feature_localmemorysize65536,1335 .no_xnack_support,
1336 },1336 .southern_islands,
1337};1337 }),
13381338 };
1339pub const cpu_gfx704 = Cpu{1339 pub const hawaii = Cpu{
1340 .name = "gfx704",1340 .name = "hawaii",
1341 .llvm_name = "gfx704",1341 .llvm_name = "hawaii",
1342 .dependencies = &[_]*const Feature {1342 .features = featureSet(&[_]Feature{
1343 &feature_codeObjectV3,1343 .code_object_v3,
1344 &feature_noXnackSupport,1344 .fast_fmaf,
1345 &feature_ldsbankcount32,1345 .half_rate_64_ops,
1346 &feature_trigReducedRange,1346 .ldsbankcount32,
1347 &feature_gfx7Gfx8Gfx9Insts,1347 .no_xnack_support,
1348 &feature_movrel,1348 .sea_islands,
1349 &feature_flatAddressSpace,1349 }),
1350 &feature_wavefrontsize64,1350 };
1351 &feature_fp64,1351 pub const iceland = Cpu{
1352 &feature_mimgR128,1352 .name = "iceland",
1353 &feature_noSramEccSupport,1353 .llvm_name = "iceland",
1354 &feature_ciInsts,1354 .features = featureSet(&[_]Feature{
1355 &feature_localmemorysize65536,1355 .code_object_v3,
1356 },1356 .ldsbankcount32,
1357};1357 .no_xnack_support,
13581358 .sgpr_init_bug,
1359pub const cpu_gfx801 = Cpu{1359 .unpacked_d16_vmem,
1360 .name = "gfx801",1360 .volcanic_islands,
1361 .llvm_name = "gfx801",1361 }),
1362 .dependencies = &[_]*const Feature {1362 };
1363 &feature_codeObjectV3,1363 pub const kabini = Cpu{
1364 &feature_fastFmaf,1364 .name = "kabini",
1365 &feature_ldsbankcount32,1365 .llvm_name = "kabini",
1366 &feature_unpackedD16Vmem,1366 .features = featureSet(&[_]Feature{
1367 &feature_trigReducedRange,1367 .code_object_v3,
1368 &feature_vgprIndexMode,1368 .ldsbankcount16,
1369 &feature_movrel,1369 .no_xnack_support,
1370 &feature_fp64,1370 .sea_islands,
1371 &feature_gcn3Encoding,1371 }),
1372 &feature_mimgR128,1372 };
1373 &feature_sdwa,1373 pub const kaveri = Cpu{
1374 &feature_gfx7Gfx8Gfx9Insts,1374 .name = "kaveri",
1375 &feature_intClampInsts,1375 .llvm_name = "kaveri",
1376 &feature_ciInsts,1376 .features = featureSet(&[_]Feature{
1377 &feature_sdwaOutModsVopc,1377 .code_object_v3,
1378 &feature_sMemrealtime,1378 .ldsbankcount32,
1379 &feature_flatAddressSpace,1379 .no_xnack_support,
1380 &feature_inv2piInlineImm,1380 .sea_islands,
1381 &feature_wavefrontsize64,1381 }),
1382 &feature_noSramEccSupport,1382 };
1383 &feature_sdwaMav,1383 pub const mullins = Cpu{
1384 &feature_localmemorysize65536,1384 .name = "mullins",
1385 &feature_scalarStores,1385 .llvm_name = "mullins",
1386 &feature_gfx8Insts,1386 .features = featureSet(&[_]Feature{
1387 &feature_dpp,1387 .code_object_v3,
1388 &feature_BitInsts16,1388 .ldsbankcount16,
1389 &feature_xnack,1389 .no_xnack_support,
1390 &feature_halfRate64Ops,1390 .sea_islands,
1391 },1391 }),
1392};1392 };
13931393 pub const oland = Cpu{
1394pub const cpu_gfx802 = Cpu{1394 .name = "oland",
1395 .name = "gfx802",1395 .llvm_name = "oland",
1396 .llvm_name = "gfx802",1396 .features = featureSet(&[_]Feature{
1397 .dependencies = &[_]*const Feature {1397 .code_object_v3,
1398 &feature_codeObjectV3,1398 .ldsbankcount32,
1399 &feature_noXnackSupport,1399 .no_xnack_support,
1400 &feature_ldsbankcount32,1400 .southern_islands,
1401 &feature_sgprInitBug,1401 }),
1402 &feature_unpackedD16Vmem,1402 };
1403 &feature_trigReducedRange,1403 pub const pitcairn = Cpu{
1404 &feature_vgprIndexMode,1404 .name = "pitcairn",
1405 &feature_movrel,1405 .llvm_name = "pitcairn",
1406 &feature_fp64,1406 .features = featureSet(&[_]Feature{
1407 &feature_gcn3Encoding,1407 .code_object_v3,
1408 &feature_mimgR128,1408 .ldsbankcount32,
1409 &feature_sdwa,1409 .no_xnack_support,
1410 &feature_gfx7Gfx8Gfx9Insts,1410 .southern_islands,
1411 &feature_intClampInsts,1411 }),
1412 &feature_ciInsts,1412 };
1413 &feature_sdwaOutModsVopc,1413 pub const polaris10 = Cpu{
1414 &feature_sMemrealtime,1414 .name = "polaris10",
1415 &feature_flatAddressSpace,1415 .llvm_name = "polaris10",
1416 &feature_inv2piInlineImm,1416 .features = featureSet(&[_]Feature{
1417 &feature_wavefrontsize64,1417 .code_object_v3,
1418 &feature_noSramEccSupport,1418 .ldsbankcount32,
1419 &feature_sdwaMav,1419 .no_xnack_support,
1420 &feature_localmemorysize65536,1420 .unpacked_d16_vmem,
1421 &feature_scalarStores,1421 .volcanic_islands,
1422 &feature_gfx8Insts,1422 }),
1423 &feature_dpp,1423 };
1424 &feature_BitInsts16,1424 pub const polaris11 = Cpu{
1425 },1425 .name = "polaris11",
1426};1426 .llvm_name = "polaris11",
14271427 .features = featureSet(&[_]Feature{
1428pub const cpu_gfx803 = Cpu{1428 .code_object_v3,
1429 .name = "gfx803",1429 .ldsbankcount32,
1430 .llvm_name = "gfx803",1430 .no_xnack_support,
1431 .dependencies = &[_]*const Feature {1431 .unpacked_d16_vmem,
1432 &feature_codeObjectV3,1432 .volcanic_islands,
1433 &feature_noXnackSupport,1433 }),
1434 &feature_ldsbankcount32,1434 };
1435 &feature_unpackedD16Vmem,1435 pub const stoney = Cpu{
1436 &feature_trigReducedRange,1436 .name = "stoney",
1437 &feature_vgprIndexMode,1437 .llvm_name = "stoney",
1438 &feature_movrel,1438 .features = featureSet(&[_]Feature{
1439 &feature_fp64,1439 .code_object_v3,
1440 &feature_gcn3Encoding,1440 .ldsbankcount16,
1441 &feature_mimgR128,1441 .volcanic_islands,
1442 &feature_sdwa,1442 .xnack,
1443 &feature_gfx7Gfx8Gfx9Insts,1443 }),
1444 &feature_intClampInsts,1444 };
1445 &feature_ciInsts,1445 pub const tahiti = Cpu{
1446 &feature_sdwaOutModsVopc,1446 .name = "tahiti",
1447 &feature_sMemrealtime,1447 .llvm_name = "tahiti",
1448 &feature_flatAddressSpace,1448 .features = featureSet(&[_]Feature{
1449 &feature_inv2piInlineImm,1449 .code_object_v3,
1450 &feature_wavefrontsize64,1450 .fast_fmaf,
1451 &feature_noSramEccSupport,1451 .half_rate_64_ops,
1452 &feature_sdwaMav,1452 .ldsbankcount32,
1453 &feature_localmemorysize65536,1453 .no_xnack_support,
1454 &feature_scalarStores,1454 .southern_islands,
1455 &feature_gfx8Insts,1455 }),
1456 &feature_dpp,1456 };
1457 &feature_BitInsts16,1457 pub const tonga = Cpu{
1458 },1458 .name = "tonga",
1459};1459 .llvm_name = "tonga",
14601460 .features = featureSet(&[_]Feature{
1461pub const cpu_gfx810 = Cpu{1461 .code_object_v3,
1462 .name = "gfx810",1462 .ldsbankcount32,
1463 .llvm_name = "gfx810",1463 .no_xnack_support,
1464 .dependencies = &[_]*const Feature {1464 .sgpr_init_bug,
1465 &feature_codeObjectV3,1465 .unpacked_d16_vmem,
1466 &feature_ldsbankcount16,1466 .volcanic_islands,
1467 &feature_trigReducedRange,1467 }),
1468 &feature_vgprIndexMode,1468 };
1469 &feature_movrel,1469 pub const verde = Cpu{
1470 &feature_fp64,1470 .name = "verde",
1471 &feature_gcn3Encoding,1471 .llvm_name = "verde",
1472 &feature_mimgR128,1472 .features = featureSet(&[_]Feature{
1473 &feature_sdwa,1473 .code_object_v3,
1474 &feature_gfx7Gfx8Gfx9Insts,1474 .ldsbankcount32,
1475 &feature_intClampInsts,1475 .no_xnack_support,
1476 &feature_ciInsts,1476 .southern_islands,
1477 &feature_sdwaOutModsVopc,1477 }),
1478 &feature_sMemrealtime,1478 };
1479 &feature_flatAddressSpace,1479};
1480 &feature_inv2piInlineImm,1480
1481 &feature_wavefrontsize64,1481/// All amdgpu CPUs, sorted alphabetically by name.
1482 &feature_noSramEccSupport,1482/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
1483 &feature_sdwaMav,1483/// compiler has inefficient memory and CPU usage, affecting build times.
1484 &feature_localmemorysize65536,1484pub const all_cpus = &[_]*const Cpu{
1485 &feature_scalarStores,1485 &cpu.bonaire,
1486 &feature_gfx8Insts,1486 &cpu.carrizo,
1487 &feature_dpp,1487 &cpu.fiji,
1488 &feature_BitInsts16,1488 &cpu.generic,
1489 &feature_xnack,1489 &cpu.generic_hsa,
1490 },1490 &cpu.gfx1010,
1491};1491 &cpu.gfx1011,
14921492 &cpu.gfx1012,
1493pub const cpu_gfx900 = Cpu{1493 &cpu.gfx600,
1494 .name = "gfx900",1494 &cpu.gfx601,
1495 .llvm_name = "gfx900",1495 &cpu.gfx700,
1496 .dependencies = &[_]*const Feature {1496 &cpu.gfx701,
1497 &feature_codeObjectV3,1497 &cpu.gfx702,
1498 &feature_noSramEccSupport,1498 &cpu.gfx703,
1499 &feature_noXnackSupport,1499 &cpu.gfx704,
1500 &feature_vgprIndexMode,1500 &cpu.gfx801,
1501 &feature_addNoCarryInsts,1501 &cpu.gfx802,
1502 &feature_fp64,1502 &cpu.gfx803,
1503 &feature_gcn3Encoding,1503 &cpu.gfx810,
1504 &feature_sdwaScalar,1504 &cpu.gfx900,
1505 &feature_flatGlobalInsts,1505 &cpu.gfx902,
1506 &feature_scalarFlatScratchInsts,1506 &cpu.gfx904,
1507 &feature_flatInstOffsets,1507 &cpu.gfx906,
1508 &feature_apertureRegs,1508 &cpu.gfx908,
1509 &feature_vop3p,1509 &cpu.gfx909,
1510 &feature_sdwa,1510 &cpu.hainan,
1511 &feature_gfx7Gfx8Gfx9Insts,1511 &cpu.hawaii,
1512 &feature_intClampInsts,1512 &cpu.iceland,
1513 &feature_sdwaSdst,1513 &cpu.kabini,
1514 &feature_flatScratchInsts,1514 &cpu.kaveri,
1515 &feature_ciInsts,1515 &cpu.mullins,
1516 &feature_r128A16,1516 &cpu.oland,
1517 &feature_sMemrealtime,1517 &cpu.pitcairn,
1518 &feature_flatAddressSpace,1518 &cpu.polaris10,
1519 &feature_scalarAtomics,1519 &cpu.polaris11,
1520 &feature_inv2piInlineImm,1520 &cpu.stoney,
1521 &feature_fastFmaf,1521 &cpu.tahiti,
1522 &feature_wavefrontsize64,1522 &cpu.tonga,
1523 &feature_localmemorysize65536,1523 &cpu.verde,
1524 &feature_scalarStores,
1525 &feature_gfx9Insts,
1526 &feature_gfx8Insts,
1527 &feature_dpp,
1528 &feature_BitInsts16,
1529 &feature_sdwaOmod,
1530 &feature_ldsbankcount32,
1531 &feature_madMixInsts,
1532 },
1533};
1534
1535pub const cpu_gfx902 = Cpu{
1536 .name = "gfx902",
1537 .llvm_name = "gfx902",
1538 .dependencies = &[_]*const Feature {
1539 &feature_codeObjectV3,
1540 &feature_noSramEccSupport,
1541 &feature_vgprIndexMode,
1542 &feature_addNoCarryInsts,
1543 &feature_fp64,
1544 &feature_gcn3Encoding,
1545 &feature_sdwaScalar,
1546 &feature_flatGlobalInsts,
1547 &feature_scalarFlatScratchInsts,
1548 &feature_flatInstOffsets,
1549 &feature_apertureRegs,
1550 &feature_vop3p,
1551 &feature_sdwa,
1552 &feature_gfx7Gfx8Gfx9Insts,
1553 &feature_intClampInsts,
1554 &feature_sdwaSdst,
1555 &feature_flatScratchInsts,
1556 &feature_ciInsts,
1557 &feature_r128A16,
1558 &feature_sMemrealtime,
1559 &feature_flatAddressSpace,
1560 &feature_scalarAtomics,
1561 &feature_inv2piInlineImm,
1562 &feature_fastFmaf,
1563 &feature_wavefrontsize64,
1564 &feature_localmemorysize65536,
1565 &feature_scalarStores,
1566 &feature_gfx9Insts,
1567 &feature_gfx8Insts,
1568 &feature_dpp,
1569 &feature_BitInsts16,
1570 &feature_sdwaOmod,
1571 &feature_ldsbankcount32,
1572 &feature_madMixInsts,
1573 &feature_xnack,
1574 },
1575};
1576
1577pub const cpu_gfx904 = Cpu{
1578 .name = "gfx904",
1579 .llvm_name = "gfx904",
1580 .dependencies = &[_]*const Feature {
1581 &feature_codeObjectV3,
1582 &feature_noSramEccSupport,
1583 &feature_noXnackSupport,
1584 &feature_fmaMixInsts,
1585 &feature_vgprIndexMode,
1586 &feature_addNoCarryInsts,
1587 &feature_fp64,
1588 &feature_gcn3Encoding,
1589 &feature_sdwaScalar,
1590 &feature_flatGlobalInsts,
1591 &feature_scalarFlatScratchInsts,
1592 &feature_flatInstOffsets,
1593 &feature_apertureRegs,
1594 &feature_vop3p,
1595 &feature_sdwa,
1596 &feature_gfx7Gfx8Gfx9Insts,
1597 &feature_intClampInsts,
1598 &feature_sdwaSdst,
1599 &feature_flatScratchInsts,
1600 &feature_ciInsts,
1601 &feature_r128A16,
1602 &feature_sMemrealtime,
1603 &feature_flatAddressSpace,
1604 &feature_scalarAtomics,
1605 &feature_inv2piInlineImm,
1606 &feature_fastFmaf,
1607 &feature_wavefrontsize64,
1608 &feature_localmemorysize65536,
1609 &feature_scalarStores,
1610 &feature_gfx9Insts,
1611 &feature_gfx8Insts,
1612 &feature_dpp,
1613 &feature_BitInsts16,
1614 &feature_sdwaOmod,
1615 &feature_ldsbankcount32,
1616 },
1617};
1618
1619pub const cpu_gfx906 = Cpu{
1620 .name = "gfx906",
1621 .llvm_name = "gfx906",
1622 .dependencies = &[_]*const Feature {
1623 &feature_codeObjectV3,
1624 &feature_dlInsts,
1625 &feature_noXnackSupport,
1626 &feature_dot1Insts,
1627 &feature_dot2Insts,
1628 &feature_fmaMixInsts,
1629 &feature_vgprIndexMode,
1630 &feature_addNoCarryInsts,
1631 &feature_fp64,
1632 &feature_gcn3Encoding,
1633 &feature_sdwaScalar,
1634 &feature_flatGlobalInsts,
1635 &feature_scalarFlatScratchInsts,
1636 &feature_flatInstOffsets,
1637 &feature_apertureRegs,
1638 &feature_vop3p,
1639 &feature_sdwa,
1640 &feature_gfx7Gfx8Gfx9Insts,
1641 &feature_intClampInsts,
1642 &feature_sdwaSdst,
1643 &feature_flatScratchInsts,
1644 &feature_ciInsts,
1645 &feature_r128A16,
1646 &feature_sMemrealtime,
1647 &feature_flatAddressSpace,
1648 &feature_scalarAtomics,
1649 &feature_inv2piInlineImm,
1650 &feature_fastFmaf,
1651 &feature_wavefrontsize64,
1652 &feature_localmemorysize65536,
1653 &feature_scalarStores,
1654 &feature_gfx9Insts,
1655 &feature_gfx8Insts,
1656 &feature_dpp,
1657 &feature_BitInsts16,
1658 &feature_sdwaOmod,
1659 &feature_ldsbankcount32,
1660 &feature_halfRate64Ops,
1661 },
1662};
1663
1664pub const cpu_gfx908 = Cpu{
1665 .name = "gfx908",
1666 .llvm_name = "gfx908",
1667 .dependencies = &[_]*const Feature {
1668 &feature_atomicFaddInsts,
1669 &feature_codeObjectV3,
1670 &feature_dlInsts,
1671 &feature_dot1Insts,
1672 &feature_dot2Insts,
1673 &feature_dot3Insts,
1674 &feature_dot4Insts,
1675 &feature_dot5Insts,
1676 &feature_dot6Insts,
1677 &feature_fmaMixInsts,
1678 &feature_vgprIndexMode,
1679 &feature_addNoCarryInsts,
1680 &feature_fp64,
1681 &feature_gcn3Encoding,
1682 &feature_sdwaScalar,
1683 &feature_flatGlobalInsts,
1684 &feature_scalarFlatScratchInsts,
1685 &feature_flatInstOffsets,
1686 &feature_apertureRegs,
1687 &feature_vop3p,
1688 &feature_sdwa,
1689 &feature_gfx7Gfx8Gfx9Insts,
1690 &feature_intClampInsts,
1691 &feature_sdwaSdst,
1692 &feature_flatScratchInsts,
1693 &feature_ciInsts,
1694 &feature_r128A16,
1695 &feature_sMemrealtime,
1696 &feature_flatAddressSpace,
1697 &feature_scalarAtomics,
1698 &feature_inv2piInlineImm,
1699 &feature_fastFmaf,
1700 &feature_wavefrontsize64,
1701 &feature_localmemorysize65536,
1702 &feature_scalarStores,
1703 &feature_gfx9Insts,
1704 &feature_gfx8Insts,
1705 &feature_dpp,
1706 &feature_BitInsts16,
1707 &feature_sdwaOmod,
1708 &feature_ldsbankcount32,
1709 &feature_maiInsts,
1710 &feature_pkFmacF16Inst,
1711 &feature_sramEcc,
1712 &feature_halfRate64Ops,
1713 },
1714};
1715
1716pub const cpu_gfx909 = Cpu{
1717 .name = "gfx909",
1718 .llvm_name = "gfx909",
1719 .dependencies = &[_]*const Feature {
1720 &feature_codeObjectV3,
1721 &feature_vgprIndexMode,
1722 &feature_addNoCarryInsts,
1723 &feature_fp64,
1724 &feature_gcn3Encoding,
1725 &feature_sdwaScalar,
1726 &feature_flatGlobalInsts,
1727 &feature_scalarFlatScratchInsts,
1728 &feature_flatInstOffsets,
1729 &feature_apertureRegs,
1730 &feature_vop3p,
1731 &feature_sdwa,
1732 &feature_gfx7Gfx8Gfx9Insts,
1733 &feature_intClampInsts,
1734 &feature_sdwaSdst,
1735 &feature_flatScratchInsts,
1736 &feature_ciInsts,
1737 &feature_r128A16,
1738 &feature_sMemrealtime,
1739 &feature_flatAddressSpace,
1740 &feature_scalarAtomics,
1741 &feature_inv2piInlineImm,
1742 &feature_fastFmaf,
1743 &feature_wavefrontsize64,
1744 &feature_localmemorysize65536,
1745 &feature_scalarStores,
1746 &feature_gfx9Insts,
1747 &feature_gfx8Insts,
1748 &feature_dpp,
1749 &feature_BitInsts16,
1750 &feature_sdwaOmod,
1751 &feature_ldsbankcount32,
1752 &feature_madMixInsts,
1753 &feature_xnack,
1754 },
1755};
1756
1757pub const cpu_hainan = Cpu{
1758 .name = "hainan",
1759 .llvm_name = "hainan",
1760 .dependencies = &[_]*const Feature {
1761 &feature_codeObjectV3,
1762 &feature_noXnackSupport,
1763 &feature_ldsbankcount32,
1764 &feature_trigReducedRange,
1765 &feature_movrel,
1766 &feature_wavefrontsize64,
1767 &feature_fp64,
1768 &feature_mimgR128,
1769 &feature_noSramEccSupport,
1770 &feature_localmemorysize32768,
1771 },
1772};
1773
1774pub const cpu_hawaii = Cpu{
1775 .name = "hawaii",
1776 .llvm_name = "hawaii",
1777 .dependencies = &[_]*const Feature {
1778 &feature_codeObjectV3,
1779 &feature_noXnackSupport,
1780 &feature_fastFmaf,
1781 &feature_ldsbankcount32,
1782 &feature_trigReducedRange,
1783 &feature_gfx7Gfx8Gfx9Insts,
1784 &feature_movrel,
1785 &feature_flatAddressSpace,
1786 &feature_wavefrontsize64,
1787 &feature_fp64,
1788 &feature_mimgR128,
1789 &feature_noSramEccSupport,
1790 &feature_ciInsts,
1791 &feature_localmemorysize65536,
1792 &feature_halfRate64Ops,
1793 },
1794};
1795
1796pub const cpu_iceland = Cpu{
1797 .name = "iceland",
1798 .llvm_name = "iceland",
1799 .dependencies = &[_]*const Feature {
1800 &feature_codeObjectV3,
1801 &feature_noXnackSupport,
1802 &feature_ldsbankcount32,
1803 &feature_sgprInitBug,
1804 &feature_unpackedD16Vmem,
1805 &feature_trigReducedRange,
1806 &feature_vgprIndexMode,
1807 &feature_movrel,
1808 &feature_fp64,
1809 &feature_gcn3Encoding,
1810 &feature_mimgR128,
1811 &feature_sdwa,
1812 &feature_gfx7Gfx8Gfx9Insts,
1813 &feature_intClampInsts,
1814 &feature_ciInsts,
1815 &feature_sdwaOutModsVopc,
1816 &feature_sMemrealtime,
1817 &feature_flatAddressSpace,
1818 &feature_inv2piInlineImm,
1819 &feature_wavefrontsize64,
1820 &feature_noSramEccSupport,
1821 &feature_sdwaMav,
1822 &feature_localmemorysize65536,
1823 &feature_scalarStores,
1824 &feature_gfx8Insts,
1825 &feature_dpp,
1826 &feature_BitInsts16,
1827 },
1828};
1829
1830pub const cpu_kabini = Cpu{
1831 .name = "kabini",
1832 .llvm_name = "kabini",
1833 .dependencies = &[_]*const Feature {
1834 &feature_codeObjectV3,
1835 &feature_noXnackSupport,
1836 &feature_ldsbankcount16,
1837 &feature_trigReducedRange,
1838 &feature_gfx7Gfx8Gfx9Insts,
1839 &feature_movrel,
1840 &feature_flatAddressSpace,
1841 &feature_wavefrontsize64,
1842 &feature_fp64,
1843 &feature_mimgR128,
1844 &feature_noSramEccSupport,
1845 &feature_ciInsts,
1846 &feature_localmemorysize65536,
1847 },
1848};
1849
1850pub const cpu_kaveri = Cpu{
1851 .name = "kaveri",
1852 .llvm_name = "kaveri",
1853 .dependencies = &[_]*const Feature {
1854 &feature_codeObjectV3,
1855 &feature_noXnackSupport,
1856 &feature_ldsbankcount32,
1857 &feature_trigReducedRange,
1858 &feature_gfx7Gfx8Gfx9Insts,
1859 &feature_movrel,
1860 &feature_flatAddressSpace,
1861 &feature_wavefrontsize64,
1862 &feature_fp64,
1863 &feature_mimgR128,
1864 &feature_noSramEccSupport,
1865 &feature_ciInsts,
1866 &feature_localmemorysize65536,
1867 },
1868};
1869
1870pub const cpu_mullins = Cpu{
1871 .name = "mullins",
1872 .llvm_name = "mullins",
1873 .dependencies = &[_]*const Feature {
1874 &feature_codeObjectV3,
1875 &feature_noXnackSupport,
1876 &feature_ldsbankcount16,
1877 &feature_trigReducedRange,
1878 &feature_gfx7Gfx8Gfx9Insts,
1879 &feature_movrel,
1880 &feature_flatAddressSpace,
1881 &feature_wavefrontsize64,
1882 &feature_fp64,
1883 &feature_mimgR128,
1884 &feature_noSramEccSupport,
1885 &feature_ciInsts,
1886 &feature_localmemorysize65536,
1887 },
1888};
1889
1890pub const cpu_oland = Cpu{
1891 .name = "oland",
1892 .llvm_name = "oland",
1893 .dependencies = &[_]*const Feature {
1894 &feature_codeObjectV3,
1895 &feature_noXnackSupport,
1896 &feature_ldsbankcount32,
1897 &feature_trigReducedRange,
1898 &feature_movrel,
1899 &feature_wavefrontsize64,
1900 &feature_fp64,
1901 &feature_mimgR128,
1902 &feature_noSramEccSupport,
1903 &feature_localmemorysize32768,
1904 },
1905};
1906
1907pub const cpu_pitcairn = Cpu{
1908 .name = "pitcairn",
1909 .llvm_name = "pitcairn",
1910 .dependencies = &[_]*const Feature {
1911 &feature_codeObjectV3,
1912 &feature_noXnackSupport,
1913 &feature_ldsbankcount32,
1914 &feature_trigReducedRange,
1915 &feature_movrel,
1916 &feature_wavefrontsize64,
1917 &feature_fp64,
1918 &feature_mimgR128,
1919 &feature_noSramEccSupport,
1920 &feature_localmemorysize32768,
1921 },
1922};
1923
1924pub const cpu_polaris10 = Cpu{
1925 .name = "polaris10",
1926 .llvm_name = "polaris10",
1927 .dependencies = &[_]*const Feature {
1928 &feature_codeObjectV3,
1929 &feature_noXnackSupport,
1930 &feature_ldsbankcount32,
1931 &feature_unpackedD16Vmem,
1932 &feature_trigReducedRange,
1933 &feature_vgprIndexMode,
1934 &feature_movrel,
1935 &feature_fp64,
1936 &feature_gcn3Encoding,
1937 &feature_mimgR128,
1938 &feature_sdwa,
1939 &feature_gfx7Gfx8Gfx9Insts,
1940 &feature_intClampInsts,
1941 &feature_ciInsts,
1942 &feature_sdwaOutModsVopc,
1943 &feature_sMemrealtime,
1944 &feature_flatAddressSpace,
1945 &feature_inv2piInlineImm,
1946 &feature_wavefrontsize64,
1947 &feature_noSramEccSupport,
1948 &feature_sdwaMav,
1949 &feature_localmemorysize65536,
1950 &feature_scalarStores,
1951 &feature_gfx8Insts,
1952 &feature_dpp,
1953 &feature_BitInsts16,
1954 },
1955};
1956
1957pub const cpu_polaris11 = Cpu{
1958 .name = "polaris11",
1959 .llvm_name = "polaris11",
1960 .dependencies = &[_]*const Feature {
1961 &feature_codeObjectV3,
1962 &feature_noXnackSupport,
1963 &feature_ldsbankcount32,
1964 &feature_unpackedD16Vmem,
1965 &feature_trigReducedRange,
1966 &feature_vgprIndexMode,
1967 &feature_movrel,
1968 &feature_fp64,
1969 &feature_gcn3Encoding,
1970 &feature_mimgR128,
1971 &feature_sdwa,
1972 &feature_gfx7Gfx8Gfx9Insts,
1973 &feature_intClampInsts,
1974 &feature_ciInsts,
1975 &feature_sdwaOutModsVopc,
1976 &feature_sMemrealtime,
1977 &feature_flatAddressSpace,
1978 &feature_inv2piInlineImm,
1979 &feature_wavefrontsize64,
1980 &feature_noSramEccSupport,
1981 &feature_sdwaMav,
1982 &feature_localmemorysize65536,
1983 &feature_scalarStores,
1984 &feature_gfx8Insts,
1985 &feature_dpp,
1986 &feature_BitInsts16,
1987 },
1988};
1989
1990pub const cpu_stoney = Cpu{
1991 .name = "stoney",
1992 .llvm_name = "stoney",
1993 .dependencies = &[_]*const Feature {
1994 &feature_codeObjectV3,
1995 &feature_ldsbankcount16,
1996 &feature_trigReducedRange,
1997 &feature_vgprIndexMode,
1998 &feature_movrel,
1999 &feature_fp64,
2000 &feature_gcn3Encoding,
2001 &feature_mimgR128,
2002 &feature_sdwa,
2003 &feature_gfx7Gfx8Gfx9Insts,
2004 &feature_intClampInsts,
2005 &feature_ciInsts,
2006 &feature_sdwaOutModsVopc,
2007 &feature_sMemrealtime,
2008 &feature_flatAddressSpace,
2009 &feature_inv2piInlineImm,
2010 &feature_wavefrontsize64,
2011 &feature_noSramEccSupport,
2012 &feature_sdwaMav,
2013 &feature_localmemorysize65536,
2014 &feature_scalarStores,
2015 &feature_gfx8Insts,
2016 &feature_dpp,
2017 &feature_BitInsts16,
2018 &feature_xnack,
2019 },
2020};
2021
2022pub const cpu_tahiti = Cpu{
2023 .name = "tahiti",
2024 .llvm_name = "tahiti",
2025 .dependencies = &[_]*const Feature {
2026 &feature_codeObjectV3,
2027 &feature_noXnackSupport,
2028 &feature_fastFmaf,
2029 &feature_ldsbankcount32,
2030 &feature_trigReducedRange,
2031 &feature_movrel,
2032 &feature_wavefrontsize64,
2033 &feature_fp64,
2034 &feature_mimgR128,
2035 &feature_noSramEccSupport,
2036 &feature_localmemorysize32768,
2037 &feature_halfRate64Ops,
2038 },
2039};
2040
2041pub const cpu_tonga = Cpu{
2042 .name = "tonga",
2043 .llvm_name = "tonga",
2044 .dependencies = &[_]*const Feature {
2045 &feature_codeObjectV3,
2046 &feature_noXnackSupport,
2047 &feature_ldsbankcount32,
2048 &feature_sgprInitBug,
2049 &feature_unpackedD16Vmem,
2050 &feature_trigReducedRange,
2051 &feature_vgprIndexMode,
2052 &feature_movrel,
2053 &feature_fp64,
2054 &feature_gcn3Encoding,
2055 &feature_mimgR128,
2056 &feature_sdwa,
2057 &feature_gfx7Gfx8Gfx9Insts,
2058 &feature_intClampInsts,
2059 &feature_ciInsts,
2060 &feature_sdwaOutModsVopc,
2061 &feature_sMemrealtime,
2062 &feature_flatAddressSpace,
2063 &feature_inv2piInlineImm,
2064 &feature_wavefrontsize64,
2065 &feature_noSramEccSupport,
2066 &feature_sdwaMav,
2067 &feature_localmemorysize65536,
2068 &feature_scalarStores,
2069 &feature_gfx8Insts,
2070 &feature_dpp,
2071 &feature_BitInsts16,
2072 },
2073};
2074
2075pub const cpu_verde = Cpu{
2076 .name = "verde",
2077 .llvm_name = "verde",
2078 .dependencies = &[_]*const Feature {
2079 &feature_codeObjectV3,
2080 &feature_noXnackSupport,
2081 &feature_ldsbankcount32,
2082 &feature_trigReducedRange,
2083 &feature_movrel,
2084 &feature_wavefrontsize64,
2085 &feature_fp64,
2086 &feature_mimgR128,
2087 &feature_noSramEccSupport,
2088 &feature_localmemorysize32768,
2089 },
2090};
2091
2092pub const cpus = &[_]*const Cpu {
2093 &cpu_bonaire,
2094 &cpu_carrizo,
2095 &cpu_fiji,
2096 &cpu_generic,
2097 &cpu_genericHsa,
2098 &cpu_gfx1010,
2099 &cpu_gfx1011,
2100 &cpu_gfx1012,
2101 &cpu_gfx600,
2102 &cpu_gfx601,
2103 &cpu_gfx700,
2104 &cpu_gfx701,
2105 &cpu_gfx702,
2106 &cpu_gfx703,
2107 &cpu_gfx704,
2108 &cpu_gfx801,
2109 &cpu_gfx802,
2110 &cpu_gfx803,
2111 &cpu_gfx810,
2112 &cpu_gfx900,
2113 &cpu_gfx902,
2114 &cpu_gfx904,
2115 &cpu_gfx906,
2116 &cpu_gfx908,
2117 &cpu_gfx909,
2118 &cpu_hainan,
2119 &cpu_hawaii,
2120 &cpu_iceland,
2121 &cpu_kabini,
2122 &cpu_kaveri,
2123 &cpu_mullins,
2124 &cpu_oland,
2125 &cpu_pitcairn,
2126 &cpu_polaris10,
2127 &cpu_polaris11,
2128 &cpu_stoney,
2129 &cpu_tahiti,
2130 &cpu_tonga,
2131 &cpu_verde,
2132};1524};
lib/std/target/arm.zig+2674-2295
...@@ -1,2296 +1,2675 @@...@@ -1,2296 +1,2675 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_msecext8 = Feature{4pub const Feature = enum {
5 .name = "msecext8",5 @"32bit",
6 .llvm_name = "8msecext",6 @"8msecext",
7 .description = "Enable support for ARMv8-M Security Extensions",7 a12,
8 .dependencies = &[_]*const Feature {8 a15,
9 },9 a17,
10};10 a32,
1111 a35,
12pub const feature_aclass = Feature{12 a5,
13 .name = "aclass",13 a53,
14 .llvm_name = "aclass",14 a55,
15 .description = "Is application profile ('A' series)",15 a57,
16 .dependencies = &[_]*const Feature {16 a7,
17 },17 a72,
18};18 a73,
1919 a75,
20pub const feature_aes = Feature{20 a76,
21 .name = "aes",21 a8,
22 .llvm_name = "aes",22 a9,
23 .description = "Enable AES support",23 aclass,
24 .dependencies = &[_]*const Feature {24 acquire_release,
25 &feature_fpregs,25 aes,
26 &feature_d32,26 armv2,
27 },27 armv2a,
28};28 armv3,
2929 armv3m,
30pub const feature_acquireRelease = Feature{30 armv4,
31 .name = "acquireRelease",31 armv4t,
32 .llvm_name = "acquire-release",32 armv5t,
33 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",33 armv5te,
34 .dependencies = &[_]*const Feature {34 armv5tej,
35 },35 armv6,
36};36 armv6_m,
3737 armv6j,
38pub const feature_avoidMovsShop = Feature{38 armv6k,
39 .name = "avoidMovsShop",39 armv6kz,
40 .llvm_name = "avoid-movs-shop",40 armv6s_m,
41 .description = "Avoid movs instructions with shifter operand",41 armv6t2,
42 .dependencies = &[_]*const Feature {42 armv7_a,
43 },43 armv7_m,
44};44 armv7_r,
4545 armv7e_m,
46pub const feature_avoidPartialCpsr = Feature{46 armv7k,
47 .name = "avoidPartialCpsr",47 armv7s,
48 .llvm_name = "avoid-partial-cpsr",48 armv7ve,
49 .description = "Avoid CPSR partial update for OOO execution",49 armv8_a,
50 .dependencies = &[_]*const Feature {50 armv8_m_base,
51 },51 armv8_m_main,
52};52 armv8_r,
5353 armv8_1_a,
54pub const feature_crc = Feature{54 armv8_1_m_main,
55 .name = "crc",55 armv8_2_a,
56 .llvm_name = "crc",56 armv8_3_a,
57 .description = "Enable support for CRC instructions",57 armv8_4_a,
58 .dependencies = &[_]*const Feature {58 armv8_5_a,
59 },59 avoid_movs_shop,
60};60 avoid_partial_cpsr,
6161 cheap_predicable_cpsr,
62pub const feature_cheapPredicableCpsr = Feature{62 crc,
63 .name = "cheapPredicableCpsr",63 crypto,
64 .llvm_name = "cheap-predicable-cpsr",64 d32,
65 .description = "Disable +1 predication cost for instructions updating CPSR",65 db,
66 .dependencies = &[_]*const Feature {66 dfb,
67 },67 disable_postra_scheduler,
68};68 dont_widen_vmovs,
6969 dotprod,
70pub const feature_vldnAlign = Feature{70 dsp,
71 .name = "vldnAlign",71 execute_only,
72 .llvm_name = "vldn-align",72 expand_fp_mlx,
73 .description = "Check for VLDn unaligned access",73 exynos,
74 .dependencies = &[_]*const Feature {74 fp_armv8,
75 },75 fp_armv8d16,
76};76 fp_armv8d16sp,
7777 fp_armv8sp,
78pub const feature_crypto = Feature{78 fp16,
79 .name = "crypto",79 fp16fml,
80 .llvm_name = "crypto",80 fp64,
81 .description = "Enable support for Cryptography extensions",81 fpao,
82 .dependencies = &[_]*const Feature {82 fpregs,
83 &feature_d32,83 fpregs16,
84 &feature_fpregs,84 fpregs64,
85 },85 fullfp16,
86};86 fuse_aes,
8787 fuse_literals,
88pub const feature_d32 = Feature{88 hwdiv,
89 .name = "d32",89 hwdiv_arm,
90 .llvm_name = "d32",90 iwmmxt,
91 .description = "Extend FP to 32 double registers",91 iwmmxt2,
92 .dependencies = &[_]*const Feature {92 krait,
93 },93 kryo,
94};94 lob,
9595 long_calls,
96pub const feature_db = Feature{96 loop_align,
97 .name = "db",97 m3,
98 .llvm_name = "db",98 mclass,
99 .description = "Has data barrier (dmb/dsb) instructions",99 mp,
100 .dependencies = &[_]*const Feature {100 muxed_units,
101 },101 mve,
102};102 mve_fp,
103103 nacl_trap,
104pub const feature_dfb = Feature{104 neon,
105 .name = "dfb",105 neon_fpmovs,
106 .llvm_name = "dfb",106 neonfp,
107 .description = "Has full data barrier (dfb) instruction",107 no_branch_predictor,
108 .dependencies = &[_]*const Feature {108 no_movt,
109 },109 no_neg_immediates,
110};110 noarm,
111111 nonpipelined_vfp,
112pub const feature_dsp = Feature{112 perfmon,
113 .name = "dsp",113 prefer_ishst,
114 .llvm_name = "dsp",114 prefer_vmovsr,
115 .description = "Supports DSP instructions in ARM and/or Thumb2",115 prof_unpr,
116 .dependencies = &[_]*const Feature {116 r4,
117 },117 r5,
118};118 r52,
119119 r7,
120pub const feature_dontWidenVmovs = Feature{120 ras,
121 .name = "dontWidenVmovs",121 rclass,
122 .llvm_name = "dont-widen-vmovs",122 read_tp_hard,
123 .description = "Don't widen VMOVS to VMOVD",123 reserve_r9,
124 .dependencies = &[_]*const Feature {124 ret_addr_stack,
125 },125 sb,
126};126 sha2,
127127 slow_fp_brcc,
128pub const feature_dotprod = Feature{128 slow_load_D_subreg,
129 .name = "dotprod",129 slow_odd_reg,
130 .llvm_name = "dotprod",130 slow_vdup32,
131 .description = "Enable support for dot product instructions",131 slow_vgetlni32,
132 .dependencies = &[_]*const Feature {132 slowfpvmlx,
133 &feature_fpregs,133 soft_float,
134 &feature_d32,134 splat_vfp_neon,
135 },135 strict_align,
136};136 swift,
137137 thumb_mode,
138pub const feature_executeOnly = Feature{138 thumb2,
139 .name = "executeOnly",139 trustzone,
140 .llvm_name = "execute-only",140 use_aa,
141 .description = "Enable the generation of execute only code.",141 use_misched,
142 .dependencies = &[_]*const Feature {142 v4t,
143 },143 v5t,
144};144 v5te,
145145 v6,
146pub const feature_expandFpMlx = Feature{146 v6k,
147 .name = "expandFpMlx",147 v6m,
148 .llvm_name = "expand-fp-mlx",148 v6t2,
149 .description = "Expand VFP/NEON MLA/MLS instructions",149 v7,
150 .dependencies = &[_]*const Feature {150 v7clrex,
151 },151 v8,
152};152 v8_1a,
153153 v8_1m_main,
154pub const feature_fp16 = Feature{154 v8_2a,
155 .name = "fp16",155 v8_3a,
156 .llvm_name = "fp16",156 v8_4a,
157 .description = "Enable half-precision floating point",157 v8_5a,
158 .dependencies = &[_]*const Feature {158 v8m,
159 },159 v8m_main,
160};160 vfp2,
161161 vfp2d16,
162pub const feature_fp16fml = Feature{162 vfp2d16sp,
163 .name = "fp16fml",163 vfp2sp,
164 .llvm_name = "fp16fml",164 vfp3,
165 .description = "Enable full half-precision floating point fml instructions",165 vfp3d16,
166 .dependencies = &[_]*const Feature {166 vfp3d16sp,
167 &feature_fp16,167 vfp3sp,
168 &feature_fpregs,168 vfp4,
169 },169 vfp4d16,
170};170 vfp4d16sp,
171171 vfp4sp,
172pub const feature_fp64 = Feature{172 virtualization,
173 .name = "fp64",173 vldn_align,
174 .llvm_name = "fp64",174 vmlx_forwarding,
175 .description = "Floating point unit supports double precision",175 vmlx_hazards,
176 .dependencies = &[_]*const Feature {176 wide_stride_vfp,
177 &feature_fpregs,177 xscale,
178 },178 zcz,
179};179};
180180
181pub const feature_fpao = Feature{181pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
182 .name = "fpao",182
183 .llvm_name = "fpao",183pub const all_features = blk: {
184 .description = "Enable fast computation of positive address offsets",184 const len = @typeInfo(Feature).Enum.fields.len;
185 .dependencies = &[_]*const Feature {185 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
186 },186 var result: [len]Cpu.Feature = undefined;
187};187 result[@enumToInt(Feature.@"32bit")] = .{
188188 .index = @enumToInt(Feature.@"32bit"),
189pub const feature_fpArmv8 = Feature{189 .name = @tagName(Feature.@"32bit"),
190 .name = "fpArmv8",190 .llvm_name = "32bit",
191 .llvm_name = "fp-armv8",191 .description = "Prefer 32-bit Thumb instrs",
192 .description = "Enable ARMv8 FP",192 .dependencies = 0,
193 .dependencies = &[_]*const Feature {193 };
194 &feature_fp16,194 result[@enumToInt(Feature.@"8msecext")] = .{
195 &feature_d32,195 .index = @enumToInt(Feature.@"8msecext"),
196 &feature_fpregs,196 .name = @tagName(Feature.@"8msecext"),
197 },197 .llvm_name = "8msecext",
198};198 .description = "Enable support for ARMv8-M Security Extensions",
199199 .dependencies = 0,
200pub const feature_fpArmv8d16 = Feature{200 };
201 .name = "fpArmv8d16",201 result[@enumToInt(Feature.a12)] = .{
202 .llvm_name = "fp-armv8d16",202 .index = @enumToInt(Feature.a12),
203 .description = "Enable ARMv8 FP with only 16 d-registers",203 .name = @tagName(Feature.a12),
204 .dependencies = &[_]*const Feature {204 .llvm_name = "a12",
205 &feature_fp16,205 .description = "Cortex-A12 ARM processors",
206 &feature_fpregs,206 .dependencies = 0,
207 },207 };
208};208 result[@enumToInt(Feature.a15)] = .{
209209 .index = @enumToInt(Feature.a15),
210pub const feature_fpArmv8d16sp = Feature{210 .name = @tagName(Feature.a15),
211 .name = "fpArmv8d16sp",211 .llvm_name = "a15",
212 .llvm_name = "fp-armv8d16sp",212 .description = "Cortex-A15 ARM processors",
213 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",213 .dependencies = 0,
214 .dependencies = &[_]*const Feature {214 };
215 &feature_fp16,215 result[@enumToInt(Feature.a17)] = .{
216 &feature_fpregs,216 .index = @enumToInt(Feature.a17),
217 },217 .name = @tagName(Feature.a17),
218};218 .llvm_name = "a17",
219219 .description = "Cortex-A17 ARM processors",
220pub const feature_fpArmv8sp = Feature{220 .dependencies = 0,
221 .name = "fpArmv8sp",221 };
222 .llvm_name = "fp-armv8sp",222 result[@enumToInt(Feature.a32)] = .{
223 .description = "Enable ARMv8 FP with no double precision",223 .index = @enumToInt(Feature.a32),
224 .dependencies = &[_]*const Feature {224 .name = @tagName(Feature.a32),
225 &feature_fp16,225 .llvm_name = "a32",
226 &feature_fpregs,226 .description = "Cortex-A32 ARM processors",
227 &feature_d32,227 .dependencies = 0,
228 },228 };
229};229 result[@enumToInt(Feature.a35)] = .{
230230 .index = @enumToInt(Feature.a35),
231pub const feature_fpregs = Feature{231 .name = @tagName(Feature.a35),
232 .name = "fpregs",232 .llvm_name = "a35",
233 .llvm_name = "fpregs",233 .description = "Cortex-A35 ARM processors",
234 .description = "Enable FP registers",234 .dependencies = 0,
235 .dependencies = &[_]*const Feature {235 };
236 },236 result[@enumToInt(Feature.a5)] = .{
237};237 .index = @enumToInt(Feature.a5),
238238 .name = @tagName(Feature.a5),
239pub const feature_fpregs16 = Feature{239 .llvm_name = "a5",
240 .name = "fpregs16",240 .description = "Cortex-A5 ARM processors",
241 .llvm_name = "fpregs16",241 .dependencies = 0,
242 .description = "Enable 16-bit FP registers",242 };
243 .dependencies = &[_]*const Feature {243 result[@enumToInt(Feature.a53)] = .{
244 &feature_fpregs,244 .index = @enumToInt(Feature.a53),
245 },245 .name = @tagName(Feature.a53),
246};246 .llvm_name = "a53",
247247 .description = "Cortex-A53 ARM processors",
248pub const feature_fpregs64 = Feature{248 .dependencies = 0,
249 .name = "fpregs64",249 };
250 .llvm_name = "fpregs64",250 result[@enumToInt(Feature.a55)] = .{
251 .description = "Enable 64-bit FP registers",251 .index = @enumToInt(Feature.a55),
252 .dependencies = &[_]*const Feature {252 .name = @tagName(Feature.a55),
253 &feature_fpregs,253 .llvm_name = "a55",
254 },254 .description = "Cortex-A55 ARM processors",
255};255 .dependencies = 0,
256256 };
257pub const feature_fullfp16 = Feature{257 result[@enumToInt(Feature.a57)] = .{
258 .name = "fullfp16",258 .index = @enumToInt(Feature.a57),
259 .llvm_name = "fullfp16",259 .name = @tagName(Feature.a57),
260 .description = "Enable full half-precision floating point",260 .llvm_name = "a57",
261 .dependencies = &[_]*const Feature {261 .description = "Cortex-A57 ARM processors",
262 &feature_fp16,262 .dependencies = 0,
263 &feature_fpregs,263 };
264 },264 result[@enumToInt(Feature.a7)] = .{
265};265 .index = @enumToInt(Feature.a7),
266266 .name = @tagName(Feature.a7),
267pub const feature_fuseAes = Feature{267 .llvm_name = "a7",
268 .name = "fuseAes",268 .description = "Cortex-A7 ARM processors",
269 .llvm_name = "fuse-aes",269 .dependencies = 0,
270 .description = "CPU fuses AES crypto operations",270 };
271 .dependencies = &[_]*const Feature {271 result[@enumToInt(Feature.a72)] = .{
272 },272 .index = @enumToInt(Feature.a72),
273};273 .name = @tagName(Feature.a72),
274274 .llvm_name = "a72",
275pub const feature_fuseLiterals = Feature{275 .description = "Cortex-A72 ARM processors",
276 .name = "fuseLiterals",276 .dependencies = 0,
277 .llvm_name = "fuse-literals",277 };
278 .description = "CPU fuses literal generation operations",278 result[@enumToInt(Feature.a73)] = .{
279 .dependencies = &[_]*const Feature {279 .index = @enumToInt(Feature.a73),
280 },280 .name = @tagName(Feature.a73),
281};281 .llvm_name = "a73",
282282 .description = "Cortex-A73 ARM processors",
283pub const feature_hwdivArm = Feature{283 .dependencies = 0,
284 .name = "hwdivArm",284 };
285 .llvm_name = "hwdiv-arm",285 result[@enumToInt(Feature.a75)] = .{
286 .description = "Enable divide instructions in ARM mode",286 .index = @enumToInt(Feature.a75),
287 .dependencies = &[_]*const Feature {287 .name = @tagName(Feature.a75),
288 },288 .llvm_name = "a75",
289};289 .description = "Cortex-A75 ARM processors",
290290 .dependencies = 0,
291pub const feature_hwdiv = Feature{291 };
292 .name = "hwdiv",292 result[@enumToInt(Feature.a76)] = .{
293 .llvm_name = "hwdiv",293 .index = @enumToInt(Feature.a76),
294 .description = "Enable divide instructions in Thumb",294 .name = @tagName(Feature.a76),
295 .dependencies = &[_]*const Feature {295 .llvm_name = "a76",
296 },296 .description = "Cortex-A76 ARM processors",
297};297 .dependencies = 0,
298298 };
299pub const feature_noBranchPredictor = Feature{299 result[@enumToInt(Feature.a8)] = .{
300 .name = "noBranchPredictor",300 .index = @enumToInt(Feature.a8),
301 .llvm_name = "no-branch-predictor",301 .name = @tagName(Feature.a8),
302 .description = "Has no branch predictor",302 .llvm_name = "a8",
303 .dependencies = &[_]*const Feature {303 .description = "Cortex-A8 ARM processors",
304 },304 .dependencies = 0,
305};305 };
306306 result[@enumToInt(Feature.a9)] = .{
307pub const feature_retAddrStack = Feature{307 .index = @enumToInt(Feature.a9),
308 .name = "retAddrStack",308 .name = @tagName(Feature.a9),
309 .llvm_name = "ret-addr-stack",309 .llvm_name = "a9",
310 .description = "Has return address stack",310 .description = "Cortex-A9 ARM processors",
311 .dependencies = &[_]*const Feature {311 .dependencies = 0,
312 },312 };
313};313 result[@enumToInt(Feature.aclass)] = .{
314314 .index = @enumToInt(Feature.aclass),
315pub const feature_slowfpvmlx = Feature{315 .name = @tagName(Feature.aclass),
316 .name = "slowfpvmlx",316 .llvm_name = "aclass",
317 .llvm_name = "slowfpvmlx",317 .description = "Is application profile ('A' series)",
318 .description = "Disable VFP / NEON MAC instructions",318 .dependencies = 0,
319 .dependencies = &[_]*const Feature {319 };
320 },320 result[@enumToInt(Feature.acquire_release)] = .{
321};321 .index = @enumToInt(Feature.acquire_release),
322322 .name = @tagName(Feature.acquire_release),
323pub const feature_vmlxHazards = Feature{323 .llvm_name = "acquire-release",
324 .name = "vmlxHazards",324 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
325 .llvm_name = "vmlx-hazards",325 .dependencies = 0,
326 .description = "Has VMLx hazards",326 };
327 .dependencies = &[_]*const Feature {327 result[@enumToInt(Feature.aes)] = .{
328 },328 .index = @enumToInt(Feature.aes),
329};329 .name = @tagName(Feature.aes),
330330 .llvm_name = "aes",
331pub const feature_lob = Feature{331 .description = "Enable AES support",
332 .name = "lob",332 .dependencies = featureSet(&[_]Feature{
333 .llvm_name = "lob",333 .neon,
334 .description = "Enable Low Overhead Branch extensions",334 }),
335 .dependencies = &[_]*const Feature {335 };
336 },336 result[@enumToInt(Feature.armv2)] = .{
337};337 .index = @enumToInt(Feature.armv2),
338338 .name = @tagName(Feature.armv2),
339pub const feature_longCalls = Feature{339 .llvm_name = "armv2",
340 .name = "longCalls",340 .description = "ARMv2 architecture",
341 .llvm_name = "long-calls",341 .dependencies = 0,
342 .description = "Generate calls via indirect call instructions",342 };
343 .dependencies = &[_]*const Feature {343 result[@enumToInt(Feature.armv2a)] = .{
344 },344 .index = @enumToInt(Feature.armv2a),
345};345 .name = @tagName(Feature.armv2a),
346346 .llvm_name = "armv2a",
347pub const feature_mclass = Feature{347 .description = "ARMv2a architecture",
348 .name = "mclass",348 .dependencies = 0,
349 .llvm_name = "mclass",349 };
350 .description = "Is microcontroller profile ('M' series)",350 result[@enumToInt(Feature.armv3)] = .{
351 .dependencies = &[_]*const Feature {351 .index = @enumToInt(Feature.armv3),
352 },352 .name = @tagName(Feature.armv3),
353};353 .llvm_name = "armv3",
354354 .description = "ARMv3 architecture",
355pub const feature_mp = Feature{355 .dependencies = 0,
356 .name = "mp",356 };
357 .llvm_name = "mp",357 result[@enumToInt(Feature.armv3m)] = .{
358 .description = "Supports Multiprocessing extension",358 .index = @enumToInt(Feature.armv3m),
359 .dependencies = &[_]*const Feature {359 .name = @tagName(Feature.armv3m),
360 },360 .llvm_name = "armv3m",
361};361 .description = "ARMv3m architecture",
362362 .dependencies = 0,
363pub const feature_muxedUnits = Feature{363 };
364 .name = "muxedUnits",364 result[@enumToInt(Feature.armv4)] = .{
365 .llvm_name = "muxed-units",365 .index = @enumToInt(Feature.armv4),
366 .description = "Has muxed AGU and NEON/FPU",366 .name = @tagName(Feature.armv4),
367 .dependencies = &[_]*const Feature {367 .llvm_name = "armv4",
368 },368 .description = "ARMv4 architecture",
369};369 .dependencies = 0,
370370 };
371pub const feature_neon = Feature{371 result[@enumToInt(Feature.armv4t)] = .{
372 .name = "neon",372 .index = @enumToInt(Feature.armv4t),
373 .llvm_name = "neon",373 .name = @tagName(Feature.armv4t),
374 .description = "Enable NEON instructions",374 .llvm_name = "armv4t",
375 .dependencies = &[_]*const Feature {375 .description = "ARMv4t architecture",
376 &feature_d32,376 .dependencies = featureSet(&[_]Feature{
377 &feature_fpregs,377 .v4t,
378 },378 }),
379};379 };
380380 result[@enumToInt(Feature.armv5t)] = .{
381pub const feature_neonfp = Feature{381 .index = @enumToInt(Feature.armv5t),
382 .name = "neonfp",382 .name = @tagName(Feature.armv5t),
383 .llvm_name = "neonfp",383 .llvm_name = "armv5t",
384 .description = "Use NEON for single precision FP",384 .description = "ARMv5t architecture",
385 .dependencies = &[_]*const Feature {385 .dependencies = featureSet(&[_]Feature{
386 },386 .v5t,
387};387 }),
388388 };
389pub const feature_neonFpmovs = Feature{389 result[@enumToInt(Feature.armv5te)] = .{
390 .name = "neonFpmovs",390 .index = @enumToInt(Feature.armv5te),
391 .llvm_name = "neon-fpmovs",391 .name = @tagName(Feature.armv5te),
392 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",392 .llvm_name = "armv5te",
393 .dependencies = &[_]*const Feature {393 .description = "ARMv5te architecture",
394 },394 .dependencies = featureSet(&[_]Feature{
395};395 .v5te,
396396 }),
397pub const feature_naclTrap = Feature{397 };
398 .name = "naclTrap",398 result[@enumToInt(Feature.armv5tej)] = .{
399 .llvm_name = "nacl-trap",399 .index = @enumToInt(Feature.armv5tej),
400 .description = "NaCl trap",400 .name = @tagName(Feature.armv5tej),
401 .dependencies = &[_]*const Feature {401 .llvm_name = "armv5tej",
402 },402 .description = "ARMv5tej architecture",
403};403 .dependencies = featureSet(&[_]Feature{
404404 .v5te,
405pub const feature_noarm = Feature{405 }),
406 .name = "noarm",406 };
407 .llvm_name = "noarm",407 result[@enumToInt(Feature.armv6)] = .{
408 .description = "Does not support ARM mode execution",408 .index = @enumToInt(Feature.armv6),
409 .dependencies = &[_]*const Feature {409 .name = @tagName(Feature.armv6),
410 },410 .llvm_name = "armv6",
411};411 .description = "ARMv6 architecture",
412412 .dependencies = featureSet(&[_]Feature{
413pub const feature_noMovt = Feature{413 .dsp,
414 .name = "noMovt",414 .v6,
415 .llvm_name = "no-movt",415 }),
416 .description = "Don't use movt/movw pairs for 32-bit imms",416 };
417 .dependencies = &[_]*const Feature {417 result[@enumToInt(Feature.armv6_m)] = .{
418 },418 .index = @enumToInt(Feature.armv6_m),
419};419 .name = @tagName(Feature.armv6_m),
420420 .llvm_name = "armv6-m",
421pub const feature_noNegImmediates = Feature{421 .description = "ARMv6m architecture",
422 .name = "noNegImmediates",422 .dependencies = featureSet(&[_]Feature{
423 .llvm_name = "no-neg-immediates",423 .db,
424 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",424 .mclass,
425 .dependencies = &[_]*const Feature {425 .noarm,
426 },426 .strict_align,
427};427 .thumb_mode,
428428 .v6m,
429pub const feature_disablePostraScheduler = Feature{429 }),
430 .name = "disablePostraScheduler",430 };
431 .llvm_name = "disable-postra-scheduler",431 result[@enumToInt(Feature.armv6j)] = .{
432 .description = "Don't schedule again after register allocation",432 .index = @enumToInt(Feature.armv6j),
433 .dependencies = &[_]*const Feature {433 .name = @tagName(Feature.armv6j),
434 },434 .llvm_name = "armv6j",
435};435 .description = "ARMv7a architecture",
436436 .dependencies = featureSet(&[_]Feature{
437pub const feature_nonpipelinedVfp = Feature{437 .armv6,
438 .name = "nonpipelinedVfp",438 }),
439 .llvm_name = "nonpipelined-vfp",439 };
440 .description = "VFP instructions are not pipelined",440 result[@enumToInt(Feature.armv6k)] = .{
441 .dependencies = &[_]*const Feature {441 .index = @enumToInt(Feature.armv6k),
442 },442 .name = @tagName(Feature.armv6k),
443};443 .llvm_name = "armv6k",
444444 .description = "ARMv6k architecture",
445pub const feature_perfmon = Feature{445 .dependencies = featureSet(&[_]Feature{
446 .name = "perfmon",446 .v6k,
447 .llvm_name = "perfmon",447 }),
448 .description = "Enable support for Performance Monitor extensions",448 };
449 .dependencies = &[_]*const Feature {449 result[@enumToInt(Feature.armv6kz)] = .{
450 },450 .index = @enumToInt(Feature.armv6kz),
451};451 .name = @tagName(Feature.armv6kz),
452452 .llvm_name = "armv6kz",
453pub const feature_bit32 = Feature{453 .description = "ARMv6kz architecture",
454 .name = "bit32",454 .dependencies = featureSet(&[_]Feature{
455 .llvm_name = "32bit",455 .trustzone,
456 .description = "Prefer 32-bit Thumb instrs",456 .v6k,
457 .dependencies = &[_]*const Feature {457 }),
458 },458 };
459};459 result[@enumToInt(Feature.armv6s_m)] = .{
460460 .index = @enumToInt(Feature.armv6s_m),
461pub const feature_preferIshst = Feature{461 .name = @tagName(Feature.armv6s_m),
462 .name = "preferIshst",462 .llvm_name = "armv6s-m",
463 .llvm_name = "prefer-ishst",463 .description = "ARMv6sm architecture",
464 .description = "Prefer ISHST barriers",464 .dependencies = featureSet(&[_]Feature{
465 .dependencies = &[_]*const Feature {465 .db,
466 },466 .mclass,
467};467 .noarm,
468468 .strict_align,
469pub const feature_loopAlign = Feature{469 .thumb_mode,
470 .name = "loopAlign",470 .v6m,
471 .llvm_name = "loop-align",471 }),
472 .description = "Prefer 32-bit alignment for loops",472 };
473 .dependencies = &[_]*const Feature {473 result[@enumToInt(Feature.armv6t2)] = .{
474 },474 .index = @enumToInt(Feature.armv6t2),
475};475 .name = @tagName(Feature.armv6t2),
476476 .llvm_name = "armv6t2",
477pub const feature_preferVmovsr = Feature{477 .description = "ARMv6t2 architecture",
478 .name = "preferVmovsr",478 .dependencies = featureSet(&[_]Feature{
479 .llvm_name = "prefer-vmovsr",479 .dsp,
480 .description = "Prefer VMOVSR",480 .v6t2,
481 .dependencies = &[_]*const Feature {481 }),
482 },482 };
483};483 result[@enumToInt(Feature.armv7_a)] = .{
484484 .index = @enumToInt(Feature.armv7_a),
485pub const feature_profUnpr = Feature{485 .name = @tagName(Feature.armv7_a),
486 .name = "profUnpr",486 .llvm_name = "armv7-a",
487 .llvm_name = "prof-unpr",487 .description = "ARMv7a architecture",
488 .description = "Is profitable to unpredicate",488 .dependencies = featureSet(&[_]Feature{
489 .dependencies = &[_]*const Feature {489 .aclass,
490 },490 .db,
491};491 .dsp,
492492 .neon,
493pub const feature_ras = Feature{493 .v7,
494 .name = "ras",494 }),
495 .llvm_name = "ras",495 };
496 .description = "Enable Reliability, Availability and Serviceability extensions",496 result[@enumToInt(Feature.armv7_m)] = .{
497 .dependencies = &[_]*const Feature {497 .index = @enumToInt(Feature.armv7_m),
498 },498 .name = @tagName(Feature.armv7_m),
499};499 .llvm_name = "armv7-m",
500500 .description = "ARMv7m architecture",
501pub const feature_rclass = Feature{501 .dependencies = featureSet(&[_]Feature{
502 .name = "rclass",502 .db,
503 .llvm_name = "rclass",503 .hwdiv,
504 .description = "Is realtime profile ('R' series)",504 .mclass,
505 .dependencies = &[_]*const Feature {505 .noarm,
506 },506 .thumb_mode,
507};507 .thumb2,
508508 .v7,
509pub const feature_readTpHard = Feature{509 }),
510 .name = "readTpHard",510 };
511 .llvm_name = "read-tp-hard",511 result[@enumToInt(Feature.armv7_r)] = .{
512 .description = "Reading thread pointer from register",512 .index = @enumToInt(Feature.armv7_r),
513 .dependencies = &[_]*const Feature {513 .name = @tagName(Feature.armv7_r),
514 },514 .llvm_name = "armv7-r",
515};515 .description = "ARMv7r architecture",
516516 .dependencies = featureSet(&[_]Feature{
517pub const feature_reserveR9 = Feature{517 .db,
518 .name = "reserveR9",518 .dsp,
519 .llvm_name = "reserve-r9",519 .hwdiv,
520 .description = "Reserve R9, making it unavailable as GPR",520 .rclass,
521 .dependencies = &[_]*const Feature {521 .v7,
522 },522 }),
523};523 };
524524 result[@enumToInt(Feature.armv7e_m)] = .{
525pub const feature_sb = Feature{525 .index = @enumToInt(Feature.armv7e_m),
526 .name = "sb",526 .name = @tagName(Feature.armv7e_m),
527 .llvm_name = "sb",527 .llvm_name = "armv7e-m",
528 .description = "Enable v8.5a Speculation Barrier",528 .description = "ARMv7em architecture",
529 .dependencies = &[_]*const Feature {529 .dependencies = featureSet(&[_]Feature{
530 },530 .db,
531};531 .dsp,
532532 .hwdiv,
533pub const feature_sha2 = Feature{533 .mclass,
534 .name = "sha2",534 .noarm,
535 .llvm_name = "sha2",535 .thumb_mode,
536 .description = "Enable SHA1 and SHA256 support",536 .thumb2,
537 .dependencies = &[_]*const Feature {537 .v7,
538 &feature_fpregs,538 }),
539 &feature_d32,539 };
540 },540 result[@enumToInt(Feature.armv7k)] = .{
541};541 .index = @enumToInt(Feature.armv7k),
542542 .name = @tagName(Feature.armv7k),
543pub const feature_slowFpBrcc = Feature{543 .llvm_name = "armv7k",
544 .name = "slowFpBrcc",544 .description = "ARMv7a architecture",
545 .llvm_name = "slow-fp-brcc",545 .dependencies = featureSet(&[_]Feature{
546 .description = "FP compare + branch is slow",546 .armv7_a,
547 .dependencies = &[_]*const Feature {547 }),
548 },548 };
549};549 result[@enumToInt(Feature.armv7s)] = .{
550550 .index = @enumToInt(Feature.armv7s),
551pub const feature_slowLoadDSubreg = Feature{551 .name = @tagName(Feature.armv7s),
552 .name = "slowLoadDSubreg",552 .llvm_name = "armv7s",
553 .llvm_name = "slow-load-D-subreg",553 .description = "ARMv7a architecture",
554 .description = "Loading into D subregs is slow",554 .dependencies = featureSet(&[_]Feature{
555 .dependencies = &[_]*const Feature {555 .armv7_a,
556 },556 }),
557};557 };
558558 result[@enumToInt(Feature.armv7ve)] = .{
559pub const feature_slowOddReg = Feature{559 .index = @enumToInt(Feature.armv7ve),
560 .name = "slowOddReg",560 .name = @tagName(Feature.armv7ve),
561 .llvm_name = "slow-odd-reg",561 .llvm_name = "armv7ve",
562 .description = "VLDM/VSTM starting with an odd register is slow",562 .description = "ARMv7ve architecture",
563 .dependencies = &[_]*const Feature {563 .dependencies = featureSet(&[_]Feature{
564 },564 .aclass,
565};565 .db,
566566 .dsp,
567pub const feature_slowVdup32 = Feature{567 .mp,
568 .name = "slowVdup32",568 .neon,
569 .llvm_name = "slow-vdup32",569 .trustzone,
570 .description = "Has slow VDUP32 - prefer VMOV",570 .v7,
571 .dependencies = &[_]*const Feature {571 .virtualization,
572 },572 }),
573};573 };
574574 result[@enumToInt(Feature.armv8_a)] = .{
575pub const feature_slowVgetlni32 = Feature{575 .index = @enumToInt(Feature.armv8_a),
576 .name = "slowVgetlni32",576 .name = @tagName(Feature.armv8_a),
577 .llvm_name = "slow-vgetlni32",577 .llvm_name = "armv8-a",
578 .description = "Has slow VGETLNi32 - prefer VMOV",578 .description = "ARMv8a architecture",
579 .dependencies = &[_]*const Feature {579 .dependencies = featureSet(&[_]Feature{
580 },580 .aclass,
581};581 .crc,
582582 .crypto,
583pub const feature_splatVfpNeon = Feature{583 .db,
584 .name = "splatVfpNeon",584 .dsp,
585 .llvm_name = "splat-vfp-neon",585 .fp_armv8,
586 .description = "Splat register from VFP to NEON",586 .mp,
587 .dependencies = &[_]*const Feature {587 .neon,
588 &feature_dontWidenVmovs,588 .trustzone,
589 },589 .v8,
590};590 .virtualization,
591591 }),
592pub const feature_strictAlign = Feature{592 };
593 .name = "strictAlign",593 result[@enumToInt(Feature.armv8_m_base)] = .{
594 .llvm_name = "strict-align",594 .index = @enumToInt(Feature.armv8_m_base),
595 .description = "Disallow all unaligned memory access",595 .name = @tagName(Feature.armv8_m_base),
596 .dependencies = &[_]*const Feature {596 .llvm_name = "armv8-m.base",
597 },597 .description = "ARMv8mBaseline architecture",
598};598 .dependencies = featureSet(&[_]Feature{
599599 .@"8msecext",
600pub const feature_thumb2 = Feature{600 .acquire_release,
601 .name = "thumb2",601 .db,
602 .llvm_name = "thumb2",602 .hwdiv,
603 .description = "Enable Thumb2 instructions",603 .mclass,
604 .dependencies = &[_]*const Feature {604 .noarm,
605 },605 .strict_align,
606};606 .thumb_mode,
607607 .v7clrex,
608pub const feature_trustzone = Feature{608 .v8m,
609 .name = "trustzone",609 }),
610 .llvm_name = "trustzone",610 };
611 .description = "Enable support for TrustZone security extensions",611 result[@enumToInt(Feature.armv8_m_main)] = .{
612 .dependencies = &[_]*const Feature {612 .index = @enumToInt(Feature.armv8_m_main),
613 },613 .name = @tagName(Feature.armv8_m_main),
614};614 .llvm_name = "armv8-m.main",
615615 .description = "ARMv8mMainline architecture",
616pub const feature_useAa = Feature{616 .dependencies = featureSet(&[_]Feature{
617 .name = "useAa",617 .@"8msecext",
618 .llvm_name = "use-aa",618 .acquire_release,
619 .description = "Use alias analysis during codegen",619 .db,
620 .dependencies = &[_]*const Feature {620 .hwdiv,
621 },621 .mclass,
622};622 .noarm,
623623 .thumb_mode,
624pub const feature_useMisched = Feature{624 .v8m_main,
625 .name = "useMisched",625 }),
626 .llvm_name = "use-misched",626 };
627 .description = "Use the MachineScheduler",627 result[@enumToInt(Feature.armv8_r)] = .{
628 .dependencies = &[_]*const Feature {628 .index = @enumToInt(Feature.armv8_r),
629 },629 .name = @tagName(Feature.armv8_r),
630};630 .llvm_name = "armv8-r",
631631 .description = "ARMv8r architecture",
632pub const feature_wideStrideVfp = Feature{632 .dependencies = featureSet(&[_]Feature{
633 .name = "wideStrideVfp",633 .crc,
634 .llvm_name = "wide-stride-vfp",634 .db,
635 .description = "Use a wide stride when allocating VFP registers",635 .dfb,
636 .dependencies = &[_]*const Feature {636 .dsp,
637 },637 .fp_armv8,
638};638 .mp,
639639 .neon,
640pub const feature_v7clrex = Feature{640 .rclass,
641 .name = "v7clrex",641 .v8,
642 .llvm_name = "v7clrex",642 .virtualization,
643 .description = "Has v7 clrex instruction",643 }),
644 .dependencies = &[_]*const Feature {644 };
645 },645 result[@enumToInt(Feature.armv8_1_a)] = .{
646};646 .index = @enumToInt(Feature.armv8_1_a),
647647 .name = @tagName(Feature.armv8_1_a),
648pub const feature_vfp2 = Feature{648 .llvm_name = "armv8.1-a",
649 .name = "vfp2",649 .description = "ARMv81a architecture",
650 .llvm_name = "vfp2",650 .dependencies = featureSet(&[_]Feature{
651 .description = "Enable VFP2 instructions",651 .aclass,
652 .dependencies = &[_]*const Feature {652 .crc,
653 &feature_d32,653 .crypto,
654 &feature_fpregs,654 .db,
655 },655 .dsp,
656};656 .fp_armv8,
657657 .mp,
658pub const feature_vfp2d16 = Feature{658 .neon,
659 .name = "vfp2d16",659 .trustzone,
660 .llvm_name = "vfp2d16",660 .v8_1a,
661 .description = "Enable VFP2 instructions with only 16 d-registers",661 .virtualization,
662 .dependencies = &[_]*const Feature {662 }),
663 &feature_fpregs,663 };
664 },664 result[@enumToInt(Feature.armv8_1_m_main)] = .{
665};665 .index = @enumToInt(Feature.armv8_1_m_main),
666666 .name = @tagName(Feature.armv8_1_m_main),
667pub const feature_vfp2d16sp = Feature{667 .llvm_name = "armv8.1-m.main",
668 .name = "vfp2d16sp",668 .description = "ARMv81mMainline architecture",
669 .llvm_name = "vfp2d16sp",669 .dependencies = featureSet(&[_]Feature{
670 .description = "Enable VFP2 instructions with only 16 d-registers and no double precision",670 .@"8msecext",
671 .dependencies = &[_]*const Feature {671 .acquire_release,
672 &feature_fpregs,672 .db,
673 },673 .hwdiv,
674};674 .lob,
675675 .mclass,
676pub const feature_vfp2sp = Feature{676 .noarm,
677 .name = "vfp2sp",677 .ras,
678 .llvm_name = "vfp2sp",678 .thumb_mode,
679 .description = "Enable VFP2 instructions with no double precision",679 .v8_1m_main,
680 .dependencies = &[_]*const Feature {680 }),
681 &feature_fpregs,681 };
682 &feature_d32,682 result[@enumToInt(Feature.armv8_2_a)] = .{
683 },683 .index = @enumToInt(Feature.armv8_2_a),
684};684 .name = @tagName(Feature.armv8_2_a),
685685 .llvm_name = "armv8.2-a",
686pub const feature_vfp3 = Feature{686 .description = "ARMv82a architecture",
687 .name = "vfp3",687 .dependencies = featureSet(&[_]Feature{
688 .llvm_name = "vfp3",688 .aclass,
689 .description = "Enable VFP3 instructions",689 .crc,
690 .dependencies = &[_]*const Feature {690 .crypto,
691 &feature_fpregs,691 .db,
692 &feature_d32,692 .dsp,
693 },693 .fp_armv8,
694};694 .mp,
695695 .neon,
696pub const feature_vfp3d16 = Feature{696 .ras,
697 .name = "vfp3d16",697 .trustzone,
698 .llvm_name = "vfp3d16",698 .v8_2a,
699 .description = "Enable VFP3 instructions with only 16 d-registers",699 .virtualization,
700 .dependencies = &[_]*const Feature {700 }),
701 &feature_fpregs,701 };
702 },702 result[@enumToInt(Feature.armv8_3_a)] = .{
703};703 .index = @enumToInt(Feature.armv8_3_a),
704704 .name = @tagName(Feature.armv8_3_a),
705pub const feature_vfp3d16sp = Feature{705 .llvm_name = "armv8.3-a",
706 .name = "vfp3d16sp",706 .description = "ARMv83a architecture",
707 .llvm_name = "vfp3d16sp",707 .dependencies = featureSet(&[_]Feature{
708 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",708 .aclass,
709 .dependencies = &[_]*const Feature {709 .crc,
710 &feature_fpregs,710 .crypto,
711 },711 .db,
712};712 .dsp,
713713 .fp_armv8,
714pub const feature_vfp3sp = Feature{714 .mp,
715 .name = "vfp3sp",715 .neon,
716 .llvm_name = "vfp3sp",716 .ras,
717 .description = "Enable VFP3 instructions with no double precision",717 .trustzone,
718 .dependencies = &[_]*const Feature {718 .v8_3a,
719 &feature_fpregs,719 .virtualization,
720 &feature_d32,720 }),
721 },721 };
722};722 result[@enumToInt(Feature.armv8_4_a)] = .{
723723 .index = @enumToInt(Feature.armv8_4_a),
724pub const feature_vfp4 = Feature{724 .name = @tagName(Feature.armv8_4_a),
725 .name = "vfp4",725 .llvm_name = "armv8.4-a",
726 .llvm_name = "vfp4",726 .description = "ARMv84a architecture",
727 .description = "Enable VFP4 instructions",727 .dependencies = featureSet(&[_]Feature{
728 .dependencies = &[_]*const Feature {728 .aclass,
729 &feature_fp16,729 .crc,
730 &feature_d32,730 .crypto,
731 &feature_fpregs,731 .db,
732 },732 .dotprod,
733};733 .dsp,
734734 .fp_armv8,
735pub const feature_vfp4d16 = Feature{735 .mp,
736 .name = "vfp4d16",736 .neon,
737 .llvm_name = "vfp4d16",737 .ras,
738 .description = "Enable VFP4 instructions with only 16 d-registers",738 .trustzone,
739 .dependencies = &[_]*const Feature {739 .v8_4a,
740 &feature_fp16,740 .virtualization,
741 &feature_fpregs,741 }),
742 },742 };
743};743 result[@enumToInt(Feature.armv8_5_a)] = .{
744744 .index = @enumToInt(Feature.armv8_5_a),
745pub const feature_vfp4d16sp = Feature{745 .name = @tagName(Feature.armv8_5_a),
746 .name = "vfp4d16sp",746 .llvm_name = "armv8.5-a",
747 .llvm_name = "vfp4d16sp",747 .description = "ARMv85a architecture",
748 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",748 .dependencies = featureSet(&[_]Feature{
749 .dependencies = &[_]*const Feature {749 .aclass,
750 &feature_fp16,750 .crc,
751 &feature_fpregs,751 .crypto,
752 },752 .db,
753};753 .dotprod,
754754 .dsp,
755pub const feature_vfp4sp = Feature{755 .fp_armv8,
756 .name = "vfp4sp",756 .mp,
757 .llvm_name = "vfp4sp",757 .neon,
758 .description = "Enable VFP4 instructions with no double precision",758 .ras,
759 .dependencies = &[_]*const Feature {759 .trustzone,
760 &feature_fp16,760 .v8_5a,
761 &feature_fpregs,761 .virtualization,
762 &feature_d32,762 }),
763 },763 };
764};764 result[@enumToInt(Feature.avoid_movs_shop)] = .{
765765 .index = @enumToInt(Feature.avoid_movs_shop),
766pub const feature_vmlxForwarding = Feature{766 .name = @tagName(Feature.avoid_movs_shop),
767 .name = "vmlxForwarding",767 .llvm_name = "avoid-movs-shop",
768 .llvm_name = "vmlx-forwarding",768 .description = "Avoid movs instructions with shifter operand",
769 .description = "Has multiplier accumulator forwarding",769 .dependencies = 0,
770 .dependencies = &[_]*const Feature {770 };
771 },771 result[@enumToInt(Feature.avoid_partial_cpsr)] = .{
772};772 .index = @enumToInt(Feature.avoid_partial_cpsr),
773773 .name = @tagName(Feature.avoid_partial_cpsr),
774pub const feature_virtualization = Feature{774 .llvm_name = "avoid-partial-cpsr",
775 .name = "virtualization",775 .description = "Avoid CPSR partial update for OOO execution",
776 .llvm_name = "virtualization",776 .dependencies = 0,
777 .description = "Supports Virtualization extension",777 };
778 .dependencies = &[_]*const Feature {778 result[@enumToInt(Feature.cheap_predicable_cpsr)] = .{
779 &feature_hwdiv,779 .index = @enumToInt(Feature.cheap_predicable_cpsr),
780 &feature_hwdivArm,780 .name = @tagName(Feature.cheap_predicable_cpsr),
781 },781 .llvm_name = "cheap-predicable-cpsr",
782};782 .description = "Disable +1 predication cost for instructions updating CPSR",
783783 .dependencies = 0,
784pub const feature_zcz = Feature{784 };
785 .name = "zcz",785 result[@enumToInt(Feature.crc)] = .{
786 .llvm_name = "zcz",786 .index = @enumToInt(Feature.crc),
787 .description = "Has zero-cycle zeroing instructions",787 .name = @tagName(Feature.crc),
788 .dependencies = &[_]*const Feature {788 .llvm_name = "crc",
789 },789 .description = "Enable support for CRC instructions",
790};790 .dependencies = 0,
791791 };
792pub const features = &[_]*const Feature {792 result[@enumToInt(Feature.crypto)] = .{
793 &feature_msecext8,793 .index = @enumToInt(Feature.crypto),
794 &feature_aclass,794 .name = @tagName(Feature.crypto),
795 &feature_aes,795 .llvm_name = "crypto",
796 &feature_acquireRelease,796 .description = "Enable support for Cryptography extensions",
797 &feature_avoidMovsShop,797 .dependencies = featureSet(&[_]Feature{
798 &feature_avoidPartialCpsr,798 .aes,
799 &feature_crc,799 .neon,
800 &feature_cheapPredicableCpsr,800 .sha2,
801 &feature_vldnAlign,801 }),
802 &feature_crypto,802 };
803 &feature_d32,803 result[@enumToInt(Feature.d32)] = .{
804 &feature_db,804 .index = @enumToInt(Feature.d32),
805 &feature_dfb,805 .name = @tagName(Feature.d32),
806 &feature_dsp,806 .llvm_name = "d32",
807 &feature_dontWidenVmovs,807 .description = "Extend FP to 32 double registers",
808 &feature_dotprod,808 .dependencies = 0,
809 &feature_executeOnly,809 };
810 &feature_expandFpMlx,810 result[@enumToInt(Feature.db)] = .{
811 &feature_fp16,811 .index = @enumToInt(Feature.db),
812 &feature_fp16fml,812 .name = @tagName(Feature.db),
813 &feature_fp64,813 .llvm_name = "db",
814 &feature_fpao,814 .description = "Has data barrier (dmb/dsb) instructions",
815 &feature_fpArmv8,815 .dependencies = 0,
816 &feature_fpArmv8d16,816 };
817 &feature_fpArmv8d16sp,817 result[@enumToInt(Feature.dfb)] = .{
818 &feature_fpArmv8sp,818 .index = @enumToInt(Feature.dfb),
819 &feature_fpregs,819 .name = @tagName(Feature.dfb),
820 &feature_fpregs16,820 .llvm_name = "dfb",
821 &feature_fpregs64,821 .description = "Has full data barrier (dfb) instruction",
822 &feature_fullfp16,822 .dependencies = 0,
823 &feature_fuseAes,823 };
824 &feature_fuseLiterals,824 result[@enumToInt(Feature.disable_postra_scheduler)] = .{
825 &feature_hwdivArm,825 .index = @enumToInt(Feature.disable_postra_scheduler),
826 &feature_hwdiv,826 .name = @tagName(Feature.disable_postra_scheduler),
827 &feature_noBranchPredictor,827 .llvm_name = "disable-postra-scheduler",
828 &feature_retAddrStack,828 .description = "Don't schedule again after register allocation",
829 &feature_slowfpvmlx,829 .dependencies = 0,
830 &feature_vmlxHazards,830 };
831 &feature_lob,831 result[@enumToInt(Feature.dont_widen_vmovs)] = .{
832 &feature_longCalls,832 .index = @enumToInt(Feature.dont_widen_vmovs),
833 &feature_mclass,833 .name = @tagName(Feature.dont_widen_vmovs),
834 &feature_mp,834 .llvm_name = "dont-widen-vmovs",
835 &feature_muxedUnits,835 .description = "Don't widen VMOVS to VMOVD",
836 &feature_neon,836 .dependencies = 0,
837 &feature_neonfp,837 };
838 &feature_neonFpmovs,838 result[@enumToInt(Feature.dotprod)] = .{
839 &feature_naclTrap,839 .index = @enumToInt(Feature.dotprod),
840 &feature_noarm,840 .name = @tagName(Feature.dotprod),
841 &feature_noMovt,841 .llvm_name = "dotprod",
842 &feature_noNegImmediates,842 .description = "Enable support for dot product instructions",
843 &feature_disablePostraScheduler,843 .dependencies = featureSet(&[_]Feature{
844 &feature_nonpipelinedVfp,844 .neon,
845 &feature_perfmon,845 }),
846 &feature_bit32,846 };
847 &feature_preferIshst,847 result[@enumToInt(Feature.dsp)] = .{
848 &feature_loopAlign,848 .index = @enumToInt(Feature.dsp),
849 &feature_preferVmovsr,849 .name = @tagName(Feature.dsp),
850 &feature_profUnpr,850 .llvm_name = "dsp",
851 &feature_ras,851 .description = "Supports DSP instructions in ARM and/or Thumb2",
852 &feature_rclass,852 .dependencies = 0,
853 &feature_readTpHard,853 };
854 &feature_reserveR9,854 result[@enumToInt(Feature.execute_only)] = .{
855 &feature_sb,855 .index = @enumToInt(Feature.execute_only),
856 &feature_sha2,856 .name = @tagName(Feature.execute_only),
857 &feature_slowFpBrcc,857 .llvm_name = "execute-only",
858 &feature_slowLoadDSubreg,858 .description = "Enable the generation of execute only code.",
859 &feature_slowOddReg,859 .dependencies = 0,
860 &feature_slowVdup32,860 };
861 &feature_slowVgetlni32,861 result[@enumToInt(Feature.expand_fp_mlx)] = .{
862 &feature_splatVfpNeon,862 .index = @enumToInt(Feature.expand_fp_mlx),
863 &feature_strictAlign,863 .name = @tagName(Feature.expand_fp_mlx),
864 &feature_thumb2,864 .llvm_name = "expand-fp-mlx",
865 &feature_trustzone,865 .description = "Expand VFP/NEON MLA/MLS instructions",
866 &feature_useAa,866 .dependencies = 0,
867 &feature_useMisched,867 };
868 &feature_wideStrideVfp,868 result[@enumToInt(Feature.exynos)] = .{
869 &feature_v7clrex,869 .index = @enumToInt(Feature.exynos),
870 &feature_vfp2,870 .name = @tagName(Feature.exynos),
871 &feature_vfp2d16,871 .llvm_name = "exynos",
872 &feature_vfp2d16sp,872 .description = "Samsung Exynos processors",
873 &feature_vfp2sp,873 .dependencies = featureSet(&[_]Feature{
874 &feature_vfp3,874 .crc,
875 &feature_vfp3d16,875 .crypto,
876 &feature_vfp3d16sp,876 .expand_fp_mlx,
877 &feature_vfp3sp,877 .fuse_aes,
878 &feature_vfp4,878 .fuse_literals,
879 &feature_vfp4d16,879 .hwdiv,
880 &feature_vfp4d16sp,880 .hwdiv_arm,
881 &feature_vfp4sp,881 .prof_unpr,
882 &feature_vmlxForwarding,882 .ret_addr_stack,
883 &feature_virtualization,883 .slow_fp_brcc,
884 &feature_zcz,884 .slow_vdup32,
885};885 .slow_vgetlni32,
886886 .slowfpvmlx,
887pub const cpu_arm1020e = Cpu{887 .splat_vfp_neon,
888 .name = "arm1020e",888 .use_aa,
889 .llvm_name = "arm1020e",889 .wide_stride_vfp,
890 .dependencies = &[_]*const Feature {890 .zcz,
891 },891 }),
892};892 };
893893 result[@enumToInt(Feature.fp_armv8)] = .{
894pub const cpu_arm1020t = Cpu{894 .index = @enumToInt(Feature.fp_armv8),
895 .name = "arm1020t",895 .name = @tagName(Feature.fp_armv8),
896 .llvm_name = "arm1020t",896 .llvm_name = "fp-armv8",
897 .dependencies = &[_]*const Feature {897 .description = "Enable ARMv8 FP",
898 },898 .dependencies = featureSet(&[_]Feature{
899};899 .fp_armv8d16,
900900 .fp_armv8sp,
901pub const cpu_arm1022e = Cpu{901 .vfp4,
902 .name = "arm1022e",902 }),
903 .llvm_name = "arm1022e",903 };
904 .dependencies = &[_]*const Feature {904 result[@enumToInt(Feature.fp_armv8d16)] = .{
905 },905 .index = @enumToInt(Feature.fp_armv8d16),
906};906 .name = @tagName(Feature.fp_armv8d16),
907907 .llvm_name = "fp-armv8d16",
908pub const cpu_arm10e = Cpu{908 .description = "Enable ARMv8 FP with only 16 d-registers",
909 .name = "arm10e",909 .dependencies = featureSet(&[_]Feature{
910 .llvm_name = "arm10e",910 .fp_armv8d16sp,
911 .dependencies = &[_]*const Feature {911 .fp64,
912 },912 .vfp4d16,
913};913 }),
914914 };
915pub const cpu_arm10tdmi = Cpu{915 result[@enumToInt(Feature.fp_armv8d16sp)] = .{
916 .name = "arm10tdmi",916 .index = @enumToInt(Feature.fp_armv8d16sp),
917 .llvm_name = "arm10tdmi",917 .name = @tagName(Feature.fp_armv8d16sp),
918 .dependencies = &[_]*const Feature {918 .llvm_name = "fp-armv8d16sp",
919 },919 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",
920};920 .dependencies = featureSet(&[_]Feature{
921921 .vfp4d16sp,
922pub const cpu_arm1136jS = Cpu{922 }),
923 .name = "arm1136jS",923 };
924 .llvm_name = "arm1136j-s",924 result[@enumToInt(Feature.fp_armv8sp)] = .{
925 .dependencies = &[_]*const Feature {925 .index = @enumToInt(Feature.fp_armv8sp),
926 &feature_dsp,926 .name = @tagName(Feature.fp_armv8sp),
927 },927 .llvm_name = "fp-armv8sp",
928};928 .description = "Enable ARMv8 FP with no double precision",
929929 .dependencies = featureSet(&[_]Feature{
930pub const cpu_arm1136jfS = Cpu{930 .d32,
931 .name = "arm1136jfS",931 .fp_armv8d16sp,
932 .llvm_name = "arm1136jf-s",932 .vfp4sp,
933 .dependencies = &[_]*const Feature {933 }),
934 &feature_dsp,934 };
935 &feature_slowfpvmlx,935 result[@enumToInt(Feature.fp16)] = .{
936 &feature_d32,936 .index = @enumToInt(Feature.fp16),
937 &feature_fpregs,937 .name = @tagName(Feature.fp16),
938 &feature_vfp2,938 .llvm_name = "fp16",
939 },939 .description = "Enable half-precision floating point",
940};940 .dependencies = 0,
941941 };
942pub const cpu_arm1156t2S = Cpu{942 result[@enumToInt(Feature.fp16fml)] = .{
943 .name = "arm1156t2S",943 .index = @enumToInt(Feature.fp16fml),
944 .llvm_name = "arm1156t2-s",944 .name = @tagName(Feature.fp16fml),
945 .dependencies = &[_]*const Feature {945 .llvm_name = "fp16fml",
946 &feature_dsp,946 .description = "Enable full half-precision floating point fml instructions",
947 &feature_thumb2,947 .dependencies = featureSet(&[_]Feature{
948 },948 .fullfp16,
949};949 }),
950950 };
951pub const cpu_arm1156t2fS = Cpu{951 result[@enumToInt(Feature.fp64)] = .{
952 .name = "arm1156t2fS",952 .index = @enumToInt(Feature.fp64),
953 .llvm_name = "arm1156t2f-s",953 .name = @tagName(Feature.fp64),
954 .dependencies = &[_]*const Feature {954 .llvm_name = "fp64",
955 &feature_dsp,955 .description = "Floating point unit supports double precision",
956 &feature_thumb2,956 .dependencies = featureSet(&[_]Feature{
957 &feature_slowfpvmlx,957 .fpregs64,
958 &feature_d32,958 }),
959 &feature_fpregs,959 };
960 &feature_vfp2,960 result[@enumToInt(Feature.fpao)] = .{
961 },961 .index = @enumToInt(Feature.fpao),
962};962 .name = @tagName(Feature.fpao),
963963 .llvm_name = "fpao",
964pub const cpu_arm1176jS = Cpu{964 .description = "Enable fast computation of positive address offsets",
965 .name = "arm1176jS",965 .dependencies = 0,
966 .llvm_name = "arm1176j-s",966 };
967 .dependencies = &[_]*const Feature {967 result[@enumToInt(Feature.fpregs)] = .{
968 &feature_trustzone,968 .index = @enumToInt(Feature.fpregs),
969 },969 .name = @tagName(Feature.fpregs),
970};970 .llvm_name = "fpregs",
971971 .description = "Enable FP registers",
972pub const cpu_arm1176jzS = Cpu{972 .dependencies = 0,
973 .name = "arm1176jzS",973 };
974 .llvm_name = "arm1176jz-s",974 result[@enumToInt(Feature.fpregs16)] = .{
975 .dependencies = &[_]*const Feature {975 .index = @enumToInt(Feature.fpregs16),
976 &feature_trustzone,976 .name = @tagName(Feature.fpregs16),
977 },977 .llvm_name = "fpregs16",
978};978 .description = "Enable 16-bit FP registers",
979979 .dependencies = featureSet(&[_]Feature{
980pub const cpu_arm1176jzfS = Cpu{980 .fpregs,
981 .name = "arm1176jzfS",981 }),
982 .llvm_name = "arm1176jzf-s",982 };
983 .dependencies = &[_]*const Feature {983 result[@enumToInt(Feature.fpregs64)] = .{
984 &feature_trustzone,984 .index = @enumToInt(Feature.fpregs64),
985 &feature_slowfpvmlx,985 .name = @tagName(Feature.fpregs64),
986 &feature_d32,986 .llvm_name = "fpregs64",
987 &feature_fpregs,987 .description = "Enable 64-bit FP registers",
988 &feature_vfp2,988 .dependencies = featureSet(&[_]Feature{
989 },989 .fpregs,
990};990 }),
991991 };
992pub const cpu_arm710t = Cpu{992 result[@enumToInt(Feature.fullfp16)] = .{
993 .name = "arm710t",993 .index = @enumToInt(Feature.fullfp16),
994 .llvm_name = "arm710t",994 .name = @tagName(Feature.fullfp16),
995 .dependencies = &[_]*const Feature {995 .llvm_name = "fullfp16",
996 },996 .description = "Enable full half-precision floating point",
997};997 .dependencies = featureSet(&[_]Feature{
998998 .fp_armv8d16sp,
999pub const cpu_arm720t = Cpu{999 .fpregs16,
1000 .name = "arm720t",1000 }),
1001 .llvm_name = "arm720t",1001 };
1002 .dependencies = &[_]*const Feature {1002 result[@enumToInt(Feature.fuse_aes)] = .{
1003 },1003 .index = @enumToInt(Feature.fuse_aes),
1004};1004 .name = @tagName(Feature.fuse_aes),
10051005 .llvm_name = "fuse-aes",
1006pub const cpu_arm7tdmi = Cpu{1006 .description = "CPU fuses AES crypto operations",
1007 .name = "arm7tdmi",1007 .dependencies = 0,
1008 .llvm_name = "arm7tdmi",1008 };
1009 .dependencies = &[_]*const Feature {1009 result[@enumToInt(Feature.fuse_literals)] = .{
1010 },1010 .index = @enumToInt(Feature.fuse_literals),
1011};1011 .name = @tagName(Feature.fuse_literals),
10121012 .llvm_name = "fuse-literals",
1013pub const cpu_arm7tdmiS = Cpu{1013 .description = "CPU fuses literal generation operations",
1014 .name = "arm7tdmiS",1014 .dependencies = 0,
1015 .llvm_name = "arm7tdmi-s",1015 };
1016 .dependencies = &[_]*const Feature {1016 result[@enumToInt(Feature.hwdiv)] = .{
1017 },1017 .index = @enumToInt(Feature.hwdiv),
1018};1018 .name = @tagName(Feature.hwdiv),
10191019 .llvm_name = "hwdiv",
1020pub const cpu_arm8 = Cpu{1020 .description = "Enable divide instructions in Thumb",
1021 .name = "arm8",1021 .dependencies = 0,
1022 .llvm_name = "arm8",1022 };
1023 .dependencies = &[_]*const Feature {1023 result[@enumToInt(Feature.hwdiv_arm)] = .{
1024 },1024 .index = @enumToInt(Feature.hwdiv_arm),
1025};1025 .name = @tagName(Feature.hwdiv_arm),
10261026 .llvm_name = "hwdiv-arm",
1027pub const cpu_arm810 = Cpu{1027 .description = "Enable divide instructions in ARM mode",
1028 .name = "arm810",1028 .dependencies = 0,
1029 .llvm_name = "arm810",1029 };
1030 .dependencies = &[_]*const Feature {1030 result[@enumToInt(Feature.iwmmxt)] = .{
1031 },1031 .index = @enumToInt(Feature.iwmmxt),
1032};1032 .name = @tagName(Feature.iwmmxt),
10331033 .llvm_name = "iwmmxt",
1034pub const cpu_arm9 = Cpu{1034 .description = "ARMv5te architecture",
1035 .name = "arm9",1035 .dependencies = featureSet(&[_]Feature{
1036 .llvm_name = "arm9",1036 .armv5te,
1037 .dependencies = &[_]*const Feature {1037 }),
1038 },1038 };
1039};1039 result[@enumToInt(Feature.iwmmxt2)] = .{
10401040 .index = @enumToInt(Feature.iwmmxt2),
1041pub const cpu_arm920 = Cpu{1041 .name = @tagName(Feature.iwmmxt2),
1042 .name = "arm920",1042 .llvm_name = "iwmmxt2",
1043 .llvm_name = "arm920",1043 .description = "ARMv5te architecture",
1044 .dependencies = &[_]*const Feature {1044 .dependencies = featureSet(&[_]Feature{
1045 },1045 .armv5te,
1046};1046 }),
10471047 };
1048pub const cpu_arm920t = Cpu{1048 result[@enumToInt(Feature.krait)] = .{
1049 .name = "arm920t",1049 .index = @enumToInt(Feature.krait),
1050 .llvm_name = "arm920t",1050 .name = @tagName(Feature.krait),
1051 .dependencies = &[_]*const Feature {1051 .llvm_name = "krait",
1052 },1052 .description = "Qualcomm Krait processors",
1053};1053 .dependencies = 0,
10541054 };
1055pub const cpu_arm922t = Cpu{1055 result[@enumToInt(Feature.kryo)] = .{
1056 .name = "arm922t",1056 .index = @enumToInt(Feature.kryo),
1057 .llvm_name = "arm922t",1057 .name = @tagName(Feature.kryo),
1058 .dependencies = &[_]*const Feature {1058 .llvm_name = "kryo",
1059 },1059 .description = "Qualcomm Kryo processors",
1060};1060 .dependencies = 0,
10611061 };
1062pub const cpu_arm926ejS = Cpu{1062 result[@enumToInt(Feature.lob)] = .{
1063 .name = "arm926ejS",1063 .index = @enumToInt(Feature.lob),
1064 .llvm_name = "arm926ej-s",1064 .name = @tagName(Feature.lob),
1065 .dependencies = &[_]*const Feature {1065 .llvm_name = "lob",
1066 },1066 .description = "Enable Low Overhead Branch extensions",
1067};1067 .dependencies = 0,
10681068 };
1069pub const cpu_arm940t = Cpu{1069 result[@enumToInt(Feature.long_calls)] = .{
1070 .name = "arm940t",1070 .index = @enumToInt(Feature.long_calls),
1071 .llvm_name = "arm940t",1071 .name = @tagName(Feature.long_calls),
1072 .dependencies = &[_]*const Feature {1072 .llvm_name = "long-calls",
1073 },1073 .description = "Generate calls via indirect call instructions",
1074};1074 .dependencies = 0,
10751075 };
1076pub const cpu_arm946eS = Cpu{1076 result[@enumToInt(Feature.loop_align)] = .{
1077 .name = "arm946eS",1077 .index = @enumToInt(Feature.loop_align),
1078 .llvm_name = "arm946e-s",1078 .name = @tagName(Feature.loop_align),
1079 .dependencies = &[_]*const Feature {1079 .llvm_name = "loop-align",
1080 },1080 .description = "Prefer 32-bit alignment for loops",
1081};1081 .dependencies = 0,
10821082 };
1083pub const cpu_arm966eS = Cpu{1083 result[@enumToInt(Feature.m3)] = .{
1084 .name = "arm966eS",1084 .index = @enumToInt(Feature.m3),
1085 .llvm_name = "arm966e-s",1085 .name = @tagName(Feature.m3),
1086 .dependencies = &[_]*const Feature {1086 .llvm_name = "m3",
1087 },1087 .description = "Cortex-M3 ARM processors",
1088};1088 .dependencies = 0,
10891089 };
1090pub const cpu_arm968eS = Cpu{1090 result[@enumToInt(Feature.mclass)] = .{
1091 .name = "arm968eS",1091 .index = @enumToInt(Feature.mclass),
1092 .llvm_name = "arm968e-s",1092 .name = @tagName(Feature.mclass),
1093 .dependencies = &[_]*const Feature {1093 .llvm_name = "mclass",
1094 },1094 .description = "Is microcontroller profile ('M' series)",
1095};1095 .dependencies = 0,
10961096 };
1097pub const cpu_arm9e = Cpu{1097 result[@enumToInt(Feature.mp)] = .{
1098 .name = "arm9e",1098 .index = @enumToInt(Feature.mp),
1099 .llvm_name = "arm9e",1099 .name = @tagName(Feature.mp),
1100 .dependencies = &[_]*const Feature {1100 .llvm_name = "mp",
1101 },1101 .description = "Supports Multiprocessing extension",
1102};1102 .dependencies = 0,
11031103 };
1104pub const cpu_arm9tdmi = Cpu{1104 result[@enumToInt(Feature.muxed_units)] = .{
1105 .name = "arm9tdmi",1105 .index = @enumToInt(Feature.muxed_units),
1106 .llvm_name = "arm9tdmi",1106 .name = @tagName(Feature.muxed_units),
1107 .dependencies = &[_]*const Feature {1107 .llvm_name = "muxed-units",
1108 },1108 .description = "Has muxed AGU and NEON/FPU",
1109};1109 .dependencies = 0,
11101110 };
1111pub const cpu_cortexA12 = Cpu{1111 result[@enumToInt(Feature.mve)] = .{
1112 .name = "cortexA12",1112 .index = @enumToInt(Feature.mve),
1113 .llvm_name = "cortex-a12",1113 .name = @tagName(Feature.mve),
1114 .dependencies = &[_]*const Feature {1114 .llvm_name = "mve",
1115 &feature_d32,1115 .description = "Support M-Class Vector Extension with integer ops",
1116 &feature_dsp,1116 .dependencies = featureSet(&[_]Feature{
1117 &feature_thumb2,1117 .dsp,
1118 &feature_db,1118 .fpregs16,
1119 &feature_aclass,1119 .fpregs64,
1120 &feature_fpregs,1120 .v8_1m_main,
1121 &feature_v7clrex,1121 }),
1122 &feature_perfmon,1122 };
1123 &feature_avoidPartialCpsr,1123 result[@enumToInt(Feature.mve_fp)] = .{
1124 &feature_retAddrStack,1124 .index = @enumToInt(Feature.mve_fp),
1125 &feature_mp,1125 .name = @tagName(Feature.mve_fp),
1126 &feature_trustzone,1126 .llvm_name = "mve.fp",
1127 &feature_fp16,1127 .description = "Support M-Class Vector Extension with integer and floating ops",
1128 &feature_vfp4,1128 .dependencies = featureSet(&[_]Feature{
1129 &feature_vmlxForwarding,1129 .fp_armv8d16sp,
1130 &feature_hwdiv,1130 .fullfp16,
1131 &feature_hwdivArm,1131 .mve,
1132 &feature_virtualization,1132 }),
1133 },1133 };
1134};1134 result[@enumToInt(Feature.nacl_trap)] = .{
11351135 .index = @enumToInt(Feature.nacl_trap),
1136pub const cpu_cortexA15 = Cpu{1136 .name = @tagName(Feature.nacl_trap),
1137 .name = "cortexA15",1137 .llvm_name = "nacl-trap",
1138 .llvm_name = "cortex-a15",1138 .description = "NaCl trap",
1139 .dependencies = &[_]*const Feature {1139 .dependencies = 0,
1140 &feature_d32,1140 };
1141 &feature_dsp,1141 result[@enumToInt(Feature.neon)] = .{
1142 &feature_thumb2,1142 .index = @enumToInt(Feature.neon),
1143 &feature_db,1143 .name = @tagName(Feature.neon),
1144 &feature_aclass,1144 .llvm_name = "neon",
1145 &feature_fpregs,1145 .description = "Enable NEON instructions",
1146 &feature_v7clrex,1146 .dependencies = featureSet(&[_]Feature{
1147 &feature_perfmon,1147 .vfp3,
1148 &feature_avoidPartialCpsr,1148 }),
1149 &feature_vldnAlign,1149 };
1150 &feature_dontWidenVmovs,1150 result[@enumToInt(Feature.neon_fpmovs)] = .{
1151 &feature_retAddrStack,1151 .index = @enumToInt(Feature.neon_fpmovs),
1152 &feature_mp,1152 .name = @tagName(Feature.neon_fpmovs),
1153 &feature_muxedUnits,1153 .llvm_name = "neon-fpmovs",
1154 &feature_splatVfpNeon,1154 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
1155 &feature_trustzone,1155 .dependencies = 0,
1156 &feature_fp16,1156 };
1157 &feature_vfp4,1157 result[@enumToInt(Feature.neonfp)] = .{
1158 &feature_hwdiv,1158 .index = @enumToInt(Feature.neonfp),
1159 &feature_hwdivArm,1159 .name = @tagName(Feature.neonfp),
1160 &feature_virtualization,1160 .llvm_name = "neonfp",
1161 },1161 .description = "Use NEON for single precision FP",
1162};1162 .dependencies = 0,
11631163 };
1164pub const cpu_cortexA17 = Cpu{1164 result[@enumToInt(Feature.no_branch_predictor)] = .{
1165 .name = "cortexA17",1165 .index = @enumToInt(Feature.no_branch_predictor),
1166 .llvm_name = "cortex-a17",1166 .name = @tagName(Feature.no_branch_predictor),
1167 .dependencies = &[_]*const Feature {1167 .llvm_name = "no-branch-predictor",
1168 &feature_d32,1168 .description = "Has no branch predictor",
1169 &feature_dsp,1169 .dependencies = 0,
1170 &feature_thumb2,1170 };
1171 &feature_db,1171 result[@enumToInt(Feature.no_movt)] = .{
1172 &feature_aclass,1172 .index = @enumToInt(Feature.no_movt),
1173 &feature_fpregs,1173 .name = @tagName(Feature.no_movt),
1174 &feature_v7clrex,1174 .llvm_name = "no-movt",
1175 &feature_perfmon,1175 .description = "Don't use movt/movw pairs for 32-bit imms",
1176 &feature_avoidPartialCpsr,1176 .dependencies = 0,
1177 &feature_retAddrStack,1177 };
1178 &feature_mp,1178 result[@enumToInt(Feature.no_neg_immediates)] = .{
1179 &feature_trustzone,1179 .index = @enumToInt(Feature.no_neg_immediates),
1180 &feature_fp16,1180 .name = @tagName(Feature.no_neg_immediates),
1181 &feature_vfp4,1181 .llvm_name = "no-neg-immediates",
1182 &feature_vmlxForwarding,1182 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
1183 &feature_hwdiv,1183 .dependencies = 0,
1184 &feature_hwdivArm,1184 };
1185 &feature_virtualization,1185 result[@enumToInt(Feature.noarm)] = .{
1186 },1186 .index = @enumToInt(Feature.noarm),
1187};1187 .name = @tagName(Feature.noarm),
11881188 .llvm_name = "noarm",
1189pub const cpu_cortexA32 = Cpu{1189 .description = "Does not support ARM mode execution",
1190 .name = "cortexA32",1190 .dependencies = 0,
1191 .llvm_name = "cortex-a32",1191 };
1192 .dependencies = &[_]*const Feature {1192 result[@enumToInt(Feature.nonpipelined_vfp)] = .{
1193 &feature_hwdiv,1193 .index = @enumToInt(Feature.nonpipelined_vfp),
1194 &feature_mp,1194 .name = @tagName(Feature.nonpipelined_vfp),
1195 &feature_d32,1195 .llvm_name = "nonpipelined-vfp",
1196 &feature_dsp,1196 .description = "VFP instructions are not pipelined",
1197 &feature_thumb2,1197 .dependencies = 0,
1198 &feature_db,1198 };
1199 &feature_aclass,1199 result[@enumToInt(Feature.perfmon)] = .{
1200 &feature_fpregs,1200 .index = @enumToInt(Feature.perfmon),
1201 &feature_trustzone,1201 .name = @tagName(Feature.perfmon),
1202 &feature_crc,1202 .llvm_name = "perfmon",
1203 &feature_fp16,1203 .description = "Enable support for Performance Monitor extensions",
1204 &feature_acquireRelease,1204 .dependencies = 0,
1205 &feature_v7clrex,1205 };
1206 &feature_perfmon,1206 result[@enumToInt(Feature.prefer_ishst)] = .{
1207 &feature_hwdivArm,1207 .index = @enumToInt(Feature.prefer_ishst),
1208 &feature_crypto,1208 .name = @tagName(Feature.prefer_ishst),
1209 },1209 .llvm_name = "prefer-ishst",
1210};1210 .description = "Prefer ISHST barriers",
12111211 .dependencies = 0,
1212pub const cpu_cortexA35 = Cpu{1212 };
1213 .name = "cortexA35",1213 result[@enumToInt(Feature.prefer_vmovsr)] = .{
1214 .llvm_name = "cortex-a35",1214 .index = @enumToInt(Feature.prefer_vmovsr),
1215 .dependencies = &[_]*const Feature {1215 .name = @tagName(Feature.prefer_vmovsr),
1216 &feature_hwdiv,1216 .llvm_name = "prefer-vmovsr",
1217 &feature_mp,1217 .description = "Prefer VMOVSR",
1218 &feature_d32,1218 .dependencies = 0,
1219 &feature_dsp,1219 };
1220 &feature_thumb2,1220 result[@enumToInt(Feature.prof_unpr)] = .{
1221 &feature_db,1221 .index = @enumToInt(Feature.prof_unpr),
1222 &feature_aclass,1222 .name = @tagName(Feature.prof_unpr),
1223 &feature_fpregs,1223 .llvm_name = "prof-unpr",
1224 &feature_trustzone,1224 .description = "Is profitable to unpredicate",
1225 &feature_crc,1225 .dependencies = 0,
1226 &feature_fp16,1226 };
1227 &feature_acquireRelease,1227 result[@enumToInt(Feature.r4)] = .{
1228 &feature_v7clrex,1228 .index = @enumToInt(Feature.r4),
1229 &feature_perfmon,1229 .name = @tagName(Feature.r4),
1230 &feature_hwdivArm,1230 .llvm_name = "r4",
1231 &feature_crypto,1231 .description = "Cortex-R4 ARM processors",
1232 },1232 .dependencies = 0,
1233};1233 };
12341234 result[@enumToInt(Feature.r5)] = .{
1235pub const cpu_cortexA5 = Cpu{1235 .index = @enumToInt(Feature.r5),
1236 .name = "cortexA5",1236 .name = @tagName(Feature.r5),
1237 .llvm_name = "cortex-a5",1237 .llvm_name = "r5",
1238 .dependencies = &[_]*const Feature {1238 .description = "Cortex-R5 ARM processors",
1239 &feature_d32,1239 .dependencies = 0,
1240 &feature_dsp,1240 };
1241 &feature_thumb2,1241 result[@enumToInt(Feature.r52)] = .{
1242 &feature_db,1242 .index = @enumToInt(Feature.r52),
1243 &feature_aclass,1243 .name = @tagName(Feature.r52),
1244 &feature_fpregs,1244 .llvm_name = "r52",
1245 &feature_v7clrex,1245 .description = "Cortex-R52 ARM processors",
1246 &feature_perfmon,1246 .dependencies = 0,
1247 &feature_retAddrStack,1247 };
1248 &feature_slowfpvmlx,1248 result[@enumToInt(Feature.r7)] = .{
1249 &feature_mp,1249 .index = @enumToInt(Feature.r7),
1250 &feature_slowFpBrcc,1250 .name = @tagName(Feature.r7),
1251 &feature_trustzone,1251 .llvm_name = "r7",
1252 &feature_fp16,1252 .description = "Cortex-R7 ARM processors",
1253 &feature_vfp4,1253 .dependencies = 0,
1254 &feature_vmlxForwarding,1254 };
1255 },1255 result[@enumToInt(Feature.ras)] = .{
1256};1256 .index = @enumToInt(Feature.ras),
12571257 .name = @tagName(Feature.ras),
1258pub const cpu_cortexA53 = Cpu{1258 .llvm_name = "ras",
1259 .name = "cortexA53",1259 .description = "Enable Reliability, Availability and Serviceability extensions",
1260 .llvm_name = "cortex-a53",1260 .dependencies = 0,
1261 .dependencies = &[_]*const Feature {1261 };
1262 &feature_hwdiv,1262 result[@enumToInt(Feature.rclass)] = .{
1263 &feature_mp,1263 .index = @enumToInt(Feature.rclass),
1264 &feature_d32,1264 .name = @tagName(Feature.rclass),
1265 &feature_dsp,1265 .llvm_name = "rclass",
1266 &feature_thumb2,1266 .description = "Is realtime profile ('R' series)",
1267 &feature_db,1267 .dependencies = 0,
1268 &feature_aclass,1268 };
1269 &feature_fpregs,1269 result[@enumToInt(Feature.read_tp_hard)] = .{
1270 &feature_trustzone,1270 .index = @enumToInt(Feature.read_tp_hard),
1271 &feature_crc,1271 .name = @tagName(Feature.read_tp_hard),
1272 &feature_fp16,1272 .llvm_name = "read-tp-hard",
1273 &feature_acquireRelease,1273 .description = "Reading thread pointer from register",
1274 &feature_v7clrex,1274 .dependencies = 0,
1275 &feature_perfmon,1275 };
1276 &feature_hwdivArm,1276 result[@enumToInt(Feature.reserve_r9)] = .{
1277 &feature_crypto,1277 .index = @enumToInt(Feature.reserve_r9),
1278 &feature_fpao,1278 .name = @tagName(Feature.reserve_r9),
1279 },1279 .llvm_name = "reserve-r9",
1280};1280 .description = "Reserve R9, making it unavailable as GPR",
12811281 .dependencies = 0,
1282pub const cpu_cortexA55 = Cpu{1282 };
1283 .name = "cortexA55",1283 result[@enumToInt(Feature.ret_addr_stack)] = .{
1284 .llvm_name = "cortex-a55",1284 .index = @enumToInt(Feature.ret_addr_stack),
1285 .dependencies = &[_]*const Feature {1285 .name = @tagName(Feature.ret_addr_stack),
1286 &feature_hwdiv,1286 .llvm_name = "ret-addr-stack",
1287 &feature_mp,1287 .description = "Has return address stack",
1288 &feature_d32,1288 .dependencies = 0,
1289 &feature_dsp,1289 };
1290 &feature_thumb2,1290 result[@enumToInt(Feature.sb)] = .{
1291 &feature_db,1291 .index = @enumToInt(Feature.sb),
1292 &feature_aclass,1292 .name = @tagName(Feature.sb),
1293 &feature_fpregs,1293 .llvm_name = "sb",
1294 &feature_trustzone,1294 .description = "Enable v8.5a Speculation Barrier",
1295 &feature_crc,1295 .dependencies = 0,
1296 &feature_fp16,1296 };
1297 &feature_acquireRelease,1297 result[@enumToInt(Feature.sha2)] = .{
1298 &feature_v7clrex,1298 .index = @enumToInt(Feature.sha2),
1299 &feature_perfmon,1299 .name = @tagName(Feature.sha2),
1300 &feature_hwdivArm,1300 .llvm_name = "sha2",
1301 &feature_ras,1301 .description = "Enable SHA1 and SHA256 support",
1302 &feature_dotprod,1302 .dependencies = featureSet(&[_]Feature{
1303 },1303 .neon,
1304};1304 }),
13051305 };
1306pub const cpu_cortexA57 = Cpu{1306 result[@enumToInt(Feature.slow_fp_brcc)] = .{
1307 .name = "cortexA57",1307 .index = @enumToInt(Feature.slow_fp_brcc),
1308 .llvm_name = "cortex-a57",1308 .name = @tagName(Feature.slow_fp_brcc),
1309 .dependencies = &[_]*const Feature {1309 .llvm_name = "slow-fp-brcc",
1310 &feature_hwdiv,1310 .description = "FP compare + branch is slow",
1311 &feature_mp,1311 .dependencies = 0,
1312 &feature_d32,1312 };
1313 &feature_dsp,1313 result[@enumToInt(Feature.slow_load_D_subreg)] = .{
1314 &feature_thumb2,1314 .index = @enumToInt(Feature.slow_load_D_subreg),
1315 &feature_db,1315 .name = @tagName(Feature.slow_load_D_subreg),
1316 &feature_aclass,1316 .llvm_name = "slow-load-D-subreg",
1317 &feature_fpregs,1317 .description = "Loading into D subregs is slow",
1318 &feature_trustzone,1318 .dependencies = 0,
1319 &feature_crc,1319 };
1320 &feature_fp16,1320 result[@enumToInt(Feature.slow_odd_reg)] = .{
1321 &feature_acquireRelease,1321 .index = @enumToInt(Feature.slow_odd_reg),
1322 &feature_v7clrex,1322 .name = @tagName(Feature.slow_odd_reg),
1323 &feature_perfmon,1323 .llvm_name = "slow-odd-reg",
1324 &feature_hwdivArm,1324 .description = "VLDM/VSTM starting with an odd register is slow",
1325 &feature_avoidPartialCpsr,1325 .dependencies = 0,
1326 &feature_cheapPredicableCpsr,1326 };
1327 &feature_crypto,1327 result[@enumToInt(Feature.slow_vdup32)] = .{
1328 &feature_fpao,1328 .index = @enumToInt(Feature.slow_vdup32),
1329 },1329 .name = @tagName(Feature.slow_vdup32),
1330};1330 .llvm_name = "slow-vdup32",
13311331 .description = "Has slow VDUP32 - prefer VMOV",
1332pub const cpu_cortexA7 = Cpu{1332 .dependencies = 0,
1333 .name = "cortexA7",1333 };
1334 .llvm_name = "cortex-a7",1334 result[@enumToInt(Feature.slow_vgetlni32)] = .{
1335 .dependencies = &[_]*const Feature {1335 .index = @enumToInt(Feature.slow_vgetlni32),
1336 &feature_d32,1336 .name = @tagName(Feature.slow_vgetlni32),
1337 &feature_dsp,1337 .llvm_name = "slow-vgetlni32",
1338 &feature_thumb2,1338 .description = "Has slow VGETLNi32 - prefer VMOV",
1339 &feature_db,1339 .dependencies = 0,
1340 &feature_aclass,1340 };
1341 &feature_fpregs,1341 result[@enumToInt(Feature.slowfpvmlx)] = .{
1342 &feature_v7clrex,1342 .index = @enumToInt(Feature.slowfpvmlx),
1343 &feature_perfmon,1343 .name = @tagName(Feature.slowfpvmlx),
1344 &feature_retAddrStack,1344 .llvm_name = "slowfpvmlx",
1345 &feature_slowfpvmlx,1345 .description = "Disable VFP / NEON MAC instructions",
1346 &feature_vmlxHazards,1346 .dependencies = 0,
1347 &feature_mp,1347 };
1348 &feature_slowFpBrcc,1348 result[@enumToInt(Feature.soft_float)] = .{
1349 &feature_trustzone,1349 .index = @enumToInt(Feature.soft_float),
1350 &feature_fp16,1350 .name = @tagName(Feature.soft_float),
1351 &feature_vfp4,1351 .llvm_name = "soft-float",
1352 &feature_vmlxForwarding,1352 .description = "Use software floating point features.",
1353 &feature_hwdiv,1353 .dependencies = 0,
1354 &feature_hwdivArm,1354 };
1355 &feature_virtualization,1355 result[@enumToInt(Feature.splat_vfp_neon)] = .{
1356 },1356 .index = @enumToInt(Feature.splat_vfp_neon),
1357};1357 .name = @tagName(Feature.splat_vfp_neon),
13581358 .llvm_name = "splat-vfp-neon",
1359pub const cpu_cortexA72 = Cpu{1359 .description = "Splat register from VFP to NEON",
1360 .name = "cortexA72",1360 .dependencies = featureSet(&[_]Feature{
1361 .llvm_name = "cortex-a72",1361 .dont_widen_vmovs,
1362 .dependencies = &[_]*const Feature {1362 }),
1363 &feature_hwdiv,1363 };
1364 &feature_mp,1364 result[@enumToInt(Feature.strict_align)] = .{
1365 &feature_d32,1365 .index = @enumToInt(Feature.strict_align),
1366 &feature_dsp,1366 .name = @tagName(Feature.strict_align),
1367 &feature_thumb2,1367 .llvm_name = "strict-align",
1368 &feature_db,1368 .description = "Disallow all unaligned memory access",
1369 &feature_aclass,1369 .dependencies = 0,
1370 &feature_fpregs,1370 };
1371 &feature_trustzone,1371 result[@enumToInt(Feature.swift)] = .{
1372 &feature_crc,1372 .index = @enumToInt(Feature.swift),
1373 &feature_fp16,1373 .name = @tagName(Feature.swift),
1374 &feature_acquireRelease,1374 .llvm_name = "swift",
1375 &feature_v7clrex,1375 .description = "Swift ARM processors",
1376 &feature_perfmon,1376 .dependencies = 0,
1377 &feature_hwdivArm,1377 };
1378 &feature_crypto,1378 result[@enumToInt(Feature.thumb_mode)] = .{
1379 },1379 .index = @enumToInt(Feature.thumb_mode),
1380};1380 .name = @tagName(Feature.thumb_mode),
13811381 .llvm_name = "thumb-mode",
1382pub const cpu_cortexA73 = Cpu{1382 .description = "Thumb mode",
1383 .name = "cortexA73",1383 .dependencies = 0,
1384 .llvm_name = "cortex-a73",1384 };
1385 .dependencies = &[_]*const Feature {1385 result[@enumToInt(Feature.thumb2)] = .{
1386 &feature_hwdiv,1386 .index = @enumToInt(Feature.thumb2),
1387 &feature_mp,1387 .name = @tagName(Feature.thumb2),
1388 &feature_d32,1388 .llvm_name = "thumb2",
1389 &feature_dsp,1389 .description = "Enable Thumb2 instructions",
1390 &feature_thumb2,1390 .dependencies = 0,
1391 &feature_db,1391 };
1392 &feature_aclass,1392 result[@enumToInt(Feature.trustzone)] = .{
1393 &feature_fpregs,1393 .index = @enumToInt(Feature.trustzone),
1394 &feature_trustzone,1394 .name = @tagName(Feature.trustzone),
1395 &feature_crc,1395 .llvm_name = "trustzone",
1396 &feature_fp16,1396 .description = "Enable support for TrustZone security extensions",
1397 &feature_acquireRelease,1397 .dependencies = 0,
1398 &feature_v7clrex,1398 };
1399 &feature_perfmon,1399 result[@enumToInt(Feature.use_aa)] = .{
1400 &feature_hwdivArm,1400 .index = @enumToInt(Feature.use_aa),
1401 &feature_crypto,1401 .name = @tagName(Feature.use_aa),
1402 },1402 .llvm_name = "use-aa",
1403};1403 .description = "Use alias analysis during codegen",
14041404 .dependencies = 0,
1405pub const cpu_cortexA75 = Cpu{1405 };
1406 .name = "cortexA75",1406 result[@enumToInt(Feature.use_misched)] = .{
1407 .llvm_name = "cortex-a75",1407 .index = @enumToInt(Feature.use_misched),
1408 .dependencies = &[_]*const Feature {1408 .name = @tagName(Feature.use_misched),
1409 &feature_hwdiv,1409 .llvm_name = "use-misched",
1410 &feature_mp,1410 .description = "Use the MachineScheduler",
1411 &feature_d32,1411 .dependencies = 0,
1412 &feature_dsp,1412 };
1413 &feature_thumb2,1413 result[@enumToInt(Feature.v4t)] = .{
1414 &feature_db,1414 .index = @enumToInt(Feature.v4t),
1415 &feature_aclass,1415 .name = @tagName(Feature.v4t),
1416 &feature_fpregs,1416 .llvm_name = "v4t",
1417 &feature_trustzone,1417 .description = "Support ARM v4T instructions",
1418 &feature_crc,1418 .dependencies = 0,
1419 &feature_fp16,1419 };
1420 &feature_acquireRelease,1420 result[@enumToInt(Feature.v5t)] = .{
1421 &feature_v7clrex,1421 .index = @enumToInt(Feature.v5t),
1422 &feature_perfmon,1422 .name = @tagName(Feature.v5t),
1423 &feature_hwdivArm,1423 .llvm_name = "v5t",
1424 &feature_ras,1424 .description = "Support ARM v5T instructions",
1425 &feature_dotprod,1425 .dependencies = featureSet(&[_]Feature{
1426 },1426 .v4t,
1427};1427 }),
14281428 };
1429pub const cpu_cortexA76 = Cpu{1429 result[@enumToInt(Feature.v5te)] = .{
1430 .name = "cortexA76",1430 .index = @enumToInt(Feature.v5te),
1431 .llvm_name = "cortex-a76",1431 .name = @tagName(Feature.v5te),
1432 .dependencies = &[_]*const Feature {1432 .llvm_name = "v5te",
1433 &feature_hwdiv,1433 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
1434 &feature_mp,1434 .dependencies = featureSet(&[_]Feature{
1435 &feature_d32,1435 .v5t,
1436 &feature_dsp,1436 }),
1437 &feature_thumb2,1437 };
1438 &feature_db,1438 result[@enumToInt(Feature.v6)] = .{
1439 &feature_aclass,1439 .index = @enumToInt(Feature.v6),
1440 &feature_fpregs,1440 .name = @tagName(Feature.v6),
1441 &feature_trustzone,1441 .llvm_name = "v6",
1442 &feature_crc,1442 .description = "Support ARM v6 instructions",
1443 &feature_fp16,1443 .dependencies = featureSet(&[_]Feature{
1444 &feature_acquireRelease,1444 .v5te,
1445 &feature_v7clrex,1445 }),
1446 &feature_perfmon,1446 };
1447 &feature_hwdivArm,1447 result[@enumToInt(Feature.v6k)] = .{
1448 &feature_ras,1448 .index = @enumToInt(Feature.v6k),
1449 &feature_crypto,1449 .name = @tagName(Feature.v6k),
1450 &feature_dotprod,1450 .llvm_name = "v6k",
1451 &feature_fullfp16,1451 .description = "Support ARM v6k instructions",
1452 },1452 .dependencies = featureSet(&[_]Feature{
1453};1453 .v6,
14541454 }),
1455pub const cpu_cortexA76ae = Cpu{1455 };
1456 .name = "cortexA76ae",1456 result[@enumToInt(Feature.v6m)] = .{
1457 .llvm_name = "cortex-a76ae",1457 .index = @enumToInt(Feature.v6m),
1458 .dependencies = &[_]*const Feature {1458 .name = @tagName(Feature.v6m),
1459 &feature_hwdiv,1459 .llvm_name = "v6m",
1460 &feature_mp,1460 .description = "Support ARM v6M instructions",
1461 &feature_d32,1461 .dependencies = featureSet(&[_]Feature{
1462 &feature_dsp,1462 .v6,
1463 &feature_thumb2,1463 }),
1464 &feature_db,1464 };
1465 &feature_aclass,1465 result[@enumToInt(Feature.v6t2)] = .{
1466 &feature_fpregs,1466 .index = @enumToInt(Feature.v6t2),
1467 &feature_trustzone,1467 .name = @tagName(Feature.v6t2),
1468 &feature_crc,1468 .llvm_name = "v6t2",
1469 &feature_fp16,1469 .description = "Support ARM v6t2 instructions",
1470 &feature_acquireRelease,1470 .dependencies = featureSet(&[_]Feature{
1471 &feature_v7clrex,1471 .thumb2,
1472 &feature_perfmon,1472 .v6k,
1473 &feature_hwdivArm,1473 .v8m,
1474 &feature_ras,1474 }),
1475 &feature_crypto,1475 };
1476 &feature_dotprod,1476 result[@enumToInt(Feature.v7)] = .{
1477 &feature_fullfp16,1477 .index = @enumToInt(Feature.v7),
1478 },1478 .name = @tagName(Feature.v7),
1479};1479 .llvm_name = "v7",
14801480 .description = "Support ARM v7 instructions",
1481pub const cpu_cortexA8 = Cpu{1481 .dependencies = featureSet(&[_]Feature{
1482 .name = "cortexA8",1482 .perfmon,
1483 .llvm_name = "cortex-a8",1483 .v6t2,
1484 .dependencies = &[_]*const Feature {1484 .v7clrex,
1485 &feature_d32,1485 }),
1486 &feature_dsp,1486 };
1487 &feature_thumb2,1487 result[@enumToInt(Feature.v7clrex)] = .{
1488 &feature_db,1488 .index = @enumToInt(Feature.v7clrex),
1489 &feature_aclass,1489 .name = @tagName(Feature.v7clrex),
1490 &feature_fpregs,1490 .llvm_name = "v7clrex",
1491 &feature_v7clrex,1491 .description = "Has v7 clrex instruction",
1492 &feature_perfmon,1492 .dependencies = 0,
1493 &feature_retAddrStack,1493 };
1494 &feature_slowfpvmlx,1494 result[@enumToInt(Feature.v8)] = .{
1495 &feature_vmlxHazards,1495 .index = @enumToInt(Feature.v8),
1496 &feature_nonpipelinedVfp,1496 .name = @tagName(Feature.v8),
1497 &feature_slowFpBrcc,1497 .llvm_name = "v8",
1498 &feature_trustzone,1498 .description = "Support ARM v8 instructions",
1499 &feature_vmlxForwarding,1499 .dependencies = featureSet(&[_]Feature{
1500 },1500 .acquire_release,
1501};1501 .v7,
15021502 }),
1503pub const cpu_cortexA9 = Cpu{1503 };
1504 .name = "cortexA9",1504 result[@enumToInt(Feature.v8_1a)] = .{
1505 .llvm_name = "cortex-a9",1505 .index = @enumToInt(Feature.v8_1a),
1506 .dependencies = &[_]*const Feature {1506 .name = @tagName(Feature.v8_1a),
1507 &feature_d32,1507 .llvm_name = "v8.1a",
1508 &feature_dsp,1508 .description = "Support ARM v8.1a instructions",
1509 &feature_thumb2,1509 .dependencies = featureSet(&[_]Feature{
1510 &feature_db,1510 .v8,
1511 &feature_aclass,1511 }),
1512 &feature_fpregs,1512 };
1513 &feature_v7clrex,1513 result[@enumToInt(Feature.v8_1m_main)] = .{
1514 &feature_perfmon,1514 .index = @enumToInt(Feature.v8_1m_main),
1515 &feature_avoidPartialCpsr,1515 .name = @tagName(Feature.v8_1m_main),
1516 &feature_vldnAlign,1516 .llvm_name = "v8.1m.main",
1517 &feature_expandFpMlx,1517 .description = "Support ARM v8-1M Mainline instructions",
1518 &feature_fp16,1518 .dependencies = featureSet(&[_]Feature{
1519 &feature_retAddrStack,1519 .v8m_main,
1520 &feature_vmlxHazards,1520 }),
1521 &feature_mp,1521 };
1522 &feature_muxedUnits,1522 result[@enumToInt(Feature.v8_2a)] = .{
1523 &feature_neonFpmovs,1523 .index = @enumToInt(Feature.v8_2a),
1524 &feature_preferVmovsr,1524 .name = @tagName(Feature.v8_2a),
1525 &feature_trustzone,1525 .llvm_name = "v8.2a",
1526 &feature_vmlxForwarding,1526 .description = "Support ARM v8.2a instructions",
1527 },1527 .dependencies = featureSet(&[_]Feature{
1528};1528 .v8_1a,
15291529 }),
1530pub const cpu_cortexM0 = Cpu{1530 };
1531 .name = "cortexM0",1531 result[@enumToInt(Feature.v8_3a)] = .{
1532 .llvm_name = "cortex-m0",1532 .index = @enumToInt(Feature.v8_3a),
1533 .dependencies = &[_]*const Feature {1533 .name = @tagName(Feature.v8_3a),
1534 &feature_mclass,1534 .llvm_name = "v8.3a",
1535 &feature_db,1535 .description = "Support ARM v8.3a instructions",
1536 &feature_noarm,1536 .dependencies = featureSet(&[_]Feature{
1537 &feature_strictAlign,1537 .v8_2a,
1538 },1538 }),
1539};1539 };
15401540 result[@enumToInt(Feature.v8_4a)] = .{
1541pub const cpu_cortexM0plus = Cpu{1541 .index = @enumToInt(Feature.v8_4a),
1542 .name = "cortexM0plus",1542 .name = @tagName(Feature.v8_4a),
1543 .llvm_name = "cortex-m0plus",1543 .llvm_name = "v8.4a",
1544 .dependencies = &[_]*const Feature {1544 .description = "Support ARM v8.4a instructions",
1545 &feature_mclass,1545 .dependencies = featureSet(&[_]Feature{
1546 &feature_db,1546 .dotprod,
1547 &feature_noarm,1547 .v8_3a,
1548 &feature_strictAlign,1548 }),
1549 },1549 };
1550};1550 result[@enumToInt(Feature.v8_5a)] = .{
15511551 .index = @enumToInt(Feature.v8_5a),
1552pub const cpu_cortexM1 = Cpu{1552 .name = @tagName(Feature.v8_5a),
1553 .name = "cortexM1",1553 .llvm_name = "v8.5a",
1554 .llvm_name = "cortex-m1",1554 .description = "Support ARM v8.5a instructions",
1555 .dependencies = &[_]*const Feature {1555 .dependencies = featureSet(&[_]Feature{
1556 &feature_mclass,1556 .sb,
1557 &feature_db,1557 .v8_4a,
1558 &feature_noarm,1558 }),
1559 &feature_strictAlign,1559 };
1560 },1560 result[@enumToInt(Feature.v8m)] = .{
1561};1561 .index = @enumToInt(Feature.v8m),
15621562 .name = @tagName(Feature.v8m),
1563pub const cpu_cortexM23 = Cpu{1563 .llvm_name = "v8m",
1564 .name = "cortexM23",1564 .description = "Support ARM v8M Baseline instructions",
1565 .llvm_name = "cortex-m23",1565 .dependencies = featureSet(&[_]Feature{
1566 .dependencies = &[_]*const Feature {1566 .v6m,
1567 &feature_hwdiv,1567 }),
1568 &feature_mclass,1568 };
1569 &feature_db,1569 result[@enumToInt(Feature.v8m_main)] = .{
1570 &feature_acquireRelease,1570 .index = @enumToInt(Feature.v8m_main),
1571 &feature_v7clrex,1571 .name = @tagName(Feature.v8m_main),
1572 &feature_noarm,1572 .llvm_name = "v8m.main",
1573 &feature_msecext8,1573 .description = "Support ARM v8M Mainline instructions",
1574 &feature_strictAlign,1574 .dependencies = featureSet(&[_]Feature{
1575 &feature_noMovt,1575 .v7,
1576 },1576 }),
1577};1577 };
15781578 result[@enumToInt(Feature.vfp2)] = .{
1579pub const cpu_cortexM3 = Cpu{1579 .index = @enumToInt(Feature.vfp2),
1580 .name = "cortexM3",1580 .name = @tagName(Feature.vfp2),
1581 .llvm_name = "cortex-m3",1581 .llvm_name = "vfp2",
1582 .dependencies = &[_]*const Feature {1582 .description = "Enable VFP2 instructions",
1583 &feature_hwdiv,1583 .dependencies = featureSet(&[_]Feature{
1584 &feature_thumb2,1584 .vfp2d16,
1585 &feature_mclass,1585 .vfp2sp,
1586 &feature_db,1586 }),
1587 &feature_v7clrex,1587 };
1588 &feature_perfmon,1588 result[@enumToInt(Feature.vfp2d16)] = .{
1589 &feature_noarm,1589 .index = @enumToInt(Feature.vfp2d16),
1590 &feature_noBranchPredictor,1590 .name = @tagName(Feature.vfp2d16),
1591 &feature_loopAlign,1591 .llvm_name = "vfp2d16",
1592 &feature_useAa,1592 .description = "Enable VFP2 instructions",
1593 &feature_useMisched,1593 .dependencies = featureSet(&[_]Feature{
1594 },1594 .fp64,
1595};1595 .vfp2d16sp,
15961596 }),
1597pub const cpu_cortexM33 = Cpu{1597 };
1598 .name = "cortexM33",1598 result[@enumToInt(Feature.vfp2d16sp)] = .{
1599 .llvm_name = "cortex-m33",1599 .index = @enumToInt(Feature.vfp2d16sp),
1600 .dependencies = &[_]*const Feature {1600 .name = @tagName(Feature.vfp2d16sp),
1601 &feature_hwdiv,1601 .llvm_name = "vfp2d16sp",
1602 &feature_thumb2,1602 .description = "Enable VFP2 instructions with no double precision",
1603 &feature_mclass,1603 .dependencies = featureSet(&[_]Feature{
1604 &feature_db,1604 .fpregs,
1605 &feature_acquireRelease,1605 }),
1606 &feature_v7clrex,1606 };
1607 &feature_perfmon,1607 result[@enumToInt(Feature.vfp2sp)] = .{
1608 &feature_noarm,1608 .index = @enumToInt(Feature.vfp2sp),
1609 &feature_msecext8,1609 .name = @tagName(Feature.vfp2sp),
1610 &feature_dsp,1610 .llvm_name = "vfp2sp",
1611 &feature_fp16,1611 .description = "Enable VFP2 instructions with no double precision",
1612 &feature_fpregs,1612 .dependencies = featureSet(&[_]Feature{
1613 &feature_fpArmv8d16sp,1613 .vfp2d16sp,
1614 &feature_noBranchPredictor,1614 }),
1615 &feature_slowfpvmlx,1615 };
1616 &feature_loopAlign,1616 result[@enumToInt(Feature.vfp3)] = .{
1617 &feature_useAa,1617 .index = @enumToInt(Feature.vfp3),
1618 &feature_useMisched,1618 .name = @tagName(Feature.vfp3),
1619 },1619 .llvm_name = "vfp3",
1620};1620 .description = "Enable VFP3 instructions",
16211621 .dependencies = featureSet(&[_]Feature{
1622pub const cpu_cortexM35p = Cpu{1622 .vfp3d16,
1623 .name = "cortexM35p",1623 .vfp3sp,
1624 .llvm_name = "cortex-m35p",1624 }),
1625 .dependencies = &[_]*const Feature {1625 };
1626 &feature_hwdiv,1626 result[@enumToInt(Feature.vfp3d16)] = .{
1627 &feature_thumb2,1627 .index = @enumToInt(Feature.vfp3d16),
1628 &feature_mclass,1628 .name = @tagName(Feature.vfp3d16),
1629 &feature_db,1629 .llvm_name = "vfp3d16",
1630 &feature_acquireRelease,1630 .description = "Enable VFP3 instructions with only 16 d-registers",
1631 &feature_v7clrex,1631 .dependencies = featureSet(&[_]Feature{
1632 &feature_perfmon,1632 .fp64,
1633 &feature_noarm,1633 .vfp2,
1634 &feature_msecext8,1634 .vfp3d16sp,
1635 &feature_dsp,1635 }),
1636 &feature_fp16,1636 };
1637 &feature_fpregs,1637 result[@enumToInt(Feature.vfp3d16sp)] = .{
1638 &feature_fpArmv8d16sp,1638 .index = @enumToInt(Feature.vfp3d16sp),
1639 &feature_noBranchPredictor,1639 .name = @tagName(Feature.vfp3d16sp),
1640 &feature_slowfpvmlx,1640 .llvm_name = "vfp3d16sp",
1641 &feature_loopAlign,1641 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",
1642 &feature_useAa,1642 .dependencies = featureSet(&[_]Feature{
1643 &feature_useMisched,1643 .vfp2sp,
1644 },1644 }),
1645};1645 };
16461646 result[@enumToInt(Feature.vfp3sp)] = .{
1647pub const cpu_cortexM4 = Cpu{1647 .index = @enumToInt(Feature.vfp3sp),
1648 .name = "cortexM4",1648 .name = @tagName(Feature.vfp3sp),
1649 .llvm_name = "cortex-m4",1649 .llvm_name = "vfp3sp",
1650 .dependencies = &[_]*const Feature {1650 .description = "Enable VFP3 instructions with no double precision",
1651 &feature_hwdiv,1651 .dependencies = featureSet(&[_]Feature{
1652 &feature_dsp,1652 .d32,
1653 &feature_thumb2,1653 .vfp3d16sp,
1654 &feature_mclass,1654 }),
1655 &feature_db,1655 };
1656 &feature_v7clrex,1656 result[@enumToInt(Feature.vfp4)] = .{
1657 &feature_perfmon,1657 .index = @enumToInt(Feature.vfp4),
1658 &feature_noarm,1658 .name = @tagName(Feature.vfp4),
1659 &feature_noBranchPredictor,1659 .llvm_name = "vfp4",
1660 &feature_slowfpvmlx,1660 .description = "Enable VFP4 instructions",
1661 &feature_loopAlign,1661 .dependencies = featureSet(&[_]Feature{
1662 &feature_useAa,1662 .fp16,
1663 &feature_useMisched,1663 .vfp3,
1664 &feature_fp16,1664 .vfp4d16,
1665 &feature_fpregs,1665 .vfp4sp,
1666 &feature_vfp4d16sp,1666 }),
1667 },1667 };
1668};1668 result[@enumToInt(Feature.vfp4d16)] = .{
16691669 .index = @enumToInt(Feature.vfp4d16),
1670pub const cpu_cortexM7 = Cpu{1670 .name = @tagName(Feature.vfp4d16),
1671 .name = "cortexM7",1671 .llvm_name = "vfp4d16",
1672 .llvm_name = "cortex-m7",1672 .description = "Enable VFP4 instructions with only 16 d-registers",
1673 .dependencies = &[_]*const Feature {1673 .dependencies = featureSet(&[_]Feature{
1674 &feature_hwdiv,1674 .fp16,
1675 &feature_dsp,1675 .fp64,
1676 &feature_thumb2,1676 .vfp3d16,
1677 &feature_mclass,1677 .vfp4d16sp,
1678 &feature_db,1678 }),
1679 &feature_v7clrex,1679 };
1680 &feature_perfmon,1680 result[@enumToInt(Feature.vfp4d16sp)] = .{
1681 &feature_noarm,1681 .index = @enumToInt(Feature.vfp4d16sp),
1682 &feature_fp16,1682 .name = @tagName(Feature.vfp4d16sp),
1683 &feature_fpregs,1683 .llvm_name = "vfp4d16sp",
1684 &feature_fpArmv8d16,1684 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",
1685 },1685 .dependencies = featureSet(&[_]Feature{
1686};1686 .fp16,
16871687 .vfp3d16sp,
1688pub const cpu_cortexR4 = Cpu{1688 }),
1689 .name = "cortexR4",1689 };
1690 .llvm_name = "cortex-r4",1690 result[@enumToInt(Feature.vfp4sp)] = .{
1691 .dependencies = &[_]*const Feature {1691 .index = @enumToInt(Feature.vfp4sp),
1692 &feature_hwdiv,1692 .name = @tagName(Feature.vfp4sp),
1693 &feature_dsp,1693 .llvm_name = "vfp4sp",
1694 &feature_rclass,1694 .description = "Enable VFP4 instructions with no double precision",
1695 &feature_thumb2,1695 .dependencies = featureSet(&[_]Feature{
1696 &feature_db,1696 .d32,
1697 &feature_v7clrex,1697 .fp16,
1698 &feature_perfmon,1698 .vfp3sp,
1699 &feature_avoidPartialCpsr,1699 .vfp4d16sp,
1700 &feature_retAddrStack,1700 }),
1701 },1701 };
1702};1702 result[@enumToInt(Feature.virtualization)] = .{
17031703 .index = @enumToInt(Feature.virtualization),
1704pub const cpu_cortexR4f = Cpu{1704 .name = @tagName(Feature.virtualization),
1705 .name = "cortexR4f",1705 .llvm_name = "virtualization",
1706 .llvm_name = "cortex-r4f",1706 .description = "Supports Virtualization extension",
1707 .dependencies = &[_]*const Feature {1707 .dependencies = featureSet(&[_]Feature{
1708 &feature_hwdiv,1708 .hwdiv,
1709 &feature_dsp,1709 .hwdiv_arm,
1710 &feature_rclass,1710 }),
1711 &feature_thumb2,1711 };
1712 &feature_db,1712 result[@enumToInt(Feature.vldn_align)] = .{
1713 &feature_v7clrex,1713 .index = @enumToInt(Feature.vldn_align),
1714 &feature_perfmon,1714 .name = @tagName(Feature.vldn_align),
1715 &feature_avoidPartialCpsr,1715 .llvm_name = "vldn-align",
1716 &feature_retAddrStack,1716 .description = "Check for VLDn unaligned access",
1717 &feature_slowfpvmlx,1717 .dependencies = 0,
1718 &feature_slowFpBrcc,1718 };
1719 &feature_fpregs,1719 result[@enumToInt(Feature.vmlx_forwarding)] = .{
1720 &feature_vfp3d16,1720 .index = @enumToInt(Feature.vmlx_forwarding),
1721 },1721 .name = @tagName(Feature.vmlx_forwarding),
1722};1722 .llvm_name = "vmlx-forwarding",
17231723 .description = "Has multiplier accumulator forwarding",
1724pub const cpu_cortexR5 = Cpu{1724 .dependencies = 0,
1725 .name = "cortexR5",1725 };
1726 .llvm_name = "cortex-r5",1726 result[@enumToInt(Feature.vmlx_hazards)] = .{
1727 .dependencies = &[_]*const Feature {1727 .index = @enumToInt(Feature.vmlx_hazards),
1728 &feature_hwdiv,1728 .name = @tagName(Feature.vmlx_hazards),
1729 &feature_dsp,1729 .llvm_name = "vmlx-hazards",
1730 &feature_rclass,1730 .description = "Has VMLx hazards",
1731 &feature_thumb2,1731 .dependencies = 0,
1732 &feature_db,1732 };
1733 &feature_v7clrex,1733 result[@enumToInt(Feature.wide_stride_vfp)] = .{
1734 &feature_perfmon,1734 .index = @enumToInt(Feature.wide_stride_vfp),
1735 &feature_avoidPartialCpsr,1735 .name = @tagName(Feature.wide_stride_vfp),
1736 &feature_hwdivArm,1736 .llvm_name = "wide-stride-vfp",
1737 &feature_retAddrStack,1737 .description = "Use a wide stride when allocating VFP registers",
1738 &feature_slowfpvmlx,1738 .dependencies = 0,
1739 &feature_slowFpBrcc,1739 };
1740 &feature_fpregs,1740 result[@enumToInt(Feature.xscale)] = .{
1741 &feature_vfp3d16,1741 .index = @enumToInt(Feature.xscale),
1742 },1742 .name = @tagName(Feature.xscale),
1743};1743 .llvm_name = "xscale",
17441744 .description = "ARMv5te architecture",
1745pub const cpu_cortexR52 = Cpu{1745 .dependencies = featureSet(&[_]Feature{
1746 .name = "cortexR52",1746 .armv5te,
1747 .llvm_name = "cortex-r52",1747 }),
1748 .dependencies = &[_]*const Feature {1748 };
1749 &feature_hwdiv,1749 result[@enumToInt(Feature.zcz)] = .{
1750 &feature_dfb,1750 .index = @enumToInt(Feature.zcz),
1751 &feature_mp,1751 .name = @tagName(Feature.zcz),
1752 &feature_d32,1752 .llvm_name = "zcz",
1753 &feature_dsp,1753 .description = "Has zero-cycle zeroing instructions",
1754 &feature_rclass,1754 .dependencies = 0,
1755 &feature_thumb2,1755 };
1756 &feature_db,1756 break :blk result;
1757 &feature_fpregs,1757};
1758 &feature_crc,1758
1759 &feature_fp16,1759pub const cpu = struct {
1760 &feature_acquireRelease,1760 pub const arm1020e = Cpu{
1761 &feature_v7clrex,1761 .name = "arm1020e",
1762 &feature_perfmon,1762 .llvm_name = "arm1020e",
1763 &feature_hwdivArm,1763 .features = featureSet(&[_]Feature{
1764 &feature_fpao,1764 .armv5te,
1765 &feature_useAa,1765 }),
1766 &feature_useMisched,1766 };
1767 },1767 pub const arm1020t = Cpu{
1768};1768 .name = "arm1020t",
17691769 .llvm_name = "arm1020t",
1770pub const cpu_cortexR7 = Cpu{1770 .features = featureSet(&[_]Feature{
1771 .name = "cortexR7",1771 .armv5t,
1772 .llvm_name = "cortex-r7",1772 }),
1773 .dependencies = &[_]*const Feature {1773 };
1774 &feature_hwdiv,1774 pub const arm1022e = Cpu{
1775 &feature_dsp,1775 .name = "arm1022e",
1776 &feature_rclass,1776 .llvm_name = "arm1022e",
1777 &feature_thumb2,1777 .features = featureSet(&[_]Feature{
1778 &feature_db,1778 .armv5te,
1779 &feature_v7clrex,1779 }),
1780 &feature_perfmon,1780 };
1781 &feature_avoidPartialCpsr,1781 pub const arm10e = Cpu{
1782 &feature_fp16,1782 .name = "arm10e",
1783 &feature_hwdivArm,1783 .llvm_name = "arm10e",
1784 &feature_retAddrStack,1784 .features = featureSet(&[_]Feature{
1785 &feature_slowfpvmlx,1785 .armv5te,
1786 &feature_mp,1786 }),
1787 &feature_slowFpBrcc,1787 };
1788 &feature_fpregs,1788 pub const arm10tdmi = Cpu{
1789 &feature_vfp3d16,1789 .name = "arm10tdmi",
1790 },1790 .llvm_name = "arm10tdmi",
1791};1791 .features = featureSet(&[_]Feature{
17921792 .armv5t,
1793pub const cpu_cortexR8 = Cpu{1793 }),
1794 .name = "cortexR8",1794 };
1795 .llvm_name = "cortex-r8",1795 pub const arm1136j_s = Cpu{
1796 .dependencies = &[_]*const Feature {1796 .name = "arm1136j_s",
1797 &feature_hwdiv,1797 .llvm_name = "arm1136j-s",
1798 &feature_dsp,1798 .features = featureSet(&[_]Feature{
1799 &feature_rclass,1799 .armv6,
1800 &feature_thumb2,1800 }),
1801 &feature_db,1801 };
1802 &feature_v7clrex,1802 pub const arm1136jf_s = Cpu{
1803 &feature_perfmon,1803 .name = "arm1136jf_s",
1804 &feature_avoidPartialCpsr,1804 .llvm_name = "arm1136jf-s",
1805 &feature_fp16,1805 .features = featureSet(&[_]Feature{
1806 &feature_hwdivArm,1806 .armv6,
1807 &feature_retAddrStack,1807 .slowfpvmlx,
1808 &feature_slowfpvmlx,1808 .vfp2,
1809 &feature_mp,1809 }),
1810 &feature_slowFpBrcc,1810 };
1811 &feature_fpregs,1811 pub const arm1156t2_s = Cpu{
1812 &feature_vfp3d16,1812 .name = "arm1156t2_s",
1813 },1813 .llvm_name = "arm1156t2-s",
1814};1814 .features = featureSet(&[_]Feature{
18151815 .armv6t2,
1816pub const cpu_cyclone = Cpu{1816 }),
1817 .name = "cyclone",1817 };
1818 .llvm_name = "cyclone",1818 pub const arm1156t2f_s = Cpu{
1819 .dependencies = &[_]*const Feature {1819 .name = "arm1156t2f_s",
1820 &feature_hwdiv,1820 .llvm_name = "arm1156t2f-s",
1821 &feature_mp,1821 .features = featureSet(&[_]Feature{
1822 &feature_d32,1822 .armv6t2,
1823 &feature_dsp,1823 .slowfpvmlx,
1824 &feature_thumb2,1824 .vfp2,
1825 &feature_db,1825 }),
1826 &feature_aclass,1826 };
1827 &feature_fpregs,1827 pub const arm1176j_s = Cpu{
1828 &feature_trustzone,1828 .name = "arm1176j_s",
1829 &feature_crc,1829 .llvm_name = "arm1176j-s",
1830 &feature_fp16,1830 .features = featureSet(&[_]Feature{
1831 &feature_acquireRelease,1831 .armv6kz,
1832 &feature_v7clrex,1832 }),
1833 &feature_perfmon,1833 };
1834 &feature_hwdivArm,1834 pub const arm1176jz_s = Cpu{
1835 &feature_avoidMovsShop,1835 .name = "arm1176jz_s",
1836 &feature_avoidPartialCpsr,1836 .llvm_name = "arm1176jz-s",
1837 &feature_crypto,1837 .features = featureSet(&[_]Feature{
1838 &feature_retAddrStack,1838 .armv6kz,
1839 &feature_slowfpvmlx,1839 }),
1840 &feature_neonfp,1840 };
1841 &feature_disablePostraScheduler,1841 pub const arm1176jzf_s = Cpu{
1842 &feature_useMisched,1842 .name = "arm1176jzf_s",
1843 &feature_vfp4,1843 .llvm_name = "arm1176jzf-s",
1844 &feature_zcz,1844 .features = featureSet(&[_]Feature{
1845 },1845 .armv6kz,
1846};1846 .slowfpvmlx,
18471847 .vfp2,
1848pub const cpu_ep9312 = Cpu{1848 }),
1849 .name = "ep9312",1849 };
1850 .llvm_name = "ep9312",1850 pub const arm710t = Cpu{
1851 .dependencies = &[_]*const Feature {1851 .name = "arm710t",
1852 },1852 .llvm_name = "arm710t",
1853};1853 .features = featureSet(&[_]Feature{
18541854 .armv4t,
1855pub const cpu_exynosM1 = Cpu{1855 }),
1856 .name = "exynosM1",1856 };
1857 .llvm_name = "exynos-m1",1857 pub const arm720t = Cpu{
1858 .dependencies = &[_]*const Feature {1858 .name = "arm720t",
1859 &feature_hwdiv,1859 .llvm_name = "arm720t",
1860 &feature_mp,1860 .features = featureSet(&[_]Feature{
1861 &feature_d32,1861 .armv4t,
1862 &feature_dsp,1862 }),
1863 &feature_thumb2,1863 };
1864 &feature_db,1864 pub const arm7tdmi = Cpu{
1865 &feature_aclass,1865 .name = "arm7tdmi",
1866 &feature_fpregs,1866 .llvm_name = "arm7tdmi",
1867 &feature_trustzone,1867 .features = featureSet(&[_]Feature{
1868 &feature_crc,1868 .armv4t,
1869 &feature_fp16,1869 }),
1870 &feature_acquireRelease,1870 };
1871 &feature_v7clrex,1871 pub const arm7tdmi_s = Cpu{
1872 &feature_perfmon,1872 .name = "arm7tdmi_s",
1873 &feature_hwdivArm,1873 .llvm_name = "arm7tdmi-s",
1874 &feature_fuseLiterals,1874 .features = featureSet(&[_]Feature{
1875 &feature_useAa,1875 .armv4t,
1876 &feature_wideStrideVfp,1876 }),
1877 &feature_slowVgetlni32,1877 };
1878 &feature_slowVdup32,1878 pub const arm8 = Cpu{
1879 &feature_profUnpr,1879 .name = "arm8",
1880 &feature_slowFpBrcc,1880 .llvm_name = "arm8",
1881 &feature_retAddrStack,1881 .features = featureSet(&[_]Feature{
1882 &feature_zcz,1882 .armv4,
1883 &feature_slowfpvmlx,1883 }),
1884 &feature_expandFpMlx,1884 };
1885 &feature_fuseAes,1885 pub const arm810 = Cpu{
1886 &feature_dontWidenVmovs,1886 .name = "arm810",
1887 },1887 .llvm_name = "arm810",
1888};1888 .features = featureSet(&[_]Feature{
18891889 .armv4,
1890pub const cpu_exynosM2 = Cpu{1890 }),
1891 .name = "exynosM2",1891 };
1892 .llvm_name = "exynos-m2",1892 pub const arm9 = Cpu{
1893 .dependencies = &[_]*const Feature {1893 .name = "arm9",
1894 &feature_hwdiv,1894 .llvm_name = "arm9",
1895 &feature_mp,1895 .features = featureSet(&[_]Feature{
1896 &feature_d32,1896 .armv4t,
1897 &feature_dsp,1897 }),
1898 &feature_thumb2,1898 };
1899 &feature_db,1899 pub const arm920 = Cpu{
1900 &feature_aclass,1900 .name = "arm920",
1901 &feature_fpregs,1901 .llvm_name = "arm920",
1902 &feature_trustzone,1902 .features = featureSet(&[_]Feature{
1903 &feature_crc,1903 .armv4t,
1904 &feature_fp16,1904 }),
1905 &feature_acquireRelease,1905 };
1906 &feature_v7clrex,1906 pub const arm920t = Cpu{
1907 &feature_perfmon,1907 .name = "arm920t",
1908 &feature_hwdivArm,1908 .llvm_name = "arm920t",
1909 &feature_fuseLiterals,1909 .features = featureSet(&[_]Feature{
1910 &feature_useAa,1910 .armv4t,
1911 &feature_wideStrideVfp,1911 }),
1912 &feature_slowVgetlni32,1912 };
1913 &feature_slowVdup32,1913 pub const arm922t = Cpu{
1914 &feature_profUnpr,1914 .name = "arm922t",
1915 &feature_slowFpBrcc,1915 .llvm_name = "arm922t",
1916 &feature_retAddrStack,1916 .features = featureSet(&[_]Feature{
1917 &feature_zcz,1917 .armv4t,
1918 &feature_slowfpvmlx,1918 }),
1919 &feature_expandFpMlx,1919 };
1920 &feature_fuseAes,1920 pub const arm926ej_s = Cpu{
1921 &feature_dontWidenVmovs,1921 .name = "arm926ej_s",
1922 },1922 .llvm_name = "arm926ej-s",
1923};1923 .features = featureSet(&[_]Feature{
19241924 .armv5te,
1925pub const cpu_exynosM3 = Cpu{1925 }),
1926 .name = "exynosM3",1926 };
1927 .llvm_name = "exynos-m3",1927 pub const arm940t = Cpu{
1928 .dependencies = &[_]*const Feature {1928 .name = "arm940t",
1929 &feature_hwdiv,1929 .llvm_name = "arm940t",
1930 &feature_mp,1930 .features = featureSet(&[_]Feature{
1931 &feature_d32,1931 .armv4t,
1932 &feature_dsp,1932 }),
1933 &feature_thumb2,1933 };
1934 &feature_db,1934 pub const arm946e_s = Cpu{
1935 &feature_aclass,1935 .name = "arm946e_s",
1936 &feature_fpregs,1936 .llvm_name = "arm946e-s",
1937 &feature_trustzone,1937 .features = featureSet(&[_]Feature{
1938 &feature_crc,1938 .armv5te,
1939 &feature_fp16,1939 }),
1940 &feature_acquireRelease,1940 };
1941 &feature_v7clrex,1941 pub const arm966e_s = Cpu{
1942 &feature_perfmon,1942 .name = "arm966e_s",
1943 &feature_hwdivArm,1943 .llvm_name = "arm966e-s",
1944 &feature_fuseLiterals,1944 .features = featureSet(&[_]Feature{
1945 &feature_useAa,1945 .armv5te,
1946 &feature_wideStrideVfp,1946 }),
1947 &feature_slowVgetlni32,1947 };
1948 &feature_slowVdup32,1948 pub const arm968e_s = Cpu{
1949 &feature_profUnpr,1949 .name = "arm968e_s",
1950 &feature_slowFpBrcc,1950 .llvm_name = "arm968e-s",
1951 &feature_retAddrStack,1951 .features = featureSet(&[_]Feature{
1952 &feature_zcz,1952 .armv5te,
1953 &feature_slowfpvmlx,1953 }),
1954 &feature_expandFpMlx,1954 };
1955 &feature_fuseAes,1955 pub const arm9e = Cpu{
1956 &feature_dontWidenVmovs,1956 .name = "arm9e",
1957 },1957 .llvm_name = "arm9e",
1958};1958 .features = featureSet(&[_]Feature{
19591959 .armv5te,
1960pub const cpu_exynosM4 = Cpu{1960 }),
1961 .name = "exynosM4",1961 };
1962 .llvm_name = "exynos-m4",1962 pub const arm9tdmi = Cpu{
1963 .dependencies = &[_]*const Feature {1963 .name = "arm9tdmi",
1964 &feature_hwdiv,1964 .llvm_name = "arm9tdmi",
1965 &feature_mp,1965 .features = featureSet(&[_]Feature{
1966 &feature_d32,1966 .armv4t,
1967 &feature_dsp,1967 }),
1968 &feature_thumb2,1968 };
1969 &feature_db,1969 pub const cortex_a12 = Cpu{
1970 &feature_aclass,1970 .name = "cortex_a12",
1971 &feature_fpregs,1971 .llvm_name = "cortex-a12",
1972 &feature_trustzone,1972 .features = featureSet(&[_]Feature{
1973 &feature_crc,1973 .a12,
1974 &feature_fp16,1974 .armv7_a,
1975 &feature_acquireRelease,1975 .avoid_partial_cpsr,
1976 &feature_v7clrex,1976 .mp,
1977 &feature_perfmon,1977 .ret_addr_stack,
1978 &feature_hwdivArm,1978 .trustzone,
1979 &feature_ras,1979 .vfp4,
1980 &feature_dotprod,1980 .virtualization,
1981 &feature_fullfp16,1981 .vmlx_forwarding,
1982 &feature_fuseLiterals,1982 }),
1983 &feature_useAa,1983 };
1984 &feature_wideStrideVfp,1984 pub const cortex_a15 = Cpu{
1985 &feature_slowVgetlni32,1985 .name = "cortex_a15",
1986 &feature_slowVdup32,1986 .llvm_name = "cortex-a15",
1987 &feature_profUnpr,1987 .features = featureSet(&[_]Feature{
1988 &feature_slowFpBrcc,1988 .a15,
1989 &feature_retAddrStack,1989 .armv7_a,
1990 &feature_zcz,1990 .avoid_partial_cpsr,
1991 &feature_slowfpvmlx,1991 .dont_widen_vmovs,
1992 &feature_expandFpMlx,1992 .mp,
1993 &feature_fuseAes,1993 .muxed_units,
1994 &feature_dontWidenVmovs,1994 .ret_addr_stack,
1995 },1995 .splat_vfp_neon,
1996};1996 .trustzone,
19971997 .vfp4,
1998pub const cpu_exynosM5 = Cpu{1998 .virtualization,
1999 .name = "exynosM5",1999 .vldn_align,
2000 .llvm_name = "exynos-m5",2000 }),
2001 .dependencies = &[_]*const Feature {2001 };
2002 &feature_hwdiv,2002 pub const cortex_a17 = Cpu{
2003 &feature_mp,2003 .name = "cortex_a17",
2004 &feature_d32,2004 .llvm_name = "cortex-a17",
2005 &feature_dsp,2005 .features = featureSet(&[_]Feature{
2006 &feature_thumb2,2006 .a17,
2007 &feature_db,2007 .armv7_a,
2008 &feature_aclass,2008 .avoid_partial_cpsr,
2009 &feature_fpregs,2009 .mp,
2010 &feature_trustzone,2010 .ret_addr_stack,
2011 &feature_crc,2011 .trustzone,
2012 &feature_fp16,2012 .vfp4,
2013 &feature_acquireRelease,2013 .virtualization,
2014 &feature_v7clrex,2014 .vmlx_forwarding,
2015 &feature_perfmon,2015 }),
2016 &feature_hwdivArm,2016 };
2017 &feature_ras,2017 pub const cortex_a32 = Cpu{
2018 &feature_dotprod,2018 .name = "cortex_a32",
2019 &feature_fullfp16,2019 .llvm_name = "cortex-a32",
2020 &feature_fuseLiterals,2020 .features = featureSet(&[_]Feature{
2021 &feature_useAa,2021 .armv8_a,
2022 &feature_wideStrideVfp,2022 .crc,
2023 &feature_slowVgetlni32,2023 .crypto,
2024 &feature_slowVdup32,2024 .hwdiv,
2025 &feature_profUnpr,2025 .hwdiv_arm,
2026 &feature_slowFpBrcc,2026 }),
2027 &feature_retAddrStack,2027 };
2028 &feature_zcz,2028 pub const cortex_a35 = Cpu{
2029 &feature_slowfpvmlx,2029 .name = "cortex_a35",
2030 &feature_expandFpMlx,2030 .llvm_name = "cortex-a35",
2031 &feature_fuseAes,2031 .features = featureSet(&[_]Feature{
2032 &feature_dontWidenVmovs,2032 .a35,
2033 },2033 .armv8_a,
2034};2034 .crc,
20352035 .crypto,
2036pub const cpu_generic = Cpu{2036 .hwdiv,
2037 .name = "generic",2037 .hwdiv_arm,
2038 .llvm_name = "generic",2038 }),
2039 .dependencies = &[_]*const Feature {2039 };
2040 },2040 pub const cortex_a5 = Cpu{
2041};2041 .name = "cortex_a5",
20422042 .llvm_name = "cortex-a5",
2043pub const cpu_iwmmxt = Cpu{2043 .features = featureSet(&[_]Feature{
2044 .name = "iwmmxt",2044 .a5,
2045 .llvm_name = "iwmmxt",2045 .armv7_a,
2046 .dependencies = &[_]*const Feature {2046 .mp,
2047 },2047 .ret_addr_stack,
2048};2048 .slow_fp_brcc,
20492049 .slowfpvmlx,
2050pub const cpu_krait = Cpu{2050 .trustzone,
2051 .name = "krait",2051 .vfp4,
2052 .llvm_name = "krait",2052 .vmlx_forwarding,
2053 .dependencies = &[_]*const Feature {2053 }),
2054 &feature_d32,2054 };
2055 &feature_dsp,2055 pub const cortex_a53 = Cpu{
2056 &feature_thumb2,2056 .name = "cortex_a53",
2057 &feature_db,2057 .llvm_name = "cortex-a53",
2058 &feature_aclass,2058 .features = featureSet(&[_]Feature{
2059 &feature_fpregs,2059 .a53,
2060 &feature_v7clrex,2060 .armv8_a,
2061 &feature_perfmon,2061 .crc,
2062 &feature_avoidPartialCpsr,2062 .crypto,
2063 &feature_vldnAlign,2063 .fpao,
2064 &feature_fp16,2064 .hwdiv,
2065 &feature_hwdivArm,2065 .hwdiv_arm,
2066 &feature_hwdiv,2066 }),
2067 &feature_retAddrStack,2067 };
2068 &feature_muxedUnits,2068 pub const cortex_a55 = Cpu{
2069 &feature_vfp4,2069 .name = "cortex_a55",
2070 &feature_vmlxForwarding,2070 .llvm_name = "cortex-a55",
2071 },2071 .features = featureSet(&[_]Feature{
2072};2072 .a55,
20732073 .armv8_2_a,
2074pub const cpu_kryo = Cpu{2074 .dotprod,
2075 .name = "kryo",2075 .hwdiv,
2076 .llvm_name = "kryo",2076 .hwdiv_arm,
2077 .dependencies = &[_]*const Feature {2077 }),
2078 &feature_hwdiv,2078 };
2079 &feature_mp,2079 pub const cortex_a57 = Cpu{
2080 &feature_d32,2080 .name = "cortex_a57",
2081 &feature_dsp,2081 .llvm_name = "cortex-a57",
2082 &feature_thumb2,2082 .features = featureSet(&[_]Feature{
2083 &feature_db,2083 .a57,
2084 &feature_aclass,2084 .armv8_a,
2085 &feature_fpregs,2085 .avoid_partial_cpsr,
2086 &feature_trustzone,2086 .cheap_predicable_cpsr,
2087 &feature_crc,2087 .crc,
2088 &feature_fp16,2088 .crypto,
2089 &feature_acquireRelease,2089 .fpao,
2090 &feature_v7clrex,2090 .hwdiv,
2091 &feature_perfmon,2091 .hwdiv_arm,
2092 &feature_hwdivArm,2092 }),
2093 &feature_crypto,2093 };
2094 },2094 pub const cortex_a7 = Cpu{
2095};2095 .name = "cortex_a7",
20962096 .llvm_name = "cortex-a7",
2097pub const cpu_mpcore = Cpu{2097 .features = featureSet(&[_]Feature{
2098 .name = "mpcore",2098 .a7,
2099 .llvm_name = "mpcore",2099 .armv7_a,
2100 .dependencies = &[_]*const Feature {2100 .mp,
2101 &feature_slowfpvmlx,2101 .ret_addr_stack,
2102 &feature_d32,2102 .slow_fp_brcc,
2103 &feature_fpregs,2103 .slowfpvmlx,
2104 &feature_vfp2,2104 .trustzone,
2105 },2105 .vfp4,
2106};2106 .virtualization,
21072107 .vmlx_forwarding,
2108pub const cpu_mpcorenovfp = Cpu{2108 .vmlx_hazards,
2109 .name = "mpcorenovfp",2109 }),
2110 .llvm_name = "mpcorenovfp",2110 };
2111 .dependencies = &[_]*const Feature {2111 pub const cortex_a72 = Cpu{
2112 },2112 .name = "cortex_a72",
2113};2113 .llvm_name = "cortex-a72",
21142114 .features = featureSet(&[_]Feature{
2115pub const cpu_sc000 = Cpu{2115 .a72,
2116 .name = "sc000",2116 .armv8_a,
2117 .llvm_name = "sc000",2117 .crc,
2118 .dependencies = &[_]*const Feature {2118 .crypto,
2119 &feature_mclass,2119 .hwdiv,
2120 &feature_db,2120 .hwdiv_arm,
2121 &feature_noarm,2121 }),
2122 &feature_strictAlign,2122 };
2123 },2123 pub const cortex_a73 = Cpu{
2124};2124 .name = "cortex_a73",
21252125 .llvm_name = "cortex-a73",
2126pub const cpu_sc300 = Cpu{2126 .features = featureSet(&[_]Feature{
2127 .name = "sc300",2127 .a73,
2128 .llvm_name = "sc300",2128 .armv8_a,
2129 .dependencies = &[_]*const Feature {2129 .crc,
2130 &feature_hwdiv,2130 .crypto,
2131 &feature_thumb2,2131 .hwdiv,
2132 &feature_mclass,2132 .hwdiv_arm,
2133 &feature_db,2133 }),
2134 &feature_v7clrex,2134 };
2135 &feature_perfmon,2135 pub const cortex_a75 = Cpu{
2136 &feature_noarm,2136 .name = "cortex_a75",
2137 &feature_noBranchPredictor,2137 .llvm_name = "cortex-a75",
2138 &feature_useAa,2138 .features = featureSet(&[_]Feature{
2139 &feature_useMisched,2139 .a75,
2140 },2140 .armv8_2_a,
2141};2141 .dotprod,
21422142 .hwdiv,
2143pub const cpu_strongarm = Cpu{2143 .hwdiv_arm,
2144 .name = "strongarm",2144 }),
2145 .llvm_name = "strongarm",2145 };
2146 .dependencies = &[_]*const Feature {2146 pub const cortex_a76 = Cpu{
2147 },2147 .name = "cortex_a76",
2148};2148 .llvm_name = "cortex-a76",
21492149 .features = featureSet(&[_]Feature{
2150pub const cpu_strongarm110 = Cpu{2150 .a76,
2151 .name = "strongarm110",2151 .armv8_2_a,
2152 .llvm_name = "strongarm110",2152 .crc,
2153 .dependencies = &[_]*const Feature {2153 .crypto,
2154 },2154 .dotprod,
2155};2155 .fullfp16,
21562156 .hwdiv,
2157pub const cpu_strongarm1100 = Cpu{2157 .hwdiv_arm,
2158 .name = "strongarm1100",2158 }),
2159 .llvm_name = "strongarm1100",2159 };
2160 .dependencies = &[_]*const Feature {2160 pub const cortex_a76ae = Cpu{
2161 },2161 .name = "cortex_a76ae",
2162};2162 .llvm_name = "cortex-a76ae",
21632163 .features = featureSet(&[_]Feature{
2164pub const cpu_strongarm1110 = Cpu{2164 .a76,
2165 .name = "strongarm1110",2165 .armv8_2_a,
2166 .llvm_name = "strongarm1110",2166 .crc,
2167 .dependencies = &[_]*const Feature {2167 .crypto,
2168 },2168 .dotprod,
2169};2169 .fullfp16,
21702170 .hwdiv,
2171pub const cpu_swift = Cpu{2171 .hwdiv_arm,
2172 .name = "swift",2172 }),
2173 .llvm_name = "swift",2173 };
2174 .dependencies = &[_]*const Feature {2174 pub const cortex_a8 = Cpu{
2175 &feature_d32,2175 .name = "cortex_a8",
2176 &feature_dsp,2176 .llvm_name = "cortex-a8",
2177 &feature_thumb2,2177 .features = featureSet(&[_]Feature{
2178 &feature_db,2178 .a8,
2179 &feature_aclass,2179 .armv7_a,
2180 &feature_fpregs,2180 .nonpipelined_vfp,
2181 &feature_v7clrex,2181 .ret_addr_stack,
2182 &feature_perfmon,2182 .slow_fp_brcc,
2183 &feature_avoidMovsShop,2183 .slowfpvmlx,
2184 &feature_avoidPartialCpsr,2184 .trustzone,
2185 &feature_hwdivArm,2185 .vmlx_forwarding,
2186 &feature_hwdiv,2186 .vmlx_hazards,
2187 &feature_retAddrStack,2187 }),
2188 &feature_slowfpvmlx,2188 };
2189 &feature_vmlxHazards,2189 pub const cortex_a9 = Cpu{
2190 &feature_mp,2190 .name = "cortex_a9",
2191 &feature_neonfp,2191 .llvm_name = "cortex-a9",
2192 &feature_disablePostraScheduler,2192 .features = featureSet(&[_]Feature{
2193 &feature_preferIshst,2193 .a9,
2194 &feature_profUnpr,2194 .armv7_a,
2195 &feature_slowLoadDSubreg,2195 .avoid_partial_cpsr,
2196 &feature_slowOddReg,2196 .expand_fp_mlx,
2197 &feature_slowVdup32,2197 .fp16,
2198 &feature_slowVgetlni32,2198 .mp,
2199 &feature_useMisched,2199 .muxed_units,
2200 &feature_wideStrideVfp,2200 .neon_fpmovs,
2201 &feature_fp16,2201 .prefer_vmovsr,
2202 &feature_vfp4,2202 .ret_addr_stack,
2203 },2203 .trustzone,
2204};2204 .vldn_align,
22052205 .vmlx_forwarding,
2206pub const cpu_xscale = Cpu{2206 .vmlx_hazards,
2207 .name = "xscale",2207 }),
2208 .llvm_name = "xscale",2208 };
2209 .dependencies = &[_]*const Feature {2209 pub const cortex_m0 = Cpu{
2210 },2210 .name = "cortex_m0",
2211};2211 .llvm_name = "cortex-m0",
22122212 .features = featureSet(&[_]Feature{
2213pub const cpus = &[_]*const Cpu {2213 .armv6_m,
2214 &cpu_arm1020e,2214 }),
2215 &cpu_arm1020t,2215 };
2216 &cpu_arm1022e,2216 pub const cortex_m0plus = Cpu{
2217 &cpu_arm10e,2217 .name = "cortex_m0plus",
2218 &cpu_arm10tdmi,2218 .llvm_name = "cortex-m0plus",
2219 &cpu_arm1136jS,2219 .features = featureSet(&[_]Feature{
2220 &cpu_arm1136jfS,2220 .armv6_m,
2221 &cpu_arm1156t2S,2221 }),
2222 &cpu_arm1156t2fS,2222 };
2223 &cpu_arm1176jS,2223 pub const cortex_m1 = Cpu{
2224 &cpu_arm1176jzS,2224 .name = "cortex_m1",
2225 &cpu_arm1176jzfS,2225 .llvm_name = "cortex-m1",
2226 &cpu_arm710t,2226 .features = featureSet(&[_]Feature{
2227 &cpu_arm720t,2227 .armv6_m,
2228 &cpu_arm7tdmi,2228 }),
2229 &cpu_arm7tdmiS,2229 };
2230 &cpu_arm8,2230 pub const cortex_m23 = Cpu{
2231 &cpu_arm810,2231 .name = "cortex_m23",
2232 &cpu_arm9,2232 .llvm_name = "cortex-m23",
2233 &cpu_arm920,2233 .features = featureSet(&[_]Feature{
2234 &cpu_arm920t,2234 .armv8_m_base,
2235 &cpu_arm922t,2235 .no_movt,
2236 &cpu_arm926ejS,2236 }),
2237 &cpu_arm940t,2237 };
2238 &cpu_arm946eS,2238 pub const cortex_m3 = Cpu{
2239 &cpu_arm966eS,2239 .name = "cortex_m3",
2240 &cpu_arm968eS,2240 .llvm_name = "cortex-m3",
2241 &cpu_arm9e,2241 .features = featureSet(&[_]Feature{
2242 &cpu_arm9tdmi,2242 .armv7_m,
2243 &cpu_cortexA12,2243 .loop_align,
2244 &cpu_cortexA15,2244 .m3,
2245 &cpu_cortexA17,2245 .no_branch_predictor,
2246 &cpu_cortexA32,2246 .use_aa,
2247 &cpu_cortexA35,2247 .use_misched,
2248 &cpu_cortexA5,2248 }),
2249 &cpu_cortexA53,2249 };
2250 &cpu_cortexA55,2250 pub const cortex_m33 = Cpu{
2251 &cpu_cortexA57,2251 .name = "cortex_m33",
2252 &cpu_cortexA7,2252 .llvm_name = "cortex-m33",
2253 &cpu_cortexA72,2253 .features = featureSet(&[_]Feature{
2254 &cpu_cortexA73,2254 .armv8_m_main,
2255 &cpu_cortexA75,2255 .dsp,
2256 &cpu_cortexA76,2256 .fp_armv8d16sp,
2257 &cpu_cortexA76ae,2257 .loop_align,
2258 &cpu_cortexA8,2258 .no_branch_predictor,
2259 &cpu_cortexA9,2259 .slowfpvmlx,
2260 &cpu_cortexM0,2260 .use_aa,
2261 &cpu_cortexM0plus,2261 .use_misched,
2262 &cpu_cortexM1,2262 }),
2263 &cpu_cortexM23,2263 };
2264 &cpu_cortexM3,2264 pub const cortex_m35p = Cpu{
2265 &cpu_cortexM33,2265 .name = "cortex_m35p",
2266 &cpu_cortexM35p,2266 .llvm_name = "cortex-m35p",
2267 &cpu_cortexM4,2267 .features = featureSet(&[_]Feature{
2268 &cpu_cortexM7,2268 .armv8_m_main,
2269 &cpu_cortexR4,2269 .dsp,
2270 &cpu_cortexR4f,2270 .fp_armv8d16sp,
2271 &cpu_cortexR5,2271 .loop_align,
2272 &cpu_cortexR52,2272 .no_branch_predictor,
2273 &cpu_cortexR7,2273 .slowfpvmlx,
2274 &cpu_cortexR8,2274 .use_aa,
2275 &cpu_cyclone,2275 .use_misched,
2276 &cpu_ep9312,2276 }),
2277 &cpu_exynosM1,2277 };
2278 &cpu_exynosM2,2278 pub const cortex_m4 = Cpu{
2279 &cpu_exynosM3,2279 .name = "cortex_m4",
2280 &cpu_exynosM4,2280 .llvm_name = "cortex-m4",
2281 &cpu_exynosM5,2281 .features = featureSet(&[_]Feature{
2282 &cpu_generic,2282 .armv7e_m,
2283 &cpu_iwmmxt,2283 .loop_align,
2284 &cpu_krait,2284 .no_branch_predictor,
2285 &cpu_kryo,2285 .slowfpvmlx,
2286 &cpu_mpcore,2286 .use_aa,
2287 &cpu_mpcorenovfp,2287 .use_misched,
2288 &cpu_sc000,2288 .vfp4d16sp,
2289 &cpu_sc300,2289 }),
2290 &cpu_strongarm,2290 };
2291 &cpu_strongarm110,2291 pub const cortex_m7 = Cpu{
2292 &cpu_strongarm1100,2292 .name = "cortex_m7",
2293 &cpu_strongarm1110,2293 .llvm_name = "cortex-m7",
2294 &cpu_swift,2294 .features = featureSet(&[_]Feature{
2295 &cpu_xscale,2295 .armv7e_m,
2296 .fp_armv8d16,
2297 }),
2298 };
2299 pub const cortex_r4 = Cpu{
2300 .name = "cortex_r4",
2301 .llvm_name = "cortex-r4",
2302 .features = featureSet(&[_]Feature{
2303 .armv7_r,
2304 .avoid_partial_cpsr,
2305 .r4,
2306 .ret_addr_stack,
2307 }),
2308 };
2309 pub const cortex_r4f = Cpu{
2310 .name = "cortex_r4f",
2311 .llvm_name = "cortex-r4f",
2312 .features = featureSet(&[_]Feature{
2313 .armv7_r,
2314 .avoid_partial_cpsr,
2315 .r4,
2316 .ret_addr_stack,
2317 .slow_fp_brcc,
2318 .slowfpvmlx,
2319 .vfp3d16,
2320 }),
2321 };
2322 pub const cortex_r5 = Cpu{
2323 .name = "cortex_r5",
2324 .llvm_name = "cortex-r5",
2325 .features = featureSet(&[_]Feature{
2326 .armv7_r,
2327 .avoid_partial_cpsr,
2328 .hwdiv_arm,
2329 .r5,
2330 .ret_addr_stack,
2331 .slow_fp_brcc,
2332 .slowfpvmlx,
2333 .vfp3d16,
2334 }),
2335 };
2336 pub const cortex_r52 = Cpu{
2337 .name = "cortex_r52",
2338 .llvm_name = "cortex-r52",
2339 .features = featureSet(&[_]Feature{
2340 .armv8_r,
2341 .fpao,
2342 .r52,
2343 .use_aa,
2344 .use_misched,
2345 }),
2346 };
2347 pub const cortex_r7 = Cpu{
2348 .name = "cortex_r7",
2349 .llvm_name = "cortex-r7",
2350 .features = featureSet(&[_]Feature{
2351 .armv7_r,
2352 .avoid_partial_cpsr,
2353 .fp16,
2354 .hwdiv_arm,
2355 .mp,
2356 .r7,
2357 .ret_addr_stack,
2358 .slow_fp_brcc,
2359 .slowfpvmlx,
2360 .vfp3d16,
2361 }),
2362 };
2363 pub const cortex_r8 = Cpu{
2364 .name = "cortex_r8",
2365 .llvm_name = "cortex-r8",
2366 .features = featureSet(&[_]Feature{
2367 .armv7_r,
2368 .avoid_partial_cpsr,
2369 .fp16,
2370 .hwdiv_arm,
2371 .mp,
2372 .ret_addr_stack,
2373 .slow_fp_brcc,
2374 .slowfpvmlx,
2375 .vfp3d16,
2376 }),
2377 };
2378 pub const cyclone = Cpu{
2379 .name = "cyclone",
2380 .llvm_name = "cyclone",
2381 .features = featureSet(&[_]Feature{
2382 .armv8_a,
2383 .avoid_movs_shop,
2384 .avoid_partial_cpsr,
2385 .crypto,
2386 .disable_postra_scheduler,
2387 .hwdiv,
2388 .hwdiv_arm,
2389 .mp,
2390 .neonfp,
2391 .ret_addr_stack,
2392 .slowfpvmlx,
2393 .swift,
2394 .use_misched,
2395 .vfp4,
2396 .zcz,
2397 }),
2398 };
2399 pub const ep9312 = Cpu{
2400 .name = "ep9312",
2401 .llvm_name = "ep9312",
2402 .features = featureSet(&[_]Feature{
2403 .armv4t,
2404 }),
2405 };
2406 pub const exynos_m1 = Cpu{
2407 .name = "exynos_m1",
2408 .llvm_name = "exynos-m1",
2409 .features = featureSet(&[_]Feature{
2410 .armv8_a,
2411 .exynos,
2412 }),
2413 };
2414 pub const exynos_m2 = Cpu{
2415 .name = "exynos_m2",
2416 .llvm_name = "exynos-m2",
2417 .features = featureSet(&[_]Feature{
2418 .armv8_a,
2419 .exynos,
2420 }),
2421 };
2422 pub const exynos_m3 = Cpu{
2423 .name = "exynos_m3",
2424 .llvm_name = "exynos-m3",
2425 .features = featureSet(&[_]Feature{
2426 .armv8_a,
2427 .exynos,
2428 }),
2429 };
2430 pub const exynos_m4 = Cpu{
2431 .name = "exynos_m4",
2432 .llvm_name = "exynos-m4",
2433 .features = featureSet(&[_]Feature{
2434 .armv8_2_a,
2435 .dotprod,
2436 .exynos,
2437 .fullfp16,
2438 }),
2439 };
2440 pub const exynos_m5 = Cpu{
2441 .name = "exynos_m5",
2442 .llvm_name = "exynos-m5",
2443 .features = featureSet(&[_]Feature{
2444 .armv8_2_a,
2445 .dotprod,
2446 .exynos,
2447 .fullfp16,
2448 }),
2449 };
2450 pub const generic = Cpu{
2451 .name = "generic",
2452 .llvm_name = "generic",
2453 .features = 0,
2454 };
2455 pub const iwmmxt = Cpu{
2456 .name = "iwmmxt",
2457 .llvm_name = "iwmmxt",
2458 .features = featureSet(&[_]Feature{
2459 .armv5te,
2460 }),
2461 };
2462 pub const krait = Cpu{
2463 .name = "krait",
2464 .llvm_name = "krait",
2465 .features = featureSet(&[_]Feature{
2466 .armv7_a,
2467 .avoid_partial_cpsr,
2468 .fp16,
2469 .hwdiv,
2470 .hwdiv_arm,
2471 .krait,
2472 .muxed_units,
2473 .ret_addr_stack,
2474 .vfp4,
2475 .vldn_align,
2476 .vmlx_forwarding,
2477 }),
2478 };
2479 pub const kryo = Cpu{
2480 .name = "kryo",
2481 .llvm_name = "kryo",
2482 .features = featureSet(&[_]Feature{
2483 .armv8_a,
2484 .crc,
2485 .crypto,
2486 .hwdiv,
2487 .hwdiv_arm,
2488 .kryo,
2489 }),
2490 };
2491 pub const mpcore = Cpu{
2492 .name = "mpcore",
2493 .llvm_name = "mpcore",
2494 .features = featureSet(&[_]Feature{
2495 .armv6k,
2496 .slowfpvmlx,
2497 .vfp2,
2498 }),
2499 };
2500 pub const mpcorenovfp = Cpu{
2501 .name = "mpcorenovfp",
2502 .llvm_name = "mpcorenovfp",
2503 .features = featureSet(&[_]Feature{
2504 .armv6k,
2505 }),
2506 };
2507 pub const sc000 = Cpu{
2508 .name = "sc000",
2509 .llvm_name = "sc000",
2510 .features = featureSet(&[_]Feature{
2511 .armv6_m,
2512 }),
2513 };
2514 pub const sc300 = Cpu{
2515 .name = "sc300",
2516 .llvm_name = "sc300",
2517 .features = featureSet(&[_]Feature{
2518 .armv7_m,
2519 .m3,
2520 .no_branch_predictor,
2521 .use_aa,
2522 .use_misched,
2523 }),
2524 };
2525 pub const strongarm = Cpu{
2526 .name = "strongarm",
2527 .llvm_name = "strongarm",
2528 .features = featureSet(&[_]Feature{
2529 .armv4,
2530 }),
2531 };
2532 pub const strongarm110 = Cpu{
2533 .name = "strongarm110",
2534 .llvm_name = "strongarm110",
2535 .features = featureSet(&[_]Feature{
2536 .armv4,
2537 }),
2538 };
2539 pub const strongarm1100 = Cpu{
2540 .name = "strongarm1100",
2541 .llvm_name = "strongarm1100",
2542 .features = featureSet(&[_]Feature{
2543 .armv4,
2544 }),
2545 };
2546 pub const strongarm1110 = Cpu{
2547 .name = "strongarm1110",
2548 .llvm_name = "strongarm1110",
2549 .features = featureSet(&[_]Feature{
2550 .armv4,
2551 }),
2552 };
2553 pub const swift = Cpu{
2554 .name = "swift",
2555 .llvm_name = "swift",
2556 .features = featureSet(&[_]Feature{
2557 .armv7_a,
2558 .avoid_movs_shop,
2559 .avoid_partial_cpsr,
2560 .disable_postra_scheduler,
2561 .hwdiv,
2562 .hwdiv_arm,
2563 .mp,
2564 .neonfp,
2565 .prefer_ishst,
2566 .prof_unpr,
2567 .ret_addr_stack,
2568 .slow_load_D_subreg,
2569 .slow_odd_reg,
2570 .slow_vdup32,
2571 .slow_vgetlni32,
2572 .slowfpvmlx,
2573 .swift,
2574 .use_misched,
2575 .vfp4,
2576 .vmlx_hazards,
2577 .wide_stride_vfp,
2578 }),
2579 };
2580 pub const xscale = Cpu{
2581 .name = "xscale",
2582 .llvm_name = "xscale",
2583 .features = featureSet(&[_]Feature{
2584 .armv5te,
2585 }),
2586 };
2587};
2588
2589/// All arm CPUs, sorted alphabetically by name.
2590/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
2591/// compiler has inefficient memory and CPU usage, affecting build times.
2592pub const all_cpus = &[_]*const Cpu{
2593 &cpu.arm1020e,
2594 &cpu.arm1020t,
2595 &cpu.arm1022e,
2596 &cpu.arm10e,
2597 &cpu.arm10tdmi,
2598 &cpu.arm1136j_s,
2599 &cpu.arm1136jf_s,
2600 &cpu.arm1156t2_s,
2601 &cpu.arm1156t2f_s,
2602 &cpu.arm1176j_s,
2603 &cpu.arm1176jz_s,
2604 &cpu.arm1176jzf_s,
2605 &cpu.arm710t,
2606 &cpu.arm720t,
2607 &cpu.arm7tdmi,
2608 &cpu.arm7tdmi_s,
2609 &cpu.arm8,
2610 &cpu.arm810,
2611 &cpu.arm9,
2612 &cpu.arm920,
2613 &cpu.arm920t,
2614 &cpu.arm922t,
2615 &cpu.arm926ej_s,
2616 &cpu.arm940t,
2617 &cpu.arm946e_s,
2618 &cpu.arm966e_s,
2619 &cpu.arm968e_s,
2620 &cpu.arm9e,
2621 &cpu.arm9tdmi,
2622 &cpu.cortex_a12,
2623 &cpu.cortex_a15,
2624 &cpu.cortex_a17,
2625 &cpu.cortex_a32,
2626 &cpu.cortex_a35,
2627 &cpu.cortex_a5,
2628 &cpu.cortex_a53,
2629 &cpu.cortex_a55,
2630 &cpu.cortex_a57,
2631 &cpu.cortex_a7,
2632 &cpu.cortex_a72,
2633 &cpu.cortex_a73,
2634 &cpu.cortex_a75,
2635 &cpu.cortex_a76,
2636 &cpu.cortex_a76ae,
2637 &cpu.cortex_a8,
2638 &cpu.cortex_a9,
2639 &cpu.cortex_m0,
2640 &cpu.cortex_m0plus,
2641 &cpu.cortex_m1,
2642 &cpu.cortex_m23,
2643 &cpu.cortex_m3,
2644 &cpu.cortex_m33,
2645 &cpu.cortex_m35p,
2646 &cpu.cortex_m4,
2647 &cpu.cortex_m7,
2648 &cpu.cortex_r4,
2649 &cpu.cortex_r4f,
2650 &cpu.cortex_r5,
2651 &cpu.cortex_r52,
2652 &cpu.cortex_r7,
2653 &cpu.cortex_r8,
2654 &cpu.cyclone,
2655 &cpu.ep9312,
2656 &cpu.exynos_m1,
2657 &cpu.exynos_m2,
2658 &cpu.exynos_m3,
2659 &cpu.exynos_m4,
2660 &cpu.exynos_m5,
2661 &cpu.generic,
2662 &cpu.iwmmxt,
2663 &cpu.krait,
2664 &cpu.kryo,
2665 &cpu.mpcore,
2666 &cpu.mpcorenovfp,
2667 &cpu.sc000,
2668 &cpu.sc300,
2669 &cpu.strongarm,
2670 &cpu.strongarm110,
2671 &cpu.strongarm1100,
2672 &cpu.strongarm1110,
2673 &cpu.swift,
2674 &cpu.xscale,
2296};2675};
lib/std/target/avr.zig+2440-4790
...@@ -1,4791 +1,2441 @@...@@ -1,4791 +1,2441 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_addsubiw = Feature{4pub const Feature = enum {
5 .name = "addsubiw",5 addsubiw,
6 .llvm_name = "addsubiw",6 avr0,
7 .description = "Enable 16-bit register-immediate addition and subtraction instructions",7 avr1,
8 .dependencies = &[_]*const Feature {8 avr2,
9 },9 avr25,
10};10 avr3,
1111 avr31,
12pub const feature_break = Feature{12 avr35,
13 .name = "break",13 avr4,
14 .llvm_name = "break",14 avr5,
15 .description = "The device supports the `BREAK` debugging instruction",15 avr51,
16 .dependencies = &[_]*const Feature {16 avr6,
17 },17 avrtiny,
18};18 break,
1919 des,
20pub const feature_des = Feature{20 eijmpcall,
21 .name = "des",21 elpm,
22 .llvm_name = "des",22 elpmx,
23 .description = "The device supports the `DES k` encryption instruction",23 ijmpcall,
24 .dependencies = &[_]*const Feature {24 jmpcall,
25 },25 lpm,
26};26 lpmx,
2727 movw,
28pub const feature_eijmpcall = Feature{28 mul,
29 .name = "eijmpcall",29 rmw,
30 .llvm_name = "eijmpcall",30 smallstack,
31 .description = "The device supports the `EIJMP`/`EICALL` instructions",31 special,
32 .dependencies = &[_]*const Feature {32 spm,
33 },33 spmx,
34};34 sram,
3535 tinyencoding,
36pub const feature_elpm = Feature{36 xmega,
37 .name = "elpm",37 xmegau,
38 .llvm_name = "elpm",38};
39 .description = "The device supports the ELPM instruction",39
40 .dependencies = &[_]*const Feature {40pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
41 },41
42};42pub const all_features = blk: {
4343 const len = @typeInfo(Feature).Enum.fields.len;
44pub const feature_elpmx = Feature{44 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
45 .name = "elpmx",45 var result: [len]Cpu.Feature = undefined;
46 .llvm_name = "elpmx",46 result[@enumToInt(Feature.addsubiw)] = .{
47 .description = "The device supports the `ELPM Rd, Z[+]` instructions",47 .index = @enumToInt(Feature.addsubiw),
48 .dependencies = &[_]*const Feature {48 .name = @tagName(Feature.addsubiw),
49 },49 .llvm_name = "addsubiw",
50};50 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
5151 .dependencies = 0,
52pub const feature_ijmpcall = Feature{52 };
53 .name = "ijmpcall",53 result[@enumToInt(Feature.avr0)] = .{
54 .llvm_name = "ijmpcall",54 .index = @enumToInt(Feature.avr0),
55 .description = "The device supports `IJMP`/`ICALL`instructions",55 .name = @tagName(Feature.avr0),
56 .dependencies = &[_]*const Feature {56 .llvm_name = "avr0",
57 },57 .description = "The device is a part of the avr0 family",
58};58 .dependencies = 0,
5959 };
60pub const feature_jmpcall = Feature{60 result[@enumToInt(Feature.avr1)] = .{
61 .name = "jmpcall",61 .index = @enumToInt(Feature.avr1),
62 .llvm_name = "jmpcall",62 .name = @tagName(Feature.avr1),
63 .description = "The device supports the `JMP` and `CALL` instructions",63 .llvm_name = "avr1",
64 .dependencies = &[_]*const Feature {64 .description = "The device is a part of the avr1 family",
65 },65 .dependencies = featureSet(&[_]Feature{
66};66 .avr0,
6767 .lpm,
68pub const feature_lpm = Feature{68 }),
69 .name = "lpm",69 };
70 .llvm_name = "lpm",70 result[@enumToInt(Feature.avr2)] = .{
71 .description = "The device supports the `LPM` instruction",71 .index = @enumToInt(Feature.avr2),
72 .dependencies = &[_]*const Feature {72 .name = @tagName(Feature.avr2),
73 },73 .llvm_name = "avr2",
74};74 .description = "The device is a part of the avr2 family",
7575 .dependencies = featureSet(&[_]Feature{
76pub const feature_lpmx = Feature{76 .addsubiw,
77 .name = "lpmx",77 .avr1,
78 .llvm_name = "lpmx",78 .ijmpcall,
79 .description = "The device supports the `LPM Rd, Z[+]` instruction",79 .sram,
80 .dependencies = &[_]*const Feature {80 }),
81 },81 };
82};82 result[@enumToInt(Feature.avr25)] = .{
8383 .index = @enumToInt(Feature.avr25),
84pub const feature_movw = Feature{84 .name = @tagName(Feature.avr25),
85 .name = "movw",85 .llvm_name = "avr25",
86 .llvm_name = "movw",86 .description = "The device is a part of the avr25 family",
87 .description = "The device supports the 16-bit MOVW instruction",87 .dependencies = featureSet(&[_]Feature{
88 .dependencies = &[_]*const Feature {88 .avr2,
89 },89 .break,
90};90 .lpmx,
9191 .movw,
92pub const feature_mul = Feature{92 .spm,
93 .name = "mul",93 }),
94 .llvm_name = "mul",94 };
95 .description = "The device supports the multiplication instructions",95 result[@enumToInt(Feature.avr3)] = .{
96 .dependencies = &[_]*const Feature {96 .index = @enumToInt(Feature.avr3),
97 },97 .name = @tagName(Feature.avr3),
98};98 .llvm_name = "avr3",
9999 .description = "The device is a part of the avr3 family",
100pub const feature_rmw = Feature{100 .dependencies = featureSet(&[_]Feature{
101 .name = "rmw",101 .avr2,
102 .llvm_name = "rmw",102 .jmpcall,
103 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",103 }),
104 .dependencies = &[_]*const Feature {104 };
105 },105 result[@enumToInt(Feature.avr31)] = .{
106};106 .index = @enumToInt(Feature.avr31),
107107 .name = @tagName(Feature.avr31),
108pub const feature_spm = Feature{108 .llvm_name = "avr31",
109 .name = "spm",109 .description = "The device is a part of the avr31 family",
110 .llvm_name = "spm",110 .dependencies = featureSet(&[_]Feature{
111 .description = "The device supports the `SPM` instruction",111 .avr3,
112 .dependencies = &[_]*const Feature {112 .elpm,
113 },113 }),
114};114 };
115115 result[@enumToInt(Feature.avr35)] = .{
116pub const feature_spmx = Feature{116 .index = @enumToInt(Feature.avr35),
117 .name = "spmx",117 .name = @tagName(Feature.avr35),
118 .llvm_name = "spmx",118 .llvm_name = "avr35",
119 .description = "The device supports the `SPM Z+` instruction",119 .description = "The device is a part of the avr35 family",
120 .dependencies = &[_]*const Feature {120 .dependencies = featureSet(&[_]Feature{
121 },121 .avr3,
122};122 .break,
123123 .lpmx,
124pub const feature_sram = Feature{124 .movw,
125 .name = "sram",125 .spm,
126 .llvm_name = "sram",126 }),
127 .description = "The device has random access memory",127 };
128 .dependencies = &[_]*const Feature {128 result[@enumToInt(Feature.avr4)] = .{
129 },129 .index = @enumToInt(Feature.avr4),
130};130 .name = @tagName(Feature.avr4),
131131 .llvm_name = "avr4",
132pub const feature_smallstack = Feature{132 .description = "The device is a part of the avr4 family",
133 .name = "smallstack",133 .dependencies = featureSet(&[_]Feature{
134 .llvm_name = "smallstack",134 .avr2,
135 .description = "The device has an 8-bit stack pointer",135 .break,
136 .dependencies = &[_]*const Feature {136 .lpmx,
137 },137 .movw,
138};138 .mul,
139139 .spm,
140pub const feature_tinyencoding = Feature{140 }),
141 .name = "tinyencoding",141 };
142 .llvm_name = "tinyencoding",142 result[@enumToInt(Feature.avr5)] = .{
143 .description = "The device has Tiny core specific instruction encodings",143 .index = @enumToInt(Feature.avr5),
144 .dependencies = &[_]*const Feature {144 .name = @tagName(Feature.avr5),
145 },145 .llvm_name = "avr5",
146};146 .description = "The device is a part of the avr5 family",
147147 .dependencies = featureSet(&[_]Feature{
148pub const features = &[_]*const Feature {148 .avr3,
149 &feature_addsubiw,149 .break,
150 &feature_break,150 .lpmx,
151 &feature_des,151 .movw,
152 &feature_eijmpcall,152 .mul,
153 &feature_elpm,153 .spm,
154 &feature_elpmx,154 }),
155 &feature_ijmpcall,155 };
156 &feature_jmpcall,156 result[@enumToInt(Feature.avr51)] = .{
157 &feature_lpm,157 .index = @enumToInt(Feature.avr51),
158 &feature_lpmx,158 .name = @tagName(Feature.avr51),
159 &feature_movw,159 .llvm_name = "avr51",
160 &feature_mul,160 .description = "The device is a part of the avr51 family",
161 &feature_rmw,161 .dependencies = featureSet(&[_]Feature{
162 &feature_spm,162 .avr5,
163 &feature_spmx,163 .elpm,
164 &feature_sram,164 .elpmx,
165 &feature_smallstack,165 }),
166 &feature_tinyencoding,166 };
167};167 result[@enumToInt(Feature.avr6)] = .{
168168 .index = @enumToInt(Feature.avr6),
169pub const cpu_at43usb320 = Cpu{169 .name = @tagName(Feature.avr6),
170 .name = "at43usb320",170 .llvm_name = "avr6",
171 .llvm_name = "at43usb320",171 .description = "The device is a part of the avr6 family",
172 .dependencies = &[_]*const Feature {172 .dependencies = featureSet(&[_]Feature{
173 &feature_jmpcall,173 .avr51,
174 &feature_lpm,174 }),
175 &feature_elpm,175 };
176 &feature_sram,176 result[@enumToInt(Feature.avrtiny)] = .{
177 &feature_addsubiw,177 .index = @enumToInt(Feature.avrtiny),
178 &feature_ijmpcall,178 .name = @tagName(Feature.avrtiny),
179 },179 .llvm_name = "avrtiny",
180};180 .description = "The device is a part of the avrtiny family",
181181 .dependencies = featureSet(&[_]Feature{
182pub const cpu_at43usb355 = Cpu{182 .avr0,
183 .name = "at43usb355",183 .break,
184 .llvm_name = "at43usb355",184 .sram,
185 .dependencies = &[_]*const Feature {185 .tinyencoding,
186 &feature_jmpcall,186 }),
187 &feature_lpm,187 };
188 &feature_sram,188 result[@enumToInt(Feature.break)] = .{
189 &feature_addsubiw,189 .index = @enumToInt(Feature.break),
190 &feature_ijmpcall,190 .name = @tagName(Feature.break),
191 },191 .llvm_name = "break",
192};192 .description = "The device supports the `BREAK` debugging instruction",
193193 .dependencies = 0,
194pub const cpu_at76c711 = Cpu{194 };
195 .name = "at76c711",195 result[@enumToInt(Feature.des)] = .{
196 .llvm_name = "at76c711",196 .index = @enumToInt(Feature.des),
197 .dependencies = &[_]*const Feature {197 .name = @tagName(Feature.des),
198 &feature_jmpcall,198 .llvm_name = "des",
199 &feature_lpm,199 .description = "The device supports the `DES k` encryption instruction",
200 &feature_sram,200 .dependencies = 0,
201 &feature_addsubiw,201 };
202 &feature_ijmpcall,202 result[@enumToInt(Feature.eijmpcall)] = .{
203 },203 .index = @enumToInt(Feature.eijmpcall),
204};204 .name = @tagName(Feature.eijmpcall),
205205 .llvm_name = "eijmpcall",
206pub const cpu_at86rf401 = Cpu{206 .description = "The device supports the `EIJMP`/`EICALL` instructions",
207 .name = "at86rf401",207 .dependencies = 0,
208 .llvm_name = "at86rf401",208 };
209 .dependencies = &[_]*const Feature {209 result[@enumToInt(Feature.elpm)] = .{
210 &feature_lpm,210 .index = @enumToInt(Feature.elpm),
211 &feature_sram,211 .name = @tagName(Feature.elpm),
212 &feature_addsubiw,212 .llvm_name = "elpm",
213 &feature_ijmpcall,213 .description = "The device supports the ELPM instruction",
214 &feature_lpmx,214 .dependencies = 0,
215 &feature_movw,215 };
216 },216 result[@enumToInt(Feature.elpmx)] = .{
217};217 .index = @enumToInt(Feature.elpmx),
218218 .name = @tagName(Feature.elpmx),
219pub const cpu_at90c8534 = Cpu{219 .llvm_name = "elpmx",
220 .name = "at90c8534",220 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
221 .llvm_name = "at90c8534",221 .dependencies = 0,
222 .dependencies = &[_]*const Feature {222 };
223 &feature_lpm,223 result[@enumToInt(Feature.ijmpcall)] = .{
224 &feature_sram,224 .index = @enumToInt(Feature.ijmpcall),
225 &feature_addsubiw,225 .name = @tagName(Feature.ijmpcall),
226 &feature_ijmpcall,226 .llvm_name = "ijmpcall",
227 },227 .description = "The device supports `IJMP`/`ICALL`instructions",
228};228 .dependencies = 0,
229229 };
230pub const cpu_at90can128 = Cpu{230 result[@enumToInt(Feature.jmpcall)] = .{
231 .name = "at90can128",231 .index = @enumToInt(Feature.jmpcall),
232 .llvm_name = "at90can128",232 .name = @tagName(Feature.jmpcall),
233 .dependencies = &[_]*const Feature {233 .llvm_name = "jmpcall",
234 &feature_lpmx,234 .description = "The device supports the `JMP` and `CALL` instructions",
235 &feature_jmpcall,235 .dependencies = 0,
236 &feature_lpm,236 };
237 &feature_elpm,237 result[@enumToInt(Feature.lpm)] = .{
238 &feature_sram,238 .index = @enumToInt(Feature.lpm),
239 &feature_addsubiw,239 .name = @tagName(Feature.lpm),
240 &feature_elpmx,240 .llvm_name = "lpm",
241 &feature_movw,241 .description = "The device supports the `LPM` instruction",
242 &feature_ijmpcall,242 .dependencies = 0,
243 &feature_break,243 };
244 &feature_spm,244 result[@enumToInt(Feature.lpmx)] = .{
245 &feature_mul,245 .index = @enumToInt(Feature.lpmx),
246 },246 .name = @tagName(Feature.lpmx),
247};247 .llvm_name = "lpmx",
248248 .description = "The device supports the `LPM Rd, Z[+]` instruction",
249pub const cpu_at90can32 = Cpu{249 .dependencies = 0,
250 .name = "at90can32",250 };
251 .llvm_name = "at90can32",251 result[@enumToInt(Feature.movw)] = .{
252 .dependencies = &[_]*const Feature {252 .index = @enumToInt(Feature.movw),
253 &feature_lpmx,253 .name = @tagName(Feature.movw),
254 &feature_jmpcall,254 .llvm_name = "movw",
255 &feature_lpm,255 .description = "The device supports the 16-bit MOVW instruction",
256 &feature_sram,256 .dependencies = 0,
257 &feature_addsubiw,257 };
258 &feature_movw,258 result[@enumToInt(Feature.mul)] = .{
259 &feature_ijmpcall,259 .index = @enumToInt(Feature.mul),
260 &feature_break,260 .name = @tagName(Feature.mul),
261 &feature_spm,261 .llvm_name = "mul",
262 &feature_mul,262 .description = "The device supports the multiplication instructions",
263 },263 .dependencies = 0,
264};264 };
265265 result[@enumToInt(Feature.rmw)] = .{
266pub const cpu_at90can64 = Cpu{266 .index = @enumToInt(Feature.rmw),
267 .name = "at90can64",267 .name = @tagName(Feature.rmw),
268 .llvm_name = "at90can64",268 .llvm_name = "rmw",
269 .dependencies = &[_]*const Feature {269 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
270 &feature_lpmx,270 .dependencies = 0,
271 &feature_jmpcall,271 };
272 &feature_lpm,272 result[@enumToInt(Feature.smallstack)] = .{
273 &feature_sram,273 .index = @enumToInt(Feature.smallstack),
274 &feature_addsubiw,274 .name = @tagName(Feature.smallstack),
275 &feature_movw,275 .llvm_name = "smallstack",
276 &feature_ijmpcall,276 .description = "The device has an 8-bit stack pointer",
277 &feature_break,277 .dependencies = 0,
278 &feature_spm,278 };
279 &feature_mul,279 result[@enumToInt(Feature.special)] = .{
280 },280 .index = @enumToInt(Feature.special),
281};281 .name = @tagName(Feature.special),
282282 .llvm_name = "special",
283pub const cpu_at90pwm1 = Cpu{283 .description = "Enable use of the entire instruction set - used for debugging",
284 .name = "at90pwm1",284 .dependencies = featureSet(&[_]Feature{
285 .llvm_name = "at90pwm1",285 .addsubiw,
286 .dependencies = &[_]*const Feature {286 .break,
287 &feature_lpmx,287 .des,
288 &feature_lpm,288 .eijmpcall,
289 &feature_sram,289 .elpm,
290 &feature_addsubiw,290 .elpmx,
291 &feature_movw,291 .ijmpcall,
292 &feature_ijmpcall,292 .jmpcall,
293 &feature_break,293 .lpm,
294 &feature_spm,294 .lpmx,
295 &feature_mul,295 .movw,
296 },296 .mul,
297};297 .rmw,
298298 .spm,
299pub const cpu_at90pwm161 = Cpu{299 .spmx,
300 .name = "at90pwm161",300 .sram,
301 .llvm_name = "at90pwm161",301 }),
302 .dependencies = &[_]*const Feature {302 };
303 &feature_lpmx,303 result[@enumToInt(Feature.spm)] = .{
304 &feature_jmpcall,304 .index = @enumToInt(Feature.spm),
305 &feature_lpm,305 .name = @tagName(Feature.spm),
306 &feature_sram,306 .llvm_name = "spm",
307 &feature_addsubiw,307 .description = "The device supports the `SPM` instruction",
308 &feature_movw,308 .dependencies = 0,
309 &feature_ijmpcall,309 };
310 &feature_break,310 result[@enumToInt(Feature.spmx)] = .{
311 &feature_spm,311 .index = @enumToInt(Feature.spmx),
312 &feature_mul,312 .name = @tagName(Feature.spmx),
313 },313 .llvm_name = "spmx",
314};314 .description = "The device supports the `SPM Z+` instruction",
315315 .dependencies = 0,
316pub const cpu_at90pwm2 = Cpu{316 };
317 .name = "at90pwm2",317 result[@enumToInt(Feature.sram)] = .{
318 .llvm_name = "at90pwm2",318 .index = @enumToInt(Feature.sram),
319 .dependencies = &[_]*const Feature {319 .name = @tagName(Feature.sram),
320 &feature_lpmx,320 .llvm_name = "sram",
321 &feature_lpm,321 .description = "The device has random access memory",
322 &feature_sram,322 .dependencies = 0,
323 &feature_addsubiw,323 };
324 &feature_movw,324 result[@enumToInt(Feature.tinyencoding)] = .{
325 &feature_ijmpcall,325 .index = @enumToInt(Feature.tinyencoding),
326 &feature_break,326 .name = @tagName(Feature.tinyencoding),
327 &feature_spm,327 .llvm_name = "tinyencoding",
328 &feature_mul,328 .description = "The device has Tiny core specific instruction encodings",
329 },329 .dependencies = 0,
330};330 };
331331 result[@enumToInt(Feature.xmega)] = .{
332pub const cpu_at90pwm216 = Cpu{332 .index = @enumToInt(Feature.xmega),
333 .name = "at90pwm216",333 .name = @tagName(Feature.xmega),
334 .llvm_name = "at90pwm216",334 .llvm_name = "xmega",
335 .dependencies = &[_]*const Feature {335 .description = "The device is a part of the xmega family",
336 &feature_lpmx,336 .dependencies = featureSet(&[_]Feature{
337 &feature_jmpcall,337 .avr51,
338 &feature_lpm,338 .des,
339 &feature_sram,339 .eijmpcall,
340 &feature_addsubiw,340 .spmx,
341 &feature_movw,341 }),
342 &feature_ijmpcall,342 };
343 &feature_break,343 result[@enumToInt(Feature.xmegau)] = .{
344 &feature_spm,344 .index = @enumToInt(Feature.xmegau),
345 &feature_mul,345 .name = @tagName(Feature.xmegau),
346 },346 .llvm_name = "xmegau",
347};347 .description = "The device is a part of the xmegau family",
348348 .dependencies = featureSet(&[_]Feature{
349pub const cpu_at90pwm2b = Cpu{349 .rmw,
350 .name = "at90pwm2b",350 .xmega,
351 .llvm_name = "at90pwm2b",351 }),
352 .dependencies = &[_]*const Feature {352 };
353 &feature_lpmx,353 break :blk result;
354 &feature_lpm,354};
355 &feature_sram,355
356 &feature_addsubiw,356pub const cpu = struct {
357 &feature_movw,357 pub const at43usb320 = Cpu{
358 &feature_ijmpcall,358 .name = "at43usb320",
359 &feature_break,359 .llvm_name = "at43usb320",
360 &feature_spm,360 .features = featureSet(&[_]Feature{
361 &feature_mul,361 .avr31,
362 },362 }),
363};363 };
364364 pub const at43usb355 = Cpu{
365pub const cpu_at90pwm3 = Cpu{365 .name = "at43usb355",
366 .name = "at90pwm3",366 .llvm_name = "at43usb355",
367 .llvm_name = "at90pwm3",367 .features = featureSet(&[_]Feature{
368 .dependencies = &[_]*const Feature {368 .avr3,
369 &feature_lpmx,369 }),
370 &feature_lpm,370 };
371 &feature_sram,371 pub const at76c711 = Cpu{
372 &feature_addsubiw,372 .name = "at76c711",
373 &feature_movw,373 .llvm_name = "at76c711",
374 &feature_ijmpcall,374 .features = featureSet(&[_]Feature{
375 &feature_break,375 .avr3,
376 &feature_spm,376 }),
377 &feature_mul,377 };
378 },378 pub const at86rf401 = Cpu{
379};379 .name = "at86rf401",
380380 .llvm_name = "at86rf401",
381pub const cpu_at90pwm316 = Cpu{381 .features = featureSet(&[_]Feature{
382 .name = "at90pwm316",382 .avr2,
383 .llvm_name = "at90pwm316",383 .lpmx,
384 .dependencies = &[_]*const Feature {384 .movw,
385 &feature_lpmx,385 }),
386 &feature_jmpcall,386 };
387 &feature_lpm,387 pub const at90c8534 = Cpu{
388 &feature_sram,388 .name = "at90c8534",
389 &feature_addsubiw,389 .llvm_name = "at90c8534",
390 &feature_movw,390 .features = featureSet(&[_]Feature{
391 &feature_ijmpcall,391 .avr2,
392 &feature_break,392 }),
393 &feature_spm,393 };
394 &feature_mul,394 pub const at90can128 = Cpu{
395 },395 .name = "at90can128",
396};396 .llvm_name = "at90can128",
397397 .features = featureSet(&[_]Feature{
398pub const cpu_at90pwm3b = Cpu{398 .avr51,
399 .name = "at90pwm3b",399 }),
400 .llvm_name = "at90pwm3b",400 };
401 .dependencies = &[_]*const Feature {401 pub const at90can32 = Cpu{
402 &feature_lpmx,402 .name = "at90can32",
403 &feature_lpm,403 .llvm_name = "at90can32",
404 &feature_sram,404 .features = featureSet(&[_]Feature{
405 &feature_addsubiw,405 .avr5,
406 &feature_movw,406 }),
407 &feature_ijmpcall,407 };
408 &feature_break,408 pub const at90can64 = Cpu{
409 &feature_spm,409 .name = "at90can64",
410 &feature_mul,410 .llvm_name = "at90can64",
411 },411 .features = featureSet(&[_]Feature{
412};412 .avr5,
413413 }),
414pub const cpu_at90pwm81 = Cpu{414 };
415 .name = "at90pwm81",415 pub const at90pwm1 = Cpu{
416 .llvm_name = "at90pwm81",416 .name = "at90pwm1",
417 .dependencies = &[_]*const Feature {417 .llvm_name = "at90pwm1",
418 &feature_lpmx,418 .features = featureSet(&[_]Feature{
419 &feature_lpm,419 .avr4,
420 &feature_sram,420 }),
421 &feature_addsubiw,421 };
422 &feature_movw,422 pub const at90pwm161 = Cpu{
423 &feature_ijmpcall,423 .name = "at90pwm161",
424 &feature_break,424 .llvm_name = "at90pwm161",
425 &feature_spm,425 .features = featureSet(&[_]Feature{
426 &feature_mul,426 .avr5,
427 },427 }),
428};428 };
429429 pub const at90pwm2 = Cpu{
430pub const cpu_at90s1200 = Cpu{430 .name = "at90pwm2",
431 .name = "at90s1200",431 .llvm_name = "at90pwm2",
432 .llvm_name = "at90s1200",432 .features = featureSet(&[_]Feature{
433 .dependencies = &[_]*const Feature {433 .avr4,
434 },434 }),
435};435 };
436436 pub const at90pwm216 = Cpu{
437pub const cpu_at90s2313 = Cpu{437 .name = "at90pwm216",
438 .name = "at90s2313",438 .llvm_name = "at90pwm216",
439 .llvm_name = "at90s2313",439 .features = featureSet(&[_]Feature{
440 .dependencies = &[_]*const Feature {440 .avr5,
441 &feature_lpm,441 }),
442 &feature_sram,442 };
443 &feature_addsubiw,443 pub const at90pwm2b = Cpu{
444 &feature_ijmpcall,444 .name = "at90pwm2b",
445 },445 .llvm_name = "at90pwm2b",
446};446 .features = featureSet(&[_]Feature{
447447 .avr4,
448pub const cpu_at90s2323 = Cpu{448 }),
449 .name = "at90s2323",449 };
450 .llvm_name = "at90s2323",450 pub const at90pwm3 = Cpu{
451 .dependencies = &[_]*const Feature {451 .name = "at90pwm3",
452 &feature_lpm,452 .llvm_name = "at90pwm3",
453 &feature_sram,453 .features = featureSet(&[_]Feature{
454 &feature_addsubiw,454 .avr4,
455 &feature_ijmpcall,455 }),
456 },456 };
457};457 pub const at90pwm316 = Cpu{
458458 .name = "at90pwm316",
459pub const cpu_at90s2333 = Cpu{459 .llvm_name = "at90pwm316",
460 .name = "at90s2333",460 .features = featureSet(&[_]Feature{
461 .llvm_name = "at90s2333",461 .avr5,
462 .dependencies = &[_]*const Feature {462 }),
463 &feature_lpm,463 };
464 &feature_sram,464 pub const at90pwm3b = Cpu{
465 &feature_addsubiw,465 .name = "at90pwm3b",
466 &feature_ijmpcall,466 .llvm_name = "at90pwm3b",
467 },467 .features = featureSet(&[_]Feature{
468};468 .avr4,
469469 }),
470pub const cpu_at90s2343 = Cpu{470 };
471 .name = "at90s2343",471 pub const at90pwm81 = Cpu{
472 .llvm_name = "at90s2343",472 .name = "at90pwm81",
473 .dependencies = &[_]*const Feature {473 .llvm_name = "at90pwm81",
474 &feature_lpm,474 .features = featureSet(&[_]Feature{
475 &feature_sram,475 .avr4,
476 &feature_addsubiw,476 }),
477 &feature_ijmpcall,477 };
478 },478 pub const at90s1200 = Cpu{
479};479 .name = "at90s1200",
480480 .llvm_name = "at90s1200",
481pub const cpu_at90s4414 = Cpu{481 .features = featureSet(&[_]Feature{
482 .name = "at90s4414",482 .avr0,
483 .llvm_name = "at90s4414",483 }),
484 .dependencies = &[_]*const Feature {484 };
485 &feature_lpm,485 pub const at90s2313 = Cpu{
486 &feature_sram,486 .name = "at90s2313",
487 &feature_addsubiw,487 .llvm_name = "at90s2313",
488 &feature_ijmpcall,488 .features = featureSet(&[_]Feature{
489 },489 .avr2,
490};490 }),
491491 };
492pub const cpu_at90s4433 = Cpu{492 pub const at90s2323 = Cpu{
493 .name = "at90s4433",493 .name = "at90s2323",
494 .llvm_name = "at90s4433",494 .llvm_name = "at90s2323",
495 .dependencies = &[_]*const Feature {495 .features = featureSet(&[_]Feature{
496 &feature_lpm,496 .avr2,
497 &feature_sram,497 }),
498 &feature_addsubiw,498 };
499 &feature_ijmpcall,499 pub const at90s2333 = Cpu{
500 },500 .name = "at90s2333",
501};501 .llvm_name = "at90s2333",
502502 .features = featureSet(&[_]Feature{
503pub const cpu_at90s4434 = Cpu{503 .avr2,
504 .name = "at90s4434",504 }),
505 .llvm_name = "at90s4434",505 };
506 .dependencies = &[_]*const Feature {506 pub const at90s2343 = Cpu{
507 &feature_lpm,507 .name = "at90s2343",
508 &feature_sram,508 .llvm_name = "at90s2343",
509 &feature_addsubiw,509 .features = featureSet(&[_]Feature{
510 &feature_ijmpcall,510 .avr2,
511 },511 }),
512};512 };
513513 pub const at90s4414 = Cpu{
514pub const cpu_at90s8515 = Cpu{514 .name = "at90s4414",
515 .name = "at90s8515",515 .llvm_name = "at90s4414",
516 .llvm_name = "at90s8515",516 .features = featureSet(&[_]Feature{
517 .dependencies = &[_]*const Feature {517 .avr2,
518 &feature_lpm,518 }),
519 &feature_sram,519 };
520 &feature_addsubiw,520 pub const at90s4433 = Cpu{
521 &feature_ijmpcall,521 .name = "at90s4433",
522 },522 .llvm_name = "at90s4433",
523};523 .features = featureSet(&[_]Feature{
524524 .avr2,
525pub const cpu_at90s8535 = Cpu{525 }),
526 .name = "at90s8535",526 };
527 .llvm_name = "at90s8535",527 pub const at90s4434 = Cpu{
528 .dependencies = &[_]*const Feature {528 .name = "at90s4434",
529 &feature_lpm,529 .llvm_name = "at90s4434",
530 &feature_sram,530 .features = featureSet(&[_]Feature{
531 &feature_addsubiw,531 .avr2,
532 &feature_ijmpcall,532 }),
533 },533 };
534};534 pub const at90s8515 = Cpu{
535535 .name = "at90s8515",
536pub const cpu_at90scr100 = Cpu{536 .llvm_name = "at90s8515",
537 .name = "at90scr100",537 .features = featureSet(&[_]Feature{
538 .llvm_name = "at90scr100",538 .avr2,
539 .dependencies = &[_]*const Feature {539 }),
540 &feature_lpmx,540 };
541 &feature_jmpcall,541 pub const at90s8535 = Cpu{
542 &feature_lpm,542 .name = "at90s8535",
543 &feature_sram,543 .llvm_name = "at90s8535",
544 &feature_addsubiw,544 .features = featureSet(&[_]Feature{
545 &feature_movw,545 .avr2,
546 &feature_ijmpcall,546 }),
547 &feature_break,547 };
548 &feature_spm,548 pub const at90scr100 = Cpu{
549 &feature_mul,549 .name = "at90scr100",
550 },550 .llvm_name = "at90scr100",
551};551 .features = featureSet(&[_]Feature{
552552 .avr5,
553pub const cpu_at90usb1286 = Cpu{553 }),
554 .name = "at90usb1286",554 };
555 .llvm_name = "at90usb1286",555 pub const at90usb1286 = Cpu{
556 .dependencies = &[_]*const Feature {556 .name = "at90usb1286",
557 &feature_lpmx,557 .llvm_name = "at90usb1286",
558 &feature_jmpcall,558 .features = featureSet(&[_]Feature{
559 &feature_lpm,559 .avr51,
560 &feature_elpm,560 }),
561 &feature_sram,561 };
562 &feature_addsubiw,562 pub const at90usb1287 = Cpu{
563 &feature_elpmx,563 .name = "at90usb1287",
564 &feature_movw,564 .llvm_name = "at90usb1287",
565 &feature_ijmpcall,565 .features = featureSet(&[_]Feature{
566 &feature_break,566 .avr51,
567 &feature_spm,567 }),
568 &feature_mul,568 };
569 },569 pub const at90usb162 = Cpu{
570};570 .name = "at90usb162",
571571 .llvm_name = "at90usb162",
572pub const cpu_at90usb1287 = Cpu{572 .features = featureSet(&[_]Feature{
573 .name = "at90usb1287",573 .avr35,
574 .llvm_name = "at90usb1287",574 }),
575 .dependencies = &[_]*const Feature {575 };
576 &feature_lpmx,576 pub const at90usb646 = Cpu{
577 &feature_jmpcall,577 .name = "at90usb646",
578 &feature_lpm,578 .llvm_name = "at90usb646",
579 &feature_elpm,579 .features = featureSet(&[_]Feature{
580 &feature_sram,580 .avr5,
581 &feature_addsubiw,581 }),
582 &feature_elpmx,582 };
583 &feature_movw,583 pub const at90usb647 = Cpu{
584 &feature_ijmpcall,584 .name = "at90usb647",
585 &feature_break,585 .llvm_name = "at90usb647",
586 &feature_spm,586 .features = featureSet(&[_]Feature{
587 &feature_mul,587 .avr5,
588 },588 }),
589};589 };
590590 pub const at90usb82 = Cpu{
591pub const cpu_at90usb162 = Cpu{591 .name = "at90usb82",
592 .name = "at90usb162",592 .llvm_name = "at90usb82",
593 .llvm_name = "at90usb162",593 .features = featureSet(&[_]Feature{
594 .dependencies = &[_]*const Feature {594 .avr35,
595 &feature_lpmx,595 }),
596 &feature_jmpcall,596 };
597 &feature_lpm,597 pub const at94k = Cpu{
598 &feature_sram,598 .name = "at94k",
599 &feature_addsubiw,599 .llvm_name = "at94k",
600 &feature_movw,600 .features = featureSet(&[_]Feature{
601 &feature_ijmpcall,601 .avr3,
602 &feature_break,602 .lpmx,
603 &feature_spm,603 .movw,
604 },604 .mul,
605};605 }),
606606 };
607pub const cpu_at90usb646 = Cpu{607 pub const ata5272 = Cpu{
608 .name = "at90usb646",608 .name = "ata5272",
609 .llvm_name = "at90usb646",609 .llvm_name = "ata5272",
610 .dependencies = &[_]*const Feature {610 .features = featureSet(&[_]Feature{
611 &feature_lpmx,611 .avr25,
612 &feature_jmpcall,612 }),
613 &feature_lpm,613 };
614 &feature_sram,614 pub const ata5505 = Cpu{
615 &feature_addsubiw,615 .name = "ata5505",
616 &feature_movw,616 .llvm_name = "ata5505",
617 &feature_ijmpcall,617 .features = featureSet(&[_]Feature{
618 &feature_break,618 .avr35,
619 &feature_spm,619 }),
620 &feature_mul,620 };
621 },621 pub const ata5790 = Cpu{
622};622 .name = "ata5790",
623623 .llvm_name = "ata5790",
624pub const cpu_at90usb647 = Cpu{624 .features = featureSet(&[_]Feature{
625 .name = "at90usb647",625 .avr5,
626 .llvm_name = "at90usb647",626 }),
627 .dependencies = &[_]*const Feature {627 };
628 &feature_lpmx,628 pub const ata5795 = Cpu{
629 &feature_jmpcall,629 .name = "ata5795",
630 &feature_lpm,630 .llvm_name = "ata5795",
631 &feature_sram,631 .features = featureSet(&[_]Feature{
632 &feature_addsubiw,632 .avr5,
633 &feature_movw,633 }),
634 &feature_ijmpcall,634 };
635 &feature_break,635 pub const ata6285 = Cpu{
636 &feature_spm,636 .name = "ata6285",
637 &feature_mul,637 .llvm_name = "ata6285",
638 },638 .features = featureSet(&[_]Feature{
639};639 .avr4,
640640 }),
641pub const cpu_at90usb82 = Cpu{641 };
642 .name = "at90usb82",642 pub const ata6286 = Cpu{
643 .llvm_name = "at90usb82",643 .name = "ata6286",
644 .dependencies = &[_]*const Feature {644 .llvm_name = "ata6286",
645 &feature_lpmx,645 .features = featureSet(&[_]Feature{
646 &feature_jmpcall,646 .avr4,
647 &feature_lpm,647 }),
648 &feature_sram,648 };
649 &feature_addsubiw,649 pub const ata6289 = Cpu{
650 &feature_movw,650 .name = "ata6289",
651 &feature_ijmpcall,651 .llvm_name = "ata6289",
652 &feature_break,652 .features = featureSet(&[_]Feature{
653 &feature_spm,653 .avr4,
654 },654 }),
655};655 };
656656 pub const atmega103 = Cpu{
657pub const cpu_at94k = Cpu{657 .name = "atmega103",
658 .name = "at94k",658 .llvm_name = "atmega103",
659 .llvm_name = "at94k",659 .features = featureSet(&[_]Feature{
660 .dependencies = &[_]*const Feature {660 .avr31,
661 &feature_jmpcall,661 }),
662 &feature_lpm,662 };
663 &feature_sram,663 pub const atmega128 = Cpu{
664 &feature_addsubiw,664 .name = "atmega128",
665 &feature_ijmpcall,665 .llvm_name = "atmega128",
666 &feature_lpmx,666 .features = featureSet(&[_]Feature{
667 &feature_movw,667 .avr51,
668 &feature_mul,668 }),
669 },669 };
670};670 pub const atmega1280 = Cpu{
671671 .name = "atmega1280",
672pub const cpu_ata5272 = Cpu{672 .llvm_name = "atmega1280",
673 .name = "ata5272",673 .features = featureSet(&[_]Feature{
674 .llvm_name = "ata5272",674 .avr51,
675 .dependencies = &[_]*const Feature {675 }),
676 &feature_lpmx,676 };
677 &feature_lpm,677 pub const atmega1281 = Cpu{
678 &feature_sram,678 .name = "atmega1281",
679 &feature_addsubiw,679 .llvm_name = "atmega1281",
680 &feature_movw,680 .features = featureSet(&[_]Feature{
681 &feature_ijmpcall,681 .avr51,
682 &feature_break,682 }),
683 &feature_spm,683 };
684 },684 pub const atmega1284 = Cpu{
685};685 .name = "atmega1284",
686686 .llvm_name = "atmega1284",
687pub const cpu_ata5505 = Cpu{687 .features = featureSet(&[_]Feature{
688 .name = "ata5505",688 .avr51,
689 .llvm_name = "ata5505",689 }),
690 .dependencies = &[_]*const Feature {690 };
691 &feature_lpmx,691 pub const atmega1284p = Cpu{
692 &feature_jmpcall,692 .name = "atmega1284p",
693 &feature_lpm,693 .llvm_name = "atmega1284p",
694 &feature_sram,694 .features = featureSet(&[_]Feature{
695 &feature_addsubiw,695 .avr51,
696 &feature_movw,696 }),
697 &feature_ijmpcall,697 };
698 &feature_break,698 pub const atmega1284rfr2 = Cpu{
699 &feature_spm,699 .name = "atmega1284rfr2",
700 },700 .llvm_name = "atmega1284rfr2",
701};701 .features = featureSet(&[_]Feature{
702702 .avr51,
703pub const cpu_ata5790 = Cpu{703 }),
704 .name = "ata5790",704 };
705 .llvm_name = "ata5790",705 pub const atmega128a = Cpu{
706 .dependencies = &[_]*const Feature {706 .name = "atmega128a",
707 &feature_lpmx,707 .llvm_name = "atmega128a",
708 &feature_jmpcall,708 .features = featureSet(&[_]Feature{
709 &feature_lpm,709 .avr51,
710 &feature_sram,710 }),
711 &feature_addsubiw,711 };
712 &feature_movw,712 pub const atmega128rfa1 = Cpu{
713 &feature_ijmpcall,713 .name = "atmega128rfa1",
714 &feature_break,714 .llvm_name = "atmega128rfa1",
715 &feature_spm,715 .features = featureSet(&[_]Feature{
716 &feature_mul,716 .avr51,
717 },717 }),
718};718 };
719719 pub const atmega128rfr2 = Cpu{
720pub const cpu_ata5795 = Cpu{720 .name = "atmega128rfr2",
721 .name = "ata5795",721 .llvm_name = "atmega128rfr2",
722 .llvm_name = "ata5795",722 .features = featureSet(&[_]Feature{
723 .dependencies = &[_]*const Feature {723 .avr51,
724 &feature_lpmx,724 }),
725 &feature_jmpcall,725 };
726 &feature_lpm,726 pub const atmega16 = Cpu{
727 &feature_sram,727 .name = "atmega16",
728 &feature_addsubiw,728 .llvm_name = "atmega16",
729 &feature_movw,729 .features = featureSet(&[_]Feature{
730 &feature_ijmpcall,730 .avr5,
731 &feature_break,731 }),
732 &feature_spm,732 };
733 &feature_mul,733 pub const atmega161 = Cpu{
734 },734 .name = "atmega161",
735};735 .llvm_name = "atmega161",
736736 .features = featureSet(&[_]Feature{
737pub const cpu_ata6285 = Cpu{737 .avr3,
738 .name = "ata6285",738 .lpmx,
739 .llvm_name = "ata6285",739 .movw,
740 .dependencies = &[_]*const Feature {740 .mul,
741 &feature_lpmx,741 .spm,
742 &feature_lpm,742 }),
743 &feature_sram,743 };
744 &feature_addsubiw,744 pub const atmega162 = Cpu{
745 &feature_movw,745 .name = "atmega162",
746 &feature_ijmpcall,746 .llvm_name = "atmega162",
747 &feature_break,747 .features = featureSet(&[_]Feature{
748 &feature_spm,748 .avr5,
749 &feature_mul,749 }),
750 },750 };
751};751 pub const atmega163 = Cpu{
752752 .name = "atmega163",
753pub const cpu_ata6286 = Cpu{753 .llvm_name = "atmega163",
754 .name = "ata6286",754 .features = featureSet(&[_]Feature{
755 .llvm_name = "ata6286",755 .avr3,
756 .dependencies = &[_]*const Feature {756 .lpmx,
757 &feature_lpmx,757 .movw,
758 &feature_lpm,758 .mul,
759 &feature_sram,759 .spm,
760 &feature_addsubiw,760 }),
761 &feature_movw,761 };
762 &feature_ijmpcall,762 pub const atmega164a = Cpu{
763 &feature_break,763 .name = "atmega164a",
764 &feature_spm,764 .llvm_name = "atmega164a",
765 &feature_mul,765 .features = featureSet(&[_]Feature{
766 },766 .avr5,
767};767 }),
768768 };
769pub const cpu_ata6289 = Cpu{769 pub const atmega164p = Cpu{
770 .name = "ata6289",770 .name = "atmega164p",
771 .llvm_name = "ata6289",771 .llvm_name = "atmega164p",
772 .dependencies = &[_]*const Feature {772 .features = featureSet(&[_]Feature{
773 &feature_lpmx,773 .avr5,
774 &feature_lpm,774 }),
775 &feature_sram,775 };
776 &feature_addsubiw,776 pub const atmega164pa = Cpu{
777 &feature_movw,777 .name = "atmega164pa",
778 &feature_ijmpcall,778 .llvm_name = "atmega164pa",
779 &feature_break,779 .features = featureSet(&[_]Feature{
780 &feature_spm,780 .avr5,
781 &feature_mul,781 }),
782 },782 };
783};783 pub const atmega165 = Cpu{
784784 .name = "atmega165",
785pub const cpu_atmega103 = Cpu{785 .llvm_name = "atmega165",
786 .name = "atmega103",786 .features = featureSet(&[_]Feature{
787 .llvm_name = "atmega103",787 .avr5,
788 .dependencies = &[_]*const Feature {788 }),
789 &feature_jmpcall,789 };
790 &feature_lpm,790 pub const atmega165a = Cpu{
791 &feature_elpm,791 .name = "atmega165a",
792 &feature_sram,792 .llvm_name = "atmega165a",
793 &feature_addsubiw,793 .features = featureSet(&[_]Feature{
794 &feature_ijmpcall,794 .avr5,
795 },795 }),
796};796 };
797797 pub const atmega165p = Cpu{
798pub const cpu_atmega128 = Cpu{798 .name = "atmega165p",
799 .name = "atmega128",799 .llvm_name = "atmega165p",
800 .llvm_name = "atmega128",800 .features = featureSet(&[_]Feature{
801 .dependencies = &[_]*const Feature {801 .avr5,
802 &feature_lpmx,802 }),
803 &feature_jmpcall,803 };
804 &feature_lpm,804 pub const atmega165pa = Cpu{
805 &feature_elpm,805 .name = "atmega165pa",
806 &feature_sram,806 .llvm_name = "atmega165pa",
807 &feature_addsubiw,807 .features = featureSet(&[_]Feature{
808 &feature_elpmx,808 .avr5,
809 &feature_movw,809 }),
810 &feature_ijmpcall,810 };
811 &feature_break,811 pub const atmega168 = Cpu{
812 &feature_spm,812 .name = "atmega168",
813 &feature_mul,813 .llvm_name = "atmega168",
814 },814 .features = featureSet(&[_]Feature{
815};815 .avr5,
816816 }),
817pub const cpu_atmega1280 = Cpu{817 };
818 .name = "atmega1280",818 pub const atmega168a = Cpu{
819 .llvm_name = "atmega1280",819 .name = "atmega168a",
820 .dependencies = &[_]*const Feature {820 .llvm_name = "atmega168a",
821 &feature_lpmx,821 .features = featureSet(&[_]Feature{
822 &feature_jmpcall,822 .avr5,
823 &feature_lpm,823 }),
824 &feature_elpm,824 };
825 &feature_sram,825 pub const atmega168p = Cpu{
826 &feature_addsubiw,826 .name = "atmega168p",
827 &feature_elpmx,827 .llvm_name = "atmega168p",
828 &feature_movw,828 .features = featureSet(&[_]Feature{
829 &feature_ijmpcall,829 .avr5,
830 &feature_break,830 }),
831 &feature_spm,831 };
832 &feature_mul,832 pub const atmega168pa = Cpu{
833 },833 .name = "atmega168pa",
834};834 .llvm_name = "atmega168pa",
835835 .features = featureSet(&[_]Feature{
836pub const cpu_atmega1281 = Cpu{836 .avr5,
837 .name = "atmega1281",837 }),
838 .llvm_name = "atmega1281",838 };
839 .dependencies = &[_]*const Feature {839 pub const atmega169 = Cpu{
840 &feature_lpmx,840 .name = "atmega169",
841 &feature_jmpcall,841 .llvm_name = "atmega169",
842 &feature_lpm,842 .features = featureSet(&[_]Feature{
843 &feature_elpm,843 .avr5,
844 &feature_sram,844 }),
845 &feature_addsubiw,845 };
846 &feature_elpmx,846 pub const atmega169a = Cpu{
847 &feature_movw,847 .name = "atmega169a",
848 &feature_ijmpcall,848 .llvm_name = "atmega169a",
849 &feature_break,849 .features = featureSet(&[_]Feature{
850 &feature_spm,850 .avr5,
851 &feature_mul,851 }),
852 },852 };
853};853 pub const atmega169p = Cpu{
854854 .name = "atmega169p",
855pub const cpu_atmega1284 = Cpu{855 .llvm_name = "atmega169p",
856 .name = "atmega1284",856 .features = featureSet(&[_]Feature{
857 .llvm_name = "atmega1284",857 .avr5,
858 .dependencies = &[_]*const Feature {858 }),
859 &feature_lpmx,859 };
860 &feature_jmpcall,860 pub const atmega169pa = Cpu{
861 &feature_lpm,861 .name = "atmega169pa",
862 &feature_elpm,862 .llvm_name = "atmega169pa",
863 &feature_sram,863 .features = featureSet(&[_]Feature{
864 &feature_addsubiw,864 .avr5,
865 &feature_elpmx,865 }),
866 &feature_movw,866 };
867 &feature_ijmpcall,867 pub const atmega16a = Cpu{
868 &feature_break,868 .name = "atmega16a",
869 &feature_spm,869 .llvm_name = "atmega16a",
870 &feature_mul,870 .features = featureSet(&[_]Feature{
871 },871 .avr5,
872};872 }),
873873 };
874pub const cpu_atmega1284p = Cpu{874 pub const atmega16hva = Cpu{
875 .name = "atmega1284p",875 .name = "atmega16hva",
876 .llvm_name = "atmega1284p",876 .llvm_name = "atmega16hva",
877 .dependencies = &[_]*const Feature {877 .features = featureSet(&[_]Feature{
878 &feature_lpmx,878 .avr5,
879 &feature_jmpcall,879 }),
880 &feature_lpm,880 };
881 &feature_elpm,881 pub const atmega16hva2 = Cpu{
882 &feature_sram,882 .name = "atmega16hva2",
883 &feature_addsubiw,883 .llvm_name = "atmega16hva2",
884 &feature_elpmx,884 .features = featureSet(&[_]Feature{
885 &feature_movw,885 .avr5,
886 &feature_ijmpcall,886 }),
887 &feature_break,887 };
888 &feature_spm,888 pub const atmega16hvb = Cpu{
889 &feature_mul,889 .name = "atmega16hvb",
890 },890 .llvm_name = "atmega16hvb",
891};891 .features = featureSet(&[_]Feature{
892892 .avr5,
893pub const cpu_atmega1284rfr2 = Cpu{893 }),
894 .name = "atmega1284rfr2",894 };
895 .llvm_name = "atmega1284rfr2",895 pub const atmega16hvbrevb = Cpu{
896 .dependencies = &[_]*const Feature {896 .name = "atmega16hvbrevb",
897 &feature_lpmx,897 .llvm_name = "atmega16hvbrevb",
898 &feature_jmpcall,898 .features = featureSet(&[_]Feature{
899 &feature_lpm,899 .avr5,
900 &feature_elpm,900 }),
901 &feature_sram,901 };
902 &feature_addsubiw,902 pub const atmega16m1 = Cpu{
903 &feature_elpmx,903 .name = "atmega16m1",
904 &feature_movw,904 .llvm_name = "atmega16m1",
905 &feature_ijmpcall,905 .features = featureSet(&[_]Feature{
906 &feature_break,906 .avr5,
907 &feature_spm,907 }),
908 &feature_mul,908 };
909 },909 pub const atmega16u2 = Cpu{
910};910 .name = "atmega16u2",
911911 .llvm_name = "atmega16u2",
912pub const cpu_atmega128a = Cpu{912 .features = featureSet(&[_]Feature{
913 .name = "atmega128a",913 .avr35,
914 .llvm_name = "atmega128a",914 }),
915 .dependencies = &[_]*const Feature {915 };
916 &feature_lpmx,916 pub const atmega16u4 = Cpu{
917 &feature_jmpcall,917 .name = "atmega16u4",
918 &feature_lpm,918 .llvm_name = "atmega16u4",
919 &feature_elpm,919 .features = featureSet(&[_]Feature{
920 &feature_sram,920 .avr5,
921 &feature_addsubiw,921 }),
922 &feature_elpmx,922 };
923 &feature_movw,923 pub const atmega2560 = Cpu{
924 &feature_ijmpcall,924 .name = "atmega2560",
925 &feature_break,925 .llvm_name = "atmega2560",
926 &feature_spm,926 .features = featureSet(&[_]Feature{
927 &feature_mul,927 .avr6,
928 },928 }),
929};929 };
930930 pub const atmega2561 = Cpu{
931pub const cpu_atmega128rfa1 = Cpu{931 .name = "atmega2561",
932 .name = "atmega128rfa1",932 .llvm_name = "atmega2561",
933 .llvm_name = "atmega128rfa1",933 .features = featureSet(&[_]Feature{
934 .dependencies = &[_]*const Feature {934 .avr6,
935 &feature_lpmx,935 }),
936 &feature_jmpcall,936 };
937 &feature_lpm,937 pub const atmega2564rfr2 = Cpu{
938 &feature_elpm,938 .name = "atmega2564rfr2",
939 &feature_sram,939 .llvm_name = "atmega2564rfr2",
940 &feature_addsubiw,940 .features = featureSet(&[_]Feature{
941 &feature_elpmx,941 .avr6,
942 &feature_movw,942 }),
943 &feature_ijmpcall,943 };
944 &feature_break,944 pub const atmega256rfr2 = Cpu{
945 &feature_spm,945 .name = "atmega256rfr2",
946 &feature_mul,946 .llvm_name = "atmega256rfr2",
947 },947 .features = featureSet(&[_]Feature{
948};948 .avr6,
949949 }),
950pub const cpu_atmega128rfr2 = Cpu{950 };
951 .name = "atmega128rfr2",951 pub const atmega32 = Cpu{
952 .llvm_name = "atmega128rfr2",952 .name = "atmega32",
953 .dependencies = &[_]*const Feature {953 .llvm_name = "atmega32",
954 &feature_lpmx,954 .features = featureSet(&[_]Feature{
955 &feature_jmpcall,955 .avr5,
956 &feature_lpm,956 }),
957 &feature_elpm,957 };
958 &feature_sram,958 pub const atmega323 = Cpu{
959 &feature_addsubiw,959 .name = "atmega323",
960 &feature_elpmx,960 .llvm_name = "atmega323",
961 &feature_movw,961 .features = featureSet(&[_]Feature{
962 &feature_ijmpcall,962 .avr5,
963 &feature_break,963 }),
964 &feature_spm,964 };
965 &feature_mul,965 pub const atmega324a = Cpu{
966 },966 .name = "atmega324a",
967};967 .llvm_name = "atmega324a",
968968 .features = featureSet(&[_]Feature{
969pub const cpu_atmega16 = Cpu{969 .avr5,
970 .name = "atmega16",970 }),
971 .llvm_name = "atmega16",971 };
972 .dependencies = &[_]*const Feature {972 pub const atmega324p = Cpu{
973 &feature_lpmx,973 .name = "atmega324p",
974 &feature_jmpcall,974 .llvm_name = "atmega324p",
975 &feature_lpm,975 .features = featureSet(&[_]Feature{
976 &feature_sram,976 .avr5,
977 &feature_addsubiw,977 }),
978 &feature_movw,978 };
979 &feature_ijmpcall,979 pub const atmega324pa = Cpu{
980 &feature_break,980 .name = "atmega324pa",
981 &feature_spm,981 .llvm_name = "atmega324pa",
982 &feature_mul,982 .features = featureSet(&[_]Feature{
983 },983 .avr5,
984};984 }),
985985 };
986pub const cpu_atmega161 = Cpu{986 pub const atmega325 = Cpu{
987 .name = "atmega161",987 .name = "atmega325",
988 .llvm_name = "atmega161",988 .llvm_name = "atmega325",
989 .dependencies = &[_]*const Feature {989 .features = featureSet(&[_]Feature{
990 &feature_jmpcall,990 .avr5,
991 &feature_lpm,991 }),
992 &feature_sram,992 };
993 &feature_addsubiw,993 pub const atmega3250 = Cpu{
994 &feature_ijmpcall,994 .name = "atmega3250",
995 &feature_lpmx,995 .llvm_name = "atmega3250",
996 &feature_movw,996 .features = featureSet(&[_]Feature{
997 &feature_mul,997 .avr5,
998 &feature_spm,998 }),
999 },999 };
1000};1000 pub const atmega3250a = Cpu{
10011001 .name = "atmega3250a",
1002pub const cpu_atmega162 = Cpu{1002 .llvm_name = "atmega3250a",
1003 .name = "atmega162",1003 .features = featureSet(&[_]Feature{
1004 .llvm_name = "atmega162",1004 .avr5,
1005 .dependencies = &[_]*const Feature {1005 }),
1006 &feature_lpmx,1006 };
1007 &feature_jmpcall,1007 pub const atmega3250p = Cpu{
1008 &feature_lpm,1008 .name = "atmega3250p",
1009 &feature_sram,1009 .llvm_name = "atmega3250p",
1010 &feature_addsubiw,1010 .features = featureSet(&[_]Feature{
1011 &feature_movw,1011 .avr5,
1012 &feature_ijmpcall,1012 }),
1013 &feature_break,1013 };
1014 &feature_spm,1014 pub const atmega3250pa = Cpu{
1015 &feature_mul,1015 .name = "atmega3250pa",
1016 },1016 .llvm_name = "atmega3250pa",
1017};1017 .features = featureSet(&[_]Feature{
10181018 .avr5,
1019pub const cpu_atmega163 = Cpu{1019 }),
1020 .name = "atmega163",1020 };
1021 .llvm_name = "atmega163",1021 pub const atmega325a = Cpu{
1022 .dependencies = &[_]*const Feature {1022 .name = "atmega325a",
1023 &feature_jmpcall,1023 .llvm_name = "atmega325a",
1024 &feature_lpm,1024 .features = featureSet(&[_]Feature{
1025 &feature_sram,1025 .avr5,
1026 &feature_addsubiw,1026 }),
1027 &feature_ijmpcall,1027 };
1028 &feature_lpmx,1028 pub const atmega325p = Cpu{
1029 &feature_movw,1029 .name = "atmega325p",
1030 &feature_mul,1030 .llvm_name = "atmega325p",
1031 &feature_spm,1031 .features = featureSet(&[_]Feature{
1032 },1032 .avr5,
1033};1033 }),
10341034 };
1035pub const cpu_atmega164a = Cpu{1035 pub const atmega325pa = Cpu{
1036 .name = "atmega164a",1036 .name = "atmega325pa",
1037 .llvm_name = "atmega164a",1037 .llvm_name = "atmega325pa",
1038 .dependencies = &[_]*const Feature {1038 .features = featureSet(&[_]Feature{
1039 &feature_lpmx,1039 .avr5,
1040 &feature_jmpcall,1040 }),
1041 &feature_lpm,1041 };
1042 &feature_sram,1042 pub const atmega328 = Cpu{
1043 &feature_addsubiw,1043 .name = "atmega328",
1044 &feature_movw,1044 .llvm_name = "atmega328",
1045 &feature_ijmpcall,1045 .features = featureSet(&[_]Feature{
1046 &feature_break,1046 .avr5,
1047 &feature_spm,1047 }),
1048 &feature_mul,1048 };
1049 },1049 pub const atmega328p = Cpu{
1050};1050 .name = "atmega328p",
10511051 .llvm_name = "atmega328p",
1052pub const cpu_atmega164p = Cpu{1052 .features = featureSet(&[_]Feature{
1053 .name = "atmega164p",1053 .avr5,
1054 .llvm_name = "atmega164p",1054 }),
1055 .dependencies = &[_]*const Feature {1055 };
1056 &feature_lpmx,1056 pub const atmega329 = Cpu{
1057 &feature_jmpcall,1057 .name = "atmega329",
1058 &feature_lpm,1058 .llvm_name = "atmega329",
1059 &feature_sram,1059 .features = featureSet(&[_]Feature{
1060 &feature_addsubiw,1060 .avr5,
1061 &feature_movw,1061 }),
1062 &feature_ijmpcall,1062 };
1063 &feature_break,1063 pub const atmega3290 = Cpu{
1064 &feature_spm,1064 .name = "atmega3290",
1065 &feature_mul,1065 .llvm_name = "atmega3290",
1066 },1066 .features = featureSet(&[_]Feature{
1067};1067 .avr5,
10681068 }),
1069pub const cpu_atmega164pa = Cpu{1069 };
1070 .name = "atmega164pa",1070 pub const atmega3290a = Cpu{
1071 .llvm_name = "atmega164pa",1071 .name = "atmega3290a",
1072 .dependencies = &[_]*const Feature {1072 .llvm_name = "atmega3290a",
1073 &feature_lpmx,1073 .features = featureSet(&[_]Feature{
1074 &feature_jmpcall,1074 .avr5,
1075 &feature_lpm,1075 }),
1076 &feature_sram,1076 };
1077 &feature_addsubiw,1077 pub const atmega3290p = Cpu{
1078 &feature_movw,1078 .name = "atmega3290p",
1079 &feature_ijmpcall,1079 .llvm_name = "atmega3290p",
1080 &feature_break,1080 .features = featureSet(&[_]Feature{
1081 &feature_spm,1081 .avr5,
1082 &feature_mul,1082 }),
1083 },1083 };
1084};1084 pub const atmega3290pa = Cpu{
10851085 .name = "atmega3290pa",
1086pub const cpu_atmega165 = Cpu{1086 .llvm_name = "atmega3290pa",
1087 .name = "atmega165",1087 .features = featureSet(&[_]Feature{
1088 .llvm_name = "atmega165",1088 .avr5,
1089 .dependencies = &[_]*const Feature {1089 }),
1090 &feature_lpmx,1090 };
1091 &feature_jmpcall,1091 pub const atmega329a = Cpu{
1092 &feature_lpm,1092 .name = "atmega329a",
1093 &feature_sram,1093 .llvm_name = "atmega329a",
1094 &feature_addsubiw,1094 .features = featureSet(&[_]Feature{
1095 &feature_movw,1095 .avr5,
1096 &feature_ijmpcall,1096 }),
1097 &feature_break,1097 };
1098 &feature_spm,1098 pub const atmega329p = Cpu{
1099 &feature_mul,1099 .name = "atmega329p",
1100 },1100 .llvm_name = "atmega329p",
1101};1101 .features = featureSet(&[_]Feature{
11021102 .avr5,
1103pub const cpu_atmega165a = Cpu{1103 }),
1104 .name = "atmega165a",1104 };
1105 .llvm_name = "atmega165a",1105 pub const atmega329pa = Cpu{
1106 .dependencies = &[_]*const Feature {1106 .name = "atmega329pa",
1107 &feature_lpmx,1107 .llvm_name = "atmega329pa",
1108 &feature_jmpcall,1108 .features = featureSet(&[_]Feature{
1109 &feature_lpm,1109 .avr5,
1110 &feature_sram,1110 }),
1111 &feature_addsubiw,1111 };
1112 &feature_movw,1112 pub const atmega32a = Cpu{
1113 &feature_ijmpcall,1113 .name = "atmega32a",
1114 &feature_break,1114 .llvm_name = "atmega32a",
1115 &feature_spm,1115 .features = featureSet(&[_]Feature{
1116 &feature_mul,1116 .avr5,
1117 },1117 }),
1118};1118 };
11191119 pub const atmega32c1 = Cpu{
1120pub const cpu_atmega165p = Cpu{1120 .name = "atmega32c1",
1121 .name = "atmega165p",1121 .llvm_name = "atmega32c1",
1122 .llvm_name = "atmega165p",1122 .features = featureSet(&[_]Feature{
1123 .dependencies = &[_]*const Feature {1123 .avr5,
1124 &feature_lpmx,1124 }),
1125 &feature_jmpcall,1125 };
1126 &feature_lpm,1126 pub const atmega32hvb = Cpu{
1127 &feature_sram,1127 .name = "atmega32hvb",
1128 &feature_addsubiw,1128 .llvm_name = "atmega32hvb",
1129 &feature_movw,1129 .features = featureSet(&[_]Feature{
1130 &feature_ijmpcall,1130 .avr5,
1131 &feature_break,1131 }),
1132 &feature_spm,1132 };
1133 &feature_mul,1133 pub const atmega32hvbrevb = Cpu{
1134 },1134 .name = "atmega32hvbrevb",
1135};1135 .llvm_name = "atmega32hvbrevb",
11361136 .features = featureSet(&[_]Feature{
1137pub const cpu_atmega165pa = Cpu{1137 .avr5,
1138 .name = "atmega165pa",1138 }),
1139 .llvm_name = "atmega165pa",1139 };
1140 .dependencies = &[_]*const Feature {1140 pub const atmega32m1 = Cpu{
1141 &feature_lpmx,1141 .name = "atmega32m1",
1142 &feature_jmpcall,1142 .llvm_name = "atmega32m1",
1143 &feature_lpm,1143 .features = featureSet(&[_]Feature{
1144 &feature_sram,1144 .avr5,
1145 &feature_addsubiw,1145 }),
1146 &feature_movw,1146 };
1147 &feature_ijmpcall,1147 pub const atmega32u2 = Cpu{
1148 &feature_break,1148 .name = "atmega32u2",
1149 &feature_spm,1149 .llvm_name = "atmega32u2",
1150 &feature_mul,1150 .features = featureSet(&[_]Feature{
1151 },1151 .avr35,
1152};1152 }),
11531153 };
1154pub const cpu_atmega168 = Cpu{1154 pub const atmega32u4 = Cpu{
1155 .name = "atmega168",1155 .name = "atmega32u4",
1156 .llvm_name = "atmega168",1156 .llvm_name = "atmega32u4",
1157 .dependencies = &[_]*const Feature {1157 .features = featureSet(&[_]Feature{
1158 &feature_lpmx,1158 .avr5,
1159 &feature_jmpcall,1159 }),
1160 &feature_lpm,1160 };
1161 &feature_sram,1161 pub const atmega32u6 = Cpu{
1162 &feature_addsubiw,1162 .name = "atmega32u6",
1163 &feature_movw,1163 .llvm_name = "atmega32u6",
1164 &feature_ijmpcall,1164 .features = featureSet(&[_]Feature{
1165 &feature_break,1165 .avr5,
1166 &feature_spm,1166 }),
1167 &feature_mul,1167 };
1168 },1168 pub const atmega406 = Cpu{
1169};1169 .name = "atmega406",
11701170 .llvm_name = "atmega406",
1171pub const cpu_atmega168a = Cpu{1171 .features = featureSet(&[_]Feature{
1172 .name = "atmega168a",1172 .avr5,
1173 .llvm_name = "atmega168a",1173 }),
1174 .dependencies = &[_]*const Feature {1174 };
1175 &feature_lpmx,1175 pub const atmega48 = Cpu{
1176 &feature_jmpcall,1176 .name = "atmega48",
1177 &feature_lpm,1177 .llvm_name = "atmega48",
1178 &feature_sram,1178 .features = featureSet(&[_]Feature{
1179 &feature_addsubiw,1179 .avr4,
1180 &feature_movw,1180 }),
1181 &feature_ijmpcall,1181 };
1182 &feature_break,1182 pub const atmega48a = Cpu{
1183 &feature_spm,1183 .name = "atmega48a",
1184 &feature_mul,1184 .llvm_name = "atmega48a",
1185 },1185 .features = featureSet(&[_]Feature{
1186};1186 .avr4,
11871187 }),
1188pub const cpu_atmega168p = Cpu{1188 };
1189 .name = "atmega168p",1189 pub const atmega48p = Cpu{
1190 .llvm_name = "atmega168p",1190 .name = "atmega48p",
1191 .dependencies = &[_]*const Feature {1191 .llvm_name = "atmega48p",
1192 &feature_lpmx,1192 .features = featureSet(&[_]Feature{
1193 &feature_jmpcall,1193 .avr4,
1194 &feature_lpm,1194 }),
1195 &feature_sram,1195 };
1196 &feature_addsubiw,1196 pub const atmega48pa = Cpu{
1197 &feature_movw,1197 .name = "atmega48pa",
1198 &feature_ijmpcall,1198 .llvm_name = "atmega48pa",
1199 &feature_break,1199 .features = featureSet(&[_]Feature{
1200 &feature_spm,1200 .avr4,
1201 &feature_mul,1201 }),
1202 },1202 };
1203};1203 pub const atmega64 = Cpu{
12041204 .name = "atmega64",
1205pub const cpu_atmega168pa = Cpu{1205 .llvm_name = "atmega64",
1206 .name = "atmega168pa",1206 .features = featureSet(&[_]Feature{
1207 .llvm_name = "atmega168pa",1207 .avr5,
1208 .dependencies = &[_]*const Feature {1208 }),
1209 &feature_lpmx,1209 };
1210 &feature_jmpcall,1210 pub const atmega640 = Cpu{
1211 &feature_lpm,1211 .name = "atmega640",
1212 &feature_sram,1212 .llvm_name = "atmega640",
1213 &feature_addsubiw,1213 .features = featureSet(&[_]Feature{
1214 &feature_movw,1214 .avr5,
1215 &feature_ijmpcall,1215 }),
1216 &feature_break,1216 };
1217 &feature_spm,1217 pub const atmega644 = Cpu{
1218 &feature_mul,1218 .name = "atmega644",
1219 },1219 .llvm_name = "atmega644",
1220};1220 .features = featureSet(&[_]Feature{
12211221 .avr5,
1222pub const cpu_atmega169 = Cpu{1222 }),
1223 .name = "atmega169",1223 };
1224 .llvm_name = "atmega169",1224 pub const atmega644a = Cpu{
1225 .dependencies = &[_]*const Feature {1225 .name = "atmega644a",
1226 &feature_lpmx,1226 .llvm_name = "atmega644a",
1227 &feature_jmpcall,1227 .features = featureSet(&[_]Feature{
1228 &feature_lpm,1228 .avr5,
1229 &feature_sram,1229 }),
1230 &feature_addsubiw,1230 };
1231 &feature_movw,1231 pub const atmega644p = Cpu{
1232 &feature_ijmpcall,1232 .name = "atmega644p",
1233 &feature_break,1233 .llvm_name = "atmega644p",
1234 &feature_spm,1234 .features = featureSet(&[_]Feature{
1235 &feature_mul,1235 .avr5,
1236 },1236 }),
1237};1237 };
12381238 pub const atmega644pa = Cpu{
1239pub const cpu_atmega169a = Cpu{1239 .name = "atmega644pa",
1240 .name = "atmega169a",1240 .llvm_name = "atmega644pa",
1241 .llvm_name = "atmega169a",1241 .features = featureSet(&[_]Feature{
1242 .dependencies = &[_]*const Feature {1242 .avr5,
1243 &feature_lpmx,1243 }),
1244 &feature_jmpcall,1244 };
1245 &feature_lpm,1245 pub const atmega644rfr2 = Cpu{
1246 &feature_sram,1246 .name = "atmega644rfr2",
1247 &feature_addsubiw,1247 .llvm_name = "atmega644rfr2",
1248 &feature_movw,1248 .features = featureSet(&[_]Feature{
1249 &feature_ijmpcall,1249 .avr5,
1250 &feature_break,1250 }),
1251 &feature_spm,1251 };
1252 &feature_mul,1252 pub const atmega645 = Cpu{
1253 },1253 .name = "atmega645",
1254};1254 .llvm_name = "atmega645",
12551255 .features = featureSet(&[_]Feature{
1256pub const cpu_atmega169p = Cpu{1256 .avr5,
1257 .name = "atmega169p",1257 }),
1258 .llvm_name = "atmega169p",1258 };
1259 .dependencies = &[_]*const Feature {1259 pub const atmega6450 = Cpu{
1260 &feature_lpmx,1260 .name = "atmega6450",
1261 &feature_jmpcall,1261 .llvm_name = "atmega6450",
1262 &feature_lpm,1262 .features = featureSet(&[_]Feature{
1263 &feature_sram,1263 .avr5,
1264 &feature_addsubiw,1264 }),
1265 &feature_movw,1265 };
1266 &feature_ijmpcall,1266 pub const atmega6450a = Cpu{
1267 &feature_break,1267 .name = "atmega6450a",
1268 &feature_spm,1268 .llvm_name = "atmega6450a",
1269 &feature_mul,1269 .features = featureSet(&[_]Feature{
1270 },1270 .avr5,
1271};1271 }),
12721272 };
1273pub const cpu_atmega169pa = Cpu{1273 pub const atmega6450p = Cpu{
1274 .name = "atmega169pa",1274 .name = "atmega6450p",
1275 .llvm_name = "atmega169pa",1275 .llvm_name = "atmega6450p",
1276 .dependencies = &[_]*const Feature {1276 .features = featureSet(&[_]Feature{
1277 &feature_lpmx,1277 .avr5,
1278 &feature_jmpcall,1278 }),
1279 &feature_lpm,1279 };
1280 &feature_sram,1280 pub const atmega645a = Cpu{
1281 &feature_addsubiw,1281 .name = "atmega645a",
1282 &feature_movw,1282 .llvm_name = "atmega645a",
1283 &feature_ijmpcall,1283 .features = featureSet(&[_]Feature{
1284 &feature_break,1284 .avr5,
1285 &feature_spm,1285 }),
1286 &feature_mul,1286 };
1287 },1287 pub const atmega645p = Cpu{
1288};1288 .name = "atmega645p",
12891289 .llvm_name = "atmega645p",
1290pub const cpu_atmega16a = Cpu{1290 .features = featureSet(&[_]Feature{
1291 .name = "atmega16a",1291 .avr5,
1292 .llvm_name = "atmega16a",1292 }),
1293 .dependencies = &[_]*const Feature {1293 };
1294 &feature_lpmx,1294 pub const atmega649 = Cpu{
1295 &feature_jmpcall,1295 .name = "atmega649",
1296 &feature_lpm,1296 .llvm_name = "atmega649",
1297 &feature_sram,1297 .features = featureSet(&[_]Feature{
1298 &feature_addsubiw,1298 .avr5,
1299 &feature_movw,1299 }),
1300 &feature_ijmpcall,1300 };
1301 &feature_break,1301 pub const atmega6490 = Cpu{
1302 &feature_spm,1302 .name = "atmega6490",
1303 &feature_mul,1303 .llvm_name = "atmega6490",
1304 },1304 .features = featureSet(&[_]Feature{
1305};1305 .avr5,
13061306 }),
1307pub const cpu_atmega16hva = Cpu{1307 };
1308 .name = "atmega16hva",1308 pub const atmega6490a = Cpu{
1309 .llvm_name = "atmega16hva",1309 .name = "atmega6490a",
1310 .dependencies = &[_]*const Feature {1310 .llvm_name = "atmega6490a",
1311 &feature_lpmx,1311 .features = featureSet(&[_]Feature{
1312 &feature_jmpcall,1312 .avr5,
1313 &feature_lpm,1313 }),
1314 &feature_sram,1314 };
1315 &feature_addsubiw,1315 pub const atmega6490p = Cpu{
1316 &feature_movw,1316 .name = "atmega6490p",
1317 &feature_ijmpcall,1317 .llvm_name = "atmega6490p",
1318 &feature_break,1318 .features = featureSet(&[_]Feature{
1319 &feature_spm,1319 .avr5,
1320 &feature_mul,1320 }),
1321 },1321 };
1322};1322 pub const atmega649a = Cpu{
13231323 .name = "atmega649a",
1324pub const cpu_atmega16hva2 = Cpu{1324 .llvm_name = "atmega649a",
1325 .name = "atmega16hva2",1325 .features = featureSet(&[_]Feature{
1326 .llvm_name = "atmega16hva2",1326 .avr5,
1327 .dependencies = &[_]*const Feature {1327 }),
1328 &feature_lpmx,1328 };
1329 &feature_jmpcall,1329 pub const atmega649p = Cpu{
1330 &feature_lpm,1330 .name = "atmega649p",
1331 &feature_sram,1331 .llvm_name = "atmega649p",
1332 &feature_addsubiw,1332 .features = featureSet(&[_]Feature{
1333 &feature_movw,1333 .avr5,
1334 &feature_ijmpcall,1334 }),
1335 &feature_break,1335 };
1336 &feature_spm,1336 pub const atmega64a = Cpu{
1337 &feature_mul,1337 .name = "atmega64a",
1338 },1338 .llvm_name = "atmega64a",
1339};1339 .features = featureSet(&[_]Feature{
13401340 .avr5,
1341pub const cpu_atmega16hvb = Cpu{1341 }),
1342 .name = "atmega16hvb",1342 };
1343 .llvm_name = "atmega16hvb",1343 pub const atmega64c1 = Cpu{
1344 .dependencies = &[_]*const Feature {1344 .name = "atmega64c1",
1345 &feature_lpmx,1345 .llvm_name = "atmega64c1",
1346 &feature_jmpcall,1346 .features = featureSet(&[_]Feature{
1347 &feature_lpm,1347 .avr5,
1348 &feature_sram,1348 }),
1349 &feature_addsubiw,1349 };
1350 &feature_movw,1350 pub const atmega64hve = Cpu{
1351 &feature_ijmpcall,1351 .name = "atmega64hve",
1352 &feature_break,1352 .llvm_name = "atmega64hve",
1353 &feature_spm,1353 .features = featureSet(&[_]Feature{
1354 &feature_mul,1354 .avr5,
1355 },1355 }),
1356};1356 };
13571357 pub const atmega64m1 = Cpu{
1358pub const cpu_atmega16hvbrevb = Cpu{1358 .name = "atmega64m1",
1359 .name = "atmega16hvbrevb",1359 .llvm_name = "atmega64m1",
1360 .llvm_name = "atmega16hvbrevb",1360 .features = featureSet(&[_]Feature{
1361 .dependencies = &[_]*const Feature {1361 .avr5,
1362 &feature_lpmx,1362 }),
1363 &feature_jmpcall,1363 };
1364 &feature_lpm,1364 pub const atmega64rfr2 = Cpu{
1365 &feature_sram,1365 .name = "atmega64rfr2",
1366 &feature_addsubiw,1366 .llvm_name = "atmega64rfr2",
1367 &feature_movw,1367 .features = featureSet(&[_]Feature{
1368 &feature_ijmpcall,1368 .avr5,
1369 &feature_break,1369 }),
1370 &feature_spm,1370 };
1371 &feature_mul,1371 pub const atmega8 = Cpu{
1372 },1372 .name = "atmega8",
1373};1373 .llvm_name = "atmega8",
13741374 .features = featureSet(&[_]Feature{
1375pub const cpu_atmega16m1 = Cpu{1375 .avr4,
1376 .name = "atmega16m1",1376 }),
1377 .llvm_name = "atmega16m1",1377 };
1378 .dependencies = &[_]*const Feature {1378 pub const atmega8515 = Cpu{
1379 &feature_lpmx,1379 .name = "atmega8515",
1380 &feature_jmpcall,1380 .llvm_name = "atmega8515",
1381 &feature_lpm,1381 .features = featureSet(&[_]Feature{
1382 &feature_sram,1382 .avr2,
1383 &feature_addsubiw,1383 .lpmx,
1384 &feature_movw,1384 .movw,
1385 &feature_ijmpcall,1385 .mul,
1386 &feature_break,1386 .spm,
1387 &feature_spm,1387 }),
1388 &feature_mul,1388 };
1389 },1389 pub const atmega8535 = Cpu{
1390};1390 .name = "atmega8535",
13911391 .llvm_name = "atmega8535",
1392pub const cpu_atmega16u2 = Cpu{1392 .features = featureSet(&[_]Feature{
1393 .name = "atmega16u2",1393 .avr2,
1394 .llvm_name = "atmega16u2",1394 .lpmx,
1395 .dependencies = &[_]*const Feature {1395 .movw,
1396 &feature_lpmx,1396 .mul,
1397 &feature_jmpcall,1397 .spm,
1398 &feature_lpm,1398 }),
1399 &feature_sram,1399 };
1400 &feature_addsubiw,1400 pub const atmega88 = Cpu{
1401 &feature_movw,1401 .name = "atmega88",
1402 &feature_ijmpcall,1402 .llvm_name = "atmega88",
1403 &feature_break,1403 .features = featureSet(&[_]Feature{
1404 &feature_spm,1404 .avr4,
1405 },1405 }),
1406};1406 };
14071407 pub const atmega88a = Cpu{
1408pub const cpu_atmega16u4 = Cpu{1408 .name = "atmega88a",
1409 .name = "atmega16u4",1409 .llvm_name = "atmega88a",
1410 .llvm_name = "atmega16u4",1410 .features = featureSet(&[_]Feature{
1411 .dependencies = &[_]*const Feature {1411 .avr4,
1412 &feature_lpmx,1412 }),
1413 &feature_jmpcall,1413 };
1414 &feature_lpm,1414 pub const atmega88p = Cpu{
1415 &feature_sram,1415 .name = "atmega88p",
1416 &feature_addsubiw,1416 .llvm_name = "atmega88p",
1417 &feature_movw,1417 .features = featureSet(&[_]Feature{
1418 &feature_ijmpcall,1418 .avr4,
1419 &feature_break,1419 }),
1420 &feature_spm,1420 };
1421 &feature_mul,1421 pub const atmega88pa = Cpu{
1422 },1422 .name = "atmega88pa",
1423};1423 .llvm_name = "atmega88pa",
14241424 .features = featureSet(&[_]Feature{
1425pub const cpu_atmega2560 = Cpu{1425 .avr4,
1426 .name = "atmega2560",1426 }),
1427 .llvm_name = "atmega2560",1427 };
1428 .dependencies = &[_]*const Feature {1428 pub const atmega8a = Cpu{
1429 &feature_lpmx,1429 .name = "atmega8a",
1430 &feature_jmpcall,1430 .llvm_name = "atmega8a",
1431 &feature_lpm,1431 .features = featureSet(&[_]Feature{
1432 &feature_elpm,1432 .avr4,
1433 &feature_sram,1433 }),
1434 &feature_addsubiw,1434 };
1435 &feature_elpmx,1435 pub const atmega8hva = Cpu{
1436 &feature_movw,1436 .name = "atmega8hva",
1437 &feature_ijmpcall,1437 .llvm_name = "atmega8hva",
1438 &feature_break,1438 .features = featureSet(&[_]Feature{
1439 &feature_spm,1439 .avr4,
1440 &feature_mul,1440 }),
1441 },1441 };
1442};1442 pub const atmega8u2 = Cpu{
14431443 .name = "atmega8u2",
1444pub const cpu_atmega2561 = Cpu{1444 .llvm_name = "atmega8u2",
1445 .name = "atmega2561",1445 .features = featureSet(&[_]Feature{
1446 .llvm_name = "atmega2561",1446 .avr35,
1447 .dependencies = &[_]*const Feature {1447 }),
1448 &feature_lpmx,1448 };
1449 &feature_jmpcall,1449 pub const attiny10 = Cpu{
1450 &feature_lpm,1450 .name = "attiny10",
1451 &feature_elpm,1451 .llvm_name = "attiny10",
1452 &feature_sram,1452 .features = featureSet(&[_]Feature{
1453 &feature_addsubiw,1453 .avrtiny,
1454 &feature_elpmx,1454 }),
1455 &feature_movw,1455 };
1456 &feature_ijmpcall,1456 pub const attiny102 = Cpu{
1457 &feature_break,1457 .name = "attiny102",
1458 &feature_spm,1458 .llvm_name = "attiny102",
1459 &feature_mul,1459 .features = featureSet(&[_]Feature{
1460 },1460 .avrtiny,
1461};1461 }),
14621462 };
1463pub const cpu_atmega2564rfr2 = Cpu{1463 pub const attiny104 = Cpu{
1464 .name = "atmega2564rfr2",1464 .name = "attiny104",
1465 .llvm_name = "atmega2564rfr2",1465 .llvm_name = "attiny104",
1466 .dependencies = &[_]*const Feature {1466 .features = featureSet(&[_]Feature{
1467 &feature_lpmx,1467 .avrtiny,
1468 &feature_jmpcall,1468 }),
1469 &feature_lpm,1469 };
1470 &feature_elpm,1470 pub const attiny11 = Cpu{
1471 &feature_sram,1471 .name = "attiny11",
1472 &feature_addsubiw,1472 .llvm_name = "attiny11",
1473 &feature_elpmx,1473 .features = featureSet(&[_]Feature{
1474 &feature_movw,1474 .avr1,
1475 &feature_ijmpcall,1475 }),
1476 &feature_break,1476 };
1477 &feature_spm,1477 pub const attiny12 = Cpu{
1478 &feature_mul,1478 .name = "attiny12",
1479 },1479 .llvm_name = "attiny12",
1480};1480 .features = featureSet(&[_]Feature{
14811481 .avr1,
1482pub const cpu_atmega256rfr2 = Cpu{1482 }),
1483 .name = "atmega256rfr2",1483 };
1484 .llvm_name = "atmega256rfr2",1484 pub const attiny13 = Cpu{
1485 .dependencies = &[_]*const Feature {1485 .name = "attiny13",
1486 &feature_lpmx,1486 .llvm_name = "attiny13",
1487 &feature_jmpcall,1487 .features = featureSet(&[_]Feature{
1488 &feature_lpm,1488 .avr25,
1489 &feature_elpm,1489 }),
1490 &feature_sram,1490 };
1491 &feature_addsubiw,1491 pub const attiny13a = Cpu{
1492 &feature_elpmx,1492 .name = "attiny13a",
1493 &feature_movw,1493 .llvm_name = "attiny13a",
1494 &feature_ijmpcall,1494 .features = featureSet(&[_]Feature{
1495 &feature_break,1495 .avr25,
1496 &feature_spm,1496 }),
1497 &feature_mul,1497 };
1498 },1498 pub const attiny15 = Cpu{
1499};1499 .name = "attiny15",
15001500 .llvm_name = "attiny15",
1501pub const cpu_atmega32 = Cpu{1501 .features = featureSet(&[_]Feature{
1502 .name = "atmega32",1502 .avr1,
1503 .llvm_name = "atmega32",1503 }),
1504 .dependencies = &[_]*const Feature {1504 };
1505 &feature_lpmx,1505 pub const attiny1634 = Cpu{
1506 &feature_jmpcall,1506 .name = "attiny1634",
1507 &feature_lpm,1507 .llvm_name = "attiny1634",
1508 &feature_sram,1508 .features = featureSet(&[_]Feature{
1509 &feature_addsubiw,1509 .avr35,
1510 &feature_movw,1510 }),
1511 &feature_ijmpcall,1511 };
1512 &feature_break,1512 pub const attiny167 = Cpu{
1513 &feature_spm,1513 .name = "attiny167",
1514 &feature_mul,1514 .llvm_name = "attiny167",
1515 },1515 .features = featureSet(&[_]Feature{
1516};1516 .avr35,
15171517 }),
1518pub const cpu_atmega323 = Cpu{1518 };
1519 .name = "atmega323",1519 pub const attiny20 = Cpu{
1520 .llvm_name = "atmega323",1520 .name = "attiny20",
1521 .dependencies = &[_]*const Feature {1521 .llvm_name = "attiny20",
1522 &feature_lpmx,1522 .features = featureSet(&[_]Feature{
1523 &feature_jmpcall,1523 .avrtiny,
1524 &feature_lpm,1524 }),
1525 &feature_sram,1525 };
1526 &feature_addsubiw,1526 pub const attiny22 = Cpu{
1527 &feature_movw,1527 .name = "attiny22",
1528 &feature_ijmpcall,1528 .llvm_name = "attiny22",
1529 &feature_break,1529 .features = featureSet(&[_]Feature{
1530 &feature_spm,1530 .avr2,
1531 &feature_mul,1531 }),
1532 },1532 };
1533};1533 pub const attiny2313 = Cpu{
15341534 .name = "attiny2313",
1535pub const cpu_atmega324a = Cpu{1535 .llvm_name = "attiny2313",
1536 .name = "atmega324a",1536 .features = featureSet(&[_]Feature{
1537 .llvm_name = "atmega324a",1537 .avr25,
1538 .dependencies = &[_]*const Feature {1538 }),
1539 &feature_lpmx,1539 };
1540 &feature_jmpcall,1540 pub const attiny2313a = Cpu{
1541 &feature_lpm,1541 .name = "attiny2313a",
1542 &feature_sram,1542 .llvm_name = "attiny2313a",
1543 &feature_addsubiw,1543 .features = featureSet(&[_]Feature{
1544 &feature_movw,1544 .avr25,
1545 &feature_ijmpcall,1545 }),
1546 &feature_break,1546 };
1547 &feature_spm,1547 pub const attiny24 = Cpu{
1548 &feature_mul,1548 .name = "attiny24",
1549 },1549 .llvm_name = "attiny24",
1550};1550 .features = featureSet(&[_]Feature{
15511551 .avr25,
1552pub const cpu_atmega324p = Cpu{1552 }),
1553 .name = "atmega324p",1553 };
1554 .llvm_name = "atmega324p",1554 pub const attiny24a = Cpu{
1555 .dependencies = &[_]*const Feature {1555 .name = "attiny24a",
1556 &feature_lpmx,1556 .llvm_name = "attiny24a",
1557 &feature_jmpcall,1557 .features = featureSet(&[_]Feature{
1558 &feature_lpm,1558 .avr25,
1559 &feature_sram,1559 }),
1560 &feature_addsubiw,1560 };
1561 &feature_movw,1561 pub const attiny25 = Cpu{
1562 &feature_ijmpcall,1562 .name = "attiny25",
1563 &feature_break,1563 .llvm_name = "attiny25",
1564 &feature_spm,1564 .features = featureSet(&[_]Feature{
1565 &feature_mul,1565 .avr25,
1566 },1566 }),
1567};1567 };
15681568 pub const attiny26 = Cpu{
1569pub const cpu_atmega324pa = Cpu{1569 .name = "attiny26",
1570 .name = "atmega324pa",1570 .llvm_name = "attiny26",
1571 .llvm_name = "atmega324pa",1571 .features = featureSet(&[_]Feature{
1572 .dependencies = &[_]*const Feature {1572 .avr2,
1573 &feature_lpmx,1573 .lpmx,
1574 &feature_jmpcall,1574 }),
1575 &feature_lpm,1575 };
1576 &feature_sram,1576 pub const attiny261 = Cpu{
1577 &feature_addsubiw,1577 .name = "attiny261",
1578 &feature_movw,1578 .llvm_name = "attiny261",
1579 &feature_ijmpcall,1579 .features = featureSet(&[_]Feature{
1580 &feature_break,1580 .avr25,
1581 &feature_spm,1581 }),
1582 &feature_mul,1582 };
1583 },1583 pub const attiny261a = Cpu{
1584};1584 .name = "attiny261a",
15851585 .llvm_name = "attiny261a",
1586pub const cpu_atmega325 = Cpu{1586 .features = featureSet(&[_]Feature{
1587 .name = "atmega325",1587 .avr25,
1588 .llvm_name = "atmega325",1588 }),
1589 .dependencies = &[_]*const Feature {1589 };
1590 &feature_lpmx,1590 pub const attiny28 = Cpu{
1591 &feature_jmpcall,1591 .name = "attiny28",
1592 &feature_lpm,1592 .llvm_name = "attiny28",
1593 &feature_sram,1593 .features = featureSet(&[_]Feature{
1594 &feature_addsubiw,1594 .avr1,
1595 &feature_movw,1595 }),
1596 &feature_ijmpcall,1596 };
1597 &feature_break,1597 pub const attiny4 = Cpu{
1598 &feature_spm,1598 .name = "attiny4",
1599 &feature_mul,1599 .llvm_name = "attiny4",
1600 },1600 .features = featureSet(&[_]Feature{
1601};1601 .avrtiny,
16021602 }),
1603pub const cpu_atmega3250 = Cpu{1603 };
1604 .name = "atmega3250",1604 pub const attiny40 = Cpu{
1605 .llvm_name = "atmega3250",1605 .name = "attiny40",
1606 .dependencies = &[_]*const Feature {1606 .llvm_name = "attiny40",
1607 &feature_lpmx,1607 .features = featureSet(&[_]Feature{
1608 &feature_jmpcall,1608 .avrtiny,
1609 &feature_lpm,1609 }),
1610 &feature_sram,1610 };
1611 &feature_addsubiw,1611 pub const attiny4313 = Cpu{
1612 &feature_movw,1612 .name = "attiny4313",
1613 &feature_ijmpcall,1613 .llvm_name = "attiny4313",
1614 &feature_break,1614 .features = featureSet(&[_]Feature{
1615 &feature_spm,1615 .avr25,
1616 &feature_mul,1616 }),
1617 },1617 };
1618};1618 pub const attiny43u = Cpu{
16191619 .name = "attiny43u",
1620pub const cpu_atmega3250a = Cpu{1620 .llvm_name = "attiny43u",
1621 .name = "atmega3250a",1621 .features = featureSet(&[_]Feature{
1622 .llvm_name = "atmega3250a",1622 .avr25,
1623 .dependencies = &[_]*const Feature {1623 }),
1624 &feature_lpmx,1624 };
1625 &feature_jmpcall,1625 pub const attiny44 = Cpu{
1626 &feature_lpm,1626 .name = "attiny44",
1627 &feature_sram,1627 .llvm_name = "attiny44",
1628 &feature_addsubiw,1628 .features = featureSet(&[_]Feature{
1629 &feature_movw,1629 .avr25,
1630 &feature_ijmpcall,1630 }),
1631 &feature_break,1631 };
1632 &feature_spm,1632 pub const attiny44a = Cpu{
1633 &feature_mul,1633 .name = "attiny44a",
1634 },1634 .llvm_name = "attiny44a",
1635};1635 .features = featureSet(&[_]Feature{
16361636 .avr25,
1637pub const cpu_atmega3250p = Cpu{1637 }),
1638 .name = "atmega3250p",1638 };
1639 .llvm_name = "atmega3250p",1639 pub const attiny45 = Cpu{
1640 .dependencies = &[_]*const Feature {1640 .name = "attiny45",
1641 &feature_lpmx,1641 .llvm_name = "attiny45",
1642 &feature_jmpcall,1642 .features = featureSet(&[_]Feature{
1643 &feature_lpm,1643 .avr25,
1644 &feature_sram,1644 }),
1645 &feature_addsubiw,1645 };
1646 &feature_movw,1646 pub const attiny461 = Cpu{
1647 &feature_ijmpcall,1647 .name = "attiny461",
1648 &feature_break,1648 .llvm_name = "attiny461",
1649 &feature_spm,1649 .features = featureSet(&[_]Feature{
1650 &feature_mul,1650 .avr25,
1651 },1651 }),
1652};1652 };
16531653 pub const attiny461a = Cpu{
1654pub const cpu_atmega3250pa = Cpu{1654 .name = "attiny461a",
1655 .name = "atmega3250pa",1655 .llvm_name = "attiny461a",
1656 .llvm_name = "atmega3250pa",1656 .features = featureSet(&[_]Feature{
1657 .dependencies = &[_]*const Feature {1657 .avr25,
1658 &feature_lpmx,1658 }),
1659 &feature_jmpcall,1659 };
1660 &feature_lpm,1660 pub const attiny48 = Cpu{
1661 &feature_sram,1661 .name = "attiny48",
1662 &feature_addsubiw,1662 .llvm_name = "attiny48",
1663 &feature_movw,1663 .features = featureSet(&[_]Feature{
1664 &feature_ijmpcall,1664 .avr25,
1665 &feature_break,1665 }),
1666 &feature_spm,1666 };
1667 &feature_mul,1667 pub const attiny5 = Cpu{
1668 },1668 .name = "attiny5",
1669};1669 .llvm_name = "attiny5",
16701670 .features = featureSet(&[_]Feature{
1671pub const cpu_atmega325a = Cpu{1671 .avrtiny,
1672 .name = "atmega325a",1672 }),
1673 .llvm_name = "atmega325a",1673 };
1674 .dependencies = &[_]*const Feature {1674 pub const attiny828 = Cpu{
1675 &feature_lpmx,1675 .name = "attiny828",
1676 &feature_jmpcall,1676 .llvm_name = "attiny828",
1677 &feature_lpm,1677 .features = featureSet(&[_]Feature{
1678 &feature_sram,1678 .avr25,
1679 &feature_addsubiw,1679 }),
1680 &feature_movw,1680 };
1681 &feature_ijmpcall,1681 pub const attiny84 = Cpu{
1682 &feature_break,1682 .name = "attiny84",
1683 &feature_spm,1683 .llvm_name = "attiny84",
1684 &feature_mul,1684 .features = featureSet(&[_]Feature{
1685 },1685 .avr25,
1686};1686 }),
16871687 };
1688pub const cpu_atmega325p = Cpu{1688 pub const attiny84a = Cpu{
1689 .name = "atmega325p",1689 .name = "attiny84a",
1690 .llvm_name = "atmega325p",1690 .llvm_name = "attiny84a",
1691 .dependencies = &[_]*const Feature {1691 .features = featureSet(&[_]Feature{
1692 &feature_lpmx,1692 .avr25,
1693 &feature_jmpcall,1693 }),
1694 &feature_lpm,1694 };
1695 &feature_sram,1695 pub const attiny85 = Cpu{
1696 &feature_addsubiw,1696 .name = "attiny85",
1697 &feature_movw,1697 .llvm_name = "attiny85",
1698 &feature_ijmpcall,1698 .features = featureSet(&[_]Feature{
1699 &feature_break,1699 .avr25,
1700 &feature_spm,1700 }),
1701 &feature_mul,1701 };
1702 },1702 pub const attiny861 = Cpu{
1703};1703 .name = "attiny861",
17041704 .llvm_name = "attiny861",
1705pub const cpu_atmega325pa = Cpu{1705 .features = featureSet(&[_]Feature{
1706 .name = "atmega325pa",1706 .avr25,
1707 .llvm_name = "atmega325pa",1707 }),
1708 .dependencies = &[_]*const Feature {1708 };
1709 &feature_lpmx,1709 pub const attiny861a = Cpu{
1710 &feature_jmpcall,1710 .name = "attiny861a",
1711 &feature_lpm,1711 .llvm_name = "attiny861a",
1712 &feature_sram,1712 .features = featureSet(&[_]Feature{
1713 &feature_addsubiw,1713 .avr25,
1714 &feature_movw,1714 }),
1715 &feature_ijmpcall,1715 };
1716 &feature_break,1716 pub const attiny87 = Cpu{
1717 &feature_spm,1717 .name = "attiny87",
1718 &feature_mul,1718 .llvm_name = "attiny87",
1719 },1719 .features = featureSet(&[_]Feature{
1720};1720 .avr25,
17211721 }),
1722pub const cpu_atmega328 = Cpu{1722 };
1723 .name = "atmega328",1723 pub const attiny88 = Cpu{
1724 .llvm_name = "atmega328",1724 .name = "attiny88",
1725 .dependencies = &[_]*const Feature {1725 .llvm_name = "attiny88",
1726 &feature_lpmx,1726 .features = featureSet(&[_]Feature{
1727 &feature_jmpcall,1727 .avr25,
1728 &feature_lpm,1728 }),
1729 &feature_sram,1729 };
1730 &feature_addsubiw,1730 pub const attiny9 = Cpu{
1731 &feature_movw,1731 .name = "attiny9",
1732 &feature_ijmpcall,1732 .llvm_name = "attiny9",
1733 &feature_break,1733 .features = featureSet(&[_]Feature{
1734 &feature_spm,1734 .avrtiny,
1735 &feature_mul,1735 }),
1736 },1736 };
1737};1737 pub const atxmega128a1 = Cpu{
17381738 .name = "atxmega128a1",
1739pub const cpu_atmega328p = Cpu{1739 .llvm_name = "atxmega128a1",
1740 .name = "atmega328p",1740 .features = featureSet(&[_]Feature{
1741 .llvm_name = "atmega328p",1741 .xmega,
1742 .dependencies = &[_]*const Feature {1742 }),
1743 &feature_lpmx,1743 };
1744 &feature_jmpcall,1744 pub const atxmega128a1u = Cpu{
1745 &feature_lpm,1745 .name = "atxmega128a1u",
1746 &feature_sram,1746 .llvm_name = "atxmega128a1u",
1747 &feature_addsubiw,1747 .features = featureSet(&[_]Feature{
1748 &feature_movw,1748 .xmegau,
1749 &feature_ijmpcall,1749 }),
1750 &feature_break,1750 };
1751 &feature_spm,1751 pub const atxmega128a3 = Cpu{
1752 &feature_mul,1752 .name = "atxmega128a3",
1753 },1753 .llvm_name = "atxmega128a3",
1754};1754 .features = featureSet(&[_]Feature{
17551755 .xmega,
1756pub const cpu_atmega329 = Cpu{1756 }),
1757 .name = "atmega329",1757 };
1758 .llvm_name = "atmega329",1758 pub const atxmega128a3u = Cpu{
1759 .dependencies = &[_]*const Feature {1759 .name = "atxmega128a3u",
1760 &feature_lpmx,1760 .llvm_name = "atxmega128a3u",
1761 &feature_jmpcall,1761 .features = featureSet(&[_]Feature{
1762 &feature_lpm,1762 .xmegau,
1763 &feature_sram,1763 }),
1764 &feature_addsubiw,1764 };
1765 &feature_movw,1765 pub const atxmega128a4u = Cpu{
1766 &feature_ijmpcall,1766 .name = "atxmega128a4u",
1767 &feature_break,1767 .llvm_name = "atxmega128a4u",
1768 &feature_spm,1768 .features = featureSet(&[_]Feature{
1769 &feature_mul,1769 .xmegau,
1770 },1770 }),
1771};1771 };
17721772 pub const atxmega128b1 = Cpu{
1773pub const cpu_atmega3290 = Cpu{1773 .name = "atxmega128b1",
1774 .name = "atmega3290",1774 .llvm_name = "atxmega128b1",
1775 .llvm_name = "atmega3290",1775 .features = featureSet(&[_]Feature{
1776 .dependencies = &[_]*const Feature {1776 .xmegau,
1777 &feature_lpmx,1777 }),
1778 &feature_jmpcall,1778 };
1779 &feature_lpm,1779 pub const atxmega128b3 = Cpu{
1780 &feature_sram,1780 .name = "atxmega128b3",
1781 &feature_addsubiw,1781 .llvm_name = "atxmega128b3",
1782 &feature_movw,1782 .features = featureSet(&[_]Feature{
1783 &feature_ijmpcall,1783 .xmegau,
1784 &feature_break,1784 }),
1785 &feature_spm,1785 };
1786 &feature_mul,1786 pub const atxmega128c3 = Cpu{
1787 },1787 .name = "atxmega128c3",
1788};1788 .llvm_name = "atxmega128c3",
17891789 .features = featureSet(&[_]Feature{
1790pub const cpu_atmega3290a = Cpu{1790 .xmegau,
1791 .name = "atmega3290a",1791 }),
1792 .llvm_name = "atmega3290a",1792 };
1793 .dependencies = &[_]*const Feature {1793 pub const atxmega128d3 = Cpu{
1794 &feature_lpmx,1794 .name = "atxmega128d3",
1795 &feature_jmpcall,1795 .llvm_name = "atxmega128d3",
1796 &feature_lpm,1796 .features = featureSet(&[_]Feature{
1797 &feature_sram,1797 .xmega,
1798 &feature_addsubiw,1798 }),
1799 &feature_movw,1799 };
1800 &feature_ijmpcall,1800 pub const atxmega128d4 = Cpu{
1801 &feature_break,1801 .name = "atxmega128d4",
1802 &feature_spm,1802 .llvm_name = "atxmega128d4",
1803 &feature_mul,1803 .features = featureSet(&[_]Feature{
1804 },1804 .xmega,
1805};1805 }),
18061806 };
1807pub const cpu_atmega3290p = Cpu{1807 pub const atxmega16a4 = Cpu{
1808 .name = "atmega3290p",1808 .name = "atxmega16a4",
1809 .llvm_name = "atmega3290p",1809 .llvm_name = "atxmega16a4",
1810 .dependencies = &[_]*const Feature {1810 .features = featureSet(&[_]Feature{
1811 &feature_lpmx,1811 .xmega,
1812 &feature_jmpcall,1812 }),
1813 &feature_lpm,1813 };
1814 &feature_sram,1814 pub const atxmega16a4u = Cpu{
1815 &feature_addsubiw,1815 .name = "atxmega16a4u",
1816 &feature_movw,1816 .llvm_name = "atxmega16a4u",
1817 &feature_ijmpcall,1817 .features = featureSet(&[_]Feature{
1818 &feature_break,1818 .xmegau,
1819 &feature_spm,1819 }),
1820 &feature_mul,1820 };
1821 },1821 pub const atxmega16c4 = Cpu{
1822};1822 .name = "atxmega16c4",
18231823 .llvm_name = "atxmega16c4",
1824pub const cpu_atmega3290pa = Cpu{1824 .features = featureSet(&[_]Feature{
1825 .name = "atmega3290pa",1825 .xmegau,
1826 .llvm_name = "atmega3290pa",1826 }),
1827 .dependencies = &[_]*const Feature {1827 };
1828 &feature_lpmx,1828 pub const atxmega16d4 = Cpu{
1829 &feature_jmpcall,1829 .name = "atxmega16d4",
1830 &feature_lpm,1830 .llvm_name = "atxmega16d4",
1831 &feature_sram,1831 .features = featureSet(&[_]Feature{
1832 &feature_addsubiw,1832 .xmega,
1833 &feature_movw,1833 }),
1834 &feature_ijmpcall,1834 };
1835 &feature_break,1835 pub const atxmega16e5 = Cpu{
1836 &feature_spm,1836 .name = "atxmega16e5",
1837 &feature_mul,1837 .llvm_name = "atxmega16e5",
1838 },1838 .features = featureSet(&[_]Feature{
1839};1839 .xmega,
18401840 }),
1841pub const cpu_atmega329a = Cpu{1841 };
1842 .name = "atmega329a",1842 pub const atxmega192a3 = Cpu{
1843 .llvm_name = "atmega329a",1843 .name = "atxmega192a3",
1844 .dependencies = &[_]*const Feature {1844 .llvm_name = "atxmega192a3",
1845 &feature_lpmx,1845 .features = featureSet(&[_]Feature{
1846 &feature_jmpcall,1846 .xmega,
1847 &feature_lpm,1847 }),
1848 &feature_sram,1848 };
1849 &feature_addsubiw,1849 pub const atxmega192a3u = Cpu{
1850 &feature_movw,1850 .name = "atxmega192a3u",
1851 &feature_ijmpcall,1851 .llvm_name = "atxmega192a3u",
1852 &feature_break,1852 .features = featureSet(&[_]Feature{
1853 &feature_spm,1853 .xmegau,
1854 &feature_mul,1854 }),
1855 },1855 };
1856};1856 pub const atxmega192c3 = Cpu{
18571857 .name = "atxmega192c3",
1858pub const cpu_atmega329p = Cpu{1858 .llvm_name = "atxmega192c3",
1859 .name = "atmega329p",1859 .features = featureSet(&[_]Feature{
1860 .llvm_name = "atmega329p",1860 .xmegau,
1861 .dependencies = &[_]*const Feature {1861 }),
1862 &feature_lpmx,1862 };
1863 &feature_jmpcall,1863 pub const atxmega192d3 = Cpu{
1864 &feature_lpm,1864 .name = "atxmega192d3",
1865 &feature_sram,1865 .llvm_name = "atxmega192d3",
1866 &feature_addsubiw,1866 .features = featureSet(&[_]Feature{
1867 &feature_movw,1867 .xmega,
1868 &feature_ijmpcall,1868 }),
1869 &feature_break,1869 };
1870 &feature_spm,1870 pub const atxmega256a3 = Cpu{
1871 &feature_mul,1871 .name = "atxmega256a3",
1872 },1872 .llvm_name = "atxmega256a3",
1873};1873 .features = featureSet(&[_]Feature{
18741874 .xmega,
1875pub const cpu_atmega329pa = Cpu{1875 }),
1876 .name = "atmega329pa",1876 };
1877 .llvm_name = "atmega329pa",1877 pub const atxmega256a3b = Cpu{
1878 .dependencies = &[_]*const Feature {1878 .name = "atxmega256a3b",
1879 &feature_lpmx,1879 .llvm_name = "atxmega256a3b",
1880 &feature_jmpcall,1880 .features = featureSet(&[_]Feature{
1881 &feature_lpm,1881 .xmega,
1882 &feature_sram,1882 }),
1883 &feature_addsubiw,1883 };
1884 &feature_movw,1884 pub const atxmega256a3bu = Cpu{
1885 &feature_ijmpcall,1885 .name = "atxmega256a3bu",
1886 &feature_break,1886 .llvm_name = "atxmega256a3bu",
1887 &feature_spm,1887 .features = featureSet(&[_]Feature{
1888 &feature_mul,1888 .xmegau,
1889 },1889 }),
1890};1890 };
18911891 pub const atxmega256a3u = Cpu{
1892pub const cpu_atmega32a = Cpu{1892 .name = "atxmega256a3u",
1893 .name = "atmega32a",1893 .llvm_name = "atxmega256a3u",
1894 .llvm_name = "atmega32a",1894 .features = featureSet(&[_]Feature{
1895 .dependencies = &[_]*const Feature {1895 .xmegau,
1896 &feature_lpmx,1896 }),
1897 &feature_jmpcall,1897 };
1898 &feature_lpm,1898 pub const atxmega256c3 = Cpu{
1899 &feature_sram,1899 .name = "atxmega256c3",
1900 &feature_addsubiw,1900 .llvm_name = "atxmega256c3",
1901 &feature_movw,1901 .features = featureSet(&[_]Feature{
1902 &feature_ijmpcall,1902 .xmegau,
1903 &feature_break,1903 }),
1904 &feature_spm,1904 };
1905 &feature_mul,1905 pub const atxmega256d3 = Cpu{
1906 },1906 .name = "atxmega256d3",
1907};1907 .llvm_name = "atxmega256d3",
19081908 .features = featureSet(&[_]Feature{
1909pub const cpu_atmega32c1 = Cpu{1909 .xmega,
1910 .name = "atmega32c1",1910 }),
1911 .llvm_name = "atmega32c1",1911 };
1912 .dependencies = &[_]*const Feature {1912 pub const atxmega32a4 = Cpu{
1913 &feature_lpmx,1913 .name = "atxmega32a4",
1914 &feature_jmpcall,1914 .llvm_name = "atxmega32a4",
1915 &feature_lpm,1915 .features = featureSet(&[_]Feature{
1916 &feature_sram,1916 .xmega,
1917 &feature_addsubiw,1917 }),
1918 &feature_movw,1918 };
1919 &feature_ijmpcall,1919 pub const atxmega32a4u = Cpu{
1920 &feature_break,1920 .name = "atxmega32a4u",
1921 &feature_spm,1921 .llvm_name = "atxmega32a4u",
1922 &feature_mul,1922 .features = featureSet(&[_]Feature{
1923 },1923 .xmegau,
1924};1924 }),
19251925 };
1926pub const cpu_atmega32hvb = Cpu{1926 pub const atxmega32c4 = Cpu{
1927 .name = "atmega32hvb",1927 .name = "atxmega32c4",
1928 .llvm_name = "atmega32hvb",1928 .llvm_name = "atxmega32c4",
1929 .dependencies = &[_]*const Feature {1929 .features = featureSet(&[_]Feature{
1930 &feature_lpmx,1930 .xmegau,
1931 &feature_jmpcall,1931 }),
1932 &feature_lpm,1932 };
1933 &feature_sram,1933 pub const atxmega32d4 = Cpu{
1934 &feature_addsubiw,1934 .name = "atxmega32d4",
1935 &feature_movw,1935 .llvm_name = "atxmega32d4",
1936 &feature_ijmpcall,1936 .features = featureSet(&[_]Feature{
1937 &feature_break,1937 .xmega,
1938 &feature_spm,1938 }),
1939 &feature_mul,1939 };
1940 },1940 pub const atxmega32e5 = Cpu{
1941};1941 .name = "atxmega32e5",
19421942 .llvm_name = "atxmega32e5",
1943pub const cpu_atmega32hvbrevb = Cpu{1943 .features = featureSet(&[_]Feature{
1944 .name = "atmega32hvbrevb",1944 .xmega,
1945 .llvm_name = "atmega32hvbrevb",1945 }),
1946 .dependencies = &[_]*const Feature {1946 };
1947 &feature_lpmx,1947 pub const atxmega32x1 = Cpu{
1948 &feature_jmpcall,1948 .name = "atxmega32x1",
1949 &feature_lpm,1949 .llvm_name = "atxmega32x1",
1950 &feature_sram,1950 .features = featureSet(&[_]Feature{
1951 &feature_addsubiw,1951 .xmega,
1952 &feature_movw,1952 }),
1953 &feature_ijmpcall,1953 };
1954 &feature_break,1954 pub const atxmega384c3 = Cpu{
1955 &feature_spm,1955 .name = "atxmega384c3",
1956 &feature_mul,1956 .llvm_name = "atxmega384c3",
1957 },1957 .features = featureSet(&[_]Feature{
1958};1958 .xmegau,
19591959 }),
1960pub const cpu_atmega32m1 = Cpu{1960 };
1961 .name = "atmega32m1",1961 pub const atxmega384d3 = Cpu{
1962 .llvm_name = "atmega32m1",1962 .name = "atxmega384d3",
1963 .dependencies = &[_]*const Feature {1963 .llvm_name = "atxmega384d3",
1964 &feature_lpmx,1964 .features = featureSet(&[_]Feature{
1965 &feature_jmpcall,1965 .xmega,
1966 &feature_lpm,1966 }),
1967 &feature_sram,1967 };
1968 &feature_addsubiw,1968 pub const atxmega64a1 = Cpu{
1969 &feature_movw,1969 .name = "atxmega64a1",
1970 &feature_ijmpcall,1970 .llvm_name = "atxmega64a1",
1971 &feature_break,1971 .features = featureSet(&[_]Feature{
1972 &feature_spm,1972 .xmega,
1973 &feature_mul,1973 }),
1974 },1974 };
1975};1975 pub const atxmega64a1u = Cpu{
19761976 .name = "atxmega64a1u",
1977pub const cpu_atmega32u2 = Cpu{1977 .llvm_name = "atxmega64a1u",
1978 .name = "atmega32u2",1978 .features = featureSet(&[_]Feature{
1979 .llvm_name = "atmega32u2",1979 .xmegau,
1980 .dependencies = &[_]*const Feature {1980 }),
1981 &feature_lpmx,1981 };
1982 &feature_jmpcall,1982 pub const atxmega64a3 = Cpu{
1983 &feature_lpm,1983 .name = "atxmega64a3",
1984 &feature_sram,1984 .llvm_name = "atxmega64a3",
1985 &feature_addsubiw,1985 .features = featureSet(&[_]Feature{
1986 &feature_movw,1986 .xmega,
1987 &feature_ijmpcall,1987 }),
1988 &feature_break,1988 };
1989 &feature_spm,1989 pub const atxmega64a3u = Cpu{
1990 },1990 .name = "atxmega64a3u",
1991};1991 .llvm_name = "atxmega64a3u",
19921992 .features = featureSet(&[_]Feature{
1993pub const cpu_atmega32u4 = Cpu{1993 .xmegau,
1994 .name = "atmega32u4",1994 }),
1995 .llvm_name = "atmega32u4",1995 };
1996 .dependencies = &[_]*const Feature {1996 pub const atxmega64a4u = Cpu{
1997 &feature_lpmx,1997 .name = "atxmega64a4u",
1998 &feature_jmpcall,1998 .llvm_name = "atxmega64a4u",
1999 &feature_lpm,1999 .features = featureSet(&[_]Feature{
2000 &feature_sram,2000 .xmegau,
2001 &feature_addsubiw,2001 }),
2002 &feature_movw,2002 };
2003 &feature_ijmpcall,2003 pub const atxmega64b1 = Cpu{
2004 &feature_break,2004 .name = "atxmega64b1",
2005 &feature_spm,2005 .llvm_name = "atxmega64b1",
2006 &feature_mul,2006 .features = featureSet(&[_]Feature{
2007 },2007 .xmegau,
2008};2008 }),
20092009 };
2010pub const cpu_atmega32u6 = Cpu{2010 pub const atxmega64b3 = Cpu{
2011 .name = "atmega32u6",2011 .name = "atxmega64b3",
2012 .llvm_name = "atmega32u6",2012 .llvm_name = "atxmega64b3",
2013 .dependencies = &[_]*const Feature {2013 .features = featureSet(&[_]Feature{
2014 &feature_lpmx,2014 .xmegau,
2015 &feature_jmpcall,2015 }),
2016 &feature_lpm,2016 };
2017 &feature_sram,2017 pub const atxmega64c3 = Cpu{
2018 &feature_addsubiw,2018 .name = "atxmega64c3",
2019 &feature_movw,2019 .llvm_name = "atxmega64c3",
2020 &feature_ijmpcall,2020 .features = featureSet(&[_]Feature{
2021 &feature_break,2021 .xmegau,
2022 &feature_spm,2022 }),
2023 &feature_mul,2023 };
2024 },2024 pub const atxmega64d3 = Cpu{
2025};2025 .name = "atxmega64d3",
20262026 .llvm_name = "atxmega64d3",
2027pub const cpu_atmega406 = Cpu{2027 .features = featureSet(&[_]Feature{
2028 .name = "atmega406",2028 .xmega,
2029 .llvm_name = "atmega406",2029 }),
2030 .dependencies = &[_]*const Feature {2030 };
2031 &feature_lpmx,2031 pub const atxmega64d4 = Cpu{
2032 &feature_jmpcall,2032 .name = "atxmega64d4",
2033 &feature_lpm,2033 .llvm_name = "atxmega64d4",
2034 &feature_sram,2034 .features = featureSet(&[_]Feature{
2035 &feature_addsubiw,2035 .xmega,
2036 &feature_movw,2036 }),
2037 &feature_ijmpcall,2037 };
2038 &feature_break,2038 pub const atxmega8e5 = Cpu{
2039 &feature_spm,2039 .name = "atxmega8e5",
2040 &feature_mul,2040 .llvm_name = "atxmega8e5",
2041 },2041 .features = featureSet(&[_]Feature{
2042};2042 .xmega,
20432043 }),
2044pub const cpu_atmega48 = Cpu{2044 };
2045 .name = "atmega48",2045 pub const avr1 = Cpu{
2046 .llvm_name = "atmega48",2046 .name = "avr1",
2047 .dependencies = &[_]*const Feature {2047 .llvm_name = "avr1",
2048 &feature_lpmx,2048 .features = featureSet(&[_]Feature{
2049 &feature_lpm,2049 .avr1,
2050 &feature_sram,2050 }),
2051 &feature_addsubiw,2051 };
2052 &feature_movw,2052 pub const avr2 = Cpu{
2053 &feature_ijmpcall,2053 .name = "avr2",
2054 &feature_break,2054 .llvm_name = "avr2",
2055 &feature_spm,2055 .features = featureSet(&[_]Feature{
2056 &feature_mul,2056 .avr2,
2057 },2057 }),
2058};2058 };
20592059 pub const avr25 = Cpu{
2060pub const cpu_atmega48a = Cpu{2060 .name = "avr25",
2061 .name = "atmega48a",2061 .llvm_name = "avr25",
2062 .llvm_name = "atmega48a",2062 .features = featureSet(&[_]Feature{
2063 .dependencies = &[_]*const Feature {2063 .avr25,
2064 &feature_lpmx,2064 }),
2065 &feature_lpm,2065 };
2066 &feature_sram,2066 pub const avr3 = Cpu{
2067 &feature_addsubiw,2067 .name = "avr3",
2068 &feature_movw,2068 .llvm_name = "avr3",
2069 &feature_ijmpcall,2069 .features = featureSet(&[_]Feature{
2070 &feature_break,2070 .avr3,
2071 &feature_spm,2071 }),
2072 &feature_mul,2072 };
2073 },2073 pub const avr31 = Cpu{
2074};2074 .name = "avr31",
20752075 .llvm_name = "avr31",
2076pub const cpu_atmega48p = Cpu{2076 .features = featureSet(&[_]Feature{
2077 .name = "atmega48p",2077 .avr31,
2078 .llvm_name = "atmega48p",2078 }),
2079 .dependencies = &[_]*const Feature {2079 };
2080 &feature_lpmx,2080 pub const avr35 = Cpu{
2081 &feature_lpm,2081 .name = "avr35",
2082 &feature_sram,2082 .llvm_name = "avr35",
2083 &feature_addsubiw,2083 .features = featureSet(&[_]Feature{
2084 &feature_movw,2084 .avr35,
2085 &feature_ijmpcall,2085 }),
2086 &feature_break,2086 };
2087 &feature_spm,2087 pub const avr4 = Cpu{
2088 &feature_mul,2088 .name = "avr4",
2089 },2089 .llvm_name = "avr4",
2090};2090 .features = featureSet(&[_]Feature{
20912091 .avr4,
2092pub const cpu_atmega48pa = Cpu{2092 }),
2093 .name = "atmega48pa",2093 };
2094 .llvm_name = "atmega48pa",2094 pub const avr5 = Cpu{
2095 .dependencies = &[_]*const Feature {2095 .name = "avr5",
2096 &feature_lpmx,2096 .llvm_name = "avr5",
2097 &feature_lpm,2097 .features = featureSet(&[_]Feature{
2098 &feature_sram,2098 .avr5,
2099 &feature_addsubiw,2099 }),
2100 &feature_movw,2100 };
2101 &feature_ijmpcall,2101 pub const avr51 = Cpu{
2102 &feature_break,2102 .name = "avr51",
2103 &feature_spm,2103 .llvm_name = "avr51",
2104 &feature_mul,2104 .features = featureSet(&[_]Feature{
2105 },2105 .avr51,
2106};2106 }),
21072107 };
2108pub const cpu_atmega64 = Cpu{2108 pub const avr6 = Cpu{
2109 .name = "atmega64",2109 .name = "avr6",
2110 .llvm_name = "atmega64",2110 .llvm_name = "avr6",
2111 .dependencies = &[_]*const Feature {2111 .features = featureSet(&[_]Feature{
2112 &feature_lpmx,2112 .avr6,
2113 &feature_jmpcall,2113 }),
2114 &feature_lpm,2114 };
2115 &feature_sram,2115 pub const avrtiny = Cpu{
2116 &feature_addsubiw,2116 .name = "avrtiny",
2117 &feature_movw,2117 .llvm_name = "avrtiny",
2118 &feature_ijmpcall,2118 .features = featureSet(&[_]Feature{
2119 &feature_break,2119 .avrtiny,
2120 &feature_spm,2120 }),
2121 &feature_mul,2121 };
2122 },2122 pub const avrxmega1 = Cpu{
2123};2123 .name = "avrxmega1",
21242124 .llvm_name = "avrxmega1",
2125pub const cpu_atmega640 = Cpu{2125 .features = featureSet(&[_]Feature{
2126 .name = "atmega640",2126 .xmega,
2127 .llvm_name = "atmega640",2127 }),
2128 .dependencies = &[_]*const Feature {2128 };
2129 &feature_lpmx,2129 pub const avrxmega2 = Cpu{
2130 &feature_jmpcall,2130 .name = "avrxmega2",
2131 &feature_lpm,2131 .llvm_name = "avrxmega2",
2132 &feature_sram,2132 .features = featureSet(&[_]Feature{
2133 &feature_addsubiw,2133 .xmega,
2134 &feature_movw,2134 }),
2135 &feature_ijmpcall,2135 };
2136 &feature_break,2136 pub const avrxmega3 = Cpu{
2137 &feature_spm,2137 .name = "avrxmega3",
2138 &feature_mul,2138 .llvm_name = "avrxmega3",
2139 },2139 .features = featureSet(&[_]Feature{
2140};2140 .xmega,
21412141 }),
2142pub const cpu_atmega644 = Cpu{2142 };
2143 .name = "atmega644",2143 pub const avrxmega4 = Cpu{
2144 .llvm_name = "atmega644",2144 .name = "avrxmega4",
2145 .dependencies = &[_]*const Feature {2145 .llvm_name = "avrxmega4",
2146 &feature_lpmx,2146 .features = featureSet(&[_]Feature{
2147 &feature_jmpcall,2147 .xmega,
2148 &feature_lpm,2148 }),
2149 &feature_sram,2149 };
2150 &feature_addsubiw,2150 pub const avrxmega5 = Cpu{
2151 &feature_movw,2151 .name = "avrxmega5",
2152 &feature_ijmpcall,2152 .llvm_name = "avrxmega5",
2153 &feature_break,2153 .features = featureSet(&[_]Feature{
2154 &feature_spm,2154 .xmega,
2155 &feature_mul,2155 }),
2156 },2156 };
2157};2157 pub const avrxmega6 = Cpu{
21582158 .name = "avrxmega6",
2159pub const cpu_atmega644a = Cpu{2159 .llvm_name = "avrxmega6",
2160 .name = "atmega644a",2160 .features = featureSet(&[_]Feature{
2161 .llvm_name = "atmega644a",2161 .xmega,
2162 .dependencies = &[_]*const Feature {2162 }),
2163 &feature_lpmx,2163 };
2164 &feature_jmpcall,2164 pub const avrxmega7 = Cpu{
2165 &feature_lpm,2165 .name = "avrxmega7",
2166 &feature_sram,2166 .llvm_name = "avrxmega7",
2167 &feature_addsubiw,2167 .features = featureSet(&[_]Feature{
2168 &feature_movw,2168 .xmega,
2169 &feature_ijmpcall,2169 }),
2170 &feature_break,2170 };
2171 &feature_spm,2171 pub const m3000 = Cpu{
2172 &feature_mul,2172 .name = "m3000",
2173 },2173 .llvm_name = "m3000",
2174};2174 .features = featureSet(&[_]Feature{
21752175 .avr5,
2176pub const cpu_atmega644p = Cpu{2176 }),
2177 .name = "atmega644p",2177 };
2178 .llvm_name = "atmega644p",2178};
2179 .dependencies = &[_]*const Feature {2179
2180 &feature_lpmx,2180/// All avr CPUs, sorted alphabetically by name.
2181 &feature_jmpcall,2181/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
2182 &feature_lpm,2182/// compiler has inefficient memory and CPU usage, affecting build times.
2183 &feature_sram,2183pub const all_cpus = &[_]*const Cpu{
2184 &feature_addsubiw,2184 &cpu.at43usb320,
2185 &feature_movw,2185 &cpu.at43usb355,
2186 &feature_ijmpcall,2186 &cpu.at76c711,
2187 &feature_break,2187 &cpu.at86rf401,
2188 &feature_spm,2188 &cpu.at90c8534,
2189 &feature_mul,2189 &cpu.at90can128,
2190 },2190 &cpu.at90can32,
2191};2191 &cpu.at90can64,
21922192 &cpu.at90pwm1,
2193pub const cpu_atmega644pa = Cpu{2193 &cpu.at90pwm161,
2194 .name = "atmega644pa",2194 &cpu.at90pwm2,
2195 .llvm_name = "atmega644pa",2195 &cpu.at90pwm216,
2196 .dependencies = &[_]*const Feature {2196 &cpu.at90pwm2b,
2197 &feature_lpmx,2197 &cpu.at90pwm3,
2198 &feature_jmpcall,2198 &cpu.at90pwm316,
2199 &feature_lpm,2199 &cpu.at90pwm3b,
2200 &feature_sram,2200 &cpu.at90pwm81,
2201 &feature_addsubiw,2201 &cpu.at90s1200,
2202 &feature_movw,2202 &cpu.at90s2313,
2203 &feature_ijmpcall,2203 &cpu.at90s2323,
2204 &feature_break,2204 &cpu.at90s2333,
2205 &feature_spm,2205 &cpu.at90s2343,
2206 &feature_mul,2206 &cpu.at90s4414,
2207 },2207 &cpu.at90s4433,
2208};2208 &cpu.at90s4434,
22092209 &cpu.at90s8515,
2210pub const cpu_atmega644rfr2 = Cpu{2210 &cpu.at90s8535,
2211 .name = "atmega644rfr2",2211 &cpu.at90scr100,
2212 .llvm_name = "atmega644rfr2",2212 &cpu.at90usb1286,
2213 .dependencies = &[_]*const Feature {2213 &cpu.at90usb1287,
2214 &feature_lpmx,2214 &cpu.at90usb162,
2215 &feature_jmpcall,2215 &cpu.at90usb646,
2216 &feature_lpm,2216 &cpu.at90usb647,
2217 &feature_sram,2217 &cpu.at90usb82,
2218 &feature_addsubiw,2218 &cpu.at94k,
2219 &feature_movw,2219 &cpu.ata5272,
2220 &feature_ijmpcall,2220 &cpu.ata5505,
2221 &feature_break,2221 &cpu.ata5790,
2222 &feature_spm,2222 &cpu.ata5795,
2223 &feature_mul,2223 &cpu.ata6285,
2224 },2224 &cpu.ata6286,
2225};2225 &cpu.ata6289,
22262226 &cpu.atmega103,
2227pub const cpu_atmega645 = Cpu{2227 &cpu.atmega128,
2228 .name = "atmega645",2228 &cpu.atmega1280,
2229 .llvm_name = "atmega645",2229 &cpu.atmega1281,
2230 .dependencies = &[_]*const Feature {2230 &cpu.atmega1284,
2231 &feature_lpmx,2231 &cpu.atmega1284p,
2232 &feature_jmpcall,2232 &cpu.atmega1284rfr2,
2233 &feature_lpm,2233 &cpu.atmega128a,
2234 &feature_sram,2234 &cpu.atmega128rfa1,
2235 &feature_addsubiw,2235 &cpu.atmega128rfr2,
2236 &feature_movw,2236 &cpu.atmega16,
2237 &feature_ijmpcall,2237 &cpu.atmega161,
2238 &feature_break,2238 &cpu.atmega162,
2239 &feature_spm,2239 &cpu.atmega163,
2240 &feature_mul,2240 &cpu.atmega164a,
2241 },2241 &cpu.atmega164p,
2242};2242 &cpu.atmega164pa,
22432243 &cpu.atmega165,
2244pub const cpu_atmega6450 = Cpu{2244 &cpu.atmega165a,
2245 .name = "atmega6450",2245 &cpu.atmega165p,
2246 .llvm_name = "atmega6450",2246 &cpu.atmega165pa,
2247 .dependencies = &[_]*const Feature {2247 &cpu.atmega168,
2248 &feature_lpmx,2248 &cpu.atmega168a,
2249 &feature_jmpcall,2249 &cpu.atmega168p,
2250 &feature_lpm,2250 &cpu.atmega168pa,
2251 &feature_sram,2251 &cpu.atmega169,
2252 &feature_addsubiw,2252 &cpu.atmega169a,
2253 &feature_movw,2253 &cpu.atmega169p,
2254 &feature_ijmpcall,2254 &cpu.atmega169pa,
2255 &feature_break,2255 &cpu.atmega16a,
2256 &feature_spm,2256 &cpu.atmega16hva,
2257 &feature_mul,2257 &cpu.atmega16hva2,
2258 },2258 &cpu.atmega16hvb,
2259};2259 &cpu.atmega16hvbrevb,
22602260 &cpu.atmega16m1,
2261pub const cpu_atmega6450a = Cpu{2261 &cpu.atmega16u2,
2262 .name = "atmega6450a",2262 &cpu.atmega16u4,
2263 .llvm_name = "atmega6450a",2263 &cpu.atmega2560,
2264 .dependencies = &[_]*const Feature {2264 &cpu.atmega2561,
2265 &feature_lpmx,2265 &cpu.atmega2564rfr2,
2266 &feature_jmpcall,2266 &cpu.atmega256rfr2,
2267 &feature_lpm,2267 &cpu.atmega32,
2268 &feature_sram,2268 &cpu.atmega323,
2269 &feature_addsubiw,2269 &cpu.atmega324a,
2270 &feature_movw,2270 &cpu.atmega324p,
2271 &feature_ijmpcall,2271 &cpu.atmega324pa,
2272 &feature_break,2272 &cpu.atmega325,
2273 &feature_spm,2273 &cpu.atmega3250,
2274 &feature_mul,2274 &cpu.atmega3250a,
2275 },2275 &cpu.atmega3250p,
2276};2276 &cpu.atmega3250pa,
22772277 &cpu.atmega325a,
2278pub const cpu_atmega6450p = Cpu{2278 &cpu.atmega325p,
2279 .name = "atmega6450p",2279 &cpu.atmega325pa,
2280 .llvm_name = "atmega6450p",2280 &cpu.atmega328,
2281 .dependencies = &[_]*const Feature {2281 &cpu.atmega328p,
2282 &feature_lpmx,2282 &cpu.atmega329,
2283 &feature_jmpcall,2283 &cpu.atmega3290,
2284 &feature_lpm,2284 &cpu.atmega3290a,
2285 &feature_sram,2285 &cpu.atmega3290p,
2286 &feature_addsubiw,2286 &cpu.atmega3290pa,
2287 &feature_movw,2287 &cpu.atmega329a,
2288 &feature_ijmpcall,2288 &cpu.atmega329p,
2289 &feature_break,2289 &cpu.atmega329pa,
2290 &feature_spm,2290 &cpu.atmega32a,
2291 &feature_mul,2291 &cpu.atmega32c1,
2292 },2292 &cpu.atmega32hvb,
2293};2293 &cpu.atmega32hvbrevb,
22942294 &cpu.atmega32m1,
2295pub const cpu_atmega645a = Cpu{2295 &cpu.atmega32u2,
2296 .name = "atmega645a",2296 &cpu.atmega32u4,
2297 .llvm_name = "atmega645a",2297 &cpu.atmega32u6,
2298 .dependencies = &[_]*const Feature {2298 &cpu.atmega406,
2299 &feature_lpmx,2299 &cpu.atmega48,
2300 &feature_jmpcall,2300 &cpu.atmega48a,
2301 &feature_lpm,2301 &cpu.atmega48p,
2302 &feature_sram,2302 &cpu.atmega48pa,
2303 &feature_addsubiw,2303 &cpu.atmega64,
2304 &feature_movw,2304 &cpu.atmega640,
2305 &feature_ijmpcall,2305 &cpu.atmega644,
2306 &feature_break,2306 &cpu.atmega644a,
2307 &feature_spm,2307 &cpu.atmega644p,
2308 &feature_mul,2308 &cpu.atmega644pa,
2309 },2309 &cpu.atmega644rfr2,
2310};2310 &cpu.atmega645,
23112311 &cpu.atmega6450,
2312pub const cpu_atmega645p = Cpu{2312 &cpu.atmega6450a,
2313 .name = "atmega645p",2313 &cpu.atmega6450p,
2314 .llvm_name = "atmega645p",2314 &cpu.atmega645a,
2315 .dependencies = &[_]*const Feature {2315 &cpu.atmega645p,
2316 &feature_lpmx,2316 &cpu.atmega649,
2317 &feature_jmpcall,2317 &cpu.atmega6490,
2318 &feature_lpm,2318 &cpu.atmega6490a,
2319 &feature_sram,2319 &cpu.atmega6490p,
2320 &feature_addsubiw,2320 &cpu.atmega649a,
2321 &feature_movw,2321 &cpu.atmega649p,
2322 &feature_ijmpcall,2322 &cpu.atmega64a,
2323 &feature_break,2323 &cpu.atmega64c1,
2324 &feature_spm,2324 &cpu.atmega64hve,
2325 &feature_mul,2325 &cpu.atmega64m1,
2326 },2326 &cpu.atmega64rfr2,
2327};2327 &cpu.atmega8,
23282328 &cpu.atmega8515,
2329pub const cpu_atmega649 = Cpu{2329 &cpu.atmega8535,
2330 .name = "atmega649",2330 &cpu.atmega88,
2331 .llvm_name = "atmega649",2331 &cpu.atmega88a,
2332 .dependencies = &[_]*const Feature {2332 &cpu.atmega88p,
2333 &feature_lpmx,2333 &cpu.atmega88pa,
2334 &feature_jmpcall,2334 &cpu.atmega8a,
2335 &feature_lpm,2335 &cpu.atmega8hva,
2336 &feature_sram,2336 &cpu.atmega8u2,
2337 &feature_addsubiw,2337 &cpu.attiny10,
2338 &feature_movw,2338 &cpu.attiny102,
2339 &feature_ijmpcall,2339 &cpu.attiny104,
2340 &feature_break,2340 &cpu.attiny11,
2341 &feature_spm,2341 &cpu.attiny12,
2342 &feature_mul,2342 &cpu.attiny13,
2343 },2343 &cpu.attiny13a,
2344};2344 &cpu.attiny15,
23452345 &cpu.attiny1634,
2346pub const cpu_atmega6490 = Cpu{2346 &cpu.attiny167,
2347 .name = "atmega6490",2347 &cpu.attiny20,
2348 .llvm_name = "atmega6490",2348 &cpu.attiny22,
2349 .dependencies = &[_]*const Feature {2349 &cpu.attiny2313,
2350 &feature_lpmx,2350 &cpu.attiny2313a,
2351 &feature_jmpcall,2351 &cpu.attiny24,
2352 &feature_lpm,2352 &cpu.attiny24a,
2353 &feature_sram,2353 &cpu.attiny25,
2354 &feature_addsubiw,2354 &cpu.attiny26,
2355 &feature_movw,2355 &cpu.attiny261,
2356 &feature_ijmpcall,2356 &cpu.attiny261a,
2357 &feature_break,2357 &cpu.attiny28,
2358 &feature_spm,2358 &cpu.attiny4,
2359 &feature_mul,2359 &cpu.attiny40,
2360 },2360 &cpu.attiny4313,
2361};2361 &cpu.attiny43u,
23622362 &cpu.attiny44,
2363pub const cpu_atmega6490a = Cpu{2363 &cpu.attiny44a,
2364 .name = "atmega6490a",2364 &cpu.attiny45,
2365 .llvm_name = "atmega6490a",2365 &cpu.attiny461,
2366 .dependencies = &[_]*const Feature {2366 &cpu.attiny461a,
2367 &feature_lpmx,2367 &cpu.attiny48,
2368 &feature_jmpcall,2368 &cpu.attiny5,
2369 &feature_lpm,2369 &cpu.attiny828,
2370 &feature_sram,2370 &cpu.attiny84,
2371 &feature_addsubiw,2371 &cpu.attiny84a,
2372 &feature_movw,2372 &cpu.attiny85,
2373 &feature_ijmpcall,2373 &cpu.attiny861,
2374 &feature_break,2374 &cpu.attiny861a,
2375 &feature_spm,2375 &cpu.attiny87,
2376 &feature_mul,2376 &cpu.attiny88,
2377 },2377 &cpu.attiny9,
2378};2378 &cpu.atxmega128a1,
23792379 &cpu.atxmega128a1u,
2380pub const cpu_atmega6490p = Cpu{2380 &cpu.atxmega128a3,
2381 .name = "atmega6490p",2381 &cpu.atxmega128a3u,
2382 .llvm_name = "atmega6490p",2382 &cpu.atxmega128a4u,
2383 .dependencies = &[_]*const Feature {2383 &cpu.atxmega128b1,
2384 &feature_lpmx,2384 &cpu.atxmega128b3,
2385 &feature_jmpcall,2385 &cpu.atxmega128c3,
2386 &feature_lpm,2386 &cpu.atxmega128d3,
2387 &feature_sram,2387 &cpu.atxmega128d4,
2388 &feature_addsubiw,2388 &cpu.atxmega16a4,
2389 &feature_movw,2389 &cpu.atxmega16a4u,
2390 &feature_ijmpcall,2390 &cpu.atxmega16c4,
2391 &feature_break,2391 &cpu.atxmega16d4,
2392 &feature_spm,2392 &cpu.atxmega16e5,
2393 &feature_mul,2393 &cpu.atxmega192a3,
2394 },2394 &cpu.atxmega192a3u,
2395};2395 &cpu.atxmega192c3,
23962396 &cpu.atxmega192d3,
2397pub const cpu_atmega649a = Cpu{2397 &cpu.atxmega256a3,
2398 .name = "atmega649a",2398 &cpu.atxmega256a3b,
2399 .llvm_name = "atmega649a",2399 &cpu.atxmega256a3bu,
2400 .dependencies = &[_]*const Feature {2400 &cpu.atxmega256a3u,
2401 &feature_lpmx,2401 &cpu.atxmega256c3,
2402 &feature_jmpcall,2402 &cpu.atxmega256d3,
2403 &feature_lpm,2403 &cpu.atxmega32a4,
2404 &feature_sram,2404 &cpu.atxmega32a4u,
2405 &feature_addsubiw,2405 &cpu.atxmega32c4,
2406 &feature_movw,2406 &cpu.atxmega32d4,
2407 &feature_ijmpcall,2407 &cpu.atxmega32e5,
2408 &feature_break,2408 &cpu.atxmega32x1,
2409 &feature_spm,2409 &cpu.atxmega384c3,
2410 &feature_mul,2410 &cpu.atxmega384d3,
2411 },2411 &cpu.atxmega64a1,
2412};2412 &cpu.atxmega64a1u,
24132413 &cpu.atxmega64a3,
2414pub const cpu_atmega649p = Cpu{2414 &cpu.atxmega64a3u,
2415 .name = "atmega649p",2415 &cpu.atxmega64a4u,
2416 .llvm_name = "atmega649p",2416 &cpu.atxmega64b1,
2417 .dependencies = &[_]*const Feature {2417 &cpu.atxmega64b3,
2418 &feature_lpmx,2418 &cpu.atxmega64c3,
2419 &feature_jmpcall,2419 &cpu.atxmega64d3,
2420 &feature_lpm,2420 &cpu.atxmega64d4,
2421 &feature_sram,2421 &cpu.atxmega8e5,
2422 &feature_addsubiw,2422 &cpu.avr1,
2423 &feature_movw,2423 &cpu.avr2,
2424 &feature_ijmpcall,2424 &cpu.avr25,
2425 &feature_break,2425 &cpu.avr3,
2426 &feature_spm,2426 &cpu.avr31,
2427 &feature_mul,2427 &cpu.avr35,
2428 },2428 &cpu.avr4,
2429};2429 &cpu.avr5,
24302430 &cpu.avr51,
2431pub const cpu_atmega64a = Cpu{2431 &cpu.avr6,
2432 .name = "atmega64a",2432 &cpu.avrtiny,
2433 .llvm_name = "atmega64a",2433 &cpu.avrxmega1,
2434 .dependencies = &[_]*const Feature {2434 &cpu.avrxmega2,
2435 &feature_lpmx,2435 &cpu.avrxmega3,
2436 &feature_jmpcall,2436 &cpu.avrxmega4,
2437 &feature_lpm,2437 &cpu.avrxmega5,
2438 &feature_sram,2438 &cpu.avrxmega6,
2439 &feature_addsubiw,2439 &cpu.avrxmega7,
2440 &feature_movw,2440 &cpu.m3000,
2441 &feature_ijmpcall,
2442 &feature_break,
2443 &feature_spm,
2444 &feature_mul,
2445 },
2446};
2447
2448pub const cpu_atmega64c1 = Cpu{
2449 .name = "atmega64c1",
2450 .llvm_name = "atmega64c1",
2451 .dependencies = &[_]*const Feature {
2452 &feature_lpmx,
2453 &feature_jmpcall,
2454 &feature_lpm,
2455 &feature_sram,
2456 &feature_addsubiw,
2457 &feature_movw,
2458 &feature_ijmpcall,
2459 &feature_break,
2460 &feature_spm,
2461 &feature_mul,
2462 },
2463};
2464
2465pub const cpu_atmega64hve = Cpu{
2466 .name = "atmega64hve",
2467 .llvm_name = "atmega64hve",
2468 .dependencies = &[_]*const Feature {
2469 &feature_lpmx,
2470 &feature_jmpcall,
2471 &feature_lpm,
2472 &feature_sram,
2473 &feature_addsubiw,
2474 &feature_movw,
2475 &feature_ijmpcall,
2476 &feature_break,
2477 &feature_spm,
2478 &feature_mul,
2479 },
2480};
2481
2482pub const cpu_atmega64m1 = Cpu{
2483 .name = "atmega64m1",
2484 .llvm_name = "atmega64m1",
2485 .dependencies = &[_]*const Feature {
2486 &feature_lpmx,
2487 &feature_jmpcall,
2488 &feature_lpm,
2489 &feature_sram,
2490 &feature_addsubiw,
2491 &feature_movw,
2492 &feature_ijmpcall,
2493 &feature_break,
2494 &feature_spm,
2495 &feature_mul,
2496 },
2497};
2498
2499pub const cpu_atmega64rfr2 = Cpu{
2500 .name = "atmega64rfr2",
2501 .llvm_name = "atmega64rfr2",
2502 .dependencies = &[_]*const Feature {
2503 &feature_lpmx,
2504 &feature_jmpcall,
2505 &feature_lpm,
2506 &feature_sram,
2507 &feature_addsubiw,
2508 &feature_movw,
2509 &feature_ijmpcall,
2510 &feature_break,
2511 &feature_spm,
2512 &feature_mul,
2513 },
2514};
2515
2516pub const cpu_atmega8 = Cpu{
2517 .name = "atmega8",
2518 .llvm_name = "atmega8",
2519 .dependencies = &[_]*const Feature {
2520 &feature_lpmx,
2521 &feature_lpm,
2522 &feature_sram,
2523 &feature_addsubiw,
2524 &feature_movw,
2525 &feature_ijmpcall,
2526 &feature_break,
2527 &feature_spm,
2528 &feature_mul,
2529 },
2530};
2531
2532pub const cpu_atmega8515 = Cpu{
2533 .name = "atmega8515",
2534 .llvm_name = "atmega8515",
2535 .dependencies = &[_]*const Feature {
2536 &feature_lpm,
2537 &feature_sram,
2538 &feature_addsubiw,
2539 &feature_ijmpcall,
2540 &feature_lpmx,
2541 &feature_movw,
2542 &feature_mul,
2543 &feature_spm,
2544 },
2545};
2546
2547pub const cpu_atmega8535 = Cpu{
2548 .name = "atmega8535",
2549 .llvm_name = "atmega8535",
2550 .dependencies = &[_]*const Feature {
2551 &feature_lpm,
2552 &feature_sram,
2553 &feature_addsubiw,
2554 &feature_ijmpcall,
2555 &feature_lpmx,
2556 &feature_movw,
2557 &feature_mul,
2558 &feature_spm,
2559 },
2560};
2561
2562pub const cpu_atmega88 = Cpu{
2563 .name = "atmega88",
2564 .llvm_name = "atmega88",
2565 .dependencies = &[_]*const Feature {
2566 &feature_lpmx,
2567 &feature_lpm,
2568 &feature_sram,
2569 &feature_addsubiw,
2570 &feature_movw,
2571 &feature_ijmpcall,
2572 &feature_break,
2573 &feature_spm,
2574 &feature_mul,
2575 },
2576};
2577
2578pub const cpu_atmega88a = Cpu{
2579 .name = "atmega88a",
2580 .llvm_name = "atmega88a",
2581 .dependencies = &[_]*const Feature {
2582 &feature_lpmx,
2583 &feature_lpm,
2584 &feature_sram,
2585 &feature_addsubiw,
2586 &feature_movw,
2587 &feature_ijmpcall,
2588 &feature_break,
2589 &feature_spm,
2590 &feature_mul,
2591 },
2592};
2593
2594pub const cpu_atmega88p = Cpu{
2595 .name = "atmega88p",
2596 .llvm_name = "atmega88p",
2597 .dependencies = &[_]*const Feature {
2598 &feature_lpmx,
2599 &feature_lpm,
2600 &feature_sram,
2601 &feature_addsubiw,
2602 &feature_movw,
2603 &feature_ijmpcall,
2604 &feature_break,
2605 &feature_spm,
2606 &feature_mul,
2607 },
2608};
2609
2610pub const cpu_atmega88pa = Cpu{
2611 .name = "atmega88pa",
2612 .llvm_name = "atmega88pa",
2613 .dependencies = &[_]*const Feature {
2614 &feature_lpmx,
2615 &feature_lpm,
2616 &feature_sram,
2617 &feature_addsubiw,
2618 &feature_movw,
2619 &feature_ijmpcall,
2620 &feature_break,
2621 &feature_spm,
2622 &feature_mul,
2623 },
2624};
2625
2626pub const cpu_atmega8a = Cpu{
2627 .name = "atmega8a",
2628 .llvm_name = "atmega8a",
2629 .dependencies = &[_]*const Feature {
2630 &feature_lpmx,
2631 &feature_lpm,
2632 &feature_sram,
2633 &feature_addsubiw,
2634 &feature_movw,
2635 &feature_ijmpcall,
2636 &feature_break,
2637 &feature_spm,
2638 &feature_mul,
2639 },
2640};
2641
2642pub const cpu_atmega8hva = Cpu{
2643 .name = "atmega8hva",
2644 .llvm_name = "atmega8hva",
2645 .dependencies = &[_]*const Feature {
2646 &feature_lpmx,
2647 &feature_lpm,
2648 &feature_sram,
2649 &feature_addsubiw,
2650 &feature_movw,
2651 &feature_ijmpcall,
2652 &feature_break,
2653 &feature_spm,
2654 &feature_mul,
2655 },
2656};
2657
2658pub const cpu_atmega8u2 = Cpu{
2659 .name = "atmega8u2",
2660 .llvm_name = "atmega8u2",
2661 .dependencies = &[_]*const Feature {
2662 &feature_lpmx,
2663 &feature_jmpcall,
2664 &feature_lpm,
2665 &feature_sram,
2666 &feature_addsubiw,
2667 &feature_movw,
2668 &feature_ijmpcall,
2669 &feature_break,
2670 &feature_spm,
2671 },
2672};
2673
2674pub const cpu_attiny10 = Cpu{
2675 .name = "attiny10",
2676 .llvm_name = "attiny10",
2677 .dependencies = &[_]*const Feature {
2678 &feature_sram,
2679 &feature_break,
2680 &feature_tinyencoding,
2681 },
2682};
2683
2684pub const cpu_attiny102 = Cpu{
2685 .name = "attiny102",
2686 .llvm_name = "attiny102",
2687 .dependencies = &[_]*const Feature {
2688 &feature_sram,
2689 &feature_break,
2690 &feature_tinyencoding,
2691 },
2692};
2693
2694pub const cpu_attiny104 = Cpu{
2695 .name = "attiny104",
2696 .llvm_name = "attiny104",
2697 .dependencies = &[_]*const Feature {
2698 &feature_sram,
2699 &feature_break,
2700 &feature_tinyencoding,
2701 },
2702};
2703
2704pub const cpu_attiny11 = Cpu{
2705 .name = "attiny11",
2706 .llvm_name = "attiny11",
2707 .dependencies = &[_]*const Feature {
2708 &feature_lpm,
2709 },
2710};
2711
2712pub const cpu_attiny12 = Cpu{
2713 .name = "attiny12",
2714 .llvm_name = "attiny12",
2715 .dependencies = &[_]*const Feature {
2716 &feature_lpm,
2717 },
2718};
2719
2720pub const cpu_attiny13 = Cpu{
2721 .name = "attiny13",
2722 .llvm_name = "attiny13",
2723 .dependencies = &[_]*const Feature {
2724 &feature_lpmx,
2725 &feature_lpm,
2726 &feature_sram,
2727 &feature_addsubiw,
2728 &feature_movw,
2729 &feature_ijmpcall,
2730 &feature_break,
2731 &feature_spm,
2732 },
2733};
2734
2735pub const cpu_attiny13a = Cpu{
2736 .name = "attiny13a",
2737 .llvm_name = "attiny13a",
2738 .dependencies = &[_]*const Feature {
2739 &feature_lpmx,
2740 &feature_lpm,
2741 &feature_sram,
2742 &feature_addsubiw,
2743 &feature_movw,
2744 &feature_ijmpcall,
2745 &feature_break,
2746 &feature_spm,
2747 },
2748};
2749
2750pub const cpu_attiny15 = Cpu{
2751 .name = "attiny15",
2752 .llvm_name = "attiny15",
2753 .dependencies = &[_]*const Feature {
2754 &feature_lpm,
2755 },
2756};
2757
2758pub const cpu_attiny1634 = Cpu{
2759 .name = "attiny1634",
2760 .llvm_name = "attiny1634",
2761 .dependencies = &[_]*const Feature {
2762 &feature_lpmx,
2763 &feature_jmpcall,
2764 &feature_lpm,
2765 &feature_sram,
2766 &feature_addsubiw,
2767 &feature_movw,
2768 &feature_ijmpcall,
2769 &feature_break,
2770 &feature_spm,
2771 },
2772};
2773
2774pub const cpu_attiny167 = Cpu{
2775 .name = "attiny167",
2776 .llvm_name = "attiny167",
2777 .dependencies = &[_]*const Feature {
2778 &feature_lpmx,
2779 &feature_jmpcall,
2780 &feature_lpm,
2781 &feature_sram,
2782 &feature_addsubiw,
2783 &feature_movw,
2784 &feature_ijmpcall,
2785 &feature_break,
2786 &feature_spm,
2787 },
2788};
2789
2790pub const cpu_attiny20 = Cpu{
2791 .name = "attiny20",
2792 .llvm_name = "attiny20",
2793 .dependencies = &[_]*const Feature {
2794 &feature_sram,
2795 &feature_break,
2796 &feature_tinyencoding,
2797 },
2798};
2799
2800pub const cpu_attiny22 = Cpu{
2801 .name = "attiny22",
2802 .llvm_name = "attiny22",
2803 .dependencies = &[_]*const Feature {
2804 &feature_lpm,
2805 &feature_sram,
2806 &feature_addsubiw,
2807 &feature_ijmpcall,
2808 },
2809};
2810
2811pub const cpu_attiny2313 = Cpu{
2812 .name = "attiny2313",
2813 .llvm_name = "attiny2313",
2814 .dependencies = &[_]*const Feature {
2815 &feature_lpmx,
2816 &feature_lpm,
2817 &feature_sram,
2818 &feature_addsubiw,
2819 &feature_movw,
2820 &feature_ijmpcall,
2821 &feature_break,
2822 &feature_spm,
2823 },
2824};
2825
2826pub const cpu_attiny2313a = Cpu{
2827 .name = "attiny2313a",
2828 .llvm_name = "attiny2313a",
2829 .dependencies = &[_]*const Feature {
2830 &feature_lpmx,
2831 &feature_lpm,
2832 &feature_sram,
2833 &feature_addsubiw,
2834 &feature_movw,
2835 &feature_ijmpcall,
2836 &feature_break,
2837 &feature_spm,
2838 },
2839};
2840
2841pub const cpu_attiny24 = Cpu{
2842 .name = "attiny24",
2843 .llvm_name = "attiny24",
2844 .dependencies = &[_]*const Feature {
2845 &feature_lpmx,
2846 &feature_lpm,
2847 &feature_sram,
2848 &feature_addsubiw,
2849 &feature_movw,
2850 &feature_ijmpcall,
2851 &feature_break,
2852 &feature_spm,
2853 },
2854};
2855
2856pub const cpu_attiny24a = Cpu{
2857 .name = "attiny24a",
2858 .llvm_name = "attiny24a",
2859 .dependencies = &[_]*const Feature {
2860 &feature_lpmx,
2861 &feature_lpm,
2862 &feature_sram,
2863 &feature_addsubiw,
2864 &feature_movw,
2865 &feature_ijmpcall,
2866 &feature_break,
2867 &feature_spm,
2868 },
2869};
2870
2871pub const cpu_attiny25 = Cpu{
2872 .name = "attiny25",
2873 .llvm_name = "attiny25",
2874 .dependencies = &[_]*const Feature {
2875 &feature_lpmx,
2876 &feature_lpm,
2877 &feature_sram,
2878 &feature_addsubiw,
2879 &feature_movw,
2880 &feature_ijmpcall,
2881 &feature_break,
2882 &feature_spm,
2883 },
2884};
2885
2886pub const cpu_attiny26 = Cpu{
2887 .name = "attiny26",
2888 .llvm_name = "attiny26",
2889 .dependencies = &[_]*const Feature {
2890 &feature_lpm,
2891 &feature_sram,
2892 &feature_addsubiw,
2893 &feature_ijmpcall,
2894 &feature_lpmx,
2895 },
2896};
2897
2898pub const cpu_attiny261 = Cpu{
2899 .name = "attiny261",
2900 .llvm_name = "attiny261",
2901 .dependencies = &[_]*const Feature {
2902 &feature_lpmx,
2903 &feature_lpm,
2904 &feature_sram,
2905 &feature_addsubiw,
2906 &feature_movw,
2907 &feature_ijmpcall,
2908 &feature_break,
2909 &feature_spm,
2910 },
2911};
2912
2913pub const cpu_attiny261a = Cpu{
2914 .name = "attiny261a",
2915 .llvm_name = "attiny261a",
2916 .dependencies = &[_]*const Feature {
2917 &feature_lpmx,
2918 &feature_lpm,
2919 &feature_sram,
2920 &feature_addsubiw,
2921 &feature_movw,
2922 &feature_ijmpcall,
2923 &feature_break,
2924 &feature_spm,
2925 },
2926};
2927
2928pub const cpu_attiny28 = Cpu{
2929 .name = "attiny28",
2930 .llvm_name = "attiny28",
2931 .dependencies = &[_]*const Feature {
2932 &feature_lpm,
2933 },
2934};
2935
2936pub const cpu_attiny4 = Cpu{
2937 .name = "attiny4",
2938 .llvm_name = "attiny4",
2939 .dependencies = &[_]*const Feature {
2940 &feature_sram,
2941 &feature_break,
2942 &feature_tinyencoding,
2943 },
2944};
2945
2946pub const cpu_attiny40 = Cpu{
2947 .name = "attiny40",
2948 .llvm_name = "attiny40",
2949 .dependencies = &[_]*const Feature {
2950 &feature_sram,
2951 &feature_break,
2952 &feature_tinyencoding,
2953 },
2954};
2955
2956pub const cpu_attiny4313 = Cpu{
2957 .name = "attiny4313",
2958 .llvm_name = "attiny4313",
2959 .dependencies = &[_]*const Feature {
2960 &feature_lpmx,
2961 &feature_lpm,
2962 &feature_sram,
2963 &feature_addsubiw,
2964 &feature_movw,
2965 &feature_ijmpcall,
2966 &feature_break,
2967 &feature_spm,
2968 },
2969};
2970
2971pub const cpu_attiny43u = Cpu{
2972 .name = "attiny43u",
2973 .llvm_name = "attiny43u",
2974 .dependencies = &[_]*const Feature {
2975 &feature_lpmx,
2976 &feature_lpm,
2977 &feature_sram,
2978 &feature_addsubiw,
2979 &feature_movw,
2980 &feature_ijmpcall,
2981 &feature_break,
2982 &feature_spm,
2983 },
2984};
2985
2986pub const cpu_attiny44 = Cpu{
2987 .name = "attiny44",
2988 .llvm_name = "attiny44",
2989 .dependencies = &[_]*const Feature {
2990 &feature_lpmx,
2991 &feature_lpm,
2992 &feature_sram,
2993 &feature_addsubiw,
2994 &feature_movw,
2995 &feature_ijmpcall,
2996 &feature_break,
2997 &feature_spm,
2998 },
2999};
3000
3001pub const cpu_attiny44a = Cpu{
3002 .name = "attiny44a",
3003 .llvm_name = "attiny44a",
3004 .dependencies = &[_]*const Feature {
3005 &feature_lpmx,
3006 &feature_lpm,
3007 &feature_sram,
3008 &feature_addsubiw,
3009 &feature_movw,
3010 &feature_ijmpcall,
3011 &feature_break,
3012 &feature_spm,
3013 },
3014};
3015
3016pub const cpu_attiny45 = Cpu{
3017 .name = "attiny45",
3018 .llvm_name = "attiny45",
3019 .dependencies = &[_]*const Feature {
3020 &feature_lpmx,
3021 &feature_lpm,
3022 &feature_sram,
3023 &feature_addsubiw,
3024 &feature_movw,
3025 &feature_ijmpcall,
3026 &feature_break,
3027 &feature_spm,
3028 },
3029};
3030
3031pub const cpu_attiny461 = Cpu{
3032 .name = "attiny461",
3033 .llvm_name = "attiny461",
3034 .dependencies = &[_]*const Feature {
3035 &feature_lpmx,
3036 &feature_lpm,
3037 &feature_sram,
3038 &feature_addsubiw,
3039 &feature_movw,
3040 &feature_ijmpcall,
3041 &feature_break,
3042 &feature_spm,
3043 },
3044};
3045
3046pub const cpu_attiny461a = Cpu{
3047 .name = "attiny461a",
3048 .llvm_name = "attiny461a",
3049 .dependencies = &[_]*const Feature {
3050 &feature_lpmx,
3051 &feature_lpm,
3052 &feature_sram,
3053 &feature_addsubiw,
3054 &feature_movw,
3055 &feature_ijmpcall,
3056 &feature_break,
3057 &feature_spm,
3058 },
3059};
3060
3061pub const cpu_attiny48 = Cpu{
3062 .name = "attiny48",
3063 .llvm_name = "attiny48",
3064 .dependencies = &[_]*const Feature {
3065 &feature_lpmx,
3066 &feature_lpm,
3067 &feature_sram,
3068 &feature_addsubiw,
3069 &feature_movw,
3070 &feature_ijmpcall,
3071 &feature_break,
3072 &feature_spm,
3073 },
3074};
3075
3076pub const cpu_attiny5 = Cpu{
3077 .name = "attiny5",
3078 .llvm_name = "attiny5",
3079 .dependencies = &[_]*const Feature {
3080 &feature_sram,
3081 &feature_break,
3082 &feature_tinyencoding,
3083 },
3084};
3085
3086pub const cpu_attiny828 = Cpu{
3087 .name = "attiny828",
3088 .llvm_name = "attiny828",
3089 .dependencies = &[_]*const Feature {
3090 &feature_lpmx,
3091 &feature_lpm,
3092 &feature_sram,
3093 &feature_addsubiw,
3094 &feature_movw,
3095 &feature_ijmpcall,
3096 &feature_break,
3097 &feature_spm,
3098 },
3099};
3100
3101pub const cpu_attiny84 = Cpu{
3102 .name = "attiny84",
3103 .llvm_name = "attiny84",
3104 .dependencies = &[_]*const Feature {
3105 &feature_lpmx,
3106 &feature_lpm,
3107 &feature_sram,
3108 &feature_addsubiw,
3109 &feature_movw,
3110 &feature_ijmpcall,
3111 &feature_break,
3112 &feature_spm,
3113 },
3114};
3115
3116pub const cpu_attiny84a = Cpu{
3117 .name = "attiny84a",
3118 .llvm_name = "attiny84a",
3119 .dependencies = &[_]*const Feature {
3120 &feature_lpmx,
3121 &feature_lpm,
3122 &feature_sram,
3123 &feature_addsubiw,
3124 &feature_movw,
3125 &feature_ijmpcall,
3126 &feature_break,
3127 &feature_spm,
3128 },
3129};
3130
3131pub const cpu_attiny85 = Cpu{
3132 .name = "attiny85",
3133 .llvm_name = "attiny85",
3134 .dependencies = &[_]*const Feature {
3135 &feature_lpmx,
3136 &feature_lpm,
3137 &feature_sram,
3138 &feature_addsubiw,
3139 &feature_movw,
3140 &feature_ijmpcall,
3141 &feature_break,
3142 &feature_spm,
3143 },
3144};
3145
3146pub const cpu_attiny861 = Cpu{
3147 .name = "attiny861",
3148 .llvm_name = "attiny861",
3149 .dependencies = &[_]*const Feature {
3150 &feature_lpmx,
3151 &feature_lpm,
3152 &feature_sram,
3153 &feature_addsubiw,
3154 &feature_movw,
3155 &feature_ijmpcall,
3156 &feature_break,
3157 &feature_spm,
3158 },
3159};
3160
3161pub const cpu_attiny861a = Cpu{
3162 .name = "attiny861a",
3163 .llvm_name = "attiny861a",
3164 .dependencies = &[_]*const Feature {
3165 &feature_lpmx,
3166 &feature_lpm,
3167 &feature_sram,
3168 &feature_addsubiw,
3169 &feature_movw,
3170 &feature_ijmpcall,
3171 &feature_break,
3172 &feature_spm,
3173 },
3174};
3175
3176pub const cpu_attiny87 = Cpu{
3177 .name = "attiny87",
3178 .llvm_name = "attiny87",
3179 .dependencies = &[_]*const Feature {
3180 &feature_lpmx,
3181 &feature_lpm,
3182 &feature_sram,
3183 &feature_addsubiw,
3184 &feature_movw,
3185 &feature_ijmpcall,
3186 &feature_break,
3187 &feature_spm,
3188 },
3189};
3190
3191pub const cpu_attiny88 = Cpu{
3192 .name = "attiny88",
3193 .llvm_name = "attiny88",
3194 .dependencies = &[_]*const Feature {
3195 &feature_lpmx,
3196 &feature_lpm,
3197 &feature_sram,
3198 &feature_addsubiw,
3199 &feature_movw,
3200 &feature_ijmpcall,
3201 &feature_break,
3202 &feature_spm,
3203 },
3204};
3205
3206pub const cpu_attiny9 = Cpu{
3207 .name = "attiny9",
3208 .llvm_name = "attiny9",
3209 .dependencies = &[_]*const Feature {
3210 &feature_sram,
3211 &feature_break,
3212 &feature_tinyencoding,
3213 },
3214};
3215
3216pub const cpu_atxmega128a1 = Cpu{
3217 .name = "atxmega128a1",
3218 .llvm_name = "atxmega128a1",
3219 .dependencies = &[_]*const Feature {
3220 &feature_spmx,
3221 &feature_des,
3222 &feature_lpmx,
3223 &feature_jmpcall,
3224 &feature_lpm,
3225 &feature_elpm,
3226 &feature_sram,
3227 &feature_addsubiw,
3228 &feature_elpmx,
3229 &feature_movw,
3230 &feature_ijmpcall,
3231 &feature_break,
3232 &feature_eijmpcall,
3233 &feature_spm,
3234 &feature_mul,
3235 },
3236};
3237
3238pub const cpu_atxmega128a1u = Cpu{
3239 .name = "atxmega128a1u",
3240 .llvm_name = "atxmega128a1u",
3241 .dependencies = &[_]*const Feature {
3242 &feature_spmx,
3243 &feature_des,
3244 &feature_lpmx,
3245 &feature_jmpcall,
3246 &feature_lpm,
3247 &feature_elpm,
3248 &feature_sram,
3249 &feature_addsubiw,
3250 &feature_elpmx,
3251 &feature_rmw,
3252 &feature_movw,
3253 &feature_ijmpcall,
3254 &feature_break,
3255 &feature_eijmpcall,
3256 &feature_spm,
3257 &feature_mul,
3258 },
3259};
3260
3261pub const cpu_atxmega128a3 = Cpu{
3262 .name = "atxmega128a3",
3263 .llvm_name = "atxmega128a3",
3264 .dependencies = &[_]*const Feature {
3265 &feature_spmx,
3266 &feature_des,
3267 &feature_lpmx,
3268 &feature_jmpcall,
3269 &feature_lpm,
3270 &feature_elpm,
3271 &feature_sram,
3272 &feature_addsubiw,
3273 &feature_elpmx,
3274 &feature_movw,
3275 &feature_ijmpcall,
3276 &feature_break,
3277 &feature_eijmpcall,
3278 &feature_spm,
3279 &feature_mul,
3280 },
3281};
3282
3283pub const cpu_atxmega128a3u = Cpu{
3284 .name = "atxmega128a3u",
3285 .llvm_name = "atxmega128a3u",
3286 .dependencies = &[_]*const Feature {
3287 &feature_spmx,
3288 &feature_des,
3289 &feature_lpmx,
3290 &feature_jmpcall,
3291 &feature_lpm,
3292 &feature_elpm,
3293 &feature_sram,
3294 &feature_addsubiw,
3295 &feature_elpmx,
3296 &feature_rmw,
3297 &feature_movw,
3298 &feature_ijmpcall,
3299 &feature_break,
3300 &feature_eijmpcall,
3301 &feature_spm,
3302 &feature_mul,
3303 },
3304};
3305
3306pub const cpu_atxmega128a4u = Cpu{
3307 .name = "atxmega128a4u",
3308 .llvm_name = "atxmega128a4u",
3309 .dependencies = &[_]*const Feature {
3310 &feature_spmx,
3311 &feature_des,
3312 &feature_lpmx,
3313 &feature_jmpcall,
3314 &feature_lpm,
3315 &feature_elpm,
3316 &feature_sram,
3317 &feature_addsubiw,
3318 &feature_elpmx,
3319 &feature_rmw,
3320 &feature_movw,
3321 &feature_ijmpcall,
3322 &feature_break,
3323 &feature_eijmpcall,
3324 &feature_spm,
3325 &feature_mul,
3326 },
3327};
3328
3329pub const cpu_atxmega128b1 = Cpu{
3330 .name = "atxmega128b1",
3331 .llvm_name = "atxmega128b1",
3332 .dependencies = &[_]*const Feature {
3333 &feature_spmx,
3334 &feature_des,
3335 &feature_lpmx,
3336 &feature_jmpcall,
3337 &feature_lpm,
3338 &feature_elpm,
3339 &feature_sram,
3340 &feature_addsubiw,
3341 &feature_elpmx,
3342 &feature_rmw,
3343 &feature_movw,
3344 &feature_ijmpcall,
3345 &feature_break,
3346 &feature_eijmpcall,
3347 &feature_spm,
3348 &feature_mul,
3349 },
3350};
3351
3352pub const cpu_atxmega128b3 = Cpu{
3353 .name = "atxmega128b3",
3354 .llvm_name = "atxmega128b3",
3355 .dependencies = &[_]*const Feature {
3356 &feature_spmx,
3357 &feature_des,
3358 &feature_lpmx,
3359 &feature_jmpcall,
3360 &feature_lpm,
3361 &feature_elpm,
3362 &feature_sram,
3363 &feature_addsubiw,
3364 &feature_elpmx,
3365 &feature_rmw,
3366 &feature_movw,
3367 &feature_ijmpcall,
3368 &feature_break,
3369 &feature_eijmpcall,
3370 &feature_spm,
3371 &feature_mul,
3372 },
3373};
3374
3375pub const cpu_atxmega128c3 = Cpu{
3376 .name = "atxmega128c3",
3377 .llvm_name = "atxmega128c3",
3378 .dependencies = &[_]*const Feature {
3379 &feature_spmx,
3380 &feature_des,
3381 &feature_lpmx,
3382 &feature_jmpcall,
3383 &feature_lpm,
3384 &feature_elpm,
3385 &feature_sram,
3386 &feature_addsubiw,
3387 &feature_elpmx,
3388 &feature_rmw,
3389 &feature_movw,
3390 &feature_ijmpcall,
3391 &feature_break,
3392 &feature_eijmpcall,
3393 &feature_spm,
3394 &feature_mul,
3395 },
3396};
3397
3398pub const cpu_atxmega128d3 = Cpu{
3399 .name = "atxmega128d3",
3400 .llvm_name = "atxmega128d3",
3401 .dependencies = &[_]*const Feature {
3402 &feature_spmx,
3403 &feature_des,
3404 &feature_lpmx,
3405 &feature_jmpcall,
3406 &feature_lpm,
3407 &feature_elpm,
3408 &feature_sram,
3409 &feature_addsubiw,
3410 &feature_elpmx,
3411 &feature_movw,
3412 &feature_ijmpcall,
3413 &feature_break,
3414 &feature_eijmpcall,
3415 &feature_spm,
3416 &feature_mul,
3417 },
3418};
3419
3420pub const cpu_atxmega128d4 = Cpu{
3421 .name = "atxmega128d4",
3422 .llvm_name = "atxmega128d4",
3423 .dependencies = &[_]*const Feature {
3424 &feature_spmx,
3425 &feature_des,
3426 &feature_lpmx,
3427 &feature_jmpcall,
3428 &feature_lpm,
3429 &feature_elpm,
3430 &feature_sram,
3431 &feature_addsubiw,
3432 &feature_elpmx,
3433 &feature_movw,
3434 &feature_ijmpcall,
3435 &feature_break,
3436 &feature_eijmpcall,
3437 &feature_spm,
3438 &feature_mul,
3439 },
3440};
3441
3442pub const cpu_atxmega16a4 = Cpu{
3443 .name = "atxmega16a4",
3444 .llvm_name = "atxmega16a4",
3445 .dependencies = &[_]*const Feature {
3446 &feature_spmx,
3447 &feature_des,
3448 &feature_lpmx,
3449 &feature_jmpcall,
3450 &feature_lpm,
3451 &feature_elpm,
3452 &feature_sram,
3453 &feature_addsubiw,
3454 &feature_elpmx,
3455 &feature_movw,
3456 &feature_ijmpcall,
3457 &feature_break,
3458 &feature_eijmpcall,
3459 &feature_spm,
3460 &feature_mul,
3461 },
3462};
3463
3464pub const cpu_atxmega16a4u = Cpu{
3465 .name = "atxmega16a4u",
3466 .llvm_name = "atxmega16a4u",
3467 .dependencies = &[_]*const Feature {
3468 &feature_spmx,
3469 &feature_des,
3470 &feature_lpmx,
3471 &feature_jmpcall,
3472 &feature_lpm,
3473 &feature_elpm,
3474 &feature_sram,
3475 &feature_addsubiw,
3476 &feature_elpmx,
3477 &feature_rmw,
3478 &feature_movw,
3479 &feature_ijmpcall,
3480 &feature_break,
3481 &feature_eijmpcall,
3482 &feature_spm,
3483 &feature_mul,
3484 },
3485};
3486
3487pub const cpu_atxmega16c4 = Cpu{
3488 .name = "atxmega16c4",
3489 .llvm_name = "atxmega16c4",
3490 .dependencies = &[_]*const Feature {
3491 &feature_spmx,
3492 &feature_des,
3493 &feature_lpmx,
3494 &feature_jmpcall,
3495 &feature_lpm,
3496 &feature_elpm,
3497 &feature_sram,
3498 &feature_addsubiw,
3499 &feature_elpmx,
3500 &feature_rmw,
3501 &feature_movw,
3502 &feature_ijmpcall,
3503 &feature_break,
3504 &feature_eijmpcall,
3505 &feature_spm,
3506 &feature_mul,
3507 },
3508};
3509
3510pub const cpu_atxmega16d4 = Cpu{
3511 .name = "atxmega16d4",
3512 .llvm_name = "atxmega16d4",
3513 .dependencies = &[_]*const Feature {
3514 &feature_spmx,
3515 &feature_des,
3516 &feature_lpmx,
3517 &feature_jmpcall,
3518 &feature_lpm,
3519 &feature_elpm,
3520 &feature_sram,
3521 &feature_addsubiw,
3522 &feature_elpmx,
3523 &feature_movw,
3524 &feature_ijmpcall,
3525 &feature_break,
3526 &feature_eijmpcall,
3527 &feature_spm,
3528 &feature_mul,
3529 },
3530};
3531
3532pub const cpu_atxmega16e5 = Cpu{
3533 .name = "atxmega16e5",
3534 .llvm_name = "atxmega16e5",
3535 .dependencies = &[_]*const Feature {
3536 &feature_spmx,
3537 &feature_des,
3538 &feature_lpmx,
3539 &feature_jmpcall,
3540 &feature_lpm,
3541 &feature_elpm,
3542 &feature_sram,
3543 &feature_addsubiw,
3544 &feature_elpmx,
3545 &feature_movw,
3546 &feature_ijmpcall,
3547 &feature_break,
3548 &feature_eijmpcall,
3549 &feature_spm,
3550 &feature_mul,
3551 },
3552};
3553
3554pub const cpu_atxmega192a3 = Cpu{
3555 .name = "atxmega192a3",
3556 .llvm_name = "atxmega192a3",
3557 .dependencies = &[_]*const Feature {
3558 &feature_spmx,
3559 &feature_des,
3560 &feature_lpmx,
3561 &feature_jmpcall,
3562 &feature_lpm,
3563 &feature_elpm,
3564 &feature_sram,
3565 &feature_addsubiw,
3566 &feature_elpmx,
3567 &feature_movw,
3568 &feature_ijmpcall,
3569 &feature_break,
3570 &feature_eijmpcall,
3571 &feature_spm,
3572 &feature_mul,
3573 },
3574};
3575
3576pub const cpu_atxmega192a3u = Cpu{
3577 .name = "atxmega192a3u",
3578 .llvm_name = "atxmega192a3u",
3579 .dependencies = &[_]*const Feature {
3580 &feature_spmx,
3581 &feature_des,
3582 &feature_lpmx,
3583 &feature_jmpcall,
3584 &feature_lpm,
3585 &feature_elpm,
3586 &feature_sram,
3587 &feature_addsubiw,
3588 &feature_elpmx,
3589 &feature_rmw,
3590 &feature_movw,
3591 &feature_ijmpcall,
3592 &feature_break,
3593 &feature_eijmpcall,
3594 &feature_spm,
3595 &feature_mul,
3596 },
3597};
3598
3599pub const cpu_atxmega192c3 = Cpu{
3600 .name = "atxmega192c3",
3601 .llvm_name = "atxmega192c3",
3602 .dependencies = &[_]*const Feature {
3603 &feature_spmx,
3604 &feature_des,
3605 &feature_lpmx,
3606 &feature_jmpcall,
3607 &feature_lpm,
3608 &feature_elpm,
3609 &feature_sram,
3610 &feature_addsubiw,
3611 &feature_elpmx,
3612 &feature_rmw,
3613 &feature_movw,
3614 &feature_ijmpcall,
3615 &feature_break,
3616 &feature_eijmpcall,
3617 &feature_spm,
3618 &feature_mul,
3619 },
3620};
3621
3622pub const cpu_atxmega192d3 = Cpu{
3623 .name = "atxmega192d3",
3624 .llvm_name = "atxmega192d3",
3625 .dependencies = &[_]*const Feature {
3626 &feature_spmx,
3627 &feature_des,
3628 &feature_lpmx,
3629 &feature_jmpcall,
3630 &feature_lpm,
3631 &feature_elpm,
3632 &feature_sram,
3633 &feature_addsubiw,
3634 &feature_elpmx,
3635 &feature_movw,
3636 &feature_ijmpcall,
3637 &feature_break,
3638 &feature_eijmpcall,
3639 &feature_spm,
3640 &feature_mul,
3641 },
3642};
3643
3644pub const cpu_atxmega256a3 = Cpu{
3645 .name = "atxmega256a3",
3646 .llvm_name = "atxmega256a3",
3647 .dependencies = &[_]*const Feature {
3648 &feature_spmx,
3649 &feature_des,
3650 &feature_lpmx,
3651 &feature_jmpcall,
3652 &feature_lpm,
3653 &feature_elpm,
3654 &feature_sram,
3655 &feature_addsubiw,
3656 &feature_elpmx,
3657 &feature_movw,
3658 &feature_ijmpcall,
3659 &feature_break,
3660 &feature_eijmpcall,
3661 &feature_spm,
3662 &feature_mul,
3663 },
3664};
3665
3666pub const cpu_atxmega256a3b = Cpu{
3667 .name = "atxmega256a3b",
3668 .llvm_name = "atxmega256a3b",
3669 .dependencies = &[_]*const Feature {
3670 &feature_spmx,
3671 &feature_des,
3672 &feature_lpmx,
3673 &feature_jmpcall,
3674 &feature_lpm,
3675 &feature_elpm,
3676 &feature_sram,
3677 &feature_addsubiw,
3678 &feature_elpmx,
3679 &feature_movw,
3680 &feature_ijmpcall,
3681 &feature_break,
3682 &feature_eijmpcall,
3683 &feature_spm,
3684 &feature_mul,
3685 },
3686};
3687
3688pub const cpu_atxmega256a3bu = Cpu{
3689 .name = "atxmega256a3bu",
3690 .llvm_name = "atxmega256a3bu",
3691 .dependencies = &[_]*const Feature {
3692 &feature_spmx,
3693 &feature_des,
3694 &feature_lpmx,
3695 &feature_jmpcall,
3696 &feature_lpm,
3697 &feature_elpm,
3698 &feature_sram,
3699 &feature_addsubiw,
3700 &feature_elpmx,
3701 &feature_rmw,
3702 &feature_movw,
3703 &feature_ijmpcall,
3704 &feature_break,
3705 &feature_eijmpcall,
3706 &feature_spm,
3707 &feature_mul,
3708 },
3709};
3710
3711pub const cpu_atxmega256a3u = Cpu{
3712 .name = "atxmega256a3u",
3713 .llvm_name = "atxmega256a3u",
3714 .dependencies = &[_]*const Feature {
3715 &feature_spmx,
3716 &feature_des,
3717 &feature_lpmx,
3718 &feature_jmpcall,
3719 &feature_lpm,
3720 &feature_elpm,
3721 &feature_sram,
3722 &feature_addsubiw,
3723 &feature_elpmx,
3724 &feature_rmw,
3725 &feature_movw,
3726 &feature_ijmpcall,
3727 &feature_break,
3728 &feature_eijmpcall,
3729 &feature_spm,
3730 &feature_mul,
3731 },
3732};
3733
3734pub const cpu_atxmega256c3 = Cpu{
3735 .name = "atxmega256c3",
3736 .llvm_name = "atxmega256c3",
3737 .dependencies = &[_]*const Feature {
3738 &feature_spmx,
3739 &feature_des,
3740 &feature_lpmx,
3741 &feature_jmpcall,
3742 &feature_lpm,
3743 &feature_elpm,
3744 &feature_sram,
3745 &feature_addsubiw,
3746 &feature_elpmx,
3747 &feature_rmw,
3748 &feature_movw,
3749 &feature_ijmpcall,
3750 &feature_break,
3751 &feature_eijmpcall,
3752 &feature_spm,
3753 &feature_mul,
3754 },
3755};
3756
3757pub const cpu_atxmega256d3 = Cpu{
3758 .name = "atxmega256d3",
3759 .llvm_name = "atxmega256d3",
3760 .dependencies = &[_]*const Feature {
3761 &feature_spmx,
3762 &feature_des,
3763 &feature_lpmx,
3764 &feature_jmpcall,
3765 &feature_lpm,
3766 &feature_elpm,
3767 &feature_sram,
3768 &feature_addsubiw,
3769 &feature_elpmx,
3770 &feature_movw,
3771 &feature_ijmpcall,
3772 &feature_break,
3773 &feature_eijmpcall,
3774 &feature_spm,
3775 &feature_mul,
3776 },
3777};
3778
3779pub const cpu_atxmega32a4 = Cpu{
3780 .name = "atxmega32a4",
3781 .llvm_name = "atxmega32a4",
3782 .dependencies = &[_]*const Feature {
3783 &feature_spmx,
3784 &feature_des,
3785 &feature_lpmx,
3786 &feature_jmpcall,
3787 &feature_lpm,
3788 &feature_elpm,
3789 &feature_sram,
3790 &feature_addsubiw,
3791 &feature_elpmx,
3792 &feature_movw,
3793 &feature_ijmpcall,
3794 &feature_break,
3795 &feature_eijmpcall,
3796 &feature_spm,
3797 &feature_mul,
3798 },
3799};
3800
3801pub const cpu_atxmega32a4u = Cpu{
3802 .name = "atxmega32a4u",
3803 .llvm_name = "atxmega32a4u",
3804 .dependencies = &[_]*const Feature {
3805 &feature_spmx,
3806 &feature_des,
3807 &feature_lpmx,
3808 &feature_jmpcall,
3809 &feature_lpm,
3810 &feature_elpm,
3811 &feature_sram,
3812 &feature_addsubiw,
3813 &feature_elpmx,
3814 &feature_rmw,
3815 &feature_movw,
3816 &feature_ijmpcall,
3817 &feature_break,
3818 &feature_eijmpcall,
3819 &feature_spm,
3820 &feature_mul,
3821 },
3822};
3823
3824pub const cpu_atxmega32c4 = Cpu{
3825 .name = "atxmega32c4",
3826 .llvm_name = "atxmega32c4",
3827 .dependencies = &[_]*const Feature {
3828 &feature_spmx,
3829 &feature_des,
3830 &feature_lpmx,
3831 &feature_jmpcall,
3832 &feature_lpm,
3833 &feature_elpm,
3834 &feature_sram,
3835 &feature_addsubiw,
3836 &feature_elpmx,
3837 &feature_rmw,
3838 &feature_movw,
3839 &feature_ijmpcall,
3840 &feature_break,
3841 &feature_eijmpcall,
3842 &feature_spm,
3843 &feature_mul,
3844 },
3845};
3846
3847pub const cpu_atxmega32d4 = Cpu{
3848 .name = "atxmega32d4",
3849 .llvm_name = "atxmega32d4",
3850 .dependencies = &[_]*const Feature {
3851 &feature_spmx,
3852 &feature_des,
3853 &feature_lpmx,
3854 &feature_jmpcall,
3855 &feature_lpm,
3856 &feature_elpm,
3857 &feature_sram,
3858 &feature_addsubiw,
3859 &feature_elpmx,
3860 &feature_movw,
3861 &feature_ijmpcall,
3862 &feature_break,
3863 &feature_eijmpcall,
3864 &feature_spm,
3865 &feature_mul,
3866 },
3867};
3868
3869pub const cpu_atxmega32e5 = Cpu{
3870 .name = "atxmega32e5",
3871 .llvm_name = "atxmega32e5",
3872 .dependencies = &[_]*const Feature {
3873 &feature_spmx,
3874 &feature_des,
3875 &feature_lpmx,
3876 &feature_jmpcall,
3877 &feature_lpm,
3878 &feature_elpm,
3879 &feature_sram,
3880 &feature_addsubiw,
3881 &feature_elpmx,
3882 &feature_movw,
3883 &feature_ijmpcall,
3884 &feature_break,
3885 &feature_eijmpcall,
3886 &feature_spm,
3887 &feature_mul,
3888 },
3889};
3890
3891pub const cpu_atxmega32x1 = Cpu{
3892 .name = "atxmega32x1",
3893 .llvm_name = "atxmega32x1",
3894 .dependencies = &[_]*const Feature {
3895 &feature_spmx,
3896 &feature_des,
3897 &feature_lpmx,
3898 &feature_jmpcall,
3899 &feature_lpm,
3900 &feature_elpm,
3901 &feature_sram,
3902 &feature_addsubiw,
3903 &feature_elpmx,
3904 &feature_movw,
3905 &feature_ijmpcall,
3906 &feature_break,
3907 &feature_eijmpcall,
3908 &feature_spm,
3909 &feature_mul,
3910 },
3911};
3912
3913pub const cpu_atxmega384c3 = Cpu{
3914 .name = "atxmega384c3",
3915 .llvm_name = "atxmega384c3",
3916 .dependencies = &[_]*const Feature {
3917 &feature_spmx,
3918 &feature_des,
3919 &feature_lpmx,
3920 &feature_jmpcall,
3921 &feature_lpm,
3922 &feature_elpm,
3923 &feature_sram,
3924 &feature_addsubiw,
3925 &feature_elpmx,
3926 &feature_rmw,
3927 &feature_movw,
3928 &feature_ijmpcall,
3929 &feature_break,
3930 &feature_eijmpcall,
3931 &feature_spm,
3932 &feature_mul,
3933 },
3934};
3935
3936pub const cpu_atxmega384d3 = Cpu{
3937 .name = "atxmega384d3",
3938 .llvm_name = "atxmega384d3",
3939 .dependencies = &[_]*const Feature {
3940 &feature_spmx,
3941 &feature_des,
3942 &feature_lpmx,
3943 &feature_jmpcall,
3944 &feature_lpm,
3945 &feature_elpm,
3946 &feature_sram,
3947 &feature_addsubiw,
3948 &feature_elpmx,
3949 &feature_movw,
3950 &feature_ijmpcall,
3951 &feature_break,
3952 &feature_eijmpcall,
3953 &feature_spm,
3954 &feature_mul,
3955 },
3956};
3957
3958pub const cpu_atxmega64a1 = Cpu{
3959 .name = "atxmega64a1",
3960 .llvm_name = "atxmega64a1",
3961 .dependencies = &[_]*const Feature {
3962 &feature_spmx,
3963 &feature_des,
3964 &feature_lpmx,
3965 &feature_jmpcall,
3966 &feature_lpm,
3967 &feature_elpm,
3968 &feature_sram,
3969 &feature_addsubiw,
3970 &feature_elpmx,
3971 &feature_movw,
3972 &feature_ijmpcall,
3973 &feature_break,
3974 &feature_eijmpcall,
3975 &feature_spm,
3976 &feature_mul,
3977 },
3978};
3979
3980pub const cpu_atxmega64a1u = Cpu{
3981 .name = "atxmega64a1u",
3982 .llvm_name = "atxmega64a1u",
3983 .dependencies = &[_]*const Feature {
3984 &feature_spmx,
3985 &feature_des,
3986 &feature_lpmx,
3987 &feature_jmpcall,
3988 &feature_lpm,
3989 &feature_elpm,
3990 &feature_sram,
3991 &feature_addsubiw,
3992 &feature_elpmx,
3993 &feature_rmw,
3994 &feature_movw,
3995 &feature_ijmpcall,
3996 &feature_break,
3997 &feature_eijmpcall,
3998 &feature_spm,
3999 &feature_mul,
4000 },
4001};
4002
4003pub const cpu_atxmega64a3 = Cpu{
4004 .name = "atxmega64a3",
4005 .llvm_name = "atxmega64a3",
4006 .dependencies = &[_]*const Feature {
4007 &feature_spmx,
4008 &feature_des,
4009 &feature_lpmx,
4010 &feature_jmpcall,
4011 &feature_lpm,
4012 &feature_elpm,
4013 &feature_sram,
4014 &feature_addsubiw,
4015 &feature_elpmx,
4016 &feature_movw,
4017 &feature_ijmpcall,
4018 &feature_break,
4019 &feature_eijmpcall,
4020 &feature_spm,
4021 &feature_mul,
4022 },
4023};
4024
4025pub const cpu_atxmega64a3u = Cpu{
4026 .name = "atxmega64a3u",
4027 .llvm_name = "atxmega64a3u",
4028 .dependencies = &[_]*const Feature {
4029 &feature_spmx,
4030 &feature_des,
4031 &feature_lpmx,
4032 &feature_jmpcall,
4033 &feature_lpm,
4034 &feature_elpm,
4035 &feature_sram,
4036 &feature_addsubiw,
4037 &feature_elpmx,
4038 &feature_rmw,
4039 &feature_movw,
4040 &feature_ijmpcall,
4041 &feature_break,
4042 &feature_eijmpcall,
4043 &feature_spm,
4044 &feature_mul,
4045 },
4046};
4047
4048pub const cpu_atxmega64a4u = Cpu{
4049 .name = "atxmega64a4u",
4050 .llvm_name = "atxmega64a4u",
4051 .dependencies = &[_]*const Feature {
4052 &feature_spmx,
4053 &feature_des,
4054 &feature_lpmx,
4055 &feature_jmpcall,
4056 &feature_lpm,
4057 &feature_elpm,
4058 &feature_sram,
4059 &feature_addsubiw,
4060 &feature_elpmx,
4061 &feature_rmw,
4062 &feature_movw,
4063 &feature_ijmpcall,
4064 &feature_break,
4065 &feature_eijmpcall,
4066 &feature_spm,
4067 &feature_mul,
4068 },
4069};
4070
4071pub const cpu_atxmega64b1 = Cpu{
4072 .name = "atxmega64b1",
4073 .llvm_name = "atxmega64b1",
4074 .dependencies = &[_]*const Feature {
4075 &feature_spmx,
4076 &feature_des,
4077 &feature_lpmx,
4078 &feature_jmpcall,
4079 &feature_lpm,
4080 &feature_elpm,
4081 &feature_sram,
4082 &feature_addsubiw,
4083 &feature_elpmx,
4084 &feature_rmw,
4085 &feature_movw,
4086 &feature_ijmpcall,
4087 &feature_break,
4088 &feature_eijmpcall,
4089 &feature_spm,
4090 &feature_mul,
4091 },
4092};
4093
4094pub const cpu_atxmega64b3 = Cpu{
4095 .name = "atxmega64b3",
4096 .llvm_name = "atxmega64b3",
4097 .dependencies = &[_]*const Feature {
4098 &feature_spmx,
4099 &feature_des,
4100 &feature_lpmx,
4101 &feature_jmpcall,
4102 &feature_lpm,
4103 &feature_elpm,
4104 &feature_sram,
4105 &feature_addsubiw,
4106 &feature_elpmx,
4107 &feature_rmw,
4108 &feature_movw,
4109 &feature_ijmpcall,
4110 &feature_break,
4111 &feature_eijmpcall,
4112 &feature_spm,
4113 &feature_mul,
4114 },
4115};
4116
4117pub const cpu_atxmega64c3 = Cpu{
4118 .name = "atxmega64c3",
4119 .llvm_name = "atxmega64c3",
4120 .dependencies = &[_]*const Feature {
4121 &feature_spmx,
4122 &feature_des,
4123 &feature_lpmx,
4124 &feature_jmpcall,
4125 &feature_lpm,
4126 &feature_elpm,
4127 &feature_sram,
4128 &feature_addsubiw,
4129 &feature_elpmx,
4130 &feature_rmw,
4131 &feature_movw,
4132 &feature_ijmpcall,
4133 &feature_break,
4134 &feature_eijmpcall,
4135 &feature_spm,
4136 &feature_mul,
4137 },
4138};
4139
4140pub const cpu_atxmega64d3 = Cpu{
4141 .name = "atxmega64d3",
4142 .llvm_name = "atxmega64d3",
4143 .dependencies = &[_]*const Feature {
4144 &feature_spmx,
4145 &feature_des,
4146 &feature_lpmx,
4147 &feature_jmpcall,
4148 &feature_lpm,
4149 &feature_elpm,
4150 &feature_sram,
4151 &feature_addsubiw,
4152 &feature_elpmx,
4153 &feature_movw,
4154 &feature_ijmpcall,
4155 &feature_break,
4156 &feature_eijmpcall,
4157 &feature_spm,
4158 &feature_mul,
4159 },
4160};
4161
4162pub const cpu_atxmega64d4 = Cpu{
4163 .name = "atxmega64d4",
4164 .llvm_name = "atxmega64d4",
4165 .dependencies = &[_]*const Feature {
4166 &feature_spmx,
4167 &feature_des,
4168 &feature_lpmx,
4169 &feature_jmpcall,
4170 &feature_lpm,
4171 &feature_elpm,
4172 &feature_sram,
4173 &feature_addsubiw,
4174 &feature_elpmx,
4175 &feature_movw,
4176 &feature_ijmpcall,
4177 &feature_break,
4178 &feature_eijmpcall,
4179 &feature_spm,
4180 &feature_mul,
4181 },
4182};
4183
4184pub const cpu_atxmega8e5 = Cpu{
4185 .name = "atxmega8e5",
4186 .llvm_name = "atxmega8e5",
4187 .dependencies = &[_]*const Feature {
4188 &feature_spmx,
4189 &feature_des,
4190 &feature_lpmx,
4191 &feature_jmpcall,
4192 &feature_lpm,
4193 &feature_elpm,
4194 &feature_sram,
4195 &feature_addsubiw,
4196 &feature_elpmx,
4197 &feature_movw,
4198 &feature_ijmpcall,
4199 &feature_break,
4200 &feature_eijmpcall,
4201 &feature_spm,
4202 &feature_mul,
4203 },
4204};
4205
4206pub const cpu_avr1 = Cpu{
4207 .name = "avr1",
4208 .llvm_name = "avr1",
4209 .dependencies = &[_]*const Feature {
4210 &feature_lpm,
4211 },
4212};
4213
4214pub const cpu_avr2 = Cpu{
4215 .name = "avr2",
4216 .llvm_name = "avr2",
4217 .dependencies = &[_]*const Feature {
4218 &feature_lpm,
4219 &feature_sram,
4220 &feature_addsubiw,
4221 &feature_ijmpcall,
4222 },
4223};
4224
4225pub const cpu_avr25 = Cpu{
4226 .name = "avr25",
4227 .llvm_name = "avr25",
4228 .dependencies = &[_]*const Feature {
4229 &feature_lpmx,
4230 &feature_lpm,
4231 &feature_sram,
4232 &feature_addsubiw,
4233 &feature_movw,
4234 &feature_ijmpcall,
4235 &feature_break,
4236 &feature_spm,
4237 },
4238};
4239
4240pub const cpu_avr3 = Cpu{
4241 .name = "avr3",
4242 .llvm_name = "avr3",
4243 .dependencies = &[_]*const Feature {
4244 &feature_jmpcall,
4245 &feature_lpm,
4246 &feature_sram,
4247 &feature_addsubiw,
4248 &feature_ijmpcall,
4249 },
4250};
4251
4252pub const cpu_avr31 = Cpu{
4253 .name = "avr31",
4254 .llvm_name = "avr31",
4255 .dependencies = &[_]*const Feature {
4256 &feature_jmpcall,
4257 &feature_lpm,
4258 &feature_elpm,
4259 &feature_sram,
4260 &feature_addsubiw,
4261 &feature_ijmpcall,
4262 },
4263};
4264
4265pub const cpu_avr35 = Cpu{
4266 .name = "avr35",
4267 .llvm_name = "avr35",
4268 .dependencies = &[_]*const Feature {
4269 &feature_lpmx,
4270 &feature_jmpcall,
4271 &feature_lpm,
4272 &feature_sram,
4273 &feature_addsubiw,
4274 &feature_movw,
4275 &feature_ijmpcall,
4276 &feature_break,
4277 &feature_spm,
4278 },
4279};
4280
4281pub const cpu_avr4 = Cpu{
4282 .name = "avr4",
4283 .llvm_name = "avr4",
4284 .dependencies = &[_]*const Feature {
4285 &feature_lpmx,
4286 &feature_lpm,
4287 &feature_sram,
4288 &feature_addsubiw,
4289 &feature_movw,
4290 &feature_ijmpcall,
4291 &feature_break,
4292 &feature_spm,
4293 &feature_mul,
4294 },
4295};
4296
4297pub const cpu_avr5 = Cpu{
4298 .name = "avr5",
4299 .llvm_name = "avr5",
4300 .dependencies = &[_]*const Feature {
4301 &feature_lpmx,
4302 &feature_jmpcall,
4303 &feature_lpm,
4304 &feature_sram,
4305 &feature_addsubiw,
4306 &feature_movw,
4307 &feature_ijmpcall,
4308 &feature_break,
4309 &feature_spm,
4310 &feature_mul,
4311 },
4312};
4313
4314pub const cpu_avr51 = Cpu{
4315 .name = "avr51",
4316 .llvm_name = "avr51",
4317 .dependencies = &[_]*const Feature {
4318 &feature_lpmx,
4319 &feature_jmpcall,
4320 &feature_lpm,
4321 &feature_elpm,
4322 &feature_sram,
4323 &feature_addsubiw,
4324 &feature_elpmx,
4325 &feature_movw,
4326 &feature_ijmpcall,
4327 &feature_break,
4328 &feature_spm,
4329 &feature_mul,
4330 },
4331};
4332
4333pub const cpu_avr6 = Cpu{
4334 .name = "avr6",
4335 .llvm_name = "avr6",
4336 .dependencies = &[_]*const Feature {
4337 &feature_lpmx,
4338 &feature_jmpcall,
4339 &feature_lpm,
4340 &feature_elpm,
4341 &feature_sram,
4342 &feature_addsubiw,
4343 &feature_elpmx,
4344 &feature_movw,
4345 &feature_ijmpcall,
4346 &feature_break,
4347 &feature_spm,
4348 &feature_mul,
4349 },
4350};
4351
4352pub const cpu_avrtiny = Cpu{
4353 .name = "avrtiny",
4354 .llvm_name = "avrtiny",
4355 .dependencies = &[_]*const Feature {
4356 &feature_sram,
4357 &feature_break,
4358 &feature_tinyencoding,
4359 },
4360};
4361
4362pub const cpu_avrxmega1 = Cpu{
4363 .name = "avrxmega1",
4364 .llvm_name = "avrxmega1",
4365 .dependencies = &[_]*const Feature {
4366 &feature_spmx,
4367 &feature_des,
4368 &feature_lpmx,
4369 &feature_jmpcall,
4370 &feature_lpm,
4371 &feature_elpm,
4372 &feature_sram,
4373 &feature_addsubiw,
4374 &feature_elpmx,
4375 &feature_movw,
4376 &feature_ijmpcall,
4377 &feature_break,
4378 &feature_eijmpcall,
4379 &feature_spm,
4380 &feature_mul,
4381 },
4382};
4383
4384pub const cpu_avrxmega2 = Cpu{
4385 .name = "avrxmega2",
4386 .llvm_name = "avrxmega2",
4387 .dependencies = &[_]*const Feature {
4388 &feature_spmx,
4389 &feature_des,
4390 &feature_lpmx,
4391 &feature_jmpcall,
4392 &feature_lpm,
4393 &feature_elpm,
4394 &feature_sram,
4395 &feature_addsubiw,
4396 &feature_elpmx,
4397 &feature_movw,
4398 &feature_ijmpcall,
4399 &feature_break,
4400 &feature_eijmpcall,
4401 &feature_spm,
4402 &feature_mul,
4403 },
4404};
4405
4406pub const cpu_avrxmega3 = Cpu{
4407 .name = "avrxmega3",
4408 .llvm_name = "avrxmega3",
4409 .dependencies = &[_]*const Feature {
4410 &feature_spmx,
4411 &feature_des,
4412 &feature_lpmx,
4413 &feature_jmpcall,
4414 &feature_lpm,
4415 &feature_elpm,
4416 &feature_sram,
4417 &feature_addsubiw,
4418 &feature_elpmx,
4419 &feature_movw,
4420 &feature_ijmpcall,
4421 &feature_break,
4422 &feature_eijmpcall,
4423 &feature_spm,
4424 &feature_mul,
4425 },
4426};
4427
4428pub const cpu_avrxmega4 = Cpu{
4429 .name = "avrxmega4",
4430 .llvm_name = "avrxmega4",
4431 .dependencies = &[_]*const Feature {
4432 &feature_spmx,
4433 &feature_des,
4434 &feature_lpmx,
4435 &feature_jmpcall,
4436 &feature_lpm,
4437 &feature_elpm,
4438 &feature_sram,
4439 &feature_addsubiw,
4440 &feature_elpmx,
4441 &feature_movw,
4442 &feature_ijmpcall,
4443 &feature_break,
4444 &feature_eijmpcall,
4445 &feature_spm,
4446 &feature_mul,
4447 },
4448};
4449
4450pub const cpu_avrxmega5 = Cpu{
4451 .name = "avrxmega5",
4452 .llvm_name = "avrxmega5",
4453 .dependencies = &[_]*const Feature {
4454 &feature_spmx,
4455 &feature_des,
4456 &feature_lpmx,
4457 &feature_jmpcall,
4458 &feature_lpm,
4459 &feature_elpm,
4460 &feature_sram,
4461 &feature_addsubiw,
4462 &feature_elpmx,
4463 &feature_movw,
4464 &feature_ijmpcall,
4465 &feature_break,
4466 &feature_eijmpcall,
4467 &feature_spm,
4468 &feature_mul,
4469 },
4470};
4471
4472pub const cpu_avrxmega6 = Cpu{
4473 .name = "avrxmega6",
4474 .llvm_name = "avrxmega6",
4475 .dependencies = &[_]*const Feature {
4476 &feature_spmx,
4477 &feature_des,
4478 &feature_lpmx,
4479 &feature_jmpcall,
4480 &feature_lpm,
4481 &feature_elpm,
4482 &feature_sram,
4483 &feature_addsubiw,
4484 &feature_elpmx,
4485 &feature_movw,
4486 &feature_ijmpcall,
4487 &feature_break,
4488 &feature_eijmpcall,
4489 &feature_spm,
4490 &feature_mul,
4491 },
4492};
4493
4494pub const cpu_avrxmega7 = Cpu{
4495 .name = "avrxmega7",
4496 .llvm_name = "avrxmega7",
4497 .dependencies = &[_]*const Feature {
4498 &feature_spmx,
4499 &feature_des,
4500 &feature_lpmx,
4501 &feature_jmpcall,
4502 &feature_lpm,
4503 &feature_elpm,
4504 &feature_sram,
4505 &feature_addsubiw,
4506 &feature_elpmx,
4507 &feature_movw,
4508 &feature_ijmpcall,
4509 &feature_break,
4510 &feature_eijmpcall,
4511 &feature_spm,
4512 &feature_mul,
4513 },
4514};
4515
4516pub const cpu_m3000 = Cpu{
4517 .name = "m3000",
4518 .llvm_name = "m3000",
4519 .dependencies = &[_]*const Feature {
4520 &feature_lpmx,
4521 &feature_jmpcall,
4522 &feature_lpm,
4523 &feature_sram,
4524 &feature_addsubiw,
4525 &feature_movw,
4526 &feature_ijmpcall,
4527 &feature_break,
4528 &feature_spm,
4529 &feature_mul,
4530 },
4531};
4532
4533pub const cpus = &[_]*const Cpu {
4534 &cpu_at43usb320,
4535 &cpu_at43usb355,
4536 &cpu_at76c711,
4537 &cpu_at86rf401,
4538 &cpu_at90c8534,
4539 &cpu_at90can128,
4540 &cpu_at90can32,
4541 &cpu_at90can64,
4542 &cpu_at90pwm1,
4543 &cpu_at90pwm161,
4544 &cpu_at90pwm2,
4545 &cpu_at90pwm216,
4546 &cpu_at90pwm2b,
4547 &cpu_at90pwm3,
4548 &cpu_at90pwm316,
4549 &cpu_at90pwm3b,
4550 &cpu_at90pwm81,
4551 &cpu_at90s1200,
4552 &cpu_at90s2313,
4553 &cpu_at90s2323,
4554 &cpu_at90s2333,
4555 &cpu_at90s2343,
4556 &cpu_at90s4414,
4557 &cpu_at90s4433,
4558 &cpu_at90s4434,
4559 &cpu_at90s8515,
4560 &cpu_at90s8535,
4561 &cpu_at90scr100,
4562 &cpu_at90usb1286,
4563 &cpu_at90usb1287,
4564 &cpu_at90usb162,
4565 &cpu_at90usb646,
4566 &cpu_at90usb647,
4567 &cpu_at90usb82,
4568 &cpu_at94k,
4569 &cpu_ata5272,
4570 &cpu_ata5505,
4571 &cpu_ata5790,
4572 &cpu_ata5795,
4573 &cpu_ata6285,
4574 &cpu_ata6286,
4575 &cpu_ata6289,
4576 &cpu_atmega103,
4577 &cpu_atmega128,
4578 &cpu_atmega1280,
4579 &cpu_atmega1281,
4580 &cpu_atmega1284,
4581 &cpu_atmega1284p,
4582 &cpu_atmega1284rfr2,
4583 &cpu_atmega128a,
4584 &cpu_atmega128rfa1,
4585 &cpu_atmega128rfr2,
4586 &cpu_atmega16,
4587 &cpu_atmega161,
4588 &cpu_atmega162,
4589 &cpu_atmega163,
4590 &cpu_atmega164a,
4591 &cpu_atmega164p,
4592 &cpu_atmega164pa,
4593 &cpu_atmega165,
4594 &cpu_atmega165a,
4595 &cpu_atmega165p,
4596 &cpu_atmega165pa,
4597 &cpu_atmega168,
4598 &cpu_atmega168a,
4599 &cpu_atmega168p,
4600 &cpu_atmega168pa,
4601 &cpu_atmega169,
4602 &cpu_atmega169a,
4603 &cpu_atmega169p,
4604 &cpu_atmega169pa,
4605 &cpu_atmega16a,
4606 &cpu_atmega16hva,
4607 &cpu_atmega16hva2,
4608 &cpu_atmega16hvb,
4609 &cpu_atmega16hvbrevb,
4610 &cpu_atmega16m1,
4611 &cpu_atmega16u2,
4612 &cpu_atmega16u4,
4613 &cpu_atmega2560,
4614 &cpu_atmega2561,
4615 &cpu_atmega2564rfr2,
4616 &cpu_atmega256rfr2,
4617 &cpu_atmega32,
4618 &cpu_atmega323,
4619 &cpu_atmega324a,
4620 &cpu_atmega324p,
4621 &cpu_atmega324pa,
4622 &cpu_atmega325,
4623 &cpu_atmega3250,
4624 &cpu_atmega3250a,
4625 &cpu_atmega3250p,
4626 &cpu_atmega3250pa,
4627 &cpu_atmega325a,
4628 &cpu_atmega325p,
4629 &cpu_atmega325pa,
4630 &cpu_atmega328,
4631 &cpu_atmega328p,
4632 &cpu_atmega329,
4633 &cpu_atmega3290,
4634 &cpu_atmega3290a,
4635 &cpu_atmega3290p,
4636 &cpu_atmega3290pa,
4637 &cpu_atmega329a,
4638 &cpu_atmega329p,
4639 &cpu_atmega329pa,
4640 &cpu_atmega32a,
4641 &cpu_atmega32c1,
4642 &cpu_atmega32hvb,
4643 &cpu_atmega32hvbrevb,
4644 &cpu_atmega32m1,
4645 &cpu_atmega32u2,
4646 &cpu_atmega32u4,
4647 &cpu_atmega32u6,
4648 &cpu_atmega406,
4649 &cpu_atmega48,
4650 &cpu_atmega48a,
4651 &cpu_atmega48p,
4652 &cpu_atmega48pa,
4653 &cpu_atmega64,
4654 &cpu_atmega640,
4655 &cpu_atmega644,
4656 &cpu_atmega644a,
4657 &cpu_atmega644p,
4658 &cpu_atmega644pa,
4659 &cpu_atmega644rfr2,
4660 &cpu_atmega645,
4661 &cpu_atmega6450,
4662 &cpu_atmega6450a,
4663 &cpu_atmega6450p,
4664 &cpu_atmega645a,
4665 &cpu_atmega645p,
4666 &cpu_atmega649,
4667 &cpu_atmega6490,
4668 &cpu_atmega6490a,
4669 &cpu_atmega6490p,
4670 &cpu_atmega649a,
4671 &cpu_atmega649p,
4672 &cpu_atmega64a,
4673 &cpu_atmega64c1,
4674 &cpu_atmega64hve,
4675 &cpu_atmega64m1,
4676 &cpu_atmega64rfr2,
4677 &cpu_atmega8,
4678 &cpu_atmega8515,
4679 &cpu_atmega8535,
4680 &cpu_atmega88,
4681 &cpu_atmega88a,
4682 &cpu_atmega88p,
4683 &cpu_atmega88pa,
4684 &cpu_atmega8a,
4685 &cpu_atmega8hva,
4686 &cpu_atmega8u2,
4687 &cpu_attiny10,
4688 &cpu_attiny102,
4689 &cpu_attiny104,
4690 &cpu_attiny11,
4691 &cpu_attiny12,
4692 &cpu_attiny13,
4693 &cpu_attiny13a,
4694 &cpu_attiny15,
4695 &cpu_attiny1634,
4696 &cpu_attiny167,
4697 &cpu_attiny20,
4698 &cpu_attiny22,
4699 &cpu_attiny2313,
4700 &cpu_attiny2313a,
4701 &cpu_attiny24,
4702 &cpu_attiny24a,
4703 &cpu_attiny25,
4704 &cpu_attiny26,
4705 &cpu_attiny261,
4706 &cpu_attiny261a,
4707 &cpu_attiny28,
4708 &cpu_attiny4,
4709 &cpu_attiny40,
4710 &cpu_attiny4313,
4711 &cpu_attiny43u,
4712 &cpu_attiny44,
4713 &cpu_attiny44a,
4714 &cpu_attiny45,
4715 &cpu_attiny461,
4716 &cpu_attiny461a,
4717 &cpu_attiny48,
4718 &cpu_attiny5,
4719 &cpu_attiny828,
4720 &cpu_attiny84,
4721 &cpu_attiny84a,
4722 &cpu_attiny85,
4723 &cpu_attiny861,
4724 &cpu_attiny861a,
4725 &cpu_attiny87,
4726 &cpu_attiny88,
4727 &cpu_attiny9,
4728 &cpu_atxmega128a1,
4729 &cpu_atxmega128a1u,
4730 &cpu_atxmega128a3,
4731 &cpu_atxmega128a3u,
4732 &cpu_atxmega128a4u,
4733 &cpu_atxmega128b1,
4734 &cpu_atxmega128b3,
4735 &cpu_atxmega128c3,
4736 &cpu_atxmega128d3,
4737 &cpu_atxmega128d4,
4738 &cpu_atxmega16a4,
4739 &cpu_atxmega16a4u,
4740 &cpu_atxmega16c4,
4741 &cpu_atxmega16d4,
4742 &cpu_atxmega16e5,
4743 &cpu_atxmega192a3,
4744 &cpu_atxmega192a3u,
4745 &cpu_atxmega192c3,
4746 &cpu_atxmega192d3,
4747 &cpu_atxmega256a3,
4748 &cpu_atxmega256a3b,
4749 &cpu_atxmega256a3bu,
4750 &cpu_atxmega256a3u,
4751 &cpu_atxmega256c3,
4752 &cpu_atxmega256d3,
4753 &cpu_atxmega32a4,
4754 &cpu_atxmega32a4u,
4755 &cpu_atxmega32c4,
4756 &cpu_atxmega32d4,
4757 &cpu_atxmega32e5,
4758 &cpu_atxmega32x1,
4759 &cpu_atxmega384c3,
4760 &cpu_atxmega384d3,
4761 &cpu_atxmega64a1,
4762 &cpu_atxmega64a1u,
4763 &cpu_atxmega64a3,
4764 &cpu_atxmega64a3u,
4765 &cpu_atxmega64a4u,
4766 &cpu_atxmega64b1,
4767 &cpu_atxmega64b3,
4768 &cpu_atxmega64c3,
4769 &cpu_atxmega64d3,
4770 &cpu_atxmega64d4,
4771 &cpu_atxmega8e5,
4772 &cpu_avr1,
4773 &cpu_avr2,
4774 &cpu_avr25,
4775 &cpu_avr3,
4776 &cpu_avr31,
4777 &cpu_avr35,
4778 &cpu_avr4,
4779 &cpu_avr5,
4780 &cpu_avr51,
4781 &cpu_avr6,
4782 &cpu_avrtiny,
4783 &cpu_avrxmega1,
4784 &cpu_avrxmega2,
4785 &cpu_avrxmega3,
4786 &cpu_avrxmega4,
4787 &cpu_avrxmega5,
4788 &cpu_avrxmega6,
4789 &cpu_avrxmega7,
4790 &cpu_m3000,
4791};2441};
lib/std/target/bpf.zig+68-66
...@@ -1,75 +1,77 @@...@@ -1,75 +1,77 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_alu32 = Feature{4pub const Feature = enum {
5 .name = "alu32",5 alu32,
6 .llvm_name = "alu32",6 dummy,
7 .description = "Enable ALU32 instructions",7 dwarfris,
8 .dependencies = &[_]*const Feature {
9 },
10};8};
119
12pub const feature_dummy = Feature{10pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
13 .name = "dummy",
14 .llvm_name = "dummy",
15 .description = "unused feature",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_dwarfris = Feature{
21 .name = "dwarfris",
22 .llvm_name = "dwarfris",
23 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const features = &[_]*const Feature {
29 &feature_alu32,
30 &feature_dummy,
31 &feature_dwarfris,
32};
33
34pub const cpu_generic = Cpu{
35 .name = "generic",
36 .llvm_name = "generic",
37 .dependencies = &[_]*const Feature {
38 },
39};
40
41pub const cpu_probe = Cpu{
42 .name = "probe",
43 .llvm_name = "probe",
44 .dependencies = &[_]*const Feature {
45 },
46};
47
48pub const cpu_v1 = Cpu{
49 .name = "v1",
50 .llvm_name = "v1",
51 .dependencies = &[_]*const Feature {
52 },
53};
5411
55pub const cpu_v2 = Cpu{12pub const all_features = blk: {
56 .name = "v2",13 const len = @typeInfo(Feature).Enum.fields.len;
57 .llvm_name = "v2",14 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
58 .dependencies = &[_]*const Feature {15 var result: [len]Cpu.Feature = undefined;
59 },16 result[@enumToInt(Feature.alu32)] = .{
17 .index = @enumToInt(Feature.alu32),
18 .name = @tagName(Feature.alu32),
19 .llvm_name = "alu32",
20 .description = "Enable ALU32 instructions",
21 .dependencies = 0,
22 };
23 result[@enumToInt(Feature.dummy)] = .{
24 .index = @enumToInt(Feature.dummy),
25 .name = @tagName(Feature.dummy),
26 .llvm_name = "dummy",
27 .description = "unused feature",
28 .dependencies = 0,
29 };
30 result[@enumToInt(Feature.dwarfris)] = .{
31 .index = @enumToInt(Feature.dwarfris),
32 .name = @tagName(Feature.dwarfris),
33 .llvm_name = "dwarfris",
34 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
35 .dependencies = 0,
36 };
37 break :blk result;
60};38};
6139
62pub const cpu_v3 = Cpu{40pub const cpu = struct {
63 .name = "v3",41 pub const generic = Cpu{
64 .llvm_name = "v3",42 .name = "generic",
65 .dependencies = &[_]*const Feature {43 .llvm_name = "generic",
66 },44 .features = 0,
45 };
46 pub const probe = Cpu{
47 .name = "probe",
48 .llvm_name = "probe",
49 .features = 0,
50 };
51 pub const v1 = Cpu{
52 .name = "v1",
53 .llvm_name = "v1",
54 .features = 0,
55 };
56 pub const v2 = Cpu{
57 .name = "v2",
58 .llvm_name = "v2",
59 .features = 0,
60 };
61 pub const v3 = Cpu{
62 .name = "v3",
63 .llvm_name = "v3",
64 .features = 0,
65 };
67};66};
6867
69pub const cpus = &[_]*const Cpu {68/// All bpf CPUs, sorted alphabetically by name.
70 &cpu_generic,69/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
71 &cpu_probe,70/// compiler has inefficient memory and CPU usage, affecting build times.
72 &cpu_v1,71pub const all_cpus = &[_]*const Cpu{
73 &cpu_v2,72 &cpu.generic,
74 &cpu_v3,73 &cpu.probe,
74 &cpu.v1,
75 &cpu.v2,
76 &cpu.v3,
75};77};
lib/std/target/hexagon.zig+346-191
...@@ -1,200 +1,355 @@...@@ -1,200 +1,355 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_duplex = Feature{4pub const Feature = enum {
5 .name = "duplex",5 duplex,
6 .llvm_name = "duplex",6 hvx,
7 .description = "Enable generation of duplex instruction",7 hvx_length128b,
8 .dependencies = &[_]*const Feature {8 hvx_length64b,
9 },9 hvxv60,
10 hvxv62,
11 hvxv65,
12 hvxv66,
13 long_calls,
14 mem_noshuf,
15 memops,
16 noreturn_stack_elim,
17 nvj,
18 nvs,
19 packets,
20 reserved_r19,
21 small_data,
22 v5,
23 v55,
24 v60,
25 v62,
26 v65,
27 v66,
28 zreg,
10};29};
1130
12pub const feature_longCalls = Feature{31pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
13 .name = "longCalls",
14 .llvm_name = "long-calls",
15 .description = "Use constant-extended calls",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_mem_noshuf = Feature{
21 .name = "mem_noshuf",
22 .llvm_name = "mem_noshuf",
23 .description = "Supports mem_noshuf feature",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_memops = Feature{
29 .name = "memops",
30 .llvm_name = "memops",
31 .description = "Use memop instructions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_nvj = Feature{
37 .name = "nvj",
38 .llvm_name = "nvj",
39 .description = "Support for new-value jumps",
40 .dependencies = &[_]*const Feature {
41 &feature_packets,
42 },
43};
44
45pub const feature_nvs = Feature{
46 .name = "nvs",
47 .llvm_name = "nvs",
48 .description = "Support for new-value stores",
49 .dependencies = &[_]*const Feature {
50 &feature_packets,
51 },
52};
53
54pub const feature_noreturnStackElim = Feature{
55 .name = "noreturnStackElim",
56 .llvm_name = "noreturn-stack-elim",
57 .description = "Eliminate stack allocation in a noreturn function when possible",
58 .dependencies = &[_]*const Feature {
59 },
60};
61
62pub const feature_packets = Feature{
63 .name = "packets",
64 .llvm_name = "packets",
65 .description = "Support for instruction packets",
66 .dependencies = &[_]*const Feature {
67 },
68};
69
70pub const feature_reservedR19 = Feature{
71 .name = "reservedR19",
72 .llvm_name = "reserved-r19",
73 .description = "Reserve register R19",
74 .dependencies = &[_]*const Feature {
75 },
76};
77
78pub const feature_smallData = Feature{
79 .name = "smallData",
80 .llvm_name = "small-data",
81 .description = "Allow GP-relative addressing of global variables",
82 .dependencies = &[_]*const Feature {
83 },
84};
85
86pub const features = &[_]*const Feature {
87 &feature_duplex,
88 &feature_longCalls,
89 &feature_mem_noshuf,
90 &feature_memops,
91 &feature_nvj,
92 &feature_nvs,
93 &feature_noreturnStackElim,
94 &feature_packets,
95 &feature_reservedR19,
96 &feature_smallData,
97};
98
99pub const cpu_generic = Cpu{
100 .name = "generic",
101 .llvm_name = "generic",
102 .dependencies = &[_]*const Feature {
103 &feature_duplex,
104 &feature_memops,
105 &feature_packets,
106 &feature_nvj,
107 &feature_nvs,
108 &feature_smallData,
109 },
110};
111
112pub const cpu_hexagonv5 = Cpu{
113 .name = "hexagonv5",
114 .llvm_name = "hexagonv5",
115 .dependencies = &[_]*const Feature {
116 &feature_duplex,
117 &feature_memops,
118 &feature_packets,
119 &feature_nvj,
120 &feature_nvs,
121 &feature_smallData,
122 },
123};
124
125pub const cpu_hexagonv55 = Cpu{
126 .name = "hexagonv55",
127 .llvm_name = "hexagonv55",
128 .dependencies = &[_]*const Feature {
129 &feature_duplex,
130 &feature_memops,
131 &feature_packets,
132 &feature_nvj,
133 &feature_nvs,
134 &feature_smallData,
135 },
136};
137
138pub const cpu_hexagonv60 = Cpu{
139 .name = "hexagonv60",
140 .llvm_name = "hexagonv60",
141 .dependencies = &[_]*const Feature {
142 &feature_duplex,
143 &feature_memops,
144 &feature_packets,
145 &feature_nvj,
146 &feature_nvs,
147 &feature_smallData,
148 },
149};
150
151pub const cpu_hexagonv62 = Cpu{
152 .name = "hexagonv62",
153 .llvm_name = "hexagonv62",
154 .dependencies = &[_]*const Feature {
155 &feature_duplex,
156 &feature_memops,
157 &feature_packets,
158 &feature_nvj,
159 &feature_nvs,
160 &feature_smallData,
161 },
162};
16332
164pub const cpu_hexagonv65 = Cpu{33pub const all_features = blk: {
165 .name = "hexagonv65",34 const len = @typeInfo(Feature).Enum.fields.len;
166 .llvm_name = "hexagonv65",35 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
167 .dependencies = &[_]*const Feature {36 var result: [len]Cpu.Feature = undefined;
168 &feature_duplex,37 result[@enumToInt(Feature.duplex)] = .{
169 &feature_mem_noshuf,38 .index = @enumToInt(Feature.duplex),
170 &feature_memops,39 .name = @tagName(Feature.duplex),
171 &feature_packets,40 .llvm_name = "duplex",
172 &feature_nvj,41 .description = "Enable generation of duplex instruction",
173 &feature_nvs,42 .dependencies = 0,
174 &feature_smallData,43 };
175 },44 result[@enumToInt(Feature.hvx)] = .{
45 .index = @enumToInt(Feature.hvx),
46 .name = @tagName(Feature.hvx),
47 .llvm_name = "hvx",
48 .description = "Hexagon HVX instructions",
49 .dependencies = 0,
50 };
51 result[@enumToInt(Feature.hvx_length128b)] = .{
52 .index = @enumToInt(Feature.hvx_length128b),
53 .name = @tagName(Feature.hvx_length128b),
54 .llvm_name = "hvx-length128b",
55 .description = "Hexagon HVX 128B instructions",
56 .dependencies = featureSet(&[_]Feature{
57 .hvx,
58 }),
59 };
60 result[@enumToInt(Feature.hvx_length64b)] = .{
61 .index = @enumToInt(Feature.hvx_length64b),
62 .name = @tagName(Feature.hvx_length64b),
63 .llvm_name = "hvx-length64b",
64 .description = "Hexagon HVX 64B instructions",
65 .dependencies = featureSet(&[_]Feature{
66 .hvx,
67 }),
68 };
69 result[@enumToInt(Feature.hvxv60)] = .{
70 .index = @enumToInt(Feature.hvxv60),
71 .name = @tagName(Feature.hvxv60),
72 .llvm_name = "hvxv60",
73 .description = "Hexagon HVX instructions",
74 .dependencies = featureSet(&[_]Feature{
75 .hvx,
76 }),
77 };
78 result[@enumToInt(Feature.hvxv62)] = .{
79 .index = @enumToInt(Feature.hvxv62),
80 .name = @tagName(Feature.hvxv62),
81 .llvm_name = "hvxv62",
82 .description = "Hexagon HVX instructions",
83 .dependencies = featureSet(&[_]Feature{
84 .hvx,
85 .hvxv60,
86 }),
87 };
88 result[@enumToInt(Feature.hvxv65)] = .{
89 .index = @enumToInt(Feature.hvxv65),
90 .name = @tagName(Feature.hvxv65),
91 .llvm_name = "hvxv65",
92 .description = "Hexagon HVX instructions",
93 .dependencies = featureSet(&[_]Feature{
94 .hvx,
95 .hvxv60,
96 .hvxv62,
97 }),
98 };
99 result[@enumToInt(Feature.hvxv66)] = .{
100 .index = @enumToInt(Feature.hvxv66),
101 .name = @tagName(Feature.hvxv66),
102 .llvm_name = "hvxv66",
103 .description = "Hexagon HVX instructions",
104 .dependencies = featureSet(&[_]Feature{
105 .hvx,
106 .hvxv60,
107 .hvxv62,
108 .hvxv65,
109 .zreg,
110 }),
111 };
112 result[@enumToInt(Feature.long_calls)] = .{
113 .index = @enumToInt(Feature.long_calls),
114 .name = @tagName(Feature.long_calls),
115 .llvm_name = "long-calls",
116 .description = "Use constant-extended calls",
117 .dependencies = 0,
118 };
119 result[@enumToInt(Feature.mem_noshuf)] = .{
120 .index = @enumToInt(Feature.mem_noshuf),
121 .name = @tagName(Feature.mem_noshuf),
122 .llvm_name = "mem_noshuf",
123 .description = "Supports mem_noshuf feature",
124 .dependencies = 0,
125 };
126 result[@enumToInt(Feature.memops)] = .{
127 .index = @enumToInt(Feature.memops),
128 .name = @tagName(Feature.memops),
129 .llvm_name = "memops",
130 .description = "Use memop instructions",
131 .dependencies = 0,
132 };
133 result[@enumToInt(Feature.noreturn_stack_elim)] = .{
134 .index = @enumToInt(Feature.noreturn_stack_elim),
135 .name = @tagName(Feature.noreturn_stack_elim),
136 .llvm_name = "noreturn-stack-elim",
137 .description = "Eliminate stack allocation in a noreturn function when possible",
138 .dependencies = 0,
139 };
140 result[@enumToInt(Feature.nvj)] = .{
141 .index = @enumToInt(Feature.nvj),
142 .name = @tagName(Feature.nvj),
143 .llvm_name = "nvj",
144 .description = "Support for new-value jumps",
145 .dependencies = featureSet(&[_]Feature{
146 .packets,
147 }),
148 };
149 result[@enumToInt(Feature.nvs)] = .{
150 .index = @enumToInt(Feature.nvs),
151 .name = @tagName(Feature.nvs),
152 .llvm_name = "nvs",
153 .description = "Support for new-value stores",
154 .dependencies = featureSet(&[_]Feature{
155 .packets,
156 }),
157 };
158 result[@enumToInt(Feature.packets)] = .{
159 .index = @enumToInt(Feature.packets),
160 .name = @tagName(Feature.packets),
161 .llvm_name = "packets",
162 .description = "Support for instruction packets",
163 .dependencies = 0,
164 };
165 result[@enumToInt(Feature.reserved_r19)] = .{
166 .index = @enumToInt(Feature.reserved_r19),
167 .name = @tagName(Feature.reserved_r19),
168 .llvm_name = "reserved-r19",
169 .description = "Reserve register R19",
170 .dependencies = 0,
171 };
172 result[@enumToInt(Feature.small_data)] = .{
173 .index = @enumToInt(Feature.small_data),
174 .name = @tagName(Feature.small_data),
175 .llvm_name = "small-data",
176 .description = "Allow GP-relative addressing of global variables",
177 .dependencies = 0,
178 };
179 result[@enumToInt(Feature.v5)] = .{
180 .index = @enumToInt(Feature.v5),
181 .name = @tagName(Feature.v5),
182 .llvm_name = "v5",
183 .description = "Enable Hexagon V5 architecture",
184 .dependencies = 0,
185 };
186 result[@enumToInt(Feature.v55)] = .{
187 .index = @enumToInt(Feature.v55),
188 .name = @tagName(Feature.v55),
189 .llvm_name = "v55",
190 .description = "Enable Hexagon V55 architecture",
191 .dependencies = 0,
192 };
193 result[@enumToInt(Feature.v60)] = .{
194 .index = @enumToInt(Feature.v60),
195 .name = @tagName(Feature.v60),
196 .llvm_name = "v60",
197 .description = "Enable Hexagon V60 architecture",
198 .dependencies = 0,
199 };
200 result[@enumToInt(Feature.v62)] = .{
201 .index = @enumToInt(Feature.v62),
202 .name = @tagName(Feature.v62),
203 .llvm_name = "v62",
204 .description = "Enable Hexagon V62 architecture",
205 .dependencies = 0,
206 };
207 result[@enumToInt(Feature.v65)] = .{
208 .index = @enumToInt(Feature.v65),
209 .name = @tagName(Feature.v65),
210 .llvm_name = "v65",
211 .description = "Enable Hexagon V65 architecture",
212 .dependencies = 0,
213 };
214 result[@enumToInt(Feature.v66)] = .{
215 .index = @enumToInt(Feature.v66),
216 .name = @tagName(Feature.v66),
217 .llvm_name = "v66",
218 .description = "Enable Hexagon V66 architecture",
219 .dependencies = 0,
220 };
221 result[@enumToInt(Feature.zreg)] = .{
222 .index = @enumToInt(Feature.zreg),
223 .name = @tagName(Feature.zreg),
224 .llvm_name = "zreg",
225 .description = "Hexagon ZReg extension instructions",
226 .dependencies = 0,
227 };
228 break :blk result;
176};229};
177230
178pub const cpu_hexagonv66 = Cpu{231pub const cpu = struct {
179 .name = "hexagonv66",232 pub const generic = Cpu{
180 .llvm_name = "hexagonv66",233 .name = "generic",
181 .dependencies = &[_]*const Feature {234 .llvm_name = "generic",
182 &feature_duplex,235 .features = featureSet(&[_]Feature{
183 &feature_mem_noshuf,236 .duplex,
184 &feature_memops,237 .memops,
185 &feature_packets,238 .nvj,
186 &feature_nvj,239 .nvs,
187 &feature_nvs,240 .packets,
188 &feature_smallData,241 .small_data,
189 },242 .v5,
243 .v55,
244 .v60,
245 }),
246 };
247 pub const hexagonv5 = Cpu{
248 .name = "hexagonv5",
249 .llvm_name = "hexagonv5",
250 .features = featureSet(&[_]Feature{
251 .duplex,
252 .memops,
253 .nvj,
254 .nvs,
255 .packets,
256 .small_data,
257 .v5,
258 }),
259 };
260 pub const hexagonv55 = Cpu{
261 .name = "hexagonv55",
262 .llvm_name = "hexagonv55",
263 .features = featureSet(&[_]Feature{
264 .duplex,
265 .memops,
266 .nvj,
267 .nvs,
268 .packets,
269 .small_data,
270 .v5,
271 .v55,
272 }),
273 };
274 pub const hexagonv60 = Cpu{
275 .name = "hexagonv60",
276 .llvm_name = "hexagonv60",
277 .features = featureSet(&[_]Feature{
278 .duplex,
279 .memops,
280 .nvj,
281 .nvs,
282 .packets,
283 .small_data,
284 .v5,
285 .v55,
286 .v60,
287 }),
288 };
289 pub const hexagonv62 = Cpu{
290 .name = "hexagonv62",
291 .llvm_name = "hexagonv62",
292 .features = featureSet(&[_]Feature{
293 .duplex,
294 .memops,
295 .nvj,
296 .nvs,
297 .packets,
298 .small_data,
299 .v5,
300 .v55,
301 .v60,
302 .v62,
303 }),
304 };
305 pub const hexagonv65 = Cpu{
306 .name = "hexagonv65",
307 .llvm_name = "hexagonv65",
308 .features = featureSet(&[_]Feature{
309 .duplex,
310 .mem_noshuf,
311 .memops,
312 .nvj,
313 .nvs,
314 .packets,
315 .small_data,
316 .v5,
317 .v55,
318 .v60,
319 .v62,
320 .v65,
321 }),
322 };
323 pub const hexagonv66 = Cpu{
324 .name = "hexagonv66",
325 .llvm_name = "hexagonv66",
326 .features = featureSet(&[_]Feature{
327 .duplex,
328 .mem_noshuf,
329 .memops,
330 .nvj,
331 .nvs,
332 .packets,
333 .small_data,
334 .v5,
335 .v55,
336 .v60,
337 .v62,
338 .v65,
339 .v66,
340 }),
341 };
190};342};
191343
192pub const cpus = &[_]*const Cpu {344/// All hexagon CPUs, sorted alphabetically by name.
193 &cpu_generic,345/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
194 &cpu_hexagonv5,346/// compiler has inefficient memory and CPU usage, affecting build times.
195 &cpu_hexagonv55,347pub const all_cpus = &[_]*const Cpu{
196 &cpu_hexagonv60,348 &cpu.generic,
197 &cpu_hexagonv62,349 &cpu.hexagonv5,
198 &cpu_hexagonv65,350 &cpu.hexagonv55,
199 &cpu_hexagonv66,351 &cpu.hexagonv60,
352 &cpu.hexagonv62,
353 &cpu.hexagonv65,
354 &cpu.hexagonv66,
200};355};
lib/std/target/mips.zig+610-818
...@@ -1,819 +1,611 @@...@@ -1,819 +1,611 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_abs2008 = Feature{4pub const Feature = enum {
5 .name = "abs2008",5 abs2008,
6 .llvm_name = "abs2008",6 cnmips,
7 .description = "Disable IEEE 754-2008 abs.fmt mode",7 crc,
8 .dependencies = &[_]*const Feature {8 dsp,
9 },9 dspr2,
10};10 dspr3,
1111 eva,
12pub const feature_crc = Feature{12 fp64,
13 .name = "crc",13 fpxx,
14 .llvm_name = "crc",14 ginv,
15 .description = "Mips R6 CRC ASE",15 gp64,
16 .dependencies = &[_]*const Feature {16 long_calls,
17 },17 micromips,
18};18 mips1,
1919 mips16,
20pub const feature_cnmips = Feature{20 mips2,
21 .name = "cnmips",21 mips3,
22 .llvm_name = "cnmips",22 mips32,
23 .description = "Octeon cnMIPS Support",23 mips32r2,
24 .dependencies = &[_]*const Feature {24 mips32r3,
25 &feature_mips4_32,25 mips32r5,
26 &feature_mips5_32r2,26 mips32r6,
27 &feature_mips3_32r2,27 mips3_32,
28 &feature_mips3_32,28 mips3_32r2,
29 &feature_mips4_32r2,29 mips4,
30 &feature_gp64,30 mips4_32,
31 &feature_mips1,31 mips4_32r2,
32 &feature_fp64,32 mips5,
33 },33 mips5_32r2,
34};34 mips64,
3535 mips64r2,
36pub const feature_dsp = Feature{36 mips64r3,
37 .name = "dsp",37 mips64r5,
38 .llvm_name = "dsp",38 mips64r6,
39 .description = "Mips DSP ASE",39 msa,
40 .dependencies = &[_]*const Feature {40 mt,
41 },41 nan2008,
42};42 noabicalls,
4343 nomadd4,
44pub const feature_dspr2 = Feature{44 nooddspreg,
45 .name = "dspr2",45 p5600,
46 .llvm_name = "dspr2",46 ptr64,
47 .description = "Mips DSP-R2 ASE",47 single_float,
48 .dependencies = &[_]*const Feature {48 soft_float,
49 &feature_dsp,49 sym32,
50 },50 use_indirect_jump_hazard,
51};51 use_tcc_in_div,
5252 vfpu,
53pub const feature_dspr3 = Feature{53 virt,
54 .name = "dspr3",54};
55 .llvm_name = "dspr3",55
56 .description = "Mips DSP-R3 ASE",56pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
57 .dependencies = &[_]*const Feature {57
58 &feature_dsp,58pub const all_features = blk: {
59 },59 const len = @typeInfo(Feature).Enum.fields.len;
60};60 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
6161 var result: [len]Cpu.Feature = undefined;
62pub const feature_eva = Feature{62 result[@enumToInt(Feature.abs2008)] = .{
63 .name = "eva",63 .index = @enumToInt(Feature.abs2008),
64 .llvm_name = "eva",64 .name = @tagName(Feature.abs2008),
65 .description = "Mips EVA ASE",65 .llvm_name = "abs2008",
66 .dependencies = &[_]*const Feature {66 .description = "Disable IEEE 754-2008 abs.fmt mode",
67 },67 .dependencies = 0,
68};68 };
6969 result[@enumToInt(Feature.cnmips)] = .{
70pub const feature_fp64 = Feature{70 .index = @enumToInt(Feature.cnmips),
71 .name = "fp64",71 .name = @tagName(Feature.cnmips),
72 .llvm_name = "fp64",72 .llvm_name = "cnmips",
73 .description = "Support 64-bit FP registers",73 .description = "Octeon cnMIPS Support",
74 .dependencies = &[_]*const Feature {74 .dependencies = featureSet(&[_]Feature{
75 },75 .mips64r2,
76};76 }),
7777 };
78pub const feature_fpxx = Feature{78 result[@enumToInt(Feature.crc)] = .{
79 .name = "fpxx",79 .index = @enumToInt(Feature.crc),
80 .llvm_name = "fpxx",80 .name = @tagName(Feature.crc),
81 .description = "Support for FPXX",81 .llvm_name = "crc",
82 .dependencies = &[_]*const Feature {82 .description = "Mips R6 CRC ASE",
83 },83 .dependencies = 0,
84};84 };
8585 result[@enumToInt(Feature.dsp)] = .{
86pub const feature_ginv = Feature{86 .index = @enumToInt(Feature.dsp),
87 .name = "ginv",87 .name = @tagName(Feature.dsp),
88 .llvm_name = "ginv",88 .llvm_name = "dsp",
89 .description = "Mips Global Invalidate ASE",89 .description = "Mips DSP ASE",
90 .dependencies = &[_]*const Feature {90 .dependencies = 0,
91 },91 };
92};92 result[@enumToInt(Feature.dspr2)] = .{
9393 .index = @enumToInt(Feature.dspr2),
94pub const feature_gp64 = Feature{94 .name = @tagName(Feature.dspr2),
95 .name = "gp64",95 .llvm_name = "dspr2",
96 .llvm_name = "gp64",96 .description = "Mips DSP-R2 ASE",
97 .description = "General Purpose Registers are 64-bit wide",97 .dependencies = featureSet(&[_]Feature{
98 .dependencies = &[_]*const Feature {98 .dsp,
99 },99 }),
100};100 };
101101 result[@enumToInt(Feature.dspr3)] = .{
102pub const feature_longCalls = Feature{102 .index = @enumToInt(Feature.dspr3),
103 .name = "longCalls",103 .name = @tagName(Feature.dspr3),
104 .llvm_name = "long-calls",104 .llvm_name = "dspr3",
105 .description = "Disable use of the jal instruction",105 .description = "Mips DSP-R3 ASE",
106 .dependencies = &[_]*const Feature {106 .dependencies = featureSet(&[_]Feature{
107 },107 .dsp,
108};108 .dspr2,
109109 }),
110pub const feature_msa = Feature{110 };
111 .name = "msa",111 result[@enumToInt(Feature.eva)] = .{
112 .llvm_name = "msa",112 .index = @enumToInt(Feature.eva),
113 .description = "Mips MSA ASE",113 .name = @tagName(Feature.eva),
114 .dependencies = &[_]*const Feature {114 .llvm_name = "eva",
115 },115 .description = "Mips EVA ASE",
116};116 .dependencies = 0,
117117 };
118pub const feature_mt = Feature{118 result[@enumToInt(Feature.fp64)] = .{
119 .name = "mt",119 .index = @enumToInt(Feature.fp64),
120 .llvm_name = "mt",120 .name = @tagName(Feature.fp64),
121 .description = "Mips MT ASE",121 .llvm_name = "fp64",
122 .dependencies = &[_]*const Feature {122 .description = "Support 64-bit FP registers",
123 },123 .dependencies = 0,
124};124 };
125125 result[@enumToInt(Feature.fpxx)] = .{
126pub const feature_nomadd4 = Feature{126 .index = @enumToInt(Feature.fpxx),
127 .name = "nomadd4",127 .name = @tagName(Feature.fpxx),
128 .llvm_name = "nomadd4",128 .llvm_name = "fpxx",
129 .description = "Disable 4-operand madd.fmt and related instructions",129 .description = "Support for FPXX",
130 .dependencies = &[_]*const Feature {130 .dependencies = 0,
131 },131 };
132};132 result[@enumToInt(Feature.ginv)] = .{
133133 .index = @enumToInt(Feature.ginv),
134pub const feature_micromips = Feature{134 .name = @tagName(Feature.ginv),
135 .name = "micromips",135 .llvm_name = "ginv",
136 .llvm_name = "micromips",136 .description = "Mips Global Invalidate ASE",
137 .description = "microMips mode",137 .dependencies = 0,
138 .dependencies = &[_]*const Feature {138 };
139 },139 result[@enumToInt(Feature.gp64)] = .{
140};140 .index = @enumToInt(Feature.gp64),
141141 .name = @tagName(Feature.gp64),
142pub const feature_mips1 = Feature{142 .llvm_name = "gp64",
143 .name = "mips1",143 .description = "General Purpose Registers are 64-bit wide",
144 .llvm_name = "mips1",144 .dependencies = 0,
145 .description = "Mips I ISA Support [highly experimental]",145 };
146 .dependencies = &[_]*const Feature {146 result[@enumToInt(Feature.long_calls)] = .{
147 },147 .index = @enumToInt(Feature.long_calls),
148};148 .name = @tagName(Feature.long_calls),
149149 .llvm_name = "long-calls",
150pub const feature_mips2 = Feature{150 .description = "Disable use of the jal instruction",
151 .name = "mips2",151 .dependencies = 0,
152 .llvm_name = "mips2",152 };
153 .description = "Mips II ISA Support [highly experimental]",153 result[@enumToInt(Feature.micromips)] = .{
154 .dependencies = &[_]*const Feature {154 .index = @enumToInt(Feature.micromips),
155 &feature_mips1,155 .name = @tagName(Feature.micromips),
156 },156 .llvm_name = "micromips",
157};157 .description = "microMips mode",
158158 .dependencies = 0,
159pub const feature_mips3 = Feature{159 };
160 .name = "mips3",160 result[@enumToInt(Feature.mips1)] = .{
161 .llvm_name = "mips3",161 .index = @enumToInt(Feature.mips1),
162 .description = "MIPS III ISA Support [highly experimental]",162 .name = @tagName(Feature.mips1),
163 .dependencies = &[_]*const Feature {163 .llvm_name = "mips1",
164 &feature_mips3_32r2,164 .description = "Mips I ISA Support [highly experimental]",
165 &feature_mips3_32,165 .dependencies = 0,
166 &feature_gp64,166 };
167 &feature_mips1,167 result[@enumToInt(Feature.mips16)] = .{
168 &feature_fp64,168 .index = @enumToInt(Feature.mips16),
169 },169 .name = @tagName(Feature.mips16),
170};170 .llvm_name = "mips16",
171171 .description = "Mips16 mode",
172pub const feature_mips3_32 = Feature{172 .dependencies = 0,
173 .name = "mips3_32",173 };
174 .llvm_name = "mips3_32",174 result[@enumToInt(Feature.mips2)] = .{
175 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",175 .index = @enumToInt(Feature.mips2),
176 .dependencies = &[_]*const Feature {176 .name = @tagName(Feature.mips2),
177 },177 .llvm_name = "mips2",
178};178 .description = "Mips II ISA Support [highly experimental]",
179179 .dependencies = featureSet(&[_]Feature{
180pub const feature_mips3_32r2 = Feature{180 .mips1,
181 .name = "mips3_32r2",181 }),
182 .llvm_name = "mips3_32r2",182 };
183 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",183 result[@enumToInt(Feature.mips3)] = .{
184 .dependencies = &[_]*const Feature {184 .index = @enumToInt(Feature.mips3),
185 },185 .name = @tagName(Feature.mips3),
186};186 .llvm_name = "mips3",
187187 .description = "MIPS III ISA Support [highly experimental]",
188pub const feature_mips4 = Feature{188 .dependencies = featureSet(&[_]Feature{
189 .name = "mips4",189 .fp64,
190 .llvm_name = "mips4",190 .gp64,
191 .description = "MIPS IV ISA Support",191 .mips2,
192 .dependencies = &[_]*const Feature {192 .mips3_32,
193 &feature_mips4_32,193 .mips3_32r2,
194 &feature_mips3_32r2,194 }),
195 &feature_mips3_32,195 };
196 &feature_mips4_32r2,196 result[@enumToInt(Feature.mips32)] = .{
197 &feature_gp64,197 .index = @enumToInt(Feature.mips32),
198 &feature_mips1,198 .name = @tagName(Feature.mips32),
199 &feature_fp64,199 .llvm_name = "mips32",
200 },200 .description = "Mips32 ISA Support",
201};201 .dependencies = featureSet(&[_]Feature{
202202 .mips2,
203pub const feature_mips4_32 = Feature{203 .mips3_32,
204 .name = "mips4_32",204 .mips4_32,
205 .llvm_name = "mips4_32",205 }),
206 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",206 };
207 .dependencies = &[_]*const Feature {207 result[@enumToInt(Feature.mips32r2)] = .{
208 },208 .index = @enumToInt(Feature.mips32r2),
209};209 .name = @tagName(Feature.mips32r2),
210210 .llvm_name = "mips32r2",
211pub const feature_mips4_32r2 = Feature{211 .description = "Mips32r2 ISA Support",
212 .name = "mips4_32r2",212 .dependencies = featureSet(&[_]Feature{
213 .llvm_name = "mips4_32r2",213 .mips32,
214 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",214 .mips3_32r2,
215 .dependencies = &[_]*const Feature {215 .mips4_32r2,
216 },216 .mips5_32r2,
217};217 }),
218218 };
219pub const feature_mips5 = Feature{219 result[@enumToInt(Feature.mips32r3)] = .{
220 .name = "mips5",220 .index = @enumToInt(Feature.mips32r3),
221 .llvm_name = "mips5",221 .name = @tagName(Feature.mips32r3),
222 .description = "MIPS V ISA Support [highly experimental]",222 .llvm_name = "mips32r3",
223 .dependencies = &[_]*const Feature {223 .description = "Mips32r3 ISA Support",
224 &feature_mips4_32,224 .dependencies = featureSet(&[_]Feature{
225 &feature_mips5_32r2,225 .mips32r2,
226 &feature_mips3_32r2,226 }),
227 &feature_mips3_32,227 };
228 &feature_mips4_32r2,228 result[@enumToInt(Feature.mips32r5)] = .{
229 &feature_gp64,229 .index = @enumToInt(Feature.mips32r5),
230 &feature_mips1,230 .name = @tagName(Feature.mips32r5),
231 &feature_fp64,231 .llvm_name = "mips32r5",
232 },232 .description = "Mips32r5 ISA Support",
233};233 .dependencies = featureSet(&[_]Feature{
234234 .mips32r3,
235pub const feature_mips5_32r2 = Feature{235 }),
236 .name = "mips5_32r2",236 };
237 .llvm_name = "mips5_32r2",237 result[@enumToInt(Feature.mips32r6)] = .{
238 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",238 .index = @enumToInt(Feature.mips32r6),
239 .dependencies = &[_]*const Feature {239 .name = @tagName(Feature.mips32r6),
240 },240 .llvm_name = "mips32r6",
241};241 .description = "Mips32r6 ISA Support [experimental]",
242242 .dependencies = featureSet(&[_]Feature{
243pub const feature_mips16 = Feature{243 .abs2008,
244 .name = "mips16",244 .fp64,
245 .llvm_name = "mips16",245 .mips32r5,
246 .description = "Mips16 mode",246 .nan2008,
247 .dependencies = &[_]*const Feature {247 }),
248 },248 };
249};249 result[@enumToInt(Feature.mips3_32)] = .{
250250 .index = @enumToInt(Feature.mips3_32),
251pub const feature_mips32 = Feature{251 .name = @tagName(Feature.mips3_32),
252 .name = "mips32",252 .llvm_name = "mips3_32",
253 .llvm_name = "mips32",253 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
254 .description = "Mips32 ISA Support",254 .dependencies = 0,
255 .dependencies = &[_]*const Feature {255 };
256 &feature_mips3_32,256 result[@enumToInt(Feature.mips3_32r2)] = .{
257 &feature_mips4_32,257 .index = @enumToInt(Feature.mips3_32r2),
258 &feature_mips1,258 .name = @tagName(Feature.mips3_32r2),
259 },259 .llvm_name = "mips3_32r2",
260};260 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
261261 .dependencies = 0,
262pub const feature_mips32r2 = Feature{262 };
263 .name = "mips32r2",263 result[@enumToInt(Feature.mips4)] = .{
264 .llvm_name = "mips32r2",264 .index = @enumToInt(Feature.mips4),
265 .description = "Mips32r2 ISA Support",265 .name = @tagName(Feature.mips4),
266 .dependencies = &[_]*const Feature {266 .llvm_name = "mips4",
267 &feature_mips4_32,267 .description = "MIPS IV ISA Support",
268 &feature_mips5_32r2,268 .dependencies = featureSet(&[_]Feature{
269 &feature_mips3_32r2,269 .mips3,
270 &feature_mips3_32,270 .mips4_32,
271 &feature_mips4_32r2,271 .mips4_32r2,
272 &feature_mips1,272 }),
273 },273 };
274};274 result[@enumToInt(Feature.mips4_32)] = .{
275275 .index = @enumToInt(Feature.mips4_32),
276pub const feature_mips32r3 = Feature{276 .name = @tagName(Feature.mips4_32),
277 .name = "mips32r3",277 .llvm_name = "mips4_32",
278 .llvm_name = "mips32r3",278 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
279 .description = "Mips32r3 ISA Support",279 .dependencies = 0,
280 .dependencies = &[_]*const Feature {280 };
281 &feature_mips4_32,281 result[@enumToInt(Feature.mips4_32r2)] = .{
282 &feature_mips5_32r2,282 .index = @enumToInt(Feature.mips4_32r2),
283 &feature_mips3_32r2,283 .name = @tagName(Feature.mips4_32r2),
284 &feature_mips3_32,284 .llvm_name = "mips4_32r2",
285 &feature_mips4_32r2,285 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
286 &feature_mips1,286 .dependencies = 0,
287 },287 };
288};288 result[@enumToInt(Feature.mips5)] = .{
289289 .index = @enumToInt(Feature.mips5),
290pub const feature_mips32r5 = Feature{290 .name = @tagName(Feature.mips5),
291 .name = "mips32r5",291 .llvm_name = "mips5",
292 .llvm_name = "mips32r5",292 .description = "MIPS V ISA Support [highly experimental]",
293 .description = "Mips32r5 ISA Support",293 .dependencies = featureSet(&[_]Feature{
294 .dependencies = &[_]*const Feature {294 .mips4,
295 &feature_mips4_32,295 .mips5_32r2,
296 &feature_mips5_32r2,296 }),
297 &feature_mips3_32r2,297 };
298 &feature_mips3_32,298 result[@enumToInt(Feature.mips5_32r2)] = .{
299 &feature_mips4_32r2,299 .index = @enumToInt(Feature.mips5_32r2),
300 &feature_mips1,300 .name = @tagName(Feature.mips5_32r2),
301 },301 .llvm_name = "mips5_32r2",
302};302 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
303303 .dependencies = 0,
304pub const feature_mips32r6 = Feature{304 };
305 .name = "mips32r6",305 result[@enumToInt(Feature.mips64)] = .{
306 .llvm_name = "mips32r6",306 .index = @enumToInt(Feature.mips64),
307 .description = "Mips32r6 ISA Support [experimental]",307 .name = @tagName(Feature.mips64),
308 .dependencies = &[_]*const Feature {308 .llvm_name = "mips64",
309 &feature_mips4_32,309 .description = "Mips64 ISA Support",
310 &feature_mips5_32r2,310 .dependencies = featureSet(&[_]Feature{
311 &feature_mips3_32r2,311 .mips32,
312 &feature_mips3_32,312 .mips5,
313 &feature_mips4_32r2,313 }),
314 &feature_nan2008,314 };
315 &feature_mips1,315 result[@enumToInt(Feature.mips64r2)] = .{
316 &feature_fp64,316 .index = @enumToInt(Feature.mips64r2),
317 &feature_abs2008,317 .name = @tagName(Feature.mips64r2),
318 },318 .llvm_name = "mips64r2",
319};319 .description = "Mips64r2 ISA Support",
320320 .dependencies = featureSet(&[_]Feature{
321pub const feature_mips64 = Feature{321 .mips32r2,
322 .name = "mips64",322 .mips64,
323 .llvm_name = "mips64",323 }),
324 .description = "Mips64 ISA Support",324 };
325 .dependencies = &[_]*const Feature {325 result[@enumToInt(Feature.mips64r3)] = .{
326 &feature_mips4_32,326 .index = @enumToInt(Feature.mips64r3),
327 &feature_mips5_32r2,327 .name = @tagName(Feature.mips64r3),
328 &feature_mips3_32r2,328 .llvm_name = "mips64r3",
329 &feature_mips3_32,329 .description = "Mips64r3 ISA Support",
330 &feature_mips4_32r2,330 .dependencies = featureSet(&[_]Feature{
331 &feature_gp64,331 .mips32r3,
332 &feature_mips1,332 .mips64r2,
333 &feature_fp64,333 }),
334 },334 };
335};335 result[@enumToInt(Feature.mips64r5)] = .{
336336 .index = @enumToInt(Feature.mips64r5),
337pub const feature_mips64r2 = Feature{337 .name = @tagName(Feature.mips64r5),
338 .name = "mips64r2",338 .llvm_name = "mips64r5",
339 .llvm_name = "mips64r2",339 .description = "Mips64r5 ISA Support",
340 .description = "Mips64r2 ISA Support",340 .dependencies = featureSet(&[_]Feature{
341 .dependencies = &[_]*const Feature {341 .mips32r5,
342 &feature_mips4_32,342 .mips64r3,
343 &feature_mips5_32r2,343 }),
344 &feature_mips3_32r2,344 };
345 &feature_mips3_32,345 result[@enumToInt(Feature.mips64r6)] = .{
346 &feature_mips4_32r2,346 .index = @enumToInt(Feature.mips64r6),
347 &feature_gp64,347 .name = @tagName(Feature.mips64r6),
348 &feature_mips1,348 .llvm_name = "mips64r6",
349 &feature_fp64,349 .description = "Mips64r6 ISA Support [experimental]",
350 },350 .dependencies = featureSet(&[_]Feature{
351};351 .abs2008,
352352 .mips32r6,
353pub const feature_mips64r3 = Feature{353 .mips64r5,
354 .name = "mips64r3",354 .nan2008,
355 .llvm_name = "mips64r3",355 }),
356 .description = "Mips64r3 ISA Support",356 };
357 .dependencies = &[_]*const Feature {357 result[@enumToInt(Feature.msa)] = .{
358 &feature_mips4_32,358 .index = @enumToInt(Feature.msa),
359 &feature_mips5_32r2,359 .name = @tagName(Feature.msa),
360 &feature_mips3_32r2,360 .llvm_name = "msa",
361 &feature_mips3_32,361 .description = "Mips MSA ASE",
362 &feature_mips4_32r2,362 .dependencies = 0,
363 &feature_gp64,363 };
364 &feature_mips1,364 result[@enumToInt(Feature.mt)] = .{
365 &feature_fp64,365 .index = @enumToInt(Feature.mt),
366 },366 .name = @tagName(Feature.mt),
367};367 .llvm_name = "mt",
368368 .description = "Mips MT ASE",
369pub const feature_mips64r5 = Feature{369 .dependencies = 0,
370 .name = "mips64r5",370 };
371 .llvm_name = "mips64r5",371 result[@enumToInt(Feature.nan2008)] = .{
372 .description = "Mips64r5 ISA Support",372 .index = @enumToInt(Feature.nan2008),
373 .dependencies = &[_]*const Feature {373 .name = @tagName(Feature.nan2008),
374 &feature_mips4_32,374 .llvm_name = "nan2008",
375 &feature_mips5_32r2,375 .description = "IEEE 754-2008 NaN encoding",
376 &feature_mips3_32r2,376 .dependencies = 0,
377 &feature_mips3_32,377 };
378 &feature_mips4_32r2,378 result[@enumToInt(Feature.noabicalls)] = .{
379 &feature_gp64,379 .index = @enumToInt(Feature.noabicalls),
380 &feature_mips1,380 .name = @tagName(Feature.noabicalls),
381 &feature_fp64,381 .llvm_name = "noabicalls",
382 },382 .description = "Disable SVR4-style position-independent code",
383};383 .dependencies = 0,
384384 };
385pub const feature_mips64r6 = Feature{385 result[@enumToInt(Feature.nomadd4)] = .{
386 .name = "mips64r6",386 .index = @enumToInt(Feature.nomadd4),
387 .llvm_name = "mips64r6",387 .name = @tagName(Feature.nomadd4),
388 .description = "Mips64r6 ISA Support [experimental]",388 .llvm_name = "nomadd4",
389 .dependencies = &[_]*const Feature {389 .description = "Disable 4-operand madd.fmt and related instructions",
390 &feature_mips4_32,390 .dependencies = 0,
391 &feature_mips5_32r2,391 };
392 &feature_mips3_32r2,392 result[@enumToInt(Feature.nooddspreg)] = .{
393 &feature_mips3_32,393 .index = @enumToInt(Feature.nooddspreg),
394 &feature_mips4_32r2,394 .name = @tagName(Feature.nooddspreg),
395 &feature_nan2008,395 .llvm_name = "nooddspreg",
396 &feature_gp64,396 .description = "Disable odd numbered single-precision registers",
397 &feature_mips1,397 .dependencies = 0,
398 &feature_fp64,398 };
399 &feature_abs2008,399 result[@enumToInt(Feature.p5600)] = .{
400 },400 .index = @enumToInt(Feature.p5600),
401};401 .name = @tagName(Feature.p5600),
402402 .llvm_name = "p5600",
403pub const feature_nan2008 = Feature{403 .description = "The P5600 Processor",
404 .name = "nan2008",404 .dependencies = featureSet(&[_]Feature{
405 .llvm_name = "nan2008",405 .mips32r5,
406 .description = "IEEE 754-2008 NaN encoding",406 }),
407 .dependencies = &[_]*const Feature {407 };
408 },408 result[@enumToInt(Feature.ptr64)] = .{
409};409 .index = @enumToInt(Feature.ptr64),
410410 .name = @tagName(Feature.ptr64),
411pub const feature_noabicalls = Feature{411 .llvm_name = "ptr64",
412 .name = "noabicalls",412 .description = "Pointers are 64-bit wide",
413 .llvm_name = "noabicalls",413 .dependencies = 0,
414 .description = "Disable SVR4-style position-independent code",414 };
415 .dependencies = &[_]*const Feature {415 result[@enumToInt(Feature.single_float)] = .{
416 },416 .index = @enumToInt(Feature.single_float),
417};417 .name = @tagName(Feature.single_float),
418418 .llvm_name = "single-float",
419pub const feature_nooddspreg = Feature{419 .description = "Only supports single precision float",
420 .name = "nooddspreg",420 .dependencies = 0,
421 .llvm_name = "nooddspreg",421 };
422 .description = "Disable odd numbered single-precision registers",422 result[@enumToInt(Feature.soft_float)] = .{
423 .dependencies = &[_]*const Feature {423 .index = @enumToInt(Feature.soft_float),
424 },424 .name = @tagName(Feature.soft_float),
425};425 .llvm_name = "soft-float",
426426 .description = "Does not support floating point instructions",
427pub const feature_ptr64 = Feature{427 .dependencies = 0,
428 .name = "ptr64",428 };
429 .llvm_name = "ptr64",429 result[@enumToInt(Feature.sym32)] = .{
430 .description = "Pointers are 64-bit wide",430 .index = @enumToInt(Feature.sym32),
431 .dependencies = &[_]*const Feature {431 .name = @tagName(Feature.sym32),
432 },432 .llvm_name = "sym32",
433};433 .description = "Symbols are 32 bit on Mips64",
434434 .dependencies = 0,
435pub const feature_singleFloat = Feature{435 };
436 .name = "singleFloat",436 result[@enumToInt(Feature.use_indirect_jump_hazard)] = .{
437 .llvm_name = "single-float",437 .index = @enumToInt(Feature.use_indirect_jump_hazard),
438 .description = "Only supports single precision float",438 .name = @tagName(Feature.use_indirect_jump_hazard),
439 .dependencies = &[_]*const Feature {439 .llvm_name = "use-indirect-jump-hazard",
440 },440 .description = "Use indirect jump guards to prevent certain speculation based attacks",
441};441 .dependencies = 0,
442442 };
443pub const feature_softFloat = Feature{443 result[@enumToInt(Feature.use_tcc_in_div)] = .{
444 .name = "softFloat",444 .index = @enumToInt(Feature.use_tcc_in_div),
445 .llvm_name = "soft-float",445 .name = @tagName(Feature.use_tcc_in_div),
446 .description = "Does not support floating point instructions",446 .llvm_name = "use-tcc-in-div",
447 .dependencies = &[_]*const Feature {447 .description = "Force the assembler to use trapping",
448 },448 .dependencies = 0,
449};449 };
450450 result[@enumToInt(Feature.vfpu)] = .{
451pub const feature_sym32 = Feature{451 .index = @enumToInt(Feature.vfpu),
452 .name = "sym32",452 .name = @tagName(Feature.vfpu),
453 .llvm_name = "sym32",453 .llvm_name = "vfpu",
454 .description = "Symbols are 32 bit on Mips64",454 .description = "Enable vector FPU instructions",
455 .dependencies = &[_]*const Feature {455 .dependencies = 0,
456 },456 };
457};457 result[@enumToInt(Feature.virt)] = .{
458458 .index = @enumToInt(Feature.virt),
459pub const feature_useIndirectJumpHazard = Feature{459 .name = @tagName(Feature.virt),
460 .name = "useIndirectJumpHazard",460 .llvm_name = "virt",
461 .llvm_name = "use-indirect-jump-hazard",461 .description = "Mips Virtualization ASE",
462 .description = "Use indirect jump guards to prevent certain speculation based attacks",462 .dependencies = 0,
463 .dependencies = &[_]*const Feature {463 };
464 },464 break :blk result;
465};465};
466466
467pub const feature_useTccInDiv = Feature{467pub const cpu = struct {
468 .name = "useTccInDiv",468 pub const mips1 = Cpu{
469 .llvm_name = "use-tcc-in-div",469 .name = "mips1",
470 .description = "Force the assembler to use trapping",470 .llvm_name = "mips1",
471 .dependencies = &[_]*const Feature {471 .features = featureSet(&[_]Feature{
472 },472 .mips1,
473};473 }),
474474 };
475pub const feature_vfpu = Feature{475 pub const mips2 = Cpu{
476 .name = "vfpu",476 .name = "mips2",
477 .llvm_name = "vfpu",477 .llvm_name = "mips2",
478 .description = "Enable vector FPU instructions",478 .features = featureSet(&[_]Feature{
479 .dependencies = &[_]*const Feature {479 .mips2,
480 },480 }),
481};481 };
482482 pub const mips3 = Cpu{
483pub const feature_virt = Feature{483 .name = "mips3",
484 .name = "virt",484 .llvm_name = "mips3",
485 .llvm_name = "virt",485 .features = featureSet(&[_]Feature{
486 .description = "Mips Virtualization ASE",486 .mips3,
487 .dependencies = &[_]*const Feature {487 }),
488 },488 };
489};489 pub const mips32 = Cpu{
490490 .name = "mips32",
491pub const feature_p5600 = Feature{491 .llvm_name = "mips32",
492 .name = "p5600",492 .features = featureSet(&[_]Feature{
493 .llvm_name = "p5600",493 .mips32,
494 .description = "The P5600 Processor",494 }),
495 .dependencies = &[_]*const Feature {495 };
496 &feature_mips4_32,496 pub const mips32r2 = Cpu{
497 &feature_mips5_32r2,497 .name = "mips32r2",
498 &feature_mips3_32r2,498 .llvm_name = "mips32r2",
499 &feature_mips3_32,499 .features = featureSet(&[_]Feature{
500 &feature_mips4_32r2,500 .mips32r2,
501 &feature_mips1,501 }),
502 },502 };
503};503 pub const mips32r3 = Cpu{
504504 .name = "mips32r3",
505pub const features = &[_]*const Feature {505 .llvm_name = "mips32r3",
506 &feature_abs2008,506 .features = featureSet(&[_]Feature{
507 &feature_crc,507 .mips32r3,
508 &feature_cnmips,508 }),
509 &feature_dsp,509 };
510 &feature_dspr2,510 pub const mips32r5 = Cpu{
511 &feature_dspr3,511 .name = "mips32r5",
512 &feature_eva,512 .llvm_name = "mips32r5",
513 &feature_fp64,513 .features = featureSet(&[_]Feature{
514 &feature_fpxx,514 .mips32r5,
515 &feature_ginv,515 }),
516 &feature_gp64,516 };
517 &feature_longCalls,517 pub const mips32r6 = Cpu{
518 &feature_msa,518 .name = "mips32r6",
519 &feature_mt,519 .llvm_name = "mips32r6",
520 &feature_nomadd4,520 .features = featureSet(&[_]Feature{
521 &feature_micromips,521 .mips32r6,
522 &feature_mips1,522 }),
523 &feature_mips2,523 };
524 &feature_mips3,524 pub const mips4 = Cpu{
525 &feature_mips3_32,525 .name = "mips4",
526 &feature_mips3_32r2,526 .llvm_name = "mips4",
527 &feature_mips4,527 .features = featureSet(&[_]Feature{
528 &feature_mips4_32,528 .mips4,
529 &feature_mips4_32r2,529 }),
530 &feature_mips5,530 };
531 &feature_mips5_32r2,531 pub const mips5 = Cpu{
532 &feature_mips16,532 .name = "mips5",
533 &feature_mips32,533 .llvm_name = "mips5",
534 &feature_mips32r2,534 .features = featureSet(&[_]Feature{
535 &feature_mips32r3,535 .mips5,
536 &feature_mips32r5,536 }),
537 &feature_mips32r6,537 };
538 &feature_mips64,538 pub const mips64 = Cpu{
539 &feature_mips64r2,539 .name = "mips64",
540 &feature_mips64r3,540 .llvm_name = "mips64",
541 &feature_mips64r5,541 .features = featureSet(&[_]Feature{
542 &feature_mips64r6,542 .mips64,
543 &feature_nan2008,543 }),
544 &feature_noabicalls,544 };
545 &feature_nooddspreg,545 pub const mips64r2 = Cpu{
546 &feature_ptr64,546 .name = "mips64r2",
547 &feature_singleFloat,547 .llvm_name = "mips64r2",
548 &feature_softFloat,548 .features = featureSet(&[_]Feature{
549 &feature_sym32,549 .mips64r2,
550 &feature_useIndirectJumpHazard,550 }),
551 &feature_useTccInDiv,551 };
552 &feature_vfpu,552 pub const mips64r3 = Cpu{
553 &feature_virt,553 .name = "mips64r3",
554 &feature_p5600,554 .llvm_name = "mips64r3",
555};555 .features = featureSet(&[_]Feature{
556556 .mips64r3,
557pub const cpu_mips1 = Cpu{557 }),
558 .name = "mips1",558 };
559 .llvm_name = "mips1",559 pub const mips64r5 = Cpu{
560 .dependencies = &[_]*const Feature {560 .name = "mips64r5",
561 &feature_mips1,561 .llvm_name = "mips64r5",
562 },562 .features = featureSet(&[_]Feature{
563};563 .mips64r5,
564564 }),
565pub const cpu_mips2 = Cpu{565 };
566 .name = "mips2",566 pub const mips64r6 = Cpu{
567 .llvm_name = "mips2",567 .name = "mips64r6",
568 .dependencies = &[_]*const Feature {568 .llvm_name = "mips64r6",
569 &feature_mips1,569 .features = featureSet(&[_]Feature{
570 &feature_mips2,570 .mips64r6,
571 },571 }),
572};572 };
573573 pub const octeon = Cpu{
574pub const cpu_mips3 = Cpu{574 .name = "octeon",
575 .name = "mips3",575 .llvm_name = "octeon",
576 .llvm_name = "mips3",576 .features = featureSet(&[_]Feature{
577 .dependencies = &[_]*const Feature {577 .cnmips,
578 &feature_mips3_32r2,578 .mips64r2,
579 &feature_mips3_32,579 }),
580 &feature_gp64,580 };
581 &feature_mips1,581 pub const p5600 = Cpu{
582 &feature_fp64,582 .name = "p5600",
583 &feature_mips3,583 .llvm_name = "p5600",
584 },584 .features = featureSet(&[_]Feature{
585};585 .p5600,
586586 }),
587pub const cpu_mips32 = Cpu{587 };
588 .name = "mips32",588};
589 .llvm_name = "mips32",589
590 .dependencies = &[_]*const Feature {590/// All mips CPUs, sorted alphabetically by name.
591 &feature_mips3_32,591/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
592 &feature_mips4_32,592/// compiler has inefficient memory and CPU usage, affecting build times.
593 &feature_mips1,593pub const all_cpus = &[_]*const Cpu{
594 &feature_mips32,594 &cpu.mips1,
595 },595 &cpu.mips2,
596};596 &cpu.mips3,
597597 &cpu.mips32,
598pub const cpu_mips32r2 = Cpu{598 &cpu.mips32r2,
599 .name = "mips32r2",599 &cpu.mips32r3,
600 .llvm_name = "mips32r2",600 &cpu.mips32r5,
601 .dependencies = &[_]*const Feature {601 &cpu.mips32r6,
602 &feature_mips4_32,602 &cpu.mips4,
603 &feature_mips5_32r2,603 &cpu.mips5,
604 &feature_mips3_32r2,604 &cpu.mips64,
605 &feature_mips3_32,605 &cpu.mips64r2,
606 &feature_mips4_32r2,606 &cpu.mips64r3,
607 &feature_mips1,607 &cpu.mips64r5,
608 &feature_mips32r2,608 &cpu.mips64r6,
609 },609 &cpu.octeon,
610};610 &cpu.p5600,
611
612pub const cpu_mips32r3 = Cpu{
613 .name = "mips32r3",
614 .llvm_name = "mips32r3",
615 .dependencies = &[_]*const Feature {
616 &feature_mips4_32,
617 &feature_mips5_32r2,
618 &feature_mips3_32r2,
619 &feature_mips3_32,
620 &feature_mips4_32r2,
621 &feature_mips1,
622 &feature_mips32r3,
623 },
624};
625
626pub const cpu_mips32r5 = Cpu{
627 .name = "mips32r5",
628 .llvm_name = "mips32r5",
629 .dependencies = &[_]*const Feature {
630 &feature_mips4_32,
631 &feature_mips5_32r2,
632 &feature_mips3_32r2,
633 &feature_mips3_32,
634 &feature_mips4_32r2,
635 &feature_mips1,
636 &feature_mips32r5,
637 },
638};
639
640pub const cpu_mips32r6 = Cpu{
641 .name = "mips32r6",
642 .llvm_name = "mips32r6",
643 .dependencies = &[_]*const Feature {
644 &feature_mips4_32,
645 &feature_mips5_32r2,
646 &feature_mips3_32r2,
647 &feature_mips3_32,
648 &feature_mips4_32r2,
649 &feature_nan2008,
650 &feature_mips1,
651 &feature_fp64,
652 &feature_abs2008,
653 &feature_mips32r6,
654 },
655};
656
657pub const cpu_mips4 = Cpu{
658 .name = "mips4",
659 .llvm_name = "mips4",
660 .dependencies = &[_]*const Feature {
661 &feature_mips4_32,
662 &feature_mips3_32r2,
663 &feature_mips3_32,
664 &feature_mips4_32r2,
665 &feature_gp64,
666 &feature_mips1,
667 &feature_fp64,
668 &feature_mips4,
669 },
670};
671
672pub const cpu_mips5 = Cpu{
673 .name = "mips5",
674 .llvm_name = "mips5",
675 .dependencies = &[_]*const Feature {
676 &feature_mips4_32,
677 &feature_mips5_32r2,
678 &feature_mips3_32r2,
679 &feature_mips3_32,
680 &feature_mips4_32r2,
681 &feature_gp64,
682 &feature_mips1,
683 &feature_fp64,
684 &feature_mips5,
685 },
686};
687
688pub const cpu_mips64 = Cpu{
689 .name = "mips64",
690 .llvm_name = "mips64",
691 .dependencies = &[_]*const Feature {
692 &feature_mips4_32,
693 &feature_mips5_32r2,
694 &feature_mips3_32r2,
695 &feature_mips3_32,
696 &feature_mips4_32r2,
697 &feature_gp64,
698 &feature_mips1,
699 &feature_fp64,
700 &feature_mips64,
701 },
702};
703
704pub const cpu_mips64r2 = Cpu{
705 .name = "mips64r2",
706 .llvm_name = "mips64r2",
707 .dependencies = &[_]*const Feature {
708 &feature_mips4_32,
709 &feature_mips5_32r2,
710 &feature_mips3_32r2,
711 &feature_mips3_32,
712 &feature_mips4_32r2,
713 &feature_gp64,
714 &feature_mips1,
715 &feature_fp64,
716 &feature_mips64r2,
717 },
718};
719
720pub const cpu_mips64r3 = Cpu{
721 .name = "mips64r3",
722 .llvm_name = "mips64r3",
723 .dependencies = &[_]*const Feature {
724 &feature_mips4_32,
725 &feature_mips5_32r2,
726 &feature_mips3_32r2,
727 &feature_mips3_32,
728 &feature_mips4_32r2,
729 &feature_gp64,
730 &feature_mips1,
731 &feature_fp64,
732 &feature_mips64r3,
733 },
734};
735
736pub const cpu_mips64r5 = Cpu{
737 .name = "mips64r5",
738 .llvm_name = "mips64r5",
739 .dependencies = &[_]*const Feature {
740 &feature_mips4_32,
741 &feature_mips5_32r2,
742 &feature_mips3_32r2,
743 &feature_mips3_32,
744 &feature_mips4_32r2,
745 &feature_gp64,
746 &feature_mips1,
747 &feature_fp64,
748 &feature_mips64r5,
749 },
750};
751
752pub const cpu_mips64r6 = Cpu{
753 .name = "mips64r6",
754 .llvm_name = "mips64r6",
755 .dependencies = &[_]*const Feature {
756 &feature_mips4_32,
757 &feature_mips5_32r2,
758 &feature_mips3_32r2,
759 &feature_mips3_32,
760 &feature_mips4_32r2,
761 &feature_nan2008,
762 &feature_gp64,
763 &feature_mips1,
764 &feature_fp64,
765 &feature_abs2008,
766 &feature_mips64r6,
767 },
768};
769
770pub const cpu_octeon = Cpu{
771 .name = "octeon",
772 .llvm_name = "octeon",
773 .dependencies = &[_]*const Feature {
774 &feature_mips4_32,
775 &feature_mips5_32r2,
776 &feature_mips3_32r2,
777 &feature_mips3_32,
778 &feature_mips4_32r2,
779 &feature_gp64,
780 &feature_mips1,
781 &feature_fp64,
782 &feature_cnmips,
783 &feature_mips64r2,
784 },
785};
786
787pub const cpu_p5600 = Cpu{
788 .name = "p5600",
789 .llvm_name = "p5600",
790 .dependencies = &[_]*const Feature {
791 &feature_mips4_32,
792 &feature_mips5_32r2,
793 &feature_mips3_32r2,
794 &feature_mips3_32,
795 &feature_mips4_32r2,
796 &feature_mips1,
797 &feature_p5600,
798 },
799};
800
801pub const cpus = &[_]*const Cpu {
802 &cpu_mips1,
803 &cpu_mips2,
804 &cpu_mips3,
805 &cpu_mips32,
806 &cpu_mips32r2,
807 &cpu_mips32r3,
808 &cpu_mips32r5,
809 &cpu_mips32r6,
810 &cpu_mips4,
811 &cpu_mips5,
812 &cpu_mips64,
813 &cpu_mips64r2,
814 &cpu_mips64r3,
815 &cpu_mips64r5,
816 &cpu_mips64r6,
817 &cpu_octeon,
818 &cpu_p5600,
819};611};
lib/std/target/msp430.zig+66-60
...@@ -1,69 +1,75 @@...@@ -1,69 +1,75 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_hwmult16 = Feature{4pub const Feature = enum {
5 .name = "hwmult16",5 ext,
6 .llvm_name = "hwmult16",6 hwmult16,
7 .description = "Enable 16-bit hardware multiplier",7 hwmult32,
8 .dependencies = &[_]*const Feature {8 hwmultf5,
9 },
10};9};
1110
12pub const feature_hwmult32 = Feature{11pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
13 .name = "hwmult32",
14 .llvm_name = "hwmult32",
15 .description = "Enable 32-bit hardware multiplier",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_hwmultf5 = Feature{
21 .name = "hwmultf5",
22 .llvm_name = "hwmultf5",
23 .description = "Enable F5 series hardware multiplier",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_ext = Feature{
29 .name = "ext",
30 .llvm_name = "ext",
31 .description = "Enable MSP430-X extensions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const features = &[_]*const Feature {
37 &feature_hwmult16,
38 &feature_hwmult32,
39 &feature_hwmultf5,
40 &feature_ext,
41};
42
43pub const cpu_generic = Cpu{
44 .name = "generic",
45 .llvm_name = "generic",
46 .dependencies = &[_]*const Feature {
47 },
48};
4912
50pub const cpu_msp430 = Cpu{13pub const all_features = blk: {
51 .name = "msp430",14 const len = @typeInfo(Feature).Enum.fields.len;
52 .llvm_name = "msp430",15 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
53 .dependencies = &[_]*const Feature {16 var result: [len]Cpu.Feature = undefined;
54 },17 result[@enumToInt(Feature.ext)] = .{
18 .index = @enumToInt(Feature.ext),
19 .name = @tagName(Feature.ext),
20 .llvm_name = "ext",
21 .description = "Enable MSP430-X extensions",
22 .dependencies = 0,
23 };
24 result[@enumToInt(Feature.hwmult16)] = .{
25 .index = @enumToInt(Feature.hwmult16),
26 .name = @tagName(Feature.hwmult16),
27 .llvm_name = "hwmult16",
28 .description = "Enable 16-bit hardware multiplier",
29 .dependencies = 0,
30 };
31 result[@enumToInt(Feature.hwmult32)] = .{
32 .index = @enumToInt(Feature.hwmult32),
33 .name = @tagName(Feature.hwmult32),
34 .llvm_name = "hwmult32",
35 .description = "Enable 32-bit hardware multiplier",
36 .dependencies = 0,
37 };
38 result[@enumToInt(Feature.hwmultf5)] = .{
39 .index = @enumToInt(Feature.hwmultf5),
40 .name = @tagName(Feature.hwmultf5),
41 .llvm_name = "hwmultf5",
42 .description = "Enable F5 series hardware multiplier",
43 .dependencies = 0,
44 };
45 break :blk result;
55};46};
5647
57pub const cpu_msp430x = Cpu{48pub const cpu = struct {
58 .name = "msp430x",49 pub const generic = Cpu{
59 .llvm_name = "msp430x",50 .name = "generic",
60 .dependencies = &[_]*const Feature {51 .llvm_name = "generic",
61 &feature_ext,52 .features = 0,
62 },53 };
54 pub const msp430 = Cpu{
55 .name = "msp430",
56 .llvm_name = "msp430",
57 .features = 0,
58 };
59 pub const msp430x = Cpu{
60 .name = "msp430x",
61 .llvm_name = "msp430x",
62 .features = featureSet(&[_]Feature{
63 .ext,
64 }),
65 };
63};66};
6467
65pub const cpus = &[_]*const Cpu {68/// All msp430 CPUs, sorted alphabetically by name.
66 &cpu_generic,69/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
67 &cpu_msp430,70/// compiler has inefficient memory and CPU usage, affecting build times.
68 &cpu_msp430x,71pub const all_cpus = &[_]*const Cpu{
72 &cpu.generic,
73 &cpu.msp430,
74 &cpu.msp430x,
69};75};
lib/std/target/nvptx.zig+353-378
...@@ -1,379 +1,354 @@...@@ -1,379 +1,354 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_ptx32 = Feature{4pub const Feature = enum {
5 .name = "ptx32",5 ptx32,
6 .llvm_name = "ptx32",6 ptx40,
7 .description = "Use PTX version 3.2",7 ptx41,
8 .dependencies = &[_]*const Feature {8 ptx42,
9 },9 ptx43,
10};10 ptx50,
1111 ptx60,
12pub const feature_ptx40 = Feature{12 ptx61,
13 .name = "ptx40",13 ptx63,
14 .llvm_name = "ptx40",14 ptx64,
15 .description = "Use PTX version 4.0",15 sm_20,
16 .dependencies = &[_]*const Feature {16 sm_21,
17 },17 sm_30,
18};18 sm_32,
1919 sm_35,
20pub const feature_ptx41 = Feature{20 sm_37,
21 .name = "ptx41",21 sm_50,
22 .llvm_name = "ptx41",22 sm_52,
23 .description = "Use PTX version 4.1",23 sm_53,
24 .dependencies = &[_]*const Feature {24 sm_60,
25 },25 sm_61,
26};26 sm_62,
2727 sm_70,
28pub const feature_ptx42 = Feature{28 sm_72,
29 .name = "ptx42",29 sm_75,
30 .llvm_name = "ptx42",30};
31 .description = "Use PTX version 4.2",31
32 .dependencies = &[_]*const Feature {32pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
33 },33
34};34pub const all_features = blk: {
3535 const len = @typeInfo(Feature).Enum.fields.len;
36pub const feature_ptx43 = Feature{36 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
37 .name = "ptx43",37 var result: [len]Cpu.Feature = undefined;
38 .llvm_name = "ptx43",38 result[@enumToInt(Feature.ptx32)] = .{
39 .description = "Use PTX version 4.3",39 .index = @enumToInt(Feature.ptx32),
40 .dependencies = &[_]*const Feature {40 .name = @tagName(Feature.ptx32),
41 },41 .llvm_name = "ptx32",
42};42 .description = "Use PTX version 3.2",
4343 .dependencies = 0,
44pub const feature_ptx50 = Feature{44 };
45 .name = "ptx50",45 result[@enumToInt(Feature.ptx40)] = .{
46 .llvm_name = "ptx50",46 .index = @enumToInt(Feature.ptx40),
47 .description = "Use PTX version 5.0",47 .name = @tagName(Feature.ptx40),
48 .dependencies = &[_]*const Feature {48 .llvm_name = "ptx40",
49 },49 .description = "Use PTX version 4.0",
50};50 .dependencies = 0,
5151 };
52pub const feature_ptx60 = Feature{52 result[@enumToInt(Feature.ptx41)] = .{
53 .name = "ptx60",53 .index = @enumToInt(Feature.ptx41),
54 .llvm_name = "ptx60",54 .name = @tagName(Feature.ptx41),
55 .description = "Use PTX version 6.0",55 .llvm_name = "ptx41",
56 .dependencies = &[_]*const Feature {56 .description = "Use PTX version 4.1",
57 },57 .dependencies = 0,
58};58 };
5959 result[@enumToInt(Feature.ptx42)] = .{
60pub const feature_ptx61 = Feature{60 .index = @enumToInt(Feature.ptx42),
61 .name = "ptx61",61 .name = @tagName(Feature.ptx42),
62 .llvm_name = "ptx61",62 .llvm_name = "ptx42",
63 .description = "Use PTX version 6.1",63 .description = "Use PTX version 4.2",
64 .dependencies = &[_]*const Feature {64 .dependencies = 0,
65 },65 };
66};66 result[@enumToInt(Feature.ptx43)] = .{
6767 .index = @enumToInt(Feature.ptx43),
68pub const feature_ptx63 = Feature{68 .name = @tagName(Feature.ptx43),
69 .name = "ptx63",69 .llvm_name = "ptx43",
70 .llvm_name = "ptx63",70 .description = "Use PTX version 4.3",
71 .description = "Use PTX version 6.3",71 .dependencies = 0,
72 .dependencies = &[_]*const Feature {72 };
73 },73 result[@enumToInt(Feature.ptx50)] = .{
74};74 .index = @enumToInt(Feature.ptx50),
7575 .name = @tagName(Feature.ptx50),
76pub const feature_ptx64 = Feature{76 .llvm_name = "ptx50",
77 .name = "ptx64",77 .description = "Use PTX version 5.0",
78 .llvm_name = "ptx64",78 .dependencies = 0,
79 .description = "Use PTX version 6.4",79 };
80 .dependencies = &[_]*const Feature {80 result[@enumToInt(Feature.ptx60)] = .{
81 },81 .index = @enumToInt(Feature.ptx60),
82};82 .name = @tagName(Feature.ptx60),
8383 .llvm_name = "ptx60",
84pub const feature_sm_20 = Feature{84 .description = "Use PTX version 6.0",
85 .name = "sm_20",85 .dependencies = 0,
86 .llvm_name = "sm_20",86 };
87 .description = "Target SM 2.0",87 result[@enumToInt(Feature.ptx61)] = .{
88 .dependencies = &[_]*const Feature {88 .index = @enumToInt(Feature.ptx61),
89 },89 .name = @tagName(Feature.ptx61),
90};90 .llvm_name = "ptx61",
9191 .description = "Use PTX version 6.1",
92pub const feature_sm_21 = Feature{92 .dependencies = 0,
93 .name = "sm_21",93 };
94 .llvm_name = "sm_21",94 result[@enumToInt(Feature.ptx63)] = .{
95 .description = "Target SM 2.1",95 .index = @enumToInt(Feature.ptx63),
96 .dependencies = &[_]*const Feature {96 .name = @tagName(Feature.ptx63),
97 },97 .llvm_name = "ptx63",
98};98 .description = "Use PTX version 6.3",
9999 .dependencies = 0,
100pub const feature_sm_30 = Feature{100 };
101 .name = "sm_30",101 result[@enumToInt(Feature.ptx64)] = .{
102 .llvm_name = "sm_30",102 .index = @enumToInt(Feature.ptx64),
103 .description = "Target SM 3.0",103 .name = @tagName(Feature.ptx64),
104 .dependencies = &[_]*const Feature {104 .llvm_name = "ptx64",
105 },105 .description = "Use PTX version 6.4",
106};106 .dependencies = 0,
107107 };
108pub const feature_sm_32 = Feature{108 result[@enumToInt(Feature.sm_20)] = .{
109 .name = "sm_32",109 .index = @enumToInt(Feature.sm_20),
110 .llvm_name = "sm_32",110 .name = @tagName(Feature.sm_20),
111 .description = "Target SM 3.2",111 .llvm_name = "sm_20",
112 .dependencies = &[_]*const Feature {112 .description = "Target SM 2.0",
113 },113 .dependencies = 0,
114};114 };
115115 result[@enumToInt(Feature.sm_21)] = .{
116pub const feature_sm_35 = Feature{116 .index = @enumToInt(Feature.sm_21),
117 .name = "sm_35",117 .name = @tagName(Feature.sm_21),
118 .llvm_name = "sm_35",118 .llvm_name = "sm_21",
119 .description = "Target SM 3.5",119 .description = "Target SM 2.1",
120 .dependencies = &[_]*const Feature {120 .dependencies = 0,
121 },121 };
122};122 result[@enumToInt(Feature.sm_30)] = .{
123123 .index = @enumToInt(Feature.sm_30),
124pub const feature_sm_37 = Feature{124 .name = @tagName(Feature.sm_30),
125 .name = "sm_37",125 .llvm_name = "sm_30",
126 .llvm_name = "sm_37",126 .description = "Target SM 3.0",
127 .description = "Target SM 3.7",127 .dependencies = 0,
128 .dependencies = &[_]*const Feature {128 };
129 },129 result[@enumToInt(Feature.sm_32)] = .{
130};130 .index = @enumToInt(Feature.sm_32),
131131 .name = @tagName(Feature.sm_32),
132pub const feature_sm_50 = Feature{132 .llvm_name = "sm_32",
133 .name = "sm_50",133 .description = "Target SM 3.2",
134 .llvm_name = "sm_50",134 .dependencies = 0,
135 .description = "Target SM 5.0",135 };
136 .dependencies = &[_]*const Feature {136 result[@enumToInt(Feature.sm_35)] = .{
137 },137 .index = @enumToInt(Feature.sm_35),
138};138 .name = @tagName(Feature.sm_35),
139139 .llvm_name = "sm_35",
140pub const feature_sm_52 = Feature{140 .description = "Target SM 3.5",
141 .name = "sm_52",141 .dependencies = 0,
142 .llvm_name = "sm_52",142 };
143 .description = "Target SM 5.2",143 result[@enumToInt(Feature.sm_37)] = .{
144 .dependencies = &[_]*const Feature {144 .index = @enumToInt(Feature.sm_37),
145 },145 .name = @tagName(Feature.sm_37),
146};146 .llvm_name = "sm_37",
147147 .description = "Target SM 3.7",
148pub const feature_sm_53 = Feature{148 .dependencies = 0,
149 .name = "sm_53",149 };
150 .llvm_name = "sm_53",150 result[@enumToInt(Feature.sm_50)] = .{
151 .description = "Target SM 5.3",151 .index = @enumToInt(Feature.sm_50),
152 .dependencies = &[_]*const Feature {152 .name = @tagName(Feature.sm_50),
153 },153 .llvm_name = "sm_50",
154};154 .description = "Target SM 5.0",
155155 .dependencies = 0,
156pub const feature_sm_60 = Feature{156 };
157 .name = "sm_60",157 result[@enumToInt(Feature.sm_52)] = .{
158 .llvm_name = "sm_60",158 .index = @enumToInt(Feature.sm_52),
159 .description = "Target SM 6.0",159 .name = @tagName(Feature.sm_52),
160 .dependencies = &[_]*const Feature {160 .llvm_name = "sm_52",
161 },161 .description = "Target SM 5.2",
162};162 .dependencies = 0,
163163 };
164pub const feature_sm_61 = Feature{164 result[@enumToInt(Feature.sm_53)] = .{
165 .name = "sm_61",165 .index = @enumToInt(Feature.sm_53),
166 .llvm_name = "sm_61",166 .name = @tagName(Feature.sm_53),
167 .description = "Target SM 6.1",167 .llvm_name = "sm_53",
168 .dependencies = &[_]*const Feature {168 .description = "Target SM 5.3",
169 },169 .dependencies = 0,
170};170 };
171171 result[@enumToInt(Feature.sm_60)] = .{
172pub const feature_sm_62 = Feature{172 .index = @enumToInt(Feature.sm_60),
173 .name = "sm_62",173 .name = @tagName(Feature.sm_60),
174 .llvm_name = "sm_62",174 .llvm_name = "sm_60",
175 .description = "Target SM 6.2",175 .description = "Target SM 6.0",
176 .dependencies = &[_]*const Feature {176 .dependencies = 0,
177 },177 };
178};178 result[@enumToInt(Feature.sm_61)] = .{
179179 .index = @enumToInt(Feature.sm_61),
180pub const feature_sm_70 = Feature{180 .name = @tagName(Feature.sm_61),
181 .name = "sm_70",181 .llvm_name = "sm_61",
182 .llvm_name = "sm_70",182 .description = "Target SM 6.1",
183 .description = "Target SM 7.0",183 .dependencies = 0,
184 .dependencies = &[_]*const Feature {184 };
185 },185 result[@enumToInt(Feature.sm_62)] = .{
186};186 .index = @enumToInt(Feature.sm_62),
187187 .name = @tagName(Feature.sm_62),
188pub const feature_sm_72 = Feature{188 .llvm_name = "sm_62",
189 .name = "sm_72",189 .description = "Target SM 6.2",
190 .llvm_name = "sm_72",190 .dependencies = 0,
191 .description = "Target SM 7.2",191 };
192 .dependencies = &[_]*const Feature {192 result[@enumToInt(Feature.sm_70)] = .{
193 },193 .index = @enumToInt(Feature.sm_70),
194};194 .name = @tagName(Feature.sm_70),
195195 .llvm_name = "sm_70",
196pub const feature_sm_75 = Feature{196 .description = "Target SM 7.0",
197 .name = "sm_75",197 .dependencies = 0,
198 .llvm_name = "sm_75",198 };
199 .description = "Target SM 7.5",199 result[@enumToInt(Feature.sm_72)] = .{
200 .dependencies = &[_]*const Feature {200 .index = @enumToInt(Feature.sm_72),
201 },201 .name = @tagName(Feature.sm_72),
202};202 .llvm_name = "sm_72",
203203 .description = "Target SM 7.2",
204pub const features = &[_]*const Feature {204 .dependencies = 0,
205 &feature_ptx32,205 };
206 &feature_ptx40,206 result[@enumToInt(Feature.sm_75)] = .{
207 &feature_ptx41,207 .index = @enumToInt(Feature.sm_75),
208 &feature_ptx42,208 .name = @tagName(Feature.sm_75),
209 &feature_ptx43,209 .llvm_name = "sm_75",
210 &feature_ptx50,210 .description = "Target SM 7.5",
211 &feature_ptx60,211 .dependencies = 0,
212 &feature_ptx61,212 };
213 &feature_ptx63,213 break :blk result;
214 &feature_ptx64,214};
215 &feature_sm_20,215
216 &feature_sm_21,216pub const cpu = struct {
217 &feature_sm_30,217 pub const sm_20 = Cpu{
218 &feature_sm_32,218 .name = "sm_20",
219 &feature_sm_35,219 .llvm_name = "sm_20",
220 &feature_sm_37,220 .features = featureSet(&[_]Feature{
221 &feature_sm_50,221 .sm_20,
222 &feature_sm_52,222 }),
223 &feature_sm_53,223 };
224 &feature_sm_60,224 pub const sm_21 = Cpu{
225 &feature_sm_61,225 .name = "sm_21",
226 &feature_sm_62,226 .llvm_name = "sm_21",
227 &feature_sm_70,227 .features = featureSet(&[_]Feature{
228 &feature_sm_72,228 .sm_21,
229 &feature_sm_75,229 }),
230};230 };
231231 pub const sm_30 = Cpu{
232pub const cpu_sm_20 = Cpu{232 .name = "sm_30",
233 .name = "sm_20",233 .llvm_name = "sm_30",
234 .llvm_name = "sm_20",234 .features = featureSet(&[_]Feature{
235 .dependencies = &[_]*const Feature {235 .sm_30,
236 &feature_sm_20,236 }),
237 },237 };
238};238 pub const sm_32 = Cpu{
239239 .name = "sm_32",
240pub const cpu_sm_21 = Cpu{240 .llvm_name = "sm_32",
241 .name = "sm_21",241 .features = featureSet(&[_]Feature{
242 .llvm_name = "sm_21",242 .ptx40,
243 .dependencies = &[_]*const Feature {243 .sm_32,
244 &feature_sm_21,244 }),
245 },245 };
246};246 pub const sm_35 = Cpu{
247247 .name = "sm_35",
248pub const cpu_sm_30 = Cpu{248 .llvm_name = "sm_35",
249 .name = "sm_30",249 .features = featureSet(&[_]Feature{
250 .llvm_name = "sm_30",250 .sm_35,
251 .dependencies = &[_]*const Feature {251 }),
252 &feature_sm_30,252 };
253 },253 pub const sm_37 = Cpu{
254};254 .name = "sm_37",
255255 .llvm_name = "sm_37",
256pub const cpu_sm_32 = Cpu{256 .features = featureSet(&[_]Feature{
257 .name = "sm_32",257 .ptx41,
258 .llvm_name = "sm_32",258 .sm_37,
259 .dependencies = &[_]*const Feature {259 }),
260 &feature_ptx40,260 };
261 &feature_sm_32,261 pub const sm_50 = Cpu{
262 },262 .name = "sm_50",
263};263 .llvm_name = "sm_50",
264264 .features = featureSet(&[_]Feature{
265pub const cpu_sm_35 = Cpu{265 .ptx40,
266 .name = "sm_35",266 .sm_50,
267 .llvm_name = "sm_35",267 }),
268 .dependencies = &[_]*const Feature {268 };
269 &feature_sm_35,269 pub const sm_52 = Cpu{
270 },270 .name = "sm_52",
271};271 .llvm_name = "sm_52",
272272 .features = featureSet(&[_]Feature{
273pub const cpu_sm_37 = Cpu{273 .ptx41,
274 .name = "sm_37",274 .sm_52,
275 .llvm_name = "sm_37",275 }),
276 .dependencies = &[_]*const Feature {276 };
277 &feature_ptx41,277 pub const sm_53 = Cpu{
278 &feature_sm_37,278 .name = "sm_53",
279 },279 .llvm_name = "sm_53",
280};280 .features = featureSet(&[_]Feature{
281281 .ptx42,
282pub const cpu_sm_50 = Cpu{282 .sm_53,
283 .name = "sm_50",283 }),
284 .llvm_name = "sm_50",284 };
285 .dependencies = &[_]*const Feature {285 pub const sm_60 = Cpu{
286 &feature_ptx40,286 .name = "sm_60",
287 &feature_sm_50,287 .llvm_name = "sm_60",
288 },288 .features = featureSet(&[_]Feature{
289};289 .ptx50,
290290 .sm_60,
291pub const cpu_sm_52 = Cpu{291 }),
292 .name = "sm_52",292 };
293 .llvm_name = "sm_52",293 pub const sm_61 = Cpu{
294 .dependencies = &[_]*const Feature {294 .name = "sm_61",
295 &feature_ptx41,295 .llvm_name = "sm_61",
296 &feature_sm_52,296 .features = featureSet(&[_]Feature{
297 },297 .ptx50,
298};298 .sm_61,
299299 }),
300pub const cpu_sm_53 = Cpu{300 };
301 .name = "sm_53",301 pub const sm_62 = Cpu{
302 .llvm_name = "sm_53",302 .name = "sm_62",
303 .dependencies = &[_]*const Feature {303 .llvm_name = "sm_62",
304 &feature_ptx42,304 .features = featureSet(&[_]Feature{
305 &feature_sm_53,305 .ptx50,
306 },306 .sm_62,
307};307 }),
308308 };
309pub const cpu_sm_60 = Cpu{309 pub const sm_70 = Cpu{
310 .name = "sm_60",310 .name = "sm_70",
311 .llvm_name = "sm_60",311 .llvm_name = "sm_70",
312 .dependencies = &[_]*const Feature {312 .features = featureSet(&[_]Feature{
313 &feature_ptx50,313 .ptx60,
314 &feature_sm_60,314 .sm_70,
315 },315 }),
316};316 };
317317 pub const sm_72 = Cpu{
318pub const cpu_sm_61 = Cpu{318 .name = "sm_72",
319 .name = "sm_61",319 .llvm_name = "sm_72",
320 .llvm_name = "sm_61",320 .features = featureSet(&[_]Feature{
321 .dependencies = &[_]*const Feature {321 .ptx61,
322 &feature_ptx50,322 .sm_72,
323 &feature_sm_61,323 }),
324 },324 };
325};325 pub const sm_75 = Cpu{
326326 .name = "sm_75",
327pub const cpu_sm_62 = Cpu{327 .llvm_name = "sm_75",
328 .name = "sm_62",328 .features = featureSet(&[_]Feature{
329 .llvm_name = "sm_62",329 .ptx63,
330 .dependencies = &[_]*const Feature {330 .sm_75,
331 &feature_ptx50,331 }),
332 &feature_sm_62,332 };
333 },333};
334};334
335335/// All nvptx CPUs, sorted alphabetically by name.
336pub const cpu_sm_70 = Cpu{336/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
337 .name = "sm_70",337/// compiler has inefficient memory and CPU usage, affecting build times.
338 .llvm_name = "sm_70",338pub const all_cpus = &[_]*const Cpu{
339 .dependencies = &[_]*const Feature {339 &cpu.sm_20,
340 &feature_ptx60,340 &cpu.sm_21,
341 &feature_sm_70,341 &cpu.sm_30,
342 },342 &cpu.sm_32,
343};343 &cpu.sm_35,
344344 &cpu.sm_37,
345pub const cpu_sm_72 = Cpu{345 &cpu.sm_50,
346 .name = "sm_72",346 &cpu.sm_52,
347 .llvm_name = "sm_72",347 &cpu.sm_53,
348 .dependencies = &[_]*const Feature {348 &cpu.sm_60,
349 &feature_ptx61,349 &cpu.sm_61,
350 &feature_sm_72,350 &cpu.sm_62,
351 },351 &cpu.sm_70,
352};352 &cpu.sm_72,
353353 &cpu.sm_75,
354pub const cpu_sm_75 = Cpu{
355 .name = "sm_75",
356 .llvm_name = "sm_75",
357 .dependencies = &[_]*const Feature {
358 &feature_ptx63,
359 &feature_sm_75,
360 },
361};
362
363pub const cpus = &[_]*const Cpu {
364 &cpu_sm_20,
365 &cpu_sm_21,
366 &cpu_sm_30,
367 &cpu_sm_32,
368 &cpu_sm_35,
369 &cpu_sm_37,
370 &cpu_sm_50,
371 &cpu_sm_52,
372 &cpu_sm_53,
373 &cpu_sm_60,
374 &cpu_sm_61,
375 &cpu_sm_62,
376 &cpu_sm_70,
377 &cpu_sm_72,
378 &cpu_sm_75,
379};354};
lib/std/target/powerpc.zig+1034-1114
...@@ -1,1115 +1,1035 @@...@@ -1,1115 +1,1035 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_bit64 = Feature{4pub const Feature = enum {
5 .name = "bit64",5 @"64bit",
6 .llvm_name = "64bit",6 @"64bitregs",
7 .description = "Enable 64-bit instructions",7 altivec,
8 .dependencies = &[_]*const Feature {8 booke,
9 },9 bpermd,
10};10 cmpb,
1111 crbits,
12pub const feature_bitregs64 = Feature{12 crypto,
13 .name = "bitregs64",13 direct_move,
14 .llvm_name = "64bitregs",14 e500,
15 .description = "Enable 64-bit registers usage for ppc32 [beta]",15 extdiv,
16 .dependencies = &[_]*const Feature {16 fcpsgn,
17 },17 float128,
18};18 fpcvt,
1919 fprnd,
20pub const feature_altivec = Feature{20 fpu,
21 .name = "altivec",21 fre,
22 .llvm_name = "altivec",22 fres,
23 .description = "Enable Altivec instructions",23 frsqrte,
24 .dependencies = &[_]*const Feature {24 frsqrtes,
25 &feature_hardFloat,25 fsqrt,
26 },26 hard_float,
27};27 htm,
2828 icbt,
29pub const feature_bpermd = Feature{29 invariant_function_descriptors,
30 .name = "bpermd",30 isa_v30_instructions,
31 .llvm_name = "bpermd",31 isel,
32 .description = "Enable the bpermd instruction",32 ldbrx,
33 .dependencies = &[_]*const Feature {33 lfiwax,
34 },34 longcall,
35};35 mfocrf,
3636 msync,
37pub const feature_booke = Feature{37 partword_atomics,
38 .name = "booke",38 popcntd,
39 .llvm_name = "booke",39 power8_altivec,
40 .description = "Enable Book E instructions",40 power8_vector,
41 .dependencies = &[_]*const Feature {41 power9_altivec,
42 &feature_icbt,42 power9_vector,
43 },43 ppc_postra_sched,
44};44 ppc_prera_sched,
4545 ppc4xx,
46pub const feature_cmpb = Feature{46 ppc6xx,
47 .name = "cmpb",47 qpx,
48 .llvm_name = "cmpb",48 recipprec,
49 .description = "Enable the cmpb instruction",49 secure_plt,
50 .dependencies = &[_]*const Feature {50 slow_popcntd,
51 },51 spe,
52};52 stfiwx,
5353 two_const_nr,
54pub const feature_crbits = Feature{54 vectors_use_two_units,
55 .name = "crbits",55 vsx,
56 .llvm_name = "crbits",56};
57 .description = "Use condition-register bits individually",57
58 .dependencies = &[_]*const Feature {58pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
59 },59
60};60pub const all_features = blk: {
6161 const len = @typeInfo(Feature).Enum.fields.len;
62pub const feature_directMove = Feature{62 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
63 .name = "directMove",63 var result: [len]Cpu.Feature = undefined;
64 .llvm_name = "direct-move",64 result[@enumToInt(Feature.@"64bit")] = .{
65 .description = "Enable Power8 direct move instructions",65 .index = @enumToInt(Feature.@"64bit"),
66 .dependencies = &[_]*const Feature {66 .name = @tagName(Feature.@"64bit"),
67 &feature_hardFloat,67 .llvm_name = "64bit",
68 },68 .description = "Enable 64-bit instructions",
69};69 .dependencies = 0,
7070 };
71pub const feature_e500 = Feature{71 result[@enumToInt(Feature.@"64bitregs")] = .{
72 .name = "e500",72 .index = @enumToInt(Feature.@"64bitregs"),
73 .llvm_name = "e500",73 .name = @tagName(Feature.@"64bitregs"),
74 .description = "Enable E500/E500mc instructions",74 .llvm_name = "64bitregs",
75 .dependencies = &[_]*const Feature {75 .description = "Enable 64-bit registers usage for ppc32 [beta]",
76 },76 .dependencies = 0,
77};77 };
7878 result[@enumToInt(Feature.altivec)] = .{
79pub const feature_extdiv = Feature{79 .index = @enumToInt(Feature.altivec),
80 .name = "extdiv",80 .name = @tagName(Feature.altivec),
81 .llvm_name = "extdiv",81 .llvm_name = "altivec",
82 .description = "Enable extended divide instructions",82 .description = "Enable Altivec instructions",
83 .dependencies = &[_]*const Feature {83 .dependencies = featureSet(&[_]Feature{
84 },84 .fpu,
85};85 }),
8686 };
87pub const feature_fcpsgn = Feature{87 result[@enumToInt(Feature.booke)] = .{
88 .name = "fcpsgn",88 .index = @enumToInt(Feature.booke),
89 .llvm_name = "fcpsgn",89 .name = @tagName(Feature.booke),
90 .description = "Enable the fcpsgn instruction",90 .llvm_name = "booke",
91 .dependencies = &[_]*const Feature {91 .description = "Enable Book E instructions",
92 &feature_hardFloat,92 .dependencies = featureSet(&[_]Feature{
93 },93 .icbt,
94};94 }),
9595 };
96pub const feature_fpcvt = Feature{96 result[@enumToInt(Feature.bpermd)] = .{
97 .name = "fpcvt",97 .index = @enumToInt(Feature.bpermd),
98 .llvm_name = "fpcvt",98 .name = @tagName(Feature.bpermd),
99 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",99 .llvm_name = "bpermd",
100 .dependencies = &[_]*const Feature {100 .description = "Enable the bpermd instruction",
101 &feature_hardFloat,101 .dependencies = 0,
102 },102 };
103};103 result[@enumToInt(Feature.cmpb)] = .{
104104 .index = @enumToInt(Feature.cmpb),
105pub const feature_fprnd = Feature{105 .name = @tagName(Feature.cmpb),
106 .name = "fprnd",106 .llvm_name = "cmpb",
107 .llvm_name = "fprnd",107 .description = "Enable the cmpb instruction",
108 .description = "Enable the fri[mnpz] instructions",108 .dependencies = 0,
109 .dependencies = &[_]*const Feature {109 };
110 &feature_hardFloat,110 result[@enumToInt(Feature.crbits)] = .{
111 },111 .index = @enumToInt(Feature.crbits),
112};112 .name = @tagName(Feature.crbits),
113113 .llvm_name = "crbits",
114pub const feature_fpu = Feature{114 .description = "Use condition-register bits individually",
115 .name = "fpu",115 .dependencies = 0,
116 .llvm_name = "fpu",116 };
117 .description = "Enable classic FPU instructions",117 result[@enumToInt(Feature.crypto)] = .{
118 .dependencies = &[_]*const Feature {118 .index = @enumToInt(Feature.crypto),
119 &feature_hardFloat,119 .name = @tagName(Feature.crypto),
120 },120 .llvm_name = "crypto",
121};121 .description = "Enable POWER8 Crypto instructions",
122122 .dependencies = featureSet(&[_]Feature{
123pub const feature_fre = Feature{123 .power8_altivec,
124 .name = "fre",124 }),
125 .llvm_name = "fre",125 };
126 .description = "Enable the fre instruction",126 result[@enumToInt(Feature.direct_move)] = .{
127 .dependencies = &[_]*const Feature {127 .index = @enumToInt(Feature.direct_move),
128 &feature_hardFloat,128 .name = @tagName(Feature.direct_move),
129 },129 .llvm_name = "direct-move",
130};130 .description = "Enable Power8 direct move instructions",
131131 .dependencies = featureSet(&[_]Feature{
132pub const feature_fres = Feature{132 .vsx,
133 .name = "fres",133 }),
134 .llvm_name = "fres",134 };
135 .description = "Enable the fres instruction",135 result[@enumToInt(Feature.e500)] = .{
136 .dependencies = &[_]*const Feature {136 .index = @enumToInt(Feature.e500),
137 &feature_hardFloat,137 .name = @tagName(Feature.e500),
138 },138 .llvm_name = "e500",
139};139 .description = "Enable E500/E500mc instructions",
140140 .dependencies = 0,
141pub const feature_frsqrte = Feature{141 };
142 .name = "frsqrte",142 result[@enumToInt(Feature.extdiv)] = .{
143 .llvm_name = "frsqrte",143 .index = @enumToInt(Feature.extdiv),
144 .description = "Enable the frsqrte instruction",144 .name = @tagName(Feature.extdiv),
145 .dependencies = &[_]*const Feature {145 .llvm_name = "extdiv",
146 &feature_hardFloat,146 .description = "Enable extended divide instructions",
147 },147 .dependencies = 0,
148};148 };
149149 result[@enumToInt(Feature.fcpsgn)] = .{
150pub const feature_frsqrtes = Feature{150 .index = @enumToInt(Feature.fcpsgn),
151 .name = "frsqrtes",151 .name = @tagName(Feature.fcpsgn),
152 .llvm_name = "frsqrtes",152 .llvm_name = "fcpsgn",
153 .description = "Enable the frsqrtes instruction",153 .description = "Enable the fcpsgn instruction",
154 .dependencies = &[_]*const Feature {154 .dependencies = featureSet(&[_]Feature{
155 &feature_hardFloat,155 .fpu,
156 },156 }),
157};157 };
158158 result[@enumToInt(Feature.float128)] = .{
159pub const feature_fsqrt = Feature{159 .index = @enumToInt(Feature.float128),
160 .name = "fsqrt",160 .name = @tagName(Feature.float128),
161 .llvm_name = "fsqrt",161 .llvm_name = "float128",
162 .description = "Enable the fsqrt instruction",162 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
163 .dependencies = &[_]*const Feature {163 .dependencies = featureSet(&[_]Feature{
164 &feature_hardFloat,164 .vsx,
165 },165 }),
166};166 };
167167 result[@enumToInt(Feature.fpcvt)] = .{
168pub const feature_float128 = Feature{168 .index = @enumToInt(Feature.fpcvt),
169 .name = "float128",169 .name = @tagName(Feature.fpcvt),
170 .llvm_name = "float128",170 .llvm_name = "fpcvt",
171 .description = "Enable the __float128 data type for IEEE-754R Binary128.",171 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
172 .dependencies = &[_]*const Feature {172 .dependencies = featureSet(&[_]Feature{
173 &feature_hardFloat,173 .fpu,
174 },174 }),
175};175 };
176176 result[@enumToInt(Feature.fprnd)] = .{
177pub const feature_htm = Feature{177 .index = @enumToInt(Feature.fprnd),
178 .name = "htm",178 .name = @tagName(Feature.fprnd),
179 .llvm_name = "htm",179 .llvm_name = "fprnd",
180 .description = "Enable Hardware Transactional Memory instructions",180 .description = "Enable the fri[mnpz] instructions",
181 .dependencies = &[_]*const Feature {181 .dependencies = featureSet(&[_]Feature{
182 },182 .fpu,
183};183 }),
184184 };
185pub const feature_hardFloat = Feature{185 result[@enumToInt(Feature.fpu)] = .{
186 .name = "hardFloat",186 .index = @enumToInt(Feature.fpu),
187 .llvm_name = "hard-float",187 .name = @tagName(Feature.fpu),
188 .description = "Enable floating-point instructions",188 .llvm_name = "fpu",
189 .dependencies = &[_]*const Feature {189 .description = "Enable classic FPU instructions",
190 },190 .dependencies = featureSet(&[_]Feature{
191};191 .hard_float,
192192 }),
193pub const feature_icbt = Feature{193 };
194 .name = "icbt",194 result[@enumToInt(Feature.fre)] = .{
195 .llvm_name = "icbt",195 .index = @enumToInt(Feature.fre),
196 .description = "Enable icbt instruction",196 .name = @tagName(Feature.fre),
197 .dependencies = &[_]*const Feature {197 .llvm_name = "fre",
198 },198 .description = "Enable the fre instruction",
199};199 .dependencies = featureSet(&[_]Feature{
200200 .fpu,
201pub const feature_isaV30Instructions = Feature{201 }),
202 .name = "isaV30Instructions",202 };
203 .llvm_name = "isa-v30-instructions",203 result[@enumToInt(Feature.fres)] = .{
204 .description = "Enable instructions added in ISA 3.0.",204 .index = @enumToInt(Feature.fres),
205 .dependencies = &[_]*const Feature {205 .name = @tagName(Feature.fres),
206 },206 .llvm_name = "fres",
207};207 .description = "Enable the fres instruction",
208208 .dependencies = featureSet(&[_]Feature{
209pub const feature_isel = Feature{209 .fpu,
210 .name = "isel",210 }),
211 .llvm_name = "isel",211 };
212 .description = "Enable the isel instruction",212 result[@enumToInt(Feature.frsqrte)] = .{
213 .dependencies = &[_]*const Feature {213 .index = @enumToInt(Feature.frsqrte),
214 },214 .name = @tagName(Feature.frsqrte),
215};215 .llvm_name = "frsqrte",
216216 .description = "Enable the frsqrte instruction",
217pub const feature_invariantFunctionDescriptors = Feature{217 .dependencies = featureSet(&[_]Feature{
218 .name = "invariantFunctionDescriptors",218 .fpu,
219 .llvm_name = "invariant-function-descriptors",219 }),
220 .description = "Assume function descriptors are invariant",220 };
221 .dependencies = &[_]*const Feature {221 result[@enumToInt(Feature.frsqrtes)] = .{
222 },222 .index = @enumToInt(Feature.frsqrtes),
223};223 .name = @tagName(Feature.frsqrtes),
224224 .llvm_name = "frsqrtes",
225pub const feature_ldbrx = Feature{225 .description = "Enable the frsqrtes instruction",
226 .name = "ldbrx",226 .dependencies = featureSet(&[_]Feature{
227 .llvm_name = "ldbrx",227 .fpu,
228 .description = "Enable the ldbrx instruction",228 }),
229 .dependencies = &[_]*const Feature {229 };
230 },230 result[@enumToInt(Feature.fsqrt)] = .{
231};231 .index = @enumToInt(Feature.fsqrt),
232232 .name = @tagName(Feature.fsqrt),
233pub const feature_lfiwax = Feature{233 .llvm_name = "fsqrt",
234 .name = "lfiwax",234 .description = "Enable the fsqrt instruction",
235 .llvm_name = "lfiwax",235 .dependencies = featureSet(&[_]Feature{
236 .description = "Enable the lfiwax instruction",236 .fpu,
237 .dependencies = &[_]*const Feature {237 }),
238 &feature_hardFloat,238 };
239 },239 result[@enumToInt(Feature.hard_float)] = .{
240};240 .index = @enumToInt(Feature.hard_float),
241241 .name = @tagName(Feature.hard_float),
242pub const feature_longcall = Feature{242 .llvm_name = "hard-float",
243 .name = "longcall",243 .description = "Enable floating-point instructions",
244 .llvm_name = "longcall",244 .dependencies = 0,
245 .description = "Always use indirect calls",245 };
246 .dependencies = &[_]*const Feature {246 result[@enumToInt(Feature.htm)] = .{
247 },247 .index = @enumToInt(Feature.htm),
248};248 .name = @tagName(Feature.htm),
249249 .llvm_name = "htm",
250pub const feature_mfocrf = Feature{250 .description = "Enable Hardware Transactional Memory instructions",
251 .name = "mfocrf",251 .dependencies = 0,
252 .llvm_name = "mfocrf",252 };
253 .description = "Enable the MFOCRF instruction",253 result[@enumToInt(Feature.icbt)] = .{
254 .dependencies = &[_]*const Feature {254 .index = @enumToInt(Feature.icbt),
255 },255 .name = @tagName(Feature.icbt),
256};256 .llvm_name = "icbt",
257257 .description = "Enable icbt instruction",
258pub const feature_msync = Feature{258 .dependencies = 0,
259 .name = "msync",259 };
260 .llvm_name = "msync",260 result[@enumToInt(Feature.invariant_function_descriptors)] = .{
261 .description = "Has only the msync instruction instead of sync",261 .index = @enumToInt(Feature.invariant_function_descriptors),
262 .dependencies = &[_]*const Feature {262 .name = @tagName(Feature.invariant_function_descriptors),
263 &feature_icbt,263 .llvm_name = "invariant-function-descriptors",
264 },264 .description = "Assume function descriptors are invariant",
265};265 .dependencies = 0,
266266 };
267pub const feature_power8Altivec = Feature{267 result[@enumToInt(Feature.isa_v30_instructions)] = .{
268 .name = "power8Altivec",268 .index = @enumToInt(Feature.isa_v30_instructions),
269 .llvm_name = "power8-altivec",269 .name = @tagName(Feature.isa_v30_instructions),
270 .description = "Enable POWER8 Altivec instructions",270 .llvm_name = "isa-v30-instructions",
271 .dependencies = &[_]*const Feature {271 .description = "Enable instructions added in ISA 3.0.",
272 &feature_hardFloat,272 .dependencies = 0,
273 },273 };
274};274 result[@enumToInt(Feature.isel)] = .{
275275 .index = @enumToInt(Feature.isel),
276pub const feature_crypto = Feature{276 .name = @tagName(Feature.isel),
277 .name = "crypto",277 .llvm_name = "isel",
278 .llvm_name = "crypto",278 .description = "Enable the isel instruction",
279 .description = "Enable POWER8 Crypto instructions",279 .dependencies = 0,
280 .dependencies = &[_]*const Feature {280 };
281 &feature_hardFloat,281 result[@enumToInt(Feature.ldbrx)] = .{
282 },282 .index = @enumToInt(Feature.ldbrx),
283};283 .name = @tagName(Feature.ldbrx),
284284 .llvm_name = "ldbrx",
285pub const feature_power8Vector = Feature{285 .description = "Enable the ldbrx instruction",
286 .name = "power8Vector",286 .dependencies = 0,
287 .llvm_name = "power8-vector",287 };
288 .description = "Enable POWER8 vector instructions",288 result[@enumToInt(Feature.lfiwax)] = .{
289 .dependencies = &[_]*const Feature {289 .index = @enumToInt(Feature.lfiwax),
290 &feature_hardFloat,290 .name = @tagName(Feature.lfiwax),
291 },291 .llvm_name = "lfiwax",
292};292 .description = "Enable the lfiwax instruction",
293293 .dependencies = featureSet(&[_]Feature{
294pub const feature_power9Altivec = Feature{294 .fpu,
295 .name = "power9Altivec",295 }),
296 .llvm_name = "power9-altivec",296 };
297 .description = "Enable POWER9 Altivec instructions",297 result[@enumToInt(Feature.longcall)] = .{
298 .dependencies = &[_]*const Feature {298 .index = @enumToInt(Feature.longcall),
299 &feature_isaV30Instructions,299 .name = @tagName(Feature.longcall),
300 &feature_hardFloat,300 .llvm_name = "longcall",
301 },301 .description = "Always use indirect calls",
302};302 .dependencies = 0,
303303 };
304pub const feature_power9Vector = Feature{304 result[@enumToInt(Feature.mfocrf)] = .{
305 .name = "power9Vector",305 .index = @enumToInt(Feature.mfocrf),
306 .llvm_name = "power9-vector",306 .name = @tagName(Feature.mfocrf),
307 .description = "Enable POWER9 vector instructions",307 .llvm_name = "mfocrf",
308 .dependencies = &[_]*const Feature {308 .description = "Enable the MFOCRF instruction",
309 &feature_isaV30Instructions,309 .dependencies = 0,
310 &feature_hardFloat,310 };
311 },311 result[@enumToInt(Feature.msync)] = .{
312};312 .index = @enumToInt(Feature.msync),
313313 .name = @tagName(Feature.msync),
314pub const feature_popcntd = Feature{314 .llvm_name = "msync",
315 .name = "popcntd",315 .description = "Has only the msync instruction instead of sync",
316 .llvm_name = "popcntd",316 .dependencies = featureSet(&[_]Feature{
317 .description = "Enable the popcnt[dw] instructions",317 .booke,
318 .dependencies = &[_]*const Feature {318 }),
319 },319 };
320};320 result[@enumToInt(Feature.partword_atomics)] = .{
321321 .index = @enumToInt(Feature.partword_atomics),
322pub const feature_ppc4xx = Feature{322 .name = @tagName(Feature.partword_atomics),
323 .name = "ppc4xx",323 .llvm_name = "partword-atomics",
324 .llvm_name = "ppc4xx",324 .description = "Enable l[bh]arx and st[bh]cx.",
325 .description = "Enable PPC 4xx instructions",325 .dependencies = 0,
326 .dependencies = &[_]*const Feature {326 };
327 },327 result[@enumToInt(Feature.popcntd)] = .{
328};328 .index = @enumToInt(Feature.popcntd),
329329 .name = @tagName(Feature.popcntd),
330pub const feature_ppc6xx = Feature{330 .llvm_name = "popcntd",
331 .name = "ppc6xx",331 .description = "Enable the popcnt[dw] instructions",
332 .llvm_name = "ppc6xx",332 .dependencies = 0,
333 .description = "Enable PPC 6xx instructions",333 };
334 .dependencies = &[_]*const Feature {334 result[@enumToInt(Feature.power8_altivec)] = .{
335 },335 .index = @enumToInt(Feature.power8_altivec),
336};336 .name = @tagName(Feature.power8_altivec),
337337 .llvm_name = "power8-altivec",
338pub const feature_ppcPostraSched = Feature{338 .description = "Enable POWER8 Altivec instructions",
339 .name = "ppcPostraSched",339 .dependencies = featureSet(&[_]Feature{
340 .llvm_name = "ppc-postra-sched",340 .altivec,
341 .description = "Use PowerPC post-RA scheduling strategy",341 }),
342 .dependencies = &[_]*const Feature {342 };
343 },343 result[@enumToInt(Feature.power8_vector)] = .{
344};344 .index = @enumToInt(Feature.power8_vector),
345345 .name = @tagName(Feature.power8_vector),
346pub const feature_ppcPreraSched = Feature{346 .llvm_name = "power8-vector",
347 .name = "ppcPreraSched",347 .description = "Enable POWER8 vector instructions",
348 .llvm_name = "ppc-prera-sched",348 .dependencies = featureSet(&[_]Feature{
349 .description = "Use PowerPC pre-RA scheduling strategy",349 .power8_altivec,
350 .dependencies = &[_]*const Feature {350 .vsx,
351 },351 }),
352};352 };
353353 result[@enumToInt(Feature.power9_altivec)] = .{
354pub const feature_partwordAtomics = Feature{354 .index = @enumToInt(Feature.power9_altivec),
355 .name = "partwordAtomics",355 .name = @tagName(Feature.power9_altivec),
356 .llvm_name = "partword-atomics",356 .llvm_name = "power9-altivec",
357 .description = "Enable l[bh]arx and st[bh]cx.",357 .description = "Enable POWER9 Altivec instructions",
358 .dependencies = &[_]*const Feature {358 .dependencies = featureSet(&[_]Feature{
359 },359 .isa_v30_instructions,
360};360 .power8_altivec,
361361 }),
362pub const feature_qpx = Feature{362 };
363 .name = "qpx",363 result[@enumToInt(Feature.power9_vector)] = .{
364 .llvm_name = "qpx",364 .index = @enumToInt(Feature.power9_vector),
365 .description = "Enable QPX instructions",365 .name = @tagName(Feature.power9_vector),
366 .dependencies = &[_]*const Feature {366 .llvm_name = "power9-vector",
367 &feature_hardFloat,367 .description = "Enable POWER9 vector instructions",
368 },368 .dependencies = featureSet(&[_]Feature{
369};369 .isa_v30_instructions,
370370 .power8_vector,
371pub const feature_recipprec = Feature{371 .power9_altivec,
372 .name = "recipprec",372 }),
373 .llvm_name = "recipprec",373 };
374 .description = "Assume higher precision reciprocal estimates",374 result[@enumToInt(Feature.ppc_postra_sched)] = .{
375 .dependencies = &[_]*const Feature {375 .index = @enumToInt(Feature.ppc_postra_sched),
376 },376 .name = @tagName(Feature.ppc_postra_sched),
377};377 .llvm_name = "ppc-postra-sched",
378378 .description = "Use PowerPC post-RA scheduling strategy",
379pub const feature_spe = Feature{379 .dependencies = 0,
380 .name = "spe",380 };
381 .llvm_name = "spe",381 result[@enumToInt(Feature.ppc_prera_sched)] = .{
382 .description = "Enable SPE instructions",382 .index = @enumToInt(Feature.ppc_prera_sched),
383 .dependencies = &[_]*const Feature {383 .name = @tagName(Feature.ppc_prera_sched),
384 &feature_hardFloat,384 .llvm_name = "ppc-prera-sched",
385 },385 .description = "Use PowerPC pre-RA scheduling strategy",
386};386 .dependencies = 0,
387387 };
388pub const feature_stfiwx = Feature{388 result[@enumToInt(Feature.ppc4xx)] = .{
389 .name = "stfiwx",389 .index = @enumToInt(Feature.ppc4xx),
390 .llvm_name = "stfiwx",390 .name = @tagName(Feature.ppc4xx),
391 .description = "Enable the stfiwx instruction",391 .llvm_name = "ppc4xx",
392 .dependencies = &[_]*const Feature {392 .description = "Enable PPC 4xx instructions",
393 &feature_hardFloat,393 .dependencies = 0,
394 },394 };
395};395 result[@enumToInt(Feature.ppc6xx)] = .{
396396 .index = @enumToInt(Feature.ppc6xx),
397pub const feature_securePlt = Feature{397 .name = @tagName(Feature.ppc6xx),
398 .name = "securePlt",398 .llvm_name = "ppc6xx",
399 .llvm_name = "secure-plt",399 .description = "Enable PPC 6xx instructions",
400 .description = "Enable secure plt mode",400 .dependencies = 0,
401 .dependencies = &[_]*const Feature {401 };
402 },402 result[@enumToInt(Feature.qpx)] = .{
403};403 .index = @enumToInt(Feature.qpx),
404404 .name = @tagName(Feature.qpx),
405pub const feature_slowPopcntd = Feature{405 .llvm_name = "qpx",
406 .name = "slowPopcntd",406 .description = "Enable QPX instructions",
407 .llvm_name = "slow-popcntd",407 .dependencies = featureSet(&[_]Feature{
408 .description = "Has slow popcnt[dw] instructions",408 .fpu,
409 .dependencies = &[_]*const Feature {409 }),
410 },410 };
411};411 result[@enumToInt(Feature.recipprec)] = .{
412412 .index = @enumToInt(Feature.recipprec),
413pub const feature_twoConstNr = Feature{413 .name = @tagName(Feature.recipprec),
414 .name = "twoConstNr",414 .llvm_name = "recipprec",
415 .llvm_name = "two-const-nr",415 .description = "Assume higher precision reciprocal estimates",
416 .description = "Requires two constant Newton-Raphson computation",416 .dependencies = 0,
417 .dependencies = &[_]*const Feature {417 };
418 },418 result[@enumToInt(Feature.secure_plt)] = .{
419};419 .index = @enumToInt(Feature.secure_plt),
420420 .name = @tagName(Feature.secure_plt),
421pub const feature_vsx = Feature{421 .llvm_name = "secure-plt",
422 .name = "vsx",422 .description = "Enable secure plt mode",
423 .llvm_name = "vsx",423 .dependencies = 0,
424 .description = "Enable VSX instructions",424 };
425 .dependencies = &[_]*const Feature {425 result[@enumToInt(Feature.slow_popcntd)] = .{
426 &feature_hardFloat,426 .index = @enumToInt(Feature.slow_popcntd),
427 },427 .name = @tagName(Feature.slow_popcntd),
428};428 .llvm_name = "slow-popcntd",
429429 .description = "Has slow popcnt[dw] instructions",
430pub const feature_vectorsUseTwoUnits = Feature{430 .dependencies = 0,
431 .name = "vectorsUseTwoUnits",431 };
432 .llvm_name = "vectors-use-two-units",432 result[@enumToInt(Feature.spe)] = .{
433 .description = "Vectors use two units",433 .index = @enumToInt(Feature.spe),
434 .dependencies = &[_]*const Feature {434 .name = @tagName(Feature.spe),
435 },435 .llvm_name = "spe",
436};436 .description = "Enable SPE instructions",
437437 .dependencies = featureSet(&[_]Feature{
438pub const features = &[_]*const Feature {438 .hard_float,
439 &feature_bit64,439 }),
440 &feature_bitregs64,440 };
441 &feature_altivec,441 result[@enumToInt(Feature.stfiwx)] = .{
442 &feature_bpermd,442 .index = @enumToInt(Feature.stfiwx),
443 &feature_booke,443 .name = @tagName(Feature.stfiwx),
444 &feature_cmpb,444 .llvm_name = "stfiwx",
445 &feature_crbits,445 .description = "Enable the stfiwx instruction",
446 &feature_directMove,446 .dependencies = featureSet(&[_]Feature{
447 &feature_e500,447 .fpu,
448 &feature_extdiv,448 }),
449 &feature_fcpsgn,449 };
450 &feature_fpcvt,450 result[@enumToInt(Feature.two_const_nr)] = .{
451 &feature_fprnd,451 .index = @enumToInt(Feature.two_const_nr),
452 &feature_fpu,452 .name = @tagName(Feature.two_const_nr),
453 &feature_fre,453 .llvm_name = "two-const-nr",
454 &feature_fres,454 .description = "Requires two constant Newton-Raphson computation",
455 &feature_frsqrte,455 .dependencies = 0,
456 &feature_frsqrtes,456 };
457 &feature_fsqrt,457 result[@enumToInt(Feature.vectors_use_two_units)] = .{
458 &feature_float128,458 .index = @enumToInt(Feature.vectors_use_two_units),
459 &feature_htm,459 .name = @tagName(Feature.vectors_use_two_units),
460 &feature_hardFloat,460 .llvm_name = "vectors-use-two-units",
461 &feature_icbt,461 .description = "Vectors use two units",
462 &feature_isaV30Instructions,462 .dependencies = 0,
463 &feature_isel,463 };
464 &feature_invariantFunctionDescriptors,464 result[@enumToInt(Feature.vsx)] = .{
465 &feature_ldbrx,465 .index = @enumToInt(Feature.vsx),
466 &feature_lfiwax,466 .name = @tagName(Feature.vsx),
467 &feature_longcall,467 .llvm_name = "vsx",
468 &feature_mfocrf,468 .description = "Enable VSX instructions",
469 &feature_msync,469 .dependencies = featureSet(&[_]Feature{
470 &feature_power8Altivec,470 .altivec,
471 &feature_crypto,471 }),
472 &feature_power8Vector,472 };
473 &feature_power9Altivec,473 break :blk result;
474 &feature_power9Vector,474};
475 &feature_popcntd,475
476 &feature_ppc4xx,476pub const cpu = struct {
477 &feature_ppc6xx,477 pub const @"440" = Cpu{
478 &feature_ppcPostraSched,478 .name = "@"440"",
479 &feature_ppcPreraSched,479 .llvm_name = "440",
480 &feature_partwordAtomics,480 .features = featureSet(&[_]Feature{
481 &feature_qpx,481 .booke,
482 &feature_recipprec,482 .fres,
483 &feature_spe,483 .frsqrte,
484 &feature_stfiwx,484 .icbt,
485 &feature_securePlt,485 .isel,
486 &feature_slowPopcntd,486 .msync,
487 &feature_twoConstNr,487 }),
488 &feature_vsx,488 };
489 &feature_vectorsUseTwoUnits,489 pub const @"450" = Cpu{
490};490 .name = "@"450"",
491491 .llvm_name = "450",
492pub const cpu_440 = Cpu{492 .features = featureSet(&[_]Feature{
493 .name = "440",493 .booke,
494 .llvm_name = "440",494 .fres,
495 .dependencies = &[_]*const Feature {495 .frsqrte,
496 &feature_icbt,496 .icbt,
497 &feature_booke,497 .isel,
498 &feature_hardFloat,498 .msync,
499 &feature_fres,499 }),
500 &feature_frsqrte,500 };
501 &feature_isel,501 pub const @"601" = Cpu{
502 &feature_msync,502 .name = "@"601"",
503 },503 .llvm_name = "601",
504};504 .features = featureSet(&[_]Feature{
505505 .fpu,
506pub const cpu_450 = Cpu{506 }),
507 .name = "450",507 };
508 .llvm_name = "450",508 pub const @"602" = Cpu{
509 .dependencies = &[_]*const Feature {509 .name = "@"602"",
510 &feature_icbt,510 .llvm_name = "602",
511 &feature_booke,511 .features = featureSet(&[_]Feature{
512 &feature_hardFloat,512 .fpu,
513 &feature_fres,513 }),
514 &feature_frsqrte,514 };
515 &feature_isel,515 pub const @"603" = Cpu{
516 &feature_msync,516 .name = "@"603"",
517 },517 .llvm_name = "603",
518};518 .features = featureSet(&[_]Feature{
519519 .fres,
520pub const cpu_601 = Cpu{520 .frsqrte,
521 .name = "601",521 }),
522 .llvm_name = "601",522 };
523 .dependencies = &[_]*const Feature {523 pub const @"603e" = Cpu{
524 &feature_hardFloat,524 .name = "@"603e"",
525 &feature_fpu,525 .llvm_name = "603e",
526 },526 .features = featureSet(&[_]Feature{
527};527 .fres,
528528 .frsqrte,
529pub const cpu_602 = Cpu{529 }),
530 .name = "602",530 };
531 .llvm_name = "602",531 pub const @"603ev" = Cpu{
532 .dependencies = &[_]*const Feature {532 .name = "@"603ev"",
533 &feature_hardFloat,533 .llvm_name = "603ev",
534 &feature_fpu,534 .features = featureSet(&[_]Feature{
535 },535 .fres,
536};536 .frsqrte,
537537 }),
538pub const cpu_603 = Cpu{538 };
539 .name = "603",539 pub const @"604" = Cpu{
540 .llvm_name = "603",540 .name = "@"604"",
541 .dependencies = &[_]*const Feature {541 .llvm_name = "604",
542 &feature_hardFloat,542 .features = featureSet(&[_]Feature{
543 &feature_fres,543 .fres,
544 &feature_frsqrte,544 .frsqrte,
545 },545 }),
546};546 };
547547 pub const @"604e" = Cpu{
548pub const cpu_e603 = Cpu{548 .name = "@"604e"",
549 .name = "e603",549 .llvm_name = "604e",
550 .llvm_name = "603e",550 .features = featureSet(&[_]Feature{
551 .dependencies = &[_]*const Feature {551 .fres,
552 &feature_hardFloat,552 .frsqrte,
553 &feature_fres,553 }),
554 &feature_frsqrte,554 };
555 },555 pub const @"620" = Cpu{
556};556 .name = "@"620"",
557557 .llvm_name = "620",
558pub const cpu_ev603 = Cpu{558 .features = featureSet(&[_]Feature{
559 .name = "ev603",559 .fres,
560 .llvm_name = "603ev",560 .frsqrte,
561 .dependencies = &[_]*const Feature {561 }),
562 &feature_hardFloat,562 };
563 &feature_fres,563 pub const @"7400" = Cpu{
564 &feature_frsqrte,564 .name = "@"7400"",
565 },565 .llvm_name = "7400",
566};566 .features = featureSet(&[_]Feature{
567567 .altivec,
568pub const cpu_604 = Cpu{568 .fres,
569 .name = "604",569 .frsqrte,
570 .llvm_name = "604",570 }),
571 .dependencies = &[_]*const Feature {571 };
572 &feature_hardFloat,572 pub const @"7450" = Cpu{
573 &feature_fres,573 .name = "@"7450"",
574 &feature_frsqrte,574 .llvm_name = "7450",
575 },575 .features = featureSet(&[_]Feature{
576};576 .altivec,
577577 .fres,
578pub const cpu_e604 = Cpu{578 .frsqrte,
579 .name = "e604",579 }),
580 .llvm_name = "604e",580 };
581 .dependencies = &[_]*const Feature {581 pub const @"750" = Cpu{
582 &feature_hardFloat,582 .name = "@"750"",
583 &feature_fres,583 .llvm_name = "750",
584 &feature_frsqrte,584 .features = featureSet(&[_]Feature{
585 },585 .fres,
586};586 .frsqrte,
587587 }),
588pub const cpu_620 = Cpu{588 };
589 .name = "620",589 pub const @"970" = Cpu{
590 .llvm_name = "620",590 .name = "@"970"",
591 .dependencies = &[_]*const Feature {591 .llvm_name = "970",
592 &feature_hardFloat,592 .features = featureSet(&[_]Feature{
593 &feature_fres,593 .@"64bit",
594 &feature_frsqrte,594 .altivec,
595 },595 .fres,
596};596 .frsqrte,
597597 .fsqrt,
598pub const cpu_7400 = Cpu{598 .mfocrf,
599 .name = "7400",599 .stfiwx,
600 .llvm_name = "7400",600 }),
601 .dependencies = &[_]*const Feature {601 };
602 &feature_hardFloat,602 pub const a2 = Cpu{
603 &feature_altivec,603 .name = "a2",
604 &feature_fres,604 .llvm_name = "a2",
605 &feature_frsqrte,605 .features = featureSet(&[_]Feature{
606 },606 .@"64bit",
607};607 .booke,
608608 .cmpb,
609pub const cpu_7450 = Cpu{609 .fcpsgn,
610 .name = "7450",610 .fpcvt,
611 .llvm_name = "7450",611 .fprnd,
612 .dependencies = &[_]*const Feature {612 .fre,
613 &feature_hardFloat,613 .fres,
614 &feature_altivec,614 .frsqrte,
615 &feature_fres,615 .frsqrtes,
616 &feature_frsqrte,616 .fsqrt,
617 },617 .icbt,
618};618 .isel,
619619 .ldbrx,
620pub const cpu_750 = Cpu{620 .lfiwax,
621 .name = "750",621 .mfocrf,
622 .llvm_name = "750",622 .recipprec,
623 .dependencies = &[_]*const Feature {623 .slow_popcntd,
624 &feature_hardFloat,624 .stfiwx,
625 &feature_fres,625 }),
626 &feature_frsqrte,626 };
627 },627 pub const a2q = Cpu{
628};628 .name = "a2q",
629629 .llvm_name = "a2q",
630pub const cpu_970 = Cpu{630 .features = featureSet(&[_]Feature{
631 .name = "970",631 .@"64bit",
632 .llvm_name = "970",632 .booke,
633 .dependencies = &[_]*const Feature {633 .cmpb,
634 &feature_bit64,634 .fcpsgn,
635 &feature_hardFloat,635 .fpcvt,
636 &feature_altivec,636 .fprnd,
637 &feature_fres,637 .fre,
638 &feature_frsqrte,638 .fres,
639 &feature_fsqrt,639 .frsqrte,
640 &feature_mfocrf,640 .frsqrtes,
641 &feature_stfiwx,641 .fsqrt,
642 },642 .icbt,
643};643 .isel,
644644 .ldbrx,
645pub const cpu_a2 = Cpu{645 .lfiwax,
646 .name = "a2",646 .mfocrf,
647 .llvm_name = "a2",647 .qpx,
648 .dependencies = &[_]*const Feature {648 .recipprec,
649 &feature_bit64,649 .slow_popcntd,
650 &feature_icbt,650 .stfiwx,
651 &feature_booke,651 }),
652 &feature_cmpb,652 };
653 &feature_hardFloat,653 pub const e500 = Cpu{
654 &feature_fcpsgn,654 .name = "e500",
655 &feature_fpcvt,655 .llvm_name = "e500",
656 &feature_fprnd,656 .features = featureSet(&[_]Feature{
657 &feature_fre,657 .booke,
658 &feature_fres,658 .icbt,
659 &feature_frsqrte,659 .isel,
660 &feature_frsqrtes,660 }),
661 &feature_fsqrt,661 };
662 &feature_isel,662 pub const e500mc = Cpu{
663 &feature_ldbrx,663 .name = "e500mc",
664 &feature_lfiwax,664 .llvm_name = "e500mc",
665 &feature_mfocrf,665 .features = featureSet(&[_]Feature{
666 &feature_recipprec,666 .booke,
667 &feature_stfiwx,667 .icbt,
668 &feature_slowPopcntd,668 .isel,
669 },669 .stfiwx,
670};670 }),
671671 };
672pub const cpu_a2q = Cpu{672 pub const e5500 = Cpu{
673 .name = "a2q",673 .name = "e5500",
674 .llvm_name = "a2q",674 .llvm_name = "e5500",
675 .dependencies = &[_]*const Feature {675 .features = featureSet(&[_]Feature{
676 &feature_bit64,676 .@"64bit",
677 &feature_icbt,677 .booke,
678 &feature_booke,678 .icbt,
679 &feature_cmpb,679 .isel,
680 &feature_hardFloat,680 .mfocrf,
681 &feature_fcpsgn,681 .stfiwx,
682 &feature_fpcvt,682 }),
683 &feature_fprnd,683 };
684 &feature_fre,684 pub const g3 = Cpu{
685 &feature_fres,685 .name = "g3",
686 &feature_frsqrte,686 .llvm_name = "g3",
687 &feature_frsqrtes,687 .features = featureSet(&[_]Feature{
688 &feature_fsqrt,688 .fres,
689 &feature_isel,689 .frsqrte,
690 &feature_ldbrx,690 }),
691 &feature_lfiwax,691 };
692 &feature_mfocrf,692 pub const g4 = Cpu{
693 &feature_qpx,693 .name = "g4",
694 &feature_recipprec,694 .llvm_name = "g4",
695 &feature_stfiwx,695 .features = featureSet(&[_]Feature{
696 &feature_slowPopcntd,696 .altivec,
697 },697 .fres,
698};698 .frsqrte,
699699 }),
700pub const cpu_e500 = Cpu{700 };
701 .name = "e500",701 pub const g4+ = Cpu{
702 .llvm_name = "e500",702 .name = "g4+",
703 .dependencies = &[_]*const Feature {703 .llvm_name = "g4+",
704 &feature_icbt,704 .features = featureSet(&[_]Feature{
705 &feature_booke,705 .altivec,
706 &feature_isel,706 .fres,
707 },707 .frsqrte,
708};708 }),
709709 };
710pub const cpu_e500mc = Cpu{710 pub const g5 = Cpu{
711 .name = "e500mc",711 .name = "g5",
712 .llvm_name = "e500mc",712 .llvm_name = "g5",
713 .dependencies = &[_]*const Feature {713 .features = featureSet(&[_]Feature{
714 &feature_icbt,714 .@"64bit",
715 &feature_booke,715 .altivec,
716 &feature_isel,716 .fres,
717 &feature_hardFloat,717 .frsqrte,
718 &feature_stfiwx,718 .fsqrt,
719 },719 .mfocrf,
720};720 .stfiwx,
721721 }),
722pub const cpu_e5500 = Cpu{722 };
723 .name = "e5500",723 pub const generic = Cpu{
724 .llvm_name = "e5500",724 .name = "generic",
725 .dependencies = &[_]*const Feature {725 .llvm_name = "generic",
726 &feature_bit64,726 .features = featureSet(&[_]Feature{
727 &feature_icbt,727 .hard_float,
728 &feature_booke,728 }),
729 &feature_isel,729 };
730 &feature_mfocrf,730 pub const ppc = Cpu{
731 &feature_hardFloat,731 .name = "ppc",
732 &feature_stfiwx,732 .llvm_name = "ppc",
733 },733 .features = featureSet(&[_]Feature{
734};734 .hard_float,
735735 }),
736pub const cpu_g3 = Cpu{736 };
737 .name = "g3",737 pub const ppc32 = Cpu{
738 .llvm_name = "g3",738 .name = "ppc32",
739 .dependencies = &[_]*const Feature {739 .llvm_name = "ppc32",
740 &feature_hardFloat,740 .features = featureSet(&[_]Feature{
741 &feature_fres,741 .hard_float,
742 &feature_frsqrte,742 }),
743 },743 };
744};744 pub const ppc64 = Cpu{
745745 .name = "ppc64",
746pub const cpu_g4 = Cpu{746 .llvm_name = "ppc64",
747 .name = "g4",747 .features = featureSet(&[_]Feature{
748 .llvm_name = "g4",748 .@"64bit",
749 .dependencies = &[_]*const Feature {749 .altivec,
750 &feature_hardFloat,750 .fres,
751 &feature_altivec,751 .frsqrte,
752 &feature_fres,752 .fsqrt,
753 &feature_frsqrte,753 .mfocrf,
754 },754 .stfiwx,
755};755 }),
756756 };
757pub const cpu_g4Plus = Cpu{757 pub const ppc64le = Cpu{
758 .name = "g4Plus",758 .name = "ppc64le",
759 .llvm_name = "g4+",759 .llvm_name = "ppc64le",
760 .dependencies = &[_]*const Feature {760 .features = featureSet(&[_]Feature{
761 &feature_hardFloat,761 .@"64bit",
762 &feature_altivec,762 .altivec,
763 &feature_fres,763 .bpermd,
764 &feature_frsqrte,764 .cmpb,
765 },765 .crypto,
766};766 .direct_move,
767767 .extdiv,
768pub const cpu_g5 = Cpu{768 .fcpsgn,
769 .name = "g5",769 .fpcvt,
770 .llvm_name = "g5",770 .fprnd,
771 .dependencies = &[_]*const Feature {771 .fre,
772 &feature_bit64,772 .fres,
773 &feature_hardFloat,773 .frsqrte,
774 &feature_altivec,774 .frsqrtes,
775 &feature_fres,775 .fsqrt,
776 &feature_frsqrte,776 .htm,
777 &feature_fsqrt,777 .icbt,
778 &feature_mfocrf,778 .isel,
779 &feature_stfiwx,779 .ldbrx,
780 },780 .lfiwax,
781};781 .mfocrf,
782782 .partword_atomics,
783pub const cpu_generic = Cpu{783 .popcntd,
784 .name = "generic",784 .power8_altivec,
785 .llvm_name = "generic",785 .power8_vector,
786 .dependencies = &[_]*const Feature {786 .recipprec,
787 &feature_hardFloat,787 .stfiwx,
788 },788 .two_const_nr,
789};789 .vsx,
790790 }),
791pub const cpu_ppc = Cpu{791 };
792 .name = "ppc",792 pub const pwr3 = Cpu{
793 .llvm_name = "ppc",793 .name = "pwr3",
794 .dependencies = &[_]*const Feature {794 .llvm_name = "pwr3",
795 &feature_hardFloat,795 .features = featureSet(&[_]Feature{
796 },796 .@"64bit",
797};797 .altivec,
798798 .fres,
799pub const cpu_ppc32 = Cpu{799 .frsqrte,
800 .name = "ppc32",800 .mfocrf,
801 .llvm_name = "ppc32",801 .stfiwx,
802 .dependencies = &[_]*const Feature {802 }),
803 &feature_hardFloat,803 };
804 },804 pub const pwr4 = Cpu{
805};805 .name = "pwr4",
806806 .llvm_name = "pwr4",
807pub const cpu_ppc64 = Cpu{807 .features = featureSet(&[_]Feature{
808 .name = "ppc64",808 .@"64bit",
809 .llvm_name = "ppc64",809 .altivec,
810 .dependencies = &[_]*const Feature {810 .fres,
811 &feature_bit64,811 .frsqrte,
812 &feature_hardFloat,812 .fsqrt,
813 &feature_altivec,813 .mfocrf,
814 &feature_fres,814 .stfiwx,
815 &feature_frsqrte,815 }),
816 &feature_fsqrt,816 };
817 &feature_mfocrf,817 pub const pwr5 = Cpu{
818 &feature_stfiwx,818 .name = "pwr5",
819 },819 .llvm_name = "pwr5",
820};820 .features = featureSet(&[_]Feature{
821821 .@"64bit",
822pub const cpu_ppc64le = Cpu{822 .altivec,
823 .name = "ppc64le",823 .fre,
824 .llvm_name = "ppc64le",824 .fres,
825 .dependencies = &[_]*const Feature {825 .frsqrte,
826 &feature_bit64,826 .frsqrtes,
827 &feature_hardFloat,827 .fsqrt,
828 &feature_altivec,828 .mfocrf,
829 &feature_bpermd,829 .stfiwx,
830 &feature_cmpb,830 }),
831 &feature_directMove,831 };
832 &feature_extdiv,832 pub const pwr5x = Cpu{
833 &feature_fcpsgn,833 .name = "pwr5x",
834 &feature_fpcvt,834 .llvm_name = "pwr5x",
835 &feature_fprnd,835 .features = featureSet(&[_]Feature{
836 &feature_fre,836 .@"64bit",
837 &feature_fres,837 .altivec,
838 &feature_frsqrte,838 .fprnd,
839 &feature_frsqrtes,839 .fre,
840 &feature_fsqrt,840 .fres,
841 &feature_htm,841 .frsqrte,
842 &feature_icbt,842 .frsqrtes,
843 &feature_isel,843 .fsqrt,
844 &feature_ldbrx,844 .mfocrf,
845 &feature_lfiwax,845 .stfiwx,
846 &feature_mfocrf,846 }),
847 &feature_power8Altivec,847 };
848 &feature_crypto,848 pub const pwr6 = Cpu{
849 &feature_power8Vector,849 .name = "pwr6",
850 &feature_popcntd,850 .llvm_name = "pwr6",
851 &feature_partwordAtomics,851 .features = featureSet(&[_]Feature{
852 &feature_recipprec,852 .@"64bit",
853 &feature_stfiwx,853 .altivec,
854 &feature_twoConstNr,854 .cmpb,
855 &feature_vsx,855 .fcpsgn,
856 },856 .fprnd,
857};857 .fre,
858858 .fres,
859pub const cpu_pwr3 = Cpu{859 .frsqrte,
860 .name = "pwr3",860 .frsqrtes,
861 .llvm_name = "pwr3",861 .fsqrt,
862 .dependencies = &[_]*const Feature {862 .lfiwax,
863 &feature_bit64,863 .mfocrf,
864 &feature_hardFloat,864 .recipprec,
865 &feature_altivec,865 .stfiwx,
866 &feature_fres,866 }),
867 &feature_frsqrte,867 };
868 &feature_mfocrf,868 pub const pwr6x = Cpu{
869 &feature_stfiwx,869 .name = "pwr6x",
870 },870 .llvm_name = "pwr6x",
871};871 .features = featureSet(&[_]Feature{
872872 .@"64bit",
873pub const cpu_pwr4 = Cpu{873 .altivec,
874 .name = "pwr4",874 .cmpb,
875 .llvm_name = "pwr4",875 .fcpsgn,
876 .dependencies = &[_]*const Feature {876 .fprnd,
877 &feature_bit64,877 .fre,
878 &feature_hardFloat,878 .fres,
879 &feature_altivec,879 .frsqrte,
880 &feature_fres,880 .frsqrtes,
881 &feature_frsqrte,881 .fsqrt,
882 &feature_fsqrt,882 .lfiwax,
883 &feature_mfocrf,883 .mfocrf,
884 &feature_stfiwx,884 .recipprec,
885 },885 .stfiwx,
886};886 }),
887887 };
888pub const cpu_pwr5 = Cpu{888 pub const pwr7 = Cpu{
889 .name = "pwr5",889 .name = "pwr7",
890 .llvm_name = "pwr5",890 .llvm_name = "pwr7",
891 .dependencies = &[_]*const Feature {891 .features = featureSet(&[_]Feature{
892 &feature_bit64,892 .@"64bit",
893 &feature_hardFloat,893 .altivec,
894 &feature_altivec,894 .bpermd,
895 &feature_fre,895 .cmpb,
896 &feature_fres,896 .extdiv,
897 &feature_frsqrte,897 .fcpsgn,
898 &feature_frsqrtes,898 .fpcvt,
899 &feature_fsqrt,899 .fprnd,
900 &feature_mfocrf,900 .fre,
901 &feature_stfiwx,901 .fres,
902 },902 .frsqrte,
903};903 .frsqrtes,
904904 .fsqrt,
905pub const cpu_pwr5x = Cpu{905 .isel,
906 .name = "pwr5x",906 .ldbrx,
907 .llvm_name = "pwr5x",907 .lfiwax,
908 .dependencies = &[_]*const Feature {908 .mfocrf,
909 &feature_bit64,909 .popcntd,
910 &feature_hardFloat,910 .recipprec,
911 &feature_altivec,911 .stfiwx,
912 &feature_fprnd,912 .two_const_nr,
913 &feature_fre,913 .vsx,
914 &feature_fres,914 }),
915 &feature_frsqrte,915 };
916 &feature_frsqrtes,916 pub const pwr8 = Cpu{
917 &feature_fsqrt,917 .name = "pwr8",
918 &feature_mfocrf,918 .llvm_name = "pwr8",
919 &feature_stfiwx,919 .features = featureSet(&[_]Feature{
920 },920 .@"64bit",
921};921 .altivec,
922922 .bpermd,
923pub const cpu_pwr6 = Cpu{923 .cmpb,
924 .name = "pwr6",924 .crypto,
925 .llvm_name = "pwr6",925 .direct_move,
926 .dependencies = &[_]*const Feature {926 .extdiv,
927 &feature_bit64,927 .fcpsgn,
928 &feature_hardFloat,928 .fpcvt,
929 &feature_altivec,929 .fprnd,
930 &feature_cmpb,930 .fre,
931 &feature_fcpsgn,931 .fres,
932 &feature_fprnd,932 .frsqrte,
933 &feature_fre,933 .frsqrtes,
934 &feature_fres,934 .fsqrt,
935 &feature_frsqrte,935 .htm,
936 &feature_frsqrtes,936 .icbt,
937 &feature_fsqrt,937 .isel,
938 &feature_lfiwax,938 .ldbrx,
939 &feature_mfocrf,939 .lfiwax,
940 &feature_recipprec,940 .mfocrf,
941 &feature_stfiwx,941 .partword_atomics,
942 },942 .popcntd,
943};943 .power8_altivec,
944944 .power8_vector,
945pub const cpu_pwr6x = Cpu{945 .recipprec,
946 .name = "pwr6x",946 .stfiwx,
947 .llvm_name = "pwr6x",947 .two_const_nr,
948 .dependencies = &[_]*const Feature {948 .vsx,
949 &feature_bit64,949 }),
950 &feature_hardFloat,950 };
951 &feature_altivec,951 pub const pwr9 = Cpu{
952 &feature_cmpb,952 .name = "pwr9",
953 &feature_fcpsgn,953 .llvm_name = "pwr9",
954 &feature_fprnd,954 .features = featureSet(&[_]Feature{
955 &feature_fre,955 .@"64bit",
956 &feature_fres,956 .altivec,
957 &feature_frsqrte,957 .bpermd,
958 &feature_frsqrtes,958 .cmpb,
959 &feature_fsqrt,959 .crypto,
960 &feature_lfiwax,960 .direct_move,
961 &feature_mfocrf,961 .extdiv,
962 &feature_recipprec,962 .fcpsgn,
963 &feature_stfiwx,963 .fpcvt,
964 },964 .fprnd,
965};965 .fre,
966966 .fres,
967pub const cpu_pwr7 = Cpu{967 .frsqrte,
968 .name = "pwr7",968 .frsqrtes,
969 .llvm_name = "pwr7",969 .fsqrt,
970 .dependencies = &[_]*const Feature {970 .htm,
971 &feature_bit64,971 .icbt,
972 &feature_hardFloat,972 .isa_v30_instructions,
973 &feature_altivec,973 .isel,
974 &feature_bpermd,974 .ldbrx,
975 &feature_cmpb,975 .lfiwax,
976 &feature_extdiv,976 .mfocrf,
977 &feature_fcpsgn,977 .partword_atomics,
978 &feature_fpcvt,978 .popcntd,
979 &feature_fprnd,979 .power8_altivec,
980 &feature_fre,980 .power8_vector,
981 &feature_fres,981 .power9_altivec,
982 &feature_frsqrte,982 .power9_vector,
983 &feature_frsqrtes,983 .ppc_postra_sched,
984 &feature_fsqrt,984 .ppc_prera_sched,
985 &feature_isel,985 .recipprec,
986 &feature_ldbrx,986 .stfiwx,
987 &feature_lfiwax,987 .two_const_nr,
988 &feature_mfocrf,988 .vectors_use_two_units,
989 &feature_popcntd,989 .vsx,
990 &feature_recipprec,990 }),
991 &feature_stfiwx,991 };
992 &feature_twoConstNr,992};
993 &feature_vsx,993
994 },994/// All powerpc CPUs, sorted alphabetically by name.
995};995/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
996996/// compiler has inefficient memory and CPU usage, affecting build times.
997pub const cpu_pwr8 = Cpu{997pub const all_cpus = &[_]*const Cpu{
998 .name = "pwr8",998 &cpu.@"440",
999 .llvm_name = "pwr8",999 &cpu.@"450",
1000 .dependencies = &[_]*const Feature {1000 &cpu.@"601",
1001 &feature_bit64,1001 &cpu.@"602",
1002 &feature_hardFloat,1002 &cpu.@"603",
1003 &feature_altivec,1003 &cpu.@"603e",
1004 &feature_bpermd,1004 &cpu.@"603ev",
1005 &feature_cmpb,1005 &cpu.@"604",
1006 &feature_directMove,1006 &cpu.@"604e",
1007 &feature_extdiv,1007 &cpu.@"620",
1008 &feature_fcpsgn,1008 &cpu.@"7400",
1009 &feature_fpcvt,1009 &cpu.@"7450",
1010 &feature_fprnd,1010 &cpu.@"750",
1011 &feature_fre,1011 &cpu.@"970",
1012 &feature_fres,1012 &cpu.a2,
1013 &feature_frsqrte,1013 &cpu.a2q,
1014 &feature_frsqrtes,1014 &cpu.e500,
1015 &feature_fsqrt,1015 &cpu.e500mc,
1016 &feature_htm,1016 &cpu.e5500,
1017 &feature_icbt,1017 &cpu.g3,
1018 &feature_isel,1018 &cpu.g4,
1019 &feature_ldbrx,1019 &cpu.g4+,
1020 &feature_lfiwax,1020 &cpu.g5,
1021 &feature_mfocrf,1021 &cpu.generic,
1022 &feature_power8Altivec,1022 &cpu.ppc,
1023 &feature_crypto,1023 &cpu.ppc32,
1024 &feature_power8Vector,1024 &cpu.ppc64,
1025 &feature_popcntd,1025 &cpu.ppc64le,
1026 &feature_partwordAtomics,1026 &cpu.pwr3,
1027 &feature_recipprec,1027 &cpu.pwr4,
1028 &feature_stfiwx,1028 &cpu.pwr5,
1029 &feature_twoConstNr,1029 &cpu.pwr5x,
1030 &feature_vsx,1030 &cpu.pwr6,
1031 },1031 &cpu.pwr6x,
1032};1032 &cpu.pwr7,
10331033 &cpu.pwr8,
1034pub const cpu_pwr9 = Cpu{1034 &cpu.pwr9,
1035 .name = "pwr9",
1036 .llvm_name = "pwr9",
1037 .dependencies = &[_]*const Feature {
1038 &feature_bit64,
1039 &feature_hardFloat,
1040 &feature_altivec,
1041 &feature_bpermd,
1042 &feature_cmpb,
1043 &feature_directMove,
1044 &feature_extdiv,
1045 &feature_fcpsgn,
1046 &feature_fpcvt,
1047 &feature_fprnd,
1048 &feature_fre,
1049 &feature_fres,
1050 &feature_frsqrte,
1051 &feature_frsqrtes,
1052 &feature_fsqrt,
1053 &feature_htm,
1054 &feature_icbt,
1055 &feature_isaV30Instructions,
1056 &feature_isel,
1057 &feature_ldbrx,
1058 &feature_lfiwax,
1059 &feature_mfocrf,
1060 &feature_power8Altivec,
1061 &feature_crypto,
1062 &feature_power8Vector,
1063 &feature_power9Altivec,
1064 &feature_power9Vector,
1065 &feature_popcntd,
1066 &feature_ppcPostraSched,
1067 &feature_ppcPreraSched,
1068 &feature_partwordAtomics,
1069 &feature_recipprec,
1070 &feature_stfiwx,
1071 &feature_twoConstNr,
1072 &feature_vsx,
1073 &feature_vectorsUseTwoUnits,
1074 },
1075};
1076
1077pub const cpus = &[_]*const Cpu {
1078 &cpu_440,
1079 &cpu_450,
1080 &cpu_601,
1081 &cpu_602,
1082 &cpu_603,
1083 &cpu_e603,
1084 &cpu_ev603,
1085 &cpu_604,
1086 &cpu_e604,
1087 &cpu_620,
1088 &cpu_7400,
1089 &cpu_7450,
1090 &cpu_750,
1091 &cpu_970,
1092 &cpu_a2,
1093 &cpu_a2q,
1094 &cpu_e500,
1095 &cpu_e500mc,
1096 &cpu_e5500,
1097 &cpu_g3,
1098 &cpu_g4,
1099 &cpu_g4Plus,
1100 &cpu_g5,
1101 &cpu_generic,
1102 &cpu_ppc,
1103 &cpu_ppc32,
1104 &cpu_ppc64,
1105 &cpu_ppc64le,
1106 &cpu_pwr3,
1107 &cpu_pwr4,
1108 &cpu_pwr5,
1109 &cpu_pwr5x,
1110 &cpu_pwr6,
1111 &cpu_pwr6x,
1112 &cpu_pwr7,
1113 &cpu_pwr8,
1114 &cpu_pwr9,
1115};1035};
lib/std/target/riscv.zig+94-89
...@@ -1,98 +1,103 @@...@@ -1,98 +1,103 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_bit64 = Feature{4pub const Feature = enum {
5 .name = "bit64",5 @"64bit",
6 .llvm_name = "64bit",6 a,
7 .description = "Implements RV64",7 c,
8 .dependencies = &[_]*const Feature {8 d,
9 },9 e,
10 f,
11 m,
12 relax,
10};13};
1114
12pub const feature_e = Feature{15pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
13 .name = "e",
14 .llvm_name = "e",
15 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_relax = Feature{
21 .name = "relax",
22 .llvm_name = "relax",
23 .description = "Enable Linker relaxation.",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_a = Feature{
29 .name = "a",
30 .llvm_name = "a",
31 .description = "'A' (Atomic Instructions)",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_c = Feature{
37 .name = "c",
38 .llvm_name = "c",
39 .description = "'C' (Compressed Instructions)",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_d = Feature{
45 .name = "d",
46 .llvm_name = "d",
47 .description = "'D' (Double-Precision Floating-Point)",
48 .dependencies = &[_]*const Feature {
49 &feature_f,
50 },
51};
52
53pub const feature_f = Feature{
54 .name = "f",
55 .llvm_name = "f",
56 .description = "'F' (Single-Precision Floating-Point)",
57 .dependencies = &[_]*const Feature {
58 },
59};
60
61pub const feature_m = Feature{
62 .name = "m",
63 .llvm_name = "m",
64 .description = "'M' (Integer Multiplication and Division)",
65 .dependencies = &[_]*const Feature {
66 },
67};
68
69pub const features = &[_]*const Feature {
70 &feature_bit64,
71 &feature_e,
72 &feature_relax,
73 &feature_a,
74 &feature_c,
75 &feature_d,
76 &feature_f,
77 &feature_m,
78};
7916
80pub const cpu_genericRv32 = Cpu{17pub const all_features = blk: {
81 .name = "genericRv32",18 const len = @typeInfo(Feature).Enum.fields.len;
82 .llvm_name = "generic-rv32",19 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
83 .dependencies = &[_]*const Feature {20 var result: [len]Cpu.Feature = undefined;
84 },21 result[@enumToInt(Feature.@"64bit")] = .{
22 .index = @enumToInt(Feature.@"64bit"),
23 .name = @tagName(Feature.@"64bit"),
24 .llvm_name = "64bit",
25 .description = "Implements RV64",
26 .dependencies = 0,
27 };
28 result[@enumToInt(Feature.a)] = .{
29 .index = @enumToInt(Feature.a),
30 .name = @tagName(Feature.a),
31 .llvm_name = "a",
32 .description = "'A' (Atomic Instructions)",
33 .dependencies = 0,
34 };
35 result[@enumToInt(Feature.c)] = .{
36 .index = @enumToInt(Feature.c),
37 .name = @tagName(Feature.c),
38 .llvm_name = "c",
39 .description = "'C' (Compressed Instructions)",
40 .dependencies = 0,
41 };
42 result[@enumToInt(Feature.d)] = .{
43 .index = @enumToInt(Feature.d),
44 .name = @tagName(Feature.d),
45 .llvm_name = "d",
46 .description = "'D' (Double-Precision Floating-Point)",
47 .dependencies = featureSet(&[_]Feature{
48 .f,
49 }),
50 };
51 result[@enumToInt(Feature.e)] = .{
52 .index = @enumToInt(Feature.e),
53 .name = @tagName(Feature.e),
54 .llvm_name = "e",
55 .description = "Implements RV32E (provides 16 rather than 32 GPRs)",
56 .dependencies = 0,
57 };
58 result[@enumToInt(Feature.f)] = .{
59 .index = @enumToInt(Feature.f),
60 .name = @tagName(Feature.f),
61 .llvm_name = "f",
62 .description = "'F' (Single-Precision Floating-Point)",
63 .dependencies = 0,
64 };
65 result[@enumToInt(Feature.m)] = .{
66 .index = @enumToInt(Feature.m),
67 .name = @tagName(Feature.m),
68 .llvm_name = "m",
69 .description = "'M' (Integer Multiplication and Division)",
70 .dependencies = 0,
71 };
72 result[@enumToInt(Feature.relax)] = .{
73 .index = @enumToInt(Feature.relax),
74 .name = @tagName(Feature.relax),
75 .llvm_name = "relax",
76 .description = "Enable Linker relaxation.",
77 .dependencies = 0,
78 };
79 break :blk result;
85};80};
8681
87pub const cpu_genericRv64 = Cpu{82pub const cpu = struct {
88 .name = "genericRv64",83 pub const generic_rv32 = Cpu{
89 .llvm_name = "generic-rv64",84 .name = "generic_rv32",
90 .dependencies = &[_]*const Feature {85 .llvm_name = "generic-rv32",
91 &feature_bit64,86 .features = 0,
92 },87 };
88 pub const generic_rv64 = Cpu{
89 .name = "generic_rv64",
90 .llvm_name = "generic-rv64",
91 .features = featureSet(&[_]Feature{
92 .@"64bit",
93 }),
94 };
93};95};
9496
95pub const cpus = &[_]*const Cpu {97/// All riscv CPUs, sorted alphabetically by name.
96 &cpu_genericRv32,98/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
97 &cpu_genericRv64,99/// compiler has inefficient memory and CPU usage, affecting build times.
100pub const all_cpus = &[_]*const Cpu{
101 &cpu.generic_rv32,
102 &cpu.generic_rv64,
98};103};
lib/std/target/sparc.zig+527-488
...@@ -1,489 +1,528 @@...@@ -1,489 +1,528 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_hardQuadFloat = Feature{4pub const Feature = enum {
5 .name = "hardQuadFloat",5 deprecated_v8,
6 .llvm_name = "hard-quad-float",6 detectroundchange,
7 .description = "Enable quad-word floating point instructions",7 fixallfdivsqrt,
8 .dependencies = &[_]*const Feature {8 hard_quad_float,
9 },9 hasleoncasa,
10};10 hasumacsmac,
1111 insertnopload,
12pub const feature_leon = Feature{12 leon,
13 .name = "leon",13 leoncyclecounter,
14 .llvm_name = "leon",14 leonpwrpsr,
15 .description = "Enable LEON extensions",15 no_fmuls,
16 .dependencies = &[_]*const Feature {16 no_fsmuld,
17 },17 popc,
18};18 soft_float,
1919 soft_mul_div,
20pub const feature_noFmuls = Feature{20 v9,
21 .name = "noFmuls",21 vis,
22 .llvm_name = "no-fmuls",22 vis2,
23 .description = "Disable the fmuls instruction.",23 vis3,
24 .dependencies = &[_]*const Feature {24};
25 },25
26};26pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
2727
28pub const feature_noFsmuld = Feature{28pub const all_features = blk: {
29 .name = "noFsmuld",29 const len = @typeInfo(Feature).Enum.fields.len;
30 .llvm_name = "no-fsmuld",30 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
31 .description = "Disable the fsmuld instruction.",31 var result: [len]Cpu.Feature = undefined;
32 .dependencies = &[_]*const Feature {32 result[@enumToInt(Feature.deprecated_v8)] = .{
33 },33 .index = @enumToInt(Feature.deprecated_v8),
34};34 .name = @tagName(Feature.deprecated_v8),
3535 .llvm_name = "deprecated-v8",
36pub const feature_leonpwrpsr = Feature{36 .description = "Enable deprecated V8 instructions in V9 mode",
37 .name = "leonpwrpsr",37 .dependencies = 0,
38 .llvm_name = "leonpwrpsr",38 };
39 .description = "Enable the PWRPSR instruction",39 result[@enumToInt(Feature.detectroundchange)] = .{
40 .dependencies = &[_]*const Feature {40 .index = @enumToInt(Feature.detectroundchange),
41 },41 .name = @tagName(Feature.detectroundchange),
42};42 .llvm_name = "detectroundchange",
4343 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",
44pub const feature_softFloat = Feature{44 .dependencies = 0,
45 .name = "softFloat",45 };
46 .llvm_name = "soft-float",46 result[@enumToInt(Feature.fixallfdivsqrt)] = .{
47 .description = "Use software emulation for floating point",47 .index = @enumToInt(Feature.fixallfdivsqrt),
48 .dependencies = &[_]*const Feature {48 .name = @tagName(Feature.fixallfdivsqrt),
49 },49 .llvm_name = "fixallfdivsqrt",
50};50 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
5151 .dependencies = 0,
52pub const feature_softMulDiv = Feature{52 };
53 .name = "softMulDiv",53 result[@enumToInt(Feature.hard_quad_float)] = .{
54 .llvm_name = "soft-mul-div",54 .index = @enumToInt(Feature.hard_quad_float),
55 .description = "Use software emulation for integer multiply and divide",55 .name = @tagName(Feature.hard_quad_float),
56 .dependencies = &[_]*const Feature {56 .llvm_name = "hard-quad-float",
57 },57 .description = "Enable quad-word floating point instructions",
58};58 .dependencies = 0,
5959 };
60pub const feature_deprecatedV8 = Feature{60 result[@enumToInt(Feature.hasleoncasa)] = .{
61 .name = "deprecatedV8",61 .index = @enumToInt(Feature.hasleoncasa),
62 .llvm_name = "deprecated-v8",62 .name = @tagName(Feature.hasleoncasa),
63 .description = "Enable deprecated V8 instructions in V9 mode",63 .llvm_name = "hasleoncasa",
64 .dependencies = &[_]*const Feature {64 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
65 },65 .dependencies = 0,
66};66 };
6767 result[@enumToInt(Feature.hasumacsmac)] = .{
68pub const feature_v9 = Feature{68 .index = @enumToInt(Feature.hasumacsmac),
69 .name = "v9",69 .name = @tagName(Feature.hasumacsmac),
70 .llvm_name = "v9",70 .llvm_name = "hasumacsmac",
71 .description = "Enable SPARC-V9 instructions",71 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
72 .dependencies = &[_]*const Feature {72 .dependencies = 0,
73 },73 };
74};74 result[@enumToInt(Feature.insertnopload)] = .{
7575 .index = @enumToInt(Feature.insertnopload),
76pub const feature_vis = Feature{76 .name = @tagName(Feature.insertnopload),
77 .name = "vis",77 .llvm_name = "insertnopload",
78 .llvm_name = "vis",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 .description = "Enable UltraSPARC Visual Instruction Set extensions",79 .dependencies = 0,
80 .dependencies = &[_]*const Feature {80 };
81 },81 result[@enumToInt(Feature.leon)] = .{
82};82 .index = @enumToInt(Feature.leon),
8383 .name = @tagName(Feature.leon),
84pub const feature_vis2 = Feature{84 .llvm_name = "leon",
85 .name = "vis2",85 .description = "Enable LEON extensions",
86 .llvm_name = "vis2",86 .dependencies = 0,
87 .description = "Enable Visual Instruction Set extensions II",87 };
88 .dependencies = &[_]*const Feature {88 result[@enumToInt(Feature.leoncyclecounter)] = .{
89 },89 .index = @enumToInt(Feature.leoncyclecounter),
90};90 .name = @tagName(Feature.leoncyclecounter),
9191 .llvm_name = "leoncyclecounter",
92pub const feature_vis3 = Feature{92 .description = "Use the Leon cycle counter register",
93 .name = "vis3",93 .dependencies = 0,
94 .llvm_name = "vis3",94 };
95 .description = "Enable Visual Instruction Set extensions III",95 result[@enumToInt(Feature.leonpwrpsr)] = .{
96 .dependencies = &[_]*const Feature {96 .index = @enumToInt(Feature.leonpwrpsr),
97 },97 .name = @tagName(Feature.leonpwrpsr),
98};98 .llvm_name = "leonpwrpsr",
9999 .description = "Enable the PWRPSR instruction",
100pub const features = &[_]*const Feature {100 .dependencies = 0,
101 &feature_hardQuadFloat,101 };
102 &feature_leon,102 result[@enumToInt(Feature.no_fmuls)] = .{
103 &feature_noFmuls,103 .index = @enumToInt(Feature.no_fmuls),
104 &feature_noFsmuld,104 .name = @tagName(Feature.no_fmuls),
105 &feature_leonpwrpsr,105 .llvm_name = "no-fmuls",
106 &feature_softFloat,106 .description = "Disable the fmuls instruction.",
107 &feature_softMulDiv,107 .dependencies = 0,
108 &feature_deprecatedV8,108 };
109 &feature_v9,109 result[@enumToInt(Feature.no_fsmuld)] = .{
110 &feature_vis,110 .index = @enumToInt(Feature.no_fsmuld),
111 &feature_vis2,111 .name = @tagName(Feature.no_fsmuld),
112 &feature_vis3,112 .llvm_name = "no-fsmuld",
113};113 .description = "Disable the fsmuld instruction.",
114114 .dependencies = 0,
115pub const cpu_at697e = Cpu{115 };
116 .name = "at697e",116 result[@enumToInt(Feature.popc)] = .{
117 .llvm_name = "at697e",117 .index = @enumToInt(Feature.popc),
118 .dependencies = &[_]*const Feature {118 .name = @tagName(Feature.popc),
119 &feature_leon,119 .llvm_name = "popc",
120 },120 .description = "Use the popc (population count) instruction",
121};121 .dependencies = 0,
122122 };
123pub const cpu_at697f = Cpu{123 result[@enumToInt(Feature.soft_float)] = .{
124 .name = "at697f",124 .index = @enumToInt(Feature.soft_float),
125 .llvm_name = "at697f",125 .name = @tagName(Feature.soft_float),
126 .dependencies = &[_]*const Feature {126 .llvm_name = "soft-float",
127 &feature_leon,127 .description = "Use software emulation for floating point",
128 },128 .dependencies = 0,
129};129 };
130130 result[@enumToInt(Feature.soft_mul_div)] = .{
131pub const cpu_f934 = Cpu{131 .index = @enumToInt(Feature.soft_mul_div),
132 .name = "f934",132 .name = @tagName(Feature.soft_mul_div),
133 .llvm_name = "f934",133 .llvm_name = "soft-mul-div",
134 .dependencies = &[_]*const Feature {134 .description = "Use software emulation for integer multiply and divide",
135 },135 .dependencies = 0,
136};136 };
137137 result[@enumToInt(Feature.v9)] = .{
138pub const cpu_generic = Cpu{138 .index = @enumToInt(Feature.v9),
139 .name = "generic",139 .name = @tagName(Feature.v9),
140 .llvm_name = "generic",140 .llvm_name = "v9",
141 .dependencies = &[_]*const Feature {141 .description = "Enable SPARC-V9 instructions",
142 },142 .dependencies = 0,
143};143 };
144144 result[@enumToInt(Feature.vis)] = .{
145pub const cpu_gr712rc = Cpu{145 .index = @enumToInt(Feature.vis),
146 .name = "gr712rc",146 .name = @tagName(Feature.vis),
147 .llvm_name = "gr712rc",147 .llvm_name = "vis",
148 .dependencies = &[_]*const Feature {148 .description = "Enable UltraSPARC Visual Instruction Set extensions",
149 &feature_leon,149 .dependencies = 0,
150 },150 };
151};151 result[@enumToInt(Feature.vis2)] = .{
152152 .index = @enumToInt(Feature.vis2),
153pub const cpu_gr740 = Cpu{153 .name = @tagName(Feature.vis2),
154 .name = "gr740",154 .llvm_name = "vis2",
155 .llvm_name = "gr740",155 .description = "Enable Visual Instruction Set extensions II",
156 .dependencies = &[_]*const Feature {156 .dependencies = 0,
157 &feature_leon,157 };
158 &feature_leonpwrpsr,158 result[@enumToInt(Feature.vis3)] = .{
159 },159 .index = @enumToInt(Feature.vis3),
160};160 .name = @tagName(Feature.vis3),
161161 .llvm_name = "vis3",
162pub const cpu_hypersparc = Cpu{162 .description = "Enable Visual Instruction Set extensions III",
163 .name = "hypersparc",163 .dependencies = 0,
164 .llvm_name = "hypersparc",164 };
165 .dependencies = &[_]*const Feature {165 break :blk result;
166 },166};
167};167
168168pub const cpu = struct {
169pub const cpu_leon2 = Cpu{169 pub const at697e = Cpu{
170 .name = "leon2",170 .name = "at697e",
171 .llvm_name = "leon2",171 .llvm_name = "at697e",
172 .dependencies = &[_]*const Feature {172 .features = featureSet(&[_]Feature{
173 &feature_leon,173 .insertnopload,
174 },174 .leon,
175};175 }),
176176 };
177pub const cpu_leon3 = Cpu{177 pub const at697f = Cpu{
178 .name = "leon3",178 .name = "at697f",
179 .llvm_name = "leon3",179 .llvm_name = "at697f",
180 .dependencies = &[_]*const Feature {180 .features = featureSet(&[_]Feature{
181 &feature_leon,181 .insertnopload,
182 },182 .leon,
183};183 }),
184184 };
185pub const cpu_leon4 = Cpu{185 pub const f934 = Cpu{
186 .name = "leon4",186 .name = "f934",
187 .llvm_name = "leon4",187 .llvm_name = "f934",
188 .dependencies = &[_]*const Feature {188 .features = 0,
189 &feature_leon,189 };
190 },190 pub const generic = Cpu{
191};191 .name = "generic",
192192 .llvm_name = "generic",
193pub const cpu_ma2080 = Cpu{193 .features = 0,
194 .name = "ma2080",194 };
195 .llvm_name = "ma2080",195 pub const gr712rc = Cpu{
196 .dependencies = &[_]*const Feature {196 .name = "gr712rc",
197 &feature_leon,197 .llvm_name = "gr712rc",
198 },198 .features = featureSet(&[_]Feature{
199};199 .hasleoncasa,
200200 .leon,
201pub const cpu_ma2085 = Cpu{201 }),
202 .name = "ma2085",202 };
203 .llvm_name = "ma2085",203 pub const gr740 = Cpu{
204 .dependencies = &[_]*const Feature {204 .name = "gr740",
205 &feature_leon,205 .llvm_name = "gr740",
206 },206 .features = featureSet(&[_]Feature{
207};207 .hasleoncasa,
208208 .hasumacsmac,
209pub const cpu_ma2100 = Cpu{209 .leon,
210 .name = "ma2100",210 .leoncyclecounter,
211 .llvm_name = "ma2100",211 .leonpwrpsr,
212 .dependencies = &[_]*const Feature {212 }),
213 &feature_leon,213 };
214 },214 pub const hypersparc = Cpu{
215};215 .name = "hypersparc",
216216 .llvm_name = "hypersparc",
217pub const cpu_ma2150 = Cpu{217 .features = 0,
218 .name = "ma2150",218 };
219 .llvm_name = "ma2150",219 pub const leon2 = Cpu{
220 .dependencies = &[_]*const Feature {220 .name = "leon2",
221 &feature_leon,221 .llvm_name = "leon2",
222 },222 .features = featureSet(&[_]Feature{
223};223 .leon,
224224 }),
225pub const cpu_ma2155 = Cpu{225 };
226 .name = "ma2155",226 pub const leon3 = Cpu{
227 .llvm_name = "ma2155",227 .name = "leon3",
228 .dependencies = &[_]*const Feature {228 .llvm_name = "leon3",
229 &feature_leon,229 .features = featureSet(&[_]Feature{
230 },230 .hasumacsmac,
231};231 .leon,
232232 }),
233pub const cpu_ma2450 = Cpu{233 };
234 .name = "ma2450",234 pub const leon4 = Cpu{
235 .llvm_name = "ma2450",235 .name = "leon4",
236 .dependencies = &[_]*const Feature {236 .llvm_name = "leon4",
237 &feature_leon,237 .features = featureSet(&[_]Feature{
238 },238 .hasleoncasa,
239};239 .hasumacsmac,
240240 .leon,
241pub const cpu_ma2455 = Cpu{241 }),
242 .name = "ma2455",242 };
243 .llvm_name = "ma2455",243 pub const ma2080 = Cpu{
244 .dependencies = &[_]*const Feature {244 .name = "ma2080",
245 &feature_leon,245 .llvm_name = "ma2080",
246 },246 .features = featureSet(&[_]Feature{
247};247 .hasleoncasa,
248248 .leon,
249pub const cpu_ma2480 = Cpu{249 }),
250 .name = "ma2480",250 };
251 .llvm_name = "ma2480",251 pub const ma2085 = Cpu{
252 .dependencies = &[_]*const Feature {252 .name = "ma2085",
253 &feature_leon,253 .llvm_name = "ma2085",
254 },254 .features = featureSet(&[_]Feature{
255};255 .hasleoncasa,
256256 .leon,
257pub const cpu_ma2485 = Cpu{257 }),
258 .name = "ma2485",258 };
259 .llvm_name = "ma2485",259 pub const ma2100 = Cpu{
260 .dependencies = &[_]*const Feature {260 .name = "ma2100",
261 &feature_leon,261 .llvm_name = "ma2100",
262 },262 .features = featureSet(&[_]Feature{
263};263 .hasleoncasa,
264264 .leon,
265pub const cpu_ma2x5x = Cpu{265 }),
266 .name = "ma2x5x",266 };
267 .llvm_name = "ma2x5x",267 pub const ma2150 = Cpu{
268 .dependencies = &[_]*const Feature {268 .name = "ma2150",
269 &feature_leon,269 .llvm_name = "ma2150",
270 },270 .features = featureSet(&[_]Feature{
271};271 .hasleoncasa,
272272 .leon,
273pub const cpu_ma2x8x = Cpu{273 }),
274 .name = "ma2x8x",274 };
275 .llvm_name = "ma2x8x",275 pub const ma2155 = Cpu{
276 .dependencies = &[_]*const Feature {276 .name = "ma2155",
277 &feature_leon,277 .llvm_name = "ma2155",
278 },278 .features = featureSet(&[_]Feature{
279};279 .hasleoncasa,
280280 .leon,
281pub const cpu_myriad2 = Cpu{281 }),
282 .name = "myriad2",282 };
283 .llvm_name = "myriad2",283 pub const ma2450 = Cpu{
284 .dependencies = &[_]*const Feature {284 .name = "ma2450",
285 &feature_leon,285 .llvm_name = "ma2450",
286 },286 .features = featureSet(&[_]Feature{
287};287 .hasleoncasa,
288288 .leon,
289pub const cpu_myriad21 = Cpu{289 }),
290 .name = "myriad21",290 };
291 .llvm_name = "myriad2.1",291 pub const ma2455 = Cpu{
292 .dependencies = &[_]*const Feature {292 .name = "ma2455",
293 &feature_leon,293 .llvm_name = "ma2455",
294 },294 .features = featureSet(&[_]Feature{
295};295 .hasleoncasa,
296296 .leon,
297pub const cpu_myriad22 = Cpu{297 }),
298 .name = "myriad22",298 };
299 .llvm_name = "myriad2.2",299 pub const ma2480 = Cpu{
300 .dependencies = &[_]*const Feature {300 .name = "ma2480",
301 &feature_leon,301 .llvm_name = "ma2480",
302 },302 .features = featureSet(&[_]Feature{
303};303 .hasleoncasa,
304304 .leon,
305pub const cpu_myriad23 = Cpu{305 }),
306 .name = "myriad23",306 };
307 .llvm_name = "myriad2.3",307 pub const ma2485 = Cpu{
308 .dependencies = &[_]*const Feature {308 .name = "ma2485",
309 &feature_leon,309 .llvm_name = "ma2485",
310 },310 .features = featureSet(&[_]Feature{
311};311 .hasleoncasa,
312312 .leon,
313pub const cpu_niagara = Cpu{313 }),
314 .name = "niagara",314 };
315 .llvm_name = "niagara",315 pub const ma2x5x = Cpu{
316 .dependencies = &[_]*const Feature {316 .name = "ma2x5x",
317 &feature_deprecatedV8,317 .llvm_name = "ma2x5x",
318 &feature_v9,318 .features = featureSet(&[_]Feature{
319 &feature_vis,319 .hasleoncasa,
320 &feature_vis2,320 .leon,
321 },321 }),
322};322 };
323323 pub const ma2x8x = Cpu{
324pub const cpu_niagara2 = Cpu{324 .name = "ma2x8x",
325 .name = "niagara2",325 .llvm_name = "ma2x8x",
326 .llvm_name = "niagara2",326 .features = featureSet(&[_]Feature{
327 .dependencies = &[_]*const Feature {327 .hasleoncasa,
328 &feature_deprecatedV8,328 .leon,
329 &feature_v9,329 }),
330 &feature_vis,330 };
331 &feature_vis2,331 pub const myriad2 = Cpu{
332 },332 .name = "myriad2",
333};333 .llvm_name = "myriad2",
334334 .features = featureSet(&[_]Feature{
335pub const cpu_niagara3 = Cpu{335 .hasleoncasa,
336 .name = "niagara3",336 .leon,
337 .llvm_name = "niagara3",337 }),
338 .dependencies = &[_]*const Feature {338 };
339 &feature_deprecatedV8,339 pub const myriad2_1 = Cpu{
340 &feature_v9,340 .name = "myriad2_1",
341 &feature_vis,341 .llvm_name = "myriad2.1",
342 &feature_vis2,342 .features = featureSet(&[_]Feature{
343 },343 .hasleoncasa,
344};344 .leon,
345345 }),
346pub const cpu_niagara4 = Cpu{346 };
347 .name = "niagara4",347 pub const myriad2_2 = Cpu{
348 .llvm_name = "niagara4",348 .name = "myriad2_2",
349 .dependencies = &[_]*const Feature {349 .llvm_name = "myriad2.2",
350 &feature_deprecatedV8,350 .features = featureSet(&[_]Feature{
351 &feature_v9,351 .hasleoncasa,
352 &feature_vis,352 .leon,
353 &feature_vis2,353 }),
354 &feature_vis3,354 };
355 },355 pub const myriad2_3 = Cpu{
356};356 .name = "myriad2_3",
357357 .llvm_name = "myriad2.3",
358pub const cpu_sparclet = Cpu{358 .features = featureSet(&[_]Feature{
359 .name = "sparclet",359 .hasleoncasa,
360 .llvm_name = "sparclet",360 .leon,
361 .dependencies = &[_]*const Feature {361 }),
362 },362 };
363};363 pub const niagara = Cpu{
364364 .name = "niagara",
365pub const cpu_sparclite = Cpu{365 .llvm_name = "niagara",
366 .name = "sparclite",366 .features = featureSet(&[_]Feature{
367 .llvm_name = "sparclite",367 .deprecated_v8,
368 .dependencies = &[_]*const Feature {368 .v9,
369 },369 .vis,
370};370 .vis2,
371371 }),
372pub const cpu_sparclite86x = Cpu{372 };
373 .name = "sparclite86x",373 pub const niagara2 = Cpu{
374 .llvm_name = "sparclite86x",374 .name = "niagara2",
375 .dependencies = &[_]*const Feature {375 .llvm_name = "niagara2",
376 },376 .features = featureSet(&[_]Feature{
377};377 .deprecated_v8,
378378 .popc,
379pub const cpu_supersparc = Cpu{379 .v9,
380 .name = "supersparc",380 .vis,
381 .llvm_name = "supersparc",381 .vis2,
382 .dependencies = &[_]*const Feature {382 }),
383 },383 };
384};384 pub const niagara3 = Cpu{
385385 .name = "niagara3",
386pub const cpu_tsc701 = Cpu{386 .llvm_name = "niagara3",
387 .name = "tsc701",387 .features = featureSet(&[_]Feature{
388 .llvm_name = "tsc701",388 .deprecated_v8,
389 .dependencies = &[_]*const Feature {389 .popc,
390 },390 .v9,
391};391 .vis,
392392 .vis2,
393pub const cpu_ultrasparc = Cpu{393 }),
394 .name = "ultrasparc",394 };
395 .llvm_name = "ultrasparc",395 pub const niagara4 = Cpu{
396 .dependencies = &[_]*const Feature {396 .name = "niagara4",
397 &feature_deprecatedV8,397 .llvm_name = "niagara4",
398 &feature_v9,398 .features = featureSet(&[_]Feature{
399 &feature_vis,399 .deprecated_v8,
400 },400 .popc,
401};401 .v9,
402402 .vis,
403pub const cpu_ultrasparc3 = Cpu{403 .vis2,
404 .name = "ultrasparc3",404 .vis3,
405 .llvm_name = "ultrasparc3",405 }),
406 .dependencies = &[_]*const Feature {406 };
407 &feature_deprecatedV8,407 pub const sparclet = Cpu{
408 &feature_v9,408 .name = "sparclet",
409 &feature_vis,409 .llvm_name = "sparclet",
410 &feature_vis2,410 .features = 0,
411 },411 };
412};412 pub const sparclite = Cpu{
413413 .name = "sparclite",
414pub const cpu_ut699 = Cpu{414 .llvm_name = "sparclite",
415 .name = "ut699",415 .features = 0,
416 .llvm_name = "ut699",416 };
417 .dependencies = &[_]*const Feature {417 pub const sparclite86x = Cpu{
418 &feature_leon,418 .name = "sparclite86x",
419 &feature_noFmuls,419 .llvm_name = "sparclite86x",
420 &feature_noFsmuld,420 .features = 0,
421 },421 };
422};422 pub const supersparc = Cpu{
423423 .name = "supersparc",
424pub const cpu_v7 = Cpu{424 .llvm_name = "supersparc",
425 .name = "v7",425 .features = 0,
426 .llvm_name = "v7",426 };
427 .dependencies = &[_]*const Feature {427 pub const tsc701 = Cpu{
428 &feature_noFsmuld,428 .name = "tsc701",
429 &feature_softMulDiv,429 .llvm_name = "tsc701",
430 },430 .features = 0,
431};431 };
432432 pub const ultrasparc = Cpu{
433pub const cpu_v8 = Cpu{433 .name = "ultrasparc",
434 .name = "v8",434 .llvm_name = "ultrasparc",
435 .llvm_name = "v8",435 .features = featureSet(&[_]Feature{
436 .dependencies = &[_]*const Feature {436 .deprecated_v8,
437 },437 .v9,
438};438 .vis,
439439 }),
440pub const cpu_v9 = Cpu{440 };
441 .name = "v9",441 pub const ultrasparc3 = Cpu{
442 .llvm_name = "v9",442 .name = "ultrasparc3",
443 .dependencies = &[_]*const Feature {443 .llvm_name = "ultrasparc3",
444 &feature_v9,444 .features = featureSet(&[_]Feature{
445 },445 .deprecated_v8,
446};446 .v9,
447447 .vis,
448pub const cpus = &[_]*const Cpu {448 .vis2,
449 &cpu_at697e,449 }),
450 &cpu_at697f,450 };
451 &cpu_f934,451 pub const ut699 = Cpu{
452 &cpu_generic,452 .name = "ut699",
453 &cpu_gr712rc,453 .llvm_name = "ut699",
454 &cpu_gr740,454 .features = featureSet(&[_]Feature{
455 &cpu_hypersparc,455 .fixallfdivsqrt,
456 &cpu_leon2,456 .insertnopload,
457 &cpu_leon3,457 .leon,
458 &cpu_leon4,458 .no_fmuls,
459 &cpu_ma2080,459 .no_fsmuld,
460 &cpu_ma2085,460 }),
461 &cpu_ma2100,461 };
462 &cpu_ma2150,462 pub const v7 = Cpu{
463 &cpu_ma2155,463 .name = "v7",
464 &cpu_ma2450,464 .llvm_name = "v7",
465 &cpu_ma2455,465 .features = featureSet(&[_]Feature{
466 &cpu_ma2480,466 .no_fsmuld,
467 &cpu_ma2485,467 .soft_mul_div,
468 &cpu_ma2x5x,468 }),
469 &cpu_ma2x8x,469 };
470 &cpu_myriad2,470 pub const v8 = Cpu{
471 &cpu_myriad21,471 .name = "v8",
472 &cpu_myriad22,472 .llvm_name = "v8",
473 &cpu_myriad23,473 .features = 0,
474 &cpu_niagara,474 };
475 &cpu_niagara2,475 pub const v9 = Cpu{
476 &cpu_niagara3,476 .name = "v9",
477 &cpu_niagara4,477 .llvm_name = "v9",
478 &cpu_sparclet,478 .features = featureSet(&[_]Feature{
479 &cpu_sparclite,479 .v9,
480 &cpu_sparclite86x,480 }),
481 &cpu_supersparc,481 };
482 &cpu_tsc701,482};
483 &cpu_ultrasparc,483
484 &cpu_ultrasparc3,484/// All sparc CPUs, sorted alphabetically by name.
485 &cpu_ut699,485/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
486 &cpu_v7,486/// compiler has inefficient memory and CPU usage, affecting build times.
487 &cpu_v8,487pub const all_cpus = &[_]*const Cpu{
488 &cpu_v9,488 &cpu.at697e,
489 &cpu.at697f,
490 &cpu.f934,
491 &cpu.generic,
492 &cpu.gr712rc,
493 &cpu.gr740,
494 &cpu.hypersparc,
495 &cpu.leon2,
496 &cpu.leon3,
497 &cpu.leon4,
498 &cpu.ma2080,
499 &cpu.ma2085,
500 &cpu.ma2100,
501 &cpu.ma2150,
502 &cpu.ma2155,
503 &cpu.ma2450,
504 &cpu.ma2455,
505 &cpu.ma2480,
506 &cpu.ma2485,
507 &cpu.ma2x5x,
508 &cpu.ma2x8x,
509 &cpu.myriad2,
510 &cpu.myriad2_1,
511 &cpu.myriad2_2,
512 &cpu.myriad2_3,
513 &cpu.niagara,
514 &cpu.niagara2,
515 &cpu.niagara3,
516 &cpu.niagara4,
517 &cpu.sparclet,
518 &cpu.sparclite,
519 &cpu.sparclite86x,
520 &cpu.supersparc,
521 &cpu.tsc701,
522 &cpu.ultrasparc,
523 &cpu.ultrasparc3,
524 &cpu.ut699,
525 &cpu.v7,
526 &cpu.v8,
527 &cpu.v9,
489};528};
lib/std/target/systemz.zig+574-609
...@@ -1,610 +1,575 @@...@@ -1,610 +1,575 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_dfpPackedConversion = Feature{4pub const Feature = enum {
5 .name = "dfpPackedConversion",5 deflate_conversion,
6 .llvm_name = "dfp-packed-conversion",6 dfp_packed_conversion,
7 .description = "Assume that the DFP packed-conversion facility is installed",7 dfp_zoned_conversion,
8 .dependencies = &[_]*const Feature {8 distinct_ops,
9 },9 enhanced_dat_2,
10};10 enhanced_sort,
1111 execution_hint,
12pub const feature_dfpZonedConversion = Feature{12 fast_serialization,
13 .name = "dfpZonedConversion",13 fp_extension,
14 .llvm_name = "dfp-zoned-conversion",14 guarded_storage,
15 .description = "Assume that the DFP zoned-conversion facility is installed",15 high_word,
16 .dependencies = &[_]*const Feature {16 insert_reference_bits_multiple,
17 },17 interlocked_access1,
18};18 load_and_trap,
1919 load_and_zero_rightmost_byte,
20pub const feature_deflateConversion = Feature{20 load_store_on_cond,
21 .name = "deflateConversion",21 load_store_on_cond_2,
22 .llvm_name = "deflate-conversion",22 message_security_assist_extension3,
23 .description = "Assume that the deflate-conversion facility is installed",23 message_security_assist_extension4,
24 .dependencies = &[_]*const Feature {24 message_security_assist_extension5,
25 },25 message_security_assist_extension7,
26};26 message_security_assist_extension8,
2727 message_security_assist_extension9,
28pub const feature_distinctOps = Feature{28 miscellaneous_extensions,
29 .name = "distinctOps",29 miscellaneous_extensions_2,
30 .llvm_name = "distinct-ops",30 miscellaneous_extensions_3,
31 .description = "Assume that the distinct-operands facility is installed",31 population_count,
32 .dependencies = &[_]*const Feature {32 processor_assist,
33 },33 reset_reference_bits_multiple,
34};34 transactional_execution,
3535 vector,
36pub const feature_enhancedDat2 = Feature{36 vector_enhancements_1,
37 .name = "enhancedDat2",37 vector_enhancements_2,
38 .llvm_name = "enhanced-dat-2",38 vector_packed_decimal,
39 .description = "Assume that the enhanced-DAT facility 2 is installed",39 vector_packed_decimal_enhancement,
40 .dependencies = &[_]*const Feature {40};
41 },41
42};42pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
4343
44pub const feature_enhancedSort = Feature{44pub const all_features = blk: {
45 .name = "enhancedSort",45 const len = @typeInfo(Feature).Enum.fields.len;
46 .llvm_name = "enhanced-sort",46 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
47 .description = "Assume that the enhanced-sort facility is installed",47 var result: [len]Cpu.Feature = undefined;
48 .dependencies = &[_]*const Feature {48 result[@enumToInt(Feature.deflate_conversion)] = .{
49 },49 .index = @enumToInt(Feature.deflate_conversion),
50};50 .name = @tagName(Feature.deflate_conversion),
5151 .llvm_name = "deflate-conversion",
52pub const feature_executionHint = Feature{52 .description = "Assume that the deflate-conversion facility is installed",
53 .name = "executionHint",53 .dependencies = 0,
54 .llvm_name = "execution-hint",54 };
55 .description = "Assume that the execution-hint facility is installed",55 result[@enumToInt(Feature.dfp_packed_conversion)] = .{
56 .dependencies = &[_]*const Feature {56 .index = @enumToInt(Feature.dfp_packed_conversion),
57 },57 .name = @tagName(Feature.dfp_packed_conversion),
58};58 .llvm_name = "dfp-packed-conversion",
5959 .description = "Assume that the DFP packed-conversion facility is installed",
60pub const feature_fpExtension = Feature{60 .dependencies = 0,
61 .name = "fpExtension",61 };
62 .llvm_name = "fp-extension",62 result[@enumToInt(Feature.dfp_zoned_conversion)] = .{
63 .description = "Assume that the floating-point extension facility is installed",63 .index = @enumToInt(Feature.dfp_zoned_conversion),
64 .dependencies = &[_]*const Feature {64 .name = @tagName(Feature.dfp_zoned_conversion),
65 },65 .llvm_name = "dfp-zoned-conversion",
66};66 .description = "Assume that the DFP zoned-conversion facility is installed",
6767 .dependencies = 0,
68pub const feature_fastSerialization = Feature{68 };
69 .name = "fastSerialization",69 result[@enumToInt(Feature.distinct_ops)] = .{
70 .llvm_name = "fast-serialization",70 .index = @enumToInt(Feature.distinct_ops),
71 .description = "Assume that the fast-serialization facility is installed",71 .name = @tagName(Feature.distinct_ops),
72 .dependencies = &[_]*const Feature {72 .llvm_name = "distinct-ops",
73 },73 .description = "Assume that the distinct-operands facility is installed",
74};74 .dependencies = 0,
7575 };
76pub const feature_guardedStorage = Feature{76 result[@enumToInt(Feature.enhanced_dat_2)] = .{
77 .name = "guardedStorage",77 .index = @enumToInt(Feature.enhanced_dat_2),
78 .llvm_name = "guarded-storage",78 .name = @tagName(Feature.enhanced_dat_2),
79 .description = "Assume that the guarded-storage facility is installed",79 .llvm_name = "enhanced-dat-2",
80 .dependencies = &[_]*const Feature {80 .description = "Assume that the enhanced-DAT facility 2 is installed",
81 },81 .dependencies = 0,
82};82 };
8383 result[@enumToInt(Feature.enhanced_sort)] = .{
84pub const feature_highWord = Feature{84 .index = @enumToInt(Feature.enhanced_sort),
85 .name = "highWord",85 .name = @tagName(Feature.enhanced_sort),
86 .llvm_name = "high-word",86 .llvm_name = "enhanced-sort",
87 .description = "Assume that the high-word facility is installed",87 .description = "Assume that the enhanced-sort facility is installed",
88 .dependencies = &[_]*const Feature {88 .dependencies = 0,
89 },89 };
90};90 result[@enumToInt(Feature.execution_hint)] = .{
9191 .index = @enumToInt(Feature.execution_hint),
92pub const feature_insertReferenceBitsMultiple = Feature{92 .name = @tagName(Feature.execution_hint),
93 .name = "insertReferenceBitsMultiple",93 .llvm_name = "execution-hint",
94 .llvm_name = "insert-reference-bits-multiple",94 .description = "Assume that the execution-hint facility is installed",
95 .description = "Assume that the insert-reference-bits-multiple facility is installed",95 .dependencies = 0,
96 .dependencies = &[_]*const Feature {96 };
97 },97 result[@enumToInt(Feature.fast_serialization)] = .{
98};98 .index = @enumToInt(Feature.fast_serialization),
9999 .name = @tagName(Feature.fast_serialization),
100pub const feature_interlockedAccess1 = Feature{100 .llvm_name = "fast-serialization",
101 .name = "interlockedAccess1",101 .description = "Assume that the fast-serialization facility is installed",
102 .llvm_name = "interlocked-access1",102 .dependencies = 0,
103 .description = "Assume that interlocked-access facility 1 is installed",103 };
104 .dependencies = &[_]*const Feature {104 result[@enumToInt(Feature.fp_extension)] = .{
105 },105 .index = @enumToInt(Feature.fp_extension),
106};106 .name = @tagName(Feature.fp_extension),
107107 .llvm_name = "fp-extension",
108pub const feature_loadAndTrap = Feature{108 .description = "Assume that the floating-point extension facility is installed",
109 .name = "loadAndTrap",109 .dependencies = 0,
110 .llvm_name = "load-and-trap",110 };
111 .description = "Assume that the load-and-trap facility is installed",111 result[@enumToInt(Feature.guarded_storage)] = .{
112 .dependencies = &[_]*const Feature {112 .index = @enumToInt(Feature.guarded_storage),
113 },113 .name = @tagName(Feature.guarded_storage),
114};114 .llvm_name = "guarded-storage",
115115 .description = "Assume that the guarded-storage facility is installed",
116pub const feature_loadAndZeroRightmostByte = Feature{116 .dependencies = 0,
117 .name = "loadAndZeroRightmostByte",117 };
118 .llvm_name = "load-and-zero-rightmost-byte",118 result[@enumToInt(Feature.high_word)] = .{
119 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",119 .index = @enumToInt(Feature.high_word),
120 .dependencies = &[_]*const Feature {120 .name = @tagName(Feature.high_word),
121 },121 .llvm_name = "high-word",
122};122 .description = "Assume that the high-word facility is installed",
123123 .dependencies = 0,
124pub const feature_loadStoreOnCond = Feature{124 };
125 .name = "loadStoreOnCond",125 result[@enumToInt(Feature.insert_reference_bits_multiple)] = .{
126 .llvm_name = "load-store-on-cond",126 .index = @enumToInt(Feature.insert_reference_bits_multiple),
127 .description = "Assume that the load/store-on-condition facility is installed",127 .name = @tagName(Feature.insert_reference_bits_multiple),
128 .dependencies = &[_]*const Feature {128 .llvm_name = "insert-reference-bits-multiple",
129 },129 .description = "Assume that the insert-reference-bits-multiple facility is installed",
130};130 .dependencies = 0,
131131 };
132pub const feature_loadStoreOnCond2 = Feature{132 result[@enumToInt(Feature.interlocked_access1)] = .{
133 .name = "loadStoreOnCond2",133 .index = @enumToInt(Feature.interlocked_access1),
134 .llvm_name = "load-store-on-cond-2",134 .name = @tagName(Feature.interlocked_access1),
135 .description = "Assume that the load/store-on-condition facility 2 is installed",135 .llvm_name = "interlocked-access1",
136 .dependencies = &[_]*const Feature {136 .description = "Assume that interlocked-access facility 1 is installed",
137 },137 .dependencies = 0,
138};138 };
139139 result[@enumToInt(Feature.load_and_trap)] = .{
140pub const feature_messageSecurityAssistExtension3 = Feature{140 .index = @enumToInt(Feature.load_and_trap),
141 .name = "messageSecurityAssistExtension3",141 .name = @tagName(Feature.load_and_trap),
142 .llvm_name = "message-security-assist-extension3",142 .llvm_name = "load-and-trap",
143 .description = "Assume that the message-security-assist extension facility 3 is installed",143 .description = "Assume that the load-and-trap facility is installed",
144 .dependencies = &[_]*const Feature {144 .dependencies = 0,
145 },145 };
146};146 result[@enumToInt(Feature.load_and_zero_rightmost_byte)] = .{
147147 .index = @enumToInt(Feature.load_and_zero_rightmost_byte),
148pub const feature_messageSecurityAssistExtension4 = Feature{148 .name = @tagName(Feature.load_and_zero_rightmost_byte),
149 .name = "messageSecurityAssistExtension4",149 .llvm_name = "load-and-zero-rightmost-byte",
150 .llvm_name = "message-security-assist-extension4",150 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
151 .description = "Assume that the message-security-assist extension facility 4 is installed",151 .dependencies = 0,
152 .dependencies = &[_]*const Feature {152 };
153 },153 result[@enumToInt(Feature.load_store_on_cond)] = .{
154};154 .index = @enumToInt(Feature.load_store_on_cond),
155155 .name = @tagName(Feature.load_store_on_cond),
156pub const feature_messageSecurityAssistExtension5 = Feature{156 .llvm_name = "load-store-on-cond",
157 .name = "messageSecurityAssistExtension5",157 .description = "Assume that the load/store-on-condition facility is installed",
158 .llvm_name = "message-security-assist-extension5",158 .dependencies = 0,
159 .description = "Assume that the message-security-assist extension facility 5 is installed",159 };
160 .dependencies = &[_]*const Feature {160 result[@enumToInt(Feature.load_store_on_cond_2)] = .{
161 },161 .index = @enumToInt(Feature.load_store_on_cond_2),
162};162 .name = @tagName(Feature.load_store_on_cond_2),
163163 .llvm_name = "load-store-on-cond-2",
164pub const feature_messageSecurityAssistExtension7 = Feature{164 .description = "Assume that the load/store-on-condition facility 2 is installed",
165 .name = "messageSecurityAssistExtension7",165 .dependencies = 0,
166 .llvm_name = "message-security-assist-extension7",166 };
167 .description = "Assume that the message-security-assist extension facility 7 is installed",167 result[@enumToInt(Feature.message_security_assist_extension3)] = .{
168 .dependencies = &[_]*const Feature {168 .index = @enumToInt(Feature.message_security_assist_extension3),
169 },169 .name = @tagName(Feature.message_security_assist_extension3),
170};170 .llvm_name = "message-security-assist-extension3",
171171 .description = "Assume that the message-security-assist extension facility 3 is installed",
172pub const feature_messageSecurityAssistExtension8 = Feature{172 .dependencies = 0,
173 .name = "messageSecurityAssistExtension8",173 };
174 .llvm_name = "message-security-assist-extension8",174 result[@enumToInt(Feature.message_security_assist_extension4)] = .{
175 .description = "Assume that the message-security-assist extension facility 8 is installed",175 .index = @enumToInt(Feature.message_security_assist_extension4),
176 .dependencies = &[_]*const Feature {176 .name = @tagName(Feature.message_security_assist_extension4),
177 },177 .llvm_name = "message-security-assist-extension4",
178};178 .description = "Assume that the message-security-assist extension facility 4 is installed",
179179 .dependencies = 0,
180pub const feature_messageSecurityAssistExtension9 = Feature{180 };
181 .name = "messageSecurityAssistExtension9",181 result[@enumToInt(Feature.message_security_assist_extension5)] = .{
182 .llvm_name = "message-security-assist-extension9",182 .index = @enumToInt(Feature.message_security_assist_extension5),
183 .description = "Assume that the message-security-assist extension facility 9 is installed",183 .name = @tagName(Feature.message_security_assist_extension5),
184 .dependencies = &[_]*const Feature {184 .llvm_name = "message-security-assist-extension5",
185 },185 .description = "Assume that the message-security-assist extension facility 5 is installed",
186};186 .dependencies = 0,
187187 };
188pub const feature_miscellaneousExtensions = Feature{188 result[@enumToInt(Feature.message_security_assist_extension7)] = .{
189 .name = "miscellaneousExtensions",189 .index = @enumToInt(Feature.message_security_assist_extension7),
190 .llvm_name = "miscellaneous-extensions",190 .name = @tagName(Feature.message_security_assist_extension7),
191 .description = "Assume that the miscellaneous-extensions facility is installed",191 .llvm_name = "message-security-assist-extension7",
192 .dependencies = &[_]*const Feature {192 .description = "Assume that the message-security-assist extension facility 7 is installed",
193 },193 .dependencies = 0,
194};194 };
195195 result[@enumToInt(Feature.message_security_assist_extension8)] = .{
196pub const feature_miscellaneousExtensions2 = Feature{196 .index = @enumToInt(Feature.message_security_assist_extension8),
197 .name = "miscellaneousExtensions2",197 .name = @tagName(Feature.message_security_assist_extension8),
198 .llvm_name = "miscellaneous-extensions-2",198 .llvm_name = "message-security-assist-extension8",
199 .description = "Assume that the miscellaneous-extensions facility 2 is installed",199 .description = "Assume that the message-security-assist extension facility 8 is installed",
200 .dependencies = &[_]*const Feature {200 .dependencies = 0,
201 },201 };
202};202 result[@enumToInt(Feature.message_security_assist_extension9)] = .{
203203 .index = @enumToInt(Feature.message_security_assist_extension9),
204pub const feature_miscellaneousExtensions3 = Feature{204 .name = @tagName(Feature.message_security_assist_extension9),
205 .name = "miscellaneousExtensions3",205 .llvm_name = "message-security-assist-extension9",
206 .llvm_name = "miscellaneous-extensions-3",206 .description = "Assume that the message-security-assist extension facility 9 is installed",
207 .description = "Assume that the miscellaneous-extensions facility 3 is installed",207 .dependencies = 0,
208 .dependencies = &[_]*const Feature {208 };
209 },209 result[@enumToInt(Feature.miscellaneous_extensions)] = .{
210};210 .index = @enumToInt(Feature.miscellaneous_extensions),
211211 .name = @tagName(Feature.miscellaneous_extensions),
212pub const feature_populationCount = Feature{212 .llvm_name = "miscellaneous-extensions",
213 .name = "populationCount",213 .description = "Assume that the miscellaneous-extensions facility is installed",
214 .llvm_name = "population-count",214 .dependencies = 0,
215 .description = "Assume that the population-count facility is installed",215 };
216 .dependencies = &[_]*const Feature {216 result[@enumToInt(Feature.miscellaneous_extensions_2)] = .{
217 },217 .index = @enumToInt(Feature.miscellaneous_extensions_2),
218};218 .name = @tagName(Feature.miscellaneous_extensions_2),
219219 .llvm_name = "miscellaneous-extensions-2",
220pub const feature_processorAssist = Feature{220 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
221 .name = "processorAssist",221 .dependencies = 0,
222 .llvm_name = "processor-assist",222 };
223 .description = "Assume that the processor-assist facility is installed",223 result[@enumToInt(Feature.miscellaneous_extensions_3)] = .{
224 .dependencies = &[_]*const Feature {224 .index = @enumToInt(Feature.miscellaneous_extensions_3),
225 },225 .name = @tagName(Feature.miscellaneous_extensions_3),
226};226 .llvm_name = "miscellaneous-extensions-3",
227227 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
228pub const feature_resetReferenceBitsMultiple = Feature{228 .dependencies = 0,
229 .name = "resetReferenceBitsMultiple",229 };
230 .llvm_name = "reset-reference-bits-multiple",230 result[@enumToInt(Feature.population_count)] = .{
231 .description = "Assume that the reset-reference-bits-multiple facility is installed",231 .index = @enumToInt(Feature.population_count),
232 .dependencies = &[_]*const Feature {232 .name = @tagName(Feature.population_count),
233 },233 .llvm_name = "population-count",
234};234 .description = "Assume that the population-count facility is installed",
235235 .dependencies = 0,
236pub const feature_transactionalExecution = Feature{236 };
237 .name = "transactionalExecution",237 result[@enumToInt(Feature.processor_assist)] = .{
238 .llvm_name = "transactional-execution",238 .index = @enumToInt(Feature.processor_assist),
239 .description = "Assume that the transactional-execution facility is installed",239 .name = @tagName(Feature.processor_assist),
240 .dependencies = &[_]*const Feature {240 .llvm_name = "processor-assist",
241 },241 .description = "Assume that the processor-assist facility is installed",
242};242 .dependencies = 0,
243243 };
244pub const feature_vector = Feature{244 result[@enumToInt(Feature.reset_reference_bits_multiple)] = .{
245 .name = "vector",245 .index = @enumToInt(Feature.reset_reference_bits_multiple),
246 .llvm_name = "vector",246 .name = @tagName(Feature.reset_reference_bits_multiple),
247 .description = "Assume that the vectory facility is installed",247 .llvm_name = "reset-reference-bits-multiple",
248 .dependencies = &[_]*const Feature {248 .description = "Assume that the reset-reference-bits-multiple facility is installed",
249 },249 .dependencies = 0,
250};250 };
251251 result[@enumToInt(Feature.transactional_execution)] = .{
252pub const feature_vectorEnhancements1 = Feature{252 .index = @enumToInt(Feature.transactional_execution),
253 .name = "vectorEnhancements1",253 .name = @tagName(Feature.transactional_execution),
254 .llvm_name = "vector-enhancements-1",254 .llvm_name = "transactional-execution",
255 .description = "Assume that the vector enhancements facility 1 is installed",255 .description = "Assume that the transactional-execution facility is installed",
256 .dependencies = &[_]*const Feature {256 .dependencies = 0,
257 },257 };
258};258 result[@enumToInt(Feature.vector)] = .{
259259 .index = @enumToInt(Feature.vector),
260pub const feature_vectorEnhancements2 = Feature{260 .name = @tagName(Feature.vector),
261 .name = "vectorEnhancements2",261 .llvm_name = "vector",
262 .llvm_name = "vector-enhancements-2",262 .description = "Assume that the vectory facility is installed",
263 .description = "Assume that the vector enhancements facility 2 is installed",263 .dependencies = 0,
264 .dependencies = &[_]*const Feature {264 };
265 },265 result[@enumToInt(Feature.vector_enhancements_1)] = .{
266};266 .index = @enumToInt(Feature.vector_enhancements_1),
267267 .name = @tagName(Feature.vector_enhancements_1),
268pub const feature_vectorPackedDecimal = Feature{268 .llvm_name = "vector-enhancements-1",
269 .name = "vectorPackedDecimal",269 .description = "Assume that the vector enhancements facility 1 is installed",
270 .llvm_name = "vector-packed-decimal",270 .dependencies = 0,
271 .description = "Assume that the vector packed decimal facility is installed",271 };
272 .dependencies = &[_]*const Feature {272 result[@enumToInt(Feature.vector_enhancements_2)] = .{
273 },273 .index = @enumToInt(Feature.vector_enhancements_2),
274};274 .name = @tagName(Feature.vector_enhancements_2),
275275 .llvm_name = "vector-enhancements-2",
276pub const feature_vectorPackedDecimalEnhancement = Feature{276 .description = "Assume that the vector enhancements facility 2 is installed",
277 .name = "vectorPackedDecimalEnhancement",277 .dependencies = 0,
278 .llvm_name = "vector-packed-decimal-enhancement",278 };
279 .description = "Assume that the vector packed decimal enhancement facility is installed",279 result[@enumToInt(Feature.vector_packed_decimal)] = .{
280 .dependencies = &[_]*const Feature {280 .index = @enumToInt(Feature.vector_packed_decimal),
281 },281 .name = @tagName(Feature.vector_packed_decimal),
282};282 .llvm_name = "vector-packed-decimal",
283283 .description = "Assume that the vector packed decimal facility is installed",
284pub const features = &[_]*const Feature {284 .dependencies = 0,
285 &feature_dfpPackedConversion,285 };
286 &feature_dfpZonedConversion,286 result[@enumToInt(Feature.vector_packed_decimal_enhancement)] = .{
287 &feature_deflateConversion,287 .index = @enumToInt(Feature.vector_packed_decimal_enhancement),
288 &feature_distinctOps,288 .name = @tagName(Feature.vector_packed_decimal_enhancement),
289 &feature_enhancedDat2,289 .llvm_name = "vector-packed-decimal-enhancement",
290 &feature_enhancedSort,290 .description = "Assume that the vector packed decimal enhancement facility is installed",
291 &feature_executionHint,291 .dependencies = 0,
292 &feature_fpExtension,292 };
293 &feature_fastSerialization,293 break :blk result;
294 &feature_guardedStorage,294};
295 &feature_highWord,295
296 &feature_insertReferenceBitsMultiple,296pub const cpu = struct {
297 &feature_interlockedAccess1,297 pub const arch10 = Cpu{
298 &feature_loadAndTrap,298 .name = "arch10",
299 &feature_loadAndZeroRightmostByte,299 .llvm_name = "arch10",
300 &feature_loadStoreOnCond,300 .features = featureSet(&[_]Feature{
301 &feature_loadStoreOnCond2,301 .dfp_zoned_conversion,
302 &feature_messageSecurityAssistExtension3,302 .distinct_ops,
303 &feature_messageSecurityAssistExtension4,303 .enhanced_dat_2,
304 &feature_messageSecurityAssistExtension5,304 .execution_hint,
305 &feature_messageSecurityAssistExtension7,305 .fast_serialization,
306 &feature_messageSecurityAssistExtension8,306 .fp_extension,
307 &feature_messageSecurityAssistExtension9,307 .high_word,
308 &feature_miscellaneousExtensions,308 .interlocked_access1,
309 &feature_miscellaneousExtensions2,309 .load_and_trap,
310 &feature_miscellaneousExtensions3,310 .load_store_on_cond,
311 &feature_populationCount,311 .message_security_assist_extension3,
312 &feature_processorAssist,312 .message_security_assist_extension4,
313 &feature_resetReferenceBitsMultiple,313 .miscellaneous_extensions,
314 &feature_transactionalExecution,314 .population_count,
315 &feature_vector,315 .processor_assist,
316 &feature_vectorEnhancements1,316 .reset_reference_bits_multiple,
317 &feature_vectorEnhancements2,317 .transactional_execution,
318 &feature_vectorPackedDecimal,318 }),
319 &feature_vectorPackedDecimalEnhancement,319 };
320};320 pub const arch11 = Cpu{
321321 .name = "arch11",
322pub const cpu_arch10 = Cpu{322 .llvm_name = "arch11",
323 .name = "arch10",323 .features = featureSet(&[_]Feature{
324 .llvm_name = "arch10",324 .dfp_packed_conversion,
325 .dependencies = &[_]*const Feature {325 .dfp_zoned_conversion,
326 &feature_dfpZonedConversion,326 .distinct_ops,
327 &feature_distinctOps,327 .enhanced_dat_2,
328 &feature_enhancedDat2,328 .execution_hint,
329 &feature_executionHint,329 .fast_serialization,
330 &feature_fpExtension,330 .fp_extension,
331 &feature_fastSerialization,331 .high_word,
332 &feature_highWord,332 .interlocked_access1,
333 &feature_interlockedAccess1,333 .load_and_trap,
334 &feature_loadAndTrap,334 .load_and_zero_rightmost_byte,
335 &feature_loadStoreOnCond,335 .load_store_on_cond,
336 &feature_messageSecurityAssistExtension3,336 .load_store_on_cond_2,
337 &feature_messageSecurityAssistExtension4,337 .message_security_assist_extension3,
338 &feature_miscellaneousExtensions,338 .message_security_assist_extension4,
339 &feature_populationCount,339 .message_security_assist_extension5,
340 &feature_processorAssist,340 .miscellaneous_extensions,
341 &feature_resetReferenceBitsMultiple,341 .population_count,
342 &feature_transactionalExecution,342 .processor_assist,
343 },343 .reset_reference_bits_multiple,
344};344 .transactional_execution,
345345 .vector,
346pub const cpu_arch11 = Cpu{346 }),
347 .name = "arch11",347 };
348 .llvm_name = "arch11",348 pub const arch12 = Cpu{
349 .dependencies = &[_]*const Feature {349 .name = "arch12",
350 &feature_dfpPackedConversion,350 .llvm_name = "arch12",
351 &feature_dfpZonedConversion,351 .features = featureSet(&[_]Feature{
352 &feature_distinctOps,352 .dfp_packed_conversion,
353 &feature_enhancedDat2,353 .dfp_zoned_conversion,
354 &feature_executionHint,354 .distinct_ops,
355 &feature_fpExtension,355 .enhanced_dat_2,
356 &feature_fastSerialization,356 .execution_hint,
357 &feature_highWord,357 .fast_serialization,
358 &feature_interlockedAccess1,358 .fp_extension,
359 &feature_loadAndTrap,359 .guarded_storage,
360 &feature_loadAndZeroRightmostByte,360 .high_word,
361 &feature_loadStoreOnCond,361 .insert_reference_bits_multiple,
362 &feature_loadStoreOnCond2,362 .interlocked_access1,
363 &feature_messageSecurityAssistExtension3,363 .load_and_trap,
364 &feature_messageSecurityAssistExtension4,364 .load_and_zero_rightmost_byte,
365 &feature_messageSecurityAssistExtension5,365 .load_store_on_cond,
366 &feature_miscellaneousExtensions,366 .load_store_on_cond_2,
367 &feature_populationCount,367 .message_security_assist_extension3,
368 &feature_processorAssist,368 .message_security_assist_extension4,
369 &feature_resetReferenceBitsMultiple,369 .message_security_assist_extension5,
370 &feature_transactionalExecution,370 .message_security_assist_extension7,
371 &feature_vector,371 .message_security_assist_extension8,
372 },372 .miscellaneous_extensions,
373};373 .miscellaneous_extensions_2,
374374 .population_count,
375pub const cpu_arch12 = Cpu{375 .processor_assist,
376 .name = "arch12",376 .reset_reference_bits_multiple,
377 .llvm_name = "arch12",377 .transactional_execution,
378 .dependencies = &[_]*const Feature {378 .vector,
379 &feature_dfpPackedConversion,379 .vector_enhancements_1,
380 &feature_dfpZonedConversion,380 .vector_packed_decimal,
381 &feature_distinctOps,381 }),
382 &feature_enhancedDat2,382 };
383 &feature_executionHint,383 pub const arch13 = Cpu{
384 &feature_fpExtension,384 .name = "arch13",
385 &feature_fastSerialization,385 .llvm_name = "arch13",
386 &feature_guardedStorage,386 .features = featureSet(&[_]Feature{
387 &feature_highWord,387 .deflate_conversion,
388 &feature_insertReferenceBitsMultiple,388 .dfp_packed_conversion,
389 &feature_interlockedAccess1,389 .dfp_zoned_conversion,
390 &feature_loadAndTrap,390 .distinct_ops,
391 &feature_loadAndZeroRightmostByte,391 .enhanced_dat_2,
392 &feature_loadStoreOnCond,392 .enhanced_sort,
393 &feature_loadStoreOnCond2,393 .execution_hint,
394 &feature_messageSecurityAssistExtension3,394 .fast_serialization,
395 &feature_messageSecurityAssistExtension4,395 .fp_extension,
396 &feature_messageSecurityAssistExtension5,396 .guarded_storage,
397 &feature_messageSecurityAssistExtension7,397 .high_word,
398 &feature_messageSecurityAssistExtension8,398 .insert_reference_bits_multiple,
399 &feature_miscellaneousExtensions,399 .interlocked_access1,
400 &feature_miscellaneousExtensions2,400 .load_and_trap,
401 &feature_populationCount,401 .load_and_zero_rightmost_byte,
402 &feature_processorAssist,402 .load_store_on_cond,
403 &feature_resetReferenceBitsMultiple,403 .load_store_on_cond_2,
404 &feature_transactionalExecution,404 .message_security_assist_extension3,
405 &feature_vector,405 .message_security_assist_extension4,
406 &feature_vectorEnhancements1,406 .message_security_assist_extension5,
407 &feature_vectorPackedDecimal,407 .message_security_assist_extension7,
408 },408 .message_security_assist_extension8,
409};409 .message_security_assist_extension9,
410410 .miscellaneous_extensions,
411pub const cpu_arch13 = Cpu{411 .miscellaneous_extensions_2,
412 .name = "arch13",412 .miscellaneous_extensions_3,
413 .llvm_name = "arch13",413 .population_count,
414 .dependencies = &[_]*const Feature {414 .processor_assist,
415 &feature_dfpPackedConversion,415 .reset_reference_bits_multiple,
416 &feature_dfpZonedConversion,416 .transactional_execution,
417 &feature_deflateConversion,417 .vector,
418 &feature_distinctOps,418 .vector_enhancements_1,
419 &feature_enhancedDat2,419 .vector_enhancements_2,
420 &feature_enhancedSort,420 .vector_packed_decimal,
421 &feature_executionHint,421 .vector_packed_decimal_enhancement,
422 &feature_fpExtension,422 }),
423 &feature_fastSerialization,423 };
424 &feature_guardedStorage,424 pub const arch8 = Cpu{
425 &feature_highWord,425 .name = "arch8",
426 &feature_insertReferenceBitsMultiple,426 .llvm_name = "arch8",
427 &feature_interlockedAccess1,427 .features = 0,
428 &feature_loadAndTrap,428 };
429 &feature_loadAndZeroRightmostByte,429 pub const arch9 = Cpu{
430 &feature_loadStoreOnCond,430 .name = "arch9",
431 &feature_loadStoreOnCond2,431 .llvm_name = "arch9",
432 &feature_messageSecurityAssistExtension3,432 .features = featureSet(&[_]Feature{
433 &feature_messageSecurityAssistExtension4,433 .distinct_ops,
434 &feature_messageSecurityAssistExtension5,434 .fast_serialization,
435 &feature_messageSecurityAssistExtension7,435 .fp_extension,
436 &feature_messageSecurityAssistExtension8,436 .high_word,
437 &feature_messageSecurityAssistExtension9,437 .interlocked_access1,
438 &feature_miscellaneousExtensions,438 .load_store_on_cond,
439 &feature_miscellaneousExtensions2,439 .message_security_assist_extension3,
440 &feature_miscellaneousExtensions3,440 .message_security_assist_extension4,
441 &feature_populationCount,441 .population_count,
442 &feature_processorAssist,442 .reset_reference_bits_multiple,
443 &feature_resetReferenceBitsMultiple,443 }),
444 &feature_transactionalExecution,444 };
445 &feature_vector,445 pub const generic = Cpu{
446 &feature_vectorEnhancements1,446 .name = "generic",
447 &feature_vectorEnhancements2,447 .llvm_name = "generic",
448 &feature_vectorPackedDecimal,448 .features = 0,
449 &feature_vectorPackedDecimalEnhancement,449 };
450 },450 pub const z10 = Cpu{
451};451 .name = "z10",
452452 .llvm_name = "z10",
453pub const cpu_arch8 = Cpu{453 .features = 0,
454 .name = "arch8",454 };
455 .llvm_name = "arch8",455 pub const z13 = Cpu{
456 .dependencies = &[_]*const Feature {456 .name = "z13",
457 },457 .llvm_name = "z13",
458};458 .features = featureSet(&[_]Feature{
459459 .dfp_packed_conversion,
460pub const cpu_arch9 = Cpu{460 .dfp_zoned_conversion,
461 .name = "arch9",461 .distinct_ops,
462 .llvm_name = "arch9",462 .enhanced_dat_2,
463 .dependencies = &[_]*const Feature {463 .execution_hint,
464 &feature_distinctOps,464 .fast_serialization,
465 &feature_fpExtension,465 .fp_extension,
466 &feature_fastSerialization,466 .high_word,
467 &feature_highWord,467 .interlocked_access1,
468 &feature_interlockedAccess1,468 .load_and_trap,
469 &feature_loadStoreOnCond,469 .load_and_zero_rightmost_byte,
470 &feature_messageSecurityAssistExtension3,470 .load_store_on_cond,
471 &feature_messageSecurityAssistExtension4,471 .load_store_on_cond_2,
472 &feature_populationCount,472 .message_security_assist_extension3,
473 &feature_resetReferenceBitsMultiple,473 .message_security_assist_extension4,
474 },474 .message_security_assist_extension5,
475};475 .miscellaneous_extensions,
476476 .population_count,
477pub const cpu_generic = Cpu{477 .processor_assist,
478 .name = "generic",478 .reset_reference_bits_multiple,
479 .llvm_name = "generic",479 .transactional_execution,
480 .dependencies = &[_]*const Feature {480 .vector,
481 },481 }),
482};482 };
483483 pub const z14 = Cpu{
484pub const cpu_z10 = Cpu{484 .name = "z14",
485 .name = "z10",485 .llvm_name = "z14",
486 .llvm_name = "z10",486 .features = featureSet(&[_]Feature{
487 .dependencies = &[_]*const Feature {487 .dfp_packed_conversion,
488 },488 .dfp_zoned_conversion,
489};489 .distinct_ops,
490490 .enhanced_dat_2,
491pub const cpu_z13 = Cpu{491 .execution_hint,
492 .name = "z13",492 .fast_serialization,
493 .llvm_name = "z13",493 .fp_extension,
494 .dependencies = &[_]*const Feature {494 .guarded_storage,
495 &feature_dfpPackedConversion,495 .high_word,
496 &feature_dfpZonedConversion,496 .insert_reference_bits_multiple,
497 &feature_distinctOps,497 .interlocked_access1,
498 &feature_enhancedDat2,498 .load_and_trap,
499 &feature_executionHint,499 .load_and_zero_rightmost_byte,
500 &feature_fpExtension,500 .load_store_on_cond,
501 &feature_fastSerialization,501 .load_store_on_cond_2,
502 &feature_highWord,502 .message_security_assist_extension3,
503 &feature_interlockedAccess1,503 .message_security_assist_extension4,
504 &feature_loadAndTrap,504 .message_security_assist_extension5,
505 &feature_loadAndZeroRightmostByte,505 .message_security_assist_extension7,
506 &feature_loadStoreOnCond,506 .message_security_assist_extension8,
507 &feature_loadStoreOnCond2,507 .miscellaneous_extensions,
508 &feature_messageSecurityAssistExtension3,508 .miscellaneous_extensions_2,
509 &feature_messageSecurityAssistExtension4,509 .population_count,
510 &feature_messageSecurityAssistExtension5,510 .processor_assist,
511 &feature_miscellaneousExtensions,511 .reset_reference_bits_multiple,
512 &feature_populationCount,512 .transactional_execution,
513 &feature_processorAssist,513 .vector,
514 &feature_resetReferenceBitsMultiple,514 .vector_enhancements_1,
515 &feature_transactionalExecution,515 .vector_packed_decimal,
516 &feature_vector,516 }),
517 },517 };
518};518 pub const z196 = Cpu{
519519 .name = "z196",
520pub const cpu_z14 = Cpu{520 .llvm_name = "z196",
521 .name = "z14",521 .features = featureSet(&[_]Feature{
522 .llvm_name = "z14",522 .distinct_ops,
523 .dependencies = &[_]*const Feature {523 .fast_serialization,
524 &feature_dfpPackedConversion,524 .fp_extension,
525 &feature_dfpZonedConversion,525 .high_word,
526 &feature_distinctOps,526 .interlocked_access1,
527 &feature_enhancedDat2,527 .load_store_on_cond,
528 &feature_executionHint,528 .message_security_assist_extension3,
529 &feature_fpExtension,529 .message_security_assist_extension4,
530 &feature_fastSerialization,530 .population_count,
531 &feature_guardedStorage,531 .reset_reference_bits_multiple,
532 &feature_highWord,532 }),
533 &feature_insertReferenceBitsMultiple,533 };
534 &feature_interlockedAccess1,534 pub const zEC12 = Cpu{
535 &feature_loadAndTrap,535 .name = "zEC12",
536 &feature_loadAndZeroRightmostByte,536 .llvm_name = "zEC12",
537 &feature_loadStoreOnCond,537 .features = featureSet(&[_]Feature{
538 &feature_loadStoreOnCond2,538 .dfp_zoned_conversion,
539 &feature_messageSecurityAssistExtension3,539 .distinct_ops,
540 &feature_messageSecurityAssistExtension4,540 .enhanced_dat_2,
541 &feature_messageSecurityAssistExtension5,541 .execution_hint,
542 &feature_messageSecurityAssistExtension7,542 .fast_serialization,
543 &feature_messageSecurityAssistExtension8,543 .fp_extension,
544 &feature_miscellaneousExtensions,544 .high_word,
545 &feature_miscellaneousExtensions2,545 .interlocked_access1,
546 &feature_populationCount,546 .load_and_trap,
547 &feature_processorAssist,547 .load_store_on_cond,
548 &feature_resetReferenceBitsMultiple,548 .message_security_assist_extension3,
549 &feature_transactionalExecution,549 .message_security_assist_extension4,
550 &feature_vector,550 .miscellaneous_extensions,
551 &feature_vectorEnhancements1,551 .population_count,
552 &feature_vectorPackedDecimal,552 .processor_assist,
553 },553 .reset_reference_bits_multiple,
554};554 .transactional_execution,
555555 }),
556pub const cpu_z196 = Cpu{556 };
557 .name = "z196",557};
558 .llvm_name = "z196",558
559 .dependencies = &[_]*const Feature {559/// All systemz CPUs, sorted alphabetically by name.
560 &feature_distinctOps,560/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
561 &feature_fpExtension,561/// compiler has inefficient memory and CPU usage, affecting build times.
562 &feature_fastSerialization,562pub const all_cpus = &[_]*const Cpu{
563 &feature_highWord,563 &cpu.arch10,
564 &feature_interlockedAccess1,564 &cpu.arch11,
565 &feature_loadStoreOnCond,565 &cpu.arch12,
566 &feature_messageSecurityAssistExtension3,566 &cpu.arch13,
567 &feature_messageSecurityAssistExtension4,567 &cpu.arch8,
568 &feature_populationCount,568 &cpu.arch9,
569 &feature_resetReferenceBitsMultiple,569 &cpu.generic,
570 },570 &cpu.z10,
571};571 &cpu.z13,
572572 &cpu.z14,
573pub const cpu_zEC12 = Cpu{573 &cpu.z196,
574 .name = "zEC12",574 &cpu.zEC12,
575 .llvm_name = "zEC12",
576 .dependencies = &[_]*const Feature {
577 &feature_dfpZonedConversion,
578 &feature_distinctOps,
579 &feature_enhancedDat2,
580 &feature_executionHint,
581 &feature_fpExtension,
582 &feature_fastSerialization,
583 &feature_highWord,
584 &feature_interlockedAccess1,
585 &feature_loadAndTrap,
586 &feature_loadStoreOnCond,
587 &feature_messageSecurityAssistExtension3,
588 &feature_messageSecurityAssistExtension4,
589 &feature_miscellaneousExtensions,
590 &feature_populationCount,
591 &feature_processorAssist,
592 &feature_resetReferenceBitsMultiple,
593 &feature_transactionalExecution,
594 },
595};
596
597pub const cpus = &[_]*const Cpu {
598 &cpu_arch10,
599 &cpu_arch11,
600 &cpu_arch12,
601 &cpu_arch13,
602 &cpu_arch8,
603 &cpu_arch9,
604 &cpu_generic,
605 &cpu_z10,
606 &cpu_z13,
607 &cpu_z14,
608 &cpu_z196,
609 &cpu_zEC12,
610};575};
lib/std/target/wasm.zig+120-119
...@@ -1,128 +1,129 @@...@@ -1,128 +1,129 @@
1const Feature = @import("std").target.Feature;1const std = @import("../std.zig");
2const Cpu = @import("std").target.Cpu;2const Cpu = std.Target.Cpu;
33
4pub const feature_atomics = Feature{4pub const Feature = enum {
5 .name = "atomics",5 atomics,
6 .llvm_name = "atomics",6 bulk_memory,
7 .description = "Enable Atomics",7 exception_handling,
8 .dependencies = &[_]*const Feature {8 multivalue,
9 },9 mutable_globals,
10 nontrapping_fptoint,
11 sign_ext,
12 simd128,
13 tail_call,
14 unimplemented_simd128,
10};15};
1116
12pub const feature_bulkMemory = Feature{17pub usingnamespace Cpu.Feature.feature_set_fns(Feature);
13 .name = "bulkMemory",
14 .llvm_name = "bulk-memory",
15 .description = "Enable bulk memory operations",
16 .dependencies = &[_]*const Feature {
17 },
18};
19
20pub const feature_exceptionHandling = Feature{
21 .name = "exceptionHandling",
22 .llvm_name = "exception-handling",
23 .description = "Enable Wasm exception handling",
24 .dependencies = &[_]*const Feature {
25 },
26};
27
28pub const feature_multivalue = Feature{
29 .name = "multivalue",
30 .llvm_name = "multivalue",
31 .description = "Enable multivalue blocks, instructions, and functions",
32 .dependencies = &[_]*const Feature {
33 },
34};
35
36pub const feature_mutableGlobals = Feature{
37 .name = "mutableGlobals",
38 .llvm_name = "mutable-globals",
39 .description = "Enable mutable globals",
40 .dependencies = &[_]*const Feature {
41 },
42};
43
44pub const feature_nontrappingFptoint = Feature{
45 .name = "nontrappingFptoint",
46 .llvm_name = "nontrapping-fptoint",
47 .description = "Enable non-trapping float-to-int conversion operators",
48 .dependencies = &[_]*const Feature {
49 },
50};
51
52pub const feature_simd128 = Feature{
53 .name = "simd128",
54 .llvm_name = "simd128",
55 .description = "Enable 128-bit SIMD",
56 .dependencies = &[_]*const Feature {
57 },
58};
59
60pub const feature_signExt = Feature{
61 .name = "signExt",
62 .llvm_name = "sign-ext",
63 .description = "Enable sign extension operators",
64 .dependencies = &[_]*const Feature {
65 },
66};
67
68pub const feature_tailCall = Feature{
69 .name = "tailCall",
70 .llvm_name = "tail-call",
71 .description = "Enable tail call instructions",
72 .dependencies = &[_]*const Feature {
73 },
74};
75
76pub const feature_unimplementedSimd128 = Feature{
77 .name = "unimplementedSimd128",
78 .llvm_name = "unimplemented-simd128",
79 .description = "Enable 128-bit SIMD not yet implemented in engines",
80 .dependencies = &[_]*const Feature {
81 &feature_simd128,
82 },
83};
84
85pub const features = &[_]*const Feature {
86 &feature_atomics,
87 &feature_bulkMemory,
88 &feature_exceptionHandling,
89 &feature_multivalue,
90 &feature_mutableGlobals,
91 &feature_nontrappingFptoint,
92 &feature_simd128,
93 &feature_signExt,
94 &feature_tailCall,
95 &feature_unimplementedSimd128,
96};
97
98pub const cpu_bleedingEdge = Cpu{
99 .name = "bleedingEdge",
100 .llvm_name = "bleeding-edge",
101 .dependencies = &[_]*const Feature {
102 &feature_atomics,
103 &feature_mutableGlobals,
104 &feature_nontrappingFptoint,
105 &feature_simd128,
106 &feature_signExt,
107 },
108};
10918
110pub const cpu_generic = Cpu{19pub const all_features = blk: {
111 .name = "generic",20 const len = @typeInfo(Feature).Enum.fields.len;
112 .llvm_name = "generic",21 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
113 .dependencies = &[_]*const Feature {22 var result: [len]Cpu.Feature = undefined;
114 },23 result[@enumToInt(Feature.atomics)] = .{
24 .index = @enumToInt(Feature.atomics),
25 .name = @tagName(Feature.atomics),
26 .llvm_name = "atomics",
27 .description = "Enable Atomics",
28 .dependencies = 0,
29 };
30 result[@enumToInt(Feature.bulk_memory)] = .{
31 .index = @enumToInt(Feature.bulk_memory),
32 .name = @tagName(Feature.bulk_memory),
33 .llvm_name = "bulk-memory",
34 .description = "Enable bulk memory operations",
35 .dependencies = 0,
36 };
37 result[@enumToInt(Feature.exception_handling)] = .{
38 .index = @enumToInt(Feature.exception_handling),
39 .name = @tagName(Feature.exception_handling),
40 .llvm_name = "exception-handling",
41 .description = "Enable Wasm exception handling",
42 .dependencies = 0,
43 };
44 result[@enumToInt(Feature.multivalue)] = .{
45 .index = @enumToInt(Feature.multivalue),
46 .name = @tagName(Feature.multivalue),
47 .llvm_name = "multivalue",
48 .description = "Enable multivalue blocks, instructions, and functions",
49 .dependencies = 0,
50 };
51 result[@enumToInt(Feature.mutable_globals)] = .{
52 .index = @enumToInt(Feature.mutable_globals),
53 .name = @tagName(Feature.mutable_globals),
54 .llvm_name = "mutable-globals",
55 .description = "Enable mutable globals",
56 .dependencies = 0,
57 };
58 result[@enumToInt(Feature.nontrapping_fptoint)] = .{
59 .index = @enumToInt(Feature.nontrapping_fptoint),
60 .name = @tagName(Feature.nontrapping_fptoint),
61 .llvm_name = "nontrapping-fptoint",
62 .description = "Enable non-trapping float-to-int conversion operators",
63 .dependencies = 0,
64 };
65 result[@enumToInt(Feature.sign_ext)] = .{
66 .index = @enumToInt(Feature.sign_ext),
67 .name = @tagName(Feature.sign_ext),
68 .llvm_name = "sign-ext",
69 .description = "Enable sign extension operators",
70 .dependencies = 0,
71 };
72 result[@enumToInt(Feature.simd128)] = .{
73 .index = @enumToInt(Feature.simd128),
74 .name = @tagName(Feature.simd128),
75 .llvm_name = "simd128",
76 .description = "Enable 128-bit SIMD",
77 .dependencies = 0,
78 };
79 result[@enumToInt(Feature.tail_call)] = .{
80 .index = @enumToInt(Feature.tail_call),
81 .name = @tagName(Feature.tail_call),
82 .llvm_name = "tail-call",
83 .description = "Enable tail call instructions",
84 .dependencies = 0,
85 };
86 result[@enumToInt(Feature.unimplemented_simd128)] = .{
87 .index = @enumToInt(Feature.unimplemented_simd128),
88 .name = @tagName(Feature.unimplemented_simd128),
89 .llvm_name = "unimplemented-simd128",
90 .description = "Enable 128-bit SIMD not yet implemented in engines",
91 .dependencies = featureSet(&[_]Feature{
92 .simd128,
93 }),
94 };
95 break :blk result;
115};96};
11697
117pub const cpu_mvp = Cpu{98pub const cpu = struct {
118 .name = "mvp",99 pub const bleeding_edge = Cpu{
119 .llvm_name = "mvp",100 .name = "bleeding_edge",
120 .dependencies = &[_]*const Feature {101 .llvm_name = "bleeding-edge",
121 },102 .features = featureSet(&[_]Feature{
103 .atomics,
104 .mutable_globals,
105 .nontrapping_fptoint,
106 .sign_ext,
107 .simd128,
108 }),
109 };
110 pub const generic = Cpu{
111 .name = "generic",
112 .llvm_name = "generic",
113 .features = 0,
114 };
115 pub const mvp = Cpu{
116 .name = "mvp",
117 .llvm_name = "mvp",
118 .features = 0,
119 };
122};120};
123121
124pub const cpus = &[_]*const Cpu {122/// All wasm CPUs, sorted alphabetically by name.
125 &cpu_bleedingEdge,123/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
126 &cpu_generic,124/// compiler has inefficient memory and CPU usage, affecting build times.
127 &cpu_mvp,125pub const all_cpus = &[_]*const Cpu{
126 &cpu.bleeding_edge,
127 &cpu.generic,
128 &cpu.mvp,
128};129};
lib/std/target/x86.zig+696-964
...@@ -108,12 +108,12 @@ pub const Feature = enum {...@@ -108,12 +108,12 @@ pub const Feature = enum {
108 slow_unaligned_mem_32,108 slow_unaligned_mem_32,
109 soft_float,109 soft_float,
110 sse,110 sse,
111 sse_unaligned_mem,
111 sse2,112 sse2,
112 sse3,113 sse3,
113 sse4_1,114 sse4_1,
114 sse4_2,115 sse4_2,
115 sse4a,116 sse4a,
116 sse_unaligned_mem,
117 ssse3,117 ssse3,
118 tbm,118 tbm,
119 vaes,119 vaes,
...@@ -134,7 +134,6 @@ pub const all_features = blk: {...@@ -134,7 +134,6 @@ pub 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 <= @typeInfo(Cpu.Feature.Set).Int.bits);
136 var result: [len]Cpu.Feature = undefined;136 var result: [len]Cpu.Feature = undefined;
137
138 result[@enumToInt(Feature.@"16bit_mode")] = .{137 result[@enumToInt(Feature.@"16bit_mode")] = .{
139 .index = @enumToInt(Feature.@"16bit_mode"),138 .index = @enumToInt(Feature.@"16bit_mode"),
140 .name = @tagName(Feature.@"16bit_mode"),139 .name = @tagName(Feature.@"16bit_mode"),
...@@ -142,7 +141,6 @@ pub const all_features = blk: {...@@ -142,7 +141,6 @@ pub const all_features = blk: {
142 .description = "16-bit mode (i8086)",141 .description = "16-bit mode (i8086)",
143 .dependencies = 0,142 .dependencies = 0,
144 };143 };
145
146 result[@enumToInt(Feature.@"32bit_mode")] = .{144 result[@enumToInt(Feature.@"32bit_mode")] = .{
147 .index = @enumToInt(Feature.@"32bit_mode"),145 .index = @enumToInt(Feature.@"32bit_mode"),
148 .name = @tagName(Feature.@"32bit_mode"),146 .name = @tagName(Feature.@"32bit_mode"),
...@@ -150,7 +148,6 @@ pub const all_features = blk: {...@@ -150,7 +148,6 @@ pub const all_features = blk: {
150 .description = "32-bit mode (80386)",148 .description = "32-bit mode (80386)",
151 .dependencies = 0,149 .dependencies = 0,
152 };150 };
153
154 result[@enumToInt(Feature.@"3dnow")] = .{151 result[@enumToInt(Feature.@"3dnow")] = .{
155 .index = @enumToInt(Feature.@"3dnow"),152 .index = @enumToInt(Feature.@"3dnow"),
156 .name = @tagName(Feature.@"3dnow"),153 .name = @tagName(Feature.@"3dnow"),
...@@ -160,17 +157,15 @@ pub const all_features = blk: {...@@ -160,17 +157,15 @@ pub const all_features = blk: {
160 .mmx,157 .mmx,
161 }),158 }),
162 };159 };
163
164 result[@enumToInt(Feature.@"3dnowa")] = .{160 result[@enumToInt(Feature.@"3dnowa")] = .{
165 .index = @enumToInt(Feature.@"3dnowa"),161 .index = @enumToInt(Feature.@"3dnowa"),
166 .name = @tagName(Feature.@"3dnowa"),162 .name = @tagName(Feature.@"3dnowa"),
167 .llvm_name = "3dnowa",163 .llvm_name = "3dnowa",
168 .description = "Enable 3DNow! Athlon instructions",164 .description = "Enable 3DNow! Athlon instructions",
169 .dependencies = featureSet(&[_]Feature{165 .dependencies = featureSet(&[_]Feature{
170 .mmx,166 .@"3dnow",
171 }),167 }),
172 };168 };
173
174 result[@enumToInt(Feature.@"64bit")] = .{169 result[@enumToInt(Feature.@"64bit")] = .{
175 .index = @enumToInt(Feature.@"64bit"),170 .index = @enumToInt(Feature.@"64bit"),
176 .name = @tagName(Feature.@"64bit"),171 .name = @tagName(Feature.@"64bit"),
...@@ -178,7 +173,6 @@ pub const all_features = blk: {...@@ -178,7 +173,6 @@ pub const all_features = blk: {
178 .description = "Support 64-bit instructions",173 .description = "Support 64-bit instructions",
179 .dependencies = 0,174 .dependencies = 0,
180 };175 };
181
182 result[@enumToInt(Feature.@"64bit_mode")] = .{176 result[@enumToInt(Feature.@"64bit_mode")] = .{
183 .index = @enumToInt(Feature.@"64bit_mode"),177 .index = @enumToInt(Feature.@"64bit_mode"),
184 .name = @tagName(Feature.@"64bit_mode"),178 .name = @tagName(Feature.@"64bit_mode"),
...@@ -186,167 +180,233 @@ pub const all_features = blk: {...@@ -186,167 +180,233 @@ pub const all_features = blk: {
186 .description = "64-bit mode (x86_64)",180 .description = "64-bit mode (x86_64)",
187 .dependencies = 0,181 .dependencies = 0,
188 };182 };
189
190 result[@enumToInt(Feature.adx)] = .{183 result[@enumToInt(Feature.adx)] = .{
191 .index = @enumToInt(Feature.adx),184 .index = @enumToInt(Feature.adx),
192 .name = @tagName(Feature.adx),185 .name = @tagName(Feature.adx),
193 .llvm_name = "adx",186 .llvm_name = "adx",
194 .description = "Support ADX instructions",187 .description = "Support ADX instructions",
195 .dependencies = featureSet(&[_]Feature{}),188 .dependencies = 0,
196 };189 };
197
198 result[@enumToInt(Feature.aes)] = .{190 result[@enumToInt(Feature.aes)] = .{
199 .index = @enumToInt(Feature.aes),191 .index = @enumToInt(Feature.aes),
200 .name = @tagName(Feature.aes),192 .name = @tagName(Feature.aes),
201 .llvm_name = "aes",193 .llvm_name = "aes",
202 .description = "Enable AES instructions",194 .description = "Enable AES instructions",
203 .dependencies = featureSet(&[_]Feature{195 .dependencies = featureSet(&[_]Feature{
204 .sse,196 .sse2,
205 }),197 }),
206 };198 };
207
208 result[@enumToInt(Feature.avx)] = .{199 result[@enumToInt(Feature.avx)] = .{
209 .index = @enumToInt(Feature.avx),200 .index = @enumToInt(Feature.avx),
210 .name = @tagName(Feature.avx),201 .name = @tagName(Feature.avx),
211 .llvm_name = "avx",202 .llvm_name = "avx",
212 .description = "Enable AVX instructions",203 .description = "Enable AVX instructions",
213 .dependencies = featureSet(&[_]Feature{204 .dependencies = featureSet(&[_]Feature{
214 .sse,205 .sse4_2,
215 }),206 }),
216 };207 };
217
218 result[@enumToInt(Feature.avx2)] = .{208 result[@enumToInt(Feature.avx2)] = .{
219 .index = @enumToInt(Feature.avx2),209 .index = @enumToInt(Feature.avx2),
220 .name = @tagName(Feature.avx2),210 .name = @tagName(Feature.avx2),
221 .llvm_name = "avx2",211 .llvm_name = "avx2",
222 .description = "Enable AVX2 instructions",212 .description = "Enable AVX2 instructions",
223 .dependencies = featureSet(&[_]Feature{213 .dependencies = featureSet(&[_]Feature{
224 .sse,214 .avx,
225 }),
226 };
227
228 result[@enumToInt(Feature.avx512f)] = .{
229 .index = @enumToInt(Feature.avx512f),
230 .name = @tagName(Feature.avx512f),
231 .llvm_name = "avx512f",
232 .description = "Enable AVX-512 instructions",
233 .dependencies = featureSet(&[_]Feature{
234 .sse,
235 }),215 }),
236 };216 };
237
238 result[@enumToInt(Feature.avx512bf16)] = .{217 result[@enumToInt(Feature.avx512bf16)] = .{
239 .index = @enumToInt(Feature.avx512bf16),218 .index = @enumToInt(Feature.avx512bf16),
240 .name = @tagName(Feature.avx512bf16),219 .name = @tagName(Feature.avx512bf16),
241 .llvm_name = "avx512bf16",220 .llvm_name = "avx512bf16",
242 .description = "Support bfloat16 floating point",221 .description = "Support bfloat16 floating point",
243 .dependencies = featureSet(&[_]Feature{222 .dependencies = featureSet(&[_]Feature{
244 .sse,223 .avx512bw,
245 }),224 }),
246 };225 };
247
248 result[@enumToInt(Feature.avx512bitalg)] = .{226 result[@enumToInt(Feature.avx512bitalg)] = .{
249 .index = @enumToInt(Feature.avx512bitalg),227 .index = @enumToInt(Feature.avx512bitalg),
250 .name = @tagName(Feature.avx512bitalg),228 .name = @tagName(Feature.avx512bitalg),
251 .llvm_name = "avx512bitalg",229 .llvm_name = "avx512bitalg",
252 .description = "Enable AVX-512 Bit Algorithms",230 .description = "Enable AVX-512 Bit Algorithms",
253 .dependencies = featureSet(&[_]Feature{231 .dependencies = featureSet(&[_]Feature{
254 .sse,232 .avx512bw,
233 }),
234 };
235 result[@enumToInt(Feature.avx512bw)] = .{
236 .index = @enumToInt(Feature.avx512bw),
237 .name = @tagName(Feature.avx512bw),
238 .llvm_name = "avx512bw",
239 .description = "Enable AVX-512 Byte and Word Instructions",
240 .dependencies = featureSet(&[_]Feature{
241 .avx512f,
242 }),
243 };
244 result[@enumToInt(Feature.avx512cd)] = .{
245 .index = @enumToInt(Feature.avx512cd),
246 .name = @tagName(Feature.avx512cd),
247 .llvm_name = "avx512cd",
248 .description = "Enable AVX-512 Conflict Detection Instructions",
249 .dependencies = featureSet(&[_]Feature{
250 .avx512f,
251 }),
252 };
253 result[@enumToInt(Feature.avx512dq)] = .{
254 .index = @enumToInt(Feature.avx512dq),
255 .name = @tagName(Feature.avx512dq),
256 .llvm_name = "avx512dq",
257 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
258 .dependencies = featureSet(&[_]Feature{
259 .avx512f,
260 }),
261 };
262 result[@enumToInt(Feature.avx512er)] = .{
263 .index = @enumToInt(Feature.avx512er),
264 .name = @tagName(Feature.avx512er),
265 .llvm_name = "avx512er",
266 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
267 .dependencies = featureSet(&[_]Feature{
268 .avx512f,
269 }),
270 };
271 result[@enumToInt(Feature.avx512f)] = .{
272 .index = @enumToInt(Feature.avx512f),
273 .name = @tagName(Feature.avx512f),
274 .llvm_name = "avx512f",
275 .description = "Enable AVX-512 instructions",
276 .dependencies = featureSet(&[_]Feature{
277 .avx2,
278 .f16c,
279 .fma,
280 }),
281 };
282 result[@enumToInt(Feature.avx512ifma)] = .{
283 .index = @enumToInt(Feature.avx512ifma),
284 .name = @tagName(Feature.avx512ifma),
285 .llvm_name = "avx512ifma",
286 .description = "Enable AVX-512 Integer Fused Multiple-Add",
287 .dependencies = featureSet(&[_]Feature{
288 .avx512f,
289 }),
290 };
291 result[@enumToInt(Feature.avx512pf)] = .{
292 .index = @enumToInt(Feature.avx512pf),
293 .name = @tagName(Feature.avx512pf),
294 .llvm_name = "avx512pf",
295 .description = "Enable AVX-512 PreFetch Instructions",
296 .dependencies = featureSet(&[_]Feature{
297 .avx512f,
298 }),
299 };
300 result[@enumToInt(Feature.avx512vbmi)] = .{
301 .index = @enumToInt(Feature.avx512vbmi),
302 .name = @tagName(Feature.avx512vbmi),
303 .llvm_name = "avx512vbmi",
304 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
305 .dependencies = featureSet(&[_]Feature{
306 .avx512bw,
307 }),
308 };
309 result[@enumToInt(Feature.avx512vbmi2)] = .{
310 .index = @enumToInt(Feature.avx512vbmi2),
311 .name = @tagName(Feature.avx512vbmi2),
312 .llvm_name = "avx512vbmi2",
313 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
314 .dependencies = featureSet(&[_]Feature{
315 .avx512bw,
316 }),
317 };
318 result[@enumToInt(Feature.avx512vl)] = .{
319 .index = @enumToInt(Feature.avx512vl),
320 .name = @tagName(Feature.avx512vl),
321 .llvm_name = "avx512vl",
322 .description = "Enable AVX-512 Vector Length eXtensions",
323 .dependencies = featureSet(&[_]Feature{
324 .avx512f,
325 }),
326 };
327 result[@enumToInt(Feature.avx512vnni)] = .{
328 .index = @enumToInt(Feature.avx512vnni),
329 .name = @tagName(Feature.avx512vnni),
330 .llvm_name = "avx512vnni",
331 .description = "Enable AVX-512 Vector Neural Network Instructions",
332 .dependencies = featureSet(&[_]Feature{
333 .avx512f,
334 }),
335 };
336 result[@enumToInt(Feature.avx512vp2intersect)] = .{
337 .index = @enumToInt(Feature.avx512vp2intersect),
338 .name = @tagName(Feature.avx512vp2intersect),
339 .llvm_name = "avx512vp2intersect",
340 .description = "Enable AVX-512 vp2intersect",
341 .dependencies = featureSet(&[_]Feature{
342 .avx512f,
343 }),
344 };
345 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
346 .index = @enumToInt(Feature.avx512vpopcntdq),
347 .name = @tagName(Feature.avx512vpopcntdq),
348 .llvm_name = "avx512vpopcntdq",
349 .description = "Enable AVX-512 Population Count Instructions",
350 .dependencies = featureSet(&[_]Feature{
351 .avx512f,
255 }),352 }),
256 };353 };
257
258 result[@enumToInt(Feature.bmi)] = .{354 result[@enumToInt(Feature.bmi)] = .{
259 .index = @enumToInt(Feature.bmi),355 .index = @enumToInt(Feature.bmi),
260 .name = @tagName(Feature.bmi),356 .name = @tagName(Feature.bmi),
261 .llvm_name = "bmi",357 .llvm_name = "bmi",
262 .description = "Support BMI instructions",358 .description = "Support BMI instructions",
263 .dependencies = featureSet(&[_]Feature{}),359 .dependencies = 0,
264 };360 };
265
266 result[@enumToInt(Feature.bmi2)] = .{361 result[@enumToInt(Feature.bmi2)] = .{
267 .index = @enumToInt(Feature.bmi2),362 .index = @enumToInt(Feature.bmi2),
268 .name = @tagName(Feature.bmi2),363 .name = @tagName(Feature.bmi2),
269 .llvm_name = "bmi2",364 .llvm_name = "bmi2",
270 .description = "Support BMI2 instructions",365 .description = "Support BMI2 instructions",
271 .dependencies = featureSet(&[_]Feature{}),366 .dependencies = 0,
272 };
273
274 result[@enumToInt(Feature.avx512bw)] = .{
275 .index = @enumToInt(Feature.avx512bw),
276 .name = @tagName(Feature.avx512bw),
277 .llvm_name = "avx512bw",
278 .description = "Enable AVX-512 Byte and Word Instructions",
279 .dependencies = featureSet(&[_]Feature{
280 .sse,
281 }),
282 };367 };
283
284 result[@enumToInt(Feature.branchfusion)] = .{368 result[@enumToInt(Feature.branchfusion)] = .{
285 .index = @enumToInt(Feature.branchfusion),369 .index = @enumToInt(Feature.branchfusion),
286 .name = @tagName(Feature.branchfusion),370 .name = @tagName(Feature.branchfusion),
287 .llvm_name = "branchfusion",371 .llvm_name = "branchfusion",
288 .description = "CMP/TEST can be fused with conditional branches",372 .description = "CMP/TEST can be fused with conditional branches",
289 .dependencies = featureSet(&[_]Feature{}),373 .dependencies = 0,
290 };
291
292 result[@enumToInt(Feature.avx512cd)] = .{
293 .index = @enumToInt(Feature.avx512cd),
294 .name = @tagName(Feature.avx512cd),
295 .llvm_name = "avx512cd",
296 .description = "Enable AVX-512 Conflict Detection Instructions",
297 .dependencies = featureSet(&[_]Feature{
298 .sse,
299 }),
300 };374 };
301
302 result[@enumToInt(Feature.cldemote)] = .{375 result[@enumToInt(Feature.cldemote)] = .{
303 .index = @enumToInt(Feature.cldemote),376 .index = @enumToInt(Feature.cldemote),
304 .name = @tagName(Feature.cldemote),377 .name = @tagName(Feature.cldemote),
305 .llvm_name = "cldemote",378 .llvm_name = "cldemote",
306 .description = "Enable Cache Demote",379 .description = "Enable Cache Demote",
307 .dependencies = featureSet(&[_]Feature{}),380 .dependencies = 0,
308 };381 };
309
310 result[@enumToInt(Feature.clflushopt)] = .{382 result[@enumToInt(Feature.clflushopt)] = .{
311 .index = @enumToInt(Feature.clflushopt),383 .index = @enumToInt(Feature.clflushopt),
312 .name = @tagName(Feature.clflushopt),384 .name = @tagName(Feature.clflushopt),
313 .llvm_name = "clflushopt",385 .llvm_name = "clflushopt",
314 .description = "Flush A Cache Line Optimized",386 .description = "Flush A Cache Line Optimized",
315 .dependencies = featureSet(&[_]Feature{}),387 .dependencies = 0,
316 };388 };
317
318 result[@enumToInt(Feature.clwb)] = .{389 result[@enumToInt(Feature.clwb)] = .{
319 .index = @enumToInt(Feature.clwb),390 .index = @enumToInt(Feature.clwb),
320 .name = @tagName(Feature.clwb),391 .name = @tagName(Feature.clwb),
321 .llvm_name = "clwb",392 .llvm_name = "clwb",
322 .description = "Cache Line Write Back",393 .description = "Cache Line Write Back",
323 .dependencies = featureSet(&[_]Feature{}),394 .dependencies = 0,
324 };395 };
325
326 result[@enumToInt(Feature.clzero)] = .{396 result[@enumToInt(Feature.clzero)] = .{
327 .index = @enumToInt(Feature.clzero),397 .index = @enumToInt(Feature.clzero),
328 .name = @tagName(Feature.clzero),398 .name = @tagName(Feature.clzero),
329 .llvm_name = "clzero",399 .llvm_name = "clzero",
330 .description = "Enable Cache Line Zero",400 .description = "Enable Cache Line Zero",
331 .dependencies = featureSet(&[_]Feature{}),401 .dependencies = 0,
332 };402 };
333
334 result[@enumToInt(Feature.cmov)] = .{403 result[@enumToInt(Feature.cmov)] = .{
335 .index = @enumToInt(Feature.cmov),404 .index = @enumToInt(Feature.cmov),
336 .name = @tagName(Feature.cmov),405 .name = @tagName(Feature.cmov),
337 .llvm_name = "cmov",406 .llvm_name = "cmov",
338 .description = "Enable conditional move instructions",407 .description = "Enable conditional move instructions",
339 .dependencies = featureSet(&[_]Feature{}),408 .dependencies = 0,
340 };
341
342 result[@enumToInt(Feature.cx8)] = .{
343 .index = @enumToInt(Feature.cx8),
344 .name = @tagName(Feature.cx8),
345 .llvm_name = "cx8",
346 .description = "Support CMPXCHG8B instructions",
347 .dependencies = featureSet(&[_]Feature{}),
348 };409 };
349
350 result[@enumToInt(Feature.cx16)] = .{410 result[@enumToInt(Feature.cx16)] = .{
351 .index = @enumToInt(Feature.cx16),411 .index = @enumToInt(Feature.cx16),
352 .name = @tagName(Feature.cx16),412 .name = @tagName(Feature.cx16),
...@@ -356,17 +416,13 @@ pub const all_features = blk: {...@@ -356,17 +416,13 @@ pub const all_features = blk: {
356 .cx8,416 .cx8,
357 }),417 }),
358 };418 };
359419 result[@enumToInt(Feature.cx8)] = .{
360 result[@enumToInt(Feature.avx512dq)] = .{420 .index = @enumToInt(Feature.cx8),
361 .index = @enumToInt(Feature.avx512dq),421 .name = @tagName(Feature.cx8),
362 .name = @tagName(Feature.avx512dq),422 .llvm_name = "cx8",
363 .llvm_name = "avx512dq",423 .description = "Support CMPXCHG8B instructions",
364 .description = "Enable AVX-512 Doubleword and Quadword Instructions",424 .dependencies = 0,
365 .dependencies = featureSet(&[_]Feature{
366 .sse,
367 }),
368 };425 };
369
370 result[@enumToInt(Feature.enqcmd)] = .{426 result[@enumToInt(Feature.enqcmd)] = .{
371 .index = @enumToInt(Feature.enqcmd),427 .index = @enumToInt(Feature.enqcmd),
372 .name = @tagName(Feature.enqcmd),428 .name = @tagName(Feature.enqcmd),
...@@ -374,17 +430,6 @@ pub const all_features = blk: {...@@ -374,17 +430,6 @@ pub const all_features = blk: {
374 .description = "Has ENQCMD instructions",430 .description = "Has ENQCMD instructions",
375 .dependencies = 0,431 .dependencies = 0,
376 };432 };
377
378 result[@enumToInt(Feature.avx512er)] = .{
379 .index = @enumToInt(Feature.avx512er),
380 .name = @tagName(Feature.avx512er),
381 .llvm_name = "avx512er",
382 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
383 .dependencies = featureSet(&[_]Feature{
384 .sse,
385 }),
386 };
387
388 result[@enumToInt(Feature.ermsb)] = .{433 result[@enumToInt(Feature.ermsb)] = .{
389 .index = @enumToInt(Feature.ermsb),434 .index = @enumToInt(Feature.ermsb),
390 .name = @tagName(Feature.ermsb),435 .name = @tagName(Feature.ermsb),
...@@ -392,53 +437,29 @@ pub const all_features = blk: {...@@ -392,53 +437,29 @@ pub const all_features = blk: {
392 .description = "REP MOVS/STOS are fast",437 .description = "REP MOVS/STOS are fast",
393 .dependencies = 0,438 .dependencies = 0,
394 };439 };
395
396 result[@enumToInt(Feature.f16c)] = .{440 result[@enumToInt(Feature.f16c)] = .{
397 .index = @enumToInt(Feature.f16c),441 .index = @enumToInt(Feature.f16c),
398 .name = @tagName(Feature.f16c),442 .name = @tagName(Feature.f16c),
399 .llvm_name = "f16c",443 .llvm_name = "f16c",
400 .description = "Support 16-bit floating point conversion instructions",444 .description = "Support 16-bit floating point conversion instructions",
401 .dependencies = featureSet(&[_]Feature{445 .dependencies = featureSet(&[_]Feature{
402 .sse,446 .avx,
403 }),
404 };
405
406 result[@enumToInt(Feature.fma)] = .{
407 .index = @enumToInt(Feature.fma),
408 .name = @tagName(Feature.fma),
409 .llvm_name = "fma",
410 .description = "Enable three-operand fused multiple-add",
411 .dependencies = featureSet(&[_]Feature{
412 .sse,
413 }),
414 };
415
416 result[@enumToInt(Feature.fma4)] = .{
417 .index = @enumToInt(Feature.fma4),
418 .name = @tagName(Feature.fma4),
419 .llvm_name = "fma4",
420 .description = "Enable four-operand fused multiple-add",
421 .dependencies = featureSet(&[_]Feature{
422 .sse,
423 }),447 }),
424 };448 };
425449 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{
426 result[@enumToInt(Feature.fsgsbase)] = .{450 .index = @enumToInt(Feature.false_deps_lzcnt_tzcnt),
427 .index = @enumToInt(Feature.fsgsbase),451 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),
428 .name = @tagName(Feature.fsgsbase),452 .llvm_name = "false-deps-lzcnt-tzcnt",
429 .llvm_name = "fsgsbase",453 .description = "LZCNT/TZCNT have a false dependency on dest register",
430 .description = "Support FS/GS Base instructions",
431 .dependencies = 0,454 .dependencies = 0,
432 };455 };
433456 result[@enumToInt(Feature.false_deps_popcnt)] = .{
434 result[@enumToInt(Feature.fxsr)] = .{457 .index = @enumToInt(Feature.false_deps_popcnt),
435 .index = @enumToInt(Feature.fxsr),458 .name = @tagName(Feature.false_deps_popcnt),
436 .name = @tagName(Feature.fxsr),459 .llvm_name = "false-deps-popcnt",
437 .llvm_name = "fxsr",460 .description = "POPCNT has a false dependency on dest register",
438 .description = "Support fxsave/fxrestore instructions",
439 .dependencies = 0,461 .dependencies = 0,
440 };462 };
441
442 result[@enumToInt(Feature.fast_11bytenop)] = .{463 result[@enumToInt(Feature.fast_11bytenop)] = .{
443 .index = @enumToInt(Feature.fast_11bytenop),464 .index = @enumToInt(Feature.fast_11bytenop),
444 .name = @tagName(Feature.fast_11bytenop),465 .name = @tagName(Feature.fast_11bytenop),
...@@ -446,7 +467,6 @@ pub const all_features = blk: {...@@ -446,7 +467,6 @@ pub const all_features = blk: {
446 .description = "Target can quickly decode up to 11 byte NOPs",467 .description = "Target can quickly decode up to 11 byte NOPs",
447 .dependencies = 0,468 .dependencies = 0,
448 };469 };
449
450 result[@enumToInt(Feature.fast_15bytenop)] = .{470 result[@enumToInt(Feature.fast_15bytenop)] = .{
451 .index = @enumToInt(Feature.fast_15bytenop),471 .index = @enumToInt(Feature.fast_15bytenop),
452 .name = @tagName(Feature.fast_15bytenop),472 .name = @tagName(Feature.fast_15bytenop),
...@@ -454,7 +474,6 @@ pub const all_features = blk: {...@@ -454,7 +474,6 @@ pub const all_features = blk: {
454 .description = "Target can quickly decode up to 15 byte NOPs",474 .description = "Target can quickly decode up to 15 byte NOPs",
455 .dependencies = 0,475 .dependencies = 0,
456 };476 };
457
458 result[@enumToInt(Feature.fast_bextr)] = .{477 result[@enumToInt(Feature.fast_bextr)] = .{
459 .index = @enumToInt(Feature.fast_bextr),478 .index = @enumToInt(Feature.fast_bextr),
460 .name = @tagName(Feature.fast_bextr),479 .name = @tagName(Feature.fast_bextr),
...@@ -462,17 +481,22 @@ pub const all_features = blk: {...@@ -462,17 +481,22 @@ pub const all_features = blk: {
462 .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",
463 .dependencies = 0,482 .dependencies = 0,
464 };483 };
465484 result[@enumToInt(Feature.fast_gather)] = .{
485 .index = @enumToInt(Feature.fast_gather),
486 .name = @tagName(Feature.fast_gather),
487 .llvm_name = "fast-gather",
488 .description = "Indicates if gather is reasonably fast",
489 .dependencies = 0,
490 };
466 result[@enumToInt(Feature.fast_hops)] = .{491 result[@enumToInt(Feature.fast_hops)] = .{
467 .index = @enumToInt(Feature.fast_hops),492 .index = @enumToInt(Feature.fast_hops),
468 .name = @tagName(Feature.fast_hops),493 .name = @tagName(Feature.fast_hops),
469 .llvm_name = "fast-hops",494 .llvm_name = "fast-hops",
470 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",495 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
471 .dependencies = featureSet(&[_]Feature{496 .dependencies = featureSet(&[_]Feature{
472 .sse,497 .sse3,
473 }),498 }),
474 };499 };
475
476 result[@enumToInt(Feature.fast_lzcnt)] = .{500 result[@enumToInt(Feature.fast_lzcnt)] = .{
477 .index = @enumToInt(Feature.fast_lzcnt),501 .index = @enumToInt(Feature.fast_lzcnt),
478 .name = @tagName(Feature.fast_lzcnt),502 .name = @tagName(Feature.fast_lzcnt),
...@@ -480,7 +504,6 @@ pub const all_features = blk: {...@@ -480,7 +504,6 @@ pub const all_features = blk: {
480 .description = "LZCNT instructions are as fast as most simple integer ops",504 .description = "LZCNT instructions are as fast as most simple integer ops",
481 .dependencies = 0,505 .dependencies = 0,
482 };506 };
483
484 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{507 result[@enumToInt(Feature.fast_partial_ymm_or_zmm_write)] = .{
485 .index = @enumToInt(Feature.fast_partial_ymm_or_zmm_write),508 .index = @enumToInt(Feature.fast_partial_ymm_or_zmm_write),
486 .name = @tagName(Feature.fast_partial_ymm_or_zmm_write),509 .name = @tagName(Feature.fast_partial_ymm_or_zmm_write),
...@@ -488,15 +511,6 @@ pub const all_features = blk: {...@@ -488,15 +511,6 @@ pub const all_features = blk: {
488 .description = "Partial writes to YMM/ZMM registers are fast",511 .description = "Partial writes to YMM/ZMM registers are fast",
489 .dependencies = 0,512 .dependencies = 0,
490 };513 };
491
492 result[@enumToInt(Feature.fast_shld_rotate)] = .{
493 .index = @enumToInt(Feature.fast_shld_rotate),
494 .name = @tagName(Feature.fast_shld_rotate),
495 .llvm_name = "fast-shld-rotate",
496 .description = "SHLD can be used as a faster rotate",
497 .dependencies = 0,
498 };
499
500 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{514 result[@enumToInt(Feature.fast_scalar_fsqrt)] = .{
501 .index = @enumToInt(Feature.fast_scalar_fsqrt),515 .index = @enumToInt(Feature.fast_scalar_fsqrt),
502 .name = @tagName(Feature.fast_scalar_fsqrt),516 .name = @tagName(Feature.fast_scalar_fsqrt),
...@@ -504,7 +518,6 @@ pub const all_features = blk: {...@@ -504,7 +518,6 @@ pub const all_features = blk: {
504 .description = "Scalar SQRT is fast (disable Newton-Raphson)",518 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
505 .dependencies = 0,519 .dependencies = 0,
506 };520 };
507
508 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{521 result[@enumToInt(Feature.fast_scalar_shift_masks)] = .{
509 .index = @enumToInt(Feature.fast_scalar_shift_masks),522 .index = @enumToInt(Feature.fast_scalar_shift_masks),
510 .name = @tagName(Feature.fast_scalar_shift_masks),523 .name = @tagName(Feature.fast_scalar_shift_masks),
...@@ -512,7 +525,13 @@ pub const all_features = blk: {...@@ -512,7 +525,13 @@ pub const all_features = blk: {
512 .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",
513 .dependencies = 0,526 .dependencies = 0,
514 };527 };
515528 result[@enumToInt(Feature.fast_shld_rotate)] = .{
529 .index = @enumToInt(Feature.fast_shld_rotate),
530 .name = @tagName(Feature.fast_shld_rotate),
531 .llvm_name = "fast-shld-rotate",
532 .description = "SHLD can be used as a faster rotate",
533 .dependencies = 0,
534 };
516 result[@enumToInt(Feature.fast_variable_shuffle)] = .{535 result[@enumToInt(Feature.fast_variable_shuffle)] = .{
517 .index = @enumToInt(Feature.fast_variable_shuffle),536 .index = @enumToInt(Feature.fast_variable_shuffle),
518 .name = @tagName(Feature.fast_variable_shuffle),537 .name = @tagName(Feature.fast_variable_shuffle),
...@@ -520,7 +539,6 @@ pub const all_features = blk: {...@@ -520,7 +539,6 @@ pub const all_features = blk: {
520 .description = "Shuffles with variable masks are fast",539 .description = "Shuffles with variable masks are fast",
521 .dependencies = 0,540 .dependencies = 0,
522 };541 };
523
524 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{542 result[@enumToInt(Feature.fast_vector_fsqrt)] = .{
525 .index = @enumToInt(Feature.fast_vector_fsqrt),543 .index = @enumToInt(Feature.fast_vector_fsqrt),
526 .name = @tagName(Feature.fast_vector_fsqrt),544 .name = @tagName(Feature.fast_vector_fsqrt),
...@@ -528,7 +546,6 @@ pub const all_features = blk: {...@@ -528,7 +546,6 @@ pub const all_features = blk: {
528 .description = "Vector SQRT is fast (disable Newton-Raphson)",546 .description = "Vector SQRT is fast (disable Newton-Raphson)",
529 .dependencies = 0,547 .dependencies = 0,
530 };548 };
531
532 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{549 result[@enumToInt(Feature.fast_vector_shift_masks)] = .{
533 .index = @enumToInt(Feature.fast_vector_shift_masks),550 .index = @enumToInt(Feature.fast_vector_shift_masks),
534 .name = @tagName(Feature.fast_vector_shift_masks),551 .name = @tagName(Feature.fast_vector_shift_masks),
...@@ -536,35 +553,62 @@ pub const all_features = blk: {...@@ -536,35 +553,62 @@ pub const all_features = blk: {
536 .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",
537 .dependencies = 0,554 .dependencies = 0,
538 };555 };
539556 result[@enumToInt(Feature.fma)] = .{
540 result[@enumToInt(Feature.gfni)] = .{557 .index = @enumToInt(Feature.fma),
541 .index = @enumToInt(Feature.gfni),558 .name = @tagName(Feature.fma),
542 .name = @tagName(Feature.gfni),559 .llvm_name = "fma",
543 .llvm_name = "gfni",560 .description = "Enable three-operand fused multiple-add",
544 .description = "Enable Galois Field Arithmetic Instructions",
545 .dependencies = featureSet(&[_]Feature{561 .dependencies = featureSet(&[_]Feature{
546 .sse,562 .avx,
547 }),563 }),
548 };564 };
549565 result[@enumToInt(Feature.fma4)] = .{
550 result[@enumToInt(Feature.fast_gather)] = .{566 .index = @enumToInt(Feature.fma4),
551 .index = @enumToInt(Feature.fast_gather),567 .name = @tagName(Feature.fma4),
552 .name = @tagName(Feature.fast_gather),568 .llvm_name = "fma4",
553 .llvm_name = "fast-gather",569 .description = "Enable four-operand fused multiple-add",
554 .description = "Indicates if gather is reasonably fast",570 .dependencies = featureSet(&[_]Feature{
571 .avx,
572 .sse4a,
573 }),
574 };
575 result[@enumToInt(Feature.fsgsbase)] = .{
576 .index = @enumToInt(Feature.fsgsbase),
577 .name = @tagName(Feature.fsgsbase),
578 .llvm_name = "fsgsbase",
579 .description = "Support FS/GS Base instructions",
555 .dependencies = 0,580 .dependencies = 0,
556 };581 };
557582 result[@enumToInt(Feature.fxsr)] = .{
558 result[@enumToInt(Feature.avx512ifma)] = .{583 .index = @enumToInt(Feature.fxsr),
559 .index = @enumToInt(Feature.avx512ifma),584 .name = @tagName(Feature.fxsr),
560 .name = @tagName(Feature.avx512ifma),585 .llvm_name = "fxsr",
561 .llvm_name = "avx512ifma",586 .description = "Support fxsave/fxrestore instructions",
562 .description = "Enable AVX-512 Integer Fused Multiple-Add",587 .dependencies = 0,
588 };
589 result[@enumToInt(Feature.gfni)] = .{
590 .index = @enumToInt(Feature.gfni),
591 .name = @tagName(Feature.gfni),
592 .llvm_name = "gfni",
593 .description = "Enable Galois Field Arithmetic Instructions",
563 .dependencies = featureSet(&[_]Feature{594 .dependencies = featureSet(&[_]Feature{
564 .sse,595 .sse2,
565 }),596 }),
566 };597 };
567598 result[@enumToInt(Feature.idivl_to_divb)] = .{
599 .index = @enumToInt(Feature.idivl_to_divb),
600 .name = @tagName(Feature.idivl_to_divb),
601 .llvm_name = "idivl-to-divb",
602 .description = "Use 8-bit divide for positive values less than 256",
603 .dependencies = 0,
604 };
605 result[@enumToInt(Feature.idivq_to_divl)] = .{
606 .index = @enumToInt(Feature.idivq_to_divl),
607 .name = @tagName(Feature.idivq_to_divl),
608 .llvm_name = "idivq-to-divl",
609 .description = "Use 32-bit divide for positive values less than 2^32",
610 .dependencies = 0,
611 };
568 result[@enumToInt(Feature.invpcid)] = .{612 result[@enumToInt(Feature.invpcid)] = .{
569 .index = @enumToInt(Feature.invpcid),613 .index = @enumToInt(Feature.invpcid),
570 .name = @tagName(Feature.invpcid),614 .name = @tagName(Feature.invpcid),
...@@ -572,15 +616,6 @@ pub const all_features = blk: {...@@ -572,15 +616,6 @@ pub const all_features = blk: {
572 .description = "Invalidate Process-Context Identifier",616 .description = "Invalidate Process-Context Identifier",
573 .dependencies = 0,617 .dependencies = 0,
574 };618 };
575
576 result[@enumToInt(Feature.sahf)] = .{
577 .index = @enumToInt(Feature.sahf),
578 .name = @tagName(Feature.sahf),
579 .llvm_name = "sahf",
580 .description = "Support LAHF and SAHF instructions",
581 .dependencies = 0,
582 };
583
584 result[@enumToInt(Feature.lea_sp)] = .{619 result[@enumToInt(Feature.lea_sp)] = .{
585 .index = @enumToInt(Feature.lea_sp),620 .index = @enumToInt(Feature.lea_sp),
586 .name = @tagName(Feature.lea_sp),621 .name = @tagName(Feature.lea_sp),
...@@ -588,7 +623,6 @@ pub const all_features = blk: {...@@ -588,7 +623,6 @@ pub const all_features = blk: {
588 .description = "Use LEA for adjusting the stack pointer",623 .description = "Use LEA for adjusting the stack pointer",
589 .dependencies = 0,624 .dependencies = 0,
590 };625 };
591
592 result[@enumToInt(Feature.lea_uses_ag)] = .{626 result[@enumToInt(Feature.lea_uses_ag)] = .{
593 .index = @enumToInt(Feature.lea_uses_ag),627 .index = @enumToInt(Feature.lea_uses_ag),
594 .name = @tagName(Feature.lea_uses_ag),628 .name = @tagName(Feature.lea_uses_ag),
...@@ -596,7 +630,6 @@ pub const all_features = blk: {...@@ -596,7 +630,6 @@ pub const all_features = blk: {
596 .description = "LEA instruction needs inputs at AG stage",630 .description = "LEA instruction needs inputs at AG stage",
597 .dependencies = 0,631 .dependencies = 0,
598 };632 };
599
600 result[@enumToInt(Feature.lwp)] = .{633 result[@enumToInt(Feature.lwp)] = .{
601 .index = @enumToInt(Feature.lwp),634 .index = @enumToInt(Feature.lwp),
602 .name = @tagName(Feature.lwp),635 .name = @tagName(Feature.lwp),
...@@ -604,7 +637,6 @@ pub const all_features = blk: {...@@ -604,7 +637,6 @@ pub const all_features = blk: {
604 .description = "Enable LWP instructions",637 .description = "Enable LWP instructions",
605 .dependencies = 0,638 .dependencies = 0,
606 };639 };
607
608 result[@enumToInt(Feature.lzcnt)] = .{640 result[@enumToInt(Feature.lzcnt)] = .{
609 .index = @enumToInt(Feature.lzcnt),641 .index = @enumToInt(Feature.lzcnt),
610 .name = @tagName(Feature.lzcnt),642 .name = @tagName(Feature.lzcnt),
...@@ -612,15 +644,20 @@ pub const all_features = blk: {...@@ -612,15 +644,20 @@ pub const all_features = blk: {
612 .description = "Support LZCNT instruction",644 .description = "Support LZCNT instruction",
613 .dependencies = 0,645 .dependencies = 0,
614 };646 };
615647 result[@enumToInt(Feature.macrofusion)] = .{
616 result[@enumToInt(Feature.false_deps_lzcnt_tzcnt)] = .{648 .index = @enumToInt(Feature.macrofusion),
617 .index = @enumToInt(Feature.false_deps_lzcnt_tzcnt),649 .name = @tagName(Feature.macrofusion),
618 .name = @tagName(Feature.false_deps_lzcnt_tzcnt),650 .llvm_name = "macrofusion",
619 .llvm_name = "false-deps-lzcnt-tzcnt",651 .description = "Various instructions can be fused with conditional branches",
620 .description = "LZCNT/TZCNT have a false dependency on dest register",652 .dependencies = 0,
653 };
654 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
655 .index = @enumToInt(Feature.merge_to_threeway_branch),
656 .name = @tagName(Feature.merge_to_threeway_branch),
657 .llvm_name = "merge-to-threeway-branch",
658 .description = "Merge branches to a three-way conditional branch",
621 .dependencies = 0,659 .dependencies = 0,
622 };660 };
623
624 result[@enumToInt(Feature.mmx)] = .{661 result[@enumToInt(Feature.mmx)] = .{
625 .index = @enumToInt(Feature.mmx),662 .index = @enumToInt(Feature.mmx),
626 .name = @tagName(Feature.mmx),663 .name = @tagName(Feature.mmx),
...@@ -628,7 +665,6 @@ pub const all_features = blk: {...@@ -628,7 +665,6 @@ pub const all_features = blk: {
628 .description = "Enable MMX instructions",665 .description = "Enable MMX instructions",
629 .dependencies = 0,666 .dependencies = 0,
630 };667 };
631
632 result[@enumToInt(Feature.movbe)] = .{668 result[@enumToInt(Feature.movbe)] = .{
633 .index = @enumToInt(Feature.movbe),669 .index = @enumToInt(Feature.movbe),
634 .name = @tagName(Feature.movbe),670 .name = @tagName(Feature.movbe),
...@@ -636,7 +672,6 @@ pub const all_features = blk: {...@@ -636,7 +672,6 @@ pub const all_features = blk: {
636 .description = "Support MOVBE instruction",672 .description = "Support MOVBE instruction",
637 .dependencies = 0,673 .dependencies = 0,
638 };674 };
639
640 result[@enumToInt(Feature.movdir64b)] = .{675 result[@enumToInt(Feature.movdir64b)] = .{
641 .index = @enumToInt(Feature.movdir64b),676 .index = @enumToInt(Feature.movdir64b),
642 .name = @tagName(Feature.movdir64b),677 .name = @tagName(Feature.movdir64b),
...@@ -644,7 +679,6 @@ pub const all_features = blk: {...@@ -644,7 +679,6 @@ pub const all_features = blk: {
644 .description = "Support movdir64b instruction",679 .description = "Support movdir64b instruction",
645 .dependencies = 0,680 .dependencies = 0,
646 };681 };
647
648 result[@enumToInt(Feature.movdiri)] = .{682 result[@enumToInt(Feature.movdiri)] = .{
649 .index = @enumToInt(Feature.movdiri),683 .index = @enumToInt(Feature.movdiri),
650 .name = @tagName(Feature.movdiri),684 .name = @tagName(Feature.movdiri),
...@@ -652,7 +686,6 @@ pub const all_features = blk: {...@@ -652,7 +686,6 @@ pub const all_features = blk: {
652 .description = "Support movdiri instruction",686 .description = "Support movdiri instruction",
653 .dependencies = 0,687 .dependencies = 0,
654 };688 };
655
656 result[@enumToInt(Feature.mpx)] = .{689 result[@enumToInt(Feature.mpx)] = .{
657 .index = @enumToInt(Feature.mpx),690 .index = @enumToInt(Feature.mpx),
658 .name = @tagName(Feature.mpx),691 .name = @tagName(Feature.mpx),
...@@ -660,7 +693,6 @@ pub const all_features = blk: {...@@ -660,7 +693,6 @@ pub const all_features = blk: {
660 .description = "Support MPX instructions",693 .description = "Support MPX instructions",
661 .dependencies = 0,694 .dependencies = 0,
662 };695 };
663
664 result[@enumToInt(Feature.mwaitx)] = .{696 result[@enumToInt(Feature.mwaitx)] = .{
665 .index = @enumToInt(Feature.mwaitx),697 .index = @enumToInt(Feature.mwaitx),
666 .name = @tagName(Feature.mwaitx),698 .name = @tagName(Feature.mwaitx),
...@@ -668,23 +700,6 @@ pub const all_features = blk: {...@@ -668,23 +700,6 @@ pub const all_features = blk: {
668 .description = "Enable MONITORX/MWAITX timer functionality",700 .description = "Enable MONITORX/MWAITX timer functionality",
669 .dependencies = 0,701 .dependencies = 0,
670 };702 };
671
672 result[@enumToInt(Feature.macrofusion)] = .{
673 .index = @enumToInt(Feature.macrofusion),
674 .name = @tagName(Feature.macrofusion),
675 .llvm_name = "macrofusion",
676 .description = "Various instructions can be fused with conditional branches",
677 .dependencies = 0,
678 };
679
680 result[@enumToInt(Feature.merge_to_threeway_branch)] = .{
681 .index = @enumToInt(Feature.merge_to_threeway_branch),
682 .name = @tagName(Feature.merge_to_threeway_branch),
683 .llvm_name = "merge-to-threeway-branch",
684 .description = "Merge branches to a three-way conditional branch",
685 .dependencies = 0,
686 };
687
688 result[@enumToInt(Feature.nopl)] = .{703 result[@enumToInt(Feature.nopl)] = .{
689 .index = @enumToInt(Feature.nopl),704 .index = @enumToInt(Feature.nopl),
690 .name = @tagName(Feature.nopl),705 .name = @tagName(Feature.nopl),
...@@ -692,17 +707,22 @@ pub const all_features = blk: {...@@ -692,17 +707,22 @@ pub const all_features = blk: {
692 .description = "Enable NOPL instruction",707 .description = "Enable NOPL instruction",
693 .dependencies = 0,708 .dependencies = 0,
694 };709 };
695710 result[@enumToInt(Feature.pad_short_functions)] = .{
711 .index = @enumToInt(Feature.pad_short_functions),
712 .name = @tagName(Feature.pad_short_functions),
713 .llvm_name = "pad-short-functions",
714 .description = "Pad short functions",
715 .dependencies = 0,
716 };
696 result[@enumToInt(Feature.pclmul)] = .{717 result[@enumToInt(Feature.pclmul)] = .{
697 .index = @enumToInt(Feature.pclmul),718 .index = @enumToInt(Feature.pclmul),
698 .name = @tagName(Feature.pclmul),719 .name = @tagName(Feature.pclmul),
699 .llvm_name = "pclmul",720 .llvm_name = "pclmul",
700 .description = "Enable packed carry-less multiplication instructions",721 .description = "Enable packed carry-less multiplication instructions",
701 .dependencies = featureSet(&[_]Feature{722 .dependencies = featureSet(&[_]Feature{
702 .sse,723 .sse2,
703 }),724 }),
704 };725 };
705
706 result[@enumToInt(Feature.pconfig)] = .{726 result[@enumToInt(Feature.pconfig)] = .{
707 .index = @enumToInt(Feature.pconfig),727 .index = @enumToInt(Feature.pconfig),
708 .name = @tagName(Feature.pconfig),728 .name = @tagName(Feature.pconfig),
...@@ -710,17 +730,6 @@ pub const all_features = blk: {...@@ -710,17 +730,6 @@ pub const all_features = blk: {
710 .description = "platform configuration instruction",730 .description = "platform configuration instruction",
711 .dependencies = 0,731 .dependencies = 0,
712 };732 };
713
714 result[@enumToInt(Feature.avx512pf)] = .{
715 .index = @enumToInt(Feature.avx512pf),
716 .name = @tagName(Feature.avx512pf),
717 .llvm_name = "avx512pf",
718 .description = "Enable AVX-512 PreFetch Instructions",
719 .dependencies = featureSet(&[_]Feature{
720 .sse,
721 }),
722 };
723
724 result[@enumToInt(Feature.pku)] = .{733 result[@enumToInt(Feature.pku)] = .{
725 .index = @enumToInt(Feature.pku),734 .index = @enumToInt(Feature.pku),
726 .name = @tagName(Feature.pku),735 .name = @tagName(Feature.pku),
...@@ -728,7 +737,6 @@ pub const all_features = blk: {...@@ -728,7 +737,6 @@ pub const all_features = blk: {
728 .description = "Enable protection keys",737 .description = "Enable protection keys",
729 .dependencies = 0,738 .dependencies = 0,
730 };739 };
731
732 result[@enumToInt(Feature.popcnt)] = .{740 result[@enumToInt(Feature.popcnt)] = .{
733 .index = @enumToInt(Feature.popcnt),741 .index = @enumToInt(Feature.popcnt),
734 .name = @tagName(Feature.popcnt),742 .name = @tagName(Feature.popcnt),
...@@ -736,15 +744,13 @@ pub const all_features = blk: {...@@ -736,15 +744,13 @@ pub const all_features = blk: {
736 .description = "Support POPCNT instruction",744 .description = "Support POPCNT instruction",
737 .dependencies = 0,745 .dependencies = 0,
738 };746 };
739747 result[@enumToInt(Feature.prefer_256_bit)] = .{
740 result[@enumToInt(Feature.false_deps_popcnt)] = .{748 .index = @enumToInt(Feature.prefer_256_bit),
741 .index = @enumToInt(Feature.false_deps_popcnt),749 .name = @tagName(Feature.prefer_256_bit),
742 .name = @tagName(Feature.false_deps_popcnt),750 .llvm_name = "prefer-256-bit",
743 .llvm_name = "false-deps-popcnt",751 .description = "Prefer 256-bit AVX instructions",
744 .description = "POPCNT has a false dependency on dest register",
745 .dependencies = 0,752 .dependencies = 0,
746 };753 };
747
748 result[@enumToInt(Feature.prefetchwt1)] = .{754 result[@enumToInt(Feature.prefetchwt1)] = .{
749 .index = @enumToInt(Feature.prefetchwt1),755 .index = @enumToInt(Feature.prefetchwt1),
750 .name = @tagName(Feature.prefetchwt1),756 .name = @tagName(Feature.prefetchwt1),
...@@ -752,7 +758,6 @@ pub const all_features = blk: {...@@ -752,7 +758,6 @@ pub const all_features = blk: {
752 .description = "Prefetch with Intent to Write and T1 Hint",758 .description = "Prefetch with Intent to Write and T1 Hint",
753 .dependencies = 0,759 .dependencies = 0,
754 };760 };
755
756 result[@enumToInt(Feature.prfchw)] = .{761 result[@enumToInt(Feature.prfchw)] = .{
757 .index = @enumToInt(Feature.prfchw),762 .index = @enumToInt(Feature.prfchw),
758 .name = @tagName(Feature.prfchw),763 .name = @tagName(Feature.prfchw),
...@@ -760,7 +765,6 @@ pub const all_features = blk: {...@@ -760,7 +765,6 @@ pub const all_features = blk: {
760 .description = "Support PRFCHW instructions",765 .description = "Support PRFCHW instructions",
761 .dependencies = 0,766 .dependencies = 0,
762 };767 };
763
764 result[@enumToInt(Feature.ptwrite)] = .{768 result[@enumToInt(Feature.ptwrite)] = .{
765 .index = @enumToInt(Feature.ptwrite),769 .index = @enumToInt(Feature.ptwrite),
766 .name = @tagName(Feature.ptwrite),770 .name = @tagName(Feature.ptwrite),
...@@ -768,23 +772,6 @@ pub const all_features = blk: {...@@ -768,23 +772,6 @@ pub const all_features = blk: {
768 .description = "Support ptwrite instruction",772 .description = "Support ptwrite instruction",
769 .dependencies = 0,773 .dependencies = 0,
770 };774 };
771
772 result[@enumToInt(Feature.pad_short_functions)] = .{
773 .index = @enumToInt(Feature.pad_short_functions),
774 .name = @tagName(Feature.pad_short_functions),
775 .llvm_name = "pad-short-functions",
776 .description = "Pad short functions",
777 .dependencies = 0,
778 };
779
780 result[@enumToInt(Feature.prefer_256_bit)] = .{
781 .index = @enumToInt(Feature.prefer_256_bit),
782 .name = @tagName(Feature.prefer_256_bit),
783 .llvm_name = "prefer-256-bit",
784 .description = "Prefer 256-bit AVX instructions",
785 .dependencies = 0,
786 };
787
788 result[@enumToInt(Feature.rdpid)] = .{775 result[@enumToInt(Feature.rdpid)] = .{
789 .index = @enumToInt(Feature.rdpid),776 .index = @enumToInt(Feature.rdpid),
790 .name = @tagName(Feature.rdpid),777 .name = @tagName(Feature.rdpid),
...@@ -792,7 +779,6 @@ pub const all_features = blk: {...@@ -792,7 +779,6 @@ pub const all_features = blk: {
792 .description = "Support RDPID instructions",779 .description = "Support RDPID instructions",
793 .dependencies = 0,780 .dependencies = 0,
794 };781 };
795
796 result[@enumToInt(Feature.rdrnd)] = .{782 result[@enumToInt(Feature.rdrnd)] = .{
797 .index = @enumToInt(Feature.rdrnd),783 .index = @enumToInt(Feature.rdrnd),
798 .name = @tagName(Feature.rdrnd),784 .name = @tagName(Feature.rdrnd),
...@@ -800,7 +786,6 @@ pub const all_features = blk: {...@@ -800,7 +786,6 @@ pub const all_features = blk: {
800 .description = "Support RDRAND instruction",786 .description = "Support RDRAND instruction",
801 .dependencies = 0,787 .dependencies = 0,
802 };788 };
803
804 result[@enumToInt(Feature.rdseed)] = .{789 result[@enumToInt(Feature.rdseed)] = .{
805 .index = @enumToInt(Feature.rdseed),790 .index = @enumToInt(Feature.rdseed),
806 .name = @tagName(Feature.rdseed),791 .name = @tagName(Feature.rdseed),
...@@ -808,26 +793,16 @@ pub const all_features = blk: {...@@ -808,26 +793,16 @@ pub const all_features = blk: {
808 .description = "Support RDSEED instruction",793 .description = "Support RDSEED instruction",
809 .dependencies = 0,794 .dependencies = 0,
810 };795 };
811
812 result[@enumToInt(Feature.rtm)] = .{
813 .index = @enumToInt(Feature.rtm),
814 .name = @tagName(Feature.rtm),
815 .llvm_name = "rtm",
816 .description = "Support RTM instructions",
817 .dependencies = 0,
818 };
819
820 result[@enumToInt(Feature.retpoline)] = .{796 result[@enumToInt(Feature.retpoline)] = .{
821 .index = @enumToInt(Feature.retpoline),797 .index = @enumToInt(Feature.retpoline),
822 .name = @tagName(Feature.retpoline),798 .name = @tagName(Feature.retpoline),
823 .llvm_name = "retpoline",799 .llvm_name = "retpoline",
824 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",800 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",
825 .dependencies = featureSet(&[_]Feature{801 .dependencies = featureSet(&[_]Feature{
826 .retpoline_indirect_calls,
827 .retpoline_indirect_branches,802 .retpoline_indirect_branches,
803 .retpoline_indirect_calls,
828 }),804 }),
829 };805 };
830
831 result[@enumToInt(Feature.retpoline_external_thunk)] = .{806 result[@enumToInt(Feature.retpoline_external_thunk)] = .{
832 .index = @enumToInt(Feature.retpoline_external_thunk),807 .index = @enumToInt(Feature.retpoline_external_thunk),
833 .name = @tagName(Feature.retpoline_external_thunk),808 .name = @tagName(Feature.retpoline_external_thunk),
...@@ -837,7 +812,6 @@ pub const all_features = blk: {...@@ -837,7 +812,6 @@ pub const all_features = blk: {
837 .retpoline_indirect_calls,812 .retpoline_indirect_calls,
838 }),813 }),
839 };814 };
840
841 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{815 result[@enumToInt(Feature.retpoline_indirect_branches)] = .{
842 .index = @enumToInt(Feature.retpoline_indirect_branches),816 .index = @enumToInt(Feature.retpoline_indirect_branches),
843 .name = @tagName(Feature.retpoline_indirect_branches),817 .name = @tagName(Feature.retpoline_indirect_branches),
...@@ -845,7 +819,6 @@ pub const all_features = blk: {...@@ -845,7 +819,6 @@ pub const all_features = blk: {
845 .description = "Remove speculation of indirect branches from the generated code",819 .description = "Remove speculation of indirect branches from the generated code",
846 .dependencies = 0,820 .dependencies = 0,
847 };821 };
848
849 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{822 result[@enumToInt(Feature.retpoline_indirect_calls)] = .{
850 .index = @enumToInt(Feature.retpoline_indirect_calls),823 .index = @enumToInt(Feature.retpoline_indirect_calls),
851 .name = @tagName(Feature.retpoline_indirect_calls),824 .name = @tagName(Feature.retpoline_indirect_calls),
...@@ -853,109 +826,43 @@ pub const all_features = blk: {...@@ -853,109 +826,43 @@ pub const all_features = blk: {
853 .description = "Remove speculation of indirect calls from the generated code",826 .description = "Remove speculation of indirect calls from the generated code",
854 .dependencies = 0,827 .dependencies = 0,
855 };828 };
856829 result[@enumToInt(Feature.rtm)] = .{
857 result[@enumToInt(Feature.sgx)] = .{830 .index = @enumToInt(Feature.rtm),
858 .index = @enumToInt(Feature.sgx),831 .name = @tagName(Feature.rtm),
859 .name = @tagName(Feature.sgx),832 .llvm_name = "rtm",
860 .llvm_name = "sgx",833 .description = "Support RTM instructions",
861 .description = "Enable Software Guard Extensions",
862 .dependencies = 0,
863 };
864
865 result[@enumToInt(Feature.sha)] = .{
866 .index = @enumToInt(Feature.sha),
867 .name = @tagName(Feature.sha),
868 .llvm_name = "sha",
869 .description = "Enable SHA instructions",
870 .dependencies = featureSet(&[_]Feature{
871 .sse,
872 }),
873 };
874
875 result[@enumToInt(Feature.shstk)] = .{
876 .index = @enumToInt(Feature.shstk),
877 .name = @tagName(Feature.shstk),
878 .llvm_name = "shstk",
879 .description = "Support CET Shadow-Stack instructions",
880 .dependencies = 0,
881 };
882
883 result[@enumToInt(Feature.sse)] = .{
884 .index = @enumToInt(Feature.sse),
885 .name = @tagName(Feature.sse),
886 .llvm_name = "sse",
887 .description = "Enable SSE instructions",
888 .dependencies = 0,834 .dependencies = 0,
889 };835 };
890836 result[@enumToInt(Feature.sahf)] = .{
891 result[@enumToInt(Feature.sse2)] = .{837 .index = @enumToInt(Feature.sahf),
892 .index = @enumToInt(Feature.sse2),838 .name = @tagName(Feature.sahf),
893 .name = @tagName(Feature.sse2),839 .llvm_name = "sahf",
894 .llvm_name = "sse2",840 .description = "Support LAHF and SAHF instructions",
895 .description = "Enable SSE2 instructions",
896 .dependencies = featureSet(&[_]Feature{
897 .sse,
898 }),
899 };
900
901 result[@enumToInt(Feature.sse3)] = .{
902 .index = @enumToInt(Feature.sse3),
903 .name = @tagName(Feature.sse3),
904 .llvm_name = "sse3",
905 .description = "Enable SSE3 instructions",
906 .dependencies = featureSet(&[_]Feature{
907 .sse,
908 }),
909 };
910
911 result[@enumToInt(Feature.sse4a)] = .{
912 .index = @enumToInt(Feature.sse4a),
913 .name = @tagName(Feature.sse4a),
914 .llvm_name = "sse4a",
915 .description = "Support SSE 4a instructions",
916 .dependencies = featureSet(&[_]Feature{
917 .sse,
918 }),
919 };
920
921 result[@enumToInt(Feature.sse4_1)] = .{
922 .index = @enumToInt(Feature.sse4_1),
923 .name = @tagName(Feature.sse4_1),
924 .llvm_name = "sse4.1",
925 .description = "Enable SSE 4.1 instructions",
926 .dependencies = featureSet(&[_]Feature{
927 .sse,
928 }),
929 };
930
931 result[@enumToInt(Feature.sse4_2)] = .{
932 .index = @enumToInt(Feature.sse4_2),
933 .name = @tagName(Feature.sse4_2),
934 .llvm_name = "sse4.2",
935 .description = "Enable SSE 4.2 instructions",
936 .dependencies = featureSet(&[_]Feature{
937 .sse,
938 }),
939 };
940
941 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
942 .index = @enumToInt(Feature.sse_unaligned_mem),
943 .name = @tagName(Feature.sse_unaligned_mem),
944 .llvm_name = "sse-unaligned-mem",
945 .description = "Allow unaligned memory operands with SSE instructions",
946 .dependencies = 0,841 .dependencies = 0,
947 };842 };
948843 result[@enumToInt(Feature.sgx)] = .{
949 result[@enumToInt(Feature.ssse3)] = .{844 .index = @enumToInt(Feature.sgx),
950 .index = @enumToInt(Feature.ssse3),845 .name = @tagName(Feature.sgx),
951 .name = @tagName(Feature.ssse3),846 .llvm_name = "sgx",
952 .llvm_name = "ssse3",847 .description = "Enable Software Guard Extensions",
953 .description = "Enable SSSE3 instructions",848 .dependencies = 0,
849 };
850 result[@enumToInt(Feature.sha)] = .{
851 .index = @enumToInt(Feature.sha),
852 .name = @tagName(Feature.sha),
853 .llvm_name = "sha",
854 .description = "Enable SHA instructions",
954 .dependencies = featureSet(&[_]Feature{855 .dependencies = featureSet(&[_]Feature{
955 .sse,856 .sse2,
956 }),857 }),
957 };858 };
958859 result[@enumToInt(Feature.shstk)] = .{
860 .index = @enumToInt(Feature.shstk),
861 .name = @tagName(Feature.shstk),
862 .llvm_name = "shstk",
863 .description = "Support CET Shadow-Stack instructions",
864 .dependencies = 0,
865 };
959 result[@enumToInt(Feature.slow_3ops_lea)] = .{866 result[@enumToInt(Feature.slow_3ops_lea)] = .{
960 .index = @enumToInt(Feature.slow_3ops_lea),867 .index = @enumToInt(Feature.slow_3ops_lea),
961 .name = @tagName(Feature.slow_3ops_lea),868 .name = @tagName(Feature.slow_3ops_lea),
...@@ -963,23 +870,6 @@ pub const all_features = blk: {...@@ -963,23 +870,6 @@ pub const all_features = blk: {
963 .description = "LEA instruction with 3 ops or certain registers is slow",870 .description = "LEA instruction with 3 ops or certain registers is slow",
964 .dependencies = 0,871 .dependencies = 0,
965 };872 };
966
967 result[@enumToInt(Feature.idivl_to_divb)] = .{
968 .index = @enumToInt(Feature.idivl_to_divb),
969 .name = @tagName(Feature.idivl_to_divb),
970 .llvm_name = "idivl-to-divb",
971 .description = "Use 8-bit divide for positive values less than 256",
972 .dependencies = 0,
973 };
974
975 result[@enumToInt(Feature.idivq_to_divl)] = .{
976 .index = @enumToInt(Feature.idivq_to_divl),
977 .name = @tagName(Feature.idivq_to_divl),
978 .llvm_name = "idivq-to-divl",
979 .description = "Use 32-bit divide for positive values less than 2^32",
980 .dependencies = 0,
981 };
982
983 result[@enumToInt(Feature.slow_incdec)] = .{873 result[@enumToInt(Feature.slow_incdec)] = .{
984 .index = @enumToInt(Feature.slow_incdec),874 .index = @enumToInt(Feature.slow_incdec),
985 .name = @tagName(Feature.slow_incdec),875 .name = @tagName(Feature.slow_incdec),
...@@ -987,7 +877,6 @@ pub const all_features = blk: {...@@ -987,7 +877,6 @@ pub const all_features = blk: {
987 .description = "INC and DEC instructions are slower than ADD and SUB",877 .description = "INC and DEC instructions are slower than ADD and SUB",
988 .dependencies = 0,878 .dependencies = 0,
989 };879 };
990
991 result[@enumToInt(Feature.slow_lea)] = .{880 result[@enumToInt(Feature.slow_lea)] = .{
992 .index = @enumToInt(Feature.slow_lea),881 .index = @enumToInt(Feature.slow_lea),
993 .name = @tagName(Feature.slow_lea),882 .name = @tagName(Feature.slow_lea),
...@@ -995,7 +884,6 @@ pub const all_features = blk: {...@@ -995,7 +884,6 @@ pub const all_features = blk: {
995 .description = "LEA instruction with certain arguments is slow",884 .description = "LEA instruction with certain arguments is slow",
996 .dependencies = 0,885 .dependencies = 0,
997 };886 };
998
999 result[@enumToInt(Feature.slow_pmaddwd)] = .{887 result[@enumToInt(Feature.slow_pmaddwd)] = .{
1000 .index = @enumToInt(Feature.slow_pmaddwd),888 .index = @enumToInt(Feature.slow_pmaddwd),
1001 .name = @tagName(Feature.slow_pmaddwd),889 .name = @tagName(Feature.slow_pmaddwd),
...@@ -1003,7 +891,6 @@ pub const all_features = blk: {...@@ -1003,7 +891,6 @@ pub const all_features = blk: {
1003 .description = "PMADDWD is slower than PMULLD",891 .description = "PMADDWD is slower than PMULLD",
1004 .dependencies = 0,892 .dependencies = 0,
1005 };893 };
1006
1007 result[@enumToInt(Feature.slow_pmulld)] = .{894 result[@enumToInt(Feature.slow_pmulld)] = .{
1008 .index = @enumToInt(Feature.slow_pmulld),895 .index = @enumToInt(Feature.slow_pmulld),
1009 .name = @tagName(Feature.slow_pmulld),896 .name = @tagName(Feature.slow_pmulld),
...@@ -1011,7 +898,6 @@ pub const all_features = blk: {...@@ -1011,7 +898,6 @@ pub const all_features = blk: {
1011 .description = "PMULLD instruction is slow",898 .description = "PMULLD instruction is slow",
1012 .dependencies = 0,899 .dependencies = 0,
1013 };900 };
1014
1015 result[@enumToInt(Feature.slow_shld)] = .{901 result[@enumToInt(Feature.slow_shld)] = .{
1016 .index = @enumToInt(Feature.slow_shld),902 .index = @enumToInt(Feature.slow_shld),
1017 .name = @tagName(Feature.slow_shld),903 .name = @tagName(Feature.slow_shld),
...@@ -1019,7 +905,6 @@ pub const all_features = blk: {...@@ -1019,7 +905,6 @@ pub const all_features = blk: {
1019 .description = "SHLD instruction is slow",905 .description = "SHLD instruction is slow",
1020 .dependencies = 0,906 .dependencies = 0,
1021 };907 };
1022
1023 result[@enumToInt(Feature.slow_two_mem_ops)] = .{908 result[@enumToInt(Feature.slow_two_mem_ops)] = .{
1024 .index = @enumToInt(Feature.slow_two_mem_ops),909 .index = @enumToInt(Feature.slow_two_mem_ops),
1025 .name = @tagName(Feature.slow_two_mem_ops),910 .name = @tagName(Feature.slow_two_mem_ops),
...@@ -1027,7 +912,6 @@ pub const all_features = blk: {...@@ -1027,7 +912,6 @@ pub const all_features = blk: {
1027 .description = "Two memory operand instructions are slow",912 .description = "Two memory operand instructions are slow",
1028 .dependencies = 0,913 .dependencies = 0,
1029 };914 };
1030
1031 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{915 result[@enumToInt(Feature.slow_unaligned_mem_16)] = .{
1032 .index = @enumToInt(Feature.slow_unaligned_mem_16),916 .index = @enumToInt(Feature.slow_unaligned_mem_16),
1033 .name = @tagName(Feature.slow_unaligned_mem_16),917 .name = @tagName(Feature.slow_unaligned_mem_16),
...@@ -1035,7 +919,6 @@ pub const all_features = blk: {...@@ -1035,7 +919,6 @@ pub const all_features = blk: {
1035 .description = "Slow unaligned 16-byte memory access",919 .description = "Slow unaligned 16-byte memory access",
1036 .dependencies = 0,920 .dependencies = 0,
1037 };921 };
1038
1039 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{922 result[@enumToInt(Feature.slow_unaligned_mem_32)] = .{
1040 .index = @enumToInt(Feature.slow_unaligned_mem_32),923 .index = @enumToInt(Feature.slow_unaligned_mem_32),
1041 .name = @tagName(Feature.slow_unaligned_mem_32),924 .name = @tagName(Feature.slow_unaligned_mem_32),
...@@ -1043,7 +926,6 @@ pub const all_features = blk: {...@@ -1043,7 +926,6 @@ pub const all_features = blk: {
1043 .description = "Slow unaligned 32-byte memory access",926 .description = "Slow unaligned 32-byte memory access",
1044 .dependencies = 0,927 .dependencies = 0,
1045 };928 };
1046
1047 result[@enumToInt(Feature.soft_float)] = .{929 result[@enumToInt(Feature.soft_float)] = .{
1048 .index = @enumToInt(Feature.soft_float),930 .index = @enumToInt(Feature.soft_float),
1049 .name = @tagName(Feature.soft_float),931 .name = @tagName(Feature.soft_float),
...@@ -1051,95 +933,101 @@ pub const all_features = blk: {...@@ -1051,95 +933,101 @@ pub const all_features = blk: {
1051 .description = "Use software floating point features",933 .description = "Use software floating point features",
1052 .dependencies = 0,934 .dependencies = 0,
1053 };935 };
1054936 result[@enumToInt(Feature.sse)] = .{
1055 result[@enumToInt(Feature.tbm)] = .{937 .index = @enumToInt(Feature.sse),
1056 .index = @enumToInt(Feature.tbm),938 .name = @tagName(Feature.sse),
1057 .name = @tagName(Feature.tbm),939 .llvm_name = "sse",
1058 .llvm_name = "tbm",940 .description = "Enable SSE instructions",
1059 .description = "Enable TBM instructions",
1060 .dependencies = 0,941 .dependencies = 0,
1061 };942 };
1062943 result[@enumToInt(Feature.sse_unaligned_mem)] = .{
1063 result[@enumToInt(Feature.vaes)] = .{944 .index = @enumToInt(Feature.sse_unaligned_mem),
1064 .index = @enumToInt(Feature.vaes),945 .name = @tagName(Feature.sse_unaligned_mem),
1065 .name = @tagName(Feature.vaes),946 .llvm_name = "sse-unaligned-mem",
1066 .llvm_name = "vaes",947 .description = "Allow unaligned memory operands with SSE instructions",
1067 .description = "Promote selected AES instructions to AVX512/AVX registers",948 .dependencies = 0,
949 };
950 result[@enumToInt(Feature.sse2)] = .{
951 .index = @enumToInt(Feature.sse2),
952 .name = @tagName(Feature.sse2),
953 .llvm_name = "sse2",
954 .description = "Enable SSE2 instructions",
1068 .dependencies = featureSet(&[_]Feature{955 .dependencies = featureSet(&[_]Feature{
1069 .sse,956 .sse,
1070 }),957 }),
1071 };958 };
1072959 result[@enumToInt(Feature.sse3)] = .{
1073 result[@enumToInt(Feature.avx512vbmi)] = .{960 .index = @enumToInt(Feature.sse3),
1074 .index = @enumToInt(Feature.avx512vbmi),961 .name = @tagName(Feature.sse3),
1075 .name = @tagName(Feature.avx512vbmi),962 .llvm_name = "sse3",
1076 .llvm_name = "avx512vbmi",963 .description = "Enable SSE3 instructions",
1077 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
1078 .dependencies = featureSet(&[_]Feature{964 .dependencies = featureSet(&[_]Feature{
1079 .sse,965 .sse2,
1080 }),966 }),
1081 };967 };
1082968 result[@enumToInt(Feature.sse4_1)] = .{
1083 result[@enumToInt(Feature.avx512vbmi2)] = .{969 .index = @enumToInt(Feature.sse4_1),
1084 .index = @enumToInt(Feature.avx512vbmi2),970 .name = @tagName(Feature.sse4_1),
1085 .name = @tagName(Feature.avx512vbmi2),971 .llvm_name = "sse4.1",
1086 .llvm_name = "avx512vbmi2",972 .description = "Enable SSE 4.1 instructions",
1087 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
1088 .dependencies = featureSet(&[_]Feature{973 .dependencies = featureSet(&[_]Feature{
1089 .sse,974 .ssse3,
1090 }),975 }),
1091 };976 };
1092977 result[@enumToInt(Feature.sse4_2)] = .{
1093 result[@enumToInt(Feature.avx512vl)] = .{978 .index = @enumToInt(Feature.sse4_2),
1094 .index = @enumToInt(Feature.avx512vl),979 .name = @tagName(Feature.sse4_2),
1095 .name = @tagName(Feature.avx512vl),980 .llvm_name = "sse4.2",
1096 .llvm_name = "avx512vl",981 .description = "Enable SSE 4.2 instructions",
1097 .description = "Enable AVX-512 Vector Length eXtensions",
1098 .dependencies = featureSet(&[_]Feature{982 .dependencies = featureSet(&[_]Feature{
1099 .sse,983 .sse4_1,
1100 }),984 }),
1101 };985 };
1102986 result[@enumToInt(Feature.sse4a)] = .{
1103 result[@enumToInt(Feature.avx512vnni)] = .{987 .index = @enumToInt(Feature.sse4a),
1104 .index = @enumToInt(Feature.avx512vnni),988 .name = @tagName(Feature.sse4a),
1105 .name = @tagName(Feature.avx512vnni),989 .llvm_name = "sse4a",
1106 .llvm_name = "avx512vnni",990 .description = "Support SSE 4a instructions",
1107 .description = "Enable AVX-512 Vector Neural Network Instructions",
1108 .dependencies = featureSet(&[_]Feature{991 .dependencies = featureSet(&[_]Feature{
1109 .sse,992 .sse3,
1110 }),993 }),
1111 };994 };
1112995 result[@enumToInt(Feature.ssse3)] = .{
1113 result[@enumToInt(Feature.avx512vp2intersect)] = .{996 .index = @enumToInt(Feature.ssse3),
1114 .index = @enumToInt(Feature.avx512vp2intersect),997 .name = @tagName(Feature.ssse3),
1115 .name = @tagName(Feature.avx512vp2intersect),998 .llvm_name = "ssse3",
1116 .llvm_name = "avx512vp2intersect",999 .description = "Enable SSSE3 instructions",
1117 .description = "Enable AVX-512 vp2intersect",
1118 .dependencies = featureSet(&[_]Feature{1000 .dependencies = featureSet(&[_]Feature{
1119 .sse,1001 .sse3,
1002 }),
1003 };
1004 result[@enumToInt(Feature.tbm)] = .{
1005 .index = @enumToInt(Feature.tbm),
1006 .name = @tagName(Feature.tbm),
1007 .llvm_name = "tbm",
1008 .description = "Enable TBM instructions",
1009 .dependencies = 0,
1010 };
1011 result[@enumToInt(Feature.vaes)] = .{
1012 .index = @enumToInt(Feature.vaes),
1013 .name = @tagName(Feature.vaes),
1014 .llvm_name = "vaes",
1015 .description = "Promote selected AES instructions to AVX512/AVX registers",
1016 .dependencies = featureSet(&[_]Feature{
1017 .aes,
1018 .avx,
1120 }),1019 }),
1121 };1020 };
1122
1123 result[@enumToInt(Feature.vpclmulqdq)] = .{1021 result[@enumToInt(Feature.vpclmulqdq)] = .{
1124 .index = @enumToInt(Feature.vpclmulqdq),1022 .index = @enumToInt(Feature.vpclmulqdq),
1125 .name = @tagName(Feature.vpclmulqdq),1023 .name = @tagName(Feature.vpclmulqdq),
1126 .llvm_name = "vpclmulqdq",1024 .llvm_name = "vpclmulqdq",
1127 .description = "Enable vpclmulqdq instructions",1025 .description = "Enable vpclmulqdq instructions",
1128 .dependencies = featureSet(&[_]Feature{1026 .dependencies = featureSet(&[_]Feature{
1129 .sse,1027 .avx,
1130 }),1028 .pclmul,
1131 };
1132
1133 result[@enumToInt(Feature.avx512vpopcntdq)] = .{
1134 .index = @enumToInt(Feature.avx512vpopcntdq),
1135 .name = @tagName(Feature.avx512vpopcntdq),
1136 .llvm_name = "avx512vpopcntdq",
1137 .description = "Enable AVX-512 Population Count Instructions",
1138 .dependencies = featureSet(&[_]Feature{
1139 .sse,
1140 }),1029 }),
1141 };1030 };
1142
1143 result[@enumToInt(Feature.waitpkg)] = .{1031 result[@enumToInt(Feature.waitpkg)] = .{
1144 .index = @enumToInt(Feature.waitpkg),1032 .index = @enumToInt(Feature.waitpkg),
1145 .name = @tagName(Feature.waitpkg),1033 .name = @tagName(Feature.waitpkg),
...@@ -1147,7 +1035,6 @@ pub const all_features = blk: {...@@ -1147,7 +1035,6 @@ pub const all_features = blk: {
1147 .description = "Wait and pause enhancements",1035 .description = "Wait and pause enhancements",
1148 .dependencies = 0,1036 .dependencies = 0,
1149 };1037 };
1150
1151 result[@enumToInt(Feature.wbnoinvd)] = .{1038 result[@enumToInt(Feature.wbnoinvd)] = .{
1152 .index = @enumToInt(Feature.wbnoinvd),1039 .index = @enumToInt(Feature.wbnoinvd),
1153 .name = @tagName(Feature.wbnoinvd),1040 .name = @tagName(Feature.wbnoinvd),
...@@ -1155,7 +1042,6 @@ pub const all_features = blk: {...@@ -1155,7 +1042,6 @@ pub const all_features = blk: {
1155 .description = "Write Back No Invalidate",1042 .description = "Write Back No Invalidate",
1156 .dependencies = 0,1043 .dependencies = 0,
1157 };1044 };
1158
1159 result[@enumToInt(Feature.x87)] = .{1045 result[@enumToInt(Feature.x87)] = .{
1160 .index = @enumToInt(Feature.x87),1046 .index = @enumToInt(Feature.x87),
1161 .name = @tagName(Feature.x87),1047 .name = @tagName(Feature.x87),
...@@ -1163,17 +1049,15 @@ pub const all_features = blk: {...@@ -1163,17 +1049,15 @@ pub const all_features = blk: {
1163 .description = "Enable X87 float instructions",1049 .description = "Enable X87 float instructions",
1164 .dependencies = 0,1050 .dependencies = 0,
1165 };1051 };
1166
1167 result[@enumToInt(Feature.xop)] = .{1052 result[@enumToInt(Feature.xop)] = .{
1168 .index = @enumToInt(Feature.xop),1053 .index = @enumToInt(Feature.xop),
1169 .name = @tagName(Feature.xop),1054 .name = @tagName(Feature.xop),
1170 .llvm_name = "xop",1055 .llvm_name = "xop",
1171 .description = "Enable XOP instructions",1056 .description = "Enable XOP instructions",
1172 .dependencies = featureSet(&[_]Feature{1057 .dependencies = featureSet(&[_]Feature{
1173 .sse,1058 .fma4,
1174 }),1059 }),
1175 };1060 };
1176
1177 result[@enumToInt(Feature.xsave)] = .{1061 result[@enumToInt(Feature.xsave)] = .{
1178 .index = @enumToInt(Feature.xsave),1062 .index = @enumToInt(Feature.xsave),
1179 .name = @tagName(Feature.xsave),1063 .name = @tagName(Feature.xsave),
...@@ -1181,7 +1065,6 @@ pub const all_features = blk: {...@@ -1181,7 +1065,6 @@ pub const all_features = blk: {
1181 .description = "Support xsave instructions",1065 .description = "Support xsave instructions",
1182 .dependencies = 0,1066 .dependencies = 0,
1183 };1067 };
1184
1185 result[@enumToInt(Feature.xsavec)] = .{1068 result[@enumToInt(Feature.xsavec)] = .{
1186 .index = @enumToInt(Feature.xsavec),1069 .index = @enumToInt(Feature.xsavec),
1187 .name = @tagName(Feature.xsavec),1070 .name = @tagName(Feature.xsavec),
...@@ -1189,7 +1072,6 @@ pub const all_features = blk: {...@@ -1189,7 +1072,6 @@ pub const all_features = blk: {
1189 .description = "Support xsavec instructions",1072 .description = "Support xsavec instructions",
1190 .dependencies = 0,1073 .dependencies = 0,
1191 };1074 };
1192
1193 result[@enumToInt(Feature.xsaveopt)] = .{1075 result[@enumToInt(Feature.xsaveopt)] = .{
1194 .index = @enumToInt(Feature.xsaveopt),1076 .index = @enumToInt(Feature.xsaveopt),
1195 .name = @tagName(Feature.xsaveopt),1077 .name = @tagName(Feature.xsaveopt),
...@@ -1197,7 +1079,6 @@ pub const all_features = blk: {...@@ -1197,7 +1079,6 @@ pub const all_features = blk: {
1197 .description = "Support xsaveopt instructions",1079 .description = "Support xsaveopt instructions",
1198 .dependencies = 0,1080 .dependencies = 0,
1199 };1081 };
1200
1201 result[@enumToInt(Feature.xsaves)] = .{1082 result[@enumToInt(Feature.xsaves)] = .{
1202 .index = @enumToInt(Feature.xsaves),1083 .index = @enumToInt(Feature.xsaves),
1203 .name = @tagName(Feature.xsaves),1084 .name = @tagName(Feature.xsaves),
...@@ -1205,7 +1086,6 @@ pub const all_features = blk: {...@@ -1205,7 +1086,6 @@ pub const all_features = blk: {
1205 .description = "Support xsaves instructions",1086 .description = "Support xsaves instructions",
1206 .dependencies = 0,1087 .dependencies = 0,
1207 };1088 };
1208
1209 break :blk result;1089 break :blk result;
1210};1090};
12111091
...@@ -1214,30 +1094,26 @@ pub const cpu = struct {...@@ -1214,30 +1094,26 @@ pub const cpu = struct {
1214 .name = "amdfam10",1094 .name = "amdfam10",
1215 .llvm_name = "amdfam10",1095 .llvm_name = "amdfam10",
1216 .features = featureSet(&[_]Feature{1096 .features = featureSet(&[_]Feature{
1217 .mmx,
1218 .@"3dnowa",1097 .@"3dnowa",
1219 .@"64bit",1098 .@"64bit",
1220 .cmov,1099 .cmov,
1221 .cx8,
1222 .cx16,1100 .cx16,
1223 .fxsr,1101 .cx8,
1224 .fast_scalar_shift_masks,1102 .fast_scalar_shift_masks,
1225 .sahf,1103 .fxsr,
1226 .lzcnt,1104 .lzcnt,
1227 .nopl,1105 .nopl,
1228 .popcnt,1106 .popcnt,
1229 .sse,1107 .sahf,
1230 .sse4a,
1231 .slow_shld,1108 .slow_shld,
1109 .sse4a,
1232 .x87,1110 .x87,
1233 }),1111 }),
1234 };1112 };
1235
1236 pub const athlon = Cpu{1113 pub const athlon = Cpu{
1237 .name = "athlon",1114 .name = "athlon",
1238 .llvm_name = "athlon",1115 .llvm_name = "athlon",
1239 .features = featureSet(&[_]Feature{1116 .features = featureSet(&[_]Feature{
1240 .mmx,
1241 .@"3dnowa",1117 .@"3dnowa",
1242 .cmov,1118 .cmov,
1243 .cx8,1119 .cx8,
...@@ -1247,66 +1123,57 @@ pub const cpu = struct {...@@ -1247,66 +1123,57 @@ pub const cpu = struct {
1247 .x87,1123 .x87,
1248 }),1124 }),
1249 };1125 };
12501126 pub const athlon_4 = Cpu{
1251 pub const athlon4 = Cpu{
1252 .name = "athlon_4",1127 .name = "athlon_4",
1253 .llvm_name = "athlon-4",1128 .llvm_name = "athlon-4",
1254 .features = featureSet(&[_]Feature{1129 .features = featureSet(&[_]Feature{
1255 .mmx,
1256 .@"3dnowa",1130 .@"3dnowa",
1257 .cmov,1131 .cmov,
1258 .cx8,1132 .cx8,
1259 .fxsr,1133 .fxsr,
1260 .nopl,1134 .nopl,
1261 .sse,
1262 .slow_shld,1135 .slow_shld,
1263 .slow_unaligned_mem_16,1136 .slow_unaligned_mem_16,
1137 .sse,
1264 .x87,1138 .x87,
1265 }),1139 }),
1266 };1140 };
1267
1268 pub const athlon_fx = Cpu{1141 pub const athlon_fx = Cpu{
1269 .name = "athlon_fx",1142 .name = "athlon_fx",
1270 .llvm_name = "athlon-fx",1143 .llvm_name = "athlon-fx",
1271 .features = featureSet(&[_]Feature{1144 .features = featureSet(&[_]Feature{
1272 .mmx,
1273 .@"3dnowa",1145 .@"3dnowa",
1274 .@"64bit",1146 .@"64bit",
1275 .cmov,1147 .cmov,
1276 .cx8,1148 .cx8,
1277 .fxsr,
1278 .fast_scalar_shift_masks,1149 .fast_scalar_shift_masks,
1150 .fxsr,
1279 .nopl,1151 .nopl,
1280 .sse,
1281 .sse2,
1282 .slow_shld,1152 .slow_shld,
1283 .slow_unaligned_mem_16,1153 .slow_unaligned_mem_16,
1154 .sse2,
1284 .x87,1155 .x87,
1285 }),1156 }),
1286 };1157 };
1287
1288 pub const athlon_mp = Cpu{1158 pub const athlon_mp = Cpu{
1289 .name = "athlon_mp",1159 .name = "athlon_mp",
1290 .llvm_name = "athlon-mp",1160 .llvm_name = "athlon-mp",
1291 .features = featureSet(&[_]Feature{1161 .features = featureSet(&[_]Feature{
1292 .mmx,
1293 .@"3dnowa",1162 .@"3dnowa",
1294 .cmov,1163 .cmov,
1295 .cx8,1164 .cx8,
1296 .fxsr,1165 .fxsr,
1297 .nopl,1166 .nopl,
1298 .sse,
1299 .slow_shld,1167 .slow_shld,
1300 .slow_unaligned_mem_16,1168 .slow_unaligned_mem_16,
1169 .sse,
1301 .x87,1170 .x87,
1302 }),1171 }),
1303 };1172 };
1304
1305 pub const athlon_tbird = Cpu{1173 pub const athlon_tbird = Cpu{
1306 .name = "athlon_tbird",1174 .name = "athlon_tbird",
1307 .llvm_name = "athlon-tbird",1175 .llvm_name = "athlon-tbird",
1308 .features = featureSet(&[_]Feature{1176 .features = featureSet(&[_]Feature{
1309 .mmx,
1310 .@"3dnowa",1177 .@"3dnowa",
1311 .cmov,1178 .cmov,
1312 .cx8,1179 .cx8,
...@@ -1316,129 +1183,113 @@ pub const cpu = struct {...@@ -1316,129 +1183,113 @@ pub const cpu = struct {
1316 .x87,1183 .x87,
1317 }),1184 }),
1318 };1185 };
1319
1320 pub const athlon_xp = Cpu{1186 pub const athlon_xp = Cpu{
1321 .name = "athlon_xp",1187 .name = "athlon_xp",
1322 .llvm_name = "athlon-xp",1188 .llvm_name = "athlon-xp",
1323 .features = featureSet(&[_]Feature{1189 .features = featureSet(&[_]Feature{
1324 .mmx,
1325 .@"3dnowa",1190 .@"3dnowa",
1326 .cmov,1191 .cmov,
1327 .cx8,1192 .cx8,
1328 .fxsr,1193 .fxsr,
1329 .nopl,1194 .nopl,
1330 .sse,
1331 .slow_shld,1195 .slow_shld,
1332 .slow_unaligned_mem_16,1196 .slow_unaligned_mem_16,
1197 .sse,
1333 .x87,1198 .x87,
1334 }),1199 }),
1335 };1200 };
1336
1337 pub const athlon64 = Cpu{1201 pub const athlon64 = Cpu{
1338 .name = "athlon64",1202 .name = "athlon64",
1339 .llvm_name = "athlon64",1203 .llvm_name = "athlon64",
1340 .features = featureSet(&[_]Feature{1204 .features = featureSet(&[_]Feature{
1341 .mmx,
1342 .@"3dnowa",1205 .@"3dnowa",
1343 .@"64bit",1206 .@"64bit",
1344 .cmov,1207 .cmov,
1345 .cx8,1208 .cx8,
1346 .fxsr,
1347 .fast_scalar_shift_masks,1209 .fast_scalar_shift_masks,
1210 .fxsr,
1348 .nopl,1211 .nopl,
1349 .sse,
1350 .sse2,
1351 .slow_shld,1212 .slow_shld,
1352 .slow_unaligned_mem_16,1213 .slow_unaligned_mem_16,
1214 .sse2,
1353 .x87,1215 .x87,
1354 }),1216 }),
1355 };1217 };
1356
1357 pub const athlon64_sse3 = Cpu{1218 pub const athlon64_sse3 = Cpu{
1358 .name = "athlon64_sse3",1219 .name = "athlon64_sse3",
1359 .llvm_name = "athlon64-sse3",1220 .llvm_name = "athlon64-sse3",
1360 .features = featureSet(&[_]Feature{1221 .features = featureSet(&[_]Feature{
1361 .mmx,
1362 .@"3dnowa",1222 .@"3dnowa",
1363 .@"64bit",1223 .@"64bit",
1364 .cmov,1224 .cmov,
1365 .cx8,
1366 .cx16,1225 .cx16,
1367 .fxsr,1226 .cx8,
1368 .fast_scalar_shift_masks,1227 .fast_scalar_shift_masks,
1228 .fxsr,
1369 .nopl,1229 .nopl,
1370 .sse,
1371 .sse3,
1372 .slow_shld,1230 .slow_shld,
1373 .slow_unaligned_mem_16,1231 .slow_unaligned_mem_16,
1232 .sse3,
1374 .x87,1233 .x87,
1375 }),1234 }),
1376 };1235 };
1377
1378 pub const atom = Cpu{1236 pub const atom = Cpu{
1379 .name = "atom",1237 .name = "atom",
1380 .llvm_name = "atom",1238 .llvm_name = "atom",
1381 .features = featureSet(&[_]Feature{1239 .features = featureSet(&[_]Feature{
1382 .@"64bit",1240 .@"64bit",
1383 .cmov,1241 .cmov,
1384 .cx8,
1385 .cx16,1242 .cx16,
1243 .cx8,
1386 .fxsr,1244 .fxsr,
1387 .sahf,1245 .idivl_to_divb,
1246 .idivq_to_divl,
1388 .lea_sp,1247 .lea_sp,
1389 .lea_uses_ag,1248 .lea_uses_ag,
1390 .mmx,1249 .mmx,
1391 .movbe,1250 .movbe,
1392 .nopl,1251 .nopl,
1393 .pad_short_functions,1252 .pad_short_functions,
1394 .sse,1253 .sahf,
1395 .ssse3,
1396 .idivl_to_divb,
1397 .idivq_to_divl,
1398 .slow_two_mem_ops,1254 .slow_two_mem_ops,
1399 .slow_unaligned_mem_16,1255 .slow_unaligned_mem_16,
1256 .ssse3,
1400 .x87,1257 .x87,
1401 }),1258 }),
1402 };1259 };
1403
1404 pub const barcelona = Cpu{1260 pub const barcelona = Cpu{
1405 .name = "barcelona",1261 .name = "barcelona",
1406 .llvm_name = "barcelona",1262 .llvm_name = "barcelona",
1407 .features = featureSet(&[_]Feature{1263 .features = featureSet(&[_]Feature{
1408 .mmx,
1409 .@"3dnowa",1264 .@"3dnowa",
1410 .@"64bit",1265 .@"64bit",
1411 .cmov,1266 .cmov,
1412 .cx8,
1413 .cx16,1267 .cx16,
1414 .fxsr,1268 .cx8,
1415 .fast_scalar_shift_masks,1269 .fast_scalar_shift_masks,
1416 .sahf,1270 .fxsr,
1417 .lzcnt,1271 .lzcnt,
1418 .nopl,1272 .nopl,
1419 .popcnt,1273 .popcnt,
1420 .sse,1274 .sahf,
1421 .sse4a,
1422 .slow_shld,1275 .slow_shld,
1276 .sse4a,
1423 .x87,1277 .x87,
1424 }),1278 }),
1425 };1279 };
1426
1427 pub const bdver1 = Cpu{1280 pub const bdver1 = Cpu{
1428 .name = "bdver1",1281 .name = "bdver1",
1429 .llvm_name = "bdver1",1282 .llvm_name = "bdver1",
1430 .features = featureSet(&[_]Feature{1283 .features = featureSet(&[_]Feature{
1431 .@"64bit",1284 .@"64bit",
1432 .sse,
1433 .aes,1285 .aes,
1434 .branchfusion,1286 .branchfusion,
1435 .cmov,1287 .cmov,
1436 .cx8,
1437 .cx16,1288 .cx16,
1438 .fxsr,1289 .cx8,
1439 .fast_11bytenop,1290 .fast_11bytenop,
1440 .fast_scalar_shift_masks,1291 .fast_scalar_shift_masks,
1441 .sahf,1292 .fxsr,
1442 .lwp,1293 .lwp,
1443 .lzcnt,1294 .lzcnt,
1444 .mmx,1295 .mmx,
...@@ -1446,32 +1297,30 @@ pub const cpu = struct {...@@ -1446,32 +1297,30 @@ pub const cpu = struct {
1446 .pclmul,1297 .pclmul,
1447 .popcnt,1298 .popcnt,
1448 .prfchw,1299 .prfchw,
1300 .sahf,
1449 .slow_shld,1301 .slow_shld,
1450 .x87,1302 .x87,
1451 .xop,1303 .xop,
1452 .xsave,1304 .xsave,
1453 }),1305 }),
1454 };1306 };
1455
1456 pub const bdver2 = Cpu{1307 pub const bdver2 = Cpu{
1457 .name = "bdver2",1308 .name = "bdver2",
1458 .llvm_name = "bdver2",1309 .llvm_name = "bdver2",
1459 .features = featureSet(&[_]Feature{1310 .features = featureSet(&[_]Feature{
1460 .@"64bit",1311 .@"64bit",
1461 .sse,
1462 .aes,1312 .aes,
1463 .bmi,1313 .bmi,
1464 .branchfusion,1314 .branchfusion,
1465 .cmov,1315 .cmov,
1466 .cx8,
1467 .cx16,1316 .cx16,
1317 .cx8,
1468 .f16c,1318 .f16c,
1469 .fma,
1470 .fxsr,
1471 .fast_11bytenop,1319 .fast_11bytenop,
1472 .fast_bextr,1320 .fast_bextr,
1473 .fast_scalar_shift_masks,1321 .fast_scalar_shift_masks,
1474 .sahf,1322 .fma,
1323 .fxsr,
1475 .lwp,1324 .lwp,
1476 .lzcnt,1325 .lzcnt,
1477 .mmx,1326 .mmx,
...@@ -1479,6 +1328,7 @@ pub const cpu = struct {...@@ -1479,6 +1328,7 @@ pub const cpu = struct {
1479 .pclmul,1328 .pclmul,
1480 .popcnt,1329 .popcnt,
1481 .prfchw,1330 .prfchw,
1331 .sahf,
1482 .slow_shld,1332 .slow_shld,
1483 .tbm,1333 .tbm,
1484 .x87,1334 .x87,
...@@ -1486,27 +1336,24 @@ pub const cpu = struct {...@@ -1486,27 +1336,24 @@ pub const cpu = struct {
1486 .xsave,1336 .xsave,
1487 }),1337 }),
1488 };1338 };
1489
1490 pub const bdver3 = Cpu{1339 pub const bdver3 = Cpu{
1491 .name = "bdver3",1340 .name = "bdver3",
1492 .llvm_name = "bdver3",1341 .llvm_name = "bdver3",
1493 .features = featureSet(&[_]Feature{1342 .features = featureSet(&[_]Feature{
1494 .@"64bit",1343 .@"64bit",
1495 .sse,
1496 .aes,1344 .aes,
1497 .bmi,1345 .bmi,
1498 .branchfusion,1346 .branchfusion,
1499 .cmov,1347 .cmov,
1500 .cx8,
1501 .cx16,1348 .cx16,
1349 .cx8,
1502 .f16c,1350 .f16c,
1503 .fma,
1504 .fsgsbase,
1505 .fxsr,
1506 .fast_11bytenop,1351 .fast_11bytenop,
1507 .fast_bextr,1352 .fast_bextr,
1508 .fast_scalar_shift_masks,1353 .fast_scalar_shift_masks,
1509 .sahf,1354 .fma,
1355 .fsgsbase,
1356 .fxsr,
1510 .lwp,1357 .lwp,
1511 .lzcnt,1358 .lzcnt,
1512 .mmx,1359 .mmx,
...@@ -1514,6 +1361,7 @@ pub const cpu = struct {...@@ -1514,6 +1361,7 @@ pub const cpu = struct {
1514 .pclmul,1361 .pclmul,
1515 .popcnt,1362 .popcnt,
1516 .prfchw,1363 .prfchw,
1364 .sahf,
1517 .slow_shld,1365 .slow_shld,
1518 .tbm,1366 .tbm,
1519 .x87,1367 .x87,
...@@ -1522,29 +1370,26 @@ pub const cpu = struct {...@@ -1522,29 +1370,26 @@ pub const cpu = struct {
1522 .xsaveopt,1370 .xsaveopt,
1523 }),1371 }),
1524 };1372 };
1525
1526 pub const bdver4 = Cpu{1373 pub const bdver4 = Cpu{
1527 .name = "bdver4",1374 .name = "bdver4",
1528 .llvm_name = "bdver4",1375 .llvm_name = "bdver4",
1529 .features = featureSet(&[_]Feature{1376 .features = featureSet(&[_]Feature{
1530 .@"64bit",1377 .@"64bit",
1531 .sse,
1532 .aes,1378 .aes,
1533 .avx2,1379 .avx2,
1534 .bmi,1380 .bmi,
1535 .bmi2,1381 .bmi2,
1536 .branchfusion,1382 .branchfusion,
1537 .cmov,1383 .cmov,
1538 .cx8,
1539 .cx16,1384 .cx16,
1385 .cx8,
1540 .f16c,1386 .f16c,
1541 .fma,
1542 .fsgsbase,
1543 .fxsr,
1544 .fast_11bytenop,1387 .fast_11bytenop,
1545 .fast_bextr,1388 .fast_bextr,
1546 .fast_scalar_shift_masks,1389 .fast_scalar_shift_masks,
1547 .sahf,1390 .fma,
1391 .fsgsbase,
1392 .fxsr,
1548 .lwp,1393 .lwp,
1549 .lzcnt,1394 .lzcnt,
1550 .mmx,1395 .mmx,
...@@ -1553,6 +1398,7 @@ pub const cpu = struct {...@@ -1553,6 +1398,7 @@ pub const cpu = struct {
1553 .pclmul,1398 .pclmul,
1554 .popcnt,1399 .popcnt,
1555 .prfchw,1400 .prfchw,
1401 .sahf,
1556 .slow_shld,1402 .slow_shld,
1557 .tbm,1403 .tbm,
1558 .x87,1404 .x87,
...@@ -1561,119 +1407,110 @@ pub const cpu = struct {...@@ -1561,119 +1407,110 @@ pub const cpu = struct {
1561 .xsaveopt,1407 .xsaveopt,
1562 }),1408 }),
1563 };1409 };
1564
1565 pub const bonnell = Cpu{1410 pub const bonnell = Cpu{
1566 .name = "bonnell",1411 .name = "bonnell",
1567 .llvm_name = "bonnell",1412 .llvm_name = "bonnell",
1568 .features = featureSet(&[_]Feature{1413 .features = featureSet(&[_]Feature{
1569 .@"64bit",1414 .@"64bit",
1570 .cmov,1415 .cmov,
1571 .cx8,
1572 .cx16,1416 .cx16,
1417 .cx8,
1573 .fxsr,1418 .fxsr,
1574 .sahf,1419 .idivl_to_divb,
1420 .idivq_to_divl,
1575 .lea_sp,1421 .lea_sp,
1576 .lea_uses_ag,1422 .lea_uses_ag,
1577 .mmx,1423 .mmx,
1578 .movbe,1424 .movbe,
1579 .nopl,1425 .nopl,
1580 .pad_short_functions,1426 .pad_short_functions,
1581 .sse,1427 .sahf,
1582 .ssse3,
1583 .idivl_to_divb,
1584 .idivq_to_divl,
1585 .slow_two_mem_ops,1428 .slow_two_mem_ops,
1586 .slow_unaligned_mem_16,1429 .slow_unaligned_mem_16,
1430 .ssse3,
1587 .x87,1431 .x87,
1588 }),1432 }),
1589 };1433 };
1590
1591 pub const broadwell = Cpu{1434 pub const broadwell = Cpu{
1592 .name = "broadwell",1435 .name = "broadwell",
1593 .llvm_name = "broadwell",1436 .llvm_name = "broadwell",
1594 .features = featureSet(&[_]Feature{1437 .features = featureSet(&[_]Feature{
1595 .@"64bit",1438 .@"64bit",
1596 .adx,1439 .adx,
1597 .sse,
1598 .avx,1440 .avx,
1599 .avx2,1441 .avx2,
1600 .bmi,1442 .bmi,
1601 .bmi2,1443 .bmi2,
1602 .cmov,1444 .cmov,
1603 .cx8,
1604 .cx16,1445 .cx16,
1446 .cx8,
1605 .ermsb,1447 .ermsb,
1606 .f16c,1448 .f16c,
1449 .false_deps_lzcnt_tzcnt,
1450 .false_deps_popcnt,
1451 .fast_scalar_fsqrt,
1452 .fast_shld_rotate,
1453 .fast_variable_shuffle,
1607 .fma,1454 .fma,
1608 .fsgsbase,1455 .fsgsbase,
1609 .fxsr,1456 .fxsr,
1610 .fast_shld_rotate,1457 .idivq_to_divl,
1611 .fast_scalar_fsqrt,
1612 .fast_variable_shuffle,
1613 .invpcid,1458 .invpcid,
1614 .sahf,
1615 .lzcnt,1459 .lzcnt,
1616 .false_deps_lzcnt_tzcnt,
1617 .mmx,
1618 .movbe,
1619 .macrofusion,1460 .macrofusion,
1620 .merge_to_threeway_branch,1461 .merge_to_threeway_branch,
1462 .mmx,
1463 .movbe,
1621 .nopl,1464 .nopl,
1622 .pclmul,1465 .pclmul,
1623 .popcnt,1466 .popcnt,
1624 .false_deps_popcnt,
1625 .prfchw,1467 .prfchw,
1626 .rdrnd,1468 .rdrnd,
1627 .rdseed,1469 .rdseed,
1628 .sse4_2,1470 .sahf,
1629 .slow_3ops_lea,1471 .slow_3ops_lea,
1630 .idivq_to_divl,1472 .sse4_2,
1631 .x87,1473 .x87,
1632 .xsave,1474 .xsave,
1633 .xsaveopt,1475 .xsaveopt,
1634 }),1476 }),
1635 };1477 };
1636
1637 pub const btver1 = Cpu{1478 pub const btver1 = Cpu{
1638 .name = "btver1",1479 .name = "btver1",
1639 .llvm_name = "btver1",1480 .llvm_name = "btver1",
1640 .features = featureSet(&[_]Feature{1481 .features = featureSet(&[_]Feature{
1641 .@"64bit",1482 .@"64bit",
1642 .cmov,1483 .cmov,
1643 .cx8,
1644 .cx16,1484 .cx16,
1645 .fxsr,1485 .cx8,
1646 .fast_15bytenop,1486 .fast_15bytenop,
1647 .fast_scalar_shift_masks,1487 .fast_scalar_shift_masks,
1648 .fast_vector_shift_masks,1488 .fast_vector_shift_masks,
1649 .sahf,1489 .fxsr,
1650 .lzcnt,1490 .lzcnt,
1651 .mmx,1491 .mmx,
1652 .nopl,1492 .nopl,
1653 .popcnt,1493 .popcnt,
1654 .prfchw,1494 .prfchw,
1655 .sse,1495 .sahf,
1496 .slow_shld,
1656 .sse4a,1497 .sse4a,
1657 .ssse3,1498 .ssse3,
1658 .slow_shld,
1659 .x87,1499 .x87,
1660 }),1500 }),
1661 };1501 };
1662
1663 pub const btver2 = Cpu{1502 pub const btver2 = Cpu{
1664 .name = "btver2",1503 .name = "btver2",
1665 .llvm_name = "btver2",1504 .llvm_name = "btver2",
1666 .features = featureSet(&[_]Feature{1505 .features = featureSet(&[_]Feature{
1667 .@"64bit",1506 .@"64bit",
1668 .sse,
1669 .aes,1507 .aes,
1670 .avx,1508 .avx,
1671 .bmi,1509 .bmi,
1672 .cmov,1510 .cmov,
1673 .cx8,
1674 .cx16,1511 .cx16,
1512 .cx8,
1675 .f16c,1513 .f16c,
1676 .fxsr,
1677 .fast_15bytenop,1514 .fast_15bytenop,
1678 .fast_bextr,1515 .fast_bextr,
1679 .fast_hops,1516 .fast_hops,
...@@ -1681,7 +1518,7 @@ pub const cpu = struct {...@@ -1681,7 +1518,7 @@ pub const cpu = struct {
1681 .fast_partial_ymm_or_zmm_write,1518 .fast_partial_ymm_or_zmm_write,
1682 .fast_scalar_shift_masks,1519 .fast_scalar_shift_masks,
1683 .fast_vector_shift_masks,1520 .fast_vector_shift_masks,
1684 .sahf,1521 .fxsr,
1685 .lzcnt,1522 .lzcnt,
1686 .mmx,1523 .mmx,
1687 .movbe,1524 .movbe,
...@@ -1689,27 +1526,25 @@ pub const cpu = struct {...@@ -1689,27 +1526,25 @@ pub const cpu = struct {
1689 .pclmul,1526 .pclmul,
1690 .popcnt,1527 .popcnt,
1691 .prfchw,1528 .prfchw,
1529 .sahf,
1530 .slow_shld,
1692 .sse4a,1531 .sse4a,
1693 .ssse3,1532 .ssse3,
1694 .slow_shld,
1695 .x87,1533 .x87,
1696 .xsave,1534 .xsave,
1697 .xsaveopt,1535 .xsaveopt,
1698 }),1536 }),
1699 };1537 };
1700
1701 pub const c3 = Cpu{1538 pub const c3 = Cpu{
1702 .name = "c3",1539 .name = "c3",
1703 .llvm_name = "c3",1540 .llvm_name = "c3",
1704 .features = featureSet(&[_]Feature{1541 .features = featureSet(&[_]Feature{
1705 .mmx,
1706 .@"3dnow",1542 .@"3dnow",
1707 .slow_unaligned_mem_16,1543 .slow_unaligned_mem_16,
1708 .x87,1544 .x87,
1709 }),1545 }),
1710 };1546 };
17111547 pub const c3_2 = Cpu{
1712 pub const c32 = Cpu{
1713 .name = "c3_2",1548 .name = "c3_2",
1714 .llvm_name = "c3-2",1549 .llvm_name = "c3-2",
1715 .features = featureSet(&[_]Feature{1550 .features = featureSet(&[_]Feature{
...@@ -1717,51 +1552,51 @@ pub const cpu = struct {...@@ -1717,51 +1552,51 @@ pub const cpu = struct {
1717 .cx8,1552 .cx8,
1718 .fxsr,1553 .fxsr,
1719 .mmx,1554 .mmx,
1720 .sse,
1721 .slow_unaligned_mem_16,1555 .slow_unaligned_mem_16,
1556 .sse,
1722 .x87,1557 .x87,
1723 }),1558 }),
1724 };1559 };
1725
1726 pub const cannonlake = Cpu{1560 pub const cannonlake = Cpu{
1727 .name = "cannonlake",1561 .name = "cannonlake",
1728 .llvm_name = "cannonlake",1562 .llvm_name = "cannonlake",
1729 .features = featureSet(&[_]Feature{1563 .features = featureSet(&[_]Feature{
1730 .@"64bit",1564 .@"64bit",
1731 .adx,1565 .adx,
1732 .sse,
1733 .aes,1566 .aes,
1734 .avx,1567 .avx,
1735 .avx2,1568 .avx2,
1569 .avx512bw,
1570 .avx512cd,
1571 .avx512dq,
1736 .avx512f,1572 .avx512f,
1573 .avx512ifma,
1574 .avx512vbmi,
1575 .avx512vl,
1737 .bmi,1576 .bmi,
1738 .bmi2,1577 .bmi2,
1739 .avx512bw,
1740 .avx512cd,
1741 .clflushopt,1578 .clflushopt,
1742 .cmov,1579 .cmov,
1743 .cx8,
1744 .cx16,1580 .cx16,
1745 .avx512dq,1581 .cx8,
1746 .ermsb,1582 .ermsb,
1747 .f16c,1583 .f16c,
1748 .fma,1584 .fast_gather,
1749 .fsgsbase,
1750 .fxsr,
1751 .fast_shld_rotate,
1752 .fast_scalar_fsqrt,1585 .fast_scalar_fsqrt,
1586 .fast_shld_rotate,
1753 .fast_variable_shuffle,1587 .fast_variable_shuffle,
1754 .fast_vector_fsqrt,1588 .fast_vector_fsqrt,
1755 .fast_gather,1589 .fma,
1756 .avx512ifma,1590 .fsgsbase,
1591 .fxsr,
1592 .idivq_to_divl,
1757 .invpcid,1593 .invpcid,
1758 .sahf,
1759 .lzcnt,1594 .lzcnt,
1595 .macrofusion,
1596 .merge_to_threeway_branch,
1760 .mmx,1597 .mmx,
1761 .movbe,1598 .movbe,
1762 .mpx,1599 .mpx,
1763 .macrofusion,
1764 .merge_to_threeway_branch,
1765 .nopl,1600 .nopl,
1766 .pclmul,1601 .pclmul,
1767 .pku,1602 .pku,
...@@ -1769,13 +1604,11 @@ pub const cpu = struct {...@@ -1769,13 +1604,11 @@ pub const cpu = struct {
1769 .prfchw,1604 .prfchw,
1770 .rdrnd,1605 .rdrnd,
1771 .rdseed,1606 .rdseed,
1607 .sahf,
1772 .sgx,1608 .sgx,
1773 .sha,1609 .sha,
1774 .sse4_2,
1775 .slow_3ops_lea,1610 .slow_3ops_lea,
1776 .idivq_to_divl,1611 .sse4_2,
1777 .avx512vbmi,
1778 .avx512vl,
1779 .x87,1612 .x87,
1780 .xsave,1613 .xsave,
1781 .xsavec,1614 .xsavec,
...@@ -1783,59 +1616,57 @@ pub const cpu = struct {...@@ -1783,59 +1616,57 @@ pub const cpu = struct {
1783 .xsaves,1616 .xsaves,
1784 }),1617 }),
1785 };1618 };
1786
1787 pub const cascadelake = Cpu{1619 pub const cascadelake = Cpu{
1788 .name = "cascadelake",1620 .name = "cascadelake",
1789 .llvm_name = "cascadelake",1621 .llvm_name = "cascadelake",
1790 .features = featureSet(&[_]Feature{1622 .features = featureSet(&[_]Feature{
1791 .@"64bit",1623 .@"64bit",
1792 .adx,1624 .adx,
1793 .sse,
1794 .aes,1625 .aes,
1795 .avx,1626 .avx,
1796 .avx2,1627 .avx2,
1628 .avx512bw,
1629 .avx512cd,
1630 .avx512dq,
1797 .avx512f,1631 .avx512f,
1632 .avx512vl,
1633 .avx512vnni,
1798 .bmi,1634 .bmi,
1799 .bmi2,1635 .bmi2,
1800 .avx512bw,
1801 .avx512cd,
1802 .clflushopt,1636 .clflushopt,
1803 .clwb,1637 .clwb,
1804 .cmov,1638 .cmov,
1805 .cx8,
1806 .cx16,1639 .cx16,
1807 .avx512dq,1640 .cx8,
1808 .ermsb,1641 .ermsb,
1809 .f16c,1642 .f16c,
1810 .fma,1643 .false_deps_popcnt,
1811 .fsgsbase,1644 .fast_gather,
1812 .fxsr,
1813 .fast_shld_rotate,
1814 .fast_scalar_fsqrt,1645 .fast_scalar_fsqrt,
1646 .fast_shld_rotate,
1815 .fast_variable_shuffle,1647 .fast_variable_shuffle,
1816 .fast_vector_fsqrt,1648 .fast_vector_fsqrt,
1817 .fast_gather,1649 .fma,
1650 .fsgsbase,
1651 .fxsr,
1652 .idivq_to_divl,
1818 .invpcid,1653 .invpcid,
1819 .sahf,
1820 .lzcnt,1654 .lzcnt,
1655 .macrofusion,
1656 .merge_to_threeway_branch,
1821 .mmx,1657 .mmx,
1822 .movbe,1658 .movbe,
1823 .mpx,1659 .mpx,
1824 .macrofusion,
1825 .merge_to_threeway_branch,
1826 .nopl,1660 .nopl,
1827 .pclmul,1661 .pclmul,
1828 .pku,1662 .pku,
1829 .popcnt,1663 .popcnt,
1830 .false_deps_popcnt,
1831 .prfchw,1664 .prfchw,
1832 .rdrnd,1665 .rdrnd,
1833 .rdseed,1666 .rdseed,
1834 .sse4_2,1667 .sahf,
1835 .slow_3ops_lea,1668 .slow_3ops_lea,
1836 .idivq_to_divl,1669 .sse4_2,
1837 .avx512vl,
1838 .avx512vnni,
1839 .x87,1670 .x87,
1840 .xsave,1671 .xsave,
1841 .xsavec,1672 .xsavec,
...@@ -1843,60 +1674,58 @@ pub const cpu = struct {...@@ -1843,60 +1674,58 @@ pub const cpu = struct {
1843 .xsaves,1674 .xsaves,
1844 }),1675 }),
1845 };1676 };
1846
1847 pub const cooperlake = Cpu{1677 pub const cooperlake = Cpu{
1848 .name = "cooperlake",1678 .name = "cooperlake",
1849 .llvm_name = "cooperlake",1679 .llvm_name = "cooperlake",
1850 .features = featureSet(&[_]Feature{1680 .features = featureSet(&[_]Feature{
1851 .@"64bit",1681 .@"64bit",
1852 .adx,1682 .adx,
1853 .sse,
1854 .aes,1683 .aes,
1855 .avx,1684 .avx,
1856 .avx2,1685 .avx2,
1857 .avx512f,
1858 .avx512bf16,1686 .avx512bf16,
1859 .bmi,
1860 .bmi2,
1861 .avx512bw,1687 .avx512bw,
1862 .avx512cd,1688 .avx512cd,
1689 .avx512dq,
1690 .avx512f,
1691 .avx512vl,
1692 .avx512vnni,
1693 .bmi,
1694 .bmi2,
1863 .clflushopt,1695 .clflushopt,
1864 .clwb,1696 .clwb,
1865 .cmov,1697 .cmov,
1866 .cx8,
1867 .cx16,1698 .cx16,
1868 .avx512dq,1699 .cx8,
1869 .ermsb,1700 .ermsb,
1870 .f16c,1701 .f16c,
1871 .fma,1702 .false_deps_popcnt,
1872 .fsgsbase,1703 .fast_gather,
1873 .fxsr,
1874 .fast_shld_rotate,
1875 .fast_scalar_fsqrt,1704 .fast_scalar_fsqrt,
1705 .fast_shld_rotate,
1876 .fast_variable_shuffle,1706 .fast_variable_shuffle,
1877 .fast_vector_fsqrt,1707 .fast_vector_fsqrt,
1878 .fast_gather,1708 .fma,
1709 .fsgsbase,
1710 .fxsr,
1711 .idivq_to_divl,
1879 .invpcid,1712 .invpcid,
1880 .sahf,
1881 .lzcnt,1713 .lzcnt,
1714 .macrofusion,
1715 .merge_to_threeway_branch,
1882 .mmx,1716 .mmx,
1883 .movbe,1717 .movbe,
1884 .mpx,1718 .mpx,
1885 .macrofusion,
1886 .merge_to_threeway_branch,
1887 .nopl,1719 .nopl,
1888 .pclmul,1720 .pclmul,
1889 .pku,1721 .pku,
1890 .popcnt,1722 .popcnt,
1891 .false_deps_popcnt,
1892 .prfchw,1723 .prfchw,
1893 .rdrnd,1724 .rdrnd,
1894 .rdseed,1725 .rdseed,
1895 .sse4_2,1726 .sahf,
1896 .slow_3ops_lea,1727 .slow_3ops_lea,
1897 .idivq_to_divl,1728 .sse4_2,
1898 .avx512vl,
1899 .avx512vnni,
1900 .x87,1729 .x87,
1901 .xsave,1730 .xsave,
1902 .xsavec,1731 .xsavec,
...@@ -1904,155 +1733,144 @@ pub const cpu = struct {...@@ -1904,155 +1733,144 @@ pub const cpu = struct {
1904 .xsaves,1733 .xsaves,
1905 }),1734 }),
1906 };1735 };
1907
1908 pub const core_avx_i = Cpu{1736 pub const core_avx_i = Cpu{
1909 .name = "core_avx_i",1737 .name = "core_avx_i",
1910 .llvm_name = "core-avx-i",1738 .llvm_name = "core-avx-i",
1911 .features = featureSet(&[_]Feature{1739 .features = featureSet(&[_]Feature{
1912 .@"64bit",1740 .@"64bit",
1913 .sse,
1914 .avx,1741 .avx,
1915 .cmov,1742 .cmov,
1916 .cx8,
1917 .cx16,1743 .cx16,
1744 .cx8,
1918 .f16c,1745 .f16c,
1746 .false_deps_popcnt,
1747 .fast_scalar_fsqrt,
1748 .fast_shld_rotate,
1919 .fsgsbase,1749 .fsgsbase,
1920 .fxsr,1750 .fxsr,
1921 .fast_shld_rotate,1751 .idivq_to_divl,
1922 .fast_scalar_fsqrt,
1923 .sahf,
1924 .mmx,
1925 .macrofusion,1752 .macrofusion,
1926 .merge_to_threeway_branch,1753 .merge_to_threeway_branch,
1754 .mmx,
1927 .nopl,1755 .nopl,
1928 .pclmul,1756 .pclmul,
1929 .popcnt,1757 .popcnt,
1930 .false_deps_popcnt,
1931 .rdrnd,1758 .rdrnd,
1932 .sse4_2,1759 .sahf,
1933 .slow_3ops_lea,1760 .slow_3ops_lea,
1934 .idivq_to_divl,
1935 .slow_unaligned_mem_32,1761 .slow_unaligned_mem_32,
1762 .sse4_2,
1936 .x87,1763 .x87,
1937 .xsave,1764 .xsave,
1938 .xsaveopt,1765 .xsaveopt,
1939 }),1766 }),
1940 };1767 };
1941
1942 pub const core_avx2 = Cpu{1768 pub const core_avx2 = Cpu{
1943 .name = "core_avx2",1769 .name = "core_avx2",
1944 .llvm_name = "core-avx2",1770 .llvm_name = "core-avx2",
1945 .features = featureSet(&[_]Feature{1771 .features = featureSet(&[_]Feature{
1946 .@"64bit",1772 .@"64bit",
1947 .sse,
1948 .avx,1773 .avx,
1949 .avx2,1774 .avx2,
1950 .bmi,1775 .bmi,
1951 .bmi2,1776 .bmi2,
1952 .cmov,1777 .cmov,
1953 .cx8,
1954 .cx16,1778 .cx16,
1779 .cx8,
1955 .ermsb,1780 .ermsb,
1956 .f16c,1781 .f16c,
1782 .false_deps_lzcnt_tzcnt,
1783 .false_deps_popcnt,
1784 .fast_scalar_fsqrt,
1785 .fast_shld_rotate,
1786 .fast_variable_shuffle,
1957 .fma,1787 .fma,
1958 .fsgsbase,1788 .fsgsbase,
1959 .fxsr,1789 .fxsr,
1960 .fast_shld_rotate,1790 .idivq_to_divl,
1961 .fast_scalar_fsqrt,
1962 .fast_variable_shuffle,
1963 .invpcid,1791 .invpcid,
1964 .sahf,
1965 .lzcnt,1792 .lzcnt,
1966 .false_deps_lzcnt_tzcnt,
1967 .mmx,
1968 .movbe,
1969 .macrofusion,1793 .macrofusion,
1970 .merge_to_threeway_branch,1794 .merge_to_threeway_branch,
1795 .mmx,
1796 .movbe,
1971 .nopl,1797 .nopl,
1972 .pclmul,1798 .pclmul,
1973 .popcnt,1799 .popcnt,
1974 .false_deps_popcnt,
1975 .rdrnd,1800 .rdrnd,
1976 .sse4_2,1801 .sahf,
1977 .slow_3ops_lea,1802 .slow_3ops_lea,
1978 .idivq_to_divl,1803 .sse4_2,
1979 .x87,1804 .x87,
1980 .xsave,1805 .xsave,
1981 .xsaveopt,1806 .xsaveopt,
1982 }),1807 }),
1983 };1808 };
1984
1985 pub const core2 = Cpu{1809 pub const core2 = Cpu{
1986 .name = "core2",1810 .name = "core2",
1987 .llvm_name = "core2",1811 .llvm_name = "core2",
1988 .features = featureSet(&[_]Feature{1812 .features = featureSet(&[_]Feature{
1989 .@"64bit",1813 .@"64bit",
1990 .cmov,1814 .cmov,
1991 .cx8,
1992 .cx16,1815 .cx16,
1816 .cx8,
1993 .fxsr,1817 .fxsr,
1994 .sahf,
1995 .mmx,
1996 .macrofusion,1818 .macrofusion,
1819 .mmx,
1997 .nopl,1820 .nopl,
1998 .sse,1821 .sahf,
1999 .ssse3,
2000 .slow_unaligned_mem_16,1822 .slow_unaligned_mem_16,
1823 .ssse3,
2001 .x87,1824 .x87,
2002 }),1825 }),
2003 };1826 };
2004
2005 pub const corei7 = Cpu{1827 pub const corei7 = Cpu{
2006 .name = "corei7",1828 .name = "corei7",
2007 .llvm_name = "corei7",1829 .llvm_name = "corei7",
2008 .features = featureSet(&[_]Feature{1830 .features = featureSet(&[_]Feature{
2009 .@"64bit",1831 .@"64bit",
2010 .cmov,1832 .cmov,
2011 .cx8,
2012 .cx16,1833 .cx16,
1834 .cx8,
2013 .fxsr,1835 .fxsr,
2014 .sahf,
2015 .mmx,
2016 .macrofusion,1836 .macrofusion,
1837 .mmx,
2017 .nopl,1838 .nopl,
2018 .popcnt,1839 .popcnt,
2019 .sse,1840 .sahf,
2020 .sse4_2,1841 .sse4_2,
2021 .x87,1842 .x87,
2022 }),1843 }),
2023 };1844 };
2024
2025 pub const corei7_avx = Cpu{1845 pub const corei7_avx = Cpu{
2026 .name = "corei7_avx",1846 .name = "corei7_avx",
2027 .llvm_name = "corei7-avx",1847 .llvm_name = "corei7-avx",
2028 .features = featureSet(&[_]Feature{1848 .features = featureSet(&[_]Feature{
2029 .@"64bit",1849 .@"64bit",
2030 .sse,
2031 .avx,1850 .avx,
2032 .cmov,1851 .cmov,
2033 .cx8,
2034 .cx16,1852 .cx16,
2035 .fxsr,1853 .cx8,
2036 .fast_shld_rotate,1854 .false_deps_popcnt,
2037 .fast_scalar_fsqrt,1855 .fast_scalar_fsqrt,
2038 .sahf,1856 .fast_shld_rotate,
2039 .mmx,1857 .fxsr,
1858 .idivq_to_divl,
2040 .macrofusion,1859 .macrofusion,
2041 .merge_to_threeway_branch,1860 .merge_to_threeway_branch,
1861 .mmx,
2042 .nopl,1862 .nopl,
2043 .pclmul,1863 .pclmul,
2044 .popcnt,1864 .popcnt,
2045 .false_deps_popcnt,1865 .sahf,
2046 .sse4_2,
2047 .slow_3ops_lea,1866 .slow_3ops_lea,
2048 .idivq_to_divl,
2049 .slow_unaligned_mem_32,1867 .slow_unaligned_mem_32,
1868 .sse4_2,
2050 .x87,1869 .x87,
2051 .xsave,1870 .xsave,
2052 .xsaveopt,1871 .xsaveopt,
2053 }),1872 }),
2054 };1873 };
2055
2056 pub const generic = Cpu{1874 pub const generic = Cpu{
2057 .name = "generic",1875 .name = "generic",
2058 .llvm_name = "generic",1876 .llvm_name = "generic",
...@@ -2062,49 +1880,45 @@ pub const cpu = struct {...@@ -2062,49 +1880,45 @@ pub const cpu = struct {
2062 .x87,1880 .x87,
2063 }),1881 }),
2064 };1882 };
2065
2066 pub const geode = Cpu{1883 pub const geode = Cpu{
2067 .name = "geode",1884 .name = "geode",
2068 .llvm_name = "geode",1885 .llvm_name = "geode",
2069 .features = featureSet(&[_]Feature{1886 .features = featureSet(&[_]Feature{
2070 .mmx,
2071 .@"3dnowa",1887 .@"3dnowa",
2072 .cx8,1888 .cx8,
2073 .slow_unaligned_mem_16,1889 .slow_unaligned_mem_16,
2074 .x87,1890 .x87,
2075 }),1891 }),
2076 };1892 };
2077
2078 pub const goldmont = Cpu{1893 pub const goldmont = Cpu{
2079 .name = "goldmont",1894 .name = "goldmont",
2080 .llvm_name = "goldmont",1895 .llvm_name = "goldmont",
2081 .features = featureSet(&[_]Feature{1896 .features = featureSet(&[_]Feature{
2082 .@"64bit",1897 .@"64bit",
2083 .sse,
2084 .aes,1898 .aes,
2085 .clflushopt,1899 .clflushopt,
2086 .cmov,1900 .cmov,
2087 .cx8,
2088 .cx16,1901 .cx16,
1902 .cx8,
1903 .false_deps_popcnt,
2089 .fsgsbase,1904 .fsgsbase,
2090 .fxsr,1905 .fxsr,
2091 .sahf,
2092 .mmx,1906 .mmx,
2093 .movbe,1907 .movbe,
2094 .mpx,1908 .mpx,
2095 .nopl,1909 .nopl,
2096 .pclmul,1910 .pclmul,
2097 .popcnt,1911 .popcnt,
2098 .false_deps_popcnt,
2099 .prfchw,1912 .prfchw,
2100 .rdrnd,1913 .rdrnd,
2101 .rdseed,1914 .rdseed,
1915 .sahf,
2102 .sha,1916 .sha,
2103 .sse4_2,
2104 .ssse3,
2105 .slow_incdec,1917 .slow_incdec,
2106 .slow_lea,1918 .slow_lea,
2107 .slow_two_mem_ops,1919 .slow_two_mem_ops,
1920 .sse4_2,
1921 .ssse3,
2108 .x87,1922 .x87,
2109 .xsave,1923 .xsave,
2110 .xsavec,1924 .xsavec,
...@@ -2112,21 +1926,18 @@ pub const cpu = struct {...@@ -2112,21 +1926,18 @@ pub const cpu = struct {
2112 .xsaves,1926 .xsaves,
2113 }),1927 }),
2114 };1928 };
2115
2116 pub const goldmont_plus = Cpu{1929 pub const goldmont_plus = Cpu{
2117 .name = "goldmont_plus",1930 .name = "goldmont_plus",
2118 .llvm_name = "goldmont-plus",1931 .llvm_name = "goldmont-plus",
2119 .features = featureSet(&[_]Feature{1932 .features = featureSet(&[_]Feature{
2120 .@"64bit",1933 .@"64bit",
2121 .sse,
2122 .aes,1934 .aes,
2123 .clflushopt,1935 .clflushopt,
2124 .cmov,1936 .cmov,
2125 .cx8,
2126 .cx16,1937 .cx16,
1938 .cx8,
2127 .fsgsbase,1939 .fsgsbase,
2128 .fxsr,1940 .fxsr,
2129 .sahf,
2130 .mmx,1941 .mmx,
2131 .movbe,1942 .movbe,
2132 .mpx,1943 .mpx,
...@@ -2138,13 +1949,14 @@ pub const cpu = struct {...@@ -2138,13 +1949,14 @@ pub const cpu = struct {
2138 .rdpid,1949 .rdpid,
2139 .rdrnd,1950 .rdrnd,
2140 .rdseed,1951 .rdseed,
1952 .sahf,
2141 .sgx,1953 .sgx,
2142 .sha,1954 .sha,
2143 .sse4_2,
2144 .ssse3,
2145 .slow_incdec,1955 .slow_incdec,
2146 .slow_lea,1956 .slow_lea,
2147 .slow_two_mem_ops,1957 .slow_two_mem_ops,
1958 .sse4_2,
1959 .ssse3,
2148 .x87,1960 .x87,
2149 .xsave,1961 .xsave,
2150 .xsavec,1962 .xsavec,
...@@ -2152,50 +1964,47 @@ pub const cpu = struct {...@@ -2152,50 +1964,47 @@ pub const cpu = struct {
2152 .xsaves,1964 .xsaves,
2153 }),1965 }),
2154 };1966 };
2155
2156 pub const haswell = Cpu{1967 pub const haswell = Cpu{
2157 .name = "haswell",1968 .name = "haswell",
2158 .llvm_name = "haswell",1969 .llvm_name = "haswell",
2159 .features = featureSet(&[_]Feature{1970 .features = featureSet(&[_]Feature{
2160 .@"64bit",1971 .@"64bit",
2161 .sse,
2162 .avx,1972 .avx,
2163 .avx2,1973 .avx2,
2164 .bmi,1974 .bmi,
2165 .bmi2,1975 .bmi2,
2166 .cmov,1976 .cmov,
2167 .cx8,
2168 .cx16,1977 .cx16,
1978 .cx8,
2169 .ermsb,1979 .ermsb,
2170 .f16c,1980 .f16c,
1981 .false_deps_lzcnt_tzcnt,
1982 .false_deps_popcnt,
1983 .fast_scalar_fsqrt,
1984 .fast_shld_rotate,
1985 .fast_variable_shuffle,
2171 .fma,1986 .fma,
2172 .fsgsbase,1987 .fsgsbase,
2173 .fxsr,1988 .fxsr,
2174 .fast_shld_rotate,1989 .idivq_to_divl,
2175 .fast_scalar_fsqrt,
2176 .fast_variable_shuffle,
2177 .invpcid,1990 .invpcid,
2178 .sahf,
2179 .lzcnt,1991 .lzcnt,
2180 .false_deps_lzcnt_tzcnt,
2181 .mmx,
2182 .movbe,
2183 .macrofusion,1992 .macrofusion,
2184 .merge_to_threeway_branch,1993 .merge_to_threeway_branch,
1994 .mmx,
1995 .movbe,
2185 .nopl,1996 .nopl,
2186 .pclmul,1997 .pclmul,
2187 .popcnt,1998 .popcnt,
2188 .false_deps_popcnt,
2189 .rdrnd,1999 .rdrnd,
2190 .sse4_2,2000 .sahf,
2191 .slow_3ops_lea,2001 .slow_3ops_lea,
2192 .idivq_to_divl,2002 .sse4_2,
2193 .x87,2003 .x87,
2194 .xsave,2004 .xsave,
2195 .xsaveopt,2005 .xsaveopt,
2196 }),2006 }),
2197 };2007 };
2198
2199 pub const _i386 = Cpu{2008 pub const _i386 = Cpu{
2200 .name = "_i386",2009 .name = "_i386",
2201 .llvm_name = "i386",2010 .llvm_name = "i386",
...@@ -2204,7 +2013,6 @@ pub const cpu = struct {...@@ -2204,7 +2013,6 @@ pub const cpu = struct {
2204 .x87,2013 .x87,
2205 }),2014 }),
2206 };2015 };
2207
2208 pub const _i486 = Cpu{2016 pub const _i486 = Cpu{
2209 .name = "_i486",2017 .name = "_i486",
2210 .llvm_name = "i486",2018 .llvm_name = "i486",
...@@ -2213,7 +2021,6 @@ pub const cpu = struct {...@@ -2213,7 +2021,6 @@ pub const cpu = struct {
2213 .x87,2021 .x87,
2214 }),2022 }),
2215 };2023 };
2216
2217 pub const _i586 = Cpu{2024 pub const _i586 = Cpu{
2218 .name = "_i586",2025 .name = "_i586",
2219 .llvm_name = "i586",2026 .llvm_name = "i586",
...@@ -2223,7 +2030,6 @@ pub const cpu = struct {...@@ -2223,7 +2030,6 @@ pub const cpu = struct {
2223 .x87,2030 .x87,
2224 }),2031 }),
2225 };2032 };
2226
2227 pub const _i686 = Cpu{2033 pub const _i686 = Cpu{
2228 .name = "_i686",2034 .name = "_i686",
2229 .llvm_name = "i686",2035 .llvm_name = "i686",
...@@ -2234,49 +2040,52 @@ pub const cpu = struct {...@@ -2234,49 +2040,52 @@ pub const cpu = struct {
2234 .x87,2040 .x87,
2235 }),2041 }),
2236 };2042 };
2237
2238 pub const icelake_client = Cpu{2043 pub const icelake_client = Cpu{
2239 .name = "icelake_client",2044 .name = "icelake_client",
2240 .llvm_name = "icelake-client",2045 .llvm_name = "icelake-client",
2241 .features = featureSet(&[_]Feature{2046 .features = featureSet(&[_]Feature{
2242 .@"64bit",2047 .@"64bit",
2243 .adx,2048 .adx,
2244 .sse,
2245 .aes,2049 .aes,
2246 .avx,2050 .avx,
2247 .avx2,2051 .avx2,
2248 .avx512f,
2249 .avx512bitalg,2052 .avx512bitalg,
2250 .bmi,
2251 .bmi2,
2252 .avx512bw,2053 .avx512bw,
2253 .avx512cd,2054 .avx512cd,
2055 .avx512dq,
2056 .avx512f,
2057 .avx512ifma,
2058 .avx512vbmi,
2059 .avx512vbmi2,
2060 .avx512vl,
2061 .avx512vnni,
2062 .avx512vpopcntdq,
2063 .bmi,
2064 .bmi2,
2254 .clflushopt,2065 .clflushopt,
2255 .clwb,2066 .clwb,
2256 .cmov,2067 .cmov,
2257 .cx8,
2258 .cx16,2068 .cx16,
2259 .avx512dq,2069 .cx8,
2260 .ermsb,2070 .ermsb,
2261 .f16c,2071 .f16c,
2262 .fma,2072 .fast_gather,
2263 .fsgsbase,
2264 .fxsr,
2265 .fast_shld_rotate,
2266 .fast_scalar_fsqrt,2073 .fast_scalar_fsqrt,
2074 .fast_shld_rotate,
2267 .fast_variable_shuffle,2075 .fast_variable_shuffle,
2268 .fast_vector_fsqrt,2076 .fast_vector_fsqrt,
2077 .fma,
2078 .fsgsbase,
2079 .fxsr,
2269 .gfni,2080 .gfni,
2270 .fast_gather,2081 .idivq_to_divl,
2271 .avx512ifma,
2272 .invpcid,2082 .invpcid,
2273 .sahf,
2274 .lzcnt,2083 .lzcnt,
2084 .macrofusion,
2085 .merge_to_threeway_branch,
2275 .mmx,2086 .mmx,
2276 .movbe,2087 .movbe,
2277 .mpx,2088 .mpx,
2278 .macrofusion,
2279 .merge_to_threeway_branch,
2280 .nopl,2089 .nopl,
2281 .pclmul,2090 .pclmul,
2282 .pku,2091 .pku,
...@@ -2285,18 +2094,13 @@ pub const cpu = struct {...@@ -2285,18 +2094,13 @@ pub const cpu = struct {
2285 .rdpid,2094 .rdpid,
2286 .rdrnd,2095 .rdrnd,
2287 .rdseed,2096 .rdseed,
2097 .sahf,
2288 .sgx,2098 .sgx,
2289 .sha,2099 .sha,
2290 .sse4_2,
2291 .slow_3ops_lea,2100 .slow_3ops_lea,
2292 .idivq_to_divl,2101 .sse4_2,
2293 .vaes,2102 .vaes,
2294 .avx512vbmi,
2295 .avx512vbmi2,
2296 .avx512vl,
2297 .avx512vnni,
2298 .vpclmulqdq,2103 .vpclmulqdq,
2299 .avx512vpopcntdq,
2300 .x87,2104 .x87,
2301 .xsave,2105 .xsave,
2302 .xsavec,2106 .xsavec,
...@@ -2304,49 +2108,52 @@ pub const cpu = struct {...@@ -2304,49 +2108,52 @@ pub const cpu = struct {
2304 .xsaves,2108 .xsaves,
2305 }),2109 }),
2306 };2110 };
2307
2308 pub const icelake_server = Cpu{2111 pub const icelake_server = Cpu{
2309 .name = "icelake_server",2112 .name = "icelake_server",
2310 .llvm_name = "icelake-server",2113 .llvm_name = "icelake-server",
2311 .features = featureSet(&[_]Feature{2114 .features = featureSet(&[_]Feature{
2312 .@"64bit",2115 .@"64bit",
2313 .adx,2116 .adx,
2314 .sse,
2315 .aes,2117 .aes,
2316 .avx,2118 .avx,
2317 .avx2,2119 .avx2,
2318 .avx512f,
2319 .avx512bitalg,2120 .avx512bitalg,
2320 .bmi,
2321 .bmi2,
2322 .avx512bw,2121 .avx512bw,
2323 .avx512cd,2122 .avx512cd,
2123 .avx512dq,
2124 .avx512f,
2125 .avx512ifma,
2126 .avx512vbmi,
2127 .avx512vbmi2,
2128 .avx512vl,
2129 .avx512vnni,
2130 .avx512vpopcntdq,
2131 .bmi,
2132 .bmi2,
2324 .clflushopt,2133 .clflushopt,
2325 .clwb,2134 .clwb,
2326 .cmov,2135 .cmov,
2327 .cx8,
2328 .cx16,2136 .cx16,
2329 .avx512dq,2137 .cx8,
2330 .ermsb,2138 .ermsb,
2331 .f16c,2139 .f16c,
2332 .fma,2140 .fast_gather,
2333 .fsgsbase,
2334 .fxsr,
2335 .fast_shld_rotate,
2336 .fast_scalar_fsqrt,2141 .fast_scalar_fsqrt,
2142 .fast_shld_rotate,
2337 .fast_variable_shuffle,2143 .fast_variable_shuffle,
2338 .fast_vector_fsqrt,2144 .fast_vector_fsqrt,
2145 .fma,
2146 .fsgsbase,
2147 .fxsr,
2339 .gfni,2148 .gfni,
2340 .fast_gather,2149 .idivq_to_divl,
2341 .avx512ifma,
2342 .invpcid,2150 .invpcid,
2343 .sahf,
2344 .lzcnt,2151 .lzcnt,
2152 .macrofusion,
2153 .merge_to_threeway_branch,
2345 .mmx,2154 .mmx,
2346 .movbe,2155 .movbe,
2347 .mpx,2156 .mpx,
2348 .macrofusion,
2349 .merge_to_threeway_branch,
2350 .nopl,2157 .nopl,
2351 .pclmul,2158 .pclmul,
2352 .pconfig,2159 .pconfig,
...@@ -2356,18 +2163,13 @@ pub const cpu = struct {...@@ -2356,18 +2163,13 @@ pub const cpu = struct {
2356 .rdpid,2163 .rdpid,
2357 .rdrnd,2164 .rdrnd,
2358 .rdseed,2165 .rdseed,
2166 .sahf,
2359 .sgx,2167 .sgx,
2360 .sha,2168 .sha,
2361 .sse4_2,
2362 .slow_3ops_lea,2169 .slow_3ops_lea,
2363 .idivq_to_divl,2170 .sse4_2,
2364 .vaes,2171 .vaes,
2365 .avx512vbmi,
2366 .avx512vbmi2,
2367 .avx512vl,
2368 .avx512vnni,
2369 .vpclmulqdq,2172 .vpclmulqdq,
2370 .avx512vpopcntdq,
2371 .wbnoinvd,2173 .wbnoinvd,
2372 .x87,2174 .x87,
2373 .xsave,2175 .xsave,
...@@ -2376,41 +2178,38 @@ pub const cpu = struct {...@@ -2376,41 +2178,38 @@ pub const cpu = struct {
2376 .xsaves,2178 .xsaves,
2377 }),2179 }),
2378 };2180 };
2379
2380 pub const ivybridge = Cpu{2181 pub const ivybridge = Cpu{
2381 .name = "ivybridge",2182 .name = "ivybridge",
2382 .llvm_name = "ivybridge",2183 .llvm_name = "ivybridge",
2383 .features = featureSet(&[_]Feature{2184 .features = featureSet(&[_]Feature{
2384 .@"64bit",2185 .@"64bit",
2385 .sse,
2386 .avx,2186 .avx,
2387 .cmov,2187 .cmov,
2388 .cx8,
2389 .cx16,2188 .cx16,
2189 .cx8,
2390 .f16c,2190 .f16c,
2191 .false_deps_popcnt,
2192 .fast_scalar_fsqrt,
2193 .fast_shld_rotate,
2391 .fsgsbase,2194 .fsgsbase,
2392 .fxsr,2195 .fxsr,
2393 .fast_shld_rotate,2196 .idivq_to_divl,
2394 .fast_scalar_fsqrt,
2395 .sahf,
2396 .mmx,
2397 .macrofusion,2197 .macrofusion,
2398 .merge_to_threeway_branch,2198 .merge_to_threeway_branch,
2199 .mmx,
2399 .nopl,2200 .nopl,
2400 .pclmul,2201 .pclmul,
2401 .popcnt,2202 .popcnt,
2402 .false_deps_popcnt,
2403 .rdrnd,2203 .rdrnd,
2404 .sse4_2,2204 .sahf,
2405 .slow_3ops_lea,2205 .slow_3ops_lea,
2406 .idivq_to_divl,
2407 .slow_unaligned_mem_32,2206 .slow_unaligned_mem_32,
2207 .sse4_2,
2408 .x87,2208 .x87,
2409 .xsave,2209 .xsave,
2410 .xsaveopt,2210 .xsaveopt,
2411 }),2211 }),
2412 };2212 };
2413
2414 pub const k6 = Cpu{2213 pub const k6 = Cpu{
2415 .name = "k6",2214 .name = "k6",
2416 .llvm_name = "k6",2215 .llvm_name = "k6",
...@@ -2421,108 +2220,96 @@ pub const cpu = struct {...@@ -2421,108 +2220,96 @@ pub const cpu = struct {
2421 .x87,2220 .x87,
2422 }),2221 }),
2423 };2222 };
24242223 pub const k6_2 = Cpu{
2425 pub const k62 = Cpu{
2426 .name = "k6_2",2224 .name = "k6_2",
2427 .llvm_name = "k6-2",2225 .llvm_name = "k6-2",
2428 .features = featureSet(&[_]Feature{2226 .features = featureSet(&[_]Feature{
2429 .mmx,
2430 .@"3dnow",2227 .@"3dnow",
2431 .cx8,2228 .cx8,
2432 .slow_unaligned_mem_16,2229 .slow_unaligned_mem_16,
2433 .x87,2230 .x87,
2434 }),2231 }),
2435 };2232 };
24362233 pub const k6_3 = Cpu{
2437 pub const k63 = Cpu{
2438 .name = "k6_3",2234 .name = "k6_3",
2439 .llvm_name = "k6-3",2235 .llvm_name = "k6-3",
2440 .features = featureSet(&[_]Feature{2236 .features = featureSet(&[_]Feature{
2441 .mmx,
2442 .@"3dnow",2237 .@"3dnow",
2443 .cx8,2238 .cx8,
2444 .slow_unaligned_mem_16,2239 .slow_unaligned_mem_16,
2445 .x87,2240 .x87,
2446 }),2241 }),
2447 };2242 };
2448
2449 pub const k8 = Cpu{2243 pub const k8 = Cpu{
2450 .name = "k8",2244 .name = "k8",
2451 .llvm_name = "k8",2245 .llvm_name = "k8",
2452 .features = featureSet(&[_]Feature{2246 .features = featureSet(&[_]Feature{
2453 .mmx,
2454 .@"3dnowa",2247 .@"3dnowa",
2455 .@"64bit",2248 .@"64bit",
2456 .cmov,2249 .cmov,
2457 .cx8,2250 .cx8,
2458 .fxsr,
2459 .fast_scalar_shift_masks,2251 .fast_scalar_shift_masks,
2252 .fxsr,
2460 .nopl,2253 .nopl,
2461 .sse,
2462 .sse2,
2463 .slow_shld,2254 .slow_shld,
2464 .slow_unaligned_mem_16,2255 .slow_unaligned_mem_16,
2256 .sse2,
2465 .x87,2257 .x87,
2466 }),2258 }),
2467 };2259 };
2468
2469 pub const k8_sse3 = Cpu{2260 pub const k8_sse3 = Cpu{
2470 .name = "k8_sse3",2261 .name = "k8_sse3",
2471 .llvm_name = "k8-sse3",2262 .llvm_name = "k8-sse3",
2472 .features = featureSet(&[_]Feature{2263 .features = featureSet(&[_]Feature{
2473 .mmx,
2474 .@"3dnowa",2264 .@"3dnowa",
2475 .@"64bit",2265 .@"64bit",
2476 .cmov,2266 .cmov,
2477 .cx8,
2478 .cx16,2267 .cx16,
2479 .fxsr,2268 .cx8,
2480 .fast_scalar_shift_masks,2269 .fast_scalar_shift_masks,
2270 .fxsr,
2481 .nopl,2271 .nopl,
2482 .sse,
2483 .sse3,
2484 .slow_shld,2272 .slow_shld,
2485 .slow_unaligned_mem_16,2273 .slow_unaligned_mem_16,
2274 .sse3,
2486 .x87,2275 .x87,
2487 }),2276 }),
2488 };2277 };
2489
2490 pub const knl = Cpu{2278 pub const knl = Cpu{
2491 .name = "knl",2279 .name = "knl",
2492 .llvm_name = "knl",2280 .llvm_name = "knl",
2493 .features = featureSet(&[_]Feature{2281 .features = featureSet(&[_]Feature{
2494 .@"64bit",2282 .@"64bit",
2495 .adx,2283 .adx,
2496 .sse,
2497 .aes,2284 .aes,
2285 .avx512cd,
2286 .avx512er,
2498 .avx512f,2287 .avx512f,
2288 .avx512pf,
2499 .bmi,2289 .bmi,
2500 .bmi2,2290 .bmi2,
2501 .avx512cd,
2502 .cmov,2291 .cmov,
2503 .cx8,
2504 .cx16,2292 .cx16,
2505 .avx512er,2293 .cx8,
2506 .f16c,2294 .f16c,
2295 .fast_gather,
2296 .fast_partial_ymm_or_zmm_write,
2507 .fma,2297 .fma,
2508 .fsgsbase,2298 .fsgsbase,
2509 .fxsr,2299 .fxsr,
2510 .fast_partial_ymm_or_zmm_write,2300 .idivq_to_divl,
2511 .fast_gather,
2512 .sahf,
2513 .lzcnt,2301 .lzcnt,
2514 .mmx,2302 .mmx,
2515 .movbe,2303 .movbe,
2516 .nopl,2304 .nopl,
2517 .pclmul,2305 .pclmul,
2518 .avx512pf,
2519 .popcnt,2306 .popcnt,
2520 .prefetchwt1,2307 .prefetchwt1,
2521 .prfchw,2308 .prfchw,
2522 .rdrnd,2309 .rdrnd,
2523 .rdseed,2310 .rdseed,
2311 .sahf,
2524 .slow_3ops_lea,2312 .slow_3ops_lea,
2525 .idivq_to_divl,
2526 .slow_incdec,2313 .slow_incdec,
2527 .slow_pmaddwd,2314 .slow_pmaddwd,
2528 .slow_two_mem_ops,2315 .slow_two_mem_ops,
...@@ -2531,158 +2318,142 @@ pub const cpu = struct {...@@ -2531,158 +2318,142 @@ pub const cpu = struct {
2531 .xsaveopt,2318 .xsaveopt,
2532 }),2319 }),
2533 };2320 };
2534
2535 pub const knm = Cpu{2321 pub const knm = Cpu{
2536 .name = "knm",2322 .name = "knm",
2537 .llvm_name = "knm",2323 .llvm_name = "knm",
2538 .features = featureSet(&[_]Feature{2324 .features = featureSet(&[_]Feature{
2539 .@"64bit",2325 .@"64bit",
2540 .adx,2326 .adx,
2541 .sse,
2542 .aes,2327 .aes,
2328 .avx512cd,
2329 .avx512er,
2543 .avx512f,2330 .avx512f,
2331 .avx512pf,
2332 .avx512vpopcntdq,
2544 .bmi,2333 .bmi,
2545 .bmi2,2334 .bmi2,
2546 .avx512cd,
2547 .cmov,2335 .cmov,
2548 .cx8,
2549 .cx16,2336 .cx16,
2550 .avx512er,2337 .cx8,
2551 .f16c,2338 .f16c,
2339 .fast_gather,
2340 .fast_partial_ymm_or_zmm_write,
2552 .fma,2341 .fma,
2553 .fsgsbase,2342 .fsgsbase,
2554 .fxsr,2343 .fxsr,
2555 .fast_partial_ymm_or_zmm_write,2344 .idivq_to_divl,
2556 .fast_gather,
2557 .sahf,
2558 .lzcnt,2345 .lzcnt,
2559 .mmx,2346 .mmx,
2560 .movbe,2347 .movbe,
2561 .nopl,2348 .nopl,
2562 .pclmul,2349 .pclmul,
2563 .avx512pf,
2564 .popcnt,2350 .popcnt,
2565 .prefetchwt1,2351 .prefetchwt1,
2566 .prfchw,2352 .prfchw,
2567 .rdrnd,2353 .rdrnd,
2568 .rdseed,2354 .rdseed,
2355 .sahf,
2569 .slow_3ops_lea,2356 .slow_3ops_lea,
2570 .idivq_to_divl,
2571 .slow_incdec,2357 .slow_incdec,
2572 .slow_pmaddwd,2358 .slow_pmaddwd,
2573 .slow_two_mem_ops,2359 .slow_two_mem_ops,
2574 .avx512vpopcntdq,
2575 .x87,2360 .x87,
2576 .xsave,2361 .xsave,
2577 .xsaveopt,2362 .xsaveopt,
2578 }),2363 }),
2579 };2364 };
2580
2581 pub const lakemont = Cpu{2365 pub const lakemont = Cpu{
2582 .name = "lakemont",2366 .name = "lakemont",
2583 .llvm_name = "lakemont",2367 .llvm_name = "lakemont",
2584 .features = 0,2368 .features = 0,
2585 };2369 };
2586
2587 pub const nehalem = Cpu{2370 pub const nehalem = Cpu{
2588 .name = "nehalem",2371 .name = "nehalem",
2589 .llvm_name = "nehalem",2372 .llvm_name = "nehalem",
2590 .features = featureSet(&[_]Feature{2373 .features = featureSet(&[_]Feature{
2591 .@"64bit",2374 .@"64bit",
2592 .cmov,2375 .cmov,
2593 .cx8,
2594 .cx16,2376 .cx16,
2377 .cx8,
2595 .fxsr,2378 .fxsr,
2596 .sahf,
2597 .mmx,
2598 .macrofusion,2379 .macrofusion,
2380 .mmx,
2599 .nopl,2381 .nopl,
2600 .popcnt,2382 .popcnt,
2601 .sse,2383 .sahf,
2602 .sse4_2,2384 .sse4_2,
2603 .x87,2385 .x87,
2604 }),2386 }),
2605 };2387 };
2606
2607 pub const nocona = Cpu{2388 pub const nocona = Cpu{
2608 .name = "nocona",2389 .name = "nocona",
2609 .llvm_name = "nocona",2390 .llvm_name = "nocona",
2610 .features = featureSet(&[_]Feature{2391 .features = featureSet(&[_]Feature{
2611 .@"64bit",2392 .@"64bit",
2612 .cmov,2393 .cmov,
2613 .cx8,
2614 .cx16,2394 .cx16,
2395 .cx8,
2615 .fxsr,2396 .fxsr,
2616 .mmx,2397 .mmx,
2617 .nopl,2398 .nopl,
2618 .sse,
2619 .sse3,
2620 .slow_unaligned_mem_16,2399 .slow_unaligned_mem_16,
2400 .sse3,
2621 .x87,2401 .x87,
2622 }),2402 }),
2623 };2403 };
2624
2625 pub const opteron = Cpu{2404 pub const opteron = Cpu{
2626 .name = "opteron",2405 .name = "opteron",
2627 .llvm_name = "opteron",2406 .llvm_name = "opteron",
2628 .features = featureSet(&[_]Feature{2407 .features = featureSet(&[_]Feature{
2629 .mmx,
2630 .@"3dnowa",2408 .@"3dnowa",
2631 .@"64bit",2409 .@"64bit",
2632 .cmov,2410 .cmov,
2633 .cx8,2411 .cx8,
2634 .fxsr,
2635 .fast_scalar_shift_masks,2412 .fast_scalar_shift_masks,
2413 .fxsr,
2636 .nopl,2414 .nopl,
2637 .sse,
2638 .sse2,
2639 .slow_shld,2415 .slow_shld,
2640 .slow_unaligned_mem_16,2416 .slow_unaligned_mem_16,
2417 .sse2,
2641 .x87,2418 .x87,
2642 }),2419 }),
2643 };2420 };
2644
2645 pub const opteron_sse3 = Cpu{2421 pub const opteron_sse3 = Cpu{
2646 .name = "opteron_sse3",2422 .name = "opteron_sse3",
2647 .llvm_name = "opteron-sse3",2423 .llvm_name = "opteron-sse3",
2648 .features = featureSet(&[_]Feature{2424 .features = featureSet(&[_]Feature{
2649 .mmx,
2650 .@"3dnowa",2425 .@"3dnowa",
2651 .@"64bit",2426 .@"64bit",
2652 .cmov,2427 .cmov,
2653 .cx8,
2654 .cx16,2428 .cx16,
2655 .fxsr,2429 .cx8,
2656 .fast_scalar_shift_masks,2430 .fast_scalar_shift_masks,
2431 .fxsr,
2657 .nopl,2432 .nopl,
2658 .sse,
2659 .sse3,
2660 .slow_shld,2433 .slow_shld,
2661 .slow_unaligned_mem_16,2434 .slow_unaligned_mem_16,
2435 .sse3,
2662 .x87,2436 .x87,
2663 }),2437 }),
2664 };2438 };
2665
2666 pub const penryn = Cpu{2439 pub const penryn = Cpu{
2667 .name = "penryn",2440 .name = "penryn",
2668 .llvm_name = "penryn",2441 .llvm_name = "penryn",
2669 .features = featureSet(&[_]Feature{2442 .features = featureSet(&[_]Feature{
2670 .@"64bit",2443 .@"64bit",
2671 .cmov,2444 .cmov,
2672 .cx8,
2673 .cx16,2445 .cx16,
2446 .cx8,
2674 .fxsr,2447 .fxsr,
2675 .sahf,
2676 .mmx,
2677 .macrofusion,2448 .macrofusion,
2449 .mmx,
2678 .nopl,2450 .nopl,
2679 .sse,2451 .sahf,
2680 .sse4_1,
2681 .slow_unaligned_mem_16,2452 .slow_unaligned_mem_16,
2453 .sse4_1,
2682 .x87,2454 .x87,
2683 }),2455 }),
2684 };2456 };
2685
2686 pub const pentium = Cpu{2457 pub const pentium = Cpu{
2687 .name = "pentium",2458 .name = "pentium",
2688 .llvm_name = "pentium",2459 .llvm_name = "pentium",
...@@ -2692,7 +2463,6 @@ pub const cpu = struct {...@@ -2692,7 +2463,6 @@ pub const cpu = struct {
2692 .x87,2463 .x87,
2693 }),2464 }),
2694 };2465 };
2695
2696 pub const pentium_m = Cpu{2466 pub const pentium_m = Cpu{
2697 .name = "pentium_m",2467 .name = "pentium_m",
2698 .llvm_name = "pentium-m",2468 .llvm_name = "pentium-m",
...@@ -2702,13 +2472,11 @@ pub const cpu = struct {...@@ -2702,13 +2472,11 @@ pub const cpu = struct {
2702 .fxsr,2472 .fxsr,
2703 .mmx,2473 .mmx,
2704 .nopl,2474 .nopl,
2705 .sse,
2706 .sse2,
2707 .slow_unaligned_mem_16,2475 .slow_unaligned_mem_16,
2476 .sse2,
2708 .x87,2477 .x87,
2709 }),2478 }),
2710 };2479 };
2711
2712 pub const pentium_mmx = Cpu{2480 pub const pentium_mmx = Cpu{
2713 .name = "pentium_mmx",2481 .name = "pentium_mmx",
2714 .llvm_name = "pentium-mmx",2482 .llvm_name = "pentium-mmx",
...@@ -2719,7 +2487,6 @@ pub const cpu = struct {...@@ -2719,7 +2487,6 @@ pub const cpu = struct {
2719 .x87,2487 .x87,
2720 }),2488 }),
2721 };2489 };
2722
2723 pub const pentium2 = Cpu{2490 pub const pentium2 = Cpu{
2724 .name = "pentium2",2491 .name = "pentium2",
2725 .llvm_name = "pentium2",2492 .llvm_name = "pentium2",
...@@ -2733,7 +2500,6 @@ pub const cpu = struct {...@@ -2733,7 +2500,6 @@ pub const cpu = struct {
2733 .x87,2500 .x87,
2734 }),2501 }),
2735 };2502 };
2736
2737 pub const pentium3 = Cpu{2503 pub const pentium3 = Cpu{
2738 .name = "pentium3",2504 .name = "pentium3",
2739 .llvm_name = "pentium3",2505 .llvm_name = "pentium3",
...@@ -2743,12 +2509,11 @@ pub const cpu = struct {...@@ -2743,12 +2509,11 @@ pub const cpu = struct {
2743 .fxsr,2509 .fxsr,
2744 .mmx,2510 .mmx,
2745 .nopl,2511 .nopl,
2746 .sse,
2747 .slow_unaligned_mem_16,2512 .slow_unaligned_mem_16,
2513 .sse,
2748 .x87,2514 .x87,
2749 }),2515 }),
2750 };2516 };
2751
2752 pub const pentium3m = Cpu{2517 pub const pentium3m = Cpu{
2753 .name = "pentium3m",2518 .name = "pentium3m",
2754 .llvm_name = "pentium3m",2519 .llvm_name = "pentium3m",
...@@ -2758,12 +2523,11 @@ pub const cpu = struct {...@@ -2758,12 +2523,11 @@ pub const cpu = struct {
2758 .fxsr,2523 .fxsr,
2759 .mmx,2524 .mmx,
2760 .nopl,2525 .nopl,
2761 .sse,
2762 .slow_unaligned_mem_16,2526 .slow_unaligned_mem_16,
2527 .sse,
2763 .x87,2528 .x87,
2764 }),2529 }),
2765 };2530 };
2766
2767 pub const pentium4 = Cpu{2531 pub const pentium4 = Cpu{
2768 .name = "pentium4",2532 .name = "pentium4",
2769 .llvm_name = "pentium4",2533 .llvm_name = "pentium4",
...@@ -2773,13 +2537,11 @@ pub const cpu = struct {...@@ -2773,13 +2537,11 @@ pub const cpu = struct {
2773 .fxsr,2537 .fxsr,
2774 .mmx,2538 .mmx,
2775 .nopl,2539 .nopl,
2776 .sse,
2777 .sse2,
2778 .slow_unaligned_mem_16,2540 .slow_unaligned_mem_16,
2541 .sse2,
2779 .x87,2542 .x87,
2780 }),2543 }),
2781 };2544 };
2782
2783 pub const pentium4m = Cpu{2545 pub const pentium4m = Cpu{
2784 .name = "pentium4m",2546 .name = "pentium4m",
2785 .llvm_name = "pentium4m",2547 .llvm_name = "pentium4m",
...@@ -2789,13 +2551,11 @@ pub const cpu = struct {...@@ -2789,13 +2551,11 @@ pub const cpu = struct {
2789 .fxsr,2551 .fxsr,
2790 .mmx,2552 .mmx,
2791 .nopl,2553 .nopl,
2792 .sse,
2793 .sse2,
2794 .slow_unaligned_mem_16,2554 .slow_unaligned_mem_16,
2555 .sse2,
2795 .x87,2556 .x87,
2796 }),2557 }),
2797 };2558 };
2798
2799 pub const pentiumpro = Cpu{2559 pub const pentiumpro = Cpu{
2800 .name = "pentiumpro",2560 .name = "pentiumpro",
2801 .llvm_name = "pentiumpro",2561 .llvm_name = "pentiumpro",
...@@ -2807,7 +2567,6 @@ pub const cpu = struct {...@@ -2807,7 +2567,6 @@ pub const cpu = struct {
2807 .x87,2567 .x87,
2808 }),2568 }),
2809 };2569 };
2810
2811 pub const prescott = Cpu{2570 pub const prescott = Cpu{
2812 .name = "prescott",2571 .name = "prescott",
2813 .llvm_name = "prescott",2572 .llvm_name = "prescott",
...@@ -2817,125 +2576,118 @@ pub const cpu = struct {...@@ -2817,125 +2576,118 @@ pub const cpu = struct {
2817 .fxsr,2576 .fxsr,
2818 .mmx,2577 .mmx,
2819 .nopl,2578 .nopl,
2820 .sse,
2821 .sse3,
2822 .slow_unaligned_mem_16,2579 .slow_unaligned_mem_16,
2580 .sse3,
2823 .x87,2581 .x87,
2824 }),2582 }),
2825 };2583 };
2826
2827 pub const sandybridge = Cpu{2584 pub const sandybridge = Cpu{
2828 .name = "sandybridge",2585 .name = "sandybridge",
2829 .llvm_name = "sandybridge",2586 .llvm_name = "sandybridge",
2830 .features = featureSet(&[_]Feature{2587 .features = featureSet(&[_]Feature{
2831 .@"64bit",2588 .@"64bit",
2832 .sse,
2833 .avx,2589 .avx,
2834 .cmov,2590 .cmov,
2835 .cx8,
2836 .cx16,2591 .cx16,
2837 .fxsr,2592 .cx8,
2838 .fast_shld_rotate,2593 .false_deps_popcnt,
2839 .fast_scalar_fsqrt,2594 .fast_scalar_fsqrt,
2840 .sahf,2595 .fast_shld_rotate,
2841 .mmx,2596 .fxsr,
2597 .idivq_to_divl,
2842 .macrofusion,2598 .macrofusion,
2843 .merge_to_threeway_branch,2599 .merge_to_threeway_branch,
2600 .mmx,
2844 .nopl,2601 .nopl,
2845 .pclmul,2602 .pclmul,
2846 .popcnt,2603 .popcnt,
2847 .false_deps_popcnt,2604 .sahf,
2848 .sse4_2,
2849 .slow_3ops_lea,2605 .slow_3ops_lea,
2850 .idivq_to_divl,
2851 .slow_unaligned_mem_32,2606 .slow_unaligned_mem_32,
2607 .sse4_2,
2852 .x87,2608 .x87,
2853 .xsave,2609 .xsave,
2854 .xsaveopt,2610 .xsaveopt,
2855 }),2611 }),
2856 };2612 };
2857
2858 pub const silvermont = Cpu{2613 pub const silvermont = Cpu{
2859 .name = "silvermont",2614 .name = "silvermont",
2860 .llvm_name = "silvermont",2615 .llvm_name = "silvermont",
2861 .features = featureSet(&[_]Feature{2616 .features = featureSet(&[_]Feature{
2862 .@"64bit",2617 .@"64bit",
2863 .cmov,2618 .cmov,
2864 .cx8,
2865 .cx16,2619 .cx16,
2620 .cx8,
2621 .false_deps_popcnt,
2866 .fxsr,2622 .fxsr,
2867 .sahf,2623 .idivq_to_divl,
2868 .mmx,2624 .mmx,
2869 .movbe,2625 .movbe,
2870 .nopl,2626 .nopl,
2871 .sse,
2872 .pclmul,2627 .pclmul,
2873 .popcnt,2628 .popcnt,
2874 .false_deps_popcnt,
2875 .prfchw,2629 .prfchw,
2876 .rdrnd,2630 .rdrnd,
2877 .sse4_2,2631 .sahf,
2878 .ssse3,
2879 .idivq_to_divl,
2880 .slow_incdec,2632 .slow_incdec,
2881 .slow_lea,2633 .slow_lea,
2882 .slow_pmulld,2634 .slow_pmulld,
2883 .slow_two_mem_ops,2635 .slow_two_mem_ops,
2636 .sse4_2,
2637 .ssse3,
2884 .x87,2638 .x87,
2885 }),2639 }),
2886 };2640 };
2887
2888 pub const skx = Cpu{2641 pub const skx = Cpu{
2889 .name = "skx",2642 .name = "skx",
2890 .llvm_name = "skx",2643 .llvm_name = "skx",
2891 .features = featureSet(&[_]Feature{2644 .features = featureSet(&[_]Feature{
2892 .@"64bit",2645 .@"64bit",
2893 .adx,2646 .adx,
2894 .sse,
2895 .aes,2647 .aes,
2896 .avx,2648 .avx,
2897 .avx2,2649 .avx2,
2650 .avx512bw,
2651 .avx512cd,
2652 .avx512dq,
2898 .avx512f,2653 .avx512f,
2654 .avx512vl,
2899 .bmi,2655 .bmi,
2900 .bmi2,2656 .bmi2,
2901 .avx512bw,
2902 .avx512cd,
2903 .clflushopt,2657 .clflushopt,
2904 .clwb,2658 .clwb,
2905 .cmov,2659 .cmov,
2906 .cx8,
2907 .cx16,2660 .cx16,
2908 .avx512dq,2661 .cx8,
2909 .ermsb,2662 .ermsb,
2910 .f16c,2663 .f16c,
2911 .fma,2664 .false_deps_popcnt,
2912 .fsgsbase,2665 .fast_gather,
2913 .fxsr,
2914 .fast_shld_rotate,
2915 .fast_scalar_fsqrt,2666 .fast_scalar_fsqrt,
2667 .fast_shld_rotate,
2916 .fast_variable_shuffle,2668 .fast_variable_shuffle,
2917 .fast_vector_fsqrt,2669 .fast_vector_fsqrt,
2918 .fast_gather,2670 .fma,
2671 .fsgsbase,
2672 .fxsr,
2673 .idivq_to_divl,
2919 .invpcid,2674 .invpcid,
2920 .sahf,
2921 .lzcnt,2675 .lzcnt,
2676 .macrofusion,
2677 .merge_to_threeway_branch,
2922 .mmx,2678 .mmx,
2923 .movbe,2679 .movbe,
2924 .mpx,2680 .mpx,
2925 .macrofusion,
2926 .merge_to_threeway_branch,
2927 .nopl,2681 .nopl,
2928 .pclmul,2682 .pclmul,
2929 .pku,2683 .pku,
2930 .popcnt,2684 .popcnt,
2931 .false_deps_popcnt,
2932 .prfchw,2685 .prfchw,
2933 .rdrnd,2686 .rdrnd,
2934 .rdseed,2687 .rdseed,
2935 .sse4_2,2688 .sahf,
2936 .slow_3ops_lea,2689 .slow_3ops_lea,
2937 .idivq_to_divl,2690 .sse4_2,
2938 .avx512vl,
2939 .x87,2691 .x87,
2940 .xsave,2692 .xsave,
2941 .xsavec,2693 .xsavec,
...@@ -2943,14 +2695,12 @@ pub const cpu = struct {...@@ -2943,14 +2695,12 @@ pub const cpu = struct {
2943 .xsaves,2695 .xsaves,
2944 }),2696 }),
2945 };2697 };
2946
2947 pub const skylake = Cpu{2698 pub const skylake = Cpu{
2948 .name = "skylake",2699 .name = "skylake",
2949 .llvm_name = "skylake",2700 .llvm_name = "skylake",
2950 .features = featureSet(&[_]Feature{2701 .features = featureSet(&[_]Feature{
2951 .@"64bit",2702 .@"64bit",
2952 .adx,2703 .adx,
2953 .sse,
2954 .aes,2704 .aes,
2955 .avx,2705 .avx,
2956 .avx2,2706 .avx2,
...@@ -2958,37 +2708,37 @@ pub const cpu = struct {...@@ -2958,37 +2708,37 @@ pub const cpu = struct {
2958 .bmi2,2708 .bmi2,
2959 .clflushopt,2709 .clflushopt,
2960 .cmov,2710 .cmov,
2961 .cx8,
2962 .cx16,2711 .cx16,
2712 .cx8,
2963 .ermsb,2713 .ermsb,
2964 .f16c,2714 .f16c,
2965 .fma,2715 .false_deps_popcnt,
2966 .fsgsbase,2716 .fast_gather,
2967 .fxsr,
2968 .fast_shld_rotate,
2969 .fast_scalar_fsqrt,2717 .fast_scalar_fsqrt,
2718 .fast_shld_rotate,
2970 .fast_variable_shuffle,2719 .fast_variable_shuffle,
2971 .fast_vector_fsqrt,2720 .fast_vector_fsqrt,
2972 .fast_gather,2721 .fma,
2722 .fsgsbase,
2723 .fxsr,
2724 .idivq_to_divl,
2973 .invpcid,2725 .invpcid,
2974 .sahf,
2975 .lzcnt,2726 .lzcnt,
2727 .macrofusion,
2728 .merge_to_threeway_branch,
2976 .mmx,2729 .mmx,
2977 .movbe,2730 .movbe,
2978 .mpx,2731 .mpx,
2979 .macrofusion,
2980 .merge_to_threeway_branch,
2981 .nopl,2732 .nopl,
2982 .pclmul,2733 .pclmul,
2983 .popcnt,2734 .popcnt,
2984 .false_deps_popcnt,
2985 .prfchw,2735 .prfchw,
2986 .rdrnd,2736 .rdrnd,
2987 .rdseed,2737 .rdseed,
2738 .sahf,
2988 .sgx,2739 .sgx,
2989 .sse4_2,
2990 .slow_3ops_lea,2740 .slow_3ops_lea,
2991 .idivq_to_divl,2741 .sse4_2,
2992 .x87,2742 .x87,
2993 .xsave,2743 .xsave,
2994 .xsavec,2744 .xsavec,
...@@ -2996,58 +2746,56 @@ pub const cpu = struct {...@@ -2996,58 +2746,56 @@ pub const cpu = struct {
2996 .xsaves,2746 .xsaves,
2997 }),2747 }),
2998 };2748 };
2999
3000 pub const skylake_avx512 = Cpu{2749 pub const skylake_avx512 = Cpu{
3001 .name = "skylake_avx512",2750 .name = "skylake_avx512",
3002 .llvm_name = "skylake-avx512",2751 .llvm_name = "skylake-avx512",
3003 .features = featureSet(&[_]Feature{2752 .features = featureSet(&[_]Feature{
3004 .@"64bit",2753 .@"64bit",
3005 .adx,2754 .adx,
3006 .sse,
3007 .aes,2755 .aes,
3008 .avx,2756 .avx,
3009 .avx2,2757 .avx2,
2758 .avx512bw,
2759 .avx512cd,
2760 .avx512dq,
3010 .avx512f,2761 .avx512f,
2762 .avx512vl,
3011 .bmi,2763 .bmi,
3012 .bmi2,2764 .bmi2,
3013 .avx512bw,
3014 .avx512cd,
3015 .clflushopt,2765 .clflushopt,
3016 .clwb,2766 .clwb,
3017 .cmov,2767 .cmov,
3018 .cx8,
3019 .cx16,2768 .cx16,
3020 .avx512dq,2769 .cx8,
3021 .ermsb,2770 .ermsb,
3022 .f16c,2771 .f16c,
3023 .fma,2772 .false_deps_popcnt,
3024 .fsgsbase,2773 .fast_gather,
3025 .fxsr,
3026 .fast_shld_rotate,
3027 .fast_scalar_fsqrt,2774 .fast_scalar_fsqrt,
2775 .fast_shld_rotate,
3028 .fast_variable_shuffle,2776 .fast_variable_shuffle,
3029 .fast_vector_fsqrt,2777 .fast_vector_fsqrt,
3030 .fast_gather,2778 .fma,
2779 .fsgsbase,
2780 .fxsr,
2781 .idivq_to_divl,
3031 .invpcid,2782 .invpcid,
3032 .sahf,
3033 .lzcnt,2783 .lzcnt,
2784 .macrofusion,
2785 .merge_to_threeway_branch,
3034 .mmx,2786 .mmx,
3035 .movbe,2787 .movbe,
3036 .mpx,2788 .mpx,
3037 .macrofusion,
3038 .merge_to_threeway_branch,
3039 .nopl,2789 .nopl,
3040 .pclmul,2790 .pclmul,
3041 .pku,2791 .pku,
3042 .popcnt,2792 .popcnt,
3043 .false_deps_popcnt,
3044 .prfchw,2793 .prfchw,
3045 .rdrnd,2794 .rdrnd,
3046 .rdseed,2795 .rdseed,
3047 .sse4_2,2796 .sahf,
3048 .slow_3ops_lea,2797 .slow_3ops_lea,
3049 .idivq_to_divl,2798 .sse4_2,
3050 .avx512vl,
3051 .x87,2799 .x87,
3052 .xsave,2800 .xsave,
3053 .xsavec,2801 .xsavec,
...@@ -3055,53 +2803,48 @@ pub const cpu = struct {...@@ -3055,53 +2803,48 @@ pub const cpu = struct {
3055 .xsaves,2803 .xsaves,
3056 }),2804 }),
3057 };2805 };
3058
3059 pub const slm = Cpu{2806 pub const slm = Cpu{
3060 .name = "slm",2807 .name = "slm",
3061 .llvm_name = "slm",2808 .llvm_name = "slm",
3062 .features = featureSet(&[_]Feature{2809 .features = featureSet(&[_]Feature{
3063 .@"64bit",2810 .@"64bit",
3064 .cmov,2811 .cmov,
3065 .cx8,
3066 .cx16,2812 .cx16,
2813 .cx8,
2814 .false_deps_popcnt,
3067 .fxsr,2815 .fxsr,
3068 .sahf,2816 .idivq_to_divl,
3069 .mmx,2817 .mmx,
3070 .movbe,2818 .movbe,
3071 .nopl,2819 .nopl,
3072 .sse,
3073 .pclmul,2820 .pclmul,
3074 .popcnt,2821 .popcnt,
3075 .false_deps_popcnt,
3076 .prfchw,2822 .prfchw,
3077 .rdrnd,2823 .rdrnd,
3078 .sse4_2,2824 .sahf,
3079 .ssse3,
3080 .idivq_to_divl,
3081 .slow_incdec,2825 .slow_incdec,
3082 .slow_lea,2826 .slow_lea,
3083 .slow_pmulld,2827 .slow_pmulld,
3084 .slow_two_mem_ops,2828 .slow_two_mem_ops,
2829 .sse4_2,
2830 .ssse3,
3085 .x87,2831 .x87,
3086 }),2832 }),
3087 };2833 };
3088
3089 pub const tremont = Cpu{2834 pub const tremont = Cpu{
3090 .name = "tremont",2835 .name = "tremont",
3091 .llvm_name = "tremont",2836 .llvm_name = "tremont",
3092 .features = featureSet(&[_]Feature{2837 .features = featureSet(&[_]Feature{
3093 .@"64bit",2838 .@"64bit",
3094 .sse,
3095 .aes,2839 .aes,
3096 .cldemote,2840 .cldemote,
3097 .clflushopt,2841 .clflushopt,
3098 .cmov,2842 .cmov,
3099 .cx8,
3100 .cx16,2843 .cx16,
2844 .cx8,
3101 .fsgsbase,2845 .fsgsbase,
3102 .fxsr,2846 .fxsr,
3103 .gfni,2847 .gfni,
3104 .sahf,
3105 .mmx,2848 .mmx,
3106 .movbe,2849 .movbe,
3107 .movdir64b,2850 .movdir64b,
...@@ -3115,13 +2858,14 @@ pub const cpu = struct {...@@ -3115,13 +2858,14 @@ pub const cpu = struct {
3115 .rdpid,2858 .rdpid,
3116 .rdrnd,2859 .rdrnd,
3117 .rdseed,2860 .rdseed,
2861 .sahf,
3118 .sgx,2862 .sgx,
3119 .sha,2863 .sha,
3120 .sse4_2,
3121 .ssse3,
3122 .slow_incdec,2864 .slow_incdec,
3123 .slow_lea,2865 .slow_lea,
3124 .slow_two_mem_ops,2866 .slow_two_mem_ops,
2867 .sse4_2,
2868 .ssse3,
3125 .waitpkg,2869 .waitpkg,
3126 .x87,2870 .x87,
3127 .xsave,2871 .xsave,
...@@ -3130,28 +2874,25 @@ pub const cpu = struct {...@@ -3130,28 +2874,25 @@ pub const cpu = struct {
3130 .xsaves,2874 .xsaves,
3131 }),2875 }),
3132 };2876 };
3133
3134 pub const westmere = Cpu{2877 pub const westmere = Cpu{
3135 .name = "westmere",2878 .name = "westmere",
3136 .llvm_name = "westmere",2879 .llvm_name = "westmere",
3137 .features = featureSet(&[_]Feature{2880 .features = featureSet(&[_]Feature{
3138 .@"64bit",2881 .@"64bit",
3139 .cmov,2882 .cmov,
3140 .cx8,
3141 .cx16,2883 .cx16,
2884 .cx8,
3142 .fxsr,2885 .fxsr,
3143 .sahf,
3144 .mmx,
3145 .macrofusion,2886 .macrofusion,
2887 .mmx,
3146 .nopl,2888 .nopl,
3147 .sse,
3148 .pclmul,2889 .pclmul,
3149 .popcnt,2890 .popcnt,
2891 .sahf,
3150 .sse4_2,2892 .sse4_2,
3151 .x87,2893 .x87,
3152 }),2894 }),
3153 };2895 };
3154
3155 pub const winchip_c6 = Cpu{2896 pub const winchip_c6 = Cpu{
3156 .name = "winchip_c6",2897 .name = "winchip_c6",
3157 .llvm_name = "winchip-c6",2898 .llvm_name = "winchip-c6",
...@@ -3161,18 +2902,15 @@ pub const cpu = struct {...@@ -3161,18 +2902,15 @@ pub const cpu = struct {
3161 .x87,2902 .x87,
3162 }),2903 }),
3163 };2904 };
3164
3165 pub const winchip2 = Cpu{2905 pub const winchip2 = Cpu{
3166 .name = "winchip2",2906 .name = "winchip2",
3167 .llvm_name = "winchip2",2907 .llvm_name = "winchip2",
3168 .features = featureSet(&[_]Feature{2908 .features = featureSet(&[_]Feature{
3169 .mmx,
3170 .@"3dnow",2909 .@"3dnow",
3171 .slow_unaligned_mem_16,2910 .slow_unaligned_mem_16,
3172 .x87,2911 .x87,
3173 }),2912 }),
3174 };2913 };
3175
3176 pub const x86_64 = Cpu{2914 pub const x86_64 = Cpu{
3177 .name = "x86_64",2915 .name = "x86_64",
3178 .llvm_name = "x86-64",2916 .llvm_name = "x86-64",
...@@ -3181,17 +2919,15 @@ pub const cpu = struct {...@@ -3181,17 +2919,15 @@ pub const cpu = struct {
3181 .cmov,2919 .cmov,
3182 .cx8,2920 .cx8,
3183 .fxsr,2921 .fxsr,
3184 .mmx,
3185 .macrofusion,2922 .macrofusion,
2923 .mmx,
3186 .nopl,2924 .nopl,
3187 .sse,
3188 .sse2,
3189 .slow_3ops_lea,2925 .slow_3ops_lea,
3190 .slow_incdec,2926 .slow_incdec,
2927 .sse2,
3191 .x87,2928 .x87,
3192 }),2929 }),
3193 };2930 };
3194
3195 pub const yonah = Cpu{2931 pub const yonah = Cpu{
3196 .name = "yonah",2932 .name = "yonah",
3197 .llvm_name = "yonah",2933 .llvm_name = "yonah",
...@@ -3201,20 +2937,17 @@ pub const cpu = struct {...@@ -3201,20 +2937,17 @@ pub const cpu = struct {
3201 .fxsr,2937 .fxsr,
3202 .mmx,2938 .mmx,
3203 .nopl,2939 .nopl,
3204 .sse,
3205 .sse3,
3206 .slow_unaligned_mem_16,2940 .slow_unaligned_mem_16,
2941 .sse3,
3207 .x87,2942 .x87,
3208 }),2943 }),
3209 };2944 };
3210
3211 pub const znver1 = Cpu{2945 pub const znver1 = Cpu{
3212 .name = "znver1",2946 .name = "znver1",
3213 .llvm_name = "znver1",2947 .llvm_name = "znver1",
3214 .features = featureSet(&[_]Feature{2948 .features = featureSet(&[_]Feature{
3215 .@"64bit",2949 .@"64bit",
3216 .adx,2950 .adx,
3217 .sse,
3218 .aes,2951 .aes,
3219 .avx2,2952 .avx2,
3220 .bmi,2953 .bmi,
...@@ -3223,17 +2956,15 @@ pub const cpu = struct {...@@ -3223,17 +2956,15 @@ pub const cpu = struct {
3223 .clflushopt,2956 .clflushopt,
3224 .clzero,2957 .clzero,
3225 .cmov,2958 .cmov,
3226 .cx8,
3227 .cx16,2959 .cx16,
3228 .f16c,2960 .f16c,
3229 .fma,
3230 .fsgsbase,
3231 .fxsr,
3232 .fast_15bytenop,2961 .fast_15bytenop,
3233 .fast_bextr,2962 .fast_bextr,
3234 .fast_lzcnt,2963 .fast_lzcnt,
3235 .fast_scalar_shift_masks,2964 .fast_scalar_shift_masks,
3236 .sahf,2965 .fma,
2966 .fsgsbase,
2967 .fxsr,
3237 .lzcnt,2968 .lzcnt,
3238 .mmx,2969 .mmx,
3239 .movbe,2970 .movbe,
...@@ -3244,9 +2975,10 @@ pub const cpu = struct {...@@ -3244,9 +2975,10 @@ pub const cpu = struct {
3244 .prfchw,2975 .prfchw,
3245 .rdrnd,2976 .rdrnd,
3246 .rdseed,2977 .rdseed,
2978 .sahf,
3247 .sha,2979 .sha,
3248 .sse4a,
3249 .slow_shld,2980 .slow_shld,
2981 .sse4a,
3250 .x87,2982 .x87,
3251 .xsave,2983 .xsave,
3252 .xsavec,2984 .xsavec,
...@@ -3254,14 +2986,12 @@ pub const cpu = struct {...@@ -3254,14 +2986,12 @@ pub const cpu = struct {
3254 .xsaves,2986 .xsaves,
3255 }),2987 }),
3256 };2988 };
3257
3258 pub const znver2 = Cpu{2989 pub const znver2 = Cpu{
3259 .name = "znver2",2990 .name = "znver2",
3260 .llvm_name = "znver2",2991 .llvm_name = "znver2",
3261 .features = featureSet(&[_]Feature{2992 .features = featureSet(&[_]Feature{
3262 .@"64bit",2993 .@"64bit",
3263 .adx,2994 .adx,
3264 .sse,
3265 .aes,2995 .aes,
3266 .avx2,2996 .avx2,
3267 .bmi,2997 .bmi,
...@@ -3271,17 +3001,15 @@ pub const cpu = struct {...@@ -3271,17 +3001,15 @@ pub const cpu = struct {
3271 .clwb,3001 .clwb,
3272 .clzero,3002 .clzero,
3273 .cmov,3003 .cmov,
3274 .cx8,
3275 .cx16,3004 .cx16,
3276 .f16c,3005 .f16c,
3277 .fma,
3278 .fsgsbase,
3279 .fxsr,
3280 .fast_15bytenop,3006 .fast_15bytenop,
3281 .fast_bextr,3007 .fast_bextr,
3282 .fast_lzcnt,3008 .fast_lzcnt,
3283 .fast_scalar_shift_masks,3009 .fast_scalar_shift_masks,
3284 .sahf,3010 .fma,
3011 .fsgsbase,
3012 .fxsr,
3285 .lzcnt,3013 .lzcnt,
3286 .mmx,3014 .mmx,
3287 .movbe,3015 .movbe,
...@@ -3293,9 +3021,10 @@ pub const cpu = struct {...@@ -3293,9 +3021,10 @@ pub const cpu = struct {
3293 .rdpid,3021 .rdpid,
3294 .rdrnd,3022 .rdrnd,
3295 .rdseed,3023 .rdseed,
3024 .sahf,
3296 .sha,3025 .sha,
3297 .sse4a,
3298 .slow_shld,3026 .slow_shld,
3027 .sse4a,
3299 .wbnoinvd,3028 .wbnoinvd,
3300 .x87,3029 .x87,
3301 .xsave,3030 .xsave,
...@@ -3306,10 +3035,13 @@ pub const cpu = struct {...@@ -3306,10 +3035,13 @@ pub const cpu = struct {
3306 };3035 };
3307};3036};
33083037
3038/// All x86 CPUs, sorted alphabetically by name.
3039/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
3040/// compiler has inefficient memory and CPU usage, affecting build times.
3309pub const all_cpus = &[_]*const Cpu{3041pub const all_cpus = &[_]*const Cpu{
3310 &cpu.amdfam10,3042 &cpu.amdfam10,
3311 &cpu.athlon,3043 &cpu.athlon,
3312 &cpu.athlon4,3044 &cpu.athlon_4,
3313 &cpu.athlon_fx,3045 &cpu.athlon_fx,
3314 &cpu.athlon_mp,3046 &cpu.athlon_mp,
3315 &cpu.athlon_tbird,3047 &cpu.athlon_tbird,
...@@ -3327,7 +3059,7 @@ pub const all_cpus = &[_]*const Cpu{...@@ -3327,7 +3059,7 @@ pub const all_cpus = &[_]*const Cpu{
3327 &cpu.btver1,3059 &cpu.btver1,
3328 &cpu.btver2,3060 &cpu.btver2,
3329 &cpu.c3,3061 &cpu.c3,
3330 &cpu.c32,3062 &cpu.c3_2,
3331 &cpu.cannonlake,3063 &cpu.cannonlake,
3332 &cpu.cascadelake,3064 &cpu.cascadelake,
3333 &cpu.cooperlake,3065 &cpu.cooperlake,
...@@ -3349,8 +3081,8 @@ pub const all_cpus = &[_]*const Cpu{...@@ -3349,8 +3081,8 @@ pub const all_cpus = &[_]*const Cpu{
3349 &cpu.icelake_server,3081 &cpu.icelake_server,
3350 &cpu.ivybridge,3082 &cpu.ivybridge,
3351 &cpu.k6,3083 &cpu.k6,
3352 &cpu.k62,3084 &cpu.k6_2,
3353 &cpu.k63,3085 &cpu.k6_3,
3354 &cpu.k8,3086 &cpu.k8,
3355 &cpu.k8_sse3,3087 &cpu.k8_sse3,
3356 &cpu.knl,3088 &cpu.knl,