authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-20 15:27:42-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-20 15:27:42-05:00
log33c69d5cb6fd555e164dd92e5b9dcfac37d82672
treea9f244235d968dc52afcb0f5d870b7480b2dafd5
parent9c3eff91937dfc2f075342916d1fce659e18672f
signaturelock-open Commit is signed but in an unrecognized format.

arm: clarify which CPU features are sub-architectures

versus which ones are instruction sets.

2 files changed, 583 insertions(+), 583 deletions(-)

lib/std/target.zig+1-1
......@@ -219,7 +219,7 @@ pub const Target = union(enum) {
219219 pub const Set = struct {
220220 ints: [usize_count]usize,
221221
222 pub const needed_bit_count = 138;
222 pub const needed_bit_count = 154;
223223 pub const byte_count = (needed_bit_count + 7) / 8;
224224 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
225225 pub const Index = std.math.Log2Int(@IntType(false, usize_count * @bitSizeOf(usize)));
lib/std/target/arm.zig+582-582
......@@ -9,39 +9,6 @@ pub const Feature = enum {
99 aclass,
1010 acquire_release,
1111 aes,
12 armv2,
13 armv2a,
14 armv3,
15 armv3m,
16 armv4,
17 armv4t,
18 armv5t,
19 armv5te,
20 armv5tej,
21 armv6,
22 armv6_m,
23 armv6j,
24 armv6k,
25 armv6kz,
26 armv6s_m,
27 armv6t2,
28 armv7_a,
29 armv7_m,
30 armv7_r,
31 armv7e_m,
32 armv7k,
33 armv7s,
34 armv7ve,
35 armv8_a,
36 armv8_m_base,
37 armv8_m_main,
38 armv8_r,
39 armv8_1_a,
40 armv8_1_m_main,
41 armv8_2_a,
42 armv8_3_a,
43 armv8_4_a,
44 armv8_5_a,
4512 avoid_movs_shop,
4613 avoid_partial_cpsr,
4714 cheap_predicable_cpsr,
......@@ -57,13 +24,13 @@ pub const Feature = enum {
5724 execute_only,
5825 expand_fp_mlx,
5926 exynos,
27 fp16,
28 fp16fml,
29 fp64,
6030 fp_armv8,
6131 fp_armv8d16,
6232 fp_armv8d16sp,
6333 fp_armv8sp,
64 fp16,
65 fp16fml,
66 fp64,
6734 fpao,
6835 fpregs,
6936 fpregs16,
......@@ -71,6 +38,24 @@ pub const Feature = enum {
7138 fullfp16,
7239 fuse_aes,
7340 fuse_literals,
41 has_v4t,
42 has_v5t,
43 has_v5te,
44 has_v6,
45 has_v6k,
46 has_v6m,
47 has_v6t2,
48 has_v7,
49 has_v7clrex,
50 has_v8_1a,
51 has_v8_1m_main,
52 has_v8_2a,
53 has_v8_3a,
54 has_v8_4a,
55 has_v8_5a,
56 has_v8,
57 has_v8m,
58 has_v8m_main,
7459 hwdiv,
7560 hwdiv_arm,
7661 iwmmxt,
......@@ -115,29 +100,44 @@ pub const Feature = enum {
115100 splat_vfp_neon,
116101 strict_align,
117102 swift,
118 thumb_mode,
119103 thumb2,
104 thumb_mode,
120105 trustzone,
121106 use_aa,
122107 use_misched,
108 v2,
109 v2a,
110 v3,
111 v3m,
112 v4,
123113 v4t,
124114 v5t,
125115 v5te,
116 v5tej,
126117 v6,
118 v6j,
127119 v6k,
120 v6kz,
128121 v6m,
122 v6sm,
129123 v6t2,
130 v7,
131 v7clrex,
124 v7a,
125 v7em,
126 v7k,
127 v7m,
128 v7r,
129 v7s,
130 v7ve,
132131 v8a,
132 v8m,
133 v8m_main,
134 v8r,
133135 v8_1a,
134136 v8_1m_main,
135137 v8_2a,
136138 v8_3a,
137139 v8_4a,
138140 v8_5a,
139 v8m,
140 v8m_main,
141141 vfp2,
142142 vfp2d16,
143143 vfp2d16sp,
......@@ -171,393 +171,31 @@ pub const all_features = blk: {
171171 .description = "Prefer 32-bit Thumb instrs",
172172 .dependencies = featureSet(&[_]Feature{}),
173173 };
174 result[@enumToInt(Feature.@"8msecext")] = .{
175 .llvm_name = "8msecext",
176 .description = "Enable support for ARMv8-M Security Extensions",
177 .dependencies = featureSet(&[_]Feature{}),
178 };
179 result[@enumToInt(Feature.a76)] = .{
180 .llvm_name = "a76",
181 .description = "Cortex-A76 ARM processors",
182 .dependencies = featureSet(&[_]Feature{}),
183 };
184 result[@enumToInt(Feature.aclass)] = .{
185 .llvm_name = "aclass",
186 .description = "Is application profile ('A' series)",
187 .dependencies = featureSet(&[_]Feature{}),
188 };
189 result[@enumToInt(Feature.acquire_release)] = .{
190 .llvm_name = "acquire-release",
191 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
192 .dependencies = featureSet(&[_]Feature{}),
193 };
194 result[@enumToInt(Feature.aes)] = .{
195 .llvm_name = "aes",
196 .description = "Enable AES support",
197 .dependencies = featureSet(&[_]Feature{
198 .neon,
199 }),
200 };
201 result[@enumToInt(Feature.armv2)] = .{
202 .llvm_name = "armv2",
203 .description = "ARMv2 architecture",
204 .dependencies = featureSet(&[_]Feature{}),
205 };
206 result[@enumToInt(Feature.armv2a)] = .{
207 .llvm_name = "armv2a",
208 .description = "ARMv2a architecture",
209 .dependencies = featureSet(&[_]Feature{}),
210 };
211 result[@enumToInt(Feature.armv3)] = .{
212 .llvm_name = "armv3",
213 .description = "ARMv3 architecture",
214 .dependencies = featureSet(&[_]Feature{}),
215 };
216 result[@enumToInt(Feature.armv3m)] = .{
217 .llvm_name = "armv3m",
218 .description = "ARMv3m architecture",
219 .dependencies = featureSet(&[_]Feature{}),
220 };
221 result[@enumToInt(Feature.armv4)] = .{
222 .llvm_name = "armv4",
223 .description = "ARMv4 architecture",
224 .dependencies = featureSet(&[_]Feature{}),
225 };
226 result[@enumToInt(Feature.armv4t)] = .{
227 .llvm_name = "armv4t",
228 .description = "ARMv4t architecture",
229 .dependencies = featureSet(&[_]Feature{
230 .v4t,
231 }),
232 };
233 result[@enumToInt(Feature.armv5t)] = .{
234 .llvm_name = "armv5t",
235 .description = "ARMv5t architecture",
236 .dependencies = featureSet(&[_]Feature{
237 .v5t,
238 }),
239 };
240 result[@enumToInt(Feature.armv5te)] = .{
241 .llvm_name = "armv5te",
242 .description = "ARMv5te architecture",
243 .dependencies = featureSet(&[_]Feature{
244 .v5te,
245 }),
246 };
247 result[@enumToInt(Feature.armv5tej)] = .{
248 .llvm_name = "armv5tej",
249 .description = "ARMv5tej architecture",
250 .dependencies = featureSet(&[_]Feature{
251 .v5te,
252 }),
253 };
254 result[@enumToInt(Feature.armv6)] = .{
255 .llvm_name = "armv6",
256 .description = "ARMv6 architecture",
257 .dependencies = featureSet(&[_]Feature{
258 .dsp,
259 .v6,
260 }),
261 };
262 result[@enumToInt(Feature.armv6_m)] = .{
263 .llvm_name = "armv6-m",
264 .description = "ARMv6m architecture",
265 .dependencies = featureSet(&[_]Feature{
266 .db,
267 .mclass,
268 .noarm,
269 .strict_align,
270 .thumb_mode,
271 .v6m,
272 }),
273 };
274 result[@enumToInt(Feature.armv6j)] = .{
275 .llvm_name = "armv6j",
276 .description = "ARMv7a architecture",
277 .dependencies = featureSet(&[_]Feature{
278 .armv6,
279 }),
280 };
281 result[@enumToInt(Feature.armv6k)] = .{
282 .llvm_name = "armv6k",
283 .description = "ARMv6k architecture",
284 .dependencies = featureSet(&[_]Feature{
285 .v6k,
286 }),
287 };
288 result[@enumToInt(Feature.armv6kz)] = .{
289 .llvm_name = "armv6kz",
290 .description = "ARMv6kz architecture",
291 .dependencies = featureSet(&[_]Feature{
292 .trustzone,
293 .v6k,
294 }),
295 };
296 result[@enumToInt(Feature.armv6s_m)] = .{
297 .llvm_name = "armv6s-m",
298 .description = "ARMv6sm architecture",
299 .dependencies = featureSet(&[_]Feature{
300 .db,
301 .mclass,
302 .noarm,
303 .strict_align,
304 .thumb_mode,
305 .v6m,
306 }),
307 };
308 result[@enumToInt(Feature.armv6t2)] = .{
309 .llvm_name = "armv6t2",
310 .description = "ARMv6t2 architecture",
311 .dependencies = featureSet(&[_]Feature{
312 .dsp,
313 .v6t2,
314 }),
315 };
316 result[@enumToInt(Feature.armv7_a)] = .{
317 .llvm_name = "armv7-a",
318 .description = "ARMv7a architecture",
319 .dependencies = featureSet(&[_]Feature{
320 .aclass,
321 .db,
322 .dsp,
323 .neon,
324 .v7,
325 }),
326 };
327 result[@enumToInt(Feature.armv7_m)] = .{
328 .llvm_name = "armv7-m",
329 .description = "ARMv7m architecture",
330 .dependencies = featureSet(&[_]Feature{
331 .db,
332 .hwdiv,
333 .mclass,
334 .noarm,
335 .thumb_mode,
336 .thumb2,
337 .v7,
338 }),
339 };
340 result[@enumToInt(Feature.armv7_r)] = .{
341 .llvm_name = "armv7-r",
342 .description = "ARMv7r architecture",
343 .dependencies = featureSet(&[_]Feature{
344 .db,
345 .dsp,
346 .hwdiv,
347 .rclass,
348 .v7,
349 }),
350 };
351 result[@enumToInt(Feature.armv7e_m)] = .{
352 .llvm_name = "armv7e-m",
353 .description = "ARMv7em architecture",
354 .dependencies = featureSet(&[_]Feature{
355 .db,
356 .dsp,
357 .hwdiv,
358 .mclass,
359 .noarm,
360 .thumb_mode,
361 .thumb2,
362 .v7,
363 }),
364 };
365 result[@enumToInt(Feature.armv7k)] = .{
366 .llvm_name = "armv7k",
367 .description = "ARMv7a architecture",
368 .dependencies = featureSet(&[_]Feature{
369 .armv7_a,
370 }),
371 };
372 result[@enumToInt(Feature.armv7s)] = .{
373 .llvm_name = "armv7s",
374 .description = "ARMv7a architecture",
375 .dependencies = featureSet(&[_]Feature{
376 .armv7_a,
377 }),
378 };
379 result[@enumToInt(Feature.armv7ve)] = .{
380 .llvm_name = "armv7ve",
381 .description = "ARMv7ve architecture",
382 .dependencies = featureSet(&[_]Feature{
383 .aclass,
384 .db,
385 .dsp,
386 .mp,
387 .neon,
388 .trustzone,
389 .v7,
390 .virtualization,
391 }),
392 };
393 result[@enumToInt(Feature.armv8_a)] = .{
394 .llvm_name = "armv8-a",
395 .description = "ARMv8a architecture",
396 .dependencies = featureSet(&[_]Feature{
397 .aclass,
398 .crc,
399 .crypto,
400 .db,
401 .dsp,
402 .fp_armv8,
403 .mp,
404 .neon,
405 .trustzone,
406 .v8a,
407 .virtualization,
408 }),
409 };
410 result[@enumToInt(Feature.armv8_m_base)] = .{
411 .llvm_name = "armv8-m.base",
412 .description = "ARMv8mBaseline architecture",
413 .dependencies = featureSet(&[_]Feature{
414 .@"8msecext",
415 .acquire_release,
416 .db,
417 .hwdiv,
418 .mclass,
419 .noarm,
420 .strict_align,
421 .thumb_mode,
422 .v7clrex,
423 .v8m,
424 }),
425 };
426 result[@enumToInt(Feature.armv8_m_main)] = .{
427 .llvm_name = "armv8-m.main",
428 .description = "ARMv8mMainline architecture",
429 .dependencies = featureSet(&[_]Feature{
430 .@"8msecext",
431 .acquire_release,
432 .db,
433 .hwdiv,
434 .mclass,
435 .noarm,
436 .thumb_mode,
437 .v8m_main,
438 }),
439 };
440 result[@enumToInt(Feature.armv8_r)] = .{
441 .llvm_name = "armv8-r",
442 .description = "ARMv8r architecture",
443 .dependencies = featureSet(&[_]Feature{
444 .crc,
445 .db,
446 .dfb,
447 .dsp,
448 .fp_armv8,
449 .mp,
450 .neon,
451 .rclass,
452 .v8a,
453 .virtualization,
454 }),
455 };
456 result[@enumToInt(Feature.armv8_1_a)] = .{
457 .llvm_name = "armv8.1-a",
458 .description = "ARMv81a architecture",
459 .dependencies = featureSet(&[_]Feature{
460 .aclass,
461 .crc,
462 .crypto,
463 .db,
464 .dsp,
465 .fp_armv8,
466 .mp,
467 .neon,
468 .trustzone,
469 .v8_1a,
470 .virtualization,
471 }),
472 };
473 result[@enumToInt(Feature.armv8_1_m_main)] = .{
474 .llvm_name = "armv8.1-m.main",
475 .description = "ARMv81mMainline architecture",
476 .dependencies = featureSet(&[_]Feature{
477 .@"8msecext",
478 .acquire_release,
479 .db,
480 .hwdiv,
481 .lob,
482 .mclass,
483 .noarm,
484 .ras,
485 .thumb_mode,
486 .v8_1m_main,
487 }),
488 };
489 result[@enumToInt(Feature.armv8_2_a)] = .{
490 .llvm_name = "armv8.2-a",
491 .description = "ARMv82a architecture",
492 .dependencies = featureSet(&[_]Feature{
493 .aclass,
494 .crc,
495 .crypto,
496 .db,
497 .dsp,
498 .fp_armv8,
499 .mp,
500 .neon,
501 .ras,
502 .trustzone,
503 .v8_2a,
504 .virtualization,
505 }),
506 };
507 result[@enumToInt(Feature.armv8_3_a)] = .{
508 .llvm_name = "armv8.3-a",
509 .description = "ARMv83a architecture",
510 .dependencies = featureSet(&[_]Feature{
511 .aclass,
512 .crc,
513 .crypto,
514 .db,
515 .dsp,
516 .fp_armv8,
517 .mp,
518 .neon,
519 .ras,
520 .trustzone,
521 .v8_3a,
522 .virtualization,
523 }),
524 };
525 result[@enumToInt(Feature.armv8_4_a)] = .{
526 .llvm_name = "armv8.4-a",
527 .description = "ARMv84a architecture",
528 .dependencies = featureSet(&[_]Feature{
529 .aclass,
530 .crc,
531 .crypto,
532 .db,
533 .dotprod,
534 .dsp,
535 .fp_armv8,
536 .mp,
537 .neon,
538 .ras,
539 .trustzone,
540 .v8_4a,
541 .virtualization,
542 }),
174 result[@enumToInt(Feature.@"8msecext")] = .{
175 .llvm_name = "8msecext",
176 .description = "Enable support for ARMv8-M Security Extensions",
177 .dependencies = featureSet(&[_]Feature{}),
543178 };
544 result[@enumToInt(Feature.armv8_5_a)] = .{
545 .llvm_name = "armv8.5-a",
546 .description = "ARMv85a architecture",
179 result[@enumToInt(Feature.a76)] = .{
180 .llvm_name = "a76",
181 .description = "Cortex-A76 ARM processors",
182 .dependencies = featureSet(&[_]Feature{}),
183 };
184 result[@enumToInt(Feature.aclass)] = .{
185 .llvm_name = "aclass",
186 .description = "Is application profile ('A' series)",
187 .dependencies = featureSet(&[_]Feature{}),
188 };
189 result[@enumToInt(Feature.acquire_release)] = .{
190 .llvm_name = "acquire-release",
191 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
192 .dependencies = featureSet(&[_]Feature{}),
193 };
194 result[@enumToInt(Feature.aes)] = .{
195 .llvm_name = "aes",
196 .description = "Enable AES support",
547197 .dependencies = featureSet(&[_]Feature{
548 .aclass,
549 .crc,
550 .crypto,
551 .db,
552 .dotprod,
553 .dsp,
554 .fp_armv8,
555 .mp,
556198 .neon,
557 .ras,
558 .trustzone,
559 .v8_5a,
560 .virtualization,
561199 }),
562200 };
563201 result[@enumToInt(Feature.avoid_movs_shop)] = .{
......@@ -659,6 +297,25 @@ pub const all_features = blk: {
659297 .zcz,
660298 }),
661299 };
300 result[@enumToInt(Feature.fp16)] = .{
301 .llvm_name = "fp16",
302 .description = "Enable half-precision floating point",
303 .dependencies = featureSet(&[_]Feature{}),
304 };
305 result[@enumToInt(Feature.fp16fml)] = .{
306 .llvm_name = "fp16fml",
307 .description = "Enable full half-precision floating point fml instructions",
308 .dependencies = featureSet(&[_]Feature{
309 .fullfp16,
310 }),
311 };
312 result[@enumToInt(Feature.fp64)] = .{
313 .llvm_name = "fp64",
314 .description = "Floating point unit supports double precision",
315 .dependencies = featureSet(&[_]Feature{
316 .fpregs64,
317 }),
318 };
662319 result[@enumToInt(Feature.fp_armv8)] = .{
663320 .llvm_name = "fp-armv8",
664321 .description = "Enable ARMv8 FP",
......@@ -693,25 +350,6 @@ pub const all_features = blk: {
693350 .vfp4sp,
694351 }),
695352 };
696 result[@enumToInt(Feature.fp16)] = .{
697 .llvm_name = "fp16",
698 .description = "Enable half-precision floating point",
699 .dependencies = featureSet(&[_]Feature{}),
700 };
701 result[@enumToInt(Feature.fp16fml)] = .{
702 .llvm_name = "fp16fml",
703 .description = "Enable full half-precision floating point fml instructions",
704 .dependencies = featureSet(&[_]Feature{
705 .fullfp16,
706 }),
707 };
708 result[@enumToInt(Feature.fp64)] = .{
709 .llvm_name = "fp64",
710 .description = "Floating point unit supports double precision",
711 .dependencies = featureSet(&[_]Feature{
712 .fpregs64,
713 }),
714 };
715353 result[@enumToInt(Feature.fpao)] = .{
716354 .llvm_name = "fpao",
717355 .description = "Enable fast computation of positive address offsets",
......@@ -754,6 +392,135 @@ pub const all_features = blk: {
754392 .description = "CPU fuses literal generation operations",
755393 .dependencies = featureSet(&[_]Feature{}),
756394 };
395 result[@enumToInt(Feature.has_v4t)] = .{
396 .llvm_name = "v4t",
397 .description = "Support ARM v4T instructions",
398 .dependencies = featureSet(&[_]Feature{}),
399 };
400 result[@enumToInt(Feature.has_v5t)] = .{
401 .llvm_name = "v5t",
402 .description = "Support ARM v5T instructions",
403 .dependencies = featureSet(&[_]Feature{
404 .has_v4t,
405 }),
406 };
407 result[@enumToInt(Feature.has_v5te)] = .{
408 .llvm_name = "v5te",
409 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
410 .dependencies = featureSet(&[_]Feature{
411 .has_v5t,
412 }),
413 };
414 result[@enumToInt(Feature.has_v6)] = .{
415 .llvm_name = "v6",
416 .description = "Support ARM v6 instructions",
417 .dependencies = featureSet(&[_]Feature{
418 .has_v5te,
419 }),
420 };
421 result[@enumToInt(Feature.has_v6k)] = .{
422 .llvm_name = "v6k",
423 .description = "Support ARM v6k instructions",
424 .dependencies = featureSet(&[_]Feature{
425 .has_v6,
426 }),
427 };
428 result[@enumToInt(Feature.has_v6m)] = .{
429 .llvm_name = "v6m",
430 .description = "Support ARM v6M instructions",
431 .dependencies = featureSet(&[_]Feature{
432 .has_v6,
433 }),
434 };
435 result[@enumToInt(Feature.has_v6t2)] = .{
436 .llvm_name = "v6t2",
437 .description = "Support ARM v6t2 instructions",
438 .dependencies = featureSet(&[_]Feature{
439 .thumb2,
440 .has_v6k,
441 .has_v8m,
442 }),
443 };
444 result[@enumToInt(Feature.has_v7)] = .{
445 .llvm_name = "v7",
446 .description = "Support ARM v7 instructions",
447 .dependencies = featureSet(&[_]Feature{
448 .perfmon,
449 .has_v6t2,
450 .has_v7clrex,
451 }),
452 };
453 result[@enumToInt(Feature.has_v7clrex)] = .{
454 .llvm_name = "v7clrex",
455 .description = "Has v7 clrex instruction",
456 .dependencies = featureSet(&[_]Feature{}),
457 };
458 result[@enumToInt(Feature.has_v8)] = .{
459 .llvm_name = "v8",
460 .description = "Support ARM v8 instructions",
461 .dependencies = featureSet(&[_]Feature{
462 .acquire_release,
463 .has_v7,
464 }),
465 };
466 result[@enumToInt(Feature.has_v8_1a)] = .{
467 .llvm_name = "v8.1a",
468 .description = "Support ARM v8.1a instructions",
469 .dependencies = featureSet(&[_]Feature{
470 .has_v8,
471 }),
472 };
473 result[@enumToInt(Feature.has_v8_1m_main)] = .{
474 .llvm_name = "v8.1m.main",
475 .description = "Support ARM v8-1M Mainline instructions",
476 .dependencies = featureSet(&[_]Feature{
477 .has_v8m_main,
478 }),
479 };
480 result[@enumToInt(Feature.has_v8_2a)] = .{
481 .llvm_name = "v8.2a",
482 .description = "Support ARM v8.2a instructions",
483 .dependencies = featureSet(&[_]Feature{
484 .has_v8_1a,
485 }),
486 };
487 result[@enumToInt(Feature.has_v8_3a)] = .{
488 .llvm_name = "v8.3a",
489 .description = "Support ARM v8.3a instructions",
490 .dependencies = featureSet(&[_]Feature{
491 .has_v8_2a,
492 }),
493 };
494 result[@enumToInt(Feature.has_v8_4a)] = .{
495 .llvm_name = "v8.4a",
496 .description = "Support ARM v8.4a instructions",
497 .dependencies = featureSet(&[_]Feature{
498 .dotprod,
499 .has_v8_3a,
500 }),
501 };
502 result[@enumToInt(Feature.has_v8_5a)] = .{
503 .llvm_name = "v8.5a",
504 .description = "Support ARM v8.5a instructions",
505 .dependencies = featureSet(&[_]Feature{
506 .sb,
507 .has_v8_4a,
508 }),
509 };
510 result[@enumToInt(Feature.has_v8m)] = .{
511 .llvm_name = "v8m",
512 .description = "Support ARM v8M Baseline instructions",
513 .dependencies = featureSet(&[_]Feature{
514 .has_v6m,
515 }),
516 };
517 result[@enumToInt(Feature.has_v8m_main)] = .{
518 .llvm_name = "v8m.main",
519 .description = "Support ARM v8M Mainline instructions",
520 .dependencies = featureSet(&[_]Feature{
521 .has_v7,
522 }),
523 };
757524 result[@enumToInt(Feature.hwdiv)] = .{
758525 .llvm_name = "hwdiv",
759526 .description = "Enable divide instructions in Thumb",
......@@ -768,14 +535,14 @@ pub const all_features = blk: {
768535 .llvm_name = "iwmmxt",
769536 .description = "ARMv5te architecture",
770537 .dependencies = featureSet(&[_]Feature{
771 .v5te,
538 .has_v5te,
772539 }),
773540 };
774541 result[@enumToInt(Feature.iwmmxt2)] = .{
775542 .llvm_name = "iwmmxt2",
776543 .description = "ARMv5te architecture",
777544 .dependencies = featureSet(&[_]Feature{
778 .v5te,
545 .has_v5te,
779546 }),
780547 };
781548 result[@enumToInt(Feature.lob)] = .{
......@@ -820,7 +587,7 @@ pub const all_features = blk: {
820587 .dsp,
821588 .fpregs16,
822589 .fpregs64,
823 .v8_1m_main,
590 .has_v8_1m_main,
824591 }),
825592 };
826593 result[@enumToInt(Feature.mve_fp)] = .{
......@@ -993,16 +760,16 @@ pub const all_features = blk: {
993760 .description = "Swift ARM processors",
994761 .dependencies = featureSet(&[_]Feature{}),
995762 };
996 result[@enumToInt(Feature.thumb_mode)] = .{
997 .llvm_name = "thumb-mode",
998 .description = "Thumb mode",
999 .dependencies = featureSet(&[_]Feature{}),
1000 };
1001763 result[@enumToInt(Feature.thumb2)] = .{
1002764 .llvm_name = "thumb2",
1003765 .description = "Enable Thumb2 instructions",
1004766 .dependencies = featureSet(&[_]Feature{}),
1005767 };
768 result[@enumToInt(Feature.thumb_mode)] = .{
769 .llvm_name = "thumb-mode",
770 .description = "Thumb mode",
771 .dependencies = featureSet(&[_]Feature{}),
772 };
1006773 result[@enumToInt(Feature.trustzone)] = .{
1007774 .llvm_name = "trustzone",
1008775 .description = "Enable support for TrustZone security extensions",
......@@ -1018,133 +785,366 @@ pub const all_features = blk: {
1018785 .description = "Use the MachineScheduler",
1019786 .dependencies = featureSet(&[_]Feature{}),
1020787 };
1021 result[@enumToInt(Feature.v4t)] = .{
1022 .llvm_name = "v4t",
1023 .description = "Support ARM v4T instructions",
1024 .dependencies = featureSet(&[_]Feature{}),
788 result[@enumToInt(Feature.v2)] = .{
789 .llvm_name = "armv2",
790 .description = "ARMv2 architecture",
791 .dependencies = featureSet(&[_]Feature{}),
792 };
793 result[@enumToInt(Feature.v2a)] = .{
794 .llvm_name = "armv2a",
795 .description = "ARMv2a architecture",
796 .dependencies = featureSet(&[_]Feature{}),
797 };
798 result[@enumToInt(Feature.v3)] = .{
799 .llvm_name = "armv3",
800 .description = "ARMv3 architecture",
801 .dependencies = featureSet(&[_]Feature{}),
802 };
803 result[@enumToInt(Feature.v3m)] = .{
804 .llvm_name = "armv3m",
805 .description = "ARMv3m architecture",
806 .dependencies = featureSet(&[_]Feature{}),
807 };
808 result[@enumToInt(Feature.v4)] = .{
809 .llvm_name = "armv4",
810 .description = "ARMv4 architecture",
811 .dependencies = featureSet(&[_]Feature{}),
812 };
813 result[@enumToInt(Feature.v4t)] = .{
814 .llvm_name = "armv4t",
815 .description = "ARMv4t architecture",
816 .dependencies = featureSet(&[_]Feature{
817 .has_v4t,
818 }),
819 };
820 result[@enumToInt(Feature.v5t)] = .{
821 .llvm_name = "armv5t",
822 .description = "ARMv5t architecture",
823 .dependencies = featureSet(&[_]Feature{
824 .has_v5t,
825 }),
826 };
827 result[@enumToInt(Feature.v5te)] = .{
828 .llvm_name = "armv5te",
829 .description = "ARMv5te architecture",
830 .dependencies = featureSet(&[_]Feature{
831 .has_v5te,
832 }),
833 };
834 result[@enumToInt(Feature.v5tej)] = .{
835 .llvm_name = "armv5tej",
836 .description = "ARMv5tej architecture",
837 .dependencies = featureSet(&[_]Feature{
838 .has_v5te,
839 }),
840 };
841 result[@enumToInt(Feature.v6)] = .{
842 .llvm_name = "armv6",
843 .description = "ARMv6 architecture",
844 .dependencies = featureSet(&[_]Feature{
845 .dsp,
846 .has_v6,
847 }),
848 };
849 result[@enumToInt(Feature.v6m)] = .{
850 .llvm_name = "armv6-m",
851 .description = "ARMv6m architecture",
852 .dependencies = featureSet(&[_]Feature{
853 .db,
854 .mclass,
855 .noarm,
856 .strict_align,
857 .thumb_mode,
858 .has_v6m,
859 }),
860 };
861 result[@enumToInt(Feature.v6j)] = .{
862 .llvm_name = "armv6j",
863 .description = "ARMv7a architecture",
864 .dependencies = featureSet(&[_]Feature{
865 .v6,
866 }),
867 };
868 result[@enumToInt(Feature.v6k)] = .{
869 .llvm_name = "armv6k",
870 .description = "ARMv6k architecture",
871 .dependencies = featureSet(&[_]Feature{
872 .has_v6k,
873 }),
1025874 };
1026 result[@enumToInt(Feature.v5t)] = .{
1027 .llvm_name = "v5t",
1028 .description = "Support ARM v5T instructions",
875 result[@enumToInt(Feature.v6kz)] = .{
876 .llvm_name = "armv6kz",
877 .description = "ARMv6kz architecture",
1029878 .dependencies = featureSet(&[_]Feature{
1030 .v4t,
879 .trustzone,
880 .has_v6k,
1031881 }),
1032882 };
1033 result[@enumToInt(Feature.v5te)] = .{
1034 .llvm_name = "v5te",
1035 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
883 result[@enumToInt(Feature.v6sm)] = .{
884 .llvm_name = "armv6s-m",
885 .description = "ARMv6sm architecture",
1036886 .dependencies = featureSet(&[_]Feature{
1037 .v5t,
887 .db,
888 .mclass,
889 .noarm,
890 .strict_align,
891 .thumb_mode,
892 .has_v6m,
1038893 }),
1039894 };
1040 result[@enumToInt(Feature.v6)] = .{
1041 .llvm_name = "v6",
1042 .description = "Support ARM v6 instructions",
895 result[@enumToInt(Feature.v6t2)] = .{
896 .llvm_name = "armv6t2",
897 .description = "ARMv6t2 architecture",
1043898 .dependencies = featureSet(&[_]Feature{
1044 .v5te,
899 .dsp,
900 .has_v6t2,
1045901 }),
1046902 };
1047 result[@enumToInt(Feature.v6k)] = .{
1048 .llvm_name = "v6k",
1049 .description = "Support ARM v6k instructions",
903 result[@enumToInt(Feature.v7a)] = .{
904 .llvm_name = "armv7-a",
905 .description = "ARMv7a architecture",
1050906 .dependencies = featureSet(&[_]Feature{
1051 .v6,
907 .aclass,
908 .db,
909 .dsp,
910 .neon,
911 .has_v7,
1052912 }),
1053913 };
1054 result[@enumToInt(Feature.v6m)] = .{
1055 .llvm_name = "v6m",
1056 .description = "Support ARM v6M instructions",
914 result[@enumToInt(Feature.v7m)] = .{
915 .llvm_name = "armv7-m",
916 .description = "ARMv7m architecture",
1057917 .dependencies = featureSet(&[_]Feature{
1058 .v6,
918 .db,
919 .hwdiv,
920 .mclass,
921 .noarm,
922 .thumb_mode,
923 .thumb2,
924 .has_v7,
1059925 }),
1060926 };
1061 result[@enumToInt(Feature.v6t2)] = .{
1062 .llvm_name = "v6t2",
1063 .description = "Support ARM v6t2 instructions",
927 result[@enumToInt(Feature.v7r)] = .{
928 .llvm_name = "armv7-r",
929 .description = "ARMv7r architecture",
930 .dependencies = featureSet(&[_]Feature{
931 .db,
932 .dsp,
933 .hwdiv,
934 .rclass,
935 .has_v7,
936 }),
937 };
938 result[@enumToInt(Feature.v7em)] = .{
939 .llvm_name = "armv7e-m",
940 .description = "ARMv7em architecture",
1064941 .dependencies = featureSet(&[_]Feature{
942 .db,
943 .dsp,
944 .hwdiv,
945 .mclass,
946 .noarm,
947 .thumb_mode,
1065948 .thumb2,
1066 .v6k,
1067 .v8m,
949 .has_v7,
1068950 }),
1069951 };
1070 result[@enumToInt(Feature.v7)] = .{
1071 .llvm_name = "v7",
1072 .description = "Support ARM v7 instructions",
952 result[@enumToInt(Feature.v7k)] = .{
953 .llvm_name = "armv7k",
954 .description = "ARMv7a architecture",
1073955 .dependencies = featureSet(&[_]Feature{
1074 .perfmon,
1075 .v6t2,
1076 .v7clrex,
956 .v7a,
1077957 }),
1078958 };
1079 result[@enumToInt(Feature.v7clrex)] = .{
1080 .llvm_name = "v7clrex",
1081 .description = "Has v7 clrex instruction",
1082 .dependencies = featureSet(&[_]Feature{}),
959 result[@enumToInt(Feature.v7s)] = .{
960 .llvm_name = "armv7s",
961 .description = "ARMv7a architecture",
962 .dependencies = featureSet(&[_]Feature{
963 .v7a,
964 }),
965 };
966 result[@enumToInt(Feature.v7ve)] = .{
967 .llvm_name = "armv7ve",
968 .description = "ARMv7ve architecture",
969 .dependencies = featureSet(&[_]Feature{
970 .aclass,
971 .db,
972 .dsp,
973 .mp,
974 .neon,
975 .trustzone,
976 .has_v7,
977 .virtualization,
978 }),
1083979 };
1084980 result[@enumToInt(Feature.v8a)] = .{
1085 .llvm_name = "v8a",
1086 .description = "Support ARM v8a instructions",
981 .llvm_name = "armv8-a",
982 .description = "ARMv8a architecture",
983 .dependencies = featureSet(&[_]Feature{
984 .aclass,
985 .crc,
986 .crypto,
987 .db,
988 .dsp,
989 .fp_armv8,
990 .mp,
991 .neon,
992 .trustzone,
993 .has_v8,
994 .virtualization,
995 }),
996 };
997 result[@enumToInt(Feature.v8m)] = .{
998 .llvm_name = "armv8-m.base",
999 .description = "ARMv8mBaseline architecture",
1000 .dependencies = featureSet(&[_]Feature{
1001 .@"8msecext",
1002 .acquire_release,
1003 .db,
1004 .hwdiv,
1005 .mclass,
1006 .noarm,
1007 .strict_align,
1008 .thumb_mode,
1009 .has_v7clrex,
1010 .has_v8m,
1011 }),
1012 };
1013 result[@enumToInt(Feature.v8m_main)] = .{
1014 .llvm_name = "armv8-m.main",
1015 .description = "ARMv8mMainline architecture",
10871016 .dependencies = featureSet(&[_]Feature{
1017 .@"8msecext",
10881018 .acquire_release,
1089 .v7,
1019 .db,
1020 .hwdiv,
1021 .mclass,
1022 .noarm,
1023 .thumb_mode,
1024 .has_v8m_main,
1025 }),
1026 };
1027 result[@enumToInt(Feature.v8r)] = .{
1028 .llvm_name = "armv8-r",
1029 .description = "ARMv8r architecture",
1030 .dependencies = featureSet(&[_]Feature{
1031 .crc,
1032 .db,
1033 .dfb,
1034 .dsp,
1035 .fp_armv8,
1036 .mp,
1037 .neon,
1038 .rclass,
1039 .has_v8,
1040 .virtualization,
10901041 }),
10911042 };
10921043 result[@enumToInt(Feature.v8_1a)] = .{
1093 .llvm_name = "v8.1a",
1094 .description = "Support ARM v8.1a instructions",
1044 .llvm_name = "armv8.1-a",
1045 .description = "ARMv81a architecture",
10951046 .dependencies = featureSet(&[_]Feature{
1096 .v8a,
1047 .aclass,
1048 .crc,
1049 .crypto,
1050 .db,
1051 .dsp,
1052 .fp_armv8,
1053 .mp,
1054 .neon,
1055 .trustzone,
1056 .has_v8_1a,
1057 .virtualization,
10971058 }),
10981059 };
10991060 result[@enumToInt(Feature.v8_1m_main)] = .{
1100 .llvm_name = "v8.1m.main",
1101 .description = "Support ARM v8-1M Mainline instructions",
1061 .llvm_name = "armv8.1-m.main",
1062 .description = "ARMv81mMainline architecture",
11021063 .dependencies = featureSet(&[_]Feature{
1103 .v8m_main,
1064 .@"8msecext",
1065 .acquire_release,
1066 .db,
1067 .hwdiv,
1068 .lob,
1069 .mclass,
1070 .noarm,
1071 .ras,
1072 .thumb_mode,
1073 .has_v8_1m_main,
11041074 }),
11051075 };
11061076 result[@enumToInt(Feature.v8_2a)] = .{
1107 .llvm_name = "v8.2a",
1108 .description = "Support ARM v8.2a instructions",
1077 .llvm_name = "armv8.2-a",
1078 .description = "ARMv82a architecture",
11091079 .dependencies = featureSet(&[_]Feature{
1110 .v8_1a,
1080 .aclass,
1081 .crc,
1082 .crypto,
1083 .db,
1084 .dsp,
1085 .fp_armv8,
1086 .mp,
1087 .neon,
1088 .ras,
1089 .trustzone,
1090 .has_v8_2a,
1091 .virtualization,
11111092 }),
11121093 };
11131094 result[@enumToInt(Feature.v8_3a)] = .{
1114 .llvm_name = "v8.3a",
1115 .description = "Support ARM v8.3a instructions",
1095 .llvm_name = "armv8.3-a",
1096 .description = "ARMv83a architecture",
11161097 .dependencies = featureSet(&[_]Feature{
1117 .v8_2a,
1098 .aclass,
1099 .crc,
1100 .crypto,
1101 .db,
1102 .dsp,
1103 .fp_armv8,
1104 .mp,
1105 .neon,
1106 .ras,
1107 .trustzone,
1108 .has_v8_3a,
1109 .virtualization,
11181110 }),
11191111 };
11201112 result[@enumToInt(Feature.v8_4a)] = .{
1121 .llvm_name = "v8.4a",
1122 .description = "Support ARM v8.4a instructions",
1113 .llvm_name = "armv8.4-a",
1114 .description = "ARMv84a architecture",
11231115 .dependencies = featureSet(&[_]Feature{
1116 .aclass,
1117 .crc,
1118 .crypto,
1119 .db,
11241120 .dotprod,
1125 .v8_3a,
1121 .dsp,
1122 .fp_armv8,
1123 .mp,
1124 .neon,
1125 .ras,
1126 .trustzone,
1127 .has_v8_4a,
1128 .virtualization,
11261129 }),
11271130 };
11281131 result[@enumToInt(Feature.v8_5a)] = .{
1129 .llvm_name = "v8.5a",
1130 .description = "Support ARM v8.5a instructions",
1131 .dependencies = featureSet(&[_]Feature{
1132 .sb,
1133 .v8_4a,
1134 }),
1135 };
1136 result[@enumToInt(Feature.v8m)] = .{
1137 .llvm_name = "v8m",
1138 .description = "Support ARM v8M Baseline instructions",
1139 .dependencies = featureSet(&[_]Feature{
1140 .v6m,
1141 }),
1142 };
1143 result[@enumToInt(Feature.v8m_main)] = .{
1144 .llvm_name = "v8m.main",
1145 .description = "Support ARM v8M Mainline instructions",
1132 .llvm_name = "armv8.5-a",
1133 .description = "ARMv85a architecture",
11461134 .dependencies = featureSet(&[_]Feature{
1147 .v7,
1135 .aclass,
1136 .crc,
1137 .crypto,
1138 .db,
1139 .dotprod,
1140 .dsp,
1141 .fp_armv8,
1142 .mp,
1143 .neon,
1144 .ras,
1145 .trustzone,
1146 .has_v8_5a,
1147 .virtualization,
11481148 }),
11491149 };
11501150 result[@enumToInt(Feature.vfp2)] = .{
......@@ -1279,7 +1279,7 @@ pub const all_features = blk: {
12791279 .llvm_name = "xscale",
12801280 .description = "ARMv5te architecture",
12811281 .dependencies = featureSet(&[_]Feature{
1282 .v5te,
1282 .has_v5te,
12831283 }),
12841284 };
12851285 result[@enumToInt(Feature.zcz)] = .{
......@@ -1300,49 +1300,49 @@ pub const cpu = struct {
13001300 .name = "arm1020e",
13011301 .llvm_name = "arm1020e",
13021302 .features = featureSet(&[_]Feature{
1303 .v5te,
1303 .has_v5te,
13041304 }),
13051305 };
13061306 pub const arm1020t = CpuModel{
13071307 .name = "arm1020t",
13081308 .llvm_name = "arm1020t",
13091309 .features = featureSet(&[_]Feature{
1310 .v5t,
1310 .has_v5t,
13111311 }),
13121312 };
13131313 pub const arm1022e = CpuModel{
13141314 .name = "arm1022e",
13151315 .llvm_name = "arm1022e",
13161316 .features = featureSet(&[_]Feature{
1317 .v5te,
1317 .has_v5te,
13181318 }),
13191319 };
13201320 pub const arm10e = CpuModel{
13211321 .name = "arm10e",
13221322 .llvm_name = "arm10e",
13231323 .features = featureSet(&[_]Feature{
1324 .v5te,
1324 .has_v5te,
13251325 }),
13261326 };
13271327 pub const arm10tdmi = CpuModel{
13281328 .name = "arm10tdmi",
13291329 .llvm_name = "arm10tdmi",
13301330 .features = featureSet(&[_]Feature{
1331 .v5t,
1331 .has_v5t,
13321332 }),
13331333 };
13341334 pub const arm1136j_s = CpuModel{
13351335 .name = "arm1136j_s",
13361336 .llvm_name = "arm1136j-s",
13371337 .features = featureSet(&[_]Feature{
1338 .v6,
1338 .has_v6,
13391339 }),
13401340 };
13411341 pub const arm1136jf_s = CpuModel{
13421342 .name = "arm1136jf_s",
13431343 .llvm_name = "arm1136jf-s",
13441344 .features = featureSet(&[_]Feature{
1345 .v6,
1345 .has_v6,
13461346 .slowfpvmlx,
13471347 .vfp2,
13481348 }),
......@@ -1351,14 +1351,14 @@ pub const cpu = struct {
13511351 .name = "arm1156t2_s",
13521352 .llvm_name = "arm1156t2-s",
13531353 .features = featureSet(&[_]Feature{
1354 .v6t2,
1354 .has_v6t2,
13551355 }),
13561356 };
13571357 pub const arm1156t2f_s = CpuModel{
13581358 .name = "arm1156t2f_s",
13591359 .llvm_name = "arm1156t2f-s",
13601360 .features = featureSet(&[_]Feature{
1361 .v6t2,
1361 .has_v6t2,
13621362 .slowfpvmlx,
13631363 .vfp2,
13641364 }),
......@@ -1390,28 +1390,28 @@ pub const cpu = struct {
13901390 .name = "arm710t",
13911391 .llvm_name = "arm710t",
13921392 .features = featureSet(&[_]Feature{
1393 .v4t,
1393 .has_v4t,
13941394 }),
13951395 };
13961396 pub const arm720t = CpuModel{
13971397 .name = "arm720t",
13981398 .llvm_name = "arm720t",
13991399 .features = featureSet(&[_]Feature{
1400 .v4t,
1400 .has_v4t,
14011401 }),
14021402 };
14031403 pub const arm7tdmi = CpuModel{
14041404 .name = "arm7tdmi",
14051405 .llvm_name = "arm7tdmi",
14061406 .features = featureSet(&[_]Feature{
1407 .v4t,
1407 .has_v4t,
14081408 }),
14091409 };
14101410 pub const arm7tdmi_s = CpuModel{
14111411 .name = "arm7tdmi_s",
14121412 .llvm_name = "arm7tdmi-s",
14131413 .features = featureSet(&[_]Feature{
1414 .v4t,
1414 .has_v4t,
14151415 }),
14161416 };
14171417 pub const arm8 = CpuModel{
......@@ -1432,84 +1432,84 @@ pub const cpu = struct {
14321432 .name = "arm9",
14331433 .llvm_name = "arm9",
14341434 .features = featureSet(&[_]Feature{
1435 .v4t,
1435 .has_v4t,
14361436 }),
14371437 };
14381438 pub const arm920 = CpuModel{
14391439 .name = "arm920",
14401440 .llvm_name = "arm920",
14411441 .features = featureSet(&[_]Feature{
1442 .v4t,
1442 .has_v4t,
14431443 }),
14441444 };
14451445 pub const arm920t = CpuModel{
14461446 .name = "arm920t",
14471447 .llvm_name = "arm920t",
14481448 .features = featureSet(&[_]Feature{
1449 .v4t,
1449 .has_v4t,
14501450 }),
14511451 };
14521452 pub const arm922t = CpuModel{
14531453 .name = "arm922t",
14541454 .llvm_name = "arm922t",
14551455 .features = featureSet(&[_]Feature{
1456 .v4t,
1456 .has_v4t,
14571457 }),
14581458 };
14591459 pub const arm926ej_s = CpuModel{
14601460 .name = "arm926ej_s",
14611461 .llvm_name = "arm926ej-s",
14621462 .features = featureSet(&[_]Feature{
1463 .v5te,
1463 .has_v5te,
14641464 }),
14651465 };
14661466 pub const arm940t = CpuModel{
14671467 .name = "arm940t",
14681468 .llvm_name = "arm940t",
14691469 .features = featureSet(&[_]Feature{
1470 .v4t,
1470 .has_v4t,
14711471 }),
14721472 };
14731473 pub const arm946e_s = CpuModel{
14741474 .name = "arm946e_s",
14751475 .llvm_name = "arm946e-s",
14761476 .features = featureSet(&[_]Feature{
1477 .v5te,
1477 .has_v5te,
14781478 }),
14791479 };
14801480 pub const arm966e_s = CpuModel{
14811481 .name = "arm966e_s",
14821482 .llvm_name = "arm966e-s",
14831483 .features = featureSet(&[_]Feature{
1484 .v5te,
1484 .has_v5te,
14851485 }),
14861486 };
14871487 pub const arm968e_s = CpuModel{
14881488 .name = "arm968e_s",
14891489 .llvm_name = "arm968e-s",
14901490 .features = featureSet(&[_]Feature{
1491 .v5te,
1491 .has_v5te,
14921492 }),
14931493 };
14941494 pub const arm9e = CpuModel{
14951495 .name = "arm9e",
14961496 .llvm_name = "arm9e",
14971497 .features = featureSet(&[_]Feature{
1498 .v5te,
1498 .has_v5te,
14991499 }),
15001500 };
15011501 pub const arm9tdmi = CpuModel{
15021502 .name = "arm9tdmi",
15031503 .llvm_name = "arm9tdmi",
15041504 .features = featureSet(&[_]Feature{
1505 .v4t,
1505 .has_v4t,
15061506 }),
15071507 };
15081508 pub const baseline = CpuModel{
15091509 .name = "baseline",
15101510 .llvm_name = "generic",
15111511 .features = featureSet(&[_]Feature{
1512 .v6m,
1512 .has_v6m,
15131513 }),
15141514 };
15151515 pub const cortex_a12 = CpuModel{
......@@ -1561,7 +1561,7 @@ pub const cpu = struct {
15611561 .name = "cortex_a32",
15621562 .llvm_name = "cortex-a32",
15631563 .features = featureSet(&[_]Feature{
1564 .v8a,
1564 .has_v8,
15651565 .crc,
15661566 .crypto,
15671567 .hwdiv,
......@@ -1572,7 +1572,7 @@ pub const cpu = struct {
15721572 .name = "cortex_a35",
15731573 .llvm_name = "cortex-a35",
15741574 .features = featureSet(&[_]Feature{
1575 .v8a,
1575 .has_v8,
15761576 .crc,
15771577 .crypto,
15781578 .hwdiv,
......@@ -1597,7 +1597,7 @@ pub const cpu = struct {
15971597 .name = "cortex_a53",
15981598 .llvm_name = "cortex-a53",
15991599 .features = featureSet(&[_]Feature{
1600 .v8a,
1600 .has_v8,
16011601 .crc,
16021602 .crypto,
16031603 .fpao,
......@@ -1609,7 +1609,7 @@ pub const cpu = struct {
16091609 .name = "cortex_a55",
16101610 .llvm_name = "cortex-a55",
16111611 .features = featureSet(&[_]Feature{
1612 .v8_2a,
1612 .has_v8_2a,
16131613 .dotprod,
16141614 .hwdiv,
16151615 .hwdiv_arm,
......@@ -1619,7 +1619,7 @@ pub const cpu = struct {
16191619 .name = "cortex_a57",
16201620 .llvm_name = "cortex-a57",
16211621 .features = featureSet(&[_]Feature{
1622 .v8a,
1622 .has_v8,
16231623 .avoid_partial_cpsr,
16241624 .cheap_predicable_cpsr,
16251625 .crc,
......@@ -1649,7 +1649,7 @@ pub const cpu = struct {
16491649 .name = "cortex_a72",
16501650 .llvm_name = "cortex-a72",
16511651 .features = featureSet(&[_]Feature{
1652 .v8a,
1652 .has_v8,
16531653 .crc,
16541654 .crypto,
16551655 .hwdiv,
......@@ -1660,7 +1660,7 @@ pub const cpu = struct {
16601660 .name = "cortex_a73",
16611661 .llvm_name = "cortex-a73",
16621662 .features = featureSet(&[_]Feature{
1663 .v8a,
1663 .has_v8,
16641664 .crc,
16651665 .crypto,
16661666 .hwdiv,
......@@ -1671,7 +1671,7 @@ pub const cpu = struct {
16711671 .name = "cortex_a75",
16721672 .llvm_name = "cortex-a75",
16731673 .features = featureSet(&[_]Feature{
1674 .v8_2a,
1674 .has_v8_2a,
16751675 .dotprod,
16761676 .hwdiv,
16771677 .hwdiv_arm,
......@@ -1682,7 +1682,7 @@ pub const cpu = struct {
16821682 .llvm_name = "cortex-a76",
16831683 .features = featureSet(&[_]Feature{
16841684 .a76,
1685 .v8_2a,
1685 .has_v8_2a,
16861686 .crc,
16871687 .crypto,
16881688 .dotprod,
......@@ -1696,7 +1696,7 @@ pub const cpu = struct {
16961696 .llvm_name = "cortex-a76ae",
16971697 .features = featureSet(&[_]Feature{
16981698 .a76,
1699 .v8_2a,
1699 .has_v8_2a,
17001700 .crc,
17011701 .crypto,
17021702 .dotprod,
......@@ -1742,28 +1742,28 @@ pub const cpu = struct {
17421742 .name = "cortex_m0",
17431743 .llvm_name = "cortex-m0",
17441744 .features = featureSet(&[_]Feature{
1745 .v6m,
1745 .has_v6m,
17461746 }),
17471747 };
17481748 pub const cortex_m0plus = CpuModel{
17491749 .name = "cortex_m0plus",
17501750 .llvm_name = "cortex-m0plus",
17511751 .features = featureSet(&[_]Feature{
1752 .v6m,
1752 .has_v6m,
17531753 }),
17541754 };
17551755 pub const cortex_m1 = CpuModel{
17561756 .name = "cortex_m1",
17571757 .llvm_name = "cortex-m1",
17581758 .features = featureSet(&[_]Feature{
1759 .v6m,
1759 .has_v6m,
17601760 }),
17611761 };
17621762 pub const cortex_m23 = CpuModel{
17631763 .name = "cortex_m23",
17641764 .llvm_name = "cortex-m23",
17651765 .features = featureSet(&[_]Feature{
1766 .v8m,
1766 .has_v8m,
17671767 .no_movt,
17681768 }),
17691769 };
......@@ -1783,7 +1783,7 @@ pub const cpu = struct {
17831783 .name = "cortex_m33",
17841784 .llvm_name = "cortex-m33",
17851785 .features = featureSet(&[_]Feature{
1786 .v8m_main,
1786 .has_v8m_main,
17871787 .dsp,
17881788 .fp_armv8d16sp,
17891789 .loop_align,
......@@ -1797,7 +1797,7 @@ pub const cpu = struct {
17971797 .name = "cortex_m35p",
17981798 .llvm_name = "cortex-m35p",
17991799 .features = featureSet(&[_]Feature{
1800 .v8m_main,
1800 .has_v8m_main,
18011801 .dsp,
18021802 .fp_armv8d16sp,
18031803 .loop_align,
......@@ -1908,7 +1908,7 @@ pub const cpu = struct {
19081908 .name = "cyclone",
19091909 .llvm_name = "cyclone",
19101910 .features = featureSet(&[_]Feature{
1911 .v8a,
1911 .has_v8,
19121912 .avoid_movs_shop,
19131913 .avoid_partial_cpsr,
19141914 .crypto,
......@@ -1929,14 +1929,14 @@ pub const cpu = struct {
19291929 .name = "ep9312",
19301930 .llvm_name = "ep9312",
19311931 .features = featureSet(&[_]Feature{
1932 .v4t,
1932 .has_v4t,
19331933 }),
19341934 };
19351935 pub const exynos_m1 = CpuModel{
19361936 .name = "exynos_m1",
19371937 .llvm_name = "exynos-m1",
19381938 .features = featureSet(&[_]Feature{
1939 .v8a,
1939 .has_v8,
19401940 .exynos,
19411941 }),
19421942 };
......@@ -1944,7 +1944,7 @@ pub const cpu = struct {
19441944 .name = "exynos_m2",
19451945 .llvm_name = "exynos-m2",
19461946 .features = featureSet(&[_]Feature{
1947 .v8a,
1947 .has_v8,
19481948 .exynos,
19491949 }),
19501950 };
......@@ -1952,7 +1952,7 @@ pub const cpu = struct {
19521952 .name = "exynos_m3",
19531953 .llvm_name = "exynos-m3",
19541954 .features = featureSet(&[_]Feature{
1955 .v8a,
1955 .has_v8,
19561956 .exynos,
19571957 }),
19581958 };
......@@ -1960,7 +1960,7 @@ pub const cpu = struct {
19601960 .name = "exynos_m4",
19611961 .llvm_name = "exynos-m4",
19621962 .features = featureSet(&[_]Feature{
1963 .v8_2a,
1963 .has_v8_2a,
19641964 .dotprod,
19651965 .exynos,
19661966 .fullfp16,
......@@ -1973,7 +1973,7 @@ pub const cpu = struct {
19731973 .dotprod,
19741974 .exynos,
19751975 .fullfp16,
1976 .v8_2a,
1976 .has_v8_2a,
19771977 }),
19781978 };
19791979 pub const generic = CpuModel{
......@@ -1985,7 +1985,7 @@ pub const cpu = struct {
19851985 .name = "iwmmxt",
19861986 .llvm_name = "iwmmxt",
19871987 .features = featureSet(&[_]Feature{
1988 .v5te,
1988 .has_v5te,
19891989 }),
19901990 };
19911991 pub const krait = CpuModel{
......@@ -2012,14 +2012,14 @@ pub const cpu = struct {
20122012 .crypto,
20132013 .hwdiv,
20142014 .hwdiv_arm,
2015 .v8a,
2015 .has_v8,
20162016 }),
20172017 };
20182018 pub const mpcore = CpuModel{
20192019 .name = "mpcore",
20202020 .llvm_name = "mpcore",
20212021 .features = featureSet(&[_]Feature{
2022 .v6k,
2022 .has_v6k,
20232023 .slowfpvmlx,
20242024 .vfp2,
20252025 }),
......@@ -2028,14 +2028,14 @@ pub const cpu = struct {
20282028 .name = "mpcorenovfp",
20292029 .llvm_name = "mpcorenovfp",
20302030 .features = featureSet(&[_]Feature{
2031 .v6k,
2031 .has_v6k,
20322032 }),
20332033 };
20342034 pub const sc000 = CpuModel{
20352035 .name = "sc000",
20362036 .llvm_name = "sc000",
20372037 .features = featureSet(&[_]Feature{
2038 .v6m,
2038 .has_v6m,
20392039 }),
20402040 };
20412041 pub const sc300 = CpuModel{
......@@ -2108,7 +2108,7 @@ pub const cpu = struct {
21082108 .name = "xscale",
21092109 .llvm_name = "xscale",
21102110 .features = featureSet(&[_]Feature{
2111 .v5te,
2111 .has_v5te,
21122112 }),
21132113 };
21142114};