authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-04-25 16:54:33-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-05-08 19:37:28-07:00
log109ec729247443200c2ba614f6acb0b991e44b4d
treeb3ca76a9b71efb0c5b4ae425ae9b60d4031abe64
parent6a018d3e658a9886a5e8a04289d1466d0ab3514a

update CPU features to LLVM 18

release/18.x branch, commit 78b99c73ee4b96fe9ce0e294d4632326afb2db42

14 files changed, 2119 insertions(+), 206 deletions(-)

lib/std/Target/aarch64.zig+411-46
......@@ -6,15 +6,19 @@ const CpuModel = std.Target.Cpu.Model;
66
77pub const Feature = enum {
88 a510,
9 a520,
910 a65,
1011 a710,
12 a720,
1113 a76,
1214 a78,
1315 a78c,
16 addr_lsl_fast,
1417 aes,
1518 aggressive_fma,
1619 alternate_sextload_cvt_f32_pattern,
1720 altnzcv,
21 alu_lsl_fast,
1822 am,
1923 amvs,
2024 arith_bcc_fusion,
......@@ -43,12 +47,14 @@ pub const Feature = enum {
4347 complxnum,
4448 contextidr_el2,
4549 cortex_r82,
50 cpa,
4651 crc,
4752 crypto,
4853 cssc,
49 custom_cheap_as_move,
5054 d128,
5155 disable_latency_sched_heuristic,
56 disable_ldp,
57 disable_stp,
5258 dit,
5359 dotprod,
5460 ecv,
......@@ -59,13 +65,19 @@ pub const Feature = enum {
5965 exynos_cheap_as_move,
6066 f32mm,
6167 f64mm,
68 faminmax,
6269 fgt,
6370 fix_cortex_a53_835769,
6471 flagm,
6572 fmv,
6673 force_32bit_jump_tables,
6774 fp16fml,
75 fp8,
76 fp8dot2,
77 fp8dot4,
78 fp8fma,
6879 fp_armv8,
80 fpmr,
6981 fptoint,
7082 fullfp16,
7183 fuse_address,
......@@ -85,12 +97,13 @@ pub const Feature = enum {
8597 i8mm,
8698 ite,
8799 jsconv,
100 ldp_aligned_only,
88101 lor,
89102 ls64,
90103 lse,
91104 lse128,
92105 lse2,
93 lsl_fast,
106 lut,
94107 mec,
95108 mops,
96109 mpam,
......@@ -106,6 +119,7 @@ pub const Feature = enum {
106119 pan,
107120 pan_rwv,
108121 pauth,
122 pauth_lr,
109123 perfmon,
110124 predictable_select_expensive,
111125 predres,
......@@ -156,12 +170,21 @@ pub const Feature = enum {
156170 sme2p1,
157171 sme_f16f16,
158172 sme_f64f64,
173 sme_f8f16,
174 sme_f8f32,
175 sme_fa64,
159176 sme_i16i64,
177 sme_lutv2,
160178 spe,
161179 spe_eef,
162180 specres2,
163181 specrestrict,
164182 ssbs,
183 ssve_fp8dot2,
184 ssve_fp8dot4,
185 ssve_fp8fma,
186 store_pair_suppress,
187 stp_aligned_only,
165188 strict_align,
166189 sve,
167190 sve2,
......@@ -173,6 +196,7 @@ pub const Feature = enum {
173196 tagged_globals,
174197 the,
175198 tlb_rmi,
199 tlbiw,
176200 tme,
177201 tpidr_el1,
178202 tpidr_el2,
......@@ -200,6 +224,7 @@ pub const Feature = enum {
200224 v9_2a,
201225 v9_3a,
202226 v9_4a,
227 v9_5a,
203228 v9a,
204229 vh,
205230 wfxt,
......@@ -229,6 +254,15 @@ pub const all_features = blk: {
229254 .use_postra_scheduler,
230255 }),
231256 };
257 result[@intFromEnum(Feature.a520)] = .{
258 .llvm_name = "a520",
259 .description = "Cortex-A520 ARM processors",
260 .dependencies = featureSet(&[_]Feature{
261 .fuse_adrp_add,
262 .fuse_aes,
263 .use_postra_scheduler,
264 }),
265 };
232266 result[@intFromEnum(Feature.a65)] = .{
233267 .llvm_name = "a65",
234268 .description = "Cortex-A65 ARM processors",
......@@ -245,11 +279,26 @@ pub const all_features = blk: {
245279 .llvm_name = "a710",
246280 .description = "Cortex-A710 ARM processors",
247281 .dependencies = featureSet(&[_]Feature{
282 .addr_lsl_fast,
283 .alu_lsl_fast,
284 .cmp_bcc_fusion,
285 .enable_select_opt,
286 .fuse_adrp_add,
287 .fuse_aes,
288 .predictable_select_expensive,
289 .use_postra_scheduler,
290 }),
291 };
292 result[@intFromEnum(Feature.a720)] = .{
293 .llvm_name = "a720",
294 .description = "Cortex-A720 ARM processors",
295 .dependencies = featureSet(&[_]Feature{
296 .addr_lsl_fast,
297 .alu_lsl_fast,
248298 .cmp_bcc_fusion,
249299 .enable_select_opt,
250300 .fuse_adrp_add,
251301 .fuse_aes,
252 .lsl_fast,
253302 .predictable_select_expensive,
254303 .use_postra_scheduler,
255304 }),
......@@ -258,10 +307,11 @@ pub const all_features = blk: {
258307 .llvm_name = "a76",
259308 .description = "Cortex-A76 ARM processors",
260309 .dependencies = featureSet(&[_]Feature{
310 .addr_lsl_fast,
311 .alu_lsl_fast,
261312 .enable_select_opt,
262313 .fuse_adrp_add,
263314 .fuse_aes,
264 .lsl_fast,
265315 .predictable_select_expensive,
266316 }),
267317 };
......@@ -269,11 +319,12 @@ pub const all_features = blk: {
269319 .llvm_name = "a78",
270320 .description = "Cortex-A78 ARM processors",
271321 .dependencies = featureSet(&[_]Feature{
322 .addr_lsl_fast,
323 .alu_lsl_fast,
272324 .cmp_bcc_fusion,
273325 .enable_select_opt,
274326 .fuse_adrp_add,
275327 .fuse_aes,
276 .lsl_fast,
277328 .predictable_select_expensive,
278329 .use_postra_scheduler,
279330 }),
......@@ -282,15 +333,21 @@ pub const all_features = blk: {
282333 .llvm_name = "a78c",
283334 .description = "Cortex-A78C ARM processors",
284335 .dependencies = featureSet(&[_]Feature{
336 .addr_lsl_fast,
337 .alu_lsl_fast,
285338 .cmp_bcc_fusion,
286339 .enable_select_opt,
287340 .fuse_adrp_add,
288341 .fuse_aes,
289 .lsl_fast,
290342 .predictable_select_expensive,
291343 .use_postra_scheduler,
292344 }),
293345 };
346 result[@intFromEnum(Feature.addr_lsl_fast)] = .{
347 .llvm_name = "addr-lsl-fast",
348 .description = "Address operands with logical shift of up to 3 places are cheap",
349 .dependencies = featureSet(&[_]Feature{}),
350 };
294351 result[@intFromEnum(Feature.aes)] = .{
295352 .llvm_name = "aes",
296353 .description = "Enable AES support (FEAT_AES, FEAT_PMULL)",
......@@ -313,6 +370,11 @@ pub const all_features = blk: {
313370 .description = "Enable alternative NZCV format for floating point comparisons (FEAT_FlagM2)",
314371 .dependencies = featureSet(&[_]Feature{}),
315372 };
373 result[@intFromEnum(Feature.alu_lsl_fast)] = .{
374 .llvm_name = "alu-lsl-fast",
375 .description = "Add/Sub operations with lsl shift <= 4 are cheap",
376 .dependencies = featureSet(&[_]Feature{}),
377 };
316378 result[@intFromEnum(Feature.am)] = .{
317379 .llvm_name = "am",
318380 .description = "Enable v8.4-A Activity Monitors extension (FEAT_AMUv1)",
......@@ -343,7 +405,9 @@ pub const all_features = blk: {
343405 result[@intFromEnum(Feature.b16b16)] = .{
344406 .llvm_name = "b16b16",
345407 .description = "Enable SVE2.1 or SME2.1 non-widening BFloat16 to BFloat16 instructions (FEAT_B16B16)",
346 .dependencies = featureSet(&[_]Feature{}),
408 .dependencies = featureSet(&[_]Feature{
409 .bf16,
410 }),
347411 };
348412 result[@intFromEnum(Feature.balance_fp_ops)] = .{
349413 .llvm_name = "balance-fp-ops",
......@@ -459,6 +523,11 @@ pub const all_features = blk: {
459523 .use_postra_scheduler,
460524 }),
461525 };
526 result[@intFromEnum(Feature.cpa)] = .{
527 .llvm_name = "cpa",
528 .description = "Enable Armv9.5-A Checked Pointer Arithmetic (FEAT_CPA)",
529 .dependencies = featureSet(&[_]Feature{}),
530 };
462531 result[@intFromEnum(Feature.crc)] = .{
463532 .llvm_name = "crc",
464533 .description = "Enable ARMv8 CRC-32 checksum instructions (FEAT_CRC32)",
......@@ -477,11 +546,6 @@ pub const all_features = blk: {
477546 .description = "Enable Common Short Sequence Compression (CSSC) instructions (FEAT_CSSC)",
478547 .dependencies = featureSet(&[_]Feature{}),
479548 };
480 result[@intFromEnum(Feature.custom_cheap_as_move)] = .{
481 .llvm_name = "custom-cheap-as-move",
482 .description = "Use custom handling of cheap instructions",
483 .dependencies = featureSet(&[_]Feature{}),
484 };
485549 result[@intFromEnum(Feature.d128)] = .{
486550 .llvm_name = "d128",
487551 .description = "Enable Armv9.4-A 128-bit Page Table Descriptors, System Registers and Instructions (FEAT_D128, FEAT_LVA3, FEAT_SYSREG128, FEAT_SYSINSTR128)",
......@@ -494,6 +558,16 @@ pub const all_features = blk: {
494558 .description = "Disable latency scheduling heuristic",
495559 .dependencies = featureSet(&[_]Feature{}),
496560 };
561 result[@intFromEnum(Feature.disable_ldp)] = .{
562 .llvm_name = "disable-ldp",
563 .description = "Do not emit ldp",
564 .dependencies = featureSet(&[_]Feature{}),
565 };
566 result[@intFromEnum(Feature.disable_stp)] = .{
567 .llvm_name = "disable-stp",
568 .description = "Do not emit stp",
569 .dependencies = featureSet(&[_]Feature{}),
570 };
497571 result[@intFromEnum(Feature.dit)] = .{
498572 .llvm_name = "dit",
499573 .description = "Enable v8.4-A Data Independent Timing instructions (FEAT_DIT)",
......@@ -534,9 +608,7 @@ pub const all_features = blk: {
534608 result[@intFromEnum(Feature.exynos_cheap_as_move)] = .{
535609 .llvm_name = "exynos-cheap-as-move",
536610 .description = "Use Exynos specific handling of cheap instructions",
537 .dependencies = featureSet(&[_]Feature{
538 .custom_cheap_as_move,
539 }),
611 .dependencies = featureSet(&[_]Feature{}),
540612 };
541613 result[@intFromEnum(Feature.f32mm)] = .{
542614 .llvm_name = "f32mm",
......@@ -552,6 +624,11 @@ pub const all_features = blk: {
552624 .sve,
553625 }),
554626 };
627 result[@intFromEnum(Feature.faminmax)] = .{
628 .llvm_name = "faminmax",
629 .description = "Enable FAMIN and FAMAX instructions (FEAT_FAMINMAX)",
630 .dependencies = featureSet(&[_]Feature{}),
631 };
555632 result[@intFromEnum(Feature.fgt)] = .{
556633 .llvm_name = "fgt",
557634 .description = "Enable fine grained virtualization traps extension (FEAT_FGT)",
......@@ -584,11 +661,36 @@ pub const all_features = blk: {
584661 .fullfp16,
585662 }),
586663 };
664 result[@intFromEnum(Feature.fp8)] = .{
665 .llvm_name = "fp8",
666 .description = "Enable FP8 instructions (FEAT_FP8)",
667 .dependencies = featureSet(&[_]Feature{}),
668 };
669 result[@intFromEnum(Feature.fp8dot2)] = .{
670 .llvm_name = "fp8dot2",
671 .description = "Enable fp8 2-way dot instructions (FEAT_FP8DOT2)",
672 .dependencies = featureSet(&[_]Feature{}),
673 };
674 result[@intFromEnum(Feature.fp8dot4)] = .{
675 .llvm_name = "fp8dot4",
676 .description = "Enable fp8 4-way dot instructions (FEAT_FP8DOT4)",
677 .dependencies = featureSet(&[_]Feature{}),
678 };
679 result[@intFromEnum(Feature.fp8fma)] = .{
680 .llvm_name = "fp8fma",
681 .description = "Enable fp8 multiply-add instructions (FEAT_FP8FMA)",
682 .dependencies = featureSet(&[_]Feature{}),
683 };
587684 result[@intFromEnum(Feature.fp_armv8)] = .{
588685 .llvm_name = "fp-armv8",
589686 .description = "Enable ARMv8 FP (FEAT_FP)",
590687 .dependencies = featureSet(&[_]Feature{}),
591688 };
689 result[@intFromEnum(Feature.fpmr)] = .{
690 .llvm_name = "fpmr",
691 .description = "Enable FPMR Register (FEAT_FPMR)",
692 .dependencies = featureSet(&[_]Feature{}),
693 };
592694 result[@intFromEnum(Feature.fptoint)] = .{
593695 .llvm_name = "fptoint",
594696 .description = "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int (FEAT_FRINTTS)",
......@@ -692,6 +794,11 @@ pub const all_features = blk: {
692794 .fp_armv8,
693795 }),
694796 };
797 result[@intFromEnum(Feature.ldp_aligned_only)] = .{
798 .llvm_name = "ldp-aligned-only",
799 .description = "In order to emit ldp, first check if the load will be aligned to 2 * element_size",
800 .dependencies = featureSet(&[_]Feature{}),
801 };
695802 result[@intFromEnum(Feature.lor)] = .{
696803 .llvm_name = "lor",
697804 .description = "Enables ARM v8.1 Limited Ordering Regions extension (FEAT_LOR)",
......@@ -719,9 +826,9 @@ pub const all_features = blk: {
719826 .description = "Enable ARMv8.4 Large System Extension 2 (LSE2) atomicity rules (FEAT_LSE2)",
720827 .dependencies = featureSet(&[_]Feature{}),
721828 };
722 result[@intFromEnum(Feature.lsl_fast)] = .{
723 .llvm_name = "lsl-fast",
724 .description = "CPU has a fastpath logical shift of up to 3 places",
829 result[@intFromEnum(Feature.lut)] = .{
830 .llvm_name = "lut",
831 .description = "Enable Lookup Table instructions (FEAT_LUT)",
725832 .dependencies = featureSet(&[_]Feature{}),
726833 };
727834 result[@intFromEnum(Feature.mec)] = .{
......@@ -805,6 +912,11 @@ pub const all_features = blk: {
805912 .description = "Enable v8.3-A Pointer Authentication extension (FEAT_PAuth)",
806913 .dependencies = featureSet(&[_]Feature{}),
807914 };
915 result[@intFromEnum(Feature.pauth_lr)] = .{
916 .llvm_name = "pauth-lr",
917 .description = "Enable Armv9.5-A PAC enhancements (FEAT_PAuth_LR)",
918 .dependencies = featureSet(&[_]Feature{}),
919 };
808920 result[@intFromEnum(Feature.perfmon)] = .{
809921 .llvm_name = "perfmon",
810922 .description = "Enable Code Generation for ARMv8 PMUv3 Performance Monitors extension (FEAT_PMUv3)",
......@@ -1076,6 +1188,30 @@ pub const all_features = blk: {
10761188 .sme,
10771189 }),
10781190 };
1191 result[@intFromEnum(Feature.sme_f8f16)] = .{
1192 .llvm_name = "sme-f8f16",
1193 .description = "Enable Scalable Matrix Extension (SME) F8F16 instructions(FEAT_SME_F8F16)",
1194 .dependencies = featureSet(&[_]Feature{
1195 .fp8,
1196 .sme2,
1197 }),
1198 };
1199 result[@intFromEnum(Feature.sme_f8f32)] = .{
1200 .llvm_name = "sme-f8f32",
1201 .description = "Enable Scalable Matrix Extension (SME) F8F32 instructions (FEAT_SME_F8F32)",
1202 .dependencies = featureSet(&[_]Feature{
1203 .fp8,
1204 .sme2,
1205 }),
1206 };
1207 result[@intFromEnum(Feature.sme_fa64)] = .{
1208 .llvm_name = "sme-fa64",
1209 .description = "Enable the full A64 instruction set in streaming SVE mode (FEAT_SME_FA64)",
1210 .dependencies = featureSet(&[_]Feature{
1211 .sme,
1212 .sve2,
1213 }),
1214 };
10791215 result[@intFromEnum(Feature.sme_i16i64)] = .{
10801216 .llvm_name = "sme-i16i64",
10811217 .description = "Enable Scalable Matrix Extension (SME) I16I64 instructions (FEAT_SME_I16I64)",
......@@ -1083,6 +1219,11 @@ pub const all_features = blk: {
10831219 .sme,
10841220 }),
10851221 };
1222 result[@intFromEnum(Feature.sme_lutv2)] = .{
1223 .llvm_name = "sme-lutv2",
1224 .description = "Enable Scalable Matrix Extension (SME) LUTv2 instructions (FEAT_SME_LUTv2)",
1225 .dependencies = featureSet(&[_]Feature{}),
1226 };
10861227 result[@intFromEnum(Feature.spe)] = .{
10871228 .llvm_name = "spe",
10881229 .description = "Enable Statistical Profiling extension (FEAT_SPE)",
......@@ -1110,6 +1251,37 @@ pub const all_features = blk: {
11101251 .description = "Enable Speculative Store Bypass Safe bit (FEAT_SSBS, FEAT_SSBS2)",
11111252 .dependencies = featureSet(&[_]Feature{}),
11121253 };
1254 result[@intFromEnum(Feature.ssve_fp8dot2)] = .{
1255 .llvm_name = "ssve-fp8dot2",
1256 .description = "Enable SVE2 fp8 2-way dot product instructions (FEAT_SSVE_FP8DOT2)",
1257 .dependencies = featureSet(&[_]Feature{
1258 .sme2,
1259 }),
1260 };
1261 result[@intFromEnum(Feature.ssve_fp8dot4)] = .{
1262 .llvm_name = "ssve-fp8dot4",
1263 .description = "Enable SVE2 fp8 4-way dot product instructions (FEAT_SSVE_FP8DOT4)",
1264 .dependencies = featureSet(&[_]Feature{
1265 .sme2,
1266 }),
1267 };
1268 result[@intFromEnum(Feature.ssve_fp8fma)] = .{
1269 .llvm_name = "ssve-fp8fma",
1270 .description = "Enable SVE2 fp8 multiply-add instructions (FEAT_SSVE_FP8FMA)",
1271 .dependencies = featureSet(&[_]Feature{
1272 .sme2,
1273 }),
1274 };
1275 result[@intFromEnum(Feature.store_pair_suppress)] = .{
1276 .llvm_name = "store-pair-suppress",
1277 .description = "Enable Store Pair Suppression heuristics",
1278 .dependencies = featureSet(&[_]Feature{}),
1279 };
1280 result[@intFromEnum(Feature.stp_aligned_only)] = .{
1281 .llvm_name = "stp-aligned-only",
1282 .description = "In order to emit stp, first check if the store will be aligned to 2 * element_size",
1283 .dependencies = featureSet(&[_]Feature{}),
1284 };
11131285 result[@intFromEnum(Feature.strict_align)] = .{
11141286 .llvm_name = "strict-align",
11151287 .description = "Disallow all unaligned memory access",
......@@ -1183,6 +1355,11 @@ pub const all_features = blk: {
11831355 .description = "Enable v8.4-A TLB Range and Maintenance Instructions (FEAT_TLBIOS, FEAT_TLBIRANGE)",
11841356 .dependencies = featureSet(&[_]Feature{}),
11851357 };
1358 result[@intFromEnum(Feature.tlbiw)] = .{
1359 .llvm_name = "tlbiw",
1360 .description = "Enable ARMv9.5-A TLBI VMALL for Dirty State (FEAT_TLBIW)",
1361 .dependencies = featureSet(&[_]Feature{}),
1362 };
11861363 result[@intFromEnum(Feature.tme)] = .{
11871364 .llvm_name = "tme",
11881365 .description = "Enable Transactional Memory Extension (FEAT_TME)",
......@@ -1424,6 +1601,14 @@ pub const all_features = blk: {
14241601 .v9_3a,
14251602 }),
14261603 };
1604 result[@intFromEnum(Feature.v9_5a)] = .{
1605 .llvm_name = "v9.5a",
1606 .description = "Support ARM v9.5a instructions",
1607 .dependencies = featureSet(&[_]Feature{
1608 .cpa,
1609 .v9_4a,
1610 }),
1611 };
14271612 result[@intFromEnum(Feature.v9a)] = .{
14281613 .llvm_name = "v9a",
14291614 .description = "Support ARM v9a instructions",
......@@ -1491,6 +1676,7 @@ pub const cpu = struct {
14911676 .perfmon,
14921677 .predictable_select_expensive,
14931678 .sha2,
1679 .store_pair_suppress,
14941680 .sve,
14951681 .use_postra_scheduler,
14961682 .v8_2a,
......@@ -1500,17 +1686,21 @@ pub const cpu = struct {
15001686 .name = "ampere1",
15011687 .llvm_name = "ampere1",
15021688 .features = featureSet(&[_]Feature{
1689 .addr_lsl_fast,
15031690 .aes,
15041691 .aggressive_fma,
1692 .alu_lsl_fast,
15051693 .arith_bcc_fusion,
15061694 .cmp_bcc_fusion,
15071695 .fuse_address,
15081696 .fuse_aes,
15091697 .fuse_literals,
1510 .lsl_fast,
1698 .ldp_aligned_only,
15111699 .perfmon,
15121700 .rand,
15131701 .sha3,
1702 .store_pair_suppress,
1703 .stp_aligned_only,
15141704 .use_postra_scheduler,
15151705 .v8_6a,
15161706 }),
......@@ -1519,23 +1709,57 @@ pub const cpu = struct {
15191709 .name = "ampere1a",
15201710 .llvm_name = "ampere1a",
15211711 .features = featureSet(&[_]Feature{
1712 .addr_lsl_fast,
15221713 .aes,
15231714 .aggressive_fma,
1715 .alu_lsl_fast,
15241716 .arith_bcc_fusion,
15251717 .cmp_bcc_fusion,
15261718 .fuse_address,
15271719 .fuse_aes,
15281720 .fuse_literals,
1529 .lsl_fast,
1721 .ldp_aligned_only,
15301722 .mte,
15311723 .perfmon,
15321724 .rand,
15331725 .sha3,
15341726 .sm4,
1727 .store_pair_suppress,
1728 .stp_aligned_only,
15351729 .use_postra_scheduler,
15361730 .v8_6a,
15371731 }),
15381732 };
1733 pub const ampere1b = CpuModel{
1734 .name = "ampere1b",
1735 .llvm_name = "ampere1b",
1736 .features = featureSet(&[_]Feature{
1737 .addr_lsl_fast,
1738 .aes,
1739 .aggressive_fma,
1740 .alu_lsl_fast,
1741 .arith_bcc_fusion,
1742 .cmp_bcc_fusion,
1743 .cssc,
1744 .enable_select_opt,
1745 .fullfp16,
1746 .fuse_address,
1747 .fuse_adrp_add,
1748 .fuse_aes,
1749 .fuse_literals,
1750 .ldp_aligned_only,
1751 .mte,
1752 .perfmon,
1753 .predictable_select_expensive,
1754 .rand,
1755 .sha3,
1756 .sm4,
1757 .store_pair_suppress,
1758 .stp_aligned_only,
1759 .use_postra_scheduler,
1760 .v8_7a,
1761 }),
1762 };
15391763 pub const apple_a10 = CpuModel{
15401764 .name = "apple_a10",
15411765 .llvm_name = "apple-a10",
......@@ -1552,6 +1776,7 @@ pub const cpu = struct {
15521776 .pan,
15531777 .perfmon,
15541778 .rdm,
1779 .store_pair_suppress,
15551780 .v8a,
15561781 .vh,
15571782 .zcm,
......@@ -1571,6 +1796,7 @@ pub const cpu = struct {
15711796 .fuse_aes,
15721797 .fuse_crypto_eor,
15731798 .perfmon,
1799 .store_pair_suppress,
15741800 .v8_2a,
15751801 .zcm,
15761802 .zcz,
......@@ -1589,6 +1815,7 @@ pub const cpu = struct {
15891815 .fuse_aes,
15901816 .fuse_crypto_eor,
15911817 .perfmon,
1818 .store_pair_suppress,
15921819 .v8_3a,
15931820 .zcm,
15941821 .zcz,
......@@ -1608,6 +1835,7 @@ pub const cpu = struct {
16081835 .fuse_crypto_eor,
16091836 .perfmon,
16101837 .sha3,
1838 .store_pair_suppress,
16111839 .v8_4a,
16121840 .zcm,
16131841 .zcz,
......@@ -1640,6 +1868,7 @@ pub const cpu = struct {
16401868 .sha3,
16411869 .specrestrict,
16421870 .ssbs,
1871 .store_pair_suppress,
16431872 .v8_4a,
16441873 .zcm,
16451874 .zcz,
......@@ -1663,6 +1892,7 @@ pub const cpu = struct {
16631892 .fuse_literals,
16641893 .perfmon,
16651894 .sha3,
1895 .store_pair_suppress,
16661896 .v8_6a,
16671897 .zcm,
16681898 .zcz,
......@@ -1687,6 +1917,32 @@ pub const cpu = struct {
16871917 .hcx,
16881918 .perfmon,
16891919 .sha3,
1920 .store_pair_suppress,
1921 .v8_6a,
1922 .zcm,
1923 .zcz,
1924 }),
1925 };
1926 pub const apple_a17 = CpuModel{
1927 .name = "apple_a17",
1928 .llvm_name = "apple-a17",
1929 .features = featureSet(&[_]Feature{
1930 .alternate_sextload_cvt_f32_pattern,
1931 .arith_bcc_fusion,
1932 .arith_cbz_fusion,
1933 .crypto,
1934 .disable_latency_sched_heuristic,
1935 .fp16fml,
1936 .fuse_address,
1937 .fuse_aes,
1938 .fuse_arith_logic,
1939 .fuse_crypto_eor,
1940 .fuse_csel,
1941 .fuse_literals,
1942 .hcx,
1943 .perfmon,
1944 .sha3,
1945 .store_pair_suppress,
16901946 .v8_6a,
16911947 .zcm,
16921948 .zcz,
......@@ -1704,6 +1960,7 @@ pub const cpu = struct {
17041960 .fuse_aes,
17051961 .fuse_crypto_eor,
17061962 .perfmon,
1963 .store_pair_suppress,
17071964 .v8a,
17081965 .zcm,
17091966 .zcz,
......@@ -1722,6 +1979,7 @@ pub const cpu = struct {
17221979 .fuse_aes,
17231980 .fuse_crypto_eor,
17241981 .perfmon,
1982 .store_pair_suppress,
17251983 .v8a,
17261984 .zcm,
17271985 .zcz,
......@@ -1740,6 +1998,7 @@ pub const cpu = struct {
17401998 .fuse_aes,
17411999 .fuse_crypto_eor,
17422000 .perfmon,
2001 .store_pair_suppress,
17432002 .v8a,
17442003 .zcm,
17452004 .zcz,
......@@ -1765,6 +2024,7 @@ pub const cpu = struct {
17652024 .hcx,
17662025 .perfmon,
17672026 .sha3,
2027 .store_pair_suppress,
17682028 .v8_6a,
17692029 .zcm,
17702030 .zcz,
......@@ -1797,6 +2057,7 @@ pub const cpu = struct {
17972057 .sha3,
17982058 .specrestrict,
17992059 .ssbs,
2060 .store_pair_suppress,
18002061 .v8_4a,
18012062 .zcm,
18022063 .zcz,
......@@ -1820,6 +2081,32 @@ pub const cpu = struct {
18202081 .fuse_literals,
18212082 .perfmon,
18222083 .sha3,
2084 .store_pair_suppress,
2085 .v8_6a,
2086 .zcm,
2087 .zcz,
2088 }),
2089 };
2090 pub const apple_m3 = CpuModel{
2091 .name = "apple_m3",
2092 .llvm_name = "apple-m3",
2093 .features = featureSet(&[_]Feature{
2094 .alternate_sextload_cvt_f32_pattern,
2095 .arith_bcc_fusion,
2096 .arith_cbz_fusion,
2097 .crypto,
2098 .disable_latency_sched_heuristic,
2099 .fp16fml,
2100 .fuse_address,
2101 .fuse_aes,
2102 .fuse_arith_logic,
2103 .fuse_crypto_eor,
2104 .fuse_csel,
2105 .fuse_literals,
2106 .hcx,
2107 .perfmon,
2108 .sha3,
2109 .store_pair_suppress,
18232110 .v8_6a,
18242111 .zcm,
18252112 .zcz,
......@@ -1838,6 +2125,7 @@ pub const cpu = struct {
18382125 .fuse_aes,
18392126 .fuse_crypto_eor,
18402127 .perfmon,
2128 .store_pair_suppress,
18412129 .v8_3a,
18422130 .zcm,
18432131 .zcz,
......@@ -1856,6 +2144,7 @@ pub const cpu = struct {
18562144 .fuse_aes,
18572145 .fuse_crypto_eor,
18582146 .perfmon,
2147 .store_pair_suppress,
18592148 .v8_3a,
18602149 .zcm,
18612150 .zcz,
......@@ -1905,6 +2194,19 @@ pub const cpu = struct {
19052194 .v9a,
19062195 }),
19072196 };
2197 pub const cortex_a520 = CpuModel{
2198 .name = "cortex_a520",
2199 .llvm_name = "cortex-a520",
2200 .features = featureSet(&[_]Feature{
2201 .a520,
2202 .ete,
2203 .fp16fml,
2204 .mte,
2205 .perfmon,
2206 .sve2_bitperm,
2207 .v9_2a,
2208 }),
2209 };
19082210 pub const cortex_a53 = CpuModel{
19092211 .name = "cortex_a53",
19102212 .llvm_name = "cortex-a53",
......@@ -1912,7 +2214,6 @@ pub const cpu = struct {
19122214 .balance_fp_ops,
19132215 .crc,
19142216 .crypto,
1915 .custom_cheap_as_move,
19162217 .fuse_adrp_add,
19172218 .fuse_aes,
19182219 .perfmon,
......@@ -1943,7 +2244,6 @@ pub const cpu = struct {
19432244 .balance_fp_ops,
19442245 .crc,
19452246 .crypto,
1946 .custom_cheap_as_move,
19472247 .enable_select_opt,
19482248 .fuse_adrp_add,
19492249 .fuse_aes,
......@@ -2001,6 +2301,8 @@ pub const cpu = struct {
20012301 .name = "cortex_a715",
20022302 .llvm_name = "cortex-a715",
20032303 .features = featureSet(&[_]Feature{
2304 .addr_lsl_fast,
2305 .alu_lsl_fast,
20042306 .bf16,
20052307 .cmp_bcc_fusion,
20062308 .enable_select_opt,
......@@ -2009,7 +2311,6 @@ pub const cpu = struct {
20092311 .fuse_adrp_add,
20102312 .fuse_aes,
20112313 .i8mm,
2012 .lsl_fast,
20132314 .mte,
20142315 .perfmon,
20152316 .predictable_select_expensive,
......@@ -2034,6 +2335,21 @@ pub const cpu = struct {
20342335 .v8a,
20352336 }),
20362337 };
2338 pub const cortex_a720 = CpuModel{
2339 .name = "cortex_a720",
2340 .llvm_name = "cortex-a720",
2341 .features = featureSet(&[_]Feature{
2342 .a720,
2343 .ete,
2344 .fp16fml,
2345 .mte,
2346 .perfmon,
2347 .spe,
2348 .spe_eef,
2349 .sve2_bitperm,
2350 .v9_2a,
2351 }),
2352 };
20372353 pub const cortex_a73 = CpuModel{
20382354 .name = "cortex_a73",
20392355 .llvm_name = "cortex-a73",
......@@ -2096,6 +2412,8 @@ pub const cpu = struct {
20962412 .name = "cortex_a77",
20972413 .llvm_name = "cortex-a77",
20982414 .features = featureSet(&[_]Feature{
2415 .addr_lsl_fast,
2416 .alu_lsl_fast,
20992417 .cmp_bcc_fusion,
21002418 .crypto,
21012419 .dotprod,
......@@ -2103,7 +2421,6 @@ pub const cpu = struct {
21032421 .fullfp16,
21042422 .fuse_adrp_add,
21052423 .fuse_aes,
2106 .lsl_fast,
21072424 .perfmon,
21082425 .predictable_select_expensive,
21092426 .rcpc,
......@@ -2134,7 +2451,7 @@ pub const cpu = struct {
21342451 .crypto,
21352452 .dotprod,
21362453 .flagm,
2137 .fp16fml,
2454 .fullfp16,
21382455 .pauth,
21392456 .perfmon,
21402457 .rcpc,
......@@ -2160,6 +2477,8 @@ pub const cpu = struct {
21602477 .name = "cortex_x1",
21612478 .llvm_name = "cortex-x1",
21622479 .features = featureSet(&[_]Feature{
2480 .addr_lsl_fast,
2481 .alu_lsl_fast,
21632482 .cmp_bcc_fusion,
21642483 .crypto,
21652484 .dotprod,
......@@ -2167,7 +2486,6 @@ pub const cpu = struct {
21672486 .fullfp16,
21682487 .fuse_adrp_add,
21692488 .fuse_aes,
2170 .lsl_fast,
21712489 .perfmon,
21722490 .predictable_select_expensive,
21732491 .rcpc,
......@@ -2181,6 +2499,8 @@ pub const cpu = struct {
21812499 .name = "cortex_x1c",
21822500 .llvm_name = "cortex-x1c",
21832501 .features = featureSet(&[_]Feature{
2502 .addr_lsl_fast,
2503 .alu_lsl_fast,
21842504 .cmp_bcc_fusion,
21852505 .crypto,
21862506 .dotprod,
......@@ -2190,7 +2510,6 @@ pub const cpu = struct {
21902510 .fuse_adrp_add,
21912511 .fuse_aes,
21922512 .lse2,
2193 .lsl_fast,
21942513 .pauth,
21952514 .perfmon,
21962515 .predictable_select_expensive,
......@@ -2205,6 +2524,8 @@ pub const cpu = struct {
22052524 .name = "cortex_x2",
22062525 .llvm_name = "cortex-x2",
22072526 .features = featureSet(&[_]Feature{
2527 .addr_lsl_fast,
2528 .alu_lsl_fast,
22082529 .bf16,
22092530 .cmp_bcc_fusion,
22102531 .enable_select_opt,
......@@ -2213,7 +2534,6 @@ pub const cpu = struct {
22132534 .fuse_adrp_add,
22142535 .fuse_aes,
22152536 .i8mm,
2216 .lsl_fast,
22172537 .mte,
22182538 .perfmon,
22192539 .predictable_select_expensive,
......@@ -2226,6 +2546,8 @@ pub const cpu = struct {
22262546 .name = "cortex_x3",
22272547 .llvm_name = "cortex-x3",
22282548 .features = featureSet(&[_]Feature{
2549 .addr_lsl_fast,
2550 .alu_lsl_fast,
22292551 .bf16,
22302552 .enable_select_opt,
22312553 .ete,
......@@ -2233,7 +2555,6 @@ pub const cpu = struct {
22332555 .fuse_adrp_add,
22342556 .fuse_aes,
22352557 .i8mm,
2236 .lsl_fast,
22372558 .mte,
22382559 .perfmon,
22392560 .predictable_select_expensive,
......@@ -2243,6 +2564,27 @@ pub const cpu = struct {
22432564 .v9a,
22442565 }),
22452566 };
2567 pub const cortex_x4 = CpuModel{
2568 .name = "cortex_x4",
2569 .llvm_name = "cortex-x4",
2570 .features = featureSet(&[_]Feature{
2571 .addr_lsl_fast,
2572 .alu_lsl_fast,
2573 .enable_select_opt,
2574 .ete,
2575 .fp16fml,
2576 .fuse_adrp_add,
2577 .fuse_aes,
2578 .mte,
2579 .perfmon,
2580 .predictable_select_expensive,
2581 .spe,
2582 .spe_eef,
2583 .sve2_bitperm,
2584 .use_postra_scheduler,
2585 .v9_2a,
2586 }),
2587 };
22462588 pub const cyclone = CpuModel{
22472589 .name = "cyclone",
22482590 .llvm_name = "cyclone",
......@@ -2255,6 +2597,7 @@ pub const cpu = struct {
22552597 .fuse_aes,
22562598 .fuse_crypto_eor,
22572599 .perfmon,
2600 .store_pair_suppress,
22582601 .v8a,
22592602 .zcm,
22602603 .zcz,
......@@ -2308,6 +2651,8 @@ pub const cpu = struct {
23082651 .name = "exynos_m3",
23092652 .llvm_name = "exynos-m3",
23102653 .features = featureSet(&[_]Feature{
2654 .addr_lsl_fast,
2655 .alu_lsl_fast,
23112656 .crc,
23122657 .crypto,
23132658 .exynos_cheap_as_move,
......@@ -2317,9 +2662,9 @@ pub const cpu = struct {
23172662 .fuse_aes,
23182663 .fuse_csel,
23192664 .fuse_literals,
2320 .lsl_fast,
23212665 .perfmon,
23222666 .predictable_select_expensive,
2667 .store_pair_suppress,
23232668 .use_postra_scheduler,
23242669 .v8a,
23252670 }),
......@@ -2328,6 +2673,8 @@ pub const cpu = struct {
23282673 .name = "exynos_m4",
23292674 .llvm_name = "exynos-m4",
23302675 .features = featureSet(&[_]Feature{
2676 .addr_lsl_fast,
2677 .alu_lsl_fast,
23312678 .arith_bcc_fusion,
23322679 .arith_cbz_fusion,
23332680 .crypto,
......@@ -2341,8 +2688,8 @@ pub const cpu = struct {
23412688 .fuse_arith_logic,
23422689 .fuse_csel,
23432690 .fuse_literals,
2344 .lsl_fast,
23452691 .perfmon,
2692 .store_pair_suppress,
23462693 .use_postra_scheduler,
23472694 .v8_2a,
23482695 .zcz,
......@@ -2352,6 +2699,8 @@ pub const cpu = struct {
23522699 .name = "exynos_m5",
23532700 .llvm_name = "exynos-m5",
23542701 .features = featureSet(&[_]Feature{
2702 .addr_lsl_fast,
2703 .alu_lsl_fast,
23552704 .arith_bcc_fusion,
23562705 .arith_cbz_fusion,
23572706 .crypto,
......@@ -2365,8 +2714,8 @@ pub const cpu = struct {
23652714 .fuse_arith_logic,
23662715 .fuse_csel,
23672716 .fuse_literals,
2368 .lsl_fast,
23692717 .perfmon,
2718 .store_pair_suppress,
23702719 .use_postra_scheduler,
23712720 .v8_2a,
23722721 .zcz,
......@@ -2376,14 +2725,15 @@ pub const cpu = struct {
23762725 .name = "falkor",
23772726 .llvm_name = "falkor",
23782727 .features = featureSet(&[_]Feature{
2728 .addr_lsl_fast,
2729 .alu_lsl_fast,
23792730 .crc,
23802731 .crypto,
2381 .custom_cheap_as_move,
2382 .lsl_fast,
23832732 .perfmon,
23842733 .predictable_select_expensive,
23852734 .rdm,
23862735 .slow_strqro_store,
2736 .store_pair_suppress,
23872737 .use_postra_scheduler,
23882738 .v8a,
23892739 .zcz,
......@@ -2405,12 +2755,13 @@ pub const cpu = struct {
24052755 .name = "kryo",
24062756 .llvm_name = "kryo",
24072757 .features = featureSet(&[_]Feature{
2758 .addr_lsl_fast,
2759 .alu_lsl_fast,
24082760 .crc,
24092761 .crypto,
2410 .custom_cheap_as_move,
2411 .lsl_fast,
24122762 .perfmon,
24132763 .predictable_select_expensive,
2764 .store_pair_suppress,
24142765 .use_postra_scheduler,
24152766 .v8a,
24162767 .zcz,
......@@ -2420,6 +2771,8 @@ pub const cpu = struct {
24202771 .name = "neoverse_512tvb",
24212772 .llvm_name = "neoverse-512tvb",
24222773 .features = featureSet(&[_]Feature{
2774 .addr_lsl_fast,
2775 .alu_lsl_fast,
24232776 .bf16,
24242777 .ccdp,
24252778 .crypto,
......@@ -2428,7 +2781,6 @@ pub const cpu = struct {
24282781 .fuse_adrp_add,
24292782 .fuse_aes,
24302783 .i8mm,
2431 .lsl_fast,
24322784 .perfmon,
24332785 .predictable_select_expensive,
24342786 .rand,
......@@ -2459,13 +2811,14 @@ pub const cpu = struct {
24592811 .name = "neoverse_n1",
24602812 .llvm_name = "neoverse-n1",
24612813 .features = featureSet(&[_]Feature{
2814 .addr_lsl_fast,
2815 .alu_lsl_fast,
24622816 .crypto,
24632817 .dotprod,
24642818 .enable_select_opt,
24652819 .fullfp16,
24662820 .fuse_adrp_add,
24672821 .fuse_aes,
2468 .lsl_fast,
24692822 .perfmon,
24702823 .predictable_select_expensive,
24712824 .rcpc,
......@@ -2479,26 +2832,28 @@ pub const cpu = struct {
24792832 .name = "neoverse_n2",
24802833 .llvm_name = "neoverse-n2",
24812834 .features = featureSet(&[_]Feature{
2835 .addr_lsl_fast,
2836 .alu_lsl_fast,
24822837 .bf16,
2483 .crypto,
24842838 .enable_select_opt,
24852839 .ete,
24862840 .fuse_adrp_add,
24872841 .fuse_aes,
24882842 .i8mm,
2489 .lsl_fast,
24902843 .mte,
24912844 .perfmon,
24922845 .predictable_select_expensive,
24932846 .sve2_bitperm,
24942847 .use_postra_scheduler,
2495 .v8_5a,
2848 .v9a,
24962849 }),
24972850 };
24982851 pub const neoverse_v1 = CpuModel{
24992852 .name = "neoverse_v1",
25002853 .llvm_name = "neoverse-v1",
25012854 .features = featureSet(&[_]Feature{
2855 .addr_lsl_fast,
2856 .alu_lsl_fast,
25022857 .bf16,
25032858 .ccdp,
25042859 .crypto,
......@@ -2507,7 +2862,6 @@ pub const cpu = struct {
25072862 .fuse_adrp_add,
25082863 .fuse_aes,
25092864 .i8mm,
2510 .lsl_fast,
25112865 .no_sve_fp_ld1r,
25122866 .perfmon,
25132867 .predictable_select_expensive,
......@@ -2523,13 +2877,15 @@ pub const cpu = struct {
25232877 .name = "neoverse_v2",
25242878 .llvm_name = "neoverse-v2",
25252879 .features = featureSet(&[_]Feature{
2880 .addr_lsl_fast,
2881 .alu_lsl_fast,
25262882 .bf16,
25272883 .enable_select_opt,
25282884 .ete,
25292885 .fp16fml,
2886 .fuse_adrp_add,
25302887 .fuse_aes,
25312888 .i8mm,
2532 .lsl_fast,
25332889 .mte,
25342890 .perfmon,
25352891 .predictable_select_expensive,
......@@ -2544,12 +2900,13 @@ pub const cpu = struct {
25442900 .name = "saphira",
25452901 .llvm_name = "saphira",
25462902 .features = featureSet(&[_]Feature{
2903 .addr_lsl_fast,
2904 .alu_lsl_fast,
25472905 .crypto,
2548 .custom_cheap_as_move,
2549 .lsl_fast,
25502906 .perfmon,
25512907 .predictable_select_expensive,
25522908 .spe,
2909 .store_pair_suppress,
25532910 .use_postra_scheduler,
25542911 .v8_4a,
25552912 .zcz,
......@@ -2563,6 +2920,7 @@ pub const cpu = struct {
25632920 .crypto,
25642921 .perfmon,
25652922 .predictable_select_expensive,
2923 .store_pair_suppress,
25662924 .use_postra_scheduler,
25672925 .v8a,
25682926 }),
......@@ -2575,6 +2933,7 @@ pub const cpu = struct {
25752933 .arith_bcc_fusion,
25762934 .crypto,
25772935 .predictable_select_expensive,
2936 .store_pair_suppress,
25782937 .use_postra_scheduler,
25792938 .v8_1a,
25802939 }),
......@@ -2589,6 +2948,7 @@ pub const cpu = struct {
25892948 .crypto,
25902949 .perfmon,
25912950 .predictable_select_expensive,
2951 .store_pair_suppress,
25922952 .strict_align,
25932953 .use_postra_scheduler,
25942954 .v8_3a,
......@@ -2602,6 +2962,7 @@ pub const cpu = struct {
26022962 .crypto,
26032963 .perfmon,
26042964 .predictable_select_expensive,
2965 .store_pair_suppress,
26052966 .use_postra_scheduler,
26062967 .v8a,
26072968 }),
......@@ -2614,6 +2975,7 @@ pub const cpu = struct {
26142975 .crypto,
26152976 .perfmon,
26162977 .predictable_select_expensive,
2978 .store_pair_suppress,
26172979 .use_postra_scheduler,
26182980 .v8a,
26192981 }),
......@@ -2626,6 +2988,7 @@ pub const cpu = struct {
26262988 .crypto,
26272989 .perfmon,
26282990 .predictable_select_expensive,
2991 .store_pair_suppress,
26292992 .use_postra_scheduler,
26302993 .v8a,
26312994 }),
......@@ -2634,13 +2997,15 @@ pub const cpu = struct {
26342997 .name = "tsv110",
26352998 .llvm_name = "tsv110",
26362999 .features = featureSet(&[_]Feature{
3000 .complxnum,
26373001 .crypto,
2638 .custom_cheap_as_move,
26393002 .dotprod,
26403003 .fp16fml,
26413004 .fuse_aes,
3005 .jsconv,
26423006 .perfmon,
26433007 .spe,
3008 .store_pair_suppress,
26443009 .use_postra_scheduler,
26453010 .v8_2a,
26463011 }),
lib/std/Target/amdgpu.zig+269-1
......@@ -13,6 +13,7 @@ pub const Feature = enum {
1313 architected_sgprs,
1414 atomic_buffer_global_pk_add_f16_insts,
1515 atomic_buffer_global_pk_add_f16_no_rtn_insts,
16 atomic_csub_no_rtn_insts,
1617 atomic_ds_pk_add_16_insts,
1718 atomic_fadd_no_rtn_insts,
1819 atomic_fadd_rtn_insts,
......@@ -22,6 +23,8 @@ pub const Feature = enum {
2223 back_off_barrier,
2324 ci_insts,
2425 cumode,
26 default_component_broadcast,
27 default_component_zero,
2528 dl_insts,
2629 dot10_insts,
2730 dot1_insts,
......@@ -36,6 +39,7 @@ pub const Feature = enum {
3639 dpp,
3740 dpp8,
3841 dpp_64bit,
42 dpp_src1_sgpr,
3943 ds128,
4044 ds_src2_insts,
4145 extended_image_insts,
......@@ -54,10 +58,12 @@ pub const Feature = enum {
5458 fmaf,
5559 force_store_sc0_sc1,
5660 fp64,
61 fp8_conversion_insts,
5762 fp8_insts,
5863 full_rate_64_ops,
5964 g16,
6065 gcn3_encoding,
66 gds,
6167 get_wave_id_inst,
6268 gfx10,
6369 gfx10_3_insts,
......@@ -67,12 +73,15 @@ pub const Feature = enum {
6773 gfx11,
6874 gfx11_full_vgprs,
6975 gfx11_insts,
76 gfx12,
77 gfx12_insts,
7078 gfx7_gfx8_gfx9_insts,
7179 gfx8_insts,
7280 gfx9,
7381 gfx90a_insts,
7482 gfx940_insts,
7583 gfx9_insts,
84 gws,
7685 half_rate_64_ops,
7786 image_gather4_d16_bug,
7887 image_insts,
......@@ -80,6 +89,7 @@ pub const Feature = enum {
8089 inst_fwd_prefetch_bug,
8190 int_clamp_insts,
8291 inv_2pi_inline_imm,
92 kernarg_preload,
8393 lds_branch_vmem_war_hazard,
8494 lds_misaligned_bug,
8595 ldsbankcount16,
......@@ -97,6 +107,7 @@ pub const Feature = enum {
97107 mfma_inline_literal_bug,
98108 mimg_r128,
99109 movrel,
110 msaa_load_dst_sel_bug,
100111 negative_scratch_offset_bug,
101112 negative_unaligned_scratch_offset_bug,
102113 no_data_dep_hazard,
......@@ -111,10 +122,15 @@ pub const Feature = enum {
111122 pk_fmac_f16_inst,
112123 promote_alloca,
113124 prt_strict_null,
125 pseudo_scalar_trans,
114126 r128_a16,
127 real_true16,
128 restricted_soffset,
115129 s_memrealtime,
116130 s_memtime_inst,
131 salu_float,
117132 scalar_atomics,
133 scalar_dwordx3_loads,
118134 scalar_flat_scratch_insts,
119135 scalar_stores,
120136 sdwa,
......@@ -125,6 +141,7 @@ pub const Feature = enum {
125141 sdwa_sdst,
126142 sea_islands,
127143 sgpr_init_bug,
144 shader_cycles_hi_lo_registers,
128145 shader_cycles_register,
129146 si_scheduler,
130147 smem_to_vector_write_hazard,
......@@ -146,6 +163,7 @@ pub const Feature = enum {
146163 vcmpx_exec_war_hazard,
147164 vcmpx_permlane_hazard,
148165 vgpr_index_mode,
166 vgpr_singleuse_hint,
149167 vmem_to_scalar_write_hazard,
150168 volcanic_islands,
151169 vop3_literal,
......@@ -212,6 +230,11 @@ pub const all_features = blk: {
212230 .flat_global_insts,
213231 }),
214232 };
233 result[@intFromEnum(Feature.atomic_csub_no_rtn_insts)] = .{
234 .llvm_name = "atomic-csub-no-rtn-insts",
235 .description = "Has buffer_atomic_csub and global_atomic_csub instructions that don't return original value",
236 .dependencies = featureSet(&[_]Feature{}),
237 };
215238 result[@intFromEnum(Feature.atomic_ds_pk_add_16_insts)] = .{
216239 .llvm_name = "atomic-ds-pk-add-16-insts",
217240 .description = "Has ds_pk_add_bf16, ds_pk_add_f16, ds_pk_add_rtn_bf16, ds_pk_add_rtn_f16 instructions",
......@@ -263,6 +286,16 @@ pub const all_features = blk: {
263286 .description = "Enable CU wavefront execution mode",
264287 .dependencies = featureSet(&[_]Feature{}),
265288 };
289 result[@intFromEnum(Feature.default_component_broadcast)] = .{
290 .llvm_name = "default-component-broadcast",
291 .description = "BUFFER/IMAGE store instructions set unspecified components to x component (GFX12)",
292 .dependencies = featureSet(&[_]Feature{}),
293 };
294 result[@intFromEnum(Feature.default_component_zero)] = .{
295 .llvm_name = "default-component-zero",
296 .description = "BUFFER/IMAGE store instructions set unspecified components to zero (before GFX12)",
297 .dependencies = featureSet(&[_]Feature{}),
298 };
266299 result[@intFromEnum(Feature.dl_insts)] = .{
267300 .llvm_name = "dl-insts",
268301 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
......@@ -330,7 +363,12 @@ pub const all_features = blk: {
330363 };
331364 result[@intFromEnum(Feature.dpp_64bit)] = .{
332365 .llvm_name = "dpp-64bit",
333 .description = "Support DPP (Data Parallel Primitives) extension",
366 .description = "Support DPP (Data Parallel Primitives) extension in DP ALU",
367 .dependencies = featureSet(&[_]Feature{}),
368 };
369 result[@intFromEnum(Feature.dpp_src1_sgpr)] = .{
370 .llvm_name = "dpp-src1-sgpr",
371 .description = "Support SGPR for Src1 of DPP instructions",
334372 .dependencies = featureSet(&[_]Feature{}),
335373 };
336374 result[@intFromEnum(Feature.ds128)] = .{
......@@ -423,6 +461,11 @@ pub const all_features = blk: {
423461 .description = "Enable double precision operations",
424462 .dependencies = featureSet(&[_]Feature{}),
425463 };
464 result[@intFromEnum(Feature.fp8_conversion_insts)] = .{
465 .llvm_name = "fp8-conversion-insts",
466 .description = "Has fp8 and bf8 conversion instructions",
467 .dependencies = featureSet(&[_]Feature{}),
468 };
426469 result[@intFromEnum(Feature.fp8_insts)] = .{
427470 .llvm_name = "fp8-insts",
428471 .description = "Has fp8 and bf8 instructions",
......@@ -443,6 +486,11 @@ pub const all_features = blk: {
443486 .description = "Encoding format for VI",
444487 .dependencies = featureSet(&[_]Feature{}),
445488 };
489 result[@intFromEnum(Feature.gds)] = .{
490 .llvm_name = "gds",
491 .description = "Has Global Data Share",
492 .dependencies = featureSet(&[_]Feature{}),
493 };
446494 result[@intFromEnum(Feature.get_wave_id_inst)] = .{
447495 .llvm_name = "get-wave-id-inst",
448496 .description = "Has s_get_waveid_in_workgroup instruction",
......@@ -457,6 +505,7 @@ pub const all_features = blk: {
457505 .add_no_carry_insts,
458506 .aperture_regs,
459507 .ci_insts,
508 .default_component_zero,
460509 .dpp,
461510 .dpp8,
462511 .extended_image_insts,
......@@ -469,9 +518,11 @@ pub const all_features = blk: {
469518 .fma_mix_insts,
470519 .fp64,
471520 .g16,
521 .gds,
472522 .gfx10_insts,
473523 .gfx8_insts,
474524 .gfx9_insts,
525 .gws,
475526 .image_insts,
476527 .int_clamp_insts,
477528 .inv_2pi_inline_imm,
......@@ -523,6 +574,7 @@ pub const all_features = blk: {
523574 .add_no_carry_insts,
524575 .aperture_regs,
525576 .ci_insts,
577 .default_component_zero,
526578 .dpp,
527579 .dpp8,
528580 .extended_image_insts,
......@@ -535,6 +587,7 @@ pub const all_features = blk: {
535587 .fma_mix_insts,
536588 .fp64,
537589 .g16,
590 .gds,
538591 .gfx10_3_insts,
539592 .gfx10_a_encoding,
540593 .gfx10_b_encoding,
......@@ -542,6 +595,7 @@ pub const all_features = blk: {
542595 .gfx11_insts,
543596 .gfx8_insts,
544597 .gfx9_insts,
598 .gws,
545599 .int_clamp_insts,
546600 .inv_2pi_inline_imm,
547601 .localmemorysize65536,
......@@ -569,6 +623,57 @@ pub const all_features = blk: {
569623 .description = "Additional instructions for GFX11+",
570624 .dependencies = featureSet(&[_]Feature{}),
571625 };
626 result[@intFromEnum(Feature.gfx12)] = .{
627 .llvm_name = "gfx12",
628 .description = "GFX12 GPU generation",
629 .dependencies = featureSet(&[_]Feature{
630 .@"16_bit_insts",
631 .a16,
632 .add_no_carry_insts,
633 .aperture_regs,
634 .ci_insts,
635 .default_component_broadcast,
636 .dpp,
637 .dpp8,
638 .fast_denormal_f32,
639 .fast_fmaf,
640 .flat_address_space,
641 .flat_global_insts,
642 .flat_inst_offsets,
643 .flat_scratch_insts,
644 .fma_mix_insts,
645 .fp64,
646 .g16,
647 .gfx10_3_insts,
648 .gfx10_a_encoding,
649 .gfx10_b_encoding,
650 .gfx10_insts,
651 .gfx11_insts,
652 .gfx12_insts,
653 .gfx8_insts,
654 .gfx9_insts,
655 .int_clamp_insts,
656 .inv_2pi_inline_imm,
657 .localmemorysize65536,
658 .mimg_r128,
659 .movrel,
660 .no_data_dep_hazard,
661 .no_sdst_cmpx,
662 .pk_fmac_f16_inst,
663 .true16,
664 .unaligned_buffer_access,
665 .unaligned_ds_access,
666 .vop3_literal,
667 .vop3p,
668 .vopd,
669 .vscnt,
670 }),
671 };
672 result[@intFromEnum(Feature.gfx12_insts)] = .{
673 .llvm_name = "gfx12-insts",
674 .description = "Additional instructions for GFX12+",
675 .dependencies = featureSet(&[_]Feature{}),
676 };
572677 result[@intFromEnum(Feature.gfx7_gfx8_gfx9_insts)] = .{
573678 .llvm_name = "gfx7-gfx8-gfx9-insts",
574679 .description = "Instructions shared in GFX7, GFX8, GFX9",
......@@ -588,6 +693,7 @@ pub const all_features = blk: {
588693 .add_no_carry_insts,
589694 .aperture_regs,
590695 .ci_insts,
696 .default_component_zero,
591697 .dpp,
592698 .fast_denormal_f32,
593699 .fast_fmaf,
......@@ -600,6 +706,7 @@ pub const all_features = blk: {
600706 .gfx7_gfx8_gfx9_insts,
601707 .gfx8_insts,
602708 .gfx9_insts,
709 .gws,
603710 .int_clamp_insts,
604711 .inv_2pi_inline_imm,
605712 .localmemorysize65536,
......@@ -637,6 +744,11 @@ pub const all_features = blk: {
637744 .description = "Additional instructions for GFX9+",
638745 .dependencies = featureSet(&[_]Feature{}),
639746 };
747 result[@intFromEnum(Feature.gws)] = .{
748 .llvm_name = "gws",
749 .description = "Has Global Wave Sync",
750 .dependencies = featureSet(&[_]Feature{}),
751 };
640752 result[@intFromEnum(Feature.half_rate_64_ops)] = .{
641753 .llvm_name = "half-rate-64-ops",
642754 .description = "Most fp64 instructions are half rate instead of quarter",
......@@ -672,6 +784,11 @@ pub const all_features = blk: {
672784 .description = "Has 1 / (2 * pi) as inline immediate",
673785 .dependencies = featureSet(&[_]Feature{}),
674786 };
787 result[@intFromEnum(Feature.kernarg_preload)] = .{
788 .llvm_name = "kernarg-preload",
789 .description = "Hardware supports preloading of kernel arguments in user SGPRs.",
790 .dependencies = featureSet(&[_]Feature{}),
791 };
675792 result[@intFromEnum(Feature.lds_branch_vmem_war_hazard)] = .{
676793 .llvm_name = "lds-branch-vmem-war-hazard",
677794 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
......@@ -757,6 +874,11 @@ pub const all_features = blk: {
757874 .description = "Has v_movrel*_b32 instructions",
758875 .dependencies = featureSet(&[_]Feature{}),
759876 };
877 result[@intFromEnum(Feature.msaa_load_dst_sel_bug)] = .{
878 .llvm_name = "msaa-load-dst-sel-bug",
879 .description = "MSAA loads not honoring dst_sel bug",
880 .dependencies = featureSet(&[_]Feature{}),
881 };
760882 result[@intFromEnum(Feature.negative_scratch_offset_bug)] = .{
761883 .llvm_name = "negative-scratch-offset-bug",
762884 .description = "Negative immediate offsets in scratch instructions with an SGPR offset page fault on GFX9",
......@@ -827,11 +949,26 @@ pub const all_features = blk: {
827949 .description = "Enable zeroing of result registers for sparse texture fetches",
828950 .dependencies = featureSet(&[_]Feature{}),
829951 };
952 result[@intFromEnum(Feature.pseudo_scalar_trans)] = .{
953 .llvm_name = "pseudo-scalar-trans",
954 .description = "Has Pseudo Scalar Transcendental instructions",
955 .dependencies = featureSet(&[_]Feature{}),
956 };
830957 result[@intFromEnum(Feature.r128_a16)] = .{
831958 .llvm_name = "r128-a16",
832959 .description = "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128",
833960 .dependencies = featureSet(&[_]Feature{}),
834961 };
962 result[@intFromEnum(Feature.real_true16)] = .{
963 .llvm_name = "real-true16",
964 .description = "Use true 16-bit registers",
965 .dependencies = featureSet(&[_]Feature{}),
966 };
967 result[@intFromEnum(Feature.restricted_soffset)] = .{
968 .llvm_name = "restricted-soffset",
969 .description = "Has restricted SOffset (immediate not supported).",
970 .dependencies = featureSet(&[_]Feature{}),
971 };
835972 result[@intFromEnum(Feature.s_memrealtime)] = .{
836973 .llvm_name = "s-memrealtime",
837974 .description = "Has s_memrealtime instruction",
......@@ -842,11 +979,21 @@ pub const all_features = blk: {
842979 .description = "Has s_memtime instruction",
843980 .dependencies = featureSet(&[_]Feature{}),
844981 };
982 result[@intFromEnum(Feature.salu_float)] = .{
983 .llvm_name = "salu-float",
984 .description = "Has SALU floating point instructions",
985 .dependencies = featureSet(&[_]Feature{}),
986 };
845987 result[@intFromEnum(Feature.scalar_atomics)] = .{
846988 .llvm_name = "scalar-atomics",
847989 .description = "Has atomic scalar memory instructions",
848990 .dependencies = featureSet(&[_]Feature{}),
849991 };
992 result[@intFromEnum(Feature.scalar_dwordx3_loads)] = .{
993 .llvm_name = "scalar-dwordx3-loads",
994 .description = "Has 96-bit scalar load instructions",
995 .dependencies = featureSet(&[_]Feature{}),
996 };
850997 result[@intFromEnum(Feature.scalar_flat_scratch_insts)] = .{
851998 .llvm_name = "scalar-flat-scratch-insts",
852999 .description = "Have s_scratch_* flat memory instructions",
......@@ -892,11 +1039,14 @@ pub const all_features = blk: {
8921039 .description = "SEA_ISLANDS GPU generation",
8931040 .dependencies = featureSet(&[_]Feature{
8941041 .ci_insts,
1042 .default_component_zero,
8951043 .ds_src2_insts,
8961044 .extended_image_insts,
8971045 .flat_address_space,
8981046 .fp64,
1047 .gds,
8991048 .gfx7_gfx8_gfx9_insts,
1049 .gws,
9001050 .image_insts,
9011051 .localmemorysize65536,
9021052 .mad_mac_f32_insts,
......@@ -913,6 +1063,11 @@ pub const all_features = blk: {
9131063 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
9141064 .dependencies = featureSet(&[_]Feature{}),
9151065 };
1066 result[@intFromEnum(Feature.shader_cycles_hi_lo_registers)] = .{
1067 .llvm_name = "shader-cycles-hi-lo-registers",
1068 .description = "Has SHADER_CYCLES_HI/LO hardware registers",
1069 .dependencies = featureSet(&[_]Feature{}),
1070 };
9161071 result[@intFromEnum(Feature.shader_cycles_register)] = .{
9171072 .llvm_name = "shader-cycles-register",
9181073 .description = "Has SHADER_CYCLES hardware register",
......@@ -932,9 +1087,12 @@ pub const all_features = blk: {
9321087 .llvm_name = "southern-islands",
9331088 .description = "SOUTHERN_ISLANDS GPU generation",
9341089 .dependencies = featureSet(&[_]Feature{
1090 .default_component_zero,
9351091 .ds_src2_insts,
9361092 .extended_image_insts,
9371093 .fp64,
1094 .gds,
1095 .gws,
9381096 .image_insts,
9391097 .ldsbankcount32,
9401098 .localmemorysize32768,
......@@ -1031,6 +1189,11 @@ pub const all_features = blk: {
10311189 .description = "Has VGPR mode register indexing",
10321190 .dependencies = featureSet(&[_]Feature{}),
10331191 };
1192 result[@intFromEnum(Feature.vgpr_singleuse_hint)] = .{
1193 .llvm_name = "vgpr-singleuse-hint",
1194 .description = "Has single-use VGPR hint instructions",
1195 .dependencies = featureSet(&[_]Feature{}),
1196 };
10341197 result[@intFromEnum(Feature.vmem_to_scalar_write_hazard)] = .{
10351198 .llvm_name = "vmem-to-scalar-write-hazard",
10361199 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
......@@ -1042,6 +1205,7 @@ pub const all_features = blk: {
10421205 .dependencies = featureSet(&[_]Feature{
10431206 .@"16_bit_insts",
10441207 .ci_insts,
1208 .default_component_zero,
10451209 .dpp,
10461210 .ds_src2_insts,
10471211 .extended_image_insts,
......@@ -1049,8 +1213,10 @@ pub const all_features = blk: {
10491213 .flat_address_space,
10501214 .fp64,
10511215 .gcn3_encoding,
1216 .gds,
10521217 .gfx7_gfx8_gfx9_insts,
10531218 .gfx8_insts,
1219 .gws,
10541220 .image_insts,
10551221 .int_clamp_insts,
10561222 .inv_2pi_inline_imm,
......@@ -1157,6 +1323,8 @@ pub const cpu = struct {
11571323 .name = "generic",
11581324 .llvm_name = "generic",
11591325 .features = featureSet(&[_]Feature{
1326 .gds,
1327 .gws,
11601328 .wavefrontsize64,
11611329 }),
11621330 };
......@@ -1165,6 +1333,8 @@ pub const cpu = struct {
11651333 .llvm_name = "generic-hsa",
11661334 .features = featureSet(&[_]Feature{
11671335 .flat_address_space,
1336 .gds,
1337 .gws,
11681338 .wavefrontsize64,
11691339 }),
11701340 };
......@@ -1478,6 +1648,7 @@ pub const cpu = struct {
14781648 .image_insts,
14791649 .ldsbankcount32,
14801650 .mad_intra_fwd_bug,
1651 .msaa_load_dst_sel_bug,
14811652 .nsa_encoding,
14821653 .packed_tid,
14831654 .partial_nsa_encoding,
......@@ -1507,6 +1678,7 @@ pub const cpu = struct {
15071678 .image_insts,
15081679 .ldsbankcount32,
15091680 .mad_intra_fwd_bug,
1681 .msaa_load_dst_sel_bug,
15101682 .nsa_encoding,
15111683 .packed_tid,
15121684 .partial_nsa_encoding,
......@@ -1534,6 +1706,7 @@ pub const cpu = struct {
15341706 .image_insts,
15351707 .ldsbankcount32,
15361708 .mad_intra_fwd_bug,
1709 .msaa_load_dst_sel_bug,
15371710 .nsa_encoding,
15381711 .packed_tid,
15391712 .partial_nsa_encoding,
......@@ -1562,6 +1735,7 @@ pub const cpu = struct {
15621735 .image_insts,
15631736 .ldsbankcount32,
15641737 .mad_intra_fwd_bug,
1738 .msaa_load_dst_sel_bug,
15651739 .nsa_encoding,
15661740 .packed_tid,
15671741 .partial_nsa_encoding,
......@@ -1584,6 +1758,7 @@ pub const cpu = struct {
15841758 .dot7_insts,
15851759 .dot8_insts,
15861760 .dot9_insts,
1761 .dpp_src1_sgpr,
15871762 .flat_atomic_fadd_f32_inst,
15881763 .gfx11,
15891764 .image_insts,
......@@ -1592,8 +1767,10 @@ pub const cpu = struct {
15921767 .nsa_encoding,
15931768 .packed_tid,
15941769 .partial_nsa_encoding,
1770 .salu_float,
15951771 .shader_cycles_register,
15961772 .vcmpx_permlane_hazard,
1773 .vgpr_singleuse_hint,
15971774 .wavefrontsize32,
15981775 }),
15991776 };
......@@ -1610,6 +1787,7 @@ pub const cpu = struct {
16101787 .dot7_insts,
16111788 .dot8_insts,
16121789 .dot9_insts,
1790 .dpp_src1_sgpr,
16131791 .flat_atomic_fadd_f32_inst,
16141792 .gfx11,
16151793 .gfx11_full_vgprs,
......@@ -1619,8 +1797,84 @@ pub const cpu = struct {
16191797 .nsa_encoding,
16201798 .packed_tid,
16211799 .partial_nsa_encoding,
1800 .salu_float,
16221801 .shader_cycles_register,
16231802 .vcmpx_permlane_hazard,
1803 .vgpr_singleuse_hint,
1804 .wavefrontsize32,
1805 }),
1806 };
1807 pub const gfx1200 = CpuModel{
1808 .name = "gfx1200",
1809 .llvm_name = "gfx1200",
1810 .features = featureSet(&[_]Feature{
1811 .architected_flat_scratch,
1812 .architected_sgprs,
1813 .atomic_buffer_global_pk_add_f16_insts,
1814 .atomic_ds_pk_add_16_insts,
1815 .atomic_fadd_no_rtn_insts,
1816 .atomic_fadd_rtn_insts,
1817 .atomic_flat_pk_add_16_insts,
1818 .atomic_global_pk_add_bf16_inst,
1819 .dl_insts,
1820 .dot10_insts,
1821 .dot7_insts,
1822 .dot8_insts,
1823 .dot9_insts,
1824 .dpp_src1_sgpr,
1825 .extended_image_insts,
1826 .flat_atomic_fadd_f32_inst,
1827 .fp8_conversion_insts,
1828 .gfx12,
1829 .image_insts,
1830 .ldsbankcount32,
1831 .nsa_encoding,
1832 .packed_tid,
1833 .partial_nsa_encoding,
1834 .pseudo_scalar_trans,
1835 .restricted_soffset,
1836 .salu_float,
1837 .scalar_dwordx3_loads,
1838 .shader_cycles_hi_lo_registers,
1839 .vcmpx_permlane_hazard,
1840 .vgpr_singleuse_hint,
1841 .wavefrontsize32,
1842 }),
1843 };
1844 pub const gfx1201 = CpuModel{
1845 .name = "gfx1201",
1846 .llvm_name = "gfx1201",
1847 .features = featureSet(&[_]Feature{
1848 .architected_flat_scratch,
1849 .architected_sgprs,
1850 .atomic_buffer_global_pk_add_f16_insts,
1851 .atomic_ds_pk_add_16_insts,
1852 .atomic_fadd_no_rtn_insts,
1853 .atomic_fadd_rtn_insts,
1854 .atomic_flat_pk_add_16_insts,
1855 .atomic_global_pk_add_bf16_inst,
1856 .dl_insts,
1857 .dot10_insts,
1858 .dot7_insts,
1859 .dot8_insts,
1860 .dot9_insts,
1861 .dpp_src1_sgpr,
1862 .extended_image_insts,
1863 .flat_atomic_fadd_f32_inst,
1864 .fp8_conversion_insts,
1865 .gfx12,
1866 .image_insts,
1867 .ldsbankcount32,
1868 .nsa_encoding,
1869 .packed_tid,
1870 .partial_nsa_encoding,
1871 .pseudo_scalar_trans,
1872 .restricted_soffset,
1873 .salu_float,
1874 .scalar_dwordx3_loads,
1875 .shader_cycles_hi_lo_registers,
1876 .vcmpx_permlane_hazard,
1877 .vgpr_singleuse_hint,
16241878 .wavefrontsize32,
16251879 }),
16261880 };
......@@ -1756,6 +2010,7 @@ pub const cpu = struct {
17562010 .features = featureSet(&[_]Feature{
17572011 .ds_src2_insts,
17582012 .extended_image_insts,
2013 .gds,
17592014 .gfx9,
17602015 .image_gather4_d16_bug,
17612016 .image_insts,
......@@ -1770,6 +2025,7 @@ pub const cpu = struct {
17702025 .features = featureSet(&[_]Feature{
17712026 .ds_src2_insts,
17722027 .extended_image_insts,
2028 .gds,
17732029 .gfx9,
17742030 .image_gather4_d16_bug,
17752031 .image_insts,
......@@ -1785,6 +2041,7 @@ pub const cpu = struct {
17852041 .ds_src2_insts,
17862042 .extended_image_insts,
17872043 .fma_mix_insts,
2044 .gds,
17882045 .gfx9,
17892046 .image_gather4_d16_bug,
17902047 .image_insts,
......@@ -1804,6 +2061,7 @@ pub const cpu = struct {
18042061 .ds_src2_insts,
18052062 .extended_image_insts,
18062063 .fma_mix_insts,
2064 .gds,
18072065 .gfx9,
18082066 .half_rate_64_ops,
18092067 .image_gather4_d16_bug,
......@@ -1831,6 +2089,7 @@ pub const cpu = struct {
18312089 .ds_src2_insts,
18322090 .extended_image_insts,
18332091 .fma_mix_insts,
2092 .gds,
18342093 .gfx9,
18352094 .half_rate_64_ops,
18362095 .image_gather4_d16_bug,
......@@ -1849,6 +2108,7 @@ pub const cpu = struct {
18492108 .features = featureSet(&[_]Feature{
18502109 .ds_src2_insts,
18512110 .extended_image_insts,
2111 .gds,
18522112 .gfx9,
18532113 .image_gather4_d16_bug,
18542114 .image_insts,
......@@ -1881,6 +2141,7 @@ pub const cpu = struct {
18812141 .gfx9,
18822142 .gfx90a_insts,
18832143 .image_insts,
2144 .kernarg_preload,
18842145 .ldsbankcount32,
18852146 .mad_mac_f32_insts,
18862147 .mai_insts,
......@@ -1896,6 +2157,7 @@ pub const cpu = struct {
18962157 .features = featureSet(&[_]Feature{
18972158 .ds_src2_insts,
18982159 .extended_image_insts,
2160 .gds,
18992161 .gfx9,
19002162 .image_gather4_d16_bug,
19012163 .image_insts,
......@@ -1930,11 +2192,13 @@ pub const cpu = struct {
19302192 .fma_mix_insts,
19312193 .fmacf64_inst,
19322194 .force_store_sc0_sc1,
2195 .fp8_conversion_insts,
19332196 .fp8_insts,
19342197 .full_rate_64_ops,
19352198 .gfx9,
19362199 .gfx90a_insts,
19372200 .gfx940_insts,
2201 .kernarg_preload,
19382202 .ldsbankcount32,
19392203 .mai_insts,
19402204 .packed_fp32_ops,
......@@ -1969,11 +2233,13 @@ pub const cpu = struct {
19692233 .fma_mix_insts,
19702234 .fmacf64_inst,
19712235 .force_store_sc0_sc1,
2236 .fp8_conversion_insts,
19722237 .fp8_insts,
19732238 .full_rate_64_ops,
19742239 .gfx9,
19752240 .gfx90a_insts,
19762241 .gfx940_insts,
2242 .kernarg_preload,
19772243 .ldsbankcount32,
19782244 .mai_insts,
19792245 .packed_fp32_ops,
......@@ -2007,11 +2273,13 @@ pub const cpu = struct {
20072273 .flat_atomic_fadd_f32_inst,
20082274 .fma_mix_insts,
20092275 .fmacf64_inst,
2276 .fp8_conversion_insts,
20102277 .fp8_insts,
20112278 .full_rate_64_ops,
20122279 .gfx9,
20132280 .gfx90a_insts,
20142281 .gfx940_insts,
2282 .kernarg_preload,
20152283 .ldsbankcount32,
20162284 .mai_insts,
20172285 .packed_fp32_ops,
lib/std/Target/arm.zig+41-1
......@@ -186,6 +186,8 @@ pub const Feature = enum {
186186 v9_2a,
187187 v9_3a,
188188 v9_4a,
189 v9_5a,
190 v9_5a,
189191 v9a,
190192 vfp2,
191193 vfp2sp,
......@@ -1572,6 +1574,29 @@ pub const all_features = blk: {
15721574 .virtualization,
15731575 }),
15741576 };
1577 result[@intFromEnum(Feature.v9_5a)] = .{
1578 .llvm_name = "armv9.5-a",
1579 .description = "ARMv95a architecture",
1580 .dependencies = featureSet(&[_]Feature{
1581 .aclass,
1582 .crc,
1583 .db,
1584 .dsp,
1585 .fp_armv8,
1586 .mp,
1587 .ras,
1588 .trustzone,
1589 .v9_5a,
1590 .virtualization,
1591 }),
1592 };
1593 result[@intFromEnum(Feature.v9_5a)] = .{
1594 .llvm_name = "v9.5a",
1595 .description = "Support ARM v9.5a instructions",
1596 .dependencies = featureSet(&[_]Feature{
1597 .has_v9_4a,
1598 }),
1599 };
15751600 result[@intFromEnum(Feature.v9a)] = .{
15761601 .llvm_name = "armv9-a",
15771602 .description = "ARMv9a architecture",
......@@ -2238,6 +2263,21 @@ pub const cpu = struct {
22382263 .v7em,
22392264 }),
22402265 };
2266 pub const cortex_m52 = CpuModel{
2267 .name = "cortex_m52",
2268 .llvm_name = "cortex-m52",
2269 .features = featureSet(&[_]Feature{
2270 .fp_armv8d16,
2271 .loop_align,
2272 .mve1beat,
2273 .mve_fp,
2274 .no_branch_predictor,
2275 .pacbti,
2276 .slowfpvmlx,
2277 .use_misched,
2278 .v8_1m_main,
2279 }),
2280 };
22412281 pub const cortex_m55 = CpuModel{
22422282 .name = "cortex_m55",
22432283 .llvm_name = "cortex-m55",
......@@ -2499,7 +2539,7 @@ pub const cpu = struct {
24992539 .features = featureSet(&[_]Feature{
25002540 .bf16,
25012541 .i8mm,
2502 .v8_5a,
2542 .v9a,
25032543 }),
25042544 };
25052545 pub const neoverse_v1 = CpuModel{
lib/std/Target/bpf.zig+7
......@@ -70,4 +70,11 @@ pub const cpu = struct {
7070 .alu32,
7171 }),
7272 };
73 pub const v4 = CpuModel{
74 .name = "v4",
75 .llvm_name = "v4",
76 .features = featureSet(&[_]Feature{
77 .alu32,
78 }),
79 };
7380};
lib/std/Target/loongarch.zig+18
......@@ -7,8 +7,10 @@ const CpuModel = std.Target.Cpu.Model;
77pub const Feature = enum {
88 @"32bit",
99 @"64bit",
10 auto_vec,
1011 d,
1112 f,
13 frecipe,
1214 la_global_with_abs,
1315 la_global_with_pcrel,
1416 la_local_with_abs,
......@@ -16,6 +18,7 @@ pub const Feature = enum {
1618 lbt,
1719 lsx,
1820 lvz,
21 relax,
1922 ual,
2023};
2124
......@@ -38,6 +41,11 @@ pub const all_features = blk: {
3841 .description = "LA64 Basic Integer and Privilege Instruction Set",
3942 .dependencies = featureSet(&[_]Feature{}),
4043 };
44 result[@intFromEnum(Feature.auto_vec)] = .{
45 .llvm_name = "auto-vec",
46 .description = "Experimental auto vectorization",
47 .dependencies = featureSet(&[_]Feature{}),
48 };
4149 result[@intFromEnum(Feature.d)] = .{
4250 .llvm_name = "d",
4351 .description = "'D' (Double-Precision Floating-Point)",
......@@ -50,6 +58,11 @@ pub const all_features = blk: {
5058 .description = "'F' (Single-Precision Floating-Point)",
5159 .dependencies = featureSet(&[_]Feature{}),
5260 };
61 result[@intFromEnum(Feature.frecipe)] = .{
62 .llvm_name = "frecipe",
63 .description = "Support frecipe.{s/d} and frsqrte.{s/d} instructions.",
64 .dependencies = featureSet(&[_]Feature{}),
65 };
5366 result[@intFromEnum(Feature.la_global_with_abs)] = .{
5467 .llvm_name = "la-global-with-abs",
5568 .description = "Expand la.global as la.abs",
......@@ -89,6 +102,11 @@ pub const all_features = blk: {
89102 .description = "'LVZ' (Loongson Virtualization Extension)",
90103 .dependencies = featureSet(&[_]Feature{}),
91104 };
105 result[@intFromEnum(Feature.relax)] = .{
106 .llvm_name = "relax",
107 .description = "Enable Linker relaxation",
108 .dependencies = featureSet(&[_]Feature{}),
109 };
92110 result[@intFromEnum(Feature.ual)] = .{
93111 .llvm_name = "ual",
94112 .description = "Allow memory accesses to be unaligned",
lib/std/Target/nvptx.zig+26
......@@ -27,6 +27,8 @@ pub const Feature = enum {
2727 ptx78,
2828 ptx80,
2929 ptx81,
30 ptx82,
31 ptx83,
3032 sm_20,
3133 sm_21,
3234 sm_30,
......@@ -47,6 +49,7 @@ pub const Feature = enum {
4749 sm_87,
4850 sm_89,
4951 sm_90,
52 sm_90a,
5053};
5154
5255pub const featureSet = CpuFeature.feature_set_fns(Feature).featureSet;
......@@ -168,6 +171,16 @@ pub const all_features = blk: {
168171 .description = "Use PTX version 81",
169172 .dependencies = featureSet(&[_]Feature{}),
170173 };
174 result[@intFromEnum(Feature.ptx82)] = .{
175 .llvm_name = "ptx82",
176 .description = "Use PTX version 82",
177 .dependencies = featureSet(&[_]Feature{}),
178 };
179 result[@intFromEnum(Feature.ptx83)] = .{
180 .llvm_name = "ptx83",
181 .description = "Use PTX version 83",
182 .dependencies = featureSet(&[_]Feature{}),
183 };
171184 result[@intFromEnum(Feature.sm_20)] = .{
172185 .llvm_name = "sm_20",
173186 .description = "Target SM 20",
......@@ -268,6 +281,11 @@ pub const all_features = blk: {
268281 .description = "Target SM 90",
269282 .dependencies = featureSet(&[_]Feature{}),
270283 };
284 result[@intFromEnum(Feature.sm_90a)] = .{
285 .llvm_name = "sm_90a",
286 .description = "Target SM 90a",
287 .dependencies = featureSet(&[_]Feature{}),
288 };
271289 const ti = @typeInfo(Feature);
272290 for (&result, 0..) |*elem, i| {
273291 elem.index = i;
......@@ -436,4 +454,12 @@ pub const cpu = struct {
436454 .sm_90,
437455 }),
438456 };
457 pub const sm_90a = CpuModel{
458 .name = "sm_90a",
459 .llvm_name = "sm_90a",
460 .features = featureSet(&[_]Feature{
461 .ptx80,
462 .sm_90a,
463 }),
464 };
439465};
lib/std/Target/powerpc.zig+6
......@@ -8,6 +8,7 @@ pub const Feature = enum {
88 @"64bit",
99 @"64bitregs",
1010 aix,
11 aix_small_local_exec_tls,
1112 allow_unaligned_fp_access,
1213 altivec,
1314 booke,
......@@ -112,6 +113,11 @@ pub const all_features = blk: {
112113 .description = "AIX OS",
113114 .dependencies = featureSet(&[_]Feature{}),
114115 };
116 result[@intFromEnum(Feature.aix_small_local_exec_tls)] = .{
117 .llvm_name = "aix-small-local-exec-tls",
118 .description = "Produce a TOC-free local-exec TLS sequence for this function for 64-bit AIX",
119 .dependencies = featureSet(&[_]Feature{}),
120 };
115121 result[@intFromEnum(Feature.allow_unaligned_fp_access)] = .{
116122 .llvm_name = "allow-unaligned-fp-access",
117123 .description = "CPU does not trap on unaligned FP access",
lib/std/Target/riscv.zig+482-134
......@@ -8,38 +8,28 @@ pub const Feature = enum {
88 @"32bit",
99 @"64bit",
1010 a,
11 auipc_addi_fusion,
1112 c,
13 conditional_cmv_fusion,
1214 d,
1315 dlen_factor_2,
1416 e,
15 experimental_smaia,
16 experimental_ssaia,
17 experimental,
1718 experimental_zacas,
18 experimental_zfa,
19 experimental_zcmop,
1920 experimental_zfbfmin,
20 experimental_zicond,
21 experimental_zihintntl,
21 experimental_zicfilp,
22 experimental_zicfiss,
23 experimental_zimop,
2224 experimental_ztso,
23 experimental_zvbb,
24 experimental_zvbc,
2525 experimental_zvfbfmin,
2626 experimental_zvfbfwma,
27 experimental_zvkg,
28 experimental_zvkn,
29 experimental_zvknc,
30 experimental_zvkned,
31 experimental_zvkng,
32 experimental_zvknha,
33 experimental_zvknhb,
34 experimental_zvks,
35 experimental_zvksc,
36 experimental_zvksed,
37 experimental_zvksg,
38 experimental_zvksh,
39 experimental_zvkt,
4027 f,
28 fast_unaligned_access,
4129 forced_atomics,
4230 h,
31 i,
32 ld_add_fusion,
4333 lui_addi_fusion,
4434 m,
4535 no_default_unroll,
......@@ -79,18 +69,30 @@ pub const Feature = enum {
7969 reserve_x9,
8070 save_restore,
8171 seq_cst_trailing_fence,
72 shifted_zextw_fusion,
8273 short_forward_branch_opt,
74 smaia,
75 smepmp,
76 ssaia,
8377 svinval,
8478 svnapot,
8579 svpbmt,
8680 tagged_globals,
87 unaligned_scalar_mem,
88 unaligned_vector_mem,
81 use_postra_scheduler,
8982 v,
83 ventana_veyron,
84 xcvalu,
85 xcvbi,
9086 xcvbitmanip,
87 xcvelw,
9188 xcvmac,
92 xsfcie,
89 xcvmem,
90 xcvsimd,
9391 xsfvcp,
92 xsfvfnrclipxfqf,
93 xsfvfwmaccqqq,
94 xsfvqmaccdod,
95 xsfvqmaccqoq,
9496 xtheadba,
9597 xtheadbb,
9698 xtheadbs,
......@@ -103,6 +105,8 @@ pub const Feature = enum {
103105 xtheadsync,
104106 xtheadvdot,
105107 xventanacondops,
108 za128rs,
109 za64rs,
106110 zawrs,
107111 zba,
108112 zbb,
......@@ -119,17 +123,27 @@ pub const Feature = enum {
119123 zcmp,
120124 zcmt,
121125 zdinx,
126 zexth_fusion,
127 zextw_fusion,
128 zfa,
122129 zfh,
123130 zfhmin,
124131 zfinx,
125132 zhinx,
126133 zhinxmin,
134 zic64b,
127135 zicbom,
128136 zicbop,
129137 zicboz,
138 ziccamoa,
139 ziccif,
140 zicclsm,
141 ziccrse,
130142 zicntr,
143 zicond,
131144 zicsr,
132145 zifencei,
146 zihintntl,
133147 zihintpause,
134148 zihpm,
135149 zk,
......@@ -143,12 +157,29 @@ pub const Feature = enum {
143157 zksh,
144158 zkt,
145159 zmmul,
160 zvbb,
161 zvbc,
146162 zve32f,
147163 zve32x,
148164 zve64d,
149165 zve64f,
150166 zve64x,
151167 zvfh,
168 zvfhmin,
169 zvkb,
170 zvkg,
171 zvkn,
172 zvknc,
173 zvkned,
174 zvkng,
175 zvknha,
176 zvknhb,
177 zvks,
178 zvksc,
179 zvksed,
180 zvksg,
181 zvksh,
182 zvkt,
152183 zvl1024b,
153184 zvl128b,
154185 zvl16384b,
......@@ -187,11 +218,21 @@ pub const all_features = blk: {
187218 .description = "'A' (Atomic Instructions)",
188219 .dependencies = featureSet(&[_]Feature{}),
189220 };
221 result[@intFromEnum(Feature.auipc_addi_fusion)] = .{
222 .llvm_name = "auipc-addi-fusion",
223 .description = "Enable AUIPC+ADDI macrofusion",
224 .dependencies = featureSet(&[_]Feature{}),
225 };
190226 result[@intFromEnum(Feature.c)] = .{
191227 .llvm_name = "c",
192228 .description = "'C' (Compressed Instructions)",
193229 .dependencies = featureSet(&[_]Feature{}),
194230 };
231 result[@intFromEnum(Feature.conditional_cmv_fusion)] = .{
232 .llvm_name = "conditional-cmv-fusion",
233 .description = "Enable branch+c.mv fusion",
234 .dependencies = featureSet(&[_]Feature{}),
235 };
195236 result[@intFromEnum(Feature.d)] = .{
196237 .llvm_name = "d",
197238 .description = "'D' (Double-Precision Floating-Point)",
......@@ -209,14 +250,9 @@ pub const all_features = blk: {
209250 .description = "Implements RV{32,64}E (provides 16 rather than 32 GPRs)",
210251 .dependencies = featureSet(&[_]Feature{}),
211252 };
212 result[@intFromEnum(Feature.experimental_smaia)] = .{
213 .llvm_name = "experimental-smaia",
214 .description = "'Smaia' (Smaia encompasses all added CSRs and all modifications to interrupt response behavior that the AIA specifies for a hart, over all privilege levels.)",
215 .dependencies = featureSet(&[_]Feature{}),
216 };
217 result[@intFromEnum(Feature.experimental_ssaia)] = .{
218 .llvm_name = "experimental-ssaia",
219 .description = "'Ssaia' (Ssaia is essentially the same as Smaia except excluding the machine-level CSRs and behavior not directly visible to supervisor level.)",
253 result[@intFromEnum(Feature.experimental)] = .{
254 .llvm_name = "experimental",
255 .description = "Experimental intrinsics",
220256 .dependencies = featureSet(&[_]Feature{}),
221257 };
222258 result[@intFromEnum(Feature.experimental_zacas)] = .{
......@@ -224,11 +260,11 @@ pub const all_features = blk: {
224260 .description = "'Zacas' (Atomic Compare-And-Swap Instructions)",
225261 .dependencies = featureSet(&[_]Feature{}),
226262 };
227 result[@intFromEnum(Feature.experimental_zfa)] = .{
228 .llvm_name = "experimental-zfa",
229 .description = "'Zfa' (Additional Floating-Point)",
263 result[@intFromEnum(Feature.experimental_zcmop)] = .{
264 .llvm_name = "experimental-zcmop",
265 .description = "'Zcmop' (Compressed May-Be-Operations)",
230266 .dependencies = featureSet(&[_]Feature{
231 .f,
267 .zca,
232268 }),
233269 };
234270 result[@intFromEnum(Feature.experimental_zfbfmin)] = .{
......@@ -238,14 +274,22 @@ pub const all_features = blk: {
238274 .f,
239275 }),
240276 };
241 result[@intFromEnum(Feature.experimental_zicond)] = .{
242 .llvm_name = "experimental-zicond",
243 .description = "'Zicond' (Integer Conditional Operations)",
277 result[@intFromEnum(Feature.experimental_zicfilp)] = .{
278 .llvm_name = "experimental-zicfilp",
279 .description = "'Zicfilp' (Landing pad)",
244280 .dependencies = featureSet(&[_]Feature{}),
245281 };
246 result[@intFromEnum(Feature.experimental_zihintntl)] = .{
247 .llvm_name = "experimental-zihintntl",
248 .description = "'Zihintntl' (Non-Temporal Locality Hints)",
282 result[@intFromEnum(Feature.experimental_zicfiss)] = .{
283 .llvm_name = "experimental-zicfiss",
284 .description = "'Zicfiss' (Shadow stack)",
285 .dependencies = featureSet(&[_]Feature{
286 .experimental_zimop,
287 .zicsr,
288 }),
289 };
290 result[@intFromEnum(Feature.experimental_zimop)] = .{
291 .llvm_name = "experimental-zimop",
292 .description = "'Zimop' (May-Be-Operations)",
249293 .dependencies = featureSet(&[_]Feature{}),
250294 };
251295 result[@intFromEnum(Feature.experimental_ztso)] = .{
......@@ -253,16 +297,6 @@ pub const all_features = blk: {
253297 .description = "'Ztso' (Memory Model - Total Store Order)",
254298 .dependencies = featureSet(&[_]Feature{}),
255299 };
256 result[@intFromEnum(Feature.experimental_zvbb)] = .{
257 .llvm_name = "experimental-zvbb",
258 .description = "'Zvbb' (Vector Bit-manipulation used in Cryptography)",
259 .dependencies = featureSet(&[_]Feature{}),
260 };
261 result[@intFromEnum(Feature.experimental_zvbc)] = .{
262 .llvm_name = "experimental-zvbc",
263 .description = "'Zvbc' (Vector Carryless Multiplication)",
264 .dependencies = featureSet(&[_]Feature{}),
265 };
266300 result[@intFromEnum(Feature.experimental_zvfbfmin)] = .{
267301 .llvm_name = "experimental-zvfbfmin",
268302 .description = "'Zvbfmin' (Vector BF16 Converts)",
......@@ -274,76 +308,10 @@ pub const all_features = blk: {
274308 .llvm_name = "experimental-zvfbfwma",
275309 .description = "'Zvfbfwma' (Vector BF16 widening mul-add)",
276310 .dependencies = featureSet(&[_]Feature{
277 .zve32f,
311 .experimental_zfbfmin,
312 .experimental_zvfbfmin,
278313 }),
279314 };
280 result[@intFromEnum(Feature.experimental_zvkg)] = .{
281 .llvm_name = "experimental-zvkg",
282 .description = "'Zvkg' (Vector GCM instructions for Cryptography)",
283 .dependencies = featureSet(&[_]Feature{}),
284 };
285 result[@intFromEnum(Feature.experimental_zvkn)] = .{
286 .llvm_name = "experimental-zvkn",
287 .description = "This extension is shorthand for the following set of other extensions: Zvkned, Zvknhb, Zvbb, Zvbc, and Zvkt.",
288 .dependencies = featureSet(&[_]Feature{}),
289 };
290 result[@intFromEnum(Feature.experimental_zvknc)] = .{
291 .llvm_name = "experimental-zvknc",
292 .description = "This extension is shorthand for the following set of other extensions: Zvkn and Zvbc.",
293 .dependencies = featureSet(&[_]Feature{}),
294 };
295 result[@intFromEnum(Feature.experimental_zvkned)] = .{
296 .llvm_name = "experimental-zvkned",
297 .description = "'Zvkned' (Vector AES Encryption & Decryption (Single Round))",
298 .dependencies = featureSet(&[_]Feature{}),
299 };
300 result[@intFromEnum(Feature.experimental_zvkng)] = .{
301 .llvm_name = "experimental-zvkng",
302 .description = "This extension is shorthand for the following set of other extensions: Zvkn and Zvkg.",
303 .dependencies = featureSet(&[_]Feature{}),
304 };
305 result[@intFromEnum(Feature.experimental_zvknha)] = .{
306 .llvm_name = "experimental-zvknha",
307 .description = "'Zvknha' (Vector SHA-2 (SHA-256 only))",
308 .dependencies = featureSet(&[_]Feature{}),
309 };
310 result[@intFromEnum(Feature.experimental_zvknhb)] = .{
311 .llvm_name = "experimental-zvknhb",
312 .description = "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
313 .dependencies = featureSet(&[_]Feature{
314 .experimental_zvknha,
315 }),
316 };
317 result[@intFromEnum(Feature.experimental_zvks)] = .{
318 .llvm_name = "experimental-zvks",
319 .description = "This extension is shorthand for the following set of other extensions: Zvksed, Zvksh, Zvbb, Zvbc, and Zvkt.",
320 .dependencies = featureSet(&[_]Feature{}),
321 };
322 result[@intFromEnum(Feature.experimental_zvksc)] = .{
323 .llvm_name = "experimental-zvksc",
324 .description = "This extension is shorthand for the following set of other extensions: Zvks and Zvbc.",
325 .dependencies = featureSet(&[_]Feature{}),
326 };
327 result[@intFromEnum(Feature.experimental_zvksed)] = .{
328 .llvm_name = "experimental-zvksed",
329 .description = "'Zvksed' (SM4 Block Cipher Instructions)",
330 .dependencies = featureSet(&[_]Feature{}),
331 };
332 result[@intFromEnum(Feature.experimental_zvksg)] = .{
333 .llvm_name = "experimental-zvksg",
334 .description = "This extension is shorthand for the following set of other extensions: Zvks and Zvkg.",
335 .dependencies = featureSet(&[_]Feature{}),
336 };
337 result[@intFromEnum(Feature.experimental_zvksh)] = .{
338 .llvm_name = "experimental-zvksh",
339 .description = "'Zvksh' (SM3 Hash Function Instructions)",
340 .dependencies = featureSet(&[_]Feature{}),
341 };
342 result[@intFromEnum(Feature.experimental_zvkt)] = .{
343 .llvm_name = "experimental-zvkt",
344 .description = "'Zvkt' (Vector Data-Independent Execution Latency)",
345 .dependencies = featureSet(&[_]Feature{}),
346 };
347315 result[@intFromEnum(Feature.f)] = .{
348316 .llvm_name = "f",
349317 .description = "'F' (Single-Precision Floating-Point)",
......@@ -351,6 +319,11 @@ pub const all_features = blk: {
351319 .zicsr,
352320 }),
353321 };
322 result[@intFromEnum(Feature.fast_unaligned_access)] = .{
323 .llvm_name = "fast-unaligned-access",
324 .description = "Has reasonably performant unaligned loads and stores (both scalar and vector)",
325 .dependencies = featureSet(&[_]Feature{}),
326 };
354327 result[@intFromEnum(Feature.forced_atomics)] = .{
355328 .llvm_name = "forced-atomics",
356329 .description = "Assume that lock-free native-width atomics are available",
......@@ -361,9 +334,19 @@ pub const all_features = blk: {
361334 .description = "'H' (Hypervisor)",
362335 .dependencies = featureSet(&[_]Feature{}),
363336 };
337 result[@intFromEnum(Feature.i)] = .{
338 .llvm_name = "i",
339 .description = "'I' (Base Integer Instruction Set)",
340 .dependencies = featureSet(&[_]Feature{}),
341 };
342 result[@intFromEnum(Feature.ld_add_fusion)] = .{
343 .llvm_name = "ld-add-fusion",
344 .description = "Enable LD+ADD macrofusion",
345 .dependencies = featureSet(&[_]Feature{}),
346 };
364347 result[@intFromEnum(Feature.lui_addi_fusion)] = .{
365348 .llvm_name = "lui-addi-fusion",
366 .description = "Enable LUI+ADDI macrofusion",
349 .description = "Enable LUI+ADDI macro fusion",
367350 .dependencies = featureSet(&[_]Feature{}),
368351 };
369352 result[@intFromEnum(Feature.m)] = .{
......@@ -556,11 +539,31 @@ pub const all_features = blk: {
556539 .description = "Enable trailing fence for seq-cst store.",
557540 .dependencies = featureSet(&[_]Feature{}),
558541 };
542 result[@intFromEnum(Feature.shifted_zextw_fusion)] = .{
543 .llvm_name = "shifted-zextw-fusion",
544 .description = "Enable SLLI+SRLI to be fused when computing (shifted) word zero extension",
545 .dependencies = featureSet(&[_]Feature{}),
546 };
559547 result[@intFromEnum(Feature.short_forward_branch_opt)] = .{
560548 .llvm_name = "short-forward-branch-opt",
561549 .description = "Enable short forward branch optimization",
562550 .dependencies = featureSet(&[_]Feature{}),
563551 };
552 result[@intFromEnum(Feature.smaia)] = .{
553 .llvm_name = "smaia",
554 .description = "'Smaia' (Advanced Interrupt Architecture Machine Level)",
555 .dependencies = featureSet(&[_]Feature{}),
556 };
557 result[@intFromEnum(Feature.smepmp)] = .{
558 .llvm_name = "smepmp",
559 .description = "'Smepmp' (Enhanced Physical Memory Protection)",
560 .dependencies = featureSet(&[_]Feature{}),
561 };
562 result[@intFromEnum(Feature.ssaia)] = .{
563 .llvm_name = "ssaia",
564 .description = "'Ssaia' (Advanced Interrupt Architecture Supervisor Level)",
565 .dependencies = featureSet(&[_]Feature{}),
566 };
564567 result[@intFromEnum(Feature.svinval)] = .{
565568 .llvm_name = "svinval",
566569 .description = "'Svinval' (Fine-Grained Address-Translation Cache Invalidation)",
......@@ -581,14 +584,9 @@ pub const all_features = blk: {
581584 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits",
582585 .dependencies = featureSet(&[_]Feature{}),
583586 };
584 result[@intFromEnum(Feature.unaligned_scalar_mem)] = .{
585 .llvm_name = "unaligned-scalar-mem",
586 .description = "Has reasonably performant unaligned scalar loads and stores",
587 .dependencies = featureSet(&[_]Feature{}),
588 };
589 result[@intFromEnum(Feature.unaligned_vector_mem)] = .{
590 .llvm_name = "unaligned-vector-mem",
591 .description = "Has reasonably performant unaligned vector loads and stores",
587 result[@intFromEnum(Feature.use_postra_scheduler)] = .{
588 .llvm_name = "use-postra-scheduler",
589 .description = "Schedule again after register allocation",
592590 .dependencies = featureSet(&[_]Feature{}),
593591 };
594592 result[@intFromEnum(Feature.v)] = .{
......@@ -599,19 +597,44 @@ pub const all_features = blk: {
599597 .zvl128b,
600598 }),
601599 };
600 result[@intFromEnum(Feature.ventana_veyron)] = .{
601 .llvm_name = "ventana-veyron",
602 .description = "Ventana Veyron-Series processors",
603 .dependencies = featureSet(&[_]Feature{}),
604 };
605 result[@intFromEnum(Feature.xcvalu)] = .{
606 .llvm_name = "xcvalu",
607 .description = "'XCValu' (CORE-V ALU Operations)",
608 .dependencies = featureSet(&[_]Feature{}),
609 };
610 result[@intFromEnum(Feature.xcvbi)] = .{
611 .llvm_name = "xcvbi",
612 .description = "'XCVbi' (CORE-V Immediate Branching)",
613 .dependencies = featureSet(&[_]Feature{}),
614 };
602615 result[@intFromEnum(Feature.xcvbitmanip)] = .{
603616 .llvm_name = "xcvbitmanip",
604617 .description = "'XCVbitmanip' (CORE-V Bit Manipulation)",
605618 .dependencies = featureSet(&[_]Feature{}),
606619 };
620 result[@intFromEnum(Feature.xcvelw)] = .{
621 .llvm_name = "xcvelw",
622 .description = "'XCVelw' (CORE-V Event Load Word)",
623 .dependencies = featureSet(&[_]Feature{}),
624 };
607625 result[@intFromEnum(Feature.xcvmac)] = .{
608626 .llvm_name = "xcvmac",
609627 .description = "'XCVmac' (CORE-V Multiply-Accumulate)",
610628 .dependencies = featureSet(&[_]Feature{}),
611629 };
612 result[@intFromEnum(Feature.xsfcie)] = .{
613 .llvm_name = "xsfcie",
614 .description = "'XSfcie' (SiFive Custom Instruction Extension SCIE.)",
630 result[@intFromEnum(Feature.xcvmem)] = .{
631 .llvm_name = "xcvmem",
632 .description = "'XCVmem' (CORE-V Post-incrementing Load & Store)",
633 .dependencies = featureSet(&[_]Feature{}),
634 };
635 result[@intFromEnum(Feature.xcvsimd)] = .{
636 .llvm_name = "xcvsimd",
637 .description = "'XCVsimd' (CORE-V SIMD ALU)",
615638 .dependencies = featureSet(&[_]Feature{}),
616639 };
617640 result[@intFromEnum(Feature.xsfvcp)] = .{
......@@ -621,6 +644,34 @@ pub const all_features = blk: {
621644 .zve32x,
622645 }),
623646 };
647 result[@intFromEnum(Feature.xsfvfnrclipxfqf)] = .{
648 .llvm_name = "xsfvfnrclipxfqf",
649 .description = "'XSfvfnrclipxfqf' (SiFive FP32-to-int8 Ranged Clip Instructions)",
650 .dependencies = featureSet(&[_]Feature{
651 .zve32f,
652 }),
653 };
654 result[@intFromEnum(Feature.xsfvfwmaccqqq)] = .{
655 .llvm_name = "xsfvfwmaccqqq",
656 .description = "'XSfvfwmaccqqq' (SiFive Matrix Multiply Accumulate Instruction and 4-by-4))",
657 .dependencies = featureSet(&[_]Feature{
658 .experimental_zvfbfmin,
659 }),
660 };
661 result[@intFromEnum(Feature.xsfvqmaccdod)] = .{
662 .llvm_name = "xsfvqmaccdod",
663 .description = "'XSfvqmaccdod' (SiFive Int8 Matrix Multiplication Instructions (2-by-8 and 8-by-2))",
664 .dependencies = featureSet(&[_]Feature{
665 .zve32x,
666 }),
667 };
668 result[@intFromEnum(Feature.xsfvqmaccqoq)] = .{
669 .llvm_name = "xsfvqmaccqoq",
670 .description = "'XSfvqmaccqoq' (SiFive Int8 Matrix Multiplication Instructions (4-by-8 and 8-by-4))",
671 .dependencies = featureSet(&[_]Feature{
672 .zve32x,
673 }),
674 };
624675 result[@intFromEnum(Feature.xtheadba)] = .{
625676 .llvm_name = "xtheadba",
626677 .description = "'xtheadba' (T-Head address calculation instructions)",
......@@ -685,6 +736,16 @@ pub const all_features = blk: {
685736 .description = "'XVentanaCondOps' (Ventana Conditional Ops)",
686737 .dependencies = featureSet(&[_]Feature{}),
687738 };
739 result[@intFromEnum(Feature.za128rs)] = .{
740 .llvm_name = "za128rs",
741 .description = "'Za128rs' (Reservation Set Size of at Most 128 Bytes)",
742 .dependencies = featureSet(&[_]Feature{}),
743 };
744 result[@intFromEnum(Feature.za64rs)] = .{
745 .llvm_name = "za64rs",
746 .description = "'Za64rs' (Reservation Set Size of at Most 64 Bytes)",
747 .dependencies = featureSet(&[_]Feature{}),
748 };
688749 result[@intFromEnum(Feature.zawrs)] = .{
689750 .llvm_name = "zawrs",
690751 .description = "'Zawrs' (Wait on Reservation Set)",
......@@ -782,11 +843,28 @@ pub const all_features = blk: {
782843 .zfinx,
783844 }),
784845 };
846 result[@intFromEnum(Feature.zexth_fusion)] = .{
847 .llvm_name = "zexth-fusion",
848 .description = "Enable SLLI+SRLI to be fused to zero extension of halfword",
849 .dependencies = featureSet(&[_]Feature{}),
850 };
851 result[@intFromEnum(Feature.zextw_fusion)] = .{
852 .llvm_name = "zextw-fusion",
853 .description = "Enable SLLI+SRLI to be fused to zero extension of word",
854 .dependencies = featureSet(&[_]Feature{}),
855 };
856 result[@intFromEnum(Feature.zfa)] = .{
857 .llvm_name = "zfa",
858 .description = "'Zfa' (Additional Floating-Point)",
859 .dependencies = featureSet(&[_]Feature{
860 .f,
861 }),
862 };
785863 result[@intFromEnum(Feature.zfh)] = .{
786864 .llvm_name = "zfh",
787865 .description = "'Zfh' (Half-Precision Floating-Point)",
788866 .dependencies = featureSet(&[_]Feature{
789 .f,
867 .zfhmin,
790868 }),
791869 };
792870 result[@intFromEnum(Feature.zfhmin)] = .{
......@@ -807,7 +885,7 @@ pub const all_features = blk: {
807885 .llvm_name = "zhinx",
808886 .description = "'Zhinx' (Half Float in Integer)",
809887 .dependencies = featureSet(&[_]Feature{
810 .zfinx,
888 .zhinxmin,
811889 }),
812890 };
813891 result[@intFromEnum(Feature.zhinxmin)] = .{
......@@ -817,6 +895,11 @@ pub const all_features = blk: {
817895 .zfinx,
818896 }),
819897 };
898 result[@intFromEnum(Feature.zic64b)] = .{
899 .llvm_name = "zic64b",
900 .description = "'Zic64b' (Cache Block Size Is 64 Bytes)",
901 .dependencies = featureSet(&[_]Feature{}),
902 };
820903 result[@intFromEnum(Feature.zicbom)] = .{
821904 .llvm_name = "zicbom",
822905 .description = "'Zicbom' (Cache-Block Management Instructions)",
......@@ -832,6 +915,26 @@ pub const all_features = blk: {
832915 .description = "'Zicboz' (Cache-Block Zero Instructions)",
833916 .dependencies = featureSet(&[_]Feature{}),
834917 };
918 result[@intFromEnum(Feature.ziccamoa)] = .{
919 .llvm_name = "ziccamoa",
920 .description = "'Ziccamoa' (Main Memory Supports All Atomics in A)",
921 .dependencies = featureSet(&[_]Feature{}),
922 };
923 result[@intFromEnum(Feature.ziccif)] = .{
924 .llvm_name = "ziccif",
925 .description = "'Ziccif' (Main Memory Supports Instruction Fetch with Atomicity Requirement)",
926 .dependencies = featureSet(&[_]Feature{}),
927 };
928 result[@intFromEnum(Feature.zicclsm)] = .{
929 .llvm_name = "zicclsm",
930 .description = "'Zicclsm' (Main Memory Supports Misaligned Loads/Stores)",
931 .dependencies = featureSet(&[_]Feature{}),
932 };
933 result[@intFromEnum(Feature.ziccrse)] = .{
934 .llvm_name = "ziccrse",
935 .description = "'Ziccrse' (Main Memory Supports Forward Progress on LR/SC Sequences)",
936 .dependencies = featureSet(&[_]Feature{}),
937 };
835938 result[@intFromEnum(Feature.zicntr)] = .{
836939 .llvm_name = "zicntr",
837940 .description = "'Zicntr' (Base Counters and Timers)",
......@@ -839,6 +942,11 @@ pub const all_features = blk: {
839942 .zicsr,
840943 }),
841944 };
945 result[@intFromEnum(Feature.zicond)] = .{
946 .llvm_name = "zicond",
947 .description = "'Zicond' (Integer Conditional Operations)",
948 .dependencies = featureSet(&[_]Feature{}),
949 };
842950 result[@intFromEnum(Feature.zicsr)] = .{
843951 .llvm_name = "zicsr",
844952 .description = "'zicsr' (CSRs)",
......@@ -849,6 +957,11 @@ pub const all_features = blk: {
849957 .description = "'Zifencei' (fence.i)",
850958 .dependencies = featureSet(&[_]Feature{}),
851959 };
960 result[@intFromEnum(Feature.zihintntl)] = .{
961 .llvm_name = "zihintntl",
962 .description = "'Zihintntl' (Non-Temporal Locality Hints)",
963 .dependencies = featureSet(&[_]Feature{}),
964 };
852965 result[@intFromEnum(Feature.zihintpause)] = .{
853966 .llvm_name = "zihintpause",
854967 .description = "'Zihintpause' (Pause Hint)",
......@@ -933,6 +1046,18 @@ pub const all_features = blk: {
9331046 .description = "'Zmmul' (Integer Multiplication)",
9341047 .dependencies = featureSet(&[_]Feature{}),
9351048 };
1049 result[@intFromEnum(Feature.zvbb)] = .{
1050 .llvm_name = "zvbb",
1051 .description = "'Zvbb' (Vector basic bit-manipulation instructions)",
1052 .dependencies = featureSet(&[_]Feature{
1053 .zvkb,
1054 }),
1055 };
1056 result[@intFromEnum(Feature.zvbc)] = .{
1057 .llvm_name = "zvbc",
1058 .description = "'Zvbc' (Vector Carryless Multiplication)",
1059 .dependencies = featureSet(&[_]Feature{}),
1060 };
9361061 result[@intFromEnum(Feature.zve32f)] = .{
9371062 .llvm_name = "zve32f",
9381063 .description = "'Zve32f' (Vector Extensions for Embedded Processors with maximal 32 EEW and F extension)",
......@@ -978,9 +1103,110 @@ pub const all_features = blk: {
9781103 .description = "'Zvfh' (Vector Half-Precision Floating-Point)",
9791104 .dependencies = featureSet(&[_]Feature{
9801105 .zfhmin,
1106 .zvfhmin,
1107 }),
1108 };
1109 result[@intFromEnum(Feature.zvfhmin)] = .{
1110 .llvm_name = "zvfhmin",
1111 .description = "'Zvfhmin' (Vector Half-Precision Floating-Point Minimal)",
1112 .dependencies = featureSet(&[_]Feature{
9811113 .zve32f,
9821114 }),
9831115 };
1116 result[@intFromEnum(Feature.zvkb)] = .{
1117 .llvm_name = "zvkb",
1118 .description = "'Zvkb' (Vector Bit-manipulation used in Cryptography)",
1119 .dependencies = featureSet(&[_]Feature{}),
1120 };
1121 result[@intFromEnum(Feature.zvkg)] = .{
1122 .llvm_name = "zvkg",
1123 .description = "'Zvkg' (Vector GCM instructions for Cryptography)",
1124 .dependencies = featureSet(&[_]Feature{}),
1125 };
1126 result[@intFromEnum(Feature.zvkn)] = .{
1127 .llvm_name = "zvkn",
1128 .description = "'Zvkn' (shorthand for 'Zvkned', 'Zvknhb', 'Zvkb', and 'Zvkt')",
1129 .dependencies = featureSet(&[_]Feature{
1130 .zvkb,
1131 .zvkned,
1132 .zvknhb,
1133 .zvkt,
1134 }),
1135 };
1136 result[@intFromEnum(Feature.zvknc)] = .{
1137 .llvm_name = "zvknc",
1138 .description = "'Zvknc' (shorthand for 'Zvknc' and 'Zvbc')",
1139 .dependencies = featureSet(&[_]Feature{
1140 .zvbc,
1141 .zvkn,
1142 }),
1143 };
1144 result[@intFromEnum(Feature.zvkned)] = .{
1145 .llvm_name = "zvkned",
1146 .description = "'Zvkned' (Vector AES Encryption & Decryption (Single Round))",
1147 .dependencies = featureSet(&[_]Feature{}),
1148 };
1149 result[@intFromEnum(Feature.zvkng)] = .{
1150 .llvm_name = "zvkng",
1151 .description = "'zvkng' (shorthand for 'Zvkn' and 'Zvkg')",
1152 .dependencies = featureSet(&[_]Feature{
1153 .zvkg,
1154 .zvkn,
1155 }),
1156 };
1157 result[@intFromEnum(Feature.zvknha)] = .{
1158 .llvm_name = "zvknha",
1159 .description = "'Zvknha' (Vector SHA-2 (SHA-256 only))",
1160 .dependencies = featureSet(&[_]Feature{}),
1161 };
1162 result[@intFromEnum(Feature.zvknhb)] = .{
1163 .llvm_name = "zvknhb",
1164 .description = "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
1165 .dependencies = featureSet(&[_]Feature{
1166 .zve64x,
1167 }),
1168 };
1169 result[@intFromEnum(Feature.zvks)] = .{
1170 .llvm_name = "zvks",
1171 .description = "'Zvks' (shorthand for 'Zvksed', 'Zvksh', 'Zvkb', and 'Zvkt')",
1172 .dependencies = featureSet(&[_]Feature{
1173 .zvkb,
1174 .zvksed,
1175 .zvksh,
1176 .zvkt,
1177 }),
1178 };
1179 result[@intFromEnum(Feature.zvksc)] = .{
1180 .llvm_name = "zvksc",
1181 .description = "'Zvksc' (shorthand for 'Zvks' and 'Zvbc')",
1182 .dependencies = featureSet(&[_]Feature{
1183 .zvbc,
1184 .zvks,
1185 }),
1186 };
1187 result[@intFromEnum(Feature.zvksed)] = .{
1188 .llvm_name = "zvksed",
1189 .description = "'Zvksed' (SM4 Block Cipher Instructions)",
1190 .dependencies = featureSet(&[_]Feature{}),
1191 };
1192 result[@intFromEnum(Feature.zvksg)] = .{
1193 .llvm_name = "zvksg",
1194 .description = "'Zvksg' (shorthand for 'Zvks' and 'Zvkg')",
1195 .dependencies = featureSet(&[_]Feature{
1196 .zvkg,
1197 .zvks,
1198 }),
1199 };
1200 result[@intFromEnum(Feature.zvksh)] = .{
1201 .llvm_name = "zvksh",
1202 .description = "'Zvksh' (SM3 Hash Function Instructions)",
1203 .dependencies = featureSet(&[_]Feature{}),
1204 };
1205 result[@intFromEnum(Feature.zvkt)] = .{
1206 .llvm_name = "zvkt",
1207 .description = "'Zvkt' (Vector Data-Independent Execution Latency)",
1208 .dependencies = featureSet(&[_]Feature{}),
1209 };
9841210 result[@intFromEnum(Feature.zvl1024b)] = .{
9851211 .llvm_name = "zvl1024b",
9861212 .description = "'Zvl' (Minimum Vector Length) 1024",
......@@ -1217,6 +1443,77 @@ pub const cpu = struct {
12171443 .zifencei,
12181444 }),
12191445 };
1446 pub const sifive_p450 = CpuModel{
1447 .name = "sifive_p450",
1448 .llvm_name = "sifive-p450",
1449 .features = featureSet(&[_]Feature{
1450 .@"64bit",
1451 .a,
1452 .auipc_addi_fusion,
1453 .c,
1454 .conditional_cmv_fusion,
1455 .d,
1456 .fast_unaligned_access,
1457 .lui_addi_fusion,
1458 .m,
1459 .no_default_unroll,
1460 .za64rs,
1461 .zba,
1462 .zbb,
1463 .zbs,
1464 .zfhmin,
1465 .zic64b,
1466 .zicbom,
1467 .zicbop,
1468 .zicboz,
1469 .ziccamoa,
1470 .ziccif,
1471 .zicclsm,
1472 .ziccrse,
1473 .zifencei,
1474 .zihintntl,
1475 .zihintpause,
1476 .zihpm,
1477 }),
1478 };
1479 pub const sifive_p670 = CpuModel{
1480 .name = "sifive_p670",
1481 .llvm_name = "sifive-p670",
1482 .features = featureSet(&[_]Feature{
1483 .@"64bit",
1484 .a,
1485 .auipc_addi_fusion,
1486 .c,
1487 .conditional_cmv_fusion,
1488 .fast_unaligned_access,
1489 .lui_addi_fusion,
1490 .m,
1491 .no_default_unroll,
1492 .v,
1493 .za64rs,
1494 .zba,
1495 .zbb,
1496 .zbs,
1497 .zfhmin,
1498 .zic64b,
1499 .zicbom,
1500 .zicbop,
1501 .zicboz,
1502 .ziccamoa,
1503 .ziccif,
1504 .zicclsm,
1505 .ziccrse,
1506 .zifencei,
1507 .zihintntl,
1508 .zihintpause,
1509 .zihpm,
1510 .zvbb,
1511 .zvknc,
1512 .zvkng,
1513 .zvksc,
1514 .zvksg,
1515 }),
1516 };
12201517 pub const sifive_s21 = CpuModel{
12211518 .name = "sifive_s21",
12221519 .llvm_name = "sifive-s21",
......@@ -1264,7 +1561,6 @@ pub const cpu = struct {
12641561 .m,
12651562 .no_default_unroll,
12661563 .short_forward_branch_opt,
1267 .xsfcie,
12681564 .zifencei,
12691565 .zihintpause,
12701566 }),
......@@ -1338,4 +1634,56 @@ pub const cpu = struct {
13381634 .zifencei,
13391635 }),
13401636 };
1637 pub const veyron_v1 = CpuModel{
1638 .name = "veyron_v1",
1639 .llvm_name = "veyron-v1",
1640 .features = featureSet(&[_]Feature{
1641 .@"64bit",
1642 .a,
1643 .auipc_addi_fusion,
1644 .c,
1645 .d,
1646 .ld_add_fusion,
1647 .lui_addi_fusion,
1648 .m,
1649 .shifted_zextw_fusion,
1650 .ventana_veyron,
1651 .xventanacondops,
1652 .zba,
1653 .zbb,
1654 .zbc,
1655 .zbs,
1656 .zexth_fusion,
1657 .zextw_fusion,
1658 .zicbom,
1659 .zicbop,
1660 .zicboz,
1661 .zicntr,
1662 .zifencei,
1663 .zihintpause,
1664 .zihpm,
1665 }),
1666 };
1667 pub const xiangshan_nanhu = CpuModel{
1668 .name = "xiangshan_nanhu",
1669 .llvm_name = "xiangshan-nanhu",
1670 .features = featureSet(&[_]Feature{
1671 .@"64bit",
1672 .a,
1673 .c,
1674 .d,
1675 .m,
1676 .svinval,
1677 .zba,
1678 .zbb,
1679 .zbc,
1680 .zbs,
1681 .zicbom,
1682 .zicboz,
1683 .zifencei,
1684 .zkn,
1685 .zksed,
1686 .zksh,
1687 }),
1688 };
13411689};
lib/std/Target/s390x.zig+6
......@@ -5,6 +5,7 @@ const CpuFeature = std.Target.Cpu.Feature;
55const CpuModel = std.Target.Cpu.Model;
66
77pub const Feature = enum {
8 backchain,
89 bear_enhancement,
910 deflate_conversion,
1011 dfp_packed_conversion,
......@@ -57,6 +58,11 @@ pub const all_features = blk: {
5758 const len = @typeInfo(Feature).Enum.fields.len;
5859 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
5960 var result: [len]CpuFeature = undefined;
61 result[@intFromEnum(Feature.backchain)] = .{
62 .llvm_name = "backchain",
63 .description = "Store the address of the caller's frame into the callee's stack frame",
64 .dependencies = featureSet(&[_]Feature{}),
65 };
6066 result[@intFromEnum(Feature.bear_enhancement)] = .{
6167 .llvm_name = "bear-enhancement",
6268 .description = "Assume that the BEAR-enhancement facility is installed",
lib/std/Target/sparc.zig+172-2
......@@ -18,6 +18,34 @@ pub const Feature = enum {
1818 no_fmuls,
1919 no_fsmuld,
2020 popc,
21 reserve_g1,
22 reserve_g2,
23 reserve_g3,
24 reserve_g4,
25 reserve_g5,
26 reserve_g6,
27 reserve_g7,
28 reserve_i0,
29 reserve_i1,
30 reserve_i2,
31 reserve_i3,
32 reserve_i4,
33 reserve_i5,
34 reserve_l0,
35 reserve_l1,
36 reserve_l2,
37 reserve_l3,
38 reserve_l4,
39 reserve_l5,
40 reserve_l6,
41 reserve_l7,
42 reserve_o0,
43 reserve_o1,
44 reserve_o2,
45 reserve_o3,
46 reserve_o4,
47 reserve_o5,
48 slow_rdpc,
2149 soft_float,
2250 soft_mul_div,
2351 v9,
......@@ -100,6 +128,148 @@ pub const all_features = blk: {
100128 .description = "Use the popc (population count) instruction",
101129 .dependencies = featureSet(&[_]Feature{}),
102130 };
131 result[@intFromEnum(Feature.reserve_g1)] = .{
132 .llvm_name = "reserve-g1",
133 .description = "Reserve G1, making it unavailable as a GPR",
134 .dependencies = featureSet(&[_]Feature{}),
135 };
136 result[@intFromEnum(Feature.reserve_g2)] = .{
137 .llvm_name = "reserve-g2",
138 .description = "Reserve G2, making it unavailable as a GPR",
139 .dependencies = featureSet(&[_]Feature{}),
140 };
141 result[@intFromEnum(Feature.reserve_g3)] = .{
142 .llvm_name = "reserve-g3",
143 .description = "Reserve G3, making it unavailable as a GPR",
144 .dependencies = featureSet(&[_]Feature{}),
145 };
146 result[@intFromEnum(Feature.reserve_g4)] = .{
147 .llvm_name = "reserve-g4",
148 .description = "Reserve G4, making it unavailable as a GPR",
149 .dependencies = featureSet(&[_]Feature{}),
150 };
151 result[@intFromEnum(Feature.reserve_g5)] = .{
152 .llvm_name = "reserve-g5",
153 .description = "Reserve G5, making it unavailable as a GPR",
154 .dependencies = featureSet(&[_]Feature{}),
155 };
156 result[@intFromEnum(Feature.reserve_g6)] = .{
157 .llvm_name = "reserve-g6",
158 .description = "Reserve G6, making it unavailable as a GPR",
159 .dependencies = featureSet(&[_]Feature{}),
160 };
161 result[@intFromEnum(Feature.reserve_g7)] = .{
162 .llvm_name = "reserve-g7",
163 .description = "Reserve G7, making it unavailable as a GPR",
164 .dependencies = featureSet(&[_]Feature{}),
165 };
166 result[@intFromEnum(Feature.reserve_i0)] = .{
167 .llvm_name = "reserve-i0",
168 .description = "Reserve I0, making it unavailable as a GPR",
169 .dependencies = featureSet(&[_]Feature{}),
170 };
171 result[@intFromEnum(Feature.reserve_i1)] = .{
172 .llvm_name = "reserve-i1",
173 .description = "Reserve I1, making it unavailable as a GPR",
174 .dependencies = featureSet(&[_]Feature{}),
175 };
176 result[@intFromEnum(Feature.reserve_i2)] = .{
177 .llvm_name = "reserve-i2",
178 .description = "Reserve I2, making it unavailable as a GPR",
179 .dependencies = featureSet(&[_]Feature{}),
180 };
181 result[@intFromEnum(Feature.reserve_i3)] = .{
182 .llvm_name = "reserve-i3",
183 .description = "Reserve I3, making it unavailable as a GPR",
184 .dependencies = featureSet(&[_]Feature{}),
185 };
186 result[@intFromEnum(Feature.reserve_i4)] = .{
187 .llvm_name = "reserve-i4",
188 .description = "Reserve I4, making it unavailable as a GPR",
189 .dependencies = featureSet(&[_]Feature{}),
190 };
191 result[@intFromEnum(Feature.reserve_i5)] = .{
192 .llvm_name = "reserve-i5",
193 .description = "Reserve I5, making it unavailable as a GPR",
194 .dependencies = featureSet(&[_]Feature{}),
195 };
196 result[@intFromEnum(Feature.reserve_l0)] = .{
197 .llvm_name = "reserve-l0",
198 .description = "Reserve L0, making it unavailable as a GPR",
199 .dependencies = featureSet(&[_]Feature{}),
200 };
201 result[@intFromEnum(Feature.reserve_l1)] = .{
202 .llvm_name = "reserve-l1",
203 .description = "Reserve L1, making it unavailable as a GPR",
204 .dependencies = featureSet(&[_]Feature{}),
205 };
206 result[@intFromEnum(Feature.reserve_l2)] = .{
207 .llvm_name = "reserve-l2",
208 .description = "Reserve L2, making it unavailable as a GPR",
209 .dependencies = featureSet(&[_]Feature{}),
210 };
211 result[@intFromEnum(Feature.reserve_l3)] = .{
212 .llvm_name = "reserve-l3",
213 .description = "Reserve L3, making it unavailable as a GPR",
214 .dependencies = featureSet(&[_]Feature{}),
215 };
216 result[@intFromEnum(Feature.reserve_l4)] = .{
217 .llvm_name = "reserve-l4",
218 .description = "Reserve L4, making it unavailable as a GPR",
219 .dependencies = featureSet(&[_]Feature{}),
220 };
221 result[@intFromEnum(Feature.reserve_l5)] = .{
222 .llvm_name = "reserve-l5",
223 .description = "Reserve L5, making it unavailable as a GPR",
224 .dependencies = featureSet(&[_]Feature{}),
225 };
226 result[@intFromEnum(Feature.reserve_l6)] = .{
227 .llvm_name = "reserve-l6",
228 .description = "Reserve L6, making it unavailable as a GPR",
229 .dependencies = featureSet(&[_]Feature{}),
230 };
231 result[@intFromEnum(Feature.reserve_l7)] = .{
232 .llvm_name = "reserve-l7",
233 .description = "Reserve L7, making it unavailable as a GPR",
234 .dependencies = featureSet(&[_]Feature{}),
235 };
236 result[@intFromEnum(Feature.reserve_o0)] = .{
237 .llvm_name = "reserve-o0",
238 .description = "Reserve O0, making it unavailable as a GPR",
239 .dependencies = featureSet(&[_]Feature{}),
240 };
241 result[@intFromEnum(Feature.reserve_o1)] = .{
242 .llvm_name = "reserve-o1",
243 .description = "Reserve O1, making it unavailable as a GPR",
244 .dependencies = featureSet(&[_]Feature{}),
245 };
246 result[@intFromEnum(Feature.reserve_o2)] = .{
247 .llvm_name = "reserve-o2",
248 .description = "Reserve O2, making it unavailable as a GPR",
249 .dependencies = featureSet(&[_]Feature{}),
250 };
251 result[@intFromEnum(Feature.reserve_o3)] = .{
252 .llvm_name = "reserve-o3",
253 .description = "Reserve O3, making it unavailable as a GPR",
254 .dependencies = featureSet(&[_]Feature{}),
255 };
256 result[@intFromEnum(Feature.reserve_o4)] = .{
257 .llvm_name = "reserve-o4",
258 .description = "Reserve O4, making it unavailable as a GPR",
259 .dependencies = featureSet(&[_]Feature{}),
260 };
261 result[@intFromEnum(Feature.reserve_o5)] = .{
262 .llvm_name = "reserve-o5",
263 .description = "Reserve O5, making it unavailable as a GPR",
264 .dependencies = featureSet(&[_]Feature{}),
265 };
266 result[@intFromEnum(Feature.slow_rdpc)] = .{
267 .llvm_name = "slow-rdpc",
268 .description = "rd %pc, %XX is slow",
269 .dependencies = featureSet(&[_]Feature{
270 .v9,
271 }),
272 };
103273 result[@intFromEnum(Feature.soft_float)] = .{
104274 .llvm_name = "soft-float",
105275 .description = "Use software emulation for floating point",
......@@ -407,7 +577,7 @@ pub const cpu = struct {
407577 .llvm_name = "ultrasparc",
408578 .features = featureSet(&[_]Feature{
409579 .deprecated_v8,
410 .v9,
580 .slow_rdpc,
411581 .vis,
412582 }),
413583 };
......@@ -416,7 +586,7 @@ pub const cpu = struct {
416586 .llvm_name = "ultrasparc3",
417587 .features = featureSet(&[_]Feature{
418588 .deprecated_v8,
419 .v9,
589 .slow_rdpc,
420590 .vis,
421591 .vis2,
422592 }),
lib/std/Target/ve.zig+3-1
......@@ -34,6 +34,8 @@ pub const cpu = struct {
3434 pub const generic = CpuModel{
3535 .name = "generic",
3636 .llvm_name = "generic",
37 .features = featureSet(&[_]Feature{}),
37 .features = featureSet(&[_]Feature{
38 .vpu,
39 }),
3840 };
3941};
lib/std/Target/wasm.zig+6
......@@ -9,6 +9,7 @@ pub const Feature = enum {
99 bulk_memory,
1010 exception_handling,
1111 extended_const,
12 multimemory,
1213 multivalue,
1314 mutable_globals,
1415 nontrapping_fptoint,
......@@ -48,6 +49,11 @@ pub const all_features = blk: {
4849 .description = "Enable extended const expressions",
4950 .dependencies = featureSet(&[_]Feature{}),
5051 };
52 result[@intFromEnum(Feature.multimemory)] = .{
53 .llvm_name = "multimemory",
54 .description = "Enable multiple memories",
55 .dependencies = featureSet(&[_]Feature{}),
56 };
5157 result[@intFromEnum(Feature.multivalue)] = .{
5258 .llvm_name = "multivalue",
5359 .description = "Enable multivalue blocks, instructions, and functions",
lib/std/Target/x86.zig+656-21
......@@ -19,6 +19,8 @@ pub const Feature = enum {
1919 amx_int8,
2020 amx_tile,
2121 avx,
22 avx10_1_256,
23 avx10_1_512,
2224 avx2,
2325 avx512bf16,
2426 avx512bitalg,
......@@ -44,6 +46,8 @@ pub const Feature = enum {
4446 bmi,
4547 bmi2,
4648 branchfusion,
49 ccmp,
50 cf,
4751 cldemote,
4852 clflushopt,
4953 clwb,
......@@ -53,8 +57,10 @@ pub const Feature = enum {
5357 crc32,
5458 cx16,
5559 cx8,
60 egpr,
5661 enqcmd,
5762 ermsb,
63 evex512,
5864 f16c,
5965 false_deps_getmant,
6066 false_deps_lzcnt_tzcnt,
......@@ -104,6 +110,7 @@ pub const Feature = enum {
104110 movdir64b,
105111 movdiri,
106112 mwaitx,
113 ndd,
107114 no_bypass_delay,
108115 no_bypass_delay_blend,
109116 no_bypass_delay_mov,
......@@ -114,14 +121,18 @@ pub const Feature = enum {
114121 pconfig,
115122 pku,
116123 popcnt,
124 ppx,
117125 prefer_128_bit,
118126 prefer_256_bit,
119127 prefer_mask_registers,
120128 prefer_movmsk_over_vtest,
129 prefer_no_gather,
130 prefer_no_scatter,
121131 prefetchi,
122132 prefetchwt1,
123133 prfchw,
124134 ptwrite,
135 push2pop2,
125136 raoint,
126137 rdpid,
127138 rdpru,
......@@ -167,6 +178,7 @@ pub const Feature = enum {
167178 uintr,
168179 use_glm_div_sqrt_costs,
169180 use_slm_arith_costs,
181 usermsr,
170182 vaes,
171183 vpclmulqdq,
172184 vzeroupper,
......@@ -276,6 +288,31 @@ pub const all_features = blk: {
276288 .sse4_2,
277289 }),
278290 };
291 result[@intFromEnum(Feature.avx10_1_256)] = .{
292 .llvm_name = "avx10.1-256",
293 .description = "Support AVX10.1 up to 256-bit instruction",
294 .dependencies = featureSet(&[_]Feature{
295 .avx512bf16,
296 .avx512bitalg,
297 .avx512cd,
298 .avx512fp16,
299 .avx512ifma,
300 .avx512vbmi,
301 .avx512vbmi2,
302 .avx512vnni,
303 .avx512vpopcntdq,
304 .vaes,
305 .vpclmulqdq,
306 }),
307 };
308 result[@intFromEnum(Feature.avx10_1_512)] = .{
309 .llvm_name = "avx10.1-512",
310 .description = "Support AVX10.1 up to 512-bit instruction",
311 .dependencies = featureSet(&[_]Feature{
312 .avx10_1_256,
313 .evex512,
314 }),
315 };
279316 result[@intFromEnum(Feature.avx2)] = .{
280317 .llvm_name = "avx2",
281318 .description = "Enable AVX2 instructions",
......@@ -449,6 +486,16 @@ pub const all_features = blk: {
449486 .description = "CMP/TEST can be fused with conditional branches",
450487 .dependencies = featureSet(&[_]Feature{}),
451488 };
489 result[@intFromEnum(Feature.ccmp)] = .{
490 .llvm_name = "ccmp",
491 .description = "Support conditional cmp & test instructions",
492 .dependencies = featureSet(&[_]Feature{}),
493 };
494 result[@intFromEnum(Feature.cf)] = .{
495 .llvm_name = "cf",
496 .description = "Support conditional faulting",
497 .dependencies = featureSet(&[_]Feature{}),
498 };
452499 result[@intFromEnum(Feature.cldemote)] = .{
453500 .llvm_name = "cldemote",
454501 .description = "Enable Cache Line Demote",
......@@ -496,6 +543,11 @@ pub const all_features = blk: {
496543 .description = "Support CMPXCHG8B instructions",
497544 .dependencies = featureSet(&[_]Feature{}),
498545 };
546 result[@intFromEnum(Feature.egpr)] = .{
547 .llvm_name = "egpr",
548 .description = "Support extended general purpose register",
549 .dependencies = featureSet(&[_]Feature{}),
550 };
499551 result[@intFromEnum(Feature.enqcmd)] = .{
500552 .llvm_name = "enqcmd",
501553 .description = "Has ENQCMD instructions",
......@@ -506,6 +558,11 @@ pub const all_features = blk: {
506558 .description = "REP MOVS/STOS are fast",
507559 .dependencies = featureSet(&[_]Feature{}),
508560 };
561 result[@intFromEnum(Feature.evex512)] = .{
562 .llvm_name = "evex512",
563 .description = "Support ZMM and 64-bit mask instructions",
564 .dependencies = featureSet(&[_]Feature{}),
565 };
509566 result[@intFromEnum(Feature.f16c)] = .{
510567 .llvm_name = "f16c",
511568 .description = "Support 16-bit floating point conversion instructions",
......@@ -762,6 +819,11 @@ pub const all_features = blk: {
762819 .description = "Enable MONITORX/MWAITX timer functionality",
763820 .dependencies = featureSet(&[_]Feature{}),
764821 };
822 result[@intFromEnum(Feature.ndd)] = .{
823 .llvm_name = "ndd",
824 .description = "Support non-destructive destination",
825 .dependencies = featureSet(&[_]Feature{}),
826 };
765827 result[@intFromEnum(Feature.no_bypass_delay)] = .{
766828 .llvm_name = "no-bypass-delay",
767829 .description = "Has no bypass delay when using the 'wrong' domain",
......@@ -814,6 +876,11 @@ pub const all_features = blk: {
814876 .description = "Support POPCNT instruction",
815877 .dependencies = featureSet(&[_]Feature{}),
816878 };
879 result[@intFromEnum(Feature.ppx)] = .{
880 .llvm_name = "ppx",
881 .description = "Support Push-Pop Acceleration",
882 .dependencies = featureSet(&[_]Feature{}),
883 };
817884 result[@intFromEnum(Feature.prefer_128_bit)] = .{
818885 .llvm_name = "prefer-128-bit",
819886 .description = "Prefer 128-bit AVX instructions",
......@@ -834,6 +901,16 @@ pub const all_features = blk: {
834901 .description = "Prefer movmsk over vtest instruction",
835902 .dependencies = featureSet(&[_]Feature{}),
836903 };
904 result[@intFromEnum(Feature.prefer_no_gather)] = .{
905 .llvm_name = "prefer-no-gather",
906 .description = "Prefer no gather instructions",
907 .dependencies = featureSet(&[_]Feature{}),
908 };
909 result[@intFromEnum(Feature.prefer_no_scatter)] = .{
910 .llvm_name = "prefer-no-scatter",
911 .description = "Prefer no scatter instructions",
912 .dependencies = featureSet(&[_]Feature{}),
913 };
837914 result[@intFromEnum(Feature.prefetchi)] = .{
838915 .llvm_name = "prefetchi",
839916 .description = "Prefetch instruction with T0 or T1 Hint",
......@@ -854,6 +931,11 @@ pub const all_features = blk: {
854931 .description = "Support ptwrite instruction",
855932 .dependencies = featureSet(&[_]Feature{}),
856933 };
934 result[@intFromEnum(Feature.push2pop2)] = .{
935 .llvm_name = "push2pop2",
936 .description = "Support PUSH2/POP2 instructions",
937 .dependencies = featureSet(&[_]Feature{}),
938 };
857939 result[@intFromEnum(Feature.raoint)] = .{
858940 .llvm_name = "raoint",
859941 .description = "Support RAO-INT instructions",
......@@ -947,7 +1029,7 @@ pub const all_features = blk: {
9471029 .llvm_name = "sha512",
9481030 .description = "Support SHA512 instructions",
9491031 .dependencies = featureSet(&[_]Feature{
950 .avx,
1032 .avx2,
9511033 }),
9521034 };
9531035 result[@intFromEnum(Feature.shstk)] = .{
......@@ -1011,7 +1093,7 @@ pub const all_features = blk: {
10111093 .llvm_name = "sm4",
10121094 .description = "Support SM4 instructions",
10131095 .dependencies = featureSet(&[_]Feature{
1014 .avx,
1096 .avx2,
10151097 }),
10161098 };
10171099 result[@intFromEnum(Feature.soft_float)] = .{
......@@ -1106,12 +1188,17 @@ pub const all_features = blk: {
11061188 .description = "Use Silvermont specific arithmetic costs",
11071189 .dependencies = featureSet(&[_]Feature{}),
11081190 };
1191 result[@intFromEnum(Feature.usermsr)] = .{
1192 .llvm_name = "usermsr",
1193 .description = "Support USERMSR instructions",
1194 .dependencies = featureSet(&[_]Feature{}),
1195 };
11091196 result[@intFromEnum(Feature.vaes)] = .{
11101197 .llvm_name = "vaes",
11111198 .description = "Promote selected AES instructions to AVX512/AVX registers",
11121199 .dependencies = featureSet(&[_]Feature{
11131200 .aes,
1114 .avx,
1201 .avx2,
11151202 }),
11161203 };
11171204 result[@intFromEnum(Feature.vpclmulqdq)] = .{
......@@ -1282,6 +1369,239 @@ pub const cpu = struct {
12821369 .x87,
12831370 }),
12841371 };
1372 pub const arrowlake = CpuModel{
1373 .name = "arrowlake",
1374 .llvm_name = "arrowlake",
1375 .features = featureSet(&[_]Feature{
1376 .@"64bit",
1377 .adx,
1378 .allow_light_256_bit,
1379 .avxifma,
1380 .avxneconvert,
1381 .avxvnni,
1382 .avxvnniint8,
1383 .bmi,
1384 .bmi2,
1385 .cldemote,
1386 .clflushopt,
1387 .clwb,
1388 .cmov,
1389 .cmpccxadd,
1390 .crc32,
1391 .cx16,
1392 .enqcmd,
1393 .f16c,
1394 .false_deps_perm,
1395 .false_deps_popcnt,
1396 .fast_15bytenop,
1397 .fast_gather,
1398 .fast_scalar_fsqrt,
1399 .fast_shld_rotate,
1400 .fast_variable_crosslane_shuffle,
1401 .fast_variable_perlane_shuffle,
1402 .fast_vector_fsqrt,
1403 .fma,
1404 .fsgsbase,
1405 .fxsr,
1406 .gfni,
1407 .hreset,
1408 .idivq_to_divl,
1409 .invpcid,
1410 .lzcnt,
1411 .macrofusion,
1412 .mmx,
1413 .movbe,
1414 .movdir64b,
1415 .movdiri,
1416 .no_bypass_delay_blend,
1417 .no_bypass_delay_mov,
1418 .no_bypass_delay_shuffle,
1419 .nopl,
1420 .pconfig,
1421 .pku,
1422 .popcnt,
1423 .prefer_movmsk_over_vtest,
1424 .prfchw,
1425 .ptwrite,
1426 .rdpid,
1427 .rdrnd,
1428 .rdseed,
1429 .sahf,
1430 .serialize,
1431 .sha,
1432 .shstk,
1433 .slow_3ops_lea,
1434 .tuning_fast_imm_vector_shift,
1435 .uintr,
1436 .vaes,
1437 .vpclmulqdq,
1438 .vzeroupper,
1439 .waitpkg,
1440 .widekl,
1441 .x87,
1442 .xsavec,
1443 .xsaveopt,
1444 .xsaves,
1445 }),
1446 };
1447 pub const arrowlake_s = CpuModel{
1448 .name = "arrowlake_s",
1449 .llvm_name = "arrowlake-s",
1450 .features = featureSet(&[_]Feature{
1451 .@"64bit",
1452 .adx,
1453 .allow_light_256_bit,
1454 .avxifma,
1455 .avxneconvert,
1456 .avxvnni,
1457 .avxvnniint16,
1458 .avxvnniint8,
1459 .bmi,
1460 .bmi2,
1461 .cldemote,
1462 .clflushopt,
1463 .clwb,
1464 .cmov,
1465 .cmpccxadd,
1466 .crc32,
1467 .cx16,
1468 .enqcmd,
1469 .f16c,
1470 .false_deps_perm,
1471 .false_deps_popcnt,
1472 .fast_15bytenop,
1473 .fast_gather,
1474 .fast_scalar_fsqrt,
1475 .fast_shld_rotate,
1476 .fast_variable_crosslane_shuffle,
1477 .fast_variable_perlane_shuffle,
1478 .fast_vector_fsqrt,
1479 .fma,
1480 .fsgsbase,
1481 .fxsr,
1482 .gfni,
1483 .hreset,
1484 .idivq_to_divl,
1485 .invpcid,
1486 .lzcnt,
1487 .macrofusion,
1488 .mmx,
1489 .movbe,
1490 .movdir64b,
1491 .movdiri,
1492 .no_bypass_delay_blend,
1493 .no_bypass_delay_mov,
1494 .no_bypass_delay_shuffle,
1495 .nopl,
1496 .pconfig,
1497 .pku,
1498 .popcnt,
1499 .prefer_movmsk_over_vtest,
1500 .prfchw,
1501 .ptwrite,
1502 .rdpid,
1503 .rdrnd,
1504 .rdseed,
1505 .sahf,
1506 .serialize,
1507 .sha,
1508 .sha512,
1509 .shstk,
1510 .slow_3ops_lea,
1511 .sm3,
1512 .sm4,
1513 .tuning_fast_imm_vector_shift,
1514 .uintr,
1515 .vaes,
1516 .vpclmulqdq,
1517 .vzeroupper,
1518 .waitpkg,
1519 .widekl,
1520 .x87,
1521 .xsavec,
1522 .xsaveopt,
1523 .xsaves,
1524 }),
1525 };
1526 pub const arrowlake_s = CpuModel{
1527 .name = "arrowlake_s",
1528 .llvm_name = "arrowlake_s",
1529 .features = featureSet(&[_]Feature{
1530 .@"64bit",
1531 .adx,
1532 .allow_light_256_bit,
1533 .avxifma,
1534 .avxneconvert,
1535 .avxvnni,
1536 .avxvnniint16,
1537 .avxvnniint8,
1538 .bmi,
1539 .bmi2,
1540 .cldemote,
1541 .clflushopt,
1542 .clwb,
1543 .cmov,
1544 .cmpccxadd,
1545 .crc32,
1546 .cx16,
1547 .enqcmd,
1548 .f16c,
1549 .false_deps_perm,
1550 .false_deps_popcnt,
1551 .fast_15bytenop,
1552 .fast_gather,
1553 .fast_scalar_fsqrt,
1554 .fast_shld_rotate,
1555 .fast_variable_crosslane_shuffle,
1556 .fast_variable_perlane_shuffle,
1557 .fast_vector_fsqrt,
1558 .fma,
1559 .fsgsbase,
1560 .fxsr,
1561 .gfni,
1562 .hreset,
1563 .idivq_to_divl,
1564 .invpcid,
1565 .lzcnt,
1566 .macrofusion,
1567 .mmx,
1568 .movbe,
1569 .movdir64b,
1570 .movdiri,
1571 .no_bypass_delay_blend,
1572 .no_bypass_delay_mov,
1573 .no_bypass_delay_shuffle,
1574 .nopl,
1575 .pconfig,
1576 .pku,
1577 .popcnt,
1578 .prefer_movmsk_over_vtest,
1579 .prfchw,
1580 .ptwrite,
1581 .rdpid,
1582 .rdrnd,
1583 .rdseed,
1584 .sahf,
1585 .serialize,
1586 .sha,
1587 .sha512,
1588 .shstk,
1589 .slow_3ops_lea,
1590 .sm3,
1591 .sm4,
1592 .tuning_fast_imm_vector_shift,
1593 .uintr,
1594 .vaes,
1595 .vpclmulqdq,
1596 .vzeroupper,
1597 .waitpkg,
1598 .widekl,
1599 .x87,
1600 .xsavec,
1601 .xsaveopt,
1602 .xsaves,
1603 }),
1604 };
12851605 pub const athlon = CpuModel{
12861606 .name = "athlon",
12871607 .llvm_name = "athlon",
......@@ -1807,16 +2127,77 @@ pub const cpu = struct {
18072127 .allow_light_256_bit,
18082128 .avx512cd,
18092129 .avx512dq,
1810 .avx512ifma,
1811 .avx512vbmi,
2130 .avx512ifma,
2131 .avx512vbmi,
2132 .avx512vl,
2133 .bmi,
2134 .bmi2,
2135 .clflushopt,
2136 .cmov,
2137 .crc32,
2138 .cx16,
2139 .ermsb,
2140 .evex512,
2141 .fast_15bytenop,
2142 .fast_gather,
2143 .fast_scalar_fsqrt,
2144 .fast_shld_rotate,
2145 .fast_variable_crosslane_shuffle,
2146 .fast_variable_perlane_shuffle,
2147 .fast_vector_fsqrt,
2148 .fsgsbase,
2149 .fxsr,
2150 .idivq_to_divl,
2151 .invpcid,
2152 .lzcnt,
2153 .macrofusion,
2154 .mmx,
2155 .movbe,
2156 .no_bypass_delay_blend,
2157 .no_bypass_delay_mov,
2158 .no_bypass_delay_shuffle,
2159 .nopl,
2160 .pclmul,
2161 .pku,
2162 .popcnt,
2163 .prefer_256_bit,
2164 .prfchw,
2165 .rdrnd,
2166 .rdseed,
2167 .sahf,
2168 .sha,
2169 .slow_3ops_lea,
2170 .tuning_fast_imm_vector_shift,
2171 .vzeroupper,
2172 .x87,
2173 .xsavec,
2174 .xsaveopt,
2175 .xsaves,
2176 }),
2177 };
2178 pub const cascadelake = CpuModel{
2179 .name = "cascadelake",
2180 .llvm_name = "cascadelake",
2181 .features = featureSet(&[_]Feature{
2182 .@"64bit",
2183 .adx,
2184 .aes,
2185 .allow_light_256_bit,
2186 .avx512bw,
2187 .avx512cd,
2188 .avx512dq,
18122189 .avx512vl,
2190 .avx512vnni,
18132191 .bmi,
18142192 .bmi2,
18152193 .clflushopt,
2194 .clwb,
18162195 .cmov,
18172196 .crc32,
18182197 .cx16,
18192198 .ermsb,
2199 .evex512,
2200 .false_deps_popcnt,
18202201 .fast_15bytenop,
18212202 .fast_gather,
18222203 .fast_scalar_fsqrt,
......@@ -1824,6 +2205,7 @@ pub const cpu = struct {
18242205 .fast_variable_crosslane_shuffle,
18252206 .fast_variable_perlane_shuffle,
18262207 .fast_vector_fsqrt,
2208 .faster_shift_than_shuffle,
18272209 .fsgsbase,
18282210 .fxsr,
18292211 .idivq_to_divl,
......@@ -1844,7 +2226,6 @@ pub const cpu = struct {
18442226 .rdrnd,
18452227 .rdseed,
18462228 .sahf,
1847 .sha,
18482229 .slow_3ops_lea,
18492230 .tuning_fast_imm_vector_shift,
18502231 .vzeroupper,
......@@ -1854,27 +2235,30 @@ pub const cpu = struct {
18542235 .xsaves,
18552236 }),
18562237 };
1857 pub const cascadelake = CpuModel{
1858 .name = "cascadelake",
1859 .llvm_name = "cascadelake",
2238 pub const clearwaterforest = CpuModel{
2239 .name = "clearwaterforest",
2240 .llvm_name = "clearwaterforest",
18602241 .features = featureSet(&[_]Feature{
18612242 .@"64bit",
18622243 .adx,
1863 .aes,
18642244 .allow_light_256_bit,
1865 .avx512bw,
1866 .avx512cd,
1867 .avx512dq,
1868 .avx512vl,
1869 .avx512vnni,
2245 .avxifma,
2246 .avxneconvert,
2247 .avxvnni,
2248 .avxvnniint16,
2249 .avxvnniint8,
18702250 .bmi,
18712251 .bmi2,
2252 .cldemote,
18722253 .clflushopt,
18732254 .clwb,
18742255 .cmov,
2256 .cmpccxadd,
18752257 .crc32,
18762258 .cx16,
1877 .ermsb,
2259 .enqcmd,
2260 .f16c,
2261 .false_deps_perm,
18782262 .false_deps_popcnt,
18792263 .fast_15bytenop,
18802264 .fast_gather,
......@@ -1883,30 +2267,49 @@ pub const cpu = struct {
18832267 .fast_variable_crosslane_shuffle,
18842268 .fast_variable_perlane_shuffle,
18852269 .fast_vector_fsqrt,
1886 .faster_shift_than_shuffle,
2270 .fma,
18872271 .fsgsbase,
18882272 .fxsr,
2273 .gfni,
2274 .hreset,
18892275 .idivq_to_divl,
18902276 .invpcid,
18912277 .lzcnt,
18922278 .macrofusion,
18932279 .mmx,
18942280 .movbe,
2281 .movdir64b,
2282 .movdiri,
18952283 .no_bypass_delay_blend,
18962284 .no_bypass_delay_mov,
18972285 .no_bypass_delay_shuffle,
18982286 .nopl,
1899 .pclmul,
2287 .pconfig,
19002288 .pku,
19012289 .popcnt,
1902 .prefer_256_bit,
2290 .prefer_movmsk_over_vtest,
2291 .prefetchi,
19032292 .prfchw,
2293 .ptwrite,
2294 .rdpid,
19042295 .rdrnd,
19052296 .rdseed,
19062297 .sahf,
2298 .serialize,
2299 .sha,
2300 .sha512,
2301 .shstk,
19072302 .slow_3ops_lea,
2303 .sm3,
2304 .sm4,
19082305 .tuning_fast_imm_vector_shift,
2306 .uintr,
2307 .usermsr,
2308 .vaes,
2309 .vpclmulqdq,
19092310 .vzeroupper,
2311 .waitpkg,
2312 .widekl,
19102313 .x87,
19112314 .xsavec,
19122315 .xsaveopt,
......@@ -1934,6 +2337,7 @@ pub const cpu = struct {
19342337 .crc32,
19352338 .cx16,
19362339 .ermsb,
2340 .evex512,
19372341 .false_deps_popcnt,
19382342 .fast_15bytenop,
19392343 .fast_gather,
......@@ -2039,6 +2443,7 @@ pub const cpu = struct {
20392443 .cx16,
20402444 .enqcmd,
20412445 .ermsb,
2446 .evex512,
20422447 .false_deps_getmant,
20432448 .false_deps_mulc,
20442449 .false_deps_mullq,
......@@ -2195,6 +2600,66 @@ pub const cpu = struct {
21952600 .xsaves,
21962601 }),
21972602 };
2603 pub const gracemont = CpuModel{
2604 .name = "gracemont",
2605 .llvm_name = "gracemont",
2606 .features = featureSet(&[_]Feature{
2607 .@"64bit",
2608 .adx,
2609 .avxvnni,
2610 .bmi,
2611 .bmi2,
2612 .cldemote,
2613 .clflushopt,
2614 .clwb,
2615 .cmov,
2616 .crc32,
2617 .cx16,
2618 .f16c,
2619 .false_deps_popcnt,
2620 .fast_15bytenop,
2621 .fast_scalar_fsqrt,
2622 .fast_variable_perlane_shuffle,
2623 .fast_vector_fsqrt,
2624 .fma,
2625 .fsgsbase,
2626 .fxsr,
2627 .gfni,
2628 .hreset,
2629 .idivl_to_divb,
2630 .idivq_to_divl,
2631 .invpcid,
2632 .lzcnt,
2633 .macrofusion,
2634 .mmx,
2635 .movbe,
2636 .movdir64b,
2637 .movdiri,
2638 .nopl,
2639 .pconfig,
2640 .pku,
2641 .popcnt,
2642 .prfchw,
2643 .ptwrite,
2644 .rdpid,
2645 .rdrnd,
2646 .rdseed,
2647 .sahf,
2648 .serialize,
2649 .sha,
2650 .shstk,
2651 .slow_3ops_lea,
2652 .vaes,
2653 .vpclmulqdq,
2654 .vzeroupper,
2655 .waitpkg,
2656 .widekl,
2657 .x87,
2658 .xsavec,
2659 .xsaveopt,
2660 .xsaves,
2661 }),
2662 };
21982663 pub const grandridge = CpuModel{
21992664 .name = "grandridge",
22002665 .llvm_name = "grandridge",
......@@ -2235,7 +2700,6 @@ pub const cpu = struct {
22352700 .popcnt,
22362701 .prfchw,
22372702 .ptwrite,
2238 .raoint,
22392703 .rdpid,
22402704 .rdrnd,
22412705 .rdseed,
......@@ -2289,6 +2753,7 @@ pub const cpu = struct {
22892753 .cx16,
22902754 .enqcmd,
22912755 .ermsb,
2756 .evex512,
22922757 .false_deps_getmant,
22932758 .false_deps_mulc,
22942759 .false_deps_mullq,
......@@ -2376,6 +2841,7 @@ pub const cpu = struct {
23762841 .cx16,
23772842 .enqcmd,
23782843 .ermsb,
2844 .evex512,
23792845 .false_deps_getmant,
23802846 .false_deps_mulc,
23812847 .false_deps_mullq,
......@@ -2537,6 +3003,7 @@ pub const cpu = struct {
25373003 .crc32,
25383004 .cx16,
25393005 .ermsb,
3006 .evex512,
25403007 .fast_15bytenop,
25413008 .fast_gather,
25423009 .fast_scalar_fsqrt,
......@@ -2601,6 +3068,7 @@ pub const cpu = struct {
26013068 .crc32,
26023069 .cx16,
26033070 .ermsb,
3071 .evex512,
26043072 .fast_15bytenop,
26053073 .fast_gather,
26063074 .fast_scalar_fsqrt,
......@@ -2760,6 +3228,7 @@ pub const cpu = struct {
27603228 .cmov,
27613229 .crc32,
27623230 .cx16,
3231 .evex512,
27633232 .fast_gather,
27643233 .fast_movbe,
27653234 .fsgsbase,
......@@ -2801,6 +3270,7 @@ pub const cpu = struct {
28013270 .cmov,
28023271 .crc32,
28033272 .cx16,
3273 .evex512,
28043274 .fast_gather,
28053275 .fast_movbe,
28063276 .fsgsbase,
......@@ -2836,6 +3306,85 @@ pub const cpu = struct {
28363306 .vzeroupper,
28373307 }),
28383308 };
3309 pub const lunarlake = CpuModel{
3310 .name = "lunarlake",
3311 .llvm_name = "lunarlake",
3312 .features = featureSet(&[_]Feature{
3313 .@"64bit",
3314 .adx,
3315 .allow_light_256_bit,
3316 .avxifma,
3317 .avxneconvert,
3318 .avxvnni,
3319 .avxvnniint16,
3320 .avxvnniint8,
3321 .bmi,
3322 .bmi2,
3323 .cldemote,
3324 .clflushopt,
3325 .clwb,
3326 .cmov,
3327 .cmpccxadd,
3328 .crc32,
3329 .cx16,
3330 .enqcmd,
3331 .f16c,
3332 .false_deps_perm,
3333 .false_deps_popcnt,
3334 .fast_15bytenop,
3335 .fast_gather,
3336 .fast_scalar_fsqrt,
3337 .fast_shld_rotate,
3338 .fast_variable_crosslane_shuffle,
3339 .fast_variable_perlane_shuffle,
3340 .fast_vector_fsqrt,
3341 .fma,
3342 .fsgsbase,
3343 .fxsr,
3344 .gfni,
3345 .hreset,
3346 .idivq_to_divl,
3347 .invpcid,
3348 .lzcnt,
3349 .macrofusion,
3350 .mmx,
3351 .movbe,
3352 .movdir64b,
3353 .movdiri,
3354 .no_bypass_delay_blend,
3355 .no_bypass_delay_mov,
3356 .no_bypass_delay_shuffle,
3357 .nopl,
3358 .pconfig,
3359 .pku,
3360 .popcnt,
3361 .prefer_movmsk_over_vtest,
3362 .prfchw,
3363 .ptwrite,
3364 .rdpid,
3365 .rdrnd,
3366 .rdseed,
3367 .sahf,
3368 .serialize,
3369 .sha,
3370 .sha512,
3371 .shstk,
3372 .slow_3ops_lea,
3373 .sm3,
3374 .sm4,
3375 .tuning_fast_imm_vector_shift,
3376 .uintr,
3377 .vaes,
3378 .vpclmulqdq,
3379 .vzeroupper,
3380 .waitpkg,
3381 .widekl,
3382 .x87,
3383 .xsavec,
3384 .xsaveopt,
3385 .xsaves,
3386 }),
3387 };
28393388 pub const meteorlake = CpuModel{
28403389 .name = "meteorlake",
28413390 .llvm_name = "meteorlake",
......@@ -2979,6 +3528,86 @@ pub const cpu = struct {
29793528 .x87,
29803529 }),
29813530 };
3531 pub const pantherlake = CpuModel{
3532 .name = "pantherlake",
3533 .llvm_name = "pantherlake",
3534 .features = featureSet(&[_]Feature{
3535 .@"64bit",
3536 .adx,
3537 .allow_light_256_bit,
3538 .avxifma,
3539 .avxneconvert,
3540 .avxvnni,
3541 .avxvnniint16,
3542 .avxvnniint8,
3543 .bmi,
3544 .bmi2,
3545 .cldemote,
3546 .clflushopt,
3547 .clwb,
3548 .cmov,
3549 .cmpccxadd,
3550 .crc32,
3551 .cx16,
3552 .enqcmd,
3553 .f16c,
3554 .false_deps_perm,
3555 .false_deps_popcnt,
3556 .fast_15bytenop,
3557 .fast_gather,
3558 .fast_scalar_fsqrt,
3559 .fast_shld_rotate,
3560 .fast_variable_crosslane_shuffle,
3561 .fast_variable_perlane_shuffle,
3562 .fast_vector_fsqrt,
3563 .fma,
3564 .fsgsbase,
3565 .fxsr,
3566 .gfni,
3567 .hreset,
3568 .idivq_to_divl,
3569 .invpcid,
3570 .lzcnt,
3571 .macrofusion,
3572 .mmx,
3573 .movbe,
3574 .movdir64b,
3575 .movdiri,
3576 .no_bypass_delay_blend,
3577 .no_bypass_delay_mov,
3578 .no_bypass_delay_shuffle,
3579 .nopl,
3580 .pconfig,
3581 .pku,
3582 .popcnt,
3583 .prefer_movmsk_over_vtest,
3584 .prefetchi,
3585 .prfchw,
3586 .ptwrite,
3587 .rdpid,
3588 .rdrnd,
3589 .rdseed,
3590 .sahf,
3591 .serialize,
3592 .sha,
3593 .sha512,
3594 .shstk,
3595 .slow_3ops_lea,
3596 .sm3,
3597 .sm4,
3598 .tuning_fast_imm_vector_shift,
3599 .uintr,
3600 .vaes,
3601 .vpclmulqdq,
3602 .vzeroupper,
3603 .waitpkg,
3604 .widekl,
3605 .x87,
3606 .xsavec,
3607 .xsaveopt,
3608 .xsaves,
3609 }),
3610 };
29823611 pub const penryn = CpuModel{
29833612 .name = "penryn",
29843613 .llvm_name = "penryn",
......@@ -3211,6 +3840,7 @@ pub const cpu = struct {
32113840 .crc32,
32123841 .cx16,
32133842 .ermsb,
3843 .evex512,
32143844 .fast_15bytenop,
32153845 .fast_gather,
32163846 .fast_scalar_fsqrt,
......@@ -3309,6 +3939,7 @@ pub const cpu = struct {
33093939 .cx16,
33103940 .enqcmd,
33113941 .ermsb,
3942 .evex512,
33123943 .false_deps_getmant,
33133944 .false_deps_mulc,
33143945 .false_deps_mullq,
......@@ -3479,6 +4110,7 @@ pub const cpu = struct {
34794110 .crc32,
34804111 .cx16,
34814112 .ermsb,
4113 .evex512,
34824114 .false_deps_popcnt,
34834115 .fast_15bytenop,
34844116 .fast_gather,
......@@ -3589,6 +4221,7 @@ pub const cpu = struct {
35894221 .crc32,
35904222 .cx16,
35914223 .ermsb,
4224 .evex512,
35924225 .false_deps_popcnt,
35934226 .fast_15bytenop,
35944227 .fast_gather,
......@@ -3684,6 +4317,7 @@ pub const cpu = struct {
36844317 .crc32,
36854318 .cx16,
36864319 .ermsb,
4320 .evex512,
36874321 .fast_15bytenop,
36884322 .fast_gather,
36894323 .fast_scalar_fsqrt,
......@@ -3904,6 +4538,7 @@ pub const cpu = struct {
39044538 .cmov,
39054539 .crc32,
39064540 .cx16,
4541 .evex512,
39074542 .false_deps_popcnt,
39084543 .fast_15bytenop,
39094544 .fast_gather,
......@@ -4056,7 +4691,6 @@ pub const cpu = struct {
40564691 .@"64bit",
40574692 .adx,
40584693 .allow_light_256_bit,
4059 .avx2,
40604694 .bmi,
40614695 .bmi2,
40624696 .branchfusion,
......@@ -4134,6 +4768,7 @@ pub const cpu = struct {
41344768 .cmov,
41354769 .crc32,
41364770 .cx16,
4771 .evex512,
41374772 .fast_15bytenop,
41384773 .fast_bextr,
41394774 .fast_lzcnt,
tools/update_cpu_features.zig+16
......@@ -183,6 +183,10 @@ const llvm_targets = [_]LlvmTarget{
183183 .llvm_name = "apple-a16",
184184 .flatten = true,
185185 },
186 .{
187 .llvm_name = "apple-a17",
188 .flatten = true,
189 },
186190 .{
187191 .llvm_name = "apple-a7-sysreg",
188192 .flatten = true,
......@@ -207,6 +211,10 @@ const llvm_targets = [_]LlvmTarget{
207211 .llvm_name = "cortex-x3",
208212 .flatten = true,
209213 },
214 .{
215 .llvm_name = "cortex-x4",
216 .flatten = true,
217 },
210218 .{
211219 .llvm_name = "falkor",
212220 .flatten = true,
......@@ -257,6 +265,10 @@ const llvm_targets = [_]LlvmTarget{
257265 .llvm_name = "ampere1",
258266 .flatten = true,
259267 },
268 .{
269 .llvm_name = "ampere1b",
270 .flatten = true,
271 },
260272 },
261273 .extra_cpus = &.{
262274 .{
......@@ -681,6 +693,10 @@ const llvm_targets = [_]LlvmTarget{
681693 .llvm_name = "armv9.4-a",
682694 .zig_name = "v9_4a",
683695 },
696 .{
697 .llvm_name = "armv9.5-a",
698 .zig_name = "v9_5a",
699 },
684700 .{
685701 .llvm_name = "armv9-a",
686702 .zig_name = "v9a",