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) {...@@ -219,7 +219,7 @@ pub const Target = union(enum) {
219 pub const Set = struct {219 pub const Set = struct {
220 ints: [usize_count]usize,220 ints: [usize_count]usize,
221221
222 pub const needed_bit_count = 138;222 pub const needed_bit_count = 154;
223 pub const byte_count = (needed_bit_count + 7) / 8;223 pub const byte_count = (needed_bit_count + 7) / 8;
224 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);224 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
225 pub const Index = std.math.Log2Int(@IntType(false, usize_count * @bitSizeOf(usize)));225 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 {...@@ -9,39 +9,6 @@ pub const Feature = enum {
9 aclass,9 aclass,
10 acquire_release,10 acquire_release,
11 aes,11 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,
45 avoid_movs_shop,12 avoid_movs_shop,
46 avoid_partial_cpsr,13 avoid_partial_cpsr,
47 cheap_predicable_cpsr,14 cheap_predicable_cpsr,
...@@ -57,13 +24,13 @@ pub const Feature = enum {...@@ -57,13 +24,13 @@ pub const Feature = enum {
57 execute_only,24 execute_only,
58 expand_fp_mlx,25 expand_fp_mlx,
59 exynos,26 exynos,
27 fp16,
28 fp16fml,
29 fp64,
60 fp_armv8,30 fp_armv8,
61 fp_armv8d16,31 fp_armv8d16,
62 fp_armv8d16sp,32 fp_armv8d16sp,
63 fp_armv8sp,33 fp_armv8sp,
64 fp16,
65 fp16fml,
66 fp64,
67 fpao,34 fpao,
68 fpregs,35 fpregs,
69 fpregs16,36 fpregs16,
...@@ -71,6 +38,24 @@ pub const Feature = enum {...@@ -71,6 +38,24 @@ pub const Feature = enum {
71 fullfp16,38 fullfp16,
72 fuse_aes,39 fuse_aes,
73 fuse_literals,40 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,
74 hwdiv,59 hwdiv,
75 hwdiv_arm,60 hwdiv_arm,
76 iwmmxt,61 iwmmxt,
...@@ -115,29 +100,44 @@ pub const Feature = enum {...@@ -115,29 +100,44 @@ pub const Feature = enum {
115 splat_vfp_neon,100 splat_vfp_neon,
116 strict_align,101 strict_align,
117 swift,102 swift,
118 thumb_mode,
119 thumb2,103 thumb2,
104 thumb_mode,
120 trustzone,105 trustzone,
121 use_aa,106 use_aa,
122 use_misched,107 use_misched,
108 v2,
109 v2a,
110 v3,
111 v3m,
112 v4,
123 v4t,113 v4t,
124 v5t,114 v5t,
125 v5te,115 v5te,
116 v5tej,
126 v6,117 v6,
118 v6j,
127 v6k,119 v6k,
120 v6kz,
128 v6m,121 v6m,
122 v6sm,
129 v6t2,123 v6t2,
130 v7,124 v7a,
131 v7clrex,125 v7em,
126 v7k,
127 v7m,
128 v7r,
129 v7s,
130 v7ve,
132 v8a,131 v8a,
132 v8m,
133 v8m_main,
134 v8r,
133 v8_1a,135 v8_1a,
134 v8_1m_main,136 v8_1m_main,
135 v8_2a,137 v8_2a,
136 v8_3a,138 v8_3a,
137 v8_4a,139 v8_4a,
138 v8_5a,140 v8_5a,
139 v8m,
140 v8m_main,
141 vfp2,141 vfp2,
142 vfp2d16,142 vfp2d16,
143 vfp2d16sp,143 vfp2d16sp,
...@@ -171,393 +171,31 @@ pub const all_features = blk: {...@@ -171,393 +171,31 @@ pub const all_features = blk: {
171 .description = "Prefer 32-bit Thumb instrs",171 .description = "Prefer 32-bit Thumb instrs",
172 .dependencies = featureSet(&[_]Feature{}),172 .dependencies = featureSet(&[_]Feature{}),
173 };173 };
174 result[@enumToInt(Feature.@"8msecext")] = .{174 result[@enumToInt(Feature.@"8msecext")] = .{
175 .llvm_name = "8msecext",175 .llvm_name = "8msecext",
176 .description = "Enable support for ARMv8-M Security Extensions",176 .description = "Enable support for ARMv8-M Security Extensions",
177 .dependencies = featureSet(&[_]Feature{}),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 }),
543 };178 };
544 result[@enumToInt(Feature.armv8_5_a)] = .{179 result[@enumToInt(Feature.a76)] = .{
545 .llvm_name = "armv8.5-a",180 .llvm_name = "a76",
546 .description = "ARMv85a architecture",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",
547 .dependencies = featureSet(&[_]Feature{197 .dependencies = featureSet(&[_]Feature{
548 .aclass,
549 .crc,
550 .crypto,
551 .db,
552 .dotprod,
553 .dsp,
554 .fp_armv8,
555 .mp,
556 .neon,198 .neon,
557 .ras,
558 .trustzone,
559 .v8_5a,
560 .virtualization,
561 }),199 }),
562 };200 };
563 result[@enumToInt(Feature.avoid_movs_shop)] = .{201 result[@enumToInt(Feature.avoid_movs_shop)] = .{
...@@ -659,6 +297,25 @@ pub const all_features = blk: {...@@ -659,6 +297,25 @@ pub const all_features = blk: {
659 .zcz,297 .zcz,
660 }),298 }),
661 };299 };
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 };
662 result[@enumToInt(Feature.fp_armv8)] = .{319 result[@enumToInt(Feature.fp_armv8)] = .{
663 .llvm_name = "fp-armv8",320 .llvm_name = "fp-armv8",
664 .description = "Enable ARMv8 FP",321 .description = "Enable ARMv8 FP",
...@@ -693,25 +350,6 @@ pub const all_features = blk: {...@@ -693,25 +350,6 @@ pub const all_features = blk: {
693 .vfp4sp,350 .vfp4sp,
694 }),351 }),
695 };352 };
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 };
715 result[@enumToInt(Feature.fpao)] = .{353 result[@enumToInt(Feature.fpao)] = .{
716 .llvm_name = "fpao",354 .llvm_name = "fpao",
717 .description = "Enable fast computation of positive address offsets",355 .description = "Enable fast computation of positive address offsets",
...@@ -754,6 +392,135 @@ pub const all_features = blk: {...@@ -754,6 +392,135 @@ pub const all_features = blk: {
754 .description = "CPU fuses literal generation operations",392 .description = "CPU fuses literal generation operations",
755 .dependencies = featureSet(&[_]Feature{}),393 .dependencies = featureSet(&[_]Feature{}),
756 };394 };
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 };
757 result[@enumToInt(Feature.hwdiv)] = .{524 result[@enumToInt(Feature.hwdiv)] = .{
758 .llvm_name = "hwdiv",525 .llvm_name = "hwdiv",
759 .description = "Enable divide instructions in Thumb",526 .description = "Enable divide instructions in Thumb",
...@@ -768,14 +535,14 @@ pub const all_features = blk: {...@@ -768,14 +535,14 @@ pub const all_features = blk: {
768 .llvm_name = "iwmmxt",535 .llvm_name = "iwmmxt",
769 .description = "ARMv5te architecture",536 .description = "ARMv5te architecture",
770 .dependencies = featureSet(&[_]Feature{537 .dependencies = featureSet(&[_]Feature{
771 .v5te,538 .has_v5te,
772 }),539 }),
773 };540 };
774 result[@enumToInt(Feature.iwmmxt2)] = .{541 result[@enumToInt(Feature.iwmmxt2)] = .{
775 .llvm_name = "iwmmxt2",542 .llvm_name = "iwmmxt2",
776 .description = "ARMv5te architecture",543 .description = "ARMv5te architecture",
777 .dependencies = featureSet(&[_]Feature{544 .dependencies = featureSet(&[_]Feature{
778 .v5te,545 .has_v5te,
779 }),546 }),
780 };547 };
781 result[@enumToInt(Feature.lob)] = .{548 result[@enumToInt(Feature.lob)] = .{
...@@ -820,7 +587,7 @@ pub const all_features = blk: {...@@ -820,7 +587,7 @@ pub const all_features = blk: {
820 .dsp,587 .dsp,
821 .fpregs16,588 .fpregs16,
822 .fpregs64,589 .fpregs64,
823 .v8_1m_main,590 .has_v8_1m_main,
824 }),591 }),
825 };592 };
826 result[@enumToInt(Feature.mve_fp)] = .{593 result[@enumToInt(Feature.mve_fp)] = .{
...@@ -993,16 +760,16 @@ pub const all_features = blk: {...@@ -993,16 +760,16 @@ pub const all_features = blk: {
993 .description = "Swift ARM processors",760 .description = "Swift ARM processors",
994 .dependencies = featureSet(&[_]Feature{}),761 .dependencies = featureSet(&[_]Feature{}),
995 };762 };
996 result[@enumToInt(Feature.thumb_mode)] = .{
997 .llvm_name = "thumb-mode",
998 .description = "Thumb mode",
999 .dependencies = featureSet(&[_]Feature{}),
1000 };
1001 result[@enumToInt(Feature.thumb2)] = .{763 result[@enumToInt(Feature.thumb2)] = .{
1002 .llvm_name = "thumb2",764 .llvm_name = "thumb2",
1003 .description = "Enable Thumb2 instructions",765 .description = "Enable Thumb2 instructions",
1004 .dependencies = featureSet(&[_]Feature{}),766 .dependencies = featureSet(&[_]Feature{}),
1005 };767 };
768 result[@enumToInt(Feature.thumb_mode)] = .{
769 .llvm_name = "thumb-mode",
770 .description = "Thumb mode",
771 .dependencies = featureSet(&[_]Feature{}),
772 };
1006 result[@enumToInt(Feature.trustzone)] = .{773 result[@enumToInt(Feature.trustzone)] = .{
1007 .llvm_name = "trustzone",774 .llvm_name = "trustzone",
1008 .description = "Enable support for TrustZone security extensions",775 .description = "Enable support for TrustZone security extensions",
...@@ -1018,133 +785,366 @@ pub const all_features = blk: {...@@ -1018,133 +785,366 @@ pub const all_features = blk: {
1018 .description = "Use the MachineScheduler",785 .description = "Use the MachineScheduler",
1019 .dependencies = featureSet(&[_]Feature{}),786 .dependencies = featureSet(&[_]Feature{}),
1020 };787 };
1021 result[@enumToInt(Feature.v4t)] = .{788 result[@enumToInt(Feature.v2)] = .{
1022 .llvm_name = "v4t",789 .llvm_name = "armv2",
1023 .description = "Support ARM v4T instructions",790 .description = "ARMv2 architecture",
1024 .dependencies = featureSet(&[_]Feature{}),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 }),
1025 };874 };
1026 result[@enumToInt(Feature.v5t)] = .{875 result[@enumToInt(Feature.v6kz)] = .{
1027 .llvm_name = "v5t",876 .llvm_name = "armv6kz",
1028 .description = "Support ARM v5T instructions",877 .description = "ARMv6kz architecture",
1029 .dependencies = featureSet(&[_]Feature{878 .dependencies = featureSet(&[_]Feature{
1030 .v4t,879 .trustzone,
880 .has_v6k,
1031 }),881 }),
1032 };882 };
1033 result[@enumToInt(Feature.v5te)] = .{883 result[@enumToInt(Feature.v6sm)] = .{
1034 .llvm_name = "v5te",884 .llvm_name = "armv6s-m",
1035 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",885 .description = "ARMv6sm architecture",
1036 .dependencies = featureSet(&[_]Feature{886 .dependencies = featureSet(&[_]Feature{
1037 .v5t,887 .db,
888 .mclass,
889 .noarm,
890 .strict_align,
891 .thumb_mode,
892 .has_v6m,
1038 }),893 }),
1039 };894 };
1040 result[@enumToInt(Feature.v6)] = .{895 result[@enumToInt(Feature.v6t2)] = .{
1041 .llvm_name = "v6",896 .llvm_name = "armv6t2",
1042 .description = "Support ARM v6 instructions",897 .description = "ARMv6t2 architecture",
1043 .dependencies = featureSet(&[_]Feature{898 .dependencies = featureSet(&[_]Feature{
1044 .v5te,899 .dsp,
900 .has_v6t2,
1045 }),901 }),
1046 };902 };
1047 result[@enumToInt(Feature.v6k)] = .{903 result[@enumToInt(Feature.v7a)] = .{
1048 .llvm_name = "v6k",904 .llvm_name = "armv7-a",
1049 .description = "Support ARM v6k instructions",905 .description = "ARMv7a architecture",
1050 .dependencies = featureSet(&[_]Feature{906 .dependencies = featureSet(&[_]Feature{
1051 .v6,907 .aclass,
908 .db,
909 .dsp,
910 .neon,
911 .has_v7,
1052 }),912 }),
1053 };913 };
1054 result[@enumToInt(Feature.v6m)] = .{914 result[@enumToInt(Feature.v7m)] = .{
1055 .llvm_name = "v6m",915 .llvm_name = "armv7-m",
1056 .description = "Support ARM v6M instructions",916 .description = "ARMv7m architecture",
1057 .dependencies = featureSet(&[_]Feature{917 .dependencies = featureSet(&[_]Feature{
1058 .v6,918 .db,
919 .hwdiv,
920 .mclass,
921 .noarm,
922 .thumb_mode,
923 .thumb2,
924 .has_v7,
1059 }),925 }),
1060 };926 };
1061 result[@enumToInt(Feature.v6t2)] = .{927 result[@enumToInt(Feature.v7r)] = .{
1062 .llvm_name = "v6t2",928 .llvm_name = "armv7-r",
1063 .description = "Support ARM v6t2 instructions",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",
1064 .dependencies = featureSet(&[_]Feature{941 .dependencies = featureSet(&[_]Feature{
942 .db,
943 .dsp,
944 .hwdiv,
945 .mclass,
946 .noarm,
947 .thumb_mode,
1065 .thumb2,948 .thumb2,
1066 .v6k,949 .has_v7,
1067 .v8m,
1068 }),950 }),
1069 };951 };
1070 result[@enumToInt(Feature.v7)] = .{952 result[@enumToInt(Feature.v7k)] = .{
1071 .llvm_name = "v7",953 .llvm_name = "armv7k",
1072 .description = "Support ARM v7 instructions",954 .description = "ARMv7a architecture",
1073 .dependencies = featureSet(&[_]Feature{955 .dependencies = featureSet(&[_]Feature{
1074 .perfmon,956 .v7a,
1075 .v6t2,
1076 .v7clrex,
1077 }),957 }),
1078 };958 };
1079 result[@enumToInt(Feature.v7clrex)] = .{959 result[@enumToInt(Feature.v7s)] = .{
1080 .llvm_name = "v7clrex",960 .llvm_name = "armv7s",
1081 .description = "Has v7 clrex instruction",961 .description = "ARMv7a architecture",
1082 .dependencies = featureSet(&[_]Feature{}),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 }),
1083 };979 };
1084 result[@enumToInt(Feature.v8a)] = .{980 result[@enumToInt(Feature.v8a)] = .{
1085 .llvm_name = "v8a",981 .llvm_name = "armv8-a",
1086 .description = "Support ARM v8a instructions",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",
1087 .dependencies = featureSet(&[_]Feature{1016 .dependencies = featureSet(&[_]Feature{
1017 .@"8msecext",
1088 .acquire_release,1018 .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,
1090 }),1041 }),
1091 };1042 };
1092 result[@enumToInt(Feature.v8_1a)] = .{1043 result[@enumToInt(Feature.v8_1a)] = .{
1093 .llvm_name = "v8.1a",1044 .llvm_name = "armv8.1-a",
1094 .description = "Support ARM v8.1a instructions",1045 .description = "ARMv81a architecture",
1095 .dependencies = featureSet(&[_]Feature{1046 .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,
1097 }),1058 }),
1098 };1059 };
1099 result[@enumToInt(Feature.v8_1m_main)] = .{1060 result[@enumToInt(Feature.v8_1m_main)] = .{
1100 .llvm_name = "v8.1m.main",1061 .llvm_name = "armv8.1-m.main",
1101 .description = "Support ARM v8-1M Mainline instructions",1062 .description = "ARMv81mMainline architecture",
1102 .dependencies = featureSet(&[_]Feature{1063 .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,
1104 }),1074 }),
1105 };1075 };
1106 result[@enumToInt(Feature.v8_2a)] = .{1076 result[@enumToInt(Feature.v8_2a)] = .{
1107 .llvm_name = "v8.2a",1077 .llvm_name = "armv8.2-a",
1108 .description = "Support ARM v8.2a instructions",1078 .description = "ARMv82a architecture",
1109 .dependencies = featureSet(&[_]Feature{1079 .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,
1111 }),1092 }),
1112 };1093 };
1113 result[@enumToInt(Feature.v8_3a)] = .{1094 result[@enumToInt(Feature.v8_3a)] = .{
1114 .llvm_name = "v8.3a",1095 .llvm_name = "armv8.3-a",
1115 .description = "Support ARM v8.3a instructions",1096 .description = "ARMv83a architecture",
1116 .dependencies = featureSet(&[_]Feature{1097 .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,
1118 }),1110 }),
1119 };1111 };
1120 result[@enumToInt(Feature.v8_4a)] = .{1112 result[@enumToInt(Feature.v8_4a)] = .{
1121 .llvm_name = "v8.4a",1113 .llvm_name = "armv8.4-a",
1122 .description = "Support ARM v8.4a instructions",1114 .description = "ARMv84a architecture",
1123 .dependencies = featureSet(&[_]Feature{1115 .dependencies = featureSet(&[_]Feature{
1116 .aclass,
1117 .crc,
1118 .crypto,
1119 .db,
1124 .dotprod,1120 .dotprod,
1125 .v8_3a,1121 .dsp,
1122 .fp_armv8,
1123 .mp,
1124 .neon,
1125 .ras,
1126 .trustzone,
1127 .has_v8_4a,
1128 .virtualization,
1126 }),1129 }),
1127 };1130 };
1128 result[@enumToInt(Feature.v8_5a)] = .{1131 result[@enumToInt(Feature.v8_5a)] = .{
1129 .llvm_name = "v8.5a",1132 .llvm_name = "armv8.5-a",
1130 .description = "Support ARM v8.5a instructions",1133 .description = "ARMv85a architecture",
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",
1146 .dependencies = featureSet(&[_]Feature{1134 .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,
1148 }),1148 }),
1149 };1149 };
1150 result[@enumToInt(Feature.vfp2)] = .{1150 result[@enumToInt(Feature.vfp2)] = .{
...@@ -1279,7 +1279,7 @@ pub const all_features = blk: {...@@ -1279,7 +1279,7 @@ pub const all_features = blk: {
1279 .llvm_name = "xscale",1279 .llvm_name = "xscale",
1280 .description = "ARMv5te architecture",1280 .description = "ARMv5te architecture",
1281 .dependencies = featureSet(&[_]Feature{1281 .dependencies = featureSet(&[_]Feature{
1282 .v5te,1282 .has_v5te,
1283 }),1283 }),
1284 };1284 };
1285 result[@enumToInt(Feature.zcz)] = .{1285 result[@enumToInt(Feature.zcz)] = .{
...@@ -1300,49 +1300,49 @@ pub const cpu = struct {...@@ -1300,49 +1300,49 @@ pub const cpu = struct {
1300 .name = "arm1020e",1300 .name = "arm1020e",
1301 .llvm_name = "arm1020e",1301 .llvm_name = "arm1020e",
1302 .features = featureSet(&[_]Feature{1302 .features = featureSet(&[_]Feature{
1303 .v5te,1303 .has_v5te,
1304 }),1304 }),
1305 };1305 };
1306 pub const arm1020t = CpuModel{1306 pub const arm1020t = CpuModel{
1307 .name = "arm1020t",1307 .name = "arm1020t",
1308 .llvm_name = "arm1020t",1308 .llvm_name = "arm1020t",
1309 .features = featureSet(&[_]Feature{1309 .features = featureSet(&[_]Feature{
1310 .v5t,1310 .has_v5t,
1311 }),1311 }),
1312 };1312 };
1313 pub const arm1022e = CpuModel{1313 pub const arm1022e = CpuModel{
1314 .name = "arm1022e",1314 .name = "arm1022e",
1315 .llvm_name = "arm1022e",1315 .llvm_name = "arm1022e",
1316 .features = featureSet(&[_]Feature{1316 .features = featureSet(&[_]Feature{
1317 .v5te,1317 .has_v5te,
1318 }),1318 }),
1319 };1319 };
1320 pub const arm10e = CpuModel{1320 pub const arm10e = CpuModel{
1321 .name = "arm10e",1321 .name = "arm10e",
1322 .llvm_name = "arm10e",1322 .llvm_name = "arm10e",
1323 .features = featureSet(&[_]Feature{1323 .features = featureSet(&[_]Feature{
1324 .v5te,1324 .has_v5te,
1325 }),1325 }),
1326 };1326 };
1327 pub const arm10tdmi = CpuModel{1327 pub const arm10tdmi = CpuModel{
1328 .name = "arm10tdmi",1328 .name = "arm10tdmi",
1329 .llvm_name = "arm10tdmi",1329 .llvm_name = "arm10tdmi",
1330 .features = featureSet(&[_]Feature{1330 .features = featureSet(&[_]Feature{
1331 .v5t,1331 .has_v5t,
1332 }),1332 }),
1333 };1333 };
1334 pub const arm1136j_s = CpuModel{1334 pub const arm1136j_s = CpuModel{
1335 .name = "arm1136j_s",1335 .name = "arm1136j_s",
1336 .llvm_name = "arm1136j-s",1336 .llvm_name = "arm1136j-s",
1337 .features = featureSet(&[_]Feature{1337 .features = featureSet(&[_]Feature{
1338 .v6,1338 .has_v6,
1339 }),1339 }),
1340 };1340 };
1341 pub const arm1136jf_s = CpuModel{1341 pub const arm1136jf_s = CpuModel{
1342 .name = "arm1136jf_s",1342 .name = "arm1136jf_s",
1343 .llvm_name = "arm1136jf-s",1343 .llvm_name = "arm1136jf-s",
1344 .features = featureSet(&[_]Feature{1344 .features = featureSet(&[_]Feature{
1345 .v6,1345 .has_v6,
1346 .slowfpvmlx,1346 .slowfpvmlx,
1347 .vfp2,1347 .vfp2,
1348 }),1348 }),
...@@ -1351,14 +1351,14 @@ pub const cpu = struct {...@@ -1351,14 +1351,14 @@ pub const cpu = struct {
1351 .name = "arm1156t2_s",1351 .name = "arm1156t2_s",
1352 .llvm_name = "arm1156t2-s",1352 .llvm_name = "arm1156t2-s",
1353 .features = featureSet(&[_]Feature{1353 .features = featureSet(&[_]Feature{
1354 .v6t2,1354 .has_v6t2,
1355 }),1355 }),
1356 };1356 };
1357 pub const arm1156t2f_s = CpuModel{1357 pub const arm1156t2f_s = CpuModel{
1358 .name = "arm1156t2f_s",1358 .name = "arm1156t2f_s",
1359 .llvm_name = "arm1156t2f-s",1359 .llvm_name = "arm1156t2f-s",
1360 .features = featureSet(&[_]Feature{1360 .features = featureSet(&[_]Feature{
1361 .v6t2,1361 .has_v6t2,
1362 .slowfpvmlx,1362 .slowfpvmlx,
1363 .vfp2,1363 .vfp2,
1364 }),1364 }),
...@@ -1390,28 +1390,28 @@ pub const cpu = struct {...@@ -1390,28 +1390,28 @@ pub const cpu = struct {
1390 .name = "arm710t",1390 .name = "arm710t",
1391 .llvm_name = "arm710t",1391 .llvm_name = "arm710t",
1392 .features = featureSet(&[_]Feature{1392 .features = featureSet(&[_]Feature{
1393 .v4t,1393 .has_v4t,
1394 }),1394 }),
1395 };1395 };
1396 pub const arm720t = CpuModel{1396 pub const arm720t = CpuModel{
1397 .name = "arm720t",1397 .name = "arm720t",
1398 .llvm_name = "arm720t",1398 .llvm_name = "arm720t",
1399 .features = featureSet(&[_]Feature{1399 .features = featureSet(&[_]Feature{
1400 .v4t,1400 .has_v4t,
1401 }),1401 }),
1402 };1402 };
1403 pub const arm7tdmi = CpuModel{1403 pub const arm7tdmi = CpuModel{
1404 .name = "arm7tdmi",1404 .name = "arm7tdmi",
1405 .llvm_name = "arm7tdmi",1405 .llvm_name = "arm7tdmi",
1406 .features = featureSet(&[_]Feature{1406 .features = featureSet(&[_]Feature{
1407 .v4t,1407 .has_v4t,
1408 }),1408 }),
1409 };1409 };
1410 pub const arm7tdmi_s = CpuModel{1410 pub const arm7tdmi_s = CpuModel{
1411 .name = "arm7tdmi_s",1411 .name = "arm7tdmi_s",
1412 .llvm_name = "arm7tdmi-s",1412 .llvm_name = "arm7tdmi-s",
1413 .features = featureSet(&[_]Feature{1413 .features = featureSet(&[_]Feature{
1414 .v4t,1414 .has_v4t,
1415 }),1415 }),
1416 };1416 };
1417 pub const arm8 = CpuModel{1417 pub const arm8 = CpuModel{
...@@ -1432,84 +1432,84 @@ pub const cpu = struct {...@@ -1432,84 +1432,84 @@ pub const cpu = struct {
1432 .name = "arm9",1432 .name = "arm9",
1433 .llvm_name = "arm9",1433 .llvm_name = "arm9",
1434 .features = featureSet(&[_]Feature{1434 .features = featureSet(&[_]Feature{
1435 .v4t,1435 .has_v4t,
1436 }),1436 }),
1437 };1437 };
1438 pub const arm920 = CpuModel{1438 pub const arm920 = CpuModel{
1439 .name = "arm920",1439 .name = "arm920",
1440 .llvm_name = "arm920",1440 .llvm_name = "arm920",
1441 .features = featureSet(&[_]Feature{1441 .features = featureSet(&[_]Feature{
1442 .v4t,1442 .has_v4t,
1443 }),1443 }),
1444 };1444 };
1445 pub const arm920t = CpuModel{1445 pub const arm920t = CpuModel{
1446 .name = "arm920t",1446 .name = "arm920t",
1447 .llvm_name = "arm920t",1447 .llvm_name = "arm920t",
1448 .features = featureSet(&[_]Feature{1448 .features = featureSet(&[_]Feature{
1449 .v4t,1449 .has_v4t,
1450 }),1450 }),
1451 };1451 };
1452 pub const arm922t = CpuModel{1452 pub const arm922t = CpuModel{
1453 .name = "arm922t",1453 .name = "arm922t",
1454 .llvm_name = "arm922t",1454 .llvm_name = "arm922t",
1455 .features = featureSet(&[_]Feature{1455 .features = featureSet(&[_]Feature{
1456 .v4t,1456 .has_v4t,
1457 }),1457 }),
1458 };1458 };
1459 pub const arm926ej_s = CpuModel{1459 pub const arm926ej_s = CpuModel{
1460 .name = "arm926ej_s",1460 .name = "arm926ej_s",
1461 .llvm_name = "arm926ej-s",1461 .llvm_name = "arm926ej-s",
1462 .features = featureSet(&[_]Feature{1462 .features = featureSet(&[_]Feature{
1463 .v5te,1463 .has_v5te,
1464 }),1464 }),
1465 };1465 };
1466 pub const arm940t = CpuModel{1466 pub const arm940t = CpuModel{
1467 .name = "arm940t",1467 .name = "arm940t",
1468 .llvm_name = "arm940t",1468 .llvm_name = "arm940t",
1469 .features = featureSet(&[_]Feature{1469 .features = featureSet(&[_]Feature{
1470 .v4t,1470 .has_v4t,
1471 }),1471 }),
1472 };1472 };
1473 pub const arm946e_s = CpuModel{1473 pub const arm946e_s = CpuModel{
1474 .name = "arm946e_s",1474 .name = "arm946e_s",
1475 .llvm_name = "arm946e-s",1475 .llvm_name = "arm946e-s",
1476 .features = featureSet(&[_]Feature{1476 .features = featureSet(&[_]Feature{
1477 .v5te,1477 .has_v5te,
1478 }),1478 }),
1479 };1479 };
1480 pub const arm966e_s = CpuModel{1480 pub const arm966e_s = CpuModel{
1481 .name = "arm966e_s",1481 .name = "arm966e_s",
1482 .llvm_name = "arm966e-s",1482 .llvm_name = "arm966e-s",
1483 .features = featureSet(&[_]Feature{1483 .features = featureSet(&[_]Feature{
1484 .v5te,1484 .has_v5te,
1485 }),1485 }),
1486 };1486 };
1487 pub const arm968e_s = CpuModel{1487 pub const arm968e_s = CpuModel{
1488 .name = "arm968e_s",1488 .name = "arm968e_s",
1489 .llvm_name = "arm968e-s",1489 .llvm_name = "arm968e-s",
1490 .features = featureSet(&[_]Feature{1490 .features = featureSet(&[_]Feature{
1491 .v5te,1491 .has_v5te,
1492 }),1492 }),
1493 };1493 };
1494 pub const arm9e = CpuModel{1494 pub const arm9e = CpuModel{
1495 .name = "arm9e",1495 .name = "arm9e",
1496 .llvm_name = "arm9e",1496 .llvm_name = "arm9e",
1497 .features = featureSet(&[_]Feature{1497 .features = featureSet(&[_]Feature{
1498 .v5te,1498 .has_v5te,
1499 }),1499 }),
1500 };1500 };
1501 pub const arm9tdmi = CpuModel{1501 pub const arm9tdmi = CpuModel{
1502 .name = "arm9tdmi",1502 .name = "arm9tdmi",
1503 .llvm_name = "arm9tdmi",1503 .llvm_name = "arm9tdmi",
1504 .features = featureSet(&[_]Feature{1504 .features = featureSet(&[_]Feature{
1505 .v4t,1505 .has_v4t,
1506 }),1506 }),
1507 };1507 };
1508 pub const baseline = CpuModel{1508 pub const baseline = CpuModel{
1509 .name = "baseline",1509 .name = "baseline",
1510 .llvm_name = "generic",1510 .llvm_name = "generic",
1511 .features = featureSet(&[_]Feature{1511 .features = featureSet(&[_]Feature{
1512 .v6m,1512 .has_v6m,
1513 }),1513 }),
1514 };1514 };
1515 pub const cortex_a12 = CpuModel{1515 pub const cortex_a12 = CpuModel{
...@@ -1561,7 +1561,7 @@ pub const cpu = struct {...@@ -1561,7 +1561,7 @@ pub const cpu = struct {
1561 .name = "cortex_a32",1561 .name = "cortex_a32",
1562 .llvm_name = "cortex-a32",1562 .llvm_name = "cortex-a32",
1563 .features = featureSet(&[_]Feature{1563 .features = featureSet(&[_]Feature{
1564 .v8a,1564 .has_v8,
1565 .crc,1565 .crc,
1566 .crypto,1566 .crypto,
1567 .hwdiv,1567 .hwdiv,
...@@ -1572,7 +1572,7 @@ pub const cpu = struct {...@@ -1572,7 +1572,7 @@ pub const cpu = struct {
1572 .name = "cortex_a35",1572 .name = "cortex_a35",
1573 .llvm_name = "cortex-a35",1573 .llvm_name = "cortex-a35",
1574 .features = featureSet(&[_]Feature{1574 .features = featureSet(&[_]Feature{
1575 .v8a,1575 .has_v8,
1576 .crc,1576 .crc,
1577 .crypto,1577 .crypto,
1578 .hwdiv,1578 .hwdiv,
...@@ -1597,7 +1597,7 @@ pub const cpu = struct {...@@ -1597,7 +1597,7 @@ pub const cpu = struct {
1597 .name = "cortex_a53",1597 .name = "cortex_a53",
1598 .llvm_name = "cortex-a53",1598 .llvm_name = "cortex-a53",
1599 .features = featureSet(&[_]Feature{1599 .features = featureSet(&[_]Feature{
1600 .v8a,1600 .has_v8,
1601 .crc,1601 .crc,
1602 .crypto,1602 .crypto,
1603 .fpao,1603 .fpao,
...@@ -1609,7 +1609,7 @@ pub const cpu = struct {...@@ -1609,7 +1609,7 @@ pub const cpu = struct {
1609 .name = "cortex_a55",1609 .name = "cortex_a55",
1610 .llvm_name = "cortex-a55",1610 .llvm_name = "cortex-a55",
1611 .features = featureSet(&[_]Feature{1611 .features = featureSet(&[_]Feature{
1612 .v8_2a,1612 .has_v8_2a,
1613 .dotprod,1613 .dotprod,
1614 .hwdiv,1614 .hwdiv,
1615 .hwdiv_arm,1615 .hwdiv_arm,
...@@ -1619,7 +1619,7 @@ pub const cpu = struct {...@@ -1619,7 +1619,7 @@ pub const cpu = struct {
1619 .name = "cortex_a57",1619 .name = "cortex_a57",
1620 .llvm_name = "cortex-a57",1620 .llvm_name = "cortex-a57",
1621 .features = featureSet(&[_]Feature{1621 .features = featureSet(&[_]Feature{
1622 .v8a,1622 .has_v8,
1623 .avoid_partial_cpsr,1623 .avoid_partial_cpsr,
1624 .cheap_predicable_cpsr,1624 .cheap_predicable_cpsr,
1625 .crc,1625 .crc,
...@@ -1649,7 +1649,7 @@ pub const cpu = struct {...@@ -1649,7 +1649,7 @@ pub const cpu = struct {
1649 .name = "cortex_a72",1649 .name = "cortex_a72",
1650 .llvm_name = "cortex-a72",1650 .llvm_name = "cortex-a72",
1651 .features = featureSet(&[_]Feature{1651 .features = featureSet(&[_]Feature{
1652 .v8a,1652 .has_v8,
1653 .crc,1653 .crc,
1654 .crypto,1654 .crypto,
1655 .hwdiv,1655 .hwdiv,
...@@ -1660,7 +1660,7 @@ pub const cpu = struct {...@@ -1660,7 +1660,7 @@ pub const cpu = struct {
1660 .name = "cortex_a73",1660 .name = "cortex_a73",
1661 .llvm_name = "cortex-a73",1661 .llvm_name = "cortex-a73",
1662 .features = featureSet(&[_]Feature{1662 .features = featureSet(&[_]Feature{
1663 .v8a,1663 .has_v8,
1664 .crc,1664 .crc,
1665 .crypto,1665 .crypto,
1666 .hwdiv,1666 .hwdiv,
...@@ -1671,7 +1671,7 @@ pub const cpu = struct {...@@ -1671,7 +1671,7 @@ pub const cpu = struct {
1671 .name = "cortex_a75",1671 .name = "cortex_a75",
1672 .llvm_name = "cortex-a75",1672 .llvm_name = "cortex-a75",
1673 .features = featureSet(&[_]Feature{1673 .features = featureSet(&[_]Feature{
1674 .v8_2a,1674 .has_v8_2a,
1675 .dotprod,1675 .dotprod,
1676 .hwdiv,1676 .hwdiv,
1677 .hwdiv_arm,1677 .hwdiv_arm,
...@@ -1682,7 +1682,7 @@ pub const cpu = struct {...@@ -1682,7 +1682,7 @@ pub const cpu = struct {
1682 .llvm_name = "cortex-a76",1682 .llvm_name = "cortex-a76",
1683 .features = featureSet(&[_]Feature{1683 .features = featureSet(&[_]Feature{
1684 .a76,1684 .a76,
1685 .v8_2a,1685 .has_v8_2a,
1686 .crc,1686 .crc,
1687 .crypto,1687 .crypto,
1688 .dotprod,1688 .dotprod,
...@@ -1696,7 +1696,7 @@ pub const cpu = struct {...@@ -1696,7 +1696,7 @@ pub const cpu = struct {
1696 .llvm_name = "cortex-a76ae",1696 .llvm_name = "cortex-a76ae",
1697 .features = featureSet(&[_]Feature{1697 .features = featureSet(&[_]Feature{
1698 .a76,1698 .a76,
1699 .v8_2a,1699 .has_v8_2a,
1700 .crc,1700 .crc,
1701 .crypto,1701 .crypto,
1702 .dotprod,1702 .dotprod,
...@@ -1742,28 +1742,28 @@ pub const cpu = struct {...@@ -1742,28 +1742,28 @@ pub const cpu = struct {
1742 .name = "cortex_m0",1742 .name = "cortex_m0",
1743 .llvm_name = "cortex-m0",1743 .llvm_name = "cortex-m0",
1744 .features = featureSet(&[_]Feature{1744 .features = featureSet(&[_]Feature{
1745 .v6m,1745 .has_v6m,
1746 }),1746 }),
1747 };1747 };
1748 pub const cortex_m0plus = CpuModel{1748 pub const cortex_m0plus = CpuModel{
1749 .name = "cortex_m0plus",1749 .name = "cortex_m0plus",
1750 .llvm_name = "cortex-m0plus",1750 .llvm_name = "cortex-m0plus",
1751 .features = featureSet(&[_]Feature{1751 .features = featureSet(&[_]Feature{
1752 .v6m,1752 .has_v6m,
1753 }),1753 }),
1754 };1754 };
1755 pub const cortex_m1 = CpuModel{1755 pub const cortex_m1 = CpuModel{
1756 .name = "cortex_m1",1756 .name = "cortex_m1",
1757 .llvm_name = "cortex-m1",1757 .llvm_name = "cortex-m1",
1758 .features = featureSet(&[_]Feature{1758 .features = featureSet(&[_]Feature{
1759 .v6m,1759 .has_v6m,
1760 }),1760 }),
1761 };1761 };
1762 pub const cortex_m23 = CpuModel{1762 pub const cortex_m23 = CpuModel{
1763 .name = "cortex_m23",1763 .name = "cortex_m23",
1764 .llvm_name = "cortex-m23",1764 .llvm_name = "cortex-m23",
1765 .features = featureSet(&[_]Feature{1765 .features = featureSet(&[_]Feature{
1766 .v8m,1766 .has_v8m,
1767 .no_movt,1767 .no_movt,
1768 }),1768 }),
1769 };1769 };
...@@ -1783,7 +1783,7 @@ pub const cpu = struct {...@@ -1783,7 +1783,7 @@ pub const cpu = struct {
1783 .name = "cortex_m33",1783 .name = "cortex_m33",
1784 .llvm_name = "cortex-m33",1784 .llvm_name = "cortex-m33",
1785 .features = featureSet(&[_]Feature{1785 .features = featureSet(&[_]Feature{
1786 .v8m_main,1786 .has_v8m_main,
1787 .dsp,1787 .dsp,
1788 .fp_armv8d16sp,1788 .fp_armv8d16sp,
1789 .loop_align,1789 .loop_align,
...@@ -1797,7 +1797,7 @@ pub const cpu = struct {...@@ -1797,7 +1797,7 @@ pub const cpu = struct {
1797 .name = "cortex_m35p",1797 .name = "cortex_m35p",
1798 .llvm_name = "cortex-m35p",1798 .llvm_name = "cortex-m35p",
1799 .features = featureSet(&[_]Feature{1799 .features = featureSet(&[_]Feature{
1800 .v8m_main,1800 .has_v8m_main,
1801 .dsp,1801 .dsp,
1802 .fp_armv8d16sp,1802 .fp_armv8d16sp,
1803 .loop_align,1803 .loop_align,
...@@ -1908,7 +1908,7 @@ pub const cpu = struct {...@@ -1908,7 +1908,7 @@ pub const cpu = struct {
1908 .name = "cyclone",1908 .name = "cyclone",
1909 .llvm_name = "cyclone",1909 .llvm_name = "cyclone",
1910 .features = featureSet(&[_]Feature{1910 .features = featureSet(&[_]Feature{
1911 .v8a,1911 .has_v8,
1912 .avoid_movs_shop,1912 .avoid_movs_shop,
1913 .avoid_partial_cpsr,1913 .avoid_partial_cpsr,
1914 .crypto,1914 .crypto,
...@@ -1929,14 +1929,14 @@ pub const cpu = struct {...@@ -1929,14 +1929,14 @@ pub const cpu = struct {
1929 .name = "ep9312",1929 .name = "ep9312",
1930 .llvm_name = "ep9312",1930 .llvm_name = "ep9312",
1931 .features = featureSet(&[_]Feature{1931 .features = featureSet(&[_]Feature{
1932 .v4t,1932 .has_v4t,
1933 }),1933 }),
1934 };1934 };
1935 pub const exynos_m1 = CpuModel{1935 pub const exynos_m1 = CpuModel{
1936 .name = "exynos_m1",1936 .name = "exynos_m1",
1937 .llvm_name = "exynos-m1",1937 .llvm_name = "exynos-m1",
1938 .features = featureSet(&[_]Feature{1938 .features = featureSet(&[_]Feature{
1939 .v8a,1939 .has_v8,
1940 .exynos,1940 .exynos,
1941 }),1941 }),
1942 };1942 };
...@@ -1944,7 +1944,7 @@ pub const cpu = struct {...@@ -1944,7 +1944,7 @@ pub const cpu = struct {
1944 .name = "exynos_m2",1944 .name = "exynos_m2",
1945 .llvm_name = "exynos-m2",1945 .llvm_name = "exynos-m2",
1946 .features = featureSet(&[_]Feature{1946 .features = featureSet(&[_]Feature{
1947 .v8a,1947 .has_v8,
1948 .exynos,1948 .exynos,
1949 }),1949 }),
1950 };1950 };
...@@ -1952,7 +1952,7 @@ pub const cpu = struct {...@@ -1952,7 +1952,7 @@ pub const cpu = struct {
1952 .name = "exynos_m3",1952 .name = "exynos_m3",
1953 .llvm_name = "exynos-m3",1953 .llvm_name = "exynos-m3",
1954 .features = featureSet(&[_]Feature{1954 .features = featureSet(&[_]Feature{
1955 .v8a,1955 .has_v8,
1956 .exynos,1956 .exynos,
1957 }),1957 }),
1958 };1958 };
...@@ -1960,7 +1960,7 @@ pub const cpu = struct {...@@ -1960,7 +1960,7 @@ pub const cpu = struct {
1960 .name = "exynos_m4",1960 .name = "exynos_m4",
1961 .llvm_name = "exynos-m4",1961 .llvm_name = "exynos-m4",
1962 .features = featureSet(&[_]Feature{1962 .features = featureSet(&[_]Feature{
1963 .v8_2a,1963 .has_v8_2a,
1964 .dotprod,1964 .dotprod,
1965 .exynos,1965 .exynos,
1966 .fullfp16,1966 .fullfp16,
...@@ -1973,7 +1973,7 @@ pub const cpu = struct {...@@ -1973,7 +1973,7 @@ pub const cpu = struct {
1973 .dotprod,1973 .dotprod,
1974 .exynos,1974 .exynos,
1975 .fullfp16,1975 .fullfp16,
1976 .v8_2a,1976 .has_v8_2a,
1977 }),1977 }),
1978 };1978 };
1979 pub const generic = CpuModel{1979 pub const generic = CpuModel{
...@@ -1985,7 +1985,7 @@ pub const cpu = struct {...@@ -1985,7 +1985,7 @@ pub const cpu = struct {
1985 .name = "iwmmxt",1985 .name = "iwmmxt",
1986 .llvm_name = "iwmmxt",1986 .llvm_name = "iwmmxt",
1987 .features = featureSet(&[_]Feature{1987 .features = featureSet(&[_]Feature{
1988 .v5te,1988 .has_v5te,
1989 }),1989 }),
1990 };1990 };
1991 pub const krait = CpuModel{1991 pub const krait = CpuModel{
...@@ -2012,14 +2012,14 @@ pub const cpu = struct {...@@ -2012,14 +2012,14 @@ pub const cpu = struct {
2012 .crypto,2012 .crypto,
2013 .hwdiv,2013 .hwdiv,
2014 .hwdiv_arm,2014 .hwdiv_arm,
2015 .v8a,2015 .has_v8,
2016 }),2016 }),
2017 };2017 };
2018 pub const mpcore = CpuModel{2018 pub const mpcore = CpuModel{
2019 .name = "mpcore",2019 .name = "mpcore",
2020 .llvm_name = "mpcore",2020 .llvm_name = "mpcore",
2021 .features = featureSet(&[_]Feature{2021 .features = featureSet(&[_]Feature{
2022 .v6k,2022 .has_v6k,
2023 .slowfpvmlx,2023 .slowfpvmlx,
2024 .vfp2,2024 .vfp2,
2025 }),2025 }),
...@@ -2028,14 +2028,14 @@ pub const cpu = struct {...@@ -2028,14 +2028,14 @@ pub const cpu = struct {
2028 .name = "mpcorenovfp",2028 .name = "mpcorenovfp",
2029 .llvm_name = "mpcorenovfp",2029 .llvm_name = "mpcorenovfp",
2030 .features = featureSet(&[_]Feature{2030 .features = featureSet(&[_]Feature{
2031 .v6k,2031 .has_v6k,
2032 }),2032 }),
2033 };2033 };
2034 pub const sc000 = CpuModel{2034 pub const sc000 = CpuModel{
2035 .name = "sc000",2035 .name = "sc000",
2036 .llvm_name = "sc000",2036 .llvm_name = "sc000",
2037 .features = featureSet(&[_]Feature{2037 .features = featureSet(&[_]Feature{
2038 .v6m,2038 .has_v6m,
2039 }),2039 }),
2040 };2040 };
2041 pub const sc300 = CpuModel{2041 pub const sc300 = CpuModel{
...@@ -2108,7 +2108,7 @@ pub const cpu = struct {...@@ -2108,7 +2108,7 @@ pub const cpu = struct {
2108 .name = "xscale",2108 .name = "xscale",
2109 .llvm_name = "xscale",2109 .llvm_name = "xscale",
2110 .features = featureSet(&[_]Feature{2110 .features = featureSet(&[_]Feature{
2111 .v5te,2111 .has_v5te,
2112 }),2112 }),
2113 };2113 };
2114};2114};